Adds INF2_ISTOGGLEABLE skill flag (#6737)
* Adds the INF2_ISTOGGLEABLE skill flag which is used to enable or disable a skill's status. When toggled off the skill doesn't consume HP/SP. Thanks to @Lemongrass3110!
This commit is contained in:
parent
7c275f3130
commit
0323aa37c8
@ -1977,6 +1977,7 @@ Body:
|
|||||||
IgnoreKagehumi: true
|
IgnoreKagehumi: true
|
||||||
AllowOnMado: true
|
AllowOnMado: true
|
||||||
IgnoreWugBite: true
|
IgnoreWugBite: true
|
||||||
|
Toggleable: true
|
||||||
Range: 1
|
Range: 1
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
@ -4097,6 +4098,7 @@ Body:
|
|||||||
NoDamage: true
|
NoDamage: true
|
||||||
Flags:
|
Flags:
|
||||||
AllowOnMado: true
|
AllowOnMado: true
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
Duration1:
|
Duration1:
|
||||||
@ -4729,6 +4731,7 @@ Body:
|
|||||||
Flags:
|
Flags:
|
||||||
IgnoreKagehumi: true
|
IgnoreKagehumi: true
|
||||||
IgnoreWugBite: true
|
IgnoreWugBite: true
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
Duration1:
|
Duration1:
|
||||||
@ -5078,6 +5081,7 @@ Body:
|
|||||||
NoDamage: true
|
NoDamage: true
|
||||||
Flags:
|
Flags:
|
||||||
IsQuest: true
|
IsQuest: true
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
Duration1: 600000
|
Duration1: 600000
|
||||||
@ -6757,6 +6761,8 @@ Body:
|
|||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
|
Flags:
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
Duration1: 300000
|
Duration1: 300000
|
||||||
@ -9952,6 +9958,8 @@ Body:
|
|||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
IgnoreFlee: true
|
IgnoreFlee: true
|
||||||
|
Flags:
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
CastCancel: true
|
CastCancel: true
|
||||||
@ -10632,6 +10640,7 @@ Body:
|
|||||||
NoDamage: true
|
NoDamage: true
|
||||||
Flags:
|
Flags:
|
||||||
IgnoreKagehumi: true
|
IgnoreKagehumi: true
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
CastTime: 1200
|
CastTime: 1200
|
||||||
@ -11256,6 +11265,8 @@ Body:
|
|||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
|
Flags:
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
Knockback: 4
|
Knockback: 4
|
||||||
@ -11307,6 +11318,8 @@ Body:
|
|||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
|
Flags:
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
Requires:
|
Requires:
|
||||||
@ -11352,6 +11365,8 @@ Body:
|
|||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
|
Flags:
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
Requires:
|
Requires:
|
||||||
@ -11395,6 +11410,8 @@ Body:
|
|||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
|
Flags:
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
Requires:
|
Requires:
|
||||||
@ -11441,6 +11458,8 @@ Body:
|
|||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
|
Flags:
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
Requires:
|
Requires:
|
||||||
@ -11876,6 +11895,8 @@ Body:
|
|||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
|
Flags:
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
AfterCastActDelay: 1000
|
AfterCastActDelay: 1000
|
||||||
@ -14080,6 +14101,8 @@ Body:
|
|||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
|
Flags:
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
Element: Weapon
|
Element: Weapon
|
||||||
@ -16955,6 +16978,7 @@ Body:
|
|||||||
NoDamage: true
|
NoDamage: true
|
||||||
Flags:
|
Flags:
|
||||||
IsQuest: true
|
IsQuest: true
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
Knockback: 2
|
Knockback: 2
|
||||||
Duration1: 300000
|
Duration1: 300000
|
||||||
@ -32850,6 +32874,8 @@ Body:
|
|||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
|
Flags:
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
AfterCastActDelay: 800
|
AfterCastActDelay: 800
|
||||||
@ -32865,6 +32891,8 @@ Body:
|
|||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
|
Flags:
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
Duration1: 300000
|
Duration1: 300000
|
||||||
|
@ -1980,6 +1980,7 @@ Body:
|
|||||||
AllowWhenHidden: true
|
AllowWhenHidden: true
|
||||||
IgnoreKagehumi: true
|
IgnoreKagehumi: true
|
||||||
IgnoreWugBite: true
|
IgnoreWugBite: true
|
||||||
|
Toggleable: true
|
||||||
Range: 1
|
Range: 1
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
@ -4322,6 +4323,7 @@ Body:
|
|||||||
NoDamage: true
|
NoDamage: true
|
||||||
Flags:
|
Flags:
|
||||||
AllowOnMado: true
|
AllowOnMado: true
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
Duration1:
|
Duration1:
|
||||||
@ -4974,6 +4976,7 @@ Body:
|
|||||||
Flags:
|
Flags:
|
||||||
IgnoreKagehumi: true
|
IgnoreKagehumi: true
|
||||||
IgnoreWugBite: true
|
IgnoreWugBite: true
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
Duration1:
|
Duration1:
|
||||||
@ -5341,6 +5344,7 @@ Body:
|
|||||||
NoDamage: true
|
NoDamage: true
|
||||||
Flags:
|
Flags:
|
||||||
IsQuest: true
|
IsQuest: true
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
Duration1: 600000
|
Duration1: 600000
|
||||||
@ -7127,6 +7131,8 @@ Body:
|
|||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
|
Flags:
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
Duration1: 300000
|
Duration1: 300000
|
||||||
@ -7408,6 +7414,8 @@ Body:
|
|||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
|
Flags:
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
AfterCastActDelay: 800
|
AfterCastActDelay: 800
|
||||||
@ -10232,6 +10240,8 @@ Body:
|
|||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
IgnoreFlee: true
|
IgnoreFlee: true
|
||||||
|
Flags:
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
CastCancel: true
|
CastCancel: true
|
||||||
@ -10899,6 +10909,7 @@ Body:
|
|||||||
NoDamage: true
|
NoDamage: true
|
||||||
Flags:
|
Flags:
|
||||||
IgnoreKagehumi: true
|
IgnoreKagehumi: true
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
CastTime: 500
|
CastTime: 500
|
||||||
@ -11528,6 +11539,8 @@ Body:
|
|||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
|
Flags:
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
Knockback: 4
|
Knockback: 4
|
||||||
@ -11601,6 +11614,8 @@ Body:
|
|||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
|
Flags:
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
Requires:
|
Requires:
|
||||||
@ -11646,6 +11661,8 @@ Body:
|
|||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
|
Flags:
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
Requires:
|
Requires:
|
||||||
@ -11689,6 +11706,8 @@ Body:
|
|||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
|
Flags:
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
Requires:
|
Requires:
|
||||||
@ -11735,6 +11754,8 @@ Body:
|
|||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
|
Flags:
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
Requires:
|
Requires:
|
||||||
@ -12175,6 +12196,8 @@ Body:
|
|||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
|
Flags:
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
Duration1: 600000
|
Duration1: 600000
|
||||||
@ -14395,6 +14418,8 @@ Body:
|
|||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
|
Flags:
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
Element: Weapon
|
Element: Weapon
|
||||||
@ -17930,6 +17955,7 @@ Body:
|
|||||||
NoDamage: true
|
NoDamage: true
|
||||||
Flags:
|
Flags:
|
||||||
IsQuest: true
|
IsQuest: true
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
Duration1: 900000
|
Duration1: 900000
|
||||||
Duration2: 5000
|
Duration2: 5000
|
||||||
@ -20349,6 +20375,7 @@ Body:
|
|||||||
Flags:
|
Flags:
|
||||||
IgnoreKagehumi: true
|
IgnoreKagehumi: true
|
||||||
IgnoreWugBite: true
|
IgnoreWugBite: true
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
AfterCastActDelay: 2000
|
AfterCastActDelay: 2000
|
||||||
@ -21564,6 +21591,7 @@ Body:
|
|||||||
Flags:
|
Flags:
|
||||||
AllowOnWarg: true
|
AllowOnWarg: true
|
||||||
IncreaseDanceWithWugDamage: true
|
IncreaseDanceWithWugDamage: true
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
Element: Weapon
|
Element: Weapon
|
||||||
@ -21698,6 +21726,7 @@ Body:
|
|||||||
Flags:
|
Flags:
|
||||||
IgnoreKagehumi: true
|
IgnoreKagehumi: true
|
||||||
IgnoreWugBite: true
|
IgnoreWugBite: true
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
Duration1: 10000
|
Duration1: 10000
|
||||||
@ -30068,6 +30097,8 @@ Body:
|
|||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
|
Flags:
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
CastCancel: true
|
CastCancel: true
|
||||||
@ -30145,6 +30176,8 @@ Body:
|
|||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
|
Flags:
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
CastCancel: true
|
CastCancel: true
|
||||||
@ -30300,6 +30333,8 @@ Body:
|
|||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
|
Flags:
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
CastCancel: true
|
CastCancel: true
|
||||||
@ -30507,6 +30542,8 @@ Body:
|
|||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
|
Flags:
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
CastCancel: true
|
CastCancel: true
|
||||||
@ -31204,6 +31241,8 @@ Body:
|
|||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
|
Flags:
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
CastCancel: true
|
CastCancel: true
|
||||||
@ -31291,6 +31330,7 @@ Body:
|
|||||||
TargetType: Self
|
TargetType: Self
|
||||||
Flags:
|
Flags:
|
||||||
AllowWhenHidden: true
|
AllowWhenHidden: true
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
Duration1: 200000
|
Duration1: 200000
|
||||||
@ -36212,6 +36252,8 @@ Body:
|
|||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
|
Flags:
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
CastCancel: true
|
CastCancel: true
|
||||||
@ -36228,6 +36270,8 @@ Body:
|
|||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
Splash: true
|
Splash: true
|
||||||
|
Flags:
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
SplashArea: 10
|
SplashArea: 10
|
||||||
@ -43012,6 +43056,8 @@ Body:
|
|||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
|
Flags:
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
AfterCastActDelay: 800
|
AfterCastActDelay: 800
|
||||||
@ -43028,6 +43074,8 @@ Body:
|
|||||||
TargetType: Self
|
TargetType: Self
|
||||||
DamageFlags:
|
DamageFlags:
|
||||||
NoDamage: true
|
NoDamage: true
|
||||||
|
Flags:
|
||||||
|
Toggleable: true
|
||||||
Hit: Single
|
Hit: Single
|
||||||
HitCount: 1
|
HitCount: 1
|
||||||
Duration1: 300000
|
Duration1: 300000
|
||||||
|
@ -103,6 +103,7 @@ IgnoreAutoGuard - Not blocked by SC_AUTOGUARD (When TargetType is Weapon only
|
|||||||
IgnoreCicada - Not blocked by SC_UTSUSEMI or SC_BUNSINJYUTSU (When TargetType is Weapon only).
|
IgnoreCicada - Not blocked by SC_UTSUSEMI or SC_BUNSINJYUTSU (When TargetType is Weapon only).
|
||||||
ShowScale - Shows AoE area while casting
|
ShowScale - Shows AoE area while casting
|
||||||
IgnoreGtb - Not blocked by Golden Thief Bug card.
|
IgnoreGtb - Not blocked by Golden Thief Bug card.
|
||||||
|
Toggleable - Skill can be toggled on and off. When toggled off the skill doesn't consume HP/SP.
|
||||||
|
|
||||||
---------------------------------------
|
---------------------------------------
|
||||||
|
|
||||||
|
@ -8394,6 +8394,7 @@
|
|||||||
export_constant(INF2_IGNORECICADA);
|
export_constant(INF2_IGNORECICADA);
|
||||||
export_constant(INF2_SHOWSCALE);
|
export_constant(INF2_SHOWSCALE);
|
||||||
export_constant(INF2_IGNOREGTB);
|
export_constant(INF2_IGNOREGTB);
|
||||||
|
export_constant(INF2_TOGGLEABLE);
|
||||||
|
|
||||||
/* skill no near npc flags */
|
/* skill no near npc flags */
|
||||||
export_constant(SKILL_NONEAR_WARPPORTAL);
|
export_constant(SKILL_NONEAR_WARPPORTAL);
|
||||||
|
@ -16693,7 +16693,7 @@ bool skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_i
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
//Checks if disabling skill - in which case no SP requirements are necessary
|
//Checks if disabling skill - in which case no SP requirements are necessary
|
||||||
if( sc && skill_disable_check(sc,skill_id))
|
if( sc && skill_disable_check(*sc,skill_id))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
std::bitset<INF2_MAX> inf2 = skill_db.find(skill_id)->inf2;
|
std::bitset<INF2_MAX> inf2 = skill_db.find(skill_id)->inf2;
|
||||||
@ -18032,7 +18032,7 @@ struct s_skill_condition skill_get_requirement(struct map_session_data* sd, uint
|
|||||||
sc = NULL;
|
sc = NULL;
|
||||||
|
|
||||||
//Checks if disabling skill - in which case no SP requirements are necessary
|
//Checks if disabling skill - in which case no SP requirements are necessary
|
||||||
if( sc && skill_disable_check(sc,skill_id) )
|
if( sc && skill_disable_check(*sc,skill_id) )
|
||||||
return req;
|
return req;
|
||||||
|
|
||||||
skill_lv = cap_value(skill_lv, 1, MAX_SKILL_LEVEL);
|
skill_lv = cap_value(skill_lv, 1, MAX_SKILL_LEVEL);
|
||||||
@ -22917,61 +22917,29 @@ int skill_block_check(struct block_list *bl, sc_type type , uint16 skill_id) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Determines whether a skill is currently active or not
|
/**
|
||||||
* Used for purposes of cancelling SP usage when disabling a skill
|
* Determines whether a skill is currently active or not. Used for purposes of cancelling HP/SP usage when disabling a skill.
|
||||||
|
* @param sc: Status changes active on target
|
||||||
|
* @param skill_id: Skill to toggle
|
||||||
|
* @return True on success or false otherwise
|
||||||
*/
|
*/
|
||||||
int skill_disable_check(struct status_change *sc, uint16 skill_id)
|
bool skill_disable_check(status_change &sc, uint16 skill_id) {
|
||||||
{
|
std::shared_ptr<s_skill_db> skill = skill_db.find(skill_id);
|
||||||
enum sc_type type = skill_get_sc(skill_id);
|
|
||||||
|
|
||||||
if (type <= SC_NONE || type >= SC_MAX)
|
if (skill == nullptr || skill->sc <= SC_NONE || skill->sc >= SC_MAX)
|
||||||
return 0;
|
return false;
|
||||||
switch( skill_id ) { //HP & SP Consumption Check
|
|
||||||
case BS_MAXIMIZE:
|
|
||||||
case NV_TRICKDEAD:
|
|
||||||
case TF_HIDING:
|
|
||||||
case AS_CLOAKING:
|
|
||||||
case GC_CLOAKINGEXCEED:
|
|
||||||
case ST_CHASEWALK:
|
|
||||||
case CR_DEFENDER:
|
|
||||||
case CR_SHRINK:
|
|
||||||
case CR_AUTOGUARD:
|
|
||||||
case ML_DEFENDER:
|
|
||||||
case ML_AUTOGUARD:
|
|
||||||
case PA_GOSPEL:
|
|
||||||
case GS_GATLINGFEVER:
|
|
||||||
case TK_READYCOUNTER:
|
|
||||||
case TK_READYDOWN:
|
|
||||||
case TK_READYSTORM:
|
|
||||||
case TK_READYTURN:
|
|
||||||
case TK_RUN:
|
|
||||||
case SG_FUSION:
|
|
||||||
case KO_YAMIKUMO:
|
|
||||||
case RA_WUGDASH:
|
|
||||||
case RA_CAMOUFLAGE:
|
|
||||||
case SJ_LUNARSTANCE:
|
|
||||||
case SJ_STARSTANCE:
|
|
||||||
case SJ_UNIVERSESTANCE:
|
|
||||||
case SJ_SUNSTANCE:
|
|
||||||
case SP_SOULCOLLECT:
|
|
||||||
case IG_GUARD_STANCE:
|
|
||||||
case IG_ATTACK_STANCE:
|
|
||||||
if( sc->data[type] )
|
|
||||||
return 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
|
if (skill->inf2[INF2_TOGGLEABLE]) {
|
||||||
|
if (sc.data[skill->sc])
|
||||||
|
return true;
|
||||||
// These 2 skills contain a master and are not correctly pulled using skill_get_sc
|
// These 2 skills contain a master and are not correctly pulled using skill_get_sc
|
||||||
case NC_NEUTRALBARRIER:
|
if (skill->nameid == NC_NEUTRALBARRIER && sc.data[SC_NEUTRALBARRIER_MASTER])
|
||||||
if( sc->data[SC_NEUTRALBARRIER_MASTER] )
|
return true;
|
||||||
return 1;
|
if (skill->nameid == NC_STEALTHFIELD && sc.data[SC_STEALTHFIELD_MASTER])
|
||||||
break;
|
return true;
|
||||||
case NC_STEALTHFIELD:
|
|
||||||
if( sc->data[SC_STEALTHFIELD_MASTER] )
|
|
||||||
return 1;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int skill_get_elemental_type( uint16 skill_id , uint16 skill_lv ) {
|
int skill_get_elemental_type( uint16 skill_id , uint16 skill_lv ) {
|
||||||
|
@ -26,6 +26,7 @@ struct homun_data;
|
|||||||
struct skill_unit;
|
struct skill_unit;
|
||||||
struct s_skill_unit_group;
|
struct s_skill_unit_group;
|
||||||
struct status_change_entry;
|
struct status_change_entry;
|
||||||
|
struct status_change;
|
||||||
|
|
||||||
#define MAX_SKILL_PRODUCE_DB 300 /// Max Produce DB
|
#define MAX_SKILL_PRODUCE_DB 300 /// Max Produce DB
|
||||||
#define MAX_PRODUCE_RESOURCE 12 /// Max Produce requirements
|
#define MAX_PRODUCE_RESOURCE 12 /// Max Produce requirements
|
||||||
@ -108,6 +109,7 @@ enum e_skill_inf2 : uint8 {
|
|||||||
INF2_IGNORECICADA, // Skill is not blocked by SC_UTSUSEMI or SC_BUNSINJYUTSU (physical-skill only)
|
INF2_IGNORECICADA, // Skill is not blocked by SC_UTSUSEMI or SC_BUNSINJYUTSU (physical-skill only)
|
||||||
INF2_SHOWSCALE, // Skill shows AoE area while casting
|
INF2_SHOWSCALE, // Skill shows AoE area while casting
|
||||||
INF2_IGNOREGTB, // Skill ignores effect of GTB
|
INF2_IGNOREGTB, // Skill ignores effect of GTB
|
||||||
|
INF2_TOGGLEABLE, // Skill can be toggled on and off (won't consume HP/SP when toggled off)
|
||||||
INF2_MAX,
|
INF2_MAX,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -612,7 +614,7 @@ bool skill_check_condition_castend(struct map_session_data *sd, uint16 skill_id,
|
|||||||
int skill_check_condition_char_sub (struct block_list *bl, va_list ap);
|
int skill_check_condition_char_sub (struct block_list *bl, va_list ap);
|
||||||
void skill_consume_requirement(struct map_session_data *sd, uint16 skill_id, uint16 skill_lv, short type);
|
void skill_consume_requirement(struct map_session_data *sd, uint16 skill_id, uint16 skill_lv, short type);
|
||||||
struct s_skill_condition skill_get_requirement(struct map_session_data *sd, uint16 skill_id, uint16 skill_lv);
|
struct s_skill_condition skill_get_requirement(struct map_session_data *sd, uint16 skill_id, uint16 skill_lv);
|
||||||
int skill_disable_check(struct status_change *sc, uint16 skill_id);
|
bool skill_disable_check(status_change &sc, uint16 skill_id);
|
||||||
bool skill_pos_maxcount_check(struct block_list *src, int16 x, int16 y, uint16 skill_id, uint16 skill_lv, enum bl_type type, bool display_failure);
|
bool skill_pos_maxcount_check(struct block_list *src, int16 x, int16 y, uint16 skill_id, uint16 skill_lv, enum bl_type type, bool display_failure);
|
||||||
|
|
||||||
int skill_check_pc_partner(struct map_session_data *sd, uint16 skill_id, uint16 *skill_lv, int range, int cast_flag);
|
int skill_check_pc_partner(struct map_session_data *sd, uint16 skill_id, uint16 *skill_lv, int range, int cast_flag);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user