Adds EndOnEnd node to status database (#7313)
* Any status defined under EndOnEnd will be removed when the status becomes inactive. * Renames End to EndOnStart. * Removes some hard coded statuses. * Includes YamlUpgrade Tool update to rename End -> EndOnStart. Thanks to @Lemongrass3110!
This commit is contained in:
parent
bc2afbdfc2
commit
8073d4e084
@ -35,10 +35,11 @@
|
||||
# MinRate Minimum rate after status change reduction (10000 = 100%). (Default: 0)
|
||||
# MinDuration Minimum duration in milliseconds after status change reduction. (Default: 1)
|
||||
# Fail: List of Status Changes that causes the status to fail to activate. (Optional)
|
||||
# End: List of Status Changes that will end when the status activates. (Optional)
|
||||
# EndOnStart: List of Status Changes that will end when the status activates. (Optional)
|
||||
# EndReturn: List of Status Changes that will end when the status activates and won't give its effect. (Optional)
|
||||
# EndOnEnd: List of Status Changes that will end when the status becomes inactive. (Optional)
|
||||
###########################################################################
|
||||
|
||||
Header:
|
||||
Type: STATUS_DB
|
||||
Version: 2
|
||||
Version: 3
|
||||
|
@ -35,13 +35,14 @@
|
||||
# MinRate Minimum rate after status change reduction (10000 = 100%). (Default: 0)
|
||||
# MinDuration Minimum duration in milliseconds after status change reduction. (Default: 1)
|
||||
# Fail: List of Status Changes that causes the status to fail to activate. (Optional)
|
||||
# End: List of Status Changes that will end when the status activates. (Optional)
|
||||
# EndOnStart: List of Status Changes that will end when the status activates. (Optional)
|
||||
# EndReturn: List of Status Changes that will end when the status activates and won't give its effect. (Optional)
|
||||
# EndOnEnd: List of Status Changes that will end when the status becomes inactive. (Optional)
|
||||
###########################################################################
|
||||
|
||||
Header:
|
||||
Type: STATUS_DB
|
||||
Version: 2
|
||||
Version: 3
|
||||
|
||||
Body:
|
||||
- Status: Stone
|
||||
@ -70,7 +71,7 @@ Body:
|
||||
Stun: true
|
||||
Sleep: true
|
||||
Burning: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Aeterna: true
|
||||
EndReturn:
|
||||
StoneWait: true
|
||||
@ -121,7 +122,7 @@ Body:
|
||||
Stun: true
|
||||
Sleep: true
|
||||
Burning: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Aeterna: true
|
||||
- Status: Stun
|
||||
DurationLookup: NPC_STUNATTACK
|
||||
@ -272,7 +273,7 @@ Body:
|
||||
BossResist: true
|
||||
Debuff: true
|
||||
NoSaveInfinite: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Freeze: true
|
||||
Stone: true
|
||||
Sleep: true
|
||||
@ -327,7 +328,7 @@ Body:
|
||||
NoBanishingBuster: true
|
||||
NoDispell: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Closeconfine: true
|
||||
Closeconfine2: true
|
||||
- Status: Cloaking
|
||||
@ -355,7 +356,7 @@ Body:
|
||||
Atk_Ele: true
|
||||
Flags:
|
||||
RemoveOnUnequipWeapon: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Aspersio: true
|
||||
Fireweapon: true
|
||||
Waterweapon: true
|
||||
@ -381,7 +382,7 @@ Body:
|
||||
Debuff: true
|
||||
Fail:
|
||||
Speedup1: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Loud: true
|
||||
Concentrate: true
|
||||
Truesight: true
|
||||
@ -437,7 +438,7 @@ Body:
|
||||
TaekwonAngel: true
|
||||
Fail:
|
||||
Quagmire: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Decreaseagi: true
|
||||
Adoramus: true
|
||||
- Status: Decreaseagi
|
||||
@ -452,7 +453,7 @@ Body:
|
||||
Debuff: true
|
||||
Fail:
|
||||
Speedup1: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Cartboost: true
|
||||
Gn_Cartboost: true
|
||||
Increaseagi: true
|
||||
@ -475,7 +476,7 @@ Body:
|
||||
Watk: true
|
||||
Flags:
|
||||
SuperNoviceAngel: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Impositio: true
|
||||
- Status: Suffragium
|
||||
Icon: EFST_SUFFRAGIUM
|
||||
@ -489,7 +490,7 @@ Body:
|
||||
Atk_Ele: true
|
||||
Flags:
|
||||
RemoveOnUnequipWeapon: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Encpoison: true
|
||||
Fireweapon: true
|
||||
Waterweapon: true
|
||||
@ -512,7 +513,7 @@ Body:
|
||||
DurationLookup: PR_KYRIE
|
||||
Flags:
|
||||
SuperNoviceAngel: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Assumptio: true
|
||||
- Status: Magnificat
|
||||
Icon: EFST_MAGNIFICAT
|
||||
@ -589,7 +590,7 @@ Body:
|
||||
NoSave: true
|
||||
NoClearance: true
|
||||
RemoveOnChangeMap: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Dancing: true
|
||||
- Status: Loud
|
||||
Icon: EFST_SHOUT
|
||||
@ -838,7 +839,7 @@ Body:
|
||||
Flags:
|
||||
NoClearance: true
|
||||
RequireShield: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Reflectdamage: true
|
||||
- Status: Splasher
|
||||
Icon: EFST_SPLASHER
|
||||
@ -987,7 +988,7 @@ Body:
|
||||
Atk_Ele: true
|
||||
Flags:
|
||||
RemoveOnUnequipWeapon: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Encpoison: true
|
||||
Aspersio: true
|
||||
Waterweapon: true
|
||||
@ -1002,7 +1003,7 @@ Body:
|
||||
Atk_Ele: true
|
||||
Flags:
|
||||
RemoveOnUnequipWeapon: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Encpoison: true
|
||||
Aspersio: true
|
||||
Fireweapon: true
|
||||
@ -1017,7 +1018,7 @@ Body:
|
||||
Atk_Ele: true
|
||||
Flags:
|
||||
RemoveOnUnequipWeapon: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Encpoison: true
|
||||
Aspersio: true
|
||||
Fireweapon: true
|
||||
@ -1032,7 +1033,7 @@ Body:
|
||||
Atk_Ele: true
|
||||
Flags:
|
||||
RemoveOnUnequipWeapon: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Encpoison: true
|
||||
Aspersio: true
|
||||
Fireweapon: true
|
||||
@ -1180,7 +1181,7 @@ Body:
|
||||
DurationLookup: HP_ASSUMPTIO
|
||||
Opt3:
|
||||
Assumptio: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Kyrie: true
|
||||
Kaite: true
|
||||
- Status: Basilica
|
||||
@ -1205,7 +1206,7 @@ Body:
|
||||
Matk: true
|
||||
Flags:
|
||||
NoSave: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Magicpower: true
|
||||
- Status: Edp
|
||||
Icon: EFST_EDP
|
||||
@ -1334,7 +1335,7 @@ Body:
|
||||
Debuff: true
|
||||
NoClearance: true
|
||||
NoSave: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Blessing: true
|
||||
Increaseagi: true
|
||||
- Status: Jointbeat
|
||||
@ -1358,7 +1359,7 @@ Body:
|
||||
Flags:
|
||||
NoSave: true
|
||||
Debuff: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Freeze: true
|
||||
Stone: true
|
||||
Sleep: true
|
||||
@ -1396,6 +1397,11 @@ Body:
|
||||
NoSave: true
|
||||
RemoveOnChangeMap: true
|
||||
OverlapIgnoreLevel: true
|
||||
EndOnEnd:
|
||||
Autoguard: true
|
||||
Defender: true
|
||||
ReflectShield: true
|
||||
Endure: true
|
||||
- Status: Sacrifice
|
||||
DurationLookup: PA_SACRIFICE
|
||||
- Status: Steelbody
|
||||
@ -1482,7 +1488,7 @@ Body:
|
||||
Flags:
|
||||
NoSave: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Encpoison: true
|
||||
Aspersio: true
|
||||
Fireweapon: true
|
||||
@ -1510,7 +1516,7 @@ Body:
|
||||
Flags:
|
||||
NoSave: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Encpoison: true
|
||||
Aspersio: true
|
||||
Fireweapon: true
|
||||
@ -1527,7 +1533,7 @@ Body:
|
||||
Flags:
|
||||
NoSave: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Kaahi: true
|
||||
- Status: Kaupe
|
||||
Icon: EFST_KAUPE
|
||||
@ -1548,7 +1554,7 @@ Body:
|
||||
RequireWeapon: true
|
||||
Fail:
|
||||
Decreaseagi: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Aspdpotion0: true
|
||||
Aspdpotion1: true
|
||||
Aspdpotion2: true
|
||||
@ -1603,7 +1609,7 @@ Body:
|
||||
Flags:
|
||||
MadoCancel: true
|
||||
NoSave: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Overthrust: true
|
||||
- Status: Longing
|
||||
Icon: EFST_LONGING
|
||||
@ -1684,6 +1690,8 @@ Body:
|
||||
RemoveOnChangeMap: true
|
||||
RequireWeapon: true
|
||||
OverlapIgnoreLevel: true
|
||||
EndOnEnd:
|
||||
Longing: true
|
||||
- Status: Elementalchange
|
||||
Icon: EFST_ARMOR_PROPERTY
|
||||
DurationLookup: NPC_ATTRICHANGE
|
||||
@ -1811,7 +1819,7 @@ Body:
|
||||
NoClearance: true
|
||||
Fail:
|
||||
Speedup1: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Increaseagi: true
|
||||
Adrenaline: true
|
||||
Adrenaline2: true
|
||||
@ -2040,7 +2048,7 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Food_Str_Cash: true
|
||||
- Status: Agifood
|
||||
Icon: EFST_FOOD_AGI
|
||||
@ -2051,7 +2059,7 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Food_Agi_Cash: true
|
||||
- Status: Vitfood
|
||||
Icon: EFST_FOOD_VIT
|
||||
@ -2062,7 +2070,7 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Food_Vit_Cash: true
|
||||
- Status: Intfood
|
||||
Icon: EFST_FOOD_INT
|
||||
@ -2073,7 +2081,7 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Food_Int_Cash: true
|
||||
- Status: Dexfood
|
||||
Icon: EFST_FOOD_DEX
|
||||
@ -2084,7 +2092,7 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Food_Dex_Cash: true
|
||||
- Status: Lukfood
|
||||
Icon: EFST_FOOD_LUK
|
||||
@ -2095,7 +2103,7 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Food_Luk_Cash: true
|
||||
- Status: Hitfood
|
||||
Icon: EFST_FOOD_BASICHIT
|
||||
@ -2194,7 +2202,7 @@ Body:
|
||||
Flags:
|
||||
SendOption: true
|
||||
NoRemoveOnDead: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Spirit: true
|
||||
- Status: Skillrate_Up
|
||||
DurationLookup: SG_FRIEND
|
||||
@ -2215,7 +2223,7 @@ Body:
|
||||
Flags:
|
||||
NoSave: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Assumptio: true
|
||||
- Status: Swoo
|
||||
Icon: EFST_SWOO
|
||||
@ -2268,7 +2276,7 @@ Body:
|
||||
Fail:
|
||||
P_Alter: true
|
||||
Heat_Barrel: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Adjustment: true
|
||||
- Status: Adjustment
|
||||
Icon: EFST_GS_ADJUSTMENT
|
||||
@ -2279,8 +2287,8 @@ Body:
|
||||
Flags:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
End:
|
||||
Madnesscancel: true
|
||||
EndOnStart:
|
||||
MadnessCancel: true
|
||||
- Status: Increasing
|
||||
Icon: EFST_GS_ACCURACY
|
||||
DurationLookup: GS_INCREASING
|
||||
@ -2438,7 +2446,7 @@ Body:
|
||||
SendVal1: true
|
||||
OverlapIgnoreLevel: true
|
||||
RemoveOnUnequipWeapon: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Enchantarms: true
|
||||
Aspersio: true
|
||||
- Status: Magicalattack
|
||||
@ -2718,7 +2726,7 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Invincibleoff: true
|
||||
- Status: Invincibleoff
|
||||
DurationLookup: NPC_INVINCIBLEOFF
|
||||
@ -2728,7 +2736,7 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Invincible: true
|
||||
- Status: Manu_Atk
|
||||
Icon: EFST_MANU_ATK
|
||||
@ -2782,7 +2790,7 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Strfood: true
|
||||
- Status: Food_Agi_Cash
|
||||
Icon: EFST_FOOD_AGI_CASH
|
||||
@ -2794,7 +2802,7 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Agifood: true
|
||||
- Status: Food_Vit_Cash
|
||||
Icon: EFST_FOOD_VIT_CASH
|
||||
@ -2806,7 +2814,7 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Vitfood: true
|
||||
- Status: Food_Dex_Cash
|
||||
Icon: EFST_FOOD_DEX_CASH
|
||||
@ -2818,7 +2826,7 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Intfood: true
|
||||
- Status: Food_Int_Cash
|
||||
Icon: EFST_FOOD_INT_CASH
|
||||
@ -2830,7 +2838,7 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Dexfood: true
|
||||
- Status: Food_Luk_Cash
|
||||
Icon: EFST_FOOD_LUK_CASH
|
||||
@ -2842,7 +2850,7 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Lukfood: true
|
||||
- Status: Fear
|
||||
DurationLookup: RK_WINDCUTTER
|
||||
@ -2858,7 +2866,7 @@ Body:
|
||||
Debuff: true
|
||||
Fail:
|
||||
Inspiration: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Blind: true
|
||||
- Status: Burning
|
||||
Icon: EFST_BURNT
|
||||
@ -2897,7 +2905,7 @@ Body:
|
||||
Refresh: true
|
||||
Inspiration: true
|
||||
Warmer: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Burning: true
|
||||
- Status: Enchantblade
|
||||
Icon: EFST_ENCHANTBLADE
|
||||
@ -2992,7 +3000,7 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Fightingspirit: true
|
||||
- Status: Abundance
|
||||
Icon: EFST_ABUNDANCE
|
||||
@ -3011,7 +3019,7 @@ Body:
|
||||
Flags:
|
||||
BossResist: true
|
||||
Debuff: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Decreaseagi: true
|
||||
- Status: Epiclesis
|
||||
Icon: EFST_EPICLESIS
|
||||
@ -3086,7 +3094,7 @@ Body:
|
||||
SetStand: true
|
||||
StopWalking: true
|
||||
StopAttacking: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Freezing: true
|
||||
- Status: Marshofabyss
|
||||
Icon: EFST_MARSHOFABYSS
|
||||
@ -3105,7 +3113,7 @@ Body:
|
||||
MinDuration: 5000
|
||||
Fail:
|
||||
Refresh: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Increaseagi: true
|
||||
Windwalk: true
|
||||
Aspdpotion0: true
|
||||
@ -3452,7 +3460,7 @@ Body:
|
||||
Deathhurt: true
|
||||
Pyrexia: true
|
||||
Oblivioncurse: true
|
||||
Leechesend: true
|
||||
LeechesEnd: true
|
||||
- Status: Venombleed
|
||||
Icon: EFST_VENOMBLEED
|
||||
CalcFlags:
|
||||
@ -3474,7 +3482,7 @@ Body:
|
||||
Deathhurt: true
|
||||
Pyrexia: true
|
||||
Oblivioncurse: true
|
||||
Leechesend: true
|
||||
LeechesEnd: true
|
||||
- Status: Magicmushroom
|
||||
Icon: EFST_MAGICMUSHROOM
|
||||
CalcFlags:
|
||||
@ -3496,7 +3504,7 @@ Body:
|
||||
Deathhurt: true
|
||||
Pyrexia: true
|
||||
Oblivioncurse: true
|
||||
Leechesend: true
|
||||
LeechesEnd: true
|
||||
- Status: Deathhurt
|
||||
Icon: EFST_DEATHHURT
|
||||
CalcFlags:
|
||||
@ -3518,7 +3526,7 @@ Body:
|
||||
Deathhurt: true
|
||||
Pyrexia: true
|
||||
Oblivioncurse: true
|
||||
Leechesend: true
|
||||
LeechesEnd: true
|
||||
- Status: Pyrexia
|
||||
Icon: EFST_PYREXIA
|
||||
CalcFlags:
|
||||
@ -3540,7 +3548,7 @@ Body:
|
||||
Deathhurt: true
|
||||
Pyrexia: true
|
||||
Oblivioncurse: true
|
||||
Leechesend: true
|
||||
LeechesEnd: true
|
||||
- Status: Oblivioncurse
|
||||
Icon: EFST_OBLIVIONCURSE
|
||||
States:
|
||||
@ -3565,7 +3573,7 @@ Body:
|
||||
Deathhurt: true
|
||||
Pyrexia: true
|
||||
Oblivioncurse: true
|
||||
Leechesend: true
|
||||
LeechesEnd: true
|
||||
- Status: Leechesend
|
||||
Icon: EFST_LEECHESEND
|
||||
Flags:
|
||||
@ -3585,7 +3593,7 @@ Body:
|
||||
Deathhurt: true
|
||||
Pyrexia: true
|
||||
Oblivioncurse: true
|
||||
Leechesend: true
|
||||
LeechesEnd: true
|
||||
- Status: Reflectdamage
|
||||
Icon: EFST_LG_REFLECTDAMAGE
|
||||
DurationLookup: LG_REFLECTDAMAGE
|
||||
@ -3593,7 +3601,7 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
RequireShield: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Reflectshield: true
|
||||
- Status: Forceofvanguard
|
||||
Icon: EFST_FORCEOFVANGUARD
|
||||
@ -3607,13 +3615,13 @@ Body:
|
||||
- Status: Shieldspell_Hp
|
||||
Icon: EFST_SHIELDSPELL_DEF
|
||||
DurationLookup: LG_SHIELDSPELL
|
||||
End:
|
||||
EndOnStart:
|
||||
Shieldspell_Sp: true
|
||||
Shieldspell_Atk: true
|
||||
- Status: Shieldspell_Sp
|
||||
Icon: EFST_SHIELDSPELL_MDEF
|
||||
DurationLookup: LG_SHIELDSPELL
|
||||
End:
|
||||
EndOnStart:
|
||||
Shieldspell_Hp: true
|
||||
Shieldspell_Atk: true
|
||||
- Status: Shieldspell_Atk
|
||||
@ -3622,7 +3630,7 @@ Body:
|
||||
CalcFlags:
|
||||
Watk: true
|
||||
Matk: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Shieldspell_Hp: true
|
||||
Shieldspell_Sp: true
|
||||
- Status: Exeedbreak
|
||||
@ -3649,7 +3657,7 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Prestige: true
|
||||
- Status: Banding_Defence
|
||||
Icon: EFST_BANDING_DEFENCE
|
||||
@ -3723,7 +3731,7 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Crystalize: true
|
||||
Freezing: true
|
||||
Freeze: true
|
||||
@ -3760,7 +3768,7 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Symphonyoflover: true
|
||||
Moonlitserenade: true
|
||||
Rushwindmill: true
|
||||
@ -3775,7 +3783,7 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Swingdance: true
|
||||
Moonlitserenade: true
|
||||
Rushwindmill: true
|
||||
@ -3790,7 +3798,7 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Swingdance: true
|
||||
Symphonyoflover: true
|
||||
Rushwindmill: true
|
||||
@ -3806,7 +3814,7 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Swingdance: true
|
||||
Symphonyoflover: true
|
||||
Moonlitserenade: true
|
||||
@ -3821,7 +3829,7 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Swingdance: true
|
||||
Symphonyoflover: true
|
||||
Moonlitserenade: true
|
||||
@ -3837,7 +3845,7 @@ Body:
|
||||
Int: true
|
||||
Dex: true
|
||||
Luk: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Swingdance: true
|
||||
Symphonyoflover: true
|
||||
Moonlitserenade: true
|
||||
@ -3851,7 +3859,7 @@ Body:
|
||||
DisplayPc: true
|
||||
StopAttacking: true
|
||||
MinDuration: 10000
|
||||
End:
|
||||
EndOnStart:
|
||||
Deepsleep: true
|
||||
Gloomyday: true
|
||||
Gloomyday_Sk: true
|
||||
@ -3889,7 +3897,7 @@ Body:
|
||||
Fail:
|
||||
Refresh: true
|
||||
Inspiration: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Dancing: true
|
||||
Voiceofsiren: true
|
||||
Gloomyday: true
|
||||
@ -3905,7 +3913,7 @@ Body:
|
||||
- Status: Sircleofnature
|
||||
Icon: EFST_SIRCLEOFNATURE
|
||||
DurationLookup: WM_SIRCLEOFNATURE
|
||||
End:
|
||||
EndOnStart:
|
||||
Deepsleep: true
|
||||
Gloomyday: true
|
||||
Gloomyday_Sk: true
|
||||
@ -3926,7 +3934,7 @@ Body:
|
||||
Flee: true
|
||||
Speed: true
|
||||
Aspd: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Voiceofsiren: true
|
||||
Deepsleep: true
|
||||
Songofmana: true
|
||||
@ -3941,7 +3949,7 @@ Body:
|
||||
- Status: Songofmana
|
||||
Icon: EFST_SONG_OF_MANA
|
||||
DurationLookup: WM_SONG_OF_MANA
|
||||
End:
|
||||
EndOnStart:
|
||||
Voiceofsiren: true
|
||||
Deepsleep: true
|
||||
Gloomyday: true
|
||||
@ -3960,7 +3968,7 @@ Body:
|
||||
DurationLookup: WM_DANCE_WITH_WUG
|
||||
CalcFlags:
|
||||
Aspd: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Voiceofsiren: true
|
||||
Deepsleep: true
|
||||
Gloomyday: true
|
||||
@ -3990,7 +3998,7 @@ Body:
|
||||
Fail:
|
||||
Berserk: true
|
||||
Inspiration: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Voiceofsiren: true
|
||||
Deepsleep: true
|
||||
Gloomyday: true
|
||||
@ -4011,7 +4019,7 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Voiceofsiren: true
|
||||
Deepsleep: true
|
||||
Gloomyday: true
|
||||
@ -4033,7 +4041,7 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Voiceofsiren: true
|
||||
Deepsleep: true
|
||||
Gloomyday: true
|
||||
@ -4055,7 +4063,7 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Voiceofsiren: true
|
||||
Deepsleep: true
|
||||
Gloomyday: true
|
||||
@ -4074,7 +4082,7 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Voiceofsiren: true
|
||||
Deepsleep: true
|
||||
Gloomyday: true
|
||||
@ -4178,7 +4186,7 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Gt_Revitalize: true
|
||||
- Status: Gt_Revitalize
|
||||
Icon: EFST_GENTLETOUCH_REVITALIZE
|
||||
@ -4190,7 +4198,7 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Gt_Change: true
|
||||
- Status: Gn_Cartboost
|
||||
Icon: EFST_GN_CARTBOOST
|
||||
@ -5221,7 +5229,7 @@ Body:
|
||||
MaxHp: true
|
||||
Flags:
|
||||
NoSave: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Tinder_Breaker2: true
|
||||
- Status: Goldene_Ferse
|
||||
Icon: EFST_GOLDENE_FERSE
|
||||
@ -5260,7 +5268,7 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Overed_Boost: true
|
||||
- Status: Light_Of_Regene
|
||||
Icon: EFST_LIGHT_OF_REGENE
|
||||
@ -5388,7 +5396,7 @@ Body:
|
||||
NoConsumeItem: true
|
||||
Flags:
|
||||
StopAttacking: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Poison: true
|
||||
Blind: true
|
||||
Freeze: true
|
||||
@ -5423,7 +5431,7 @@ Body:
|
||||
DisplayPc: true
|
||||
Fail:
|
||||
Magnificat: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Magnificat: true
|
||||
Blind: true
|
||||
Curse: true
|
||||
@ -5437,7 +5445,7 @@ Body:
|
||||
Paralyse: true
|
||||
Pyrexia: true
|
||||
Deathhurt: true
|
||||
Leechesend: true
|
||||
LeechesEnd: true
|
||||
Venombleed: true
|
||||
Toxin: true
|
||||
Magicmushroom: true
|
||||
@ -5510,7 +5518,7 @@ Body:
|
||||
NoClearance: true
|
||||
Fail:
|
||||
P_Alter: true
|
||||
Madnesscancel: true
|
||||
MadnessCancel: true
|
||||
- Status: P_Alter
|
||||
Icon: EFST_P_ALTER
|
||||
DurationLookup: RL_P_ALTER
|
||||
@ -5521,7 +5529,7 @@ Body:
|
||||
NoClearance: true
|
||||
Fail:
|
||||
Heat_Barrel: true
|
||||
Madnesscancel: true
|
||||
MadnessCancel: true
|
||||
- Status: E_Chain
|
||||
Icon: EFST_E_CHAIN
|
||||
DurationLookup: RL_E_CHAIN
|
||||
@ -5793,7 +5801,7 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Food_Str_Cash: true
|
||||
Food_Agi_Cash: true
|
||||
Food_Vit_Cash: true
|
||||
@ -6223,31 +6231,31 @@ Body:
|
||||
Icon: EFST_GVG_GOLEM
|
||||
- Status: Gvg_Stun
|
||||
Icon: EFST_GVG_STUN
|
||||
End:
|
||||
EndOnStart:
|
||||
Gvg_Stun: true
|
||||
- Status: Gvg_Stone
|
||||
Icon: EFST_GVG_STONE
|
||||
End:
|
||||
EndOnStart:
|
||||
Stone: true
|
||||
- Status: Gvg_Freez
|
||||
Icon: EFST_GVG_FREEZ
|
||||
End:
|
||||
EndOnStart:
|
||||
Freeze: true
|
||||
- Status: Gvg_Sleep
|
||||
Icon: EFST_GVG_SLEEP
|
||||
End:
|
||||
EndOnStart:
|
||||
Sleep: true
|
||||
- Status: Gvg_Curse
|
||||
Icon: EFST_GVG_CURSE
|
||||
End:
|
||||
EndOnStart:
|
||||
Curse: true
|
||||
- Status: Gvg_Silence
|
||||
Icon: EFST_GVG_SILENCE
|
||||
End:
|
||||
EndOnStart:
|
||||
Silence: true
|
||||
- Status: Gvg_Blind
|
||||
Icon: EFST_GVG_BLIND
|
||||
End:
|
||||
EndOnStart:
|
||||
Blind: true
|
||||
- Status: Clan_Info
|
||||
Icon: EFST_CLAN_INFO
|
||||
@ -6272,6 +6280,8 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
EndOnEnd:
|
||||
Clan_Info: true
|
||||
- Status: Arcwandclan
|
||||
Icon: EFST_ARCWANDCLAN
|
||||
CalcFlags:
|
||||
@ -6285,6 +6295,8 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
EndOnEnd:
|
||||
Clan_Info: true
|
||||
- Status: Goldenmaceclan
|
||||
Icon: EFST_GOLDENMACECLAN
|
||||
CalcFlags:
|
||||
@ -6298,6 +6310,8 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
EndOnEnd:
|
||||
Clan_Info: true
|
||||
- Status: Crossbowclan
|
||||
Icon: EFST_CROSSBOWCLAN
|
||||
CalcFlags:
|
||||
@ -6311,6 +6325,8 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
EndOnEnd:
|
||||
Clan_Info: true
|
||||
- Status: Jumpingclan
|
||||
Icon: EFST_JUMPINGCLAN
|
||||
CalcFlags:
|
||||
@ -6326,6 +6342,8 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
EndOnEnd:
|
||||
Clan_Info: true
|
||||
- Status: Tarotcard
|
||||
Icon: EFST_TAROTCARD
|
||||
DurationLookup: CG_TAROTCARD
|
||||
@ -6426,7 +6444,7 @@ Body:
|
||||
Flee: true
|
||||
Flags:
|
||||
NoRemoveOnDead: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Stun: true
|
||||
Freeze: true
|
||||
Stone: true
|
||||
@ -6620,19 +6638,19 @@ Body:
|
||||
- Status: Lightofmoon
|
||||
Icon: EFST_LIGHTOFMOON
|
||||
DurationLookup: SJ_LIGHTOFMOON
|
||||
End:
|
||||
EndOnStart:
|
||||
Lunarstance: true
|
||||
Universestance: true
|
||||
- Status: Lightofsun
|
||||
Icon: EFST_LIGHTOFSUN
|
||||
DurationLookup: SJ_LIGHTOFSUN
|
||||
End:
|
||||
EndOnStart:
|
||||
Lightofsun: true
|
||||
Universestance: true
|
||||
- Status: Lightofstar
|
||||
Icon: EFST_LIGHTOFSTAR
|
||||
DurationLookup: SJ_LIGHTOFSTAR
|
||||
End:
|
||||
EndOnStart:
|
||||
Starstance: true
|
||||
Universestance: true
|
||||
- Status: Lunarstance
|
||||
@ -6640,7 +6658,7 @@ Body:
|
||||
DurationLookup: SJ_LUNARSTANCE
|
||||
CalcFlags:
|
||||
MaxHp: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Sunstance: true
|
||||
Starstance: true
|
||||
Universestance: true
|
||||
@ -6654,7 +6672,7 @@ Body:
|
||||
Int: true
|
||||
Dex: true
|
||||
Luk: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Sunstance: true
|
||||
Lunarstance: true
|
||||
Starstance: true
|
||||
@ -6664,7 +6682,7 @@ Body:
|
||||
CalcFlags:
|
||||
Batk: true
|
||||
Watk: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Lunarstance: true
|
||||
Starstance: true
|
||||
Universestance: true
|
||||
@ -6697,7 +6715,7 @@ Body:
|
||||
DurationLookup: SJ_STARSTANCE
|
||||
CalcFlags:
|
||||
Aspd: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Sunstance: true
|
||||
Lunarstance: true
|
||||
Universestance: true
|
||||
@ -6766,7 +6784,7 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Spirit: true
|
||||
Soulgolem: true
|
||||
Soulfalcon: true
|
||||
@ -6781,7 +6799,7 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Spirit: true
|
||||
Soulgolem: true
|
||||
Soulshadow: true
|
||||
@ -6797,7 +6815,7 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Spirit: true
|
||||
Soulgolem: true
|
||||
Soulshadow: true
|
||||
@ -6813,7 +6831,7 @@ Body:
|
||||
NoDispell: true
|
||||
NoBanishingBuster: true
|
||||
NoClearance: true
|
||||
End:
|
||||
EndOnStart:
|
||||
Spirit: true
|
||||
Soulshadow: true
|
||||
Soulfalcon: true
|
||||
|
317
db/re/status.yml
317
db/re/status.yml
File diff suppressed because it is too large
Load Diff
@ -35,13 +35,14 @@
|
||||
# MinRate Minimum rate after status change reduction (10000 = 100%). (Default: 0)
|
||||
# MinDuration Minimum duration in milliseconds after status change reduction. (Default: 1)
|
||||
# Fail: List of Status Changes that causes the status to fail to activate. (Optional)
|
||||
# End: List of Status Changes that will end when the status activates. (Optional)
|
||||
# EndOnStart: List of Status Changes that will end when the status activates. (Optional)
|
||||
# EndReturn: List of Status Changes that will end when the status activates and won't give its effect. (Optional)
|
||||
# EndOnEnd: List of Status Changes that will end when the status becomes inactive. (Optional)
|
||||
###########################################################################
|
||||
|
||||
Header:
|
||||
Type: STATUS_DB
|
||||
Version: 2
|
||||
Version: 3
|
||||
|
||||
Footer:
|
||||
Imports:
|
||||
|
@ -3,7 +3,7 @@
|
||||
//===== By: ==================================================
|
||||
//= rAthena Dev Team
|
||||
//===== Last Updated: ========================================
|
||||
//= 20220421
|
||||
//= 20221013
|
||||
//===== Description: =========================================
|
||||
//= Explanation of the status.yml file and structure.
|
||||
//============================================================
|
||||
@ -266,7 +266,7 @@ Fail: List of status that causes the status to fail to activate.
|
||||
|
||||
---------------------------------------
|
||||
|
||||
End: List of status that will end if the status activates.
|
||||
EndOnStart: List of status that will end if the status activates.
|
||||
|
||||
---------------------------------------
|
||||
|
||||
@ -276,6 +276,10 @@ EndReturn: List of status that will end if the status activates and it won't giv
|
||||
|
||||
---------------------------------------
|
||||
|
||||
EndOnEnd: List of status that will end when the status becomes inactive.
|
||||
|
||||
---------------------------------------
|
||||
|
||||
Notes:
|
||||
|
||||
By default, statuses are 'Buff' (those that aren't explicitely given the 'Debuff' flag) which are removable by 'map_quit' in combination with 'battle_config.debuff_on_logout'.
|
||||
|
@ -988,14 +988,14 @@ std::bitset<SCB_MAX> StatusDatabase::getCalcFlag(sc_type type) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Get SC's END list
|
||||
* Get SC's EndOnStart list
|
||||
* @param sc: SC type
|
||||
* @return End list
|
||||
**/
|
||||
std::vector<sc_type> StatusDatabase::getEnd(sc_type type) {
|
||||
std::vector<sc_type> StatusDatabase::getEndOnStart(sc_type type) {
|
||||
std::shared_ptr<s_status_change_db> status = status_db.find(type);
|
||||
|
||||
return status ? status->end : std::vector<sc_type> {};
|
||||
return status ? status->endonstart : std::vector<sc_type> {};
|
||||
}
|
||||
|
||||
/**
|
||||
@ -10240,9 +10240,9 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
||||
std::vector<sc_type> endlist;
|
||||
|
||||
if (type == SC_BERSERK && val3 == SC__BLOODYLUST) //There is some reasons that using SC_BERSERK first before SC__BLOODYLUST itself on Akinari's fix
|
||||
endlist = status_db.getEnd(SC__BLOODYLUST);
|
||||
endlist = status_db.getEndOnStart(SC__BLOODYLUST);
|
||||
else
|
||||
endlist = scdb->end;
|
||||
endlist = scdb->endonstart;
|
||||
|
||||
// End the SCs from the list
|
||||
if (!endlist.empty()) {
|
||||
@ -12513,7 +12513,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
||||
break;
|
||||
|
||||
default:
|
||||
if (calc_flag.none() && scdb->skill_id == 0 && scdb->icon == EFST_BLANK && scdb->opt1 == OPT1_NONE && scdb->opt2 == OPT2_NONE && scdb->state.none() && scdb->flag.none() && scdb->end.empty() && scdb->endreturn.empty() && scdb->fail.empty()) {
|
||||
if (calc_flag.none() && scdb->skill_id == 0 && scdb->icon == EFST_BLANK && scdb->opt1 == OPT1_NONE && scdb->opt2 == OPT2_NONE && scdb->state.none() && scdb->flag.none() && scdb->endonstart.empty() && scdb->endreturn.empty() && scdb->fail.empty() && scdb->endonend.empty()) {
|
||||
// Status change with no calc, no icon, and no skill associated...?
|
||||
ShowWarning("status_change_start: Status %s (%d) is bare. Add the NoWarning flag to suppress this message.\n", script_get_constant_str("SC_", type), type);
|
||||
return 0;
|
||||
@ -13072,11 +13072,6 @@ int status_change_end(struct block_list* bl, enum sc_type type, int tid)
|
||||
((TBL_MER*)d_bl)->devotion_flag = 0;
|
||||
clif_devotion(d_bl, NULL);
|
||||
}
|
||||
|
||||
status_change_end(bl, SC_AUTOGUARD);
|
||||
status_change_end(bl, SC_DEFENDER);
|
||||
status_change_end(bl, SC_REFLECTSHIELD);
|
||||
status_change_end(bl, SC_ENDURE);
|
||||
}
|
||||
break;
|
||||
|
||||
@ -13138,12 +13133,6 @@ int status_change_end(struct block_list* bl, enum sc_type type, int tid)
|
||||
|
||||
if((sce->val1&0xFFFF) == CG_MOONLIT)
|
||||
clif_status_change(bl,EFST_MOON,0,0,0,0,0);
|
||||
|
||||
#ifdef RENEWAL
|
||||
status_change_end(bl, SC_ENSEMBLEFATIGUE);
|
||||
#else
|
||||
status_change_end(bl, SC_LONGING);
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
case SC_NOCHAT:
|
||||
@ -13371,9 +13360,6 @@ int status_change_end(struct block_list* bl, enum sc_type type, int tid)
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SC_TEARGAS:
|
||||
status_change_end(bl,SC_TEARGAS_SOB);
|
||||
break;
|
||||
case SC_SITDOWN_FORCE:
|
||||
case SC_BANANA_BOMB_SITDOWN:
|
||||
if( sd && pc_issit(sd) && pc_setstand(sd, false) )
|
||||
@ -13387,25 +13373,6 @@ int status_change_end(struct block_list* bl, enum sc_type type, int tid)
|
||||
calc_flag = status_db.getSCB_ALL(); // Required for overlapping
|
||||
break;
|
||||
|
||||
case SC_SUNSTANCE:
|
||||
status_change_end(bl, SC_LIGHTOFSUN);
|
||||
break;
|
||||
case SC_LUNARSTANCE:
|
||||
status_change_end(bl, SC_NEWMOON);
|
||||
status_change_end(bl, SC_LIGHTOFMOON);
|
||||
break;
|
||||
case SC_STARSTANCE:
|
||||
status_change_end(bl, SC_FALLINGSTAR);
|
||||
status_change_end(bl, SC_LIGHTOFSTAR);
|
||||
break;
|
||||
case SC_UNIVERSESTANCE:
|
||||
status_change_end(bl, SC_LIGHTOFSUN);
|
||||
status_change_end(bl, SC_NEWMOON);
|
||||
status_change_end(bl, SC_LIGHTOFMOON);
|
||||
status_change_end(bl, SC_FALLINGSTAR);
|
||||
status_change_end(bl, SC_LIGHTOFSTAR);
|
||||
status_change_end(bl, SC_DIMENSION);
|
||||
break;
|
||||
case SC_GRAVITYCONTROL:
|
||||
status_fix_damage(bl, bl, sce->val2, clif_damage(bl, bl, gettick(), 0, 0, sce->val2, 0, DMG_NORMAL, 0, false), 0);
|
||||
clif_specialeffect(bl, 223, AREA);
|
||||
@ -13479,13 +13446,6 @@ int status_change_end(struct block_list* bl, enum sc_type type, int tid)
|
||||
///< !CHECKME: Seems on official, there's delay before same target can be vacuumed in same area again [Cydh]
|
||||
sc_start2(bl, bl, SC_VACUUM_EXTREME_POSTDELAY, 100, sce->val1, sce->val2, skill_get_time2(SO_VACUUM_EXTREME,sce->val1));
|
||||
break;
|
||||
case SC_SWORDCLAN:
|
||||
case SC_ARCWANDCLAN:
|
||||
case SC_GOLDENMACECLAN:
|
||||
case SC_CROSSBOWCLAN:
|
||||
case SC_JUMPINGCLAN:
|
||||
status_change_end(bl,SC_CLAN_INFO);
|
||||
break;
|
||||
case SC_DIMENSION1:
|
||||
case SC_DIMENSION2:
|
||||
if (sd)
|
||||
@ -13523,9 +13483,6 @@ int status_change_end(struct block_list* bl, enum sc_type type, int tid)
|
||||
pc_delservantball( *sd, sd->servantball );
|
||||
}
|
||||
break;
|
||||
case SC_CHARGINGPIERCE:
|
||||
status_change_end(bl, SC_CHARGINGPIERCE_COUNT);
|
||||
break;
|
||||
case SC_ABYSSFORCEWEAPON:
|
||||
if( sd ){
|
||||
pc_delabyssball( *sd, sd->abyssball );
|
||||
@ -13533,6 +13490,13 @@ int status_change_end(struct block_list* bl, enum sc_type type, int tid)
|
||||
break;
|
||||
}
|
||||
|
||||
// End statuses found in the EndOnEnd list.
|
||||
if (!scdb->endonend.empty()) {
|
||||
for (const auto &it : scdb->endonend) {
|
||||
status_change_end(bl, it);
|
||||
}
|
||||
}
|
||||
|
||||
// Reset the options as needed
|
||||
std::bitset<SCF_MAX> opt_flag = scdb->flag;
|
||||
bool disable_opt_flag = false;
|
||||
@ -15651,8 +15615,8 @@ uint64 StatusDatabase::parseBodyNode(const ryml::NodeRef& node) {
|
||||
}
|
||||
}
|
||||
|
||||
if (this->nodeExists(node, "End")) {
|
||||
const ryml::NodeRef& endNode = node["End"];
|
||||
if (this->nodeExists(node, "EndOnStart")) {
|
||||
const ryml::NodeRef& endNode = node["EndOnStart"];
|
||||
|
||||
for (const auto &it : endNode) {
|
||||
std::string end;
|
||||
@ -15662,12 +15626,12 @@ uint64 StatusDatabase::parseBodyNode(const ryml::NodeRef& node) {
|
||||
int64 constant;
|
||||
|
||||
if (!script_get_constant(end_constant.c_str(), &constant)) {
|
||||
this->invalidWarning(endNode, "End status %s is invalid.\n", end.c_str());
|
||||
this->invalidWarning(endNode, "EndOnStart status %s is invalid.\n", end.c_str());
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!this->validateStatus(static_cast<sc_type>(constant))) {
|
||||
this->invalidWarning(endNode, "End status %s is out of bounds.\n", end.c_str());
|
||||
this->invalidWarning(endNode, "EndOnStart status %s is out of bounds.\n", end.c_str());
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -15677,9 +15641,9 @@ uint64 StatusDatabase::parseBodyNode(const ryml::NodeRef& node) {
|
||||
return 0;
|
||||
|
||||
if (active)
|
||||
status->end.push_back(static_cast<sc_type>(constant));
|
||||
status->endonstart.push_back(static_cast<sc_type>(constant));
|
||||
else
|
||||
util::vector_erase_if_exists(status->end, static_cast<sc_type>(constant));
|
||||
util::vector_erase_if_exists(status->endonstart, static_cast<sc_type>(constant));
|
||||
}
|
||||
}
|
||||
|
||||
@ -15715,6 +15679,38 @@ uint64 StatusDatabase::parseBodyNode(const ryml::NodeRef& node) {
|
||||
}
|
||||
}
|
||||
|
||||
if (this->nodeExists(node, "EndOnEnd")) {
|
||||
const ryml::NodeRef &endNode = node["EndOnEnd"];
|
||||
|
||||
for (const auto &it : endNode) {
|
||||
std::string end;
|
||||
c4::from_chars(it.key(), &end);
|
||||
|
||||
std::string end_constant = "SC_" + end;
|
||||
int64 constant;
|
||||
|
||||
if (!script_get_constant(end_constant.c_str(), &constant)) {
|
||||
this->invalidWarning(endNode, "EndOnEnd status %s is invalid.\n", end.c_str());
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!this->validateStatus(static_cast<sc_type>(constant))) {
|
||||
this->invalidWarning(endNode, "EndOnEnd status %s is out of bounds.\n", end.c_str());
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool active;
|
||||
|
||||
if (!this->asBool(endNode, end, active))
|
||||
return 0;
|
||||
|
||||
if (active)
|
||||
status->endonend.push_back(static_cast<sc_type>(constant));
|
||||
else
|
||||
util::vector_erase_if_exists(status->endonend, static_cast<sc_type>(constant));
|
||||
}
|
||||
}
|
||||
|
||||
if (!exists) {
|
||||
this->put(status_id, status);
|
||||
}
|
||||
|
@ -2940,27 +2940,28 @@ enum e_status_change_flag : uint16 {
|
||||
|
||||
/// Struct of SC configs [Cydh]
|
||||
struct s_status_change_db {
|
||||
sc_type type; ///< SC_
|
||||
efst_type icon; ///< EFST_
|
||||
std::bitset<SCS_MAX> state; ///< SCS_
|
||||
std::bitset<SCB_MAX> calc_flag; ///< SCB_ flags
|
||||
uint16 opt1; ///< OPT1_
|
||||
uint16 opt2; ///< OPT2_
|
||||
uint32 opt3; ///< OPT3_
|
||||
uint32 look; ///< OPTION_ Changelook
|
||||
std::bitset<SCF_MAX> flag; ///< SCF_ Flags, enum e_status_change_flag
|
||||
bool display; ///< Display status effect/icon (for certain state)
|
||||
uint16 skill_id; ///< Associated skill for (addeff) duration lookups
|
||||
std::vector<sc_type> end; ///< List of SC that will be ended when this SC is activated
|
||||
std::vector<sc_type> fail; ///< List of SC that causing this SC cannot be activated
|
||||
std::vector<sc_type> endreturn; ///< List of SC that will be ended when this SC is activated and then immediately return
|
||||
t_tick min_duration; ///< Minimum duration effect (after all status reduction)
|
||||
uint16 min_rate; ///< Minimum rate to be applied (after all status reduction)
|
||||
sc_type type; ///< SC_
|
||||
efst_type icon; ///< EFST_
|
||||
std::bitset<SCS_MAX> state; ///< SCS_
|
||||
std::bitset<SCB_MAX> calc_flag; ///< SCB_ flags
|
||||
uint16 opt1; ///< OPT1_
|
||||
uint16 opt2; ///< OPT2_
|
||||
uint32 opt3; ///< OPT3_
|
||||
uint32 look; ///< OPTION_ Changelook
|
||||
std::bitset<SCF_MAX> flag; ///< SCF_ Flags, enum e_status_change_flag
|
||||
bool display; ///< Display status effect/icon (for certain state)
|
||||
uint16 skill_id; ///< Associated skill for (addeff) duration lookups
|
||||
std::vector<sc_type> endonstart; ///< List of SC that will be ended when this SC is activated
|
||||
std::vector<sc_type> fail; ///< List of SC that causing this SC cannot be activated
|
||||
std::vector<sc_type> endreturn; ///< List of SC that will be ended when this SC is activated and then immediately return
|
||||
std::vector<sc_type> endonend; ///< List of SC that will be ended when this SC ends
|
||||
t_tick min_duration; ///< Minimum duration effect (after all status reduction)
|
||||
uint16 min_rate; ///< Minimum rate to be applied (after all status reduction)
|
||||
};
|
||||
|
||||
class StatusDatabase : public TypesafeCachedYamlDatabase<uint16, s_status_change_db> {
|
||||
public:
|
||||
StatusDatabase() : TypesafeCachedYamlDatabase("STATUS_DB", 2) {
|
||||
StatusDatabase() : TypesafeCachedYamlDatabase("STATUS_DB", 3) {
|
||||
// All except BASE and extra flags.
|
||||
SCB_BATTLE.set();
|
||||
SCB_BATTLE.reset(SCB_BASE);
|
||||
@ -2980,7 +2981,7 @@ public:
|
||||
// Extras
|
||||
efst_type getIcon(sc_type type);
|
||||
std::bitset<SCB_MAX> getCalcFlag(sc_type type);
|
||||
std::vector<sc_type> getEnd(sc_type type);
|
||||
std::vector<sc_type> getEndOnStart(sc_type type);
|
||||
uint16 getSkill(sc_type type);
|
||||
bool hasSCF(status_change *sc, e_status_change_flag flag);
|
||||
void removeByStatusFlag(block_list *bl, std::vector<e_status_change_flag> flag);
|
||||
|
@ -6,6 +6,7 @@
|
||||
static bool upgrade_achievement_db(std::string file, const uint32 source_version);
|
||||
static bool upgrade_item_db(std::string file, const uint32 source_version);
|
||||
static bool upgrade_job_stats(std::string file, const uint32 source_version);
|
||||
static bool upgrade_status_db(std::string file, const uint32 source_version);
|
||||
|
||||
template<typename Func>
|
||||
bool process(const std::string &type, uint32 version, const std::vector<std::string> &paths, const std::string &name, Func lambda) {
|
||||
@ -121,6 +122,12 @@ int do_init(int argc, char** argv) {
|
||||
})) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!process("STATUS_DB", 3, root_paths, "status", [](const std::string& path, const std::string& name_ext, uint32 source_version) -> bool {
|
||||
return upgrade_status_db(path + name_ext, source_version);
|
||||
})) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -293,3 +300,25 @@ static bool upgrade_job_stats(std::string file, const uint32 source_version) {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool upgrade_status_db(std::string file, const uint32 source_version) {
|
||||
size_t entries = 0;
|
||||
|
||||
for (auto input : inNode["Body"]) {
|
||||
// If under version 3
|
||||
if (source_version < 3) {
|
||||
// Rename End to EndOnStart
|
||||
if (input["End"].IsDefined()) {
|
||||
input["EndOnStart"] = input["End"];
|
||||
input.remove("End");
|
||||
}
|
||||
}
|
||||
|
||||
body << input;
|
||||
entries++;
|
||||
}
|
||||
|
||||
ShowStatus("Done converting/upgrading '" CL_WHITE "%zu" CL_RESET "' statuses in '" CL_WHITE "%s" CL_RESET "'.\n", entries, file.c_str());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user