From 24ecebcaf38084192f5220c9cef127d6186b0f1c Mon Sep 17 00:00:00 2001 From: Aleos Date: Tue, 24 Mar 2020 18:33:01 -0400 Subject: [PATCH] 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! --- db/re/skill_db.yml | 4 ++-- src/map/battle.cpp | 18 +++++++++++----- src/map/skill.cpp | 52 ++++++++++++++++++++++++++++------------------ 3 files changed, 47 insertions(+), 27 deletions(-) diff --git a/db/re/skill_db.yml b/db/re/skill_db.yml index 0d523b5d82..25f0481b53 100644 --- a/db/re/skill_db.yml +++ b/db/re/skill_db.yml @@ -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 diff --git a/src/map/battle.cpp b/src/map/battle.cpp index 81e1b0d88f..d69a541168 100644 --- a/src/map/battle.cpp +++ b/src/map/battle.cpp @@ -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; diff --git a/src/map/skill.cpp b/src/map/skill.cpp index de2a16aab8..5c830427e9 100755 --- a/src/map/skill.cpp +++ b/src/map/skill.cpp @@ -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: