Fixed bonus crit_atk_rate not being applied - Fixes bugreport:7846

Weapon Perfection now modifies size damage - Fixes bugreport:7813
Water Ball now checks for obstacles - Fixes bugreport:7426
Re-added the somehow lost Banishing Point hit rate fix
This commit is contained in:
Akinari1087 2013-07-18 00:24:40 -04:00
parent 3beb7833f9
commit 8ebb789db6
2 changed files with 11 additions and 7 deletions

View File

@ -1523,10 +1523,9 @@ int battle_addmastery(struct map_session_data *sd,struct block_list *target,int
#ifdef RENEWAL #ifdef RENEWAL
static int battle_calc_sizefix(int damage, struct map_session_data *sd, unsigned char t_size, unsigned char weapon_type, short flag) static int battle_calc_sizefix(int damage, struct map_session_data *sd, unsigned char t_size, unsigned char weapon_type, short flag)
{ {
if (sd) if (sd) {
{
//SizeFix only for players //SizeFix only for players
if (!(sd->special_state.no_sizefix) || flag) if (!(sd->special_state.no_sizefix) && !flag)
DAMAGE_RATE(weapon_type==EQI_HAND_L? DAMAGE_RATE(weapon_type==EQI_HAND_L?
sd->left_weapon.atkmods[t_size]: sd->left_weapon.atkmods[t_size]:
sd->right_weapon.atkmods[t_size]) sd->right_weapon.atkmods[t_size])
@ -2064,6 +2063,9 @@ static bool is_attack_hitting(struct Damage wd, struct block_list *src, struct b
if( sd && pc_checkskill(sd, GN_REMODELING_CART) ) if( sd && pc_checkskill(sd, GN_REMODELING_CART) )
hitrate += pc_checkskill(sd, GN_REMODELING_CART) * 4; hitrate += pc_checkskill(sd, GN_REMODELING_CART) * 4;
break; break;
case LG_BANISHINGPOINT:
hitrate += 3 * skill_lv;
break;
case GC_VENOMPRESSURE: case GC_VENOMPRESSURE:
hitrate += 10 + 4 * skill_lv; hitrate += 10 + 4 * skill_lv;
break; break;
@ -4365,9 +4367,9 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl
#ifdef RENEWAL #ifdef RENEWAL
if(is_attack_critical(wd, src, target, skill_id, skill_lv, false)) { if(is_attack_critical(wd, src, target, skill_id, skill_lv, false)) {
if(sd) // check for player so we don't crash out, monsters don't have bonus crit rates [helvetica] if(sd) // check for player so we don't crash out, monsters don't have bonus crit rates [helvetica]
wd.damage = (int32)floor((double)wd.damage * 1.4 * ((100 + sd->bonus.crit_atk_rate) / 100)); wd.damage = (int)floor((double)(wd.damage * 1.4 * (100 + sd->bonus.crit_atk_rate)) / 100);
else else
wd.damage = (int32)floor((double)wd.damage * 1.4); wd.damage = (int)floor((double)wd.damage * 1.4);
} }
#endif #endif

View File

@ -3283,9 +3283,11 @@ static int skill_timerskill(int tid, unsigned int tick, int id, intptr_t data)
break; break;
case WZ_WATERBALL: case WZ_WATERBALL:
skill_toggle_magicpower(src, skl->skill_id); // only the first hit will be amplify skill_toggle_magicpower(src, skl->skill_id); // only the first hit will be amplify
if (!status_isdead(target)) // Official behaviour is to hit as long as there is a line of sight, regardless of distance
range = path_search_long(NULL,src->m,src->x,src->y,target->x,target->y,CELL_CHKNOREACH);
if (!status_isdead(target) && range)
skill_attack(BF_MAGIC,src,src,target,skl->skill_id,skl->skill_lv,tick,skl->flag); skill_attack(BF_MAGIC,src,src,target,skl->skill_id,skl->skill_lv,tick,skl->flag);
if (skl->type>1 && !status_isdead(target) && !status_isdead(src)) { if (skl->type>1 && !status_isdead(target) && !status_isdead(src) && range) {
skill_addtimerskill(src,tick+125,target->id,0,0,skl->skill_id,skl->skill_lv,skl->type-1,skl->flag); skill_addtimerskill(src,tick+125,target->id,0,0,skl->skill_id,skl->skill_lv,skl->type-1,skl->flag);
} else { } else {
struct status_change *sc = status_get_sc(src); struct status_change *sc = status_get_sc(src);