Corrected Eleanor's Eternal Quick Combo behavior (fixes #1568)

* Adjusted skill type to misc.
* Added missing damage calculation.
* Corrected the Equipment ATK reduction.
* Moved the Stun addition and Tinder Breaker removal to skill_additional_effect.
This commit is contained in:
aleos89
2016-09-28 13:59:40 -04:00
parent 7be38fa70f
commit f4f4367c52
6 changed files with 26 additions and 14 deletions

View File

@@ -1411,7 +1411,7 @@
8035,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, MH_ANGRIFFS_MODUS,Attack Mode
8036,3:4:5:6:7,6,1,0,0,0,5,1,no,0,0x0200,0,weapon,0,0x0, MH_TINDER_BREAKER,Tinder Breaker
8037,1,6,4,0,0,0,5,1,no,0,0x200,0,weapon,0,0x0, MH_CBC,Continual Break Combo
8038,1,6,4,0,0,0,5,1,no,0,0x200,0,weapon,0,0x0, MH_EQC,Eternal Quick Combo
8038,1,6,4,0,0,0,5,1,no,0,0x200,0,misc,0,0x0, MH_EQC,Eternal Quick Combo
8039,0,6,4,3,0x2,1:1:1:2:2,5,1,no,0,0,0,weapon,0,0x0, MH_MAGMA_FLOW,Magma Flow
8040,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, MH_GRANITIC_ARMOR,Granitic Armor
8041,7,6,2,3,0x2,0,5,1,no,0,0,1,weapon,0,0x0, MH_LAVA_SLIDE,Lava Slide

View File

@@ -1418,7 +1418,7 @@
8035,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, MH_ANGRIFFS_MODUS,Attack Mode
8036,3:4:5:6:7,6,1,0,0,0,5,1,no,0,0x0200,0,weapon,0,0x0, MH_TINDER_BREAKER,Tinder Breaker
8037,1,6,4,0,0,0,5,1,no,0,0x200,0,weapon,0,0x0, MH_CBC,Continual Break Combo
8038,1,6,4,0,0,0,5,1,no,0,0x200,0,weapon,0,0x0, MH_EQC,Eternal Quick Combo
8038,1,6,4,0,0,0,5,1,no,0,0x200,0,misc,0,0x0, MH_EQC,Eternal Quick Combo
8039,0,6,4,3,0x2,1:1:1:2:2,5,1,no,0,0,0,weapon,0,0x0, MH_MAGMA_FLOW,Magma Flow
8040,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, MH_GRANITIC_ARMOR,Granitic Armor
8041,7,6,2,3,0x2,0,5,1,no,0,0,1,weapon,0,0x0, MH_LAVA_SLIDE,Lava Slide

View File

@@ -2251,8 +2251,8 @@ SC_EQC (SI_EQC)
desc:
val1:
val2: -% Def
val3: -% Atk
val4: -%MaxHP
val3: -%MaxHP
val4:
SC_GOLDENE_FERSE (SI_GOLDENE_FERSE)
desc:

View File

@@ -4449,6 +4449,12 @@ struct Damage battle_attack_sc_bonus(struct Damage wd, struct block_list *src, s
ATK_ADD(wd.damage, wd.damage2, 200);
#ifdef RENEWAL
ATK_ADD(wd.equipAtk, wd.equipAtk2, 200);
#endif
}
if (sc->data[SC_EQC]) {
ATK_ADDRATE(wd.damage, wd.damage2, -sc->data[SC_EQC]->val2);
#ifdef RENEWAL
ATK_ADDRATE(wd.equipAtk, wd.equipAtk2, -sc->data[SC_EQC]->val2);
#endif
}
if(sc->data[SC_STYLE_CHANGE]) {
@@ -6543,6 +6549,9 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
// kRO 2014-02-12: Damage: Caster's DEX, Target's current HP, Skill Level
md.damage = ((200 + status_get_dex(src)) * skill_lv * 10) + sstatus->hp; // (custom)
break;
case MH_EQC:
md.damage = max(tstatus->hp - sstatus->hp, 0);
break;
}
if (nk&NK_SPLASHSPLIT) { // Divide ATK among targets

View File

@@ -1684,6 +1684,16 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1
case KO_MAKIBISHI:
sc_start(src,bl, SC_STUN, 10 * skill_lv, skill_lv, skill_get_time2(skill_id,skill_lv));
break;
case MH_EQC:
{
struct homun_data *hd = BL_CAST(BL_HOM, src);
if (hd) {
sc_start2(src, bl, SC_STUN, 100, skill_lv, bl->id, 1000 * hd->homunculus.level / 50 + 500 * skill_lv);
status_change_end(bl, SC_TINDER_BREAKER2, INVALID_TIMER);
}
}
break;
case MH_LAVA_SLIDE:
sc_start4(src,bl, SC_BURNING, 10 * skill_lv, skill_lv, 1000, src->id, 0, skill_get_time2(skill_id, skill_lv));
break;

View File

@@ -575,7 +575,7 @@ void initChangeTables(void)
set_sc(MH_TINDER_BREAKER , SC_TINDER_BREAKER2 , SI_TINDER_BREAKER , SCB_FLEE );
set_sc(MH_TINDER_BREAKER , SC_TINDER_BREAKER , SI_TINDER_BREAKER_POSTDELAY , SCB_FLEE );
set_sc(MH_CBC , SC_CBC , SI_CBC , SCB_FLEE );
set_sc(MH_EQC , SC_EQC , SI_EQC , SCB_DEF2|SCB_BATK|SCB_MAXHP );
set_sc(MH_EQC , SC_EQC , SI_EQC , SCB_DEF2|SCB_MAXHP );
add_sc( MER_CRASH , SC_STUN );
set_sc( MER_PROVOKE , SC_PROVOKE , SI_PROVOKE , SCB_DEF|SCB_DEF2|SCB_BATK|SCB_WATK );
@@ -2948,7 +2948,7 @@ static int status_get_hpbonus(struct block_list *bl, enum e_status_bonus type) {
if(sc->data[SC_GT_CHANGE]) // Max HP decrease: [Skill Level x 4] %
bonus -= (4 * sc->data[SC_GT_CHANGE]->val1);
if(sc->data[SC_EQC])
bonus -= sc->data[SC_EQC]->val4;
bonus -= sc->data[SC_EQC]->val3;
}
// Max rate reduce is -100%
bonus = cap_value(bonus,-100,INT_MAX);
@@ -5602,8 +5602,6 @@ static unsigned short status_calc_batk(struct block_list *bl, struct status_chan
batk += 100 * sc->data[SC_SATURDAYNIGHTFEVER]->val1;
if( sc->data[SC_ZANGETSU] )
batk += sc->data[SC_ZANGETSU]->val2;
if(sc->data[SC_EQC])
batk -= batk * sc->data[SC_EQC]->val3 / 100;
if(sc->data[SC_QUEST_BUFF1])
batk += sc->data[SC_QUEST_BUFF1]->val1;
if(sc->data[SC_QUEST_BUFF2])
@@ -8814,9 +8812,6 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
status_change_end(bl,SC_FOOD_DEX_CASH,INVALID_TIMER);
status_change_end(bl,SC_FOOD_LUK_CASH,INVALID_TIMER);
break;
case SC_EQC:
status_change_end(bl,SC_TINDER_BREAKER2,INVALID_TIMER);
break;
case SC_FIGHTINGSPIRIT:
case SC_OVERED_BOOST:
case SC_MAGICPOWER:
@@ -10435,9 +10430,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
break;
case SC_EQC:
val2 = 5 * val1; // def % reduc
val3 = 5 * val1; // atk % reduc
val4 = 2 * val1; // HP drain %
sc_start2(src, bl,SC_STUN,100,val1,bl->id,(1000*status_get_lv(src))/50+500*val1);
val3 = 2 * val1; // HP drain %
break;
case SC_ASH:
val2 = 0; // hit % reduc