Guillotine Fist SP Recovery Prevention Cleanup (#8443)
- Unified code for SC_EXTREMITYFIST * It stops natural SP recovery for 300s in pre-re * It stops natural SP recovery and recovery from items for 3s and shows icon in renewal - Removed SC_EXTREMITYFIST2 as it's no longer needed - Fixed an issue that caused a natural SP regen tick to happen right after using Guillotine Fist - Fixes #8377
This commit is contained in:
parent
d191c2cf2a
commit
566ac2078d
@ -7359,7 +7359,7 @@ Body:
|
|||||||
Time: 1500
|
Time: 1500
|
||||||
- Level: 5
|
- Level: 5
|
||||||
Time: 1000
|
Time: 1000
|
||||||
Duration2: 300000
|
Duration1: 300000
|
||||||
Requires:
|
Requires:
|
||||||
SpCost: 1
|
SpCost: 1
|
||||||
Weapon:
|
Weapon:
|
||||||
|
@ -7699,7 +7699,6 @@ Body:
|
|||||||
- Level: 5
|
- Level: 5
|
||||||
Time: 1000
|
Time: 1000
|
||||||
Duration1: 3000
|
Duration1: 3000
|
||||||
Duration2: 300000
|
|
||||||
FixedCastTime:
|
FixedCastTime:
|
||||||
- Level: 1
|
- Level: 1
|
||||||
Time: 2000
|
Time: 2000
|
||||||
|
@ -1009,6 +1009,7 @@ Body:
|
|||||||
Flags:
|
Flags:
|
||||||
SendOption: true
|
SendOption: true
|
||||||
- Status: Extremityfist
|
- Status: Extremityfist
|
||||||
|
Icon: EFST_EXTREMITYFIST
|
||||||
DurationLookup: MO_EXTREMITYFIST
|
DurationLookup: MO_EXTREMITYFIST
|
||||||
CalcFlags:
|
CalcFlags:
|
||||||
Regen: true
|
Regen: true
|
||||||
@ -6117,14 +6118,6 @@ Body:
|
|||||||
NoBanishingBuster: true
|
NoBanishingBuster: true
|
||||||
NoDispell: true
|
NoDispell: true
|
||||||
RemoveOnHermode: true
|
RemoveOnHermode: true
|
||||||
- Status: Extremityfist2
|
|
||||||
Icon: EFST_EXTREMITYFIST
|
|
||||||
DurationLookup: MO_EXTREMITYFIST
|
|
||||||
Flags:
|
|
||||||
NoRemoveOnDead: true
|
|
||||||
NoDispell: true
|
|
||||||
NoBanishingBuster: true
|
|
||||||
NoClearance: true
|
|
||||||
- Status: Mtf_Aspd2
|
- Status: Mtf_Aspd2
|
||||||
Icon: EFST_MTF_ASPD2
|
Icon: EFST_MTF_ASPD2
|
||||||
CalcFlags:
|
CalcFlags:
|
||||||
|
@ -10623,7 +10623,7 @@ int pc_itemheal(map_session_data *sd, t_itemid itemid, int hp, int sp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef RENEWAL
|
#ifdef RENEWAL
|
||||||
if (sd->sc.getSCE(SC_EXTREMITYFIST2))
|
if (sd->sc.getSCE(SC_EXTREMITYFIST))
|
||||||
sp = 0;
|
sp = 0;
|
||||||
#endif
|
#endif
|
||||||
if (sd->sc.getSCE(SC_BITESCAR))
|
if (sd->sc.getSCE(SC_BITESCAR))
|
||||||
|
@ -6073,7 +6073,7 @@ BUILDIN_FUNC(percentheal)
|
|||||||
return SCRIPT_CMD_SUCCESS;
|
return SCRIPT_CMD_SUCCESS;
|
||||||
|
|
||||||
#ifdef RENEWAL
|
#ifdef RENEWAL
|
||||||
if( sd->sc.getSCE(SC_EXTREMITYFIST2) )
|
if( sd->sc.getSCE(SC_EXTREMITYFIST) )
|
||||||
sp = 0;
|
sp = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1912,7 +1912,6 @@
|
|||||||
export_constant(SC_HIDDEN_CARD);
|
export_constant(SC_HIDDEN_CARD);
|
||||||
export_constant(SC_PERIOD_RECEIVEITEM_2ND);
|
export_constant(SC_PERIOD_RECEIVEITEM_2ND);
|
||||||
export_constant(SC_PERIOD_PLUSEXP_2ND);
|
export_constant(SC_PERIOD_PLUSEXP_2ND);
|
||||||
export_constant(SC_EXTREMITYFIST2);
|
|
||||||
export_constant(SC_POWERUP);
|
export_constant(SC_POWERUP);
|
||||||
export_constant(SC_AGIUP);
|
export_constant(SC_AGIUP);
|
||||||
export_constant(SC_PROTECTION);
|
export_constant(SC_PROTECTION);
|
||||||
|
@ -2529,11 +2529,7 @@ int skill_onskillusage(map_session_data *sd, struct block_list *bl, uint16 skill
|
|||||||
|
|
||||||
/* Splitted off from skill_additional_effect, which is never called when the
|
/* Splitted off from skill_additional_effect, which is never called when the
|
||||||
* attack skill kills the enemy. Place in this function counter status effects
|
* attack skill kills the enemy. Place in this function counter status effects
|
||||||
* when using skills (eg: Asura's sp regen penalty, or counter-status effects
|
* when using skills that will take effect on the source, not the target. [Skotlex]
|
||||||
* from cards) that will take effect on the source, not the target. [Skotlex]
|
|
||||||
* Note: Currently this function only applies to Extremity Fist and BF_WEAPON
|
|
||||||
* type of skills, so not every instance of skill_additional_effect needs a call
|
|
||||||
* to this one.
|
|
||||||
*/
|
*/
|
||||||
int skill_counter_additional_effect (struct block_list* src, struct block_list *bl, uint16 skill_id, uint16 skill_lv, int attack_type, t_tick tick)
|
int skill_counter_additional_effect (struct block_list* src, struct block_list *bl, uint16 skill_id, uint16 skill_lv, int attack_type, t_tick tick)
|
||||||
{
|
{
|
||||||
@ -2581,9 +2577,6 @@ int skill_counter_additional_effect (struct block_list* src, struct block_list *
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch(skill_id) {
|
switch(skill_id) {
|
||||||
case MO_EXTREMITYFIST:
|
|
||||||
sc_start(src,src,SC_EXTREMITYFIST,100,skill_lv,skill_get_time2(skill_id,skill_lv));
|
|
||||||
break;
|
|
||||||
case GS_FULLBUSTER:
|
case GS_FULLBUSTER:
|
||||||
sc_start(src,src,SC_BLIND,2*skill_lv,skill_lv,skill_get_time2(skill_id,skill_lv));
|
sc_start(src,src,SC_BLIND,2*skill_lv,skill_lv,skill_get_time2(skill_id,skill_lv));
|
||||||
break;
|
break;
|
||||||
@ -5522,11 +5515,9 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
|||||||
skill_attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag);
|
skill_attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag);
|
||||||
if (skill_id == MO_EXTREMITYFIST) {
|
if (skill_id == MO_EXTREMITYFIST) {
|
||||||
status_set_sp(src, 0, 0);
|
status_set_sp(src, 0, 0);
|
||||||
|
sc_start(src, src, SC_EXTREMITYFIST, 100, skill_lv, skill_get_time(skill_id, skill_lv));
|
||||||
status_change_end(src, SC_EXPLOSIONSPIRITS);
|
status_change_end(src, SC_EXPLOSIONSPIRITS);
|
||||||
status_change_end(src, SC_BLADESTOP);
|
status_change_end(src, SC_BLADESTOP);
|
||||||
#ifdef RENEWAL
|
|
||||||
sc_start(src,src,SC_EXTREMITYFIST2,100,skill_lv,skill_get_time(skill_id,skill_lv));
|
|
||||||
#endif
|
|
||||||
} else {
|
} else {
|
||||||
status_set_hp(src, 1, 0);
|
status_set_hp(src, 1, 0);
|
||||||
status_change_end(src, SC_NEN);
|
status_change_end(src, SC_NEN);
|
||||||
@ -9553,7 +9544,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|||||||
clif_skill_nodamage(nullptr,bl,MG_SRECOVERY,sp,1);
|
clif_skill_nodamage(nullptr,bl,MG_SRECOVERY,sp,1);
|
||||||
if (tsc) {
|
if (tsc) {
|
||||||
#ifdef RENEWAL
|
#ifdef RENEWAL
|
||||||
if (tsc->getSCE(SC_EXTREMITYFIST2))
|
if (tsc->getSCE(SC_EXTREMITYFIST))
|
||||||
sp = 0;
|
sp = 0;
|
||||||
#endif
|
#endif
|
||||||
if (tsc->getSCE(SC_NORECOVER_STATE)) {
|
if (tsc->getSCE(SC_NORECOVER_STATE)) {
|
||||||
@ -10306,7 +10297,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|||||||
#ifdef RENEWAL
|
#ifdef RENEWAL
|
||||||
sp1 = sp1 / 2;
|
sp1 = sp1 / 2;
|
||||||
sp2 = sp2 / 2;
|
sp2 = sp2 / 2;
|
||||||
if (tsc && tsc->getSCE(SC_EXTREMITYFIST2))
|
if (tsc && tsc->getSCE(SC_EXTREMITYFIST))
|
||||||
sp1 = tstatus->sp;
|
sp1 = tstatus->sp;
|
||||||
#endif
|
#endif
|
||||||
if (tsc && tsc->getSCE(SC_NORECOVER_STATE))
|
if (tsc && tsc->getSCE(SC_NORECOVER_STATE))
|
||||||
@ -13488,15 +13479,9 @@ TIMER_FUNC(skill_castend_id){
|
|||||||
//Consume SP/spheres
|
//Consume SP/spheres
|
||||||
skill_consume_requirement(sd,ud->skill_id, ud->skill_lv,1);
|
skill_consume_requirement(sd,ud->skill_id, ud->skill_lv,1);
|
||||||
status_set_sp(src, 0, 0);
|
status_set_sp(src, 0, 0);
|
||||||
sc = &sd->sc;
|
sc_start(src, src, SC_EXTREMITYFIST, 100, ud->skill_lv, skill_get_time(ud->skill_id, ud->skill_lv));
|
||||||
if (sc->count)
|
status_change_end(src, SC_EXPLOSIONSPIRITS);
|
||||||
{ //End states
|
status_change_end(src, SC_BLADESTOP);
|
||||||
status_change_end(src, SC_EXPLOSIONSPIRITS);
|
|
||||||
status_change_end(src, SC_BLADESTOP);
|
|
||||||
#ifdef RENEWAL
|
|
||||||
sc_start(src,src, SC_EXTREMITYFIST2, 100, ud->skill_lv, skill_get_time(ud->skill_id, ud->skill_lv));
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
if( target && target->m == src->m ) { //Move character to target anyway.
|
if( target && target->m == src->m ) { //Move character to target anyway.
|
||||||
short x, y;
|
short x, y;
|
||||||
short dir = map_calc_dir(src,target->x,target->y);
|
short dir = map_calc_dir(src,target->x,target->y);
|
||||||
|
@ -12992,6 +12992,8 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
|||||||
case SC_BERSERK:
|
case SC_BERSERK:
|
||||||
case SC_MERC_HPUP:
|
case SC_MERC_HPUP:
|
||||||
case SC_MERC_SPUP:
|
case SC_MERC_SPUP:
|
||||||
|
// Status needs to be updated immediately and not at the end of the damage
|
||||||
|
case SC_EXTREMITYFIST:
|
||||||
status_calc_bl_(bl, calc_flag, SCO_FORCE);
|
status_calc_bl_(bl, calc_flag, SCO_FORCE);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -756,7 +756,7 @@ enum sc_type : int16 {
|
|||||||
/* Guild Aura */
|
/* Guild Aura */
|
||||||
SC_LEADERSHIP,
|
SC_LEADERSHIP,
|
||||||
SC_GLORYWOUNDS,
|
SC_GLORYWOUNDS,
|
||||||
SC_SOULCOLD, //508
|
SC_SOULCOLD,
|
||||||
SC_HAWKEYES,
|
SC_HAWKEYES,
|
||||||
/* ... */
|
/* ... */
|
||||||
SC_ODINS_POWER,
|
SC_ODINS_POWER,
|
||||||
@ -779,7 +779,7 @@ enum sc_type : int16 {
|
|||||||
/* Max HP & SP */
|
/* Max HP & SP */
|
||||||
SC_INCMHP,
|
SC_INCMHP,
|
||||||
SC_INCMSP,
|
SC_INCMSP,
|
||||||
SC_PARTYFLEE, // 531
|
SC_PARTYFLEE,
|
||||||
/**
|
/**
|
||||||
* Kagerou & Oboro [malufett]
|
* Kagerou & Oboro [malufett]
|
||||||
**/
|
**/
|
||||||
@ -1307,8 +1307,8 @@ enum sc_type : int16 {
|
|||||||
SC_PERIOD_RECEIVEITEM_2ND,
|
SC_PERIOD_RECEIVEITEM_2ND,
|
||||||
SC_PERIOD_PLUSEXP_2ND,
|
SC_PERIOD_PLUSEXP_2ND,
|
||||||
|
|
||||||
SC_EXTREMITYFIST2,
|
//SC_EXTREMITYFIST2,
|
||||||
SC_POWERUP,
|
SC_POWERUP = 951,
|
||||||
SC_AGIUP,
|
SC_AGIUP,
|
||||||
SC_PROTECTION,
|
SC_PROTECTION,
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user