Fixes Brandish Spear from renewal balance (#4711)

* Fixes #4707.
* Follow up to ea8da71.
* Skill now applies long range damage.
* Skill now does 3 hits.
* Target's placement in the AoE does not affect damage; it's all the same for each target.
* Updates strength bonus.
* Reverts Mercenary Brandish Spear to pre-renewal effects.
Thanks to @violent01 and @mrjnumber1!
This commit is contained in:
Aleos 2020-03-24 18:33:01 -04:00 committed by GitHub
parent 0021b6d577
commit 24ecebcaf3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 47 additions and 27 deletions

View File

@ -2113,8 +2113,8 @@ Body:
Flags:
IncreaseGloomyDayDamage: true
Range: -2
Hit: Single
HitCount: 1
Hit: Multi_Hit
HitCount: 3
Element: Weapon
SplashArea: 2
ActiveInstance: 5

View File

@ -3630,13 +3630,16 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
case KN_SPEARBOOMERANG:
skillratio += 50 * skill_lv;
break;
case KN_BRANDISHSPEAR:
case ML_BRANDISH: {
#ifdef RENEWAL
int ratio = 100 + 20 * skill_lv + sstatus->str; // !TODO: Confirm STR role
case KN_BRANDISHSPEAR:
skillratio += -100 + 400 + 100 * skill_lv + sstatus->str * 3;
break;
#else
int ratio = 100 + 20 * skill_lv;
case KN_BRANDISHSPEAR:
#endif
case ML_BRANDISH:
{
int ratio = 100 + 20 * skill_lv;
skillratio += -100 + ratio;
if(skill_lv > 3 && wd->miscflag == 0)
@ -3651,8 +3654,8 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
skillratio += ratio / 4;
if(skill_lv > 9 && wd->miscflag == 2)
skillratio += ratio / 2;
break;
}
break;
case KN_BOWLINGBASH:
case MS_BOWLINGBASH:
skillratio += 40 * skill_lv;
@ -5487,6 +5490,11 @@ static struct Damage initialize_weapon_data(struct block_list *src, struct block
wd.blewcount = 0;
break;
#ifdef RENEWAL
case KN_BRANDISHSPEAR:
wd.flag |= BF_LONG;
break;
#endif
case KN_AUTOCOUNTER:
wd.flag = (wd.flag&~BF_SKILLMASK)|BF_NORMAL;
break;

View File

@ -5328,7 +5328,13 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
}
break;
#ifndef RENEWAL
case KN_BRANDISHSPEAR:
skill_attack(skill_get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, flag);
break;
#else
case KN_BRANDISHSPEAR:
#endif
case ML_BRANDISH:
//Coded apart for it needs the flag passed to the damage calculation.
if (skill_area_temp[1] != bl->id)
@ -7618,31 +7624,37 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
skill_castend_damage_id(src, src, skill_id, skill_lv, tick, flag);
break;
#ifdef RENEWAL
case KN_BRANDISHSPEAR:
map_foreachindir(skill_area_sub, src->m, src->x, src->y, bl->x, bl->y,
skill_get_splash(skill_id, skill_lv), skill_get_maxcount(skill_id, skill_lv), 0, splash_target(src),
src, skill_id, skill_lv, tick, flag | BCT_ENEMY | 0,
skill_castend_damage_id);
#else
case KN_BRANDISHSPEAR:
#endif
case ML_BRANDISH:
{
skill_area_temp[1] = bl->id;
skill_area_temp[1] = bl->id;
if(skill_lv >= 10)
map_foreachindir(skill_area_sub, src->m, src->x, src->y, bl->x, bl->y,
skill_get_splash(skill_id, skill_lv), 1, skill_get_maxcount(skill_id, skill_lv)-1, splash_target(src),
src, skill_id, skill_lv, tick, flag | BCT_ENEMY | (sd?3:0),
skill_castend_damage_id);
if(skill_lv >= 7)
map_foreachindir(skill_area_sub, src->m, src->x, src->y, bl->x, bl->y,
skill_get_splash(skill_id, skill_lv), 1, skill_get_maxcount(skill_id, skill_lv)-2, splash_target(src),
src, skill_id, skill_lv, tick, flag | BCT_ENEMY | (sd?2:0),
skill_castend_damage_id);
if(skill_lv >= 4)
map_foreachindir(skill_area_sub, src->m, src->x, src->y, bl->x, bl->y,
skill_get_splash(skill_id, skill_lv), 1, skill_get_maxcount(skill_id, skill_lv)-3, splash_target(src),
src, skill_id, skill_lv, tick, flag | BCT_ENEMY | (sd?1:0),
skill_castend_damage_id);
if(skill_lv >= 10)
map_foreachindir(skill_area_sub, src->m, src->x, src->y, bl->x, bl->y,
skill_get_splash(skill_id, skill_lv), skill_get_maxcount(skill_id, skill_lv)-3, 0, splash_target(src),
src, skill_id, skill_lv, tick, flag | BCT_ENEMY | 0,
skill_get_splash(skill_id, skill_lv), 1, skill_get_maxcount(skill_id, skill_lv)-1, splash_target(src),
src, skill_id, skill_lv, tick, flag | BCT_ENEMY | (sd?3:0),
skill_castend_damage_id);
}
if(skill_lv >= 7)
map_foreachindir(skill_area_sub, src->m, src->x, src->y, bl->x, bl->y,
skill_get_splash(skill_id, skill_lv), 1, skill_get_maxcount(skill_id, skill_lv)-2, splash_target(src),
src, skill_id, skill_lv, tick, flag | BCT_ENEMY | (sd?2:0),
skill_castend_damage_id);
if(skill_lv >= 4)
map_foreachindir(skill_area_sub, src->m, src->x, src->y, bl->x, bl->y,
skill_get_splash(skill_id, skill_lv), 1, skill_get_maxcount(skill_id, skill_lv)-3, splash_target(src),
src, skill_id, skill_lv, tick, flag | BCT_ENEMY | (sd?1:0),
skill_castend_damage_id);
map_foreachindir(skill_area_sub, src->m, src->x, src->y, bl->x, bl->y,
skill_get_splash(skill_id, skill_lv), skill_get_maxcount(skill_id, skill_lv)-3, 0, splash_target(src),
src, skill_id, skill_lv, tick, flag | BCT_ENEMY | 0,
skill_castend_damage_id);
break;
case WZ_SIGHTRASHER: