From f28d20727446b2807c411d6f92de6afa949de849 Mon Sep 17 00:00:00 2001 From: Cydh Ramdh Date: Fri, 11 Mar 2022 01:11:59 +0700 Subject: [PATCH] Implementation of Status Changes in YAML (#1685) * Removes the initialization of Status Changes via hard-code and puts it into YAML form. * From this database it is much easier to delegate icons, calc flags, opt flags, miscellaneous flags, and several other things for all stats changes. * Statuses can quickly be reloaded via atcommand reloadstatus. Thanks to @cydh, @Atemo, @Lemongrass3110, and the others who helped! Signed-off-by: Cydh Ramdh Co-authored-by: atemo Co-authored-by: Lemongrass3110 --- conf/battle/skill.conf | 3 - conf/battle/status.conf | 12 +- db/import-tmpl/skill_db.yml | 1 + db/import-tmpl/status.yml | 44 + db/pre-re/skill_db.yml | 298 +- db/pre-re/status.yml | 6817 +++++++++++++++++++++++++++++ db/re/skill_db.yml | 634 ++- db/re/status.yml | 7946 ++++++++++++++++++++++++++++++++++ db/skill_db.yml | 1 + db/status.yml | 52 + doc/skill_db.txt | 4 + doc/status.txt | 297 ++ doc/status_change.txt | 80 +- doc/yaml/db/skill_db.yml | 1 + src/common/database.hpp | 5 - src/map/battle.cpp | 9 +- src/map/battle.hpp | 1 - src/map/chrif.cpp | 5 +- src/map/clif.cpp | 48 +- src/map/elemental.cpp | 130 +- src/map/elemental.hpp | 2 - src/map/guild.cpp | 15 +- src/map/homunculus.cpp | 10 +- src/map/map-server.vcxproj | 1 + src/map/map.cpp | 100 +- src/map/mob.cpp | 3 +- src/map/pc.cpp | 190 +- src/map/pc.hpp | 7 +- src/map/script.cpp | 62 +- src/map/script_constants.hpp | 170 +- src/map/skill.cpp | 607 +-- src/map/skill.hpp | 2 + src/map/status.cpp | 5173 ++++++---------------- src/map/status.hpp | 263 +- src/map/unit.cpp | 135 +- src/map/unit.hpp | 3 +- 36 files changed, 18120 insertions(+), 5011 deletions(-) create mode 100644 db/import-tmpl/status.yml create mode 100644 db/pre-re/status.yml create mode 100644 db/re/status.yml create mode 100644 db/status.yml create mode 100644 doc/status.txt diff --git a/conf/battle/skill.conf b/conf/battle/skill.conf index 1cdffedd9e..e69c44a939 100644 --- a/conf/battle/skill.conf +++ b/conf/battle/skill.conf @@ -220,9 +220,6 @@ backstab_bow_penalty: yes // Use 0 to disable (max allowed value is 255) skill_steal_max_tries: 0 -// Does Berserk/Frenzy cancel other self-buffs when used? -berserk_cancels_buffs: no - // Level and Strength of "MVP heal". When someone casts a heal of this level or // above, the heal formula is bypassed and this value is used instead. max_heal: 9999 diff --git a/conf/battle/status.conf b/conf/battle/status.conf index 3f3510bf03..c36da89edf 100644 --- a/conf/battle/status.conf +++ b/conf/battle/status.conf @@ -13,13 +13,11 @@ status_cast_cancel: 0 // Will certain skill status-changes be removed on logout? -// This mimics official servers, where Extremity Fist's no SP regen, -// Strip Equipment, and some other buffs are removed when you logout. Setting is: -// 0 = remove nothing. -// 1 = remove negative buffs (stripping, EF) -// 2 = remove positive buffs (maximize power, steel body...) -// 3 = remove both negative and positive buffs. -debuff_on_logout: 3 +// 0 = (Default) Only remove status that has the SCF_NO_SAVE flag. +// 1 = Remove negative buffs (status that are flagged as debuff) +// 2 = Remove positive buffs. +// 3 = Remove all. +debuff_on_logout: 0 // Adjustment for the natural rate of resistance from status changes. // If 50, status defense is halved, and you need twice as much stats to block diff --git a/db/import-tmpl/skill_db.yml b/db/import-tmpl/skill_db.yml index 3d93bd3f7d..0378bf1a4c 100644 --- a/db/import-tmpl/skill_db.yml +++ b/db/import-tmpl/skill_db.yml @@ -135,6 +135,7 @@ # Interval Skill unit interval in milliseconds. (Default: 0) # Target Skill unit target type. (Default: All) # Flag: Skill unit flags. (Default: None) +# Status Status Change that is associated to the skill. (Optional) ########################################################################### Header: diff --git a/db/import-tmpl/status.yml b/db/import-tmpl/status.yml new file mode 100644 index 0000000000..b83eed9de6 --- /dev/null +++ b/db/import-tmpl/status.yml @@ -0,0 +1,44 @@ +# This file is a part of rAthena. +# Copyright(C) 2022 rAthena Development Team +# https://rathena.org - https://github.com/rathena +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +########################################################################### +# Status Change Database +########################################################################### +# +# Status Change Settings +# +########################################################################### +# - Status Status change name. +# Icon Status change icon. (Default: EFST_BLANK) +# DurationLookup Default status change duration. (Default: 0) +# States: Status change state to determine player states. (Default: None) +# CalcFlags: Status change calculation to indicate which stat is adjusted. (Default: None) +# Opt1 Special effect when a status change is active. Non-stackable. (Default: None) +# Opt2: Special options/client effects when a status change is active. (Default: None) +# Opt3: Special options/client effects when a status change is active. (Default: Normal) +# Options: Special options/client effects when a status change is active. (Default: Nothing) +# Flags: Special flags which trigger during certain events. (Default: None) +# 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) +# EndReturn If the status has an End list and succeeds to remove these status changes, it won't give its effect. (Default: false) +########################################################################### + +Header: + Type: STATUS_DB + Version: 1 diff --git a/db/pre-re/skill_db.yml b/db/pre-re/skill_db.yml index 42f00b2bb2..d690b9c153 100644 --- a/db/pre-re/skill_db.yml +++ b/db/pre-re/skill_db.yml @@ -135,6 +135,7 @@ # Interval Skill unit interval in milliseconds. (Default: 0) # Target Skill unit target type. (Default: All) # Flag: Skill unit flags. (Default: None) +# Status Status Change that is associated to the skill. (Optional) ########################################################################### Header: @@ -219,6 +220,7 @@ Body: Shotgun: true Grenade: true Huuma: true + Status: Stun - Id: 6 Name: SM_PROVOKE Description: Provoke @@ -253,6 +255,7 @@ Body: Amount: 12 - Level: 10 Amount: 13 + Status: Provoke - Id: 7 Name: SM_MAGNUM Description: Magnum Break @@ -354,6 +357,7 @@ Body: Cooldown: 10000 Requires: SpCost: 10 + Status: Endure - Id: 9 Name: MG_SRECOVERY Description: Increase SP Recovery @@ -375,6 +379,7 @@ Body: Duration1: 10000 Requires: SpCost: 10 + Status: Sight - Id: 11 Name: MG_NAPALMBEAT Description: Napalm Beat @@ -773,6 +778,7 @@ Body: Amount: 17 - Level: 10 Amount: 16 + Status: Freeze - Id: 16 Name: MG_STONECURSE Description: Stone Curse @@ -814,6 +820,7 @@ Body: ItemCost: - Item: Red_Gemstone Amount: 1 + Status: Stone - Id: 17 Name: MG_FIREBALL Description: Fire Ball @@ -1294,6 +1301,7 @@ Body: Duration1: 10000 Requires: SpCost: 10 + Status: Ruwach - Id: 25 Name: AL_PNEUMA Description: Pneuma @@ -1317,6 +1325,7 @@ Body: NoEnemy: true NoReiteration: true RangedSingleUnit: true + Status: Pneuma - Id: 26 Name: AL_TELEPORT Description: Teleport @@ -1496,6 +1505,7 @@ Body: Amount: 42 - Level: 10 Amount: 45 + Status: IncreaseAgi - Id: 30 Name: AL_DECAGI Description: Decrease AGI @@ -1555,6 +1565,7 @@ Body: Amount: 31 - Level: 10 Amount: 33 + Status: DecreaseAgi - Id: 31 Name: AL_HOLYWATER Description: Aqua Benedicta @@ -1588,6 +1599,7 @@ Body: AfterCastActDelay: 2000 Requires: SpCost: 35 + Status: SignumCrucis - Id: 33 Name: AL_ANGELUS Description: Angelus @@ -1646,6 +1658,7 @@ Body: Amount: 47 - Level: 10 Amount: 50 + Status: Angelus - Id: 34 Name: AL_BLESSING Description: Blessing @@ -1703,6 +1716,7 @@ Body: Amount: 60 - Level: 10 Amount: 64 + Status: Blessing - Id: 35 Name: AL_CURE Description: Cure @@ -1867,6 +1881,7 @@ Body: Amount: 65 - Level: 10 Amount: 70 + Status: Concentrate - Id: 46 Name: AC_DOUBLE Description: Double Strafe @@ -1986,6 +2001,7 @@ Body: Time: 300000 Requires: SpCost: 10 + Status: Hiding - Id: 52 Name: TF_POISON Description: Envenom @@ -2003,6 +2019,7 @@ Body: Duration2: 60000 Requires: SpCost: 12 + Status: Poison - Id: 53 Name: TF_DETOXIFY Description: Detoxify @@ -2199,6 +2216,7 @@ Body: Amount: 50 Weapon: 2hSword: true + Status: TwoHandQuicken - Id: 61 Name: KN_AUTOCOUNTER Description: Counter Attack @@ -2247,6 +2265,7 @@ Body: Shotgun: true Grenade: true Huuma: true + Status: AutoCounter - Id: 62 Name: KN_BOWLINGBASH Description: Bowling Bash @@ -2331,6 +2350,7 @@ Body: Amount: 22 - Level: 5 Amount: 25 + Status: Impositio - Id: 67 Name: PR_SUFFRAGIUM Description: Suffragium @@ -2355,6 +2375,7 @@ Body: Time: 10000 Requires: SpCost: 8 + Status: Suffragium - Id: 68 Name: PR_ASPERSIO Description: Aspersio @@ -2401,6 +2422,7 @@ Body: ItemCost: - Item: Holy_Water Amount: 1 + Status: Aspersio - Id: 69 Name: PR_BENEDICTIO Description: B.S. Sacramenti @@ -2435,6 +2457,7 @@ Body: Time: 200000 Requires: SpCost: 20 + Status: Benedictio - Id: 70 Name: PR_SANCTUARY Description: Sanctuary @@ -2540,6 +2563,7 @@ Body: Amount: 10 - Level: 4 Amount: 12 + Status: SlowPoison - Id: 72 Name: PR_STRECOVERY Description: Status Recovery @@ -2593,6 +2617,7 @@ Body: Amount: 30 - Level: 10 Amount: 35 + Status: Kyrie - Id: 74 Name: PR_MAGNIFICAT Description: Magnificat @@ -2621,6 +2646,7 @@ Body: Time: 90000 Requires: SpCost: 40 + Status: Magnificat - Id: 75 Name: PR_GLORIA Description: Gloria @@ -2648,6 +2674,7 @@ Body: Time: 30000 Requires: SpCost: 20 + Status: Gloria - Id: 76 Name: PR_LEXDIVINA Description: Lex Divina @@ -2703,6 +2730,7 @@ Body: Amount: 12 - Level: 10 Amount: 10 + Status: Silence - Id: 77 Name: PR_TURNUNDEAD Description: Turn Undead @@ -2740,6 +2768,7 @@ Body: Duration1: 600000 Requires: SpCost: 10 + Status: Aeterna - Id: 79 Name: PR_MAGNUS Description: Magnus Exorcismus @@ -3151,6 +3180,7 @@ Body: Target: Enemy Flag: PathCheck: true + Status: Stun - Id: 84 Name: WZ_JUPITEL Description: Jupitel Thunder @@ -3346,6 +3376,7 @@ Body: Flag: NoOverlap: true PathCheck: true + Status: Blind - Id: 86 Name: WZ_WATERBALL Description: Water Ball @@ -3541,6 +3572,7 @@ Body: Amount: 29 - Level: 10 Amount: 27 + Status: Freeze - Id: 89 Name: WZ_STORMGUST Description: Storm Gust @@ -3594,6 +3626,7 @@ Body: Flag: NoOverlap: true PathCheck: true + Status: Freeze - Id: 90 Name: WZ_EARTHSPIKE Description: Earth Spike @@ -3765,6 +3798,7 @@ Body: Flag: PathCheck: true RemovedByFireRain: true + Status: Quagmire - Id: 93 Name: WZ_ESTIMATION Description: Sense @@ -3948,6 +3982,7 @@ Body: 1hAxe: true 2hAxe: true Mace: true + Status: Adrenaline - Id: 112 Name: BS_WEAPONPERFECT Description: Weapon Perfection @@ -3985,6 +4020,7 @@ Body: Amount: 12 - Level: 5 Amount: 10 + Status: WeaponPerfection - Id: 113 Name: BS_OVERTHRUST Description: Power-Thrust @@ -4046,6 +4082,7 @@ Body: Grenade: true Huuma: true 2hStaff: true + Status: Overthrust - Id: 114 Name: BS_MAXIMIZE Description: Maximize Power @@ -4071,6 +4108,7 @@ Body: Time: 5000 Requires: SpCost: 10 + Status: MaximizePower - Id: 115 Name: HT_SKIDTRAP Description: Skid Trap @@ -4171,6 +4209,7 @@ Body: NoReiteration: true NoFootSet: true RemovedByFireRain: true + Status: Stun - Id: 117 Name: HT_ANKLESNARE Description: Ankle Snare @@ -4223,6 +4262,7 @@ Body: NoFootSet: true NoKnockback: true RemovedByFireRain: true + Status: Ankle - Id: 118 Name: HT_SHOCKWAVE Description: Shockwave Trap @@ -4308,6 +4348,7 @@ Body: NoReiteration: true NoFootSet: true RemovedByFireRain: true + Status: Sleep - Id: 120 Name: HT_FLASHER Description: Flasher @@ -4351,6 +4392,7 @@ Body: NoReiteration: true NoFootSet: true RemovedByFireRain: true + Status: Blind - Id: 121 Name: HT_FREEZINGTRAP Description: Freezing Trap @@ -4410,6 +4452,7 @@ Body: NoReiteration: true NoFootSet: true RemovedByFireRain: true + Status: Freeze - Id: 122 Name: HT_BLASTMINE Description: Blast Mine @@ -4707,6 +4750,7 @@ Body: Time: 9000 Requires: SpCost: 15 + Status: Cloaking - Id: 136 Name: AS_SONICBLOW Description: Sonic Blow @@ -4746,6 +4790,7 @@ Body: Amount: 34 Weapon: Katar: true + Status: Stun - Id: 137 Name: AS_GRIMTOOTH Description: Grimtooth @@ -4837,6 +4882,7 @@ Body: Time: 100000 Requires: SpCost: 20 + Status: EncPoison - Id: 139 Name: AS_POISONREACT Description: Poison React @@ -4888,6 +4934,7 @@ Body: Amount: 45 - Level: 10 Amount: 45 + Status: PoisonReact - Id: 140 Name: AS_VENOMDUST Description: Venom Dust @@ -4935,6 +4982,7 @@ Body: Target: Enemy Flag: RemovedByFireRain: true + Status: Poison - Id: 141 Name: AS_SPLASHER Description: Venom Splasher @@ -5003,6 +5051,7 @@ Body: ItemCost: - Item: Red_Gemstone Amount: 1 + Status: Splasher - Id: 142 Name: NV_FIRSTAID Description: First Aid @@ -5030,6 +5079,7 @@ Body: Duration1: 600000 Requires: SpCost: 5 + Status: TrickDead - Id: 144 Name: SM_MOVINGRECOVERY Description: Moving HP-Recovery @@ -5058,6 +5108,7 @@ Body: HitCount: 1 Requires: SpCost: 1 + Status: AutoBerserk - Id: 147 Name: AC_MAKINGARROW Description: Arrow Crafting @@ -5114,6 +5165,7 @@ Body: Duration2: 30000 Requires: SpCost: 9 + Status: Blind - Id: 150 Name: TF_BACKSLIDING Description: Back Slide @@ -5145,6 +5197,7 @@ Body: Requires: SpCost: 3 State: Recover_Weight_Rate + Status: Stun - Id: 152 Name: TF_THROWSTONE Description: Stone Fling @@ -5169,6 +5222,7 @@ Body: ItemCost: - Item: Stone Amount: 1 + Status: Stun - Id: 153 Name: MC_CARTREVOLUTION Description: Cart Revolution @@ -5221,6 +5275,7 @@ Body: Duration1: 300000 Requires: SpCost: 8 + Status: Loud - Id: 156 Name: AL_HOLYLIGHT Description: Holy Light @@ -5258,6 +5313,7 @@ Body: Duration1: 300000 Requires: SpCost: 30 + Status: EnergyCoat - Id: 158 Name: NPC_PIERCINGATT Description: Piercing Attack @@ -5309,6 +5365,7 @@ Body: IsNpc: true HitCount: 1 Duration1: 1800000 + Status: ElementalChange - Id: 162 Name: NPC_CHANGEWATER Description: Water Attribute Change @@ -5322,6 +5379,7 @@ Body: HitCount: 1 Element: Water Duration1: 1800000 + Status: ElementalChange - Id: 163 Name: NPC_CHANGEGROUND Description: Earth Attribute Change @@ -5335,6 +5393,7 @@ Body: HitCount: 1 Element: Earth Duration1: 1800000 + Status: ElementalChange - Id: 164 Name: NPC_CHANGEFIRE Description: Fire Attribute Change @@ -5348,6 +5407,7 @@ Body: HitCount: 1 Element: Fire Duration1: 1800000 + Status: ElementalChange - Id: 165 Name: NPC_CHANGEWIND Description: Wind Attribute Change @@ -5361,6 +5421,7 @@ Body: HitCount: 1 Element: Wind Duration1: 1800000 + Status: ElementalChange - Id: 166 Name: NPC_CHANGEPOISON Description: Poison Attribute Change @@ -5374,6 +5435,7 @@ Body: HitCount: 1 Element: Poison Duration1: 1800000 + Status: ElementalChange - Id: 167 Name: NPC_CHANGEHOLY Description: Holy Attribute Change @@ -5387,6 +5449,7 @@ Body: HitCount: 1 Element: Holy Duration1: 1800000 + Status: ElementalChange - Id: 168 Name: NPC_CHANGEDARKNESS Description: Shadow Attribute Change @@ -5400,6 +5463,7 @@ Body: HitCount: 1 Element: Dark Duration1: 1800000 + Status: ElementalChange - Id: 169 Name: NPC_CHANGETELEKINESIS Description: Ghost Attribute Change @@ -5413,6 +5477,7 @@ Body: HitCount: 1 Element: Ghost Duration1: 1800000 + Status: ElementalChange - Id: 170 Name: NPC_CRITICALSLASH Description: Defense disregard attack @@ -5535,6 +5600,7 @@ Body: HitCount: 1 Element: Weapon Duration2: 60000 + Status: Poison - Id: 177 Name: NPC_BLINDATTACK Description: Blind Attack @@ -5548,6 +5614,7 @@ Body: HitCount: 1 Element: Weapon Duration2: 30000 + Status: Blind - Id: 178 Name: NPC_SILENCEATTACK Description: Silence Attack @@ -5561,6 +5628,7 @@ Body: HitCount: 1 Element: Weapon Duration2: 30000 + Status: Silence - Id: 179 Name: NPC_STUNATTACK Description: Stun Attack @@ -5574,6 +5642,7 @@ Body: HitCount: 1 Element: Weapon Duration2: 5000 + Status: Stun - Id: 180 Name: NPC_PETRIFYATTACK Description: Petrify Attack @@ -5587,6 +5656,7 @@ Body: HitCount: 1 Element: Weapon Duration2: 20000 + Status: Stone - Id: 181 Name: NPC_CURSEATTACK Description: Curse Attack @@ -5600,6 +5670,7 @@ Body: HitCount: 1 Element: Dark Duration2: 30000 + Status: Curse - Id: 182 Name: NPC_SLEEPATTACK Description: Sleep attack @@ -5613,6 +5684,7 @@ Body: HitCount: 1 Element: Weapon Duration2: 30000 + Status: Sleep - Id: 183 Name: NPC_RANDOMATTACK Description: Random Attack @@ -5686,6 +5758,7 @@ Body: Hit: Single HitCount: 1 Element: Poison + Status: Poison - Id: 189 Name: NPC_HOLYATTACK Description: Holy Attribute Attack @@ -5735,6 +5808,7 @@ Body: HitCount: 1 Element: Weapon Duration1: 15000 + Status: MagicalAttack - Id: 193 Name: NPC_METAMORPHOSIS Description: Metamorphosis @@ -5789,6 +5863,7 @@ Body: Flags: IsNpc: true HitCount: 1 + Status: ModeChange - Id: 198 Name: NPC_TRANSFORMATION Description: Transformation @@ -5858,6 +5933,7 @@ Body: Time: 140000 - Level: 10 Time: 150000 + Status: Keeping - Id: 202 Name: NPC_DARKBREATH Description: Dark Breath @@ -5884,6 +5960,7 @@ Body: Hit: Single HitCount: 1 Element: Dark + Status: Coma - Id: 204 Name: NPC_BARRIER Description: Barrier @@ -5916,6 +5993,7 @@ Body: Time: 140000 - Level: 10 Time: 150000 + Status: Barrier - Id: 205 Name: NPC_DEFENDER Description: Defender @@ -5948,6 +6026,7 @@ Body: Time: 140000 - Level: 10 Time: 150000 + Status: Armor - Id: 206 Name: NPC_LICK Description: Lick @@ -5963,6 +6042,7 @@ Body: HitCount: 1 Element: Weapon Duration2: 5000 + Status: Stun - Id: 207 Name: NPC_HALLUCINATION Description: Hallucination @@ -5976,6 +6056,7 @@ Body: Range: 9 HitCount: 1 Duration2: 30000 + Status: Hallucination - Id: 208 Name: NPC_REBIRTH Description: Rebirth @@ -5987,6 +6068,7 @@ Body: Flags: IsNpc: true HitCount: 1 + Status: Rebirth - Id: 209 Name: NPC_SUMMONMONSTER Description: Monster Summons @@ -6038,6 +6120,7 @@ Body: AfterCastActDelay: 500 Requires: SpCost: 16 + Status: Stun - Id: 213 Name: RG_TUNNELDRIVE Description: Stalk @@ -6099,6 +6182,7 @@ Body: Amount: 23 - Level: 5 Amount: 25 + Status: StripWeapon - Id: 216 Name: RG_STRIPSHIELD Description: Divest Shield @@ -6135,6 +6219,7 @@ Body: Amount: 18 - Level: 5 Amount: 20 + Status: StripShield - Id: 217 Name: RG_STRIPARMOR Description: Divest Armor @@ -6171,6 +6256,7 @@ Body: Amount: 23 - Level: 5 Amount: 25 + Status: StripArmor - Id: 218 Name: RG_STRIPHELM Description: Divest Helm @@ -6207,6 +6293,7 @@ Body: Amount: 18 - Level: 5 Amount: 20 + Status: StripHelm - Id: 219 Name: RG_INTIMIDATE Description: Snatch @@ -6395,6 +6482,7 @@ Body: ItemCost: - Item: Acid_Bottle Amount: 1 + Status: Bleeding - Id: 231 Name: AM_POTIONPITCHER Description: Aid Potion @@ -6510,6 +6598,7 @@ Body: ItemCost: - Item: Coating_Bottle Amount: 1 + Status: Cp_Weapon - Id: 235 Name: AM_CP_SHIELD Description: Synthesized Shield @@ -6539,6 +6628,7 @@ Body: ItemCost: - Item: Coating_Bottle Amount: 1 + Status: Cp_Shield - Id: 236 Name: AM_CP_ARMOR Description: Synthetic Armor @@ -6568,6 +6658,7 @@ Body: ItemCost: - Item: Coating_Bottle Amount: 1 + Status: Cp_Armor - Id: 237 Name: AM_CP_HELM Description: Biochemical Helm @@ -6597,6 +6688,7 @@ Body: ItemCost: - Item: Coating_Bottle Amount: 1 + Status: Cp_Helm - Id: 238 Name: AM_BIOETHICS Description: Bioethics @@ -6686,6 +6778,7 @@ Body: - Level: 10 Amount: 30 State: Shield + Status: AutoGuard - Id: 250 Name: CR_SHIELDCHARGE Description: Smite @@ -6714,6 +6807,7 @@ Body: Requires: SpCost: 10 State: Shield + Status: Stun - Id: 251 Name: CR_SHIELDBOOMERANG Description: Shield Boomerang @@ -6775,6 +6869,7 @@ Body: - Level: 10 Amount: 80 State: Shield + Status: ReflectShield - Id: 253 Name: CR_HOLYCROSS Description: Holy Cross @@ -6814,6 +6909,7 @@ Body: Amount: 19 - Level: 10 Amount: 20 + Status: Blind - Id: 254 Name: CR_GRANDCROSS Description: Grand Cross @@ -6869,6 +6965,7 @@ Body: Target: Enemy Flag: PathCheck: true + Status: Blind - Id: 255 Name: CR_DEVOTION Description: Sacrifice @@ -6907,6 +7004,7 @@ Body: Time: 90000 Requires: SpCost: 25 + Status: Devotion - Id: 256 Name: CR_PROVIDENCE Description: Resistant Souls @@ -6924,6 +7022,7 @@ Body: Duration1: 180000 Requires: SpCost: 30 + Status: Providence - Id: 257 Name: CR_DEFENDER Description: Defending Aura @@ -6939,6 +7038,7 @@ Body: Requires: SpCost: 30 State: Shield + Status: Defender - Id: 258 Name: CR_SPEARQUICKEN Description: Spear Quicken @@ -6994,6 +7094,7 @@ Body: Amount: 60 Weapon: 2hSpear: true + Status: SpearQuicken - Id: 259 Name: MO_IRONHAND Description: Iron Fists @@ -7175,6 +7276,7 @@ Body: Requires: SpCost: 200 SpiritSphereCost: 5 + Status: SteelBody - Id: 269 Name: MO_BLADESTOP Description: Root @@ -7233,6 +7335,7 @@ Body: Grenade: true Huuma: true SpiritSphereCost: 1 + Status: BladeStop_Wait - Id: 270 Name: MO_EXPLOSIONSPIRITS Description: Fury @@ -7246,6 +7349,7 @@ Body: Requires: SpCost: 15 SpiritSphereCost: 5 + Status: ExplosionSpirits - Id: 271 Name: MO_EXTREMITYFIST Description: Asura Strike @@ -7316,6 +7420,7 @@ Body: Status: Explosionspirits: true SpiritSphereCost: 5 + Status: ExtremityFist - Id: 272 Name: MO_CHAINCOMBO Description: Raging Quadruple Blow @@ -7464,6 +7569,7 @@ Body: Time: 1200 Requires: SpCost: 2 + Status: MagicRod - Id: 277 Name: SA_SPELLBREAKER Description: Spell Breaker @@ -7519,6 +7625,7 @@ Body: Time: 390000 Requires: SpCost: 35 + Status: AutoSpell - Id: 280 Name: SA_FLAMELAUNCHER Description: Endow Blaze @@ -7552,6 +7659,7 @@ Body: ItemCost: - Item: Boody_Red Amount: 1 + Status: FireWeapon - Id: 281 Name: SA_FROSTWEAPON Description: Endow Tsunami @@ -7585,6 +7693,7 @@ Body: ItemCost: - Item: Crystal_Blue Amount: 1 + Status: WaterWeapon - Id: 282 Name: SA_LIGHTNINGLOADER Description: Endow Tornado @@ -7618,6 +7727,7 @@ Body: ItemCost: - Item: Wind_Of_Verdure Amount: 1 + Status: WindWeapon - Id: 283 Name: SA_SEISMICWEAPON Description: Endow Quake @@ -7651,6 +7761,7 @@ Body: ItemCost: - Item: Yellow_Live Amount: 1 + Status: EarthWeapon - Id: 284 Name: SA_DRAGONOLOGY Description: Dragonology @@ -7705,6 +7816,7 @@ Body: Flag: PathCheck: true RemovedByFireRain: true + Status: Volcano - Id: 286 Name: SA_DELUGE Description: Deluge @@ -7754,6 +7866,7 @@ Body: Flag: PathCheck: true RemovedByFireRain: true + Status: Deluge - Id: 287 Name: SA_VIOLENTGALE Description: Whirlwind @@ -7803,6 +7916,7 @@ Body: Flag: PathCheck: true RemovedByFireRain: true + Status: ViolentGale - Id: 288 Name: SA_LANDPROTECTOR Description: Magnetic Earth @@ -7964,6 +8078,7 @@ Body: Duration1: 1200000 Requires: SpCost: 1 + Status: Orcish - Id: 295 Name: SA_DEATH Description: Grim Reaper @@ -8104,6 +8219,7 @@ Body: CastCancel: true Requires: SpCost: 1 + Status: Coma - Id: 304 Name: BD_ADAPTATION Description: Amp @@ -8132,6 +8248,7 @@ Body: Weapon: Musical: true Whip: true + Status: Dancing - Id: 306 Name: BD_LULLABY Description: Lullaby @@ -8185,6 +8302,7 @@ Body: Flag: NoPc: true Ensemble: true + Status: RichManKim - Id: 308 Name: BD_ETERNALCHAOS Description: Down Tempo @@ -8211,6 +8329,7 @@ Body: Target: Enemy Flag: Ensemble: true + Status: EternalChaos - Id: 309 Name: BD_DRUMBATTLEFIELD Description: Battle Theme @@ -8247,6 +8366,7 @@ Body: Target: Party Flag: Ensemble: true + Status: DrumBattle - Id: 310 Name: BD_RINGNIBELUNGEN Description: Harmonic Lick @@ -8283,6 +8403,7 @@ Body: Target: Party Flag: Ensemble: true + Status: Nibelungen - Id: 311 Name: BD_ROKISWEIL Description: Classical Pluck @@ -8308,6 +8429,7 @@ Body: Interval: -1 Flag: Ensemble: true + Status: RokisWeil - Id: 312 Name: BD_INTOABYSS Description: Power Chord @@ -8335,6 +8457,7 @@ Body: Flag: NoMob: true Ensemble: true + Status: IntoAbyss - Id: 313 Name: BD_SIEGFRIED Description: Acoustic Rhythm @@ -8361,6 +8484,7 @@ Body: Target: Party Flag: Ensemble: true + Status: Siegfried - Id: 315 Name: BA_MUSICALLESSON Description: Music Lessons @@ -8459,6 +8583,7 @@ Body: Amount: 18 - Level: 5 Amount: 20 + Status: Freeze - Id: 319 Name: BA_WHISTLE Description: Perfect Tablature @@ -8506,6 +8631,7 @@ Body: Flag: NoMob: true Song: true + Status: Whistle - Id: 320 Name: BA_ASSASSINCROSS Description: Impressive Riff @@ -8553,6 +8679,7 @@ Body: Flag: NoMob: true Song: true + Status: AssnCros - Id: 321 Name: BA_POEMBRAGI Description: Magic Strings @@ -8600,6 +8727,7 @@ Body: Flag: NoMob: true Song: true + Status: PoemBragi - Id: 322 Name: BA_APPLEIDUN Description: Song of Lutie @@ -8648,6 +8776,7 @@ Body: NoMob: true Song: true DualMode: true + Status: AppleIdun - Id: 323 Name: DC_DANCINGLESSON Description: Dance Lessons @@ -8745,6 +8874,7 @@ Body: Amount: 18 - Level: 5 Amount: 20 + Status: Stun - Id: 327 Name: DC_HUMMING Description: Focus Ballet @@ -8792,6 +8922,7 @@ Body: Flag: NoMob: true Dance: true + Status: Humming - Id: 328 Name: DC_DONTFORGETME Description: Slow Grace @@ -8839,6 +8970,7 @@ Body: Target: Enemy Flag: Dance: true + Status: DontForgetMe - Id: 329 Name: DC_FORTUNEKISS Description: Lady Luck @@ -8886,6 +9018,7 @@ Body: Flag: NoMob: true Dance: true + Status: Fortune - Id: 330 Name: DC_SERVICEFORYOU Description: Gypsy's Kiss @@ -8933,6 +9066,7 @@ Body: Flag: NoMob: true Dance: true + Status: Service4U - Id: 331 Name: NPC_RANDOMMOVE Description: Random Move @@ -9052,6 +9186,7 @@ Body: HitCount: -2 Element: Dark Duration2: 30000 + Status: Blind - Id: 339 Name: NPC_GRANDDARKNESS Description: Grand cross of Darkness @@ -9075,6 +9210,7 @@ Body: Layout: -1 Interval: 300 Target: Enemy + Status: Blind - Id: 340 Name: NPC_DARKSTRIKE Description: Soul Strike of Darkness @@ -9186,6 +9322,7 @@ Body: Hit: Single HitCount: 1 Element: Weapon + Status: BrokenWeapon - Id: 344 Name: NPC_ARMORBRAKE Description: Break armor @@ -9198,6 +9335,7 @@ Body: Hit: Single HitCount: 1 Element: Weapon + Status: BrokenArmor - Id: 345 Name: NPC_HELMBRAKE Description: Break helm @@ -9248,6 +9386,7 @@ Body: HitCount: 1 Element: Undead Duration1: 30000 + Status: ChangeUndead - Id: 349 Name: NPC_POWERUP Description: Power Up @@ -9270,6 +9409,7 @@ Body: Time: 25000 - Level: 5 Time: 30000 + Status: IncHitRate - Id: 350 Name: NPC_AGIUP Description: Agility UP @@ -9291,6 +9431,7 @@ Body: Time: 25000 - Level: 5 Time: 30000 + Status: IncFleeRate - Id: 351 Name: NPC_SIEGEMODE Description: Siege Mode @@ -9341,6 +9482,7 @@ Body: Time: 2000 - Level: 6 Time: 2500 + Status: Cloaking - Id: 355 Name: LK_AURABLADE Description: Aura Blade @@ -9397,6 +9539,7 @@ Body: Shotgun: true Grenade: true Huuma: true + Status: AuraBlade - Id: 356 Name: LK_PARRYING Description: Parrying @@ -9432,6 +9575,7 @@ Body: SpCost: 50 Weapon: 2hSword: true + Status: Parrying - Id: 357 Name: LK_CONCENTRATION Description: Concentration @@ -9465,6 +9609,7 @@ Body: Amount: 26 - Level: 5 Amount: 30 + Status: Concentration - Id: 358 Name: LK_TENSIONRELAX Description: Relax @@ -9478,6 +9623,7 @@ Body: Duration1: 180000 Requires: SpCost: 15 + Status: TensionRelax - Id: 359 Name: LK_BERSERK Description: Frenzy @@ -9492,6 +9638,7 @@ Body: Duration2: 15000 Requires: SpCost: 200 + Status: Berserk - Id: 360 Name: LK_FURY Description: Fury @@ -9561,6 +9708,7 @@ Body: Amount: 50 - Level: 5 Amount: 60 + Status: Assumptio - Id: 362 Name: HP_BASILICA Description: Basilica @@ -9646,6 +9794,7 @@ Body: Interval: 300 Flag: RangedSingleUnit: true + Status: Basilica - Id: 363 Name: HP_MEDITATIO Description: Meditatio @@ -9709,6 +9858,7 @@ Body: Amount: 46 - Level: 10 Amount: 50 + Status: MagicPower - Id: 367 Name: PA_PRESSURE Description: Gloria Domini @@ -9786,6 +9936,7 @@ Body: AfterCastActDelay: 2000 Requires: SpCost: 100 + Status: Sacrifice - Id: 369 Name: PA_GOSPEL Description: Battle Chant @@ -9828,6 +9979,7 @@ Body: Interval: 10000 Flag: NoOverlap: true + Status: Gospel - Id: 370 Name: CH_PALMSTRIKE Description: Raging Palm Strike @@ -9895,6 +10047,7 @@ Body: - Level: 5 Amount: 12 SpiritSphereCost: 1 + Status: Stop - Id: 372 Name: CH_CHAINCRUSH Description: Chain Crush Combo @@ -10098,6 +10251,7 @@ Body: ItemCost: - Item: Poison_Bottle Amount: 1 + Status: Edp - Id: 379 Name: ASC_BREAKER Description: Soul Destroyer @@ -10188,6 +10342,7 @@ Body: Amount: 40 - Level: 10 Amount: 40 + Status: TrueSight - Id: 381 Name: SN_FALCONASSAULT Description: Falcon Assault @@ -10329,6 +10484,7 @@ Body: Amount: 94 - Level: 10 Amount: 100 + Status: WindWalk - Id: 384 Name: WS_MELTDOWN Description: Shattering Strike @@ -10406,6 +10562,7 @@ Body: Amount: 90 - Level: 10 Amount: 90 + Status: Meltdown - Id: 385 Name: WS_CREATECOIN Description: Create Coins @@ -10444,6 +10601,7 @@ Body: Requires: SpCost: 20 State: Cart + Status: CartBoost - Id: 388 Name: WS_SYSTEMCREATE Description: Auto Attack System @@ -10475,6 +10633,7 @@ Body: Duration2: 30000 Requires: SpCost: 10 + Status: ChaseWalk - Id: 390 Name: ST_REJECTSWORD Description: Counter Instinct @@ -10498,6 +10657,7 @@ Body: Amount: 25 - Level: 5 Amount: 30 + Status: RejectSword - Id: 392 Name: CR_ALCHEMY Description: Alchemy @@ -10664,6 +10824,7 @@ Body: Duration1: 1000 Requires: SpCost: 100 + Status: Marionette - Id: 397 Name: LK_SPIRALPIERCE Description: Spiral Pierce @@ -10716,6 +10877,7 @@ Body: Weapon: 1hSpear: true 2hSpear: true + Status: Stop - Id: 398 Name: LK_HEADCRUSH Description: Traumatic Blow @@ -10730,6 +10892,7 @@ Body: Duration2: 120000 Requires: SpCost: 23 + Status: Bleeding - Id: 399 Name: LK_JOINTBEAT Description: Vital Strike @@ -10787,6 +10950,7 @@ Body: Weapon: 1hSpear: true 2hSpear: true + Status: JointBeat - Id: 400 Name: HW_NAPALMVULCAN Description: Napalm Vulcan @@ -10877,6 +11041,7 @@ Body: Amount: 21 - Level: 5 Amount: 24 + Status: MindBreaker - Id: 403 Name: PF_MEMORIZE Description: Foresight @@ -10893,6 +11058,7 @@ Body: IgnoreStatus: true Requires: SpCost: 1 + Status: Memorize - Id: 404 Name: PF_FOGWALL Description: Blinding Mist @@ -10920,6 +11086,7 @@ Body: Interval: -1 Flag: RemovedByFireRain: true + Status: FogWall - Id: 405 Name: PF_SPIDERWEB Description: Fiber Lock @@ -10945,6 +11112,7 @@ Body: Target: Enemy Flag: RemovedByFireRain: true + Status: SpiderWeb - Id: 406 Name: ASC_METEORASSAULT Description: Meteor Assault @@ -11024,6 +11192,7 @@ Body: Requires: SpCost: 1 SpRateCost: -10 + Status: ProtectExp - Id: 409 Name: WE_CALLPARENT Description: Call Parent @@ -11122,6 +11291,7 @@ Body: - Level: 10 Amount: 10 State: Move_Enable + Status: Run - Id: 412 Name: TK_READYSTORM Description: Tornado Stance @@ -11178,6 +11348,7 @@ Body: HitCount: 1 Requires: SpCost: 1 + Status: ReadyDown - Id: 415 Name: TK_DOWNKICK Description: Heel Drop @@ -11207,6 +11378,7 @@ Body: Amount: 4 - Level: 7 Amount: 2 + Status: Stun - Id: 416 Name: TK_READYTURN Description: Roundhouse Stance @@ -11219,6 +11391,7 @@ Body: HitCount: 1 Requires: SpCost: 1 + Status: ReadyTurn - Id: 417 Name: TK_TURNKICK Description: Roundhouse Kick @@ -11264,6 +11437,7 @@ Body: HitCount: 1 Requires: SpCost: 1 + Status: ReadyCounter - Id: 419 Name: TK_COUNTER Description: Counter Kick @@ -11306,6 +11480,7 @@ Body: HitCount: 1 Requires: SpCost: 1 + Status: Dodge - Id: 421 Name: TK_JUMPKICK Description: Flying Kick @@ -11349,6 +11524,7 @@ Body: MaxLevel: 10 SplashArea: 1 Duration1: 1800000 + Status: EarthScroll - Id: 424 Name: TK_POWER Description: Kihop @@ -11396,6 +11572,7 @@ Body: Amount: 50 - Level: 7 Amount: 50 + Status: SevenWind - Id: 426 Name: TK_HIGHJUMP Description: Taekwon Jump @@ -11466,6 +11643,7 @@ Body: Range: 1 Interval: 100 Target: Enemy + Status: Warm - Id: 429 Name: SG_MOON_WARM Description: Warmth of the Moon @@ -11499,6 +11677,7 @@ Body: Range: 1 Interval: 100 Target: Enemy + Status: Warm - Id: 430 Name: SG_STAR_WARM Description: Warmth of the Stars @@ -11532,6 +11711,7 @@ Body: Range: 1 Interval: 100 Target: Enemy + Status: Warm - Id: 431 Name: SG_SUN_COMFORT Description: Comfort of the Sun @@ -11562,6 +11742,7 @@ Body: Amount: 50 - Level: 4 Amount: 40 + Status: Sun_Comfort - Id: 432 Name: SG_MOON_COMFORT Description: Comfort of the Moon @@ -11592,6 +11773,7 @@ Body: Amount: 50 - Level: 4 Amount: 40 + Status: Moon_Comfort - Id: 433 Name: SG_STAR_COMFORT Description: Comfort of the Stars @@ -11622,6 +11804,7 @@ Body: Amount: 50 - Level: 4 Amount: 40 + Status: Star_Comfort - Id: 434 Name: SG_HATE Description: Hatred of the Sun Moon and Stars @@ -11670,11 +11853,13 @@ Body: Description: Friend of the Sun Moon and Stars MaxLevel: 3 Duration1: 10000 + Status: SkillRate_Up - Id: 443 Name: SG_KNOWLEDGE Description: Knowledge of the Sun Moon and Stars MaxLevel: 10 Duration1: 600000 + Status: Knowledge - Id: 444 Name: SG_FUSION Description: Union of the Sun Moon and Stars @@ -11689,6 +11874,7 @@ Body: Duration1: 600000 Requires: SpCost: 100 + Status: Fusion - Id: 445 Name: SL_ALCHEMIST Description: Spirit of the Alchemist @@ -11728,6 +11914,7 @@ Body: Amount: 160 - Level: 5 Amount: 60 + Status: Spirit - Id: 446 Name: AM_BERSERKPITCHER Description: Aid Berserk Potion @@ -11789,6 +11976,7 @@ Body: Amount: 160 - Level: 5 Amount: 60 + Status: Spirit - Id: 448 Name: SL_STAR Description: Spirit of the Star Gladiator @@ -11828,6 +12016,7 @@ Body: Amount: 160 - Level: 5 Amount: 60 + Status: Spirit - Id: 449 Name: SL_SAGE Description: Spirit of the Sage @@ -11867,6 +12056,7 @@ Body: Amount: 160 - Level: 5 Amount: 60 + Status: Spirit - Id: 450 Name: SL_CRUSADER Description: Spirit of the Crusader @@ -11906,6 +12096,7 @@ Body: Amount: 160 - Level: 5 Amount: 60 + Status: Spirit - Id: 451 Name: SL_SUPERNOVICE Description: Spirit of the Supernovice @@ -11945,6 +12136,7 @@ Body: Amount: 160 - Level: 5 Amount: 60 + Status: Spirit - Id: 452 Name: SL_KNIGHT Description: Spirit of the Knight @@ -11984,6 +12176,7 @@ Body: Amount: 160 - Level: 5 Amount: 60 + Status: Spirit - Id: 453 Name: SL_WIZARD Description: Spirit of the Wizard @@ -12023,6 +12216,7 @@ Body: Amount: 160 - Level: 5 Amount: 60 + Status: Spirit - Id: 454 Name: SL_PRIEST Description: Spirit of the Priest @@ -12062,6 +12256,7 @@ Body: Amount: 160 - Level: 5 Amount: 60 + Status: Spirit - Id: 455 Name: SL_BARDDANCER Description: Spirit of the Artist @@ -12101,6 +12296,7 @@ Body: Amount: 160 - Level: 5 Amount: 60 + Status: Spirit - Id: 456 Name: SL_ROGUE Description: Spirit of the Rogue @@ -12140,6 +12336,7 @@ Body: Amount: 160 - Level: 5 Amount: 60 + Status: Spirit - Id: 457 Name: SL_ASSASIN Description: Spirit of the Assasin @@ -12179,6 +12376,7 @@ Body: Amount: 160 - Level: 5 Amount: 60 + Status: Spirit - Id: 458 Name: SL_BLACKSMITH Description: Spirit of the Blacksmith @@ -12218,6 +12416,7 @@ Body: Amount: 160 - Level: 5 Amount: 60 + Status: Spirit - Id: 459 Name: BS_ADRENALINE2 Description: Advanced Adrenaline Rush @@ -12253,6 +12452,7 @@ Body: Whip: true Book: true Katar: true + Status: Adrenaline2 - Id: 460 Name: SL_HUNTER Description: Spirit of the Hunter @@ -12292,6 +12492,7 @@ Body: Amount: 160 - Level: 5 Amount: 60 + Status: Spirit - Id: 461 Name: SL_SOULLINKER Description: Spirit of the Soul Linker @@ -12331,6 +12532,7 @@ Body: Amount: 160 - Level: 5 Amount: 60 + Status: Spirit - Id: 462 Name: SL_KAIZEL Description: Kaizel @@ -12378,6 +12580,7 @@ Body: Amount: 70 - Level: 7 Amount: 60 + Status: Kaizel - Id: 463 Name: SL_KAAHI Description: Kaahi @@ -12394,6 +12597,7 @@ Body: Duration1: 350000 Requires: SpCost: 30 + Status: Kaahi - Id: 464 Name: SL_KAUPE Description: Kaupe @@ -12417,6 +12621,7 @@ Body: Amount: 30 - Level: 3 Amount: 40 + Status: Kaupe - Id: 465 Name: SL_KAITE Description: Kaite @@ -12461,6 +12666,7 @@ Body: Time: 600000 Requires: SpCost: 70 + Status: Kaite - Id: 466 Name: SL_KAINA Description: Kaina @@ -12525,6 +12731,7 @@ Body: Amount: 28 - Level: 7 Amount: 30 + Status: Stun - Id: 469 Name: SL_SMA Description: Esma @@ -12581,6 +12788,7 @@ Body: Amount: 72 - Level: 10 Amount: 80 + Status: Sma - Id: 470 Name: SL_SWOO Description: Eswoo @@ -12625,6 +12833,7 @@ Body: Amount: 25 - Level: 7 Amount: 15 + Status: Swoo - Id: 471 Name: SL_SKE Description: Eske @@ -12660,6 +12869,7 @@ Body: Amount: 35 - Level: 3 Amount: 15 + Status: Ske - Id: 472 Name: SL_SKA Description: Eska @@ -12694,6 +12904,7 @@ Body: Amount: 80 - Level: 3 Amount: 60 + Status: Ska - Id: 473 Name: SM_SELFPROVOKE Description: Provoke Self @@ -12704,6 +12915,7 @@ Body: Hit: Single HitCount: 1 Duration1: 30000 + Status: Provoke - Id: 474 Name: NPC_EMOTION_ON Description: Emotion ON @@ -12714,6 +12926,7 @@ Body: Flags: IsNpc: true HitCount: 1 + Status: ModeChange - Id: 475 Name: ST_PRESERVE Description: Preserve @@ -12727,6 +12940,7 @@ Body: Duration1: 600000 Requires: SpCost: 30 + Status: Preserve - Id: 476 Name: ST_FULLSTRIP Description: Divest All @@ -12897,6 +13111,7 @@ Body: Amount: 55 - Level: 5 Amount: 60 + Status: DoubleCast - Id: 483 Name: HW_GANBANTEIN Description: Ganbantein @@ -12987,6 +13202,7 @@ Body: PathCheck: true DualMode: true RemovedByFireRain: true + Status: Gravitation - Id: 485 Name: WS_CARTTERMINATION Description: Cart Termination @@ -13052,6 +13268,7 @@ Body: Huuma: true Status: Cartboost: true + Status: Stun - Id: 486 Name: WS_OVERTHRUSTMAX Description: Maximum Power Thrust @@ -13101,6 +13318,7 @@ Body: Shotgun: true Grenade: true Huuma: true + Status: MaxOverThrust - Id: 487 Name: CG_LONGINGFREEDOM Description: Longing for Freedom @@ -13115,6 +13333,7 @@ Body: Duration1: 180000 Requires: SpCost: 15 + Status: Longing - Id: 488 Name: CG_HERMODE Description: Wand of Hermode @@ -13172,6 +13391,7 @@ Body: Interval: -1 Flag: Ensemble: true + Status: Hermode - Id: 489 Name: CG_TAROTCARD Description: Tarot Card of Fate @@ -13283,6 +13503,7 @@ Body: Duration1: 180000 Requires: SpCost: 1 + Status: EnchantArms - Id: 493 Name: TK_MISSION Description: Taekwon Mission @@ -13332,6 +13553,7 @@ Body: Amount: 160 - Level: 5 Amount: 60 + Status: Spirit - Id: 495 Name: KN_ONEHAND Description: Onehand Quicken @@ -13349,6 +13571,7 @@ Body: SpCost: 100 Weapon: 1hSword: true + Status: OneHand - Id: 496 Name: AM_TWILIGHT1 Description: Twilight Alchemy 1 @@ -13459,6 +13682,7 @@ Body: Requires: SpCost: 10 SpiritSphereCost: 5 + Status: Fling - Id: 502 Name: GS_TRIPLEACTION Description: Triple Action @@ -13529,9 +13753,10 @@ Body: Requires: SpCost: 30 SpiritSphereCost: 4 + Status: MadnessCancel - Id: 505 Name: GS_ADJUSTMENT - Description: AdJustment + Description: Adjustment MaxLevel: 1 Type: Weapon TargetType: Self @@ -13545,6 +13770,7 @@ Body: Requires: SpCost: 15 SpiritSphereCost: 2 + Status: Adjustment - Id: 506 Name: GS_INCREASING Description: Increasing Accuracy @@ -13560,6 +13786,7 @@ Body: Requires: SpCost: 30 SpiritSphereCost: 4 + Status: Increasing - Id: 507 Name: GS_MAGICALBULLET Description: Magical Bullet @@ -13601,6 +13828,7 @@ Body: Throwweapon: true AmmoAmount: 1 SpiritSphereCost: 1 + Status: Stun - Id: 509 Name: GS_SINGLEACTION Description: Single Action @@ -13712,6 +13940,7 @@ Body: Ammo: Bullet: true AmmoAmount: 1 + Status: StripWeapon - Id: 514 Name: GS_PIERCINGSHOT Description: Piercing Shot @@ -13746,6 +13975,7 @@ Body: Ammo: Bullet: true AmmoAmount: 1 + Status: Bleeding - Id: 515 Name: GS_RAPIDSHOWER Description: Rapid Shower @@ -13889,6 +14119,7 @@ Body: Amount: 48 Weapon: Gatling: true + Status: GatlingFever - Id: 518 Name: GS_DUST Description: Dust @@ -14319,6 +14550,7 @@ Body: Flag: NoOverlap: true PathCheck: true + Status: Tatamigaeshi - Id: 528 Name: NJ_KASUMIKIRI Description: Vanishing Slash @@ -14489,6 +14721,7 @@ Body: Amount: 21 - Level: 5 Amount: 24 + Status: Utsusemi - Id: 532 Name: NJ_BUNSINJYUTSU Description: Mirror Image @@ -14568,6 +14801,7 @@ Body: ItemCost: - Item: Shadow_Orb Amount: 1 + Status: Bunsinjyutsu - Id: 533 Name: NJ_NINPOU Description: Spirit of the Blade @@ -14930,6 +15164,7 @@ Body: Flag: PathCheck: true RemovedByFireRain: true + Status: Suiton - Id: 539 Name: NJ_HYOUSYOURAKU Description: Ice Meteor @@ -14990,6 +15225,7 @@ Body: Target: Enemy Flag: PathCheck: true + Status: Freeze - Id: 540 Name: NJ_HUUJIN Description: Wind Blade @@ -15218,6 +15454,7 @@ Body: - Level: 5 Amount: 60 HpRateCost: -5 + Status: Nen - Id: 544 Name: NJ_ISSEN Description: Final Strike @@ -15414,6 +15651,7 @@ Body: SplashArea: 3 ActiveInstance: 14 Duration2: 12000 + Status: Freeze - Id: 656 Name: NPC_THUNDERBREATH Description: Thunder Breath @@ -15443,6 +15681,7 @@ Body: SplashArea: 3 ActiveInstance: 14 Duration2: 60000 + Status: Poison - Id: 658 Name: NPC_DARKNESSBREATH Description: Darkness Breath @@ -15519,6 +15758,7 @@ Body: HitCount: 1 SplashArea: 7 Knockback: 7 + Status: Bleeding - Id: 662 Name: NPC_HELLJUDGEMENT Description: Hell's Judgement @@ -15535,6 +15775,7 @@ Body: HitCount: 1 SplashArea: 14 Duration2: 30000 + Status: Curse - Id: 663 Name: NPC_WIDESILENCE Description: Wide Silence @@ -15560,6 +15801,7 @@ Body: - Level: 5 Area: 14 Duration2: 30000 + Status: Silence - Id: 664 Name: NPC_WIDEFREEZE Description: Wide Freeze @@ -15585,6 +15827,7 @@ Body: - Level: 5 Area: 14 Duration2: 12000 + Status: Freeze - Id: 665 Name: NPC_WIDEBLEEDING Description: Wide Bleeding @@ -15610,6 +15853,7 @@ Body: - Level: 5 Area: 14 Duration2: 120000 + Status: Bleeding - Id: 666 Name: NPC_WIDESTONE Description: Wide Petrify @@ -15635,6 +15879,7 @@ Body: - Level: 5 Area: 14 Duration2: 20000 + Status: Stone - Id: 667 Name: NPC_WIDECONFUSE Description: Wide Confusion @@ -15660,6 +15905,7 @@ Body: - Level: 5 Area: 14 Duration2: 30000 + Status: Confusion - Id: 668 Name: NPC_WIDESLEEP Description: Wide Sleep @@ -15685,6 +15931,7 @@ Body: - Level: 5 Area: 14 Duration2: 30000 + Status: Sleep - Id: 669 Name: NPC_WIDESIGHT Description: Wide Sight @@ -15702,6 +15949,7 @@ Body: Element: Fire SplashArea: 5 Duration1: 10000 + Status: Sight - Id: 670 Name: NPC_EVILLAND Description: Evil Land @@ -15769,6 +16017,7 @@ Body: Interval: 1000 Flag: NoOverlap: true + Status: Blind - Id: 671 Name: NPC_MAGICMIRROR Description: Magic Mirror @@ -15802,6 +16051,7 @@ Body: Time: 2000 - Level: 10 Time: 2000 + Status: MagicMirror - Id: 672 Name: NPC_SLOWCAST Description: Slow Cast @@ -15827,6 +16077,7 @@ Body: - Level: 5 Area: 14 Duration2: 30000 + Status: SlowCast - Id: 673 Name: NPC_CRITICALWOUND Description: Critical Wounds @@ -15886,6 +16137,7 @@ Body: Time: 2000 - Level: 10 Time: 2000 + Status: ArmorChange - Id: 676 Name: NPC_ANTIMAGIC Description: Anti Magic @@ -15919,6 +16171,7 @@ Body: Time: 2000 - Level: 10 Time: 2000 + Status: ArmorChange - Id: 677 Name: NPC_WIDECURSE Description: Wide Curse @@ -15944,6 +16197,7 @@ Body: - Level: 5 Area: 14 Duration2: 30000 + Status: Curse - Id: 678 Name: NPC_WIDESTUN Description: Wide Stun @@ -15969,6 +16223,7 @@ Body: - Level: 5 Area: 14 Duration2: 5000 + Status: Stun - Id: 679 Name: NPC_VAMPIRE_GIFT Description: Vampire Gift @@ -16065,6 +16320,7 @@ Body: Range: -9 HitCount: 1 Duration2: 180000 + Status: HellPower - Id: 684 Name: NPC_WIDEHELLDIGNITY Description: Hell Dignity @@ -16079,6 +16335,7 @@ Body: HitCount: 1 SplashArea: -1 Duration2: 180000 + Status: HellPower - Id: 685 Name: NPC_INVINCIBLE Description: Invincible @@ -16090,6 +16347,7 @@ Body: IsNpc: true HitCount: 1 Duration1: -1 + Status: Invincible - Id: 686 Name: NPC_INVINCIBLEOFF Description: Invincible off @@ -16101,6 +16359,7 @@ Body: IsNpc: true HitCount: 1 Duration1: 60000 + Status: InvincibleOff - Id: 687 Name: NPC_ALLHEAL Description: Full Heal @@ -16163,6 +16422,7 @@ Body: Time: 220000 - Level: 10 Time: 240000 + Status: Blessing - Id: 690 Name: CASH_INCAGI Description: Party Increase AGI @@ -16200,6 +16460,7 @@ Body: Time: 220000 - Level: 10 Time: 240000 + Status: IncreaseAgi - Id: 691 Name: CASH_ASSUMPTIO Description: Party Assumptio @@ -16226,6 +16487,7 @@ Body: Time: 80000 - Level: 5 Time: 100000 + Status: Assumptio - Id: 692 Name: ALL_CATCRY Description: Cat Cry @@ -16249,6 +16511,7 @@ Body: SplashArea: -1 CastCancel: true Cooldown: 300000 + Status: PartyFlee - Id: 695 Name: ALL_DREAM_SUMMERNIGHT Description: Summer Night Dream @@ -16339,6 +16602,7 @@ Body: IsNpc: true Hit: Single Duration1: 10000 + Status: MaxPain - Id: 717 Name: NPC_MAXPAIN_ATK Description: Max Pain Attack @@ -16685,6 +16949,7 @@ Body: Requires: SpCost: 15 State: Shield + Status: Shrink - Id: 1003 Name: AS_SONICACCEL Description: Sonic Acceleration @@ -16753,6 +17018,7 @@ Body: Duration1: 10000 Requires: SpCost: 25 + Status: CloseConfine2 - Id: 1006 Name: WZ_SIGHTBLASTER Description: Sight Blaster @@ -16776,6 +17042,7 @@ Body: Duration1: 120000 Requires: SpCost: 40 + Status: SightBlaster - Id: 1007 Name: SA_CREATECON Description: Create Elemental Converter @@ -16811,6 +17078,7 @@ Body: ItemCost: - Item: Elemental_Water Amount: 1 + Status: ElementalChange - Id: 1009 Name: HT_PHANTASMIC Description: Phantasmic Arrow @@ -16867,6 +17135,7 @@ Body: Duration2: 17000 Requires: SpCost: 40 + Status: WinkCharm - Id: 1012 Name: BS_UNFAIRLYTRICK Description: Unfair Trick @@ -16957,6 +17226,7 @@ Body: Requires: HpCost: 10 SpCost: 20 + Status: Stun - Id: 1017 Name: SA_ELEMENTGROUND Description: Elemental Change Earth @@ -16980,6 +17250,7 @@ Body: ItemCost: - Item: Elemental_Earth Amount: 1 + Status: ElementalChange - Id: 1018 Name: SA_ELEMENTFIRE Description: Elemental Change Fire @@ -17003,6 +17274,7 @@ Body: ItemCost: - Item: Elemental_Fire Amount: 1 + Status: ElementalChange - Id: 1019 Name: SA_ELEMENTWIND Description: Elemental Change Wind @@ -17026,6 +17298,7 @@ Body: ItemCost: - Item: Elemental_Wind Amount: 1 + Status: ElementalChange - Id: 2001 Name: RK_ENCHANTBLADE Description: Enchant Blade @@ -30536,6 +30809,7 @@ Body: Amount: 35 - Level: 5 Amount: 40 + Status: Avoid - Id: 8003 Name: HLIF_BRAIN Description: Brain Surgery @@ -30565,6 +30839,7 @@ Body: Time: 1200000 Requires: SpCost: 100 + Status: Change - Id: 8005 Name: HAMI_CASTLE Description: Castling @@ -30608,6 +30883,7 @@ Body: Amount: 35 - Level: 5 Amount: 40 + Status: Defence - Id: 8007 Name: HAMI_SKIN Description: Adamantium Skin @@ -30638,6 +30914,7 @@ Body: Time: 900000 Requires: SpCost: 120 + Status: Bloodlust - Id: 8009 Name: HFLI_MOON Description: Moonlight @@ -30712,6 +30989,7 @@ Body: Amount: 60 - Level: 5 Amount: 70 + Status: Fleet - Id: 8011 Name: HFLI_SPEED Description: Speed @@ -30756,6 +31034,7 @@ Body: Amount: 60 - Level: 5 Amount: 70 + Status: Speed - Id: 8012 Name: HFLI_SBR44 Description: S.B.R.44 @@ -32672,6 +32951,7 @@ Body: IgnoreItemBonus: true Requires: SpCost: 40 + Status: Magnificat - Id: 8223 Name: MER_QUICKEN Description: Two-Hand_Quicken @@ -32725,6 +33005,7 @@ Body: Amount: 46 - Level: 10 Amount: 50 + Status: Merc_Quicken - Id: 8224 Name: MER_SIGHT Description: Sight @@ -32742,6 +33023,7 @@ Body: Duration1: 10000 Requires: SpCost: 10 + Status: Sight - Id: 8225 Name: MER_CRASH Description: Crash @@ -32761,6 +33043,7 @@ Body: IgnoreItemBonus: true Requires: SpCost: 10 + Status: Stun - Id: 8226 Name: MER_REGAIN Description: Regain @@ -32890,6 +33173,7 @@ Body: Amount: 12 - Level: 10 Amount: 13 + Status: Provoke - Id: 8233 Name: MER_AUTOBERSERK Description: Berserk @@ -32902,6 +33186,7 @@ Body: HitCount: 1 Requires: SpCost: 5 + Status: AutoBerserk - Id: 8234 Name: MER_DECAGI Description: Decrease_AGI @@ -32963,6 +33248,7 @@ Body: Amount: 31 - Level: 10 Amount: 33 + Status: DecreaseAgi - Id: 8235 Name: MER_SCAPEGOAT Description: Scapegoat @@ -33035,6 +33321,7 @@ Body: Amount: 12 - Level: 10 Amount: 10 + Status: Silence - Id: 8237 Name: MER_ESTIMATION Description: Sense @@ -33090,6 +33377,7 @@ Body: Amount: 30 - Level: 10 Amount: 35 + Status: Kyrie - Id: 8239 Name: MER_BLESSING Description: Blessing @@ -33147,6 +33435,7 @@ Body: Amount: 60 - Level: 10 Amount: 64 + Status: Blessing - Id: 8240 Name: MER_INCAGI Description: Increase Agility @@ -33211,6 +33500,7 @@ Body: Amount: 42 - Level: 10 Amount: 45 + Status: IncreaseAgi - Id: 8241 Name: MER_INVINCIBLEOFF2 Description: Mind Blaster @@ -33832,6 +34122,7 @@ Body: Target: SameGuild Flag: NoMob: true + Status: Leadership - Id: 10007 Name: GD_GLORYWOUNDS Description: Glorious Wounds @@ -33847,6 +34138,7 @@ Body: Target: SameGuild Flag: NoMob: true + Status: GloryWounds - Id: 10008 Name: GD_SOULCOLD Description: Cold Heart @@ -33862,6 +34154,7 @@ Body: Target: SameGuild Flag: NoMob: true + Status: SoulCold - Id: 10009 Name: GD_HAWKEYES Description: Sharp Gaze @@ -33877,6 +34170,7 @@ Body: Target: SameGuild Flag: NoMob: true + Status: HawkEyes - Id: 10010 Name: GD_BATTLEORDER Description: Battle Orders @@ -33896,6 +34190,7 @@ Body: IgnoreStatus: true Requires: SpCost: 1 + Status: BattleOrders - Id: 10011 Name: GD_REGENERATION Description: Regeneration @@ -33915,6 +34210,7 @@ Body: IgnoreStatus: true Requires: SpCost: 1 + Status: Regeneration - Id: 10012 Name: GD_RESTORE Description: Restoration diff --git a/db/pre-re/status.yml b/db/pre-re/status.yml new file mode 100644 index 0000000000..865fc73c66 --- /dev/null +++ b/db/pre-re/status.yml @@ -0,0 +1,6817 @@ +# This file is a part of rAthena. +# Copyright(C) 2022 rAthena Development Team +# https://rathena.org - https://github.com/rathena +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +########################################################################### +# Status Change Database +########################################################################### +# +# Status Change Settings +# +########################################################################### +# - Status Status change name. +# Icon Status change icon. (Default: EFST_BLANK) +# DurationLookup Default status change duration. (Default: 0) +# States: Status change state to determine player states. (Default: None) +# CalcFlags: Status change calculation to indicate which stat is adjusted. (Default: None) +# Opt1 Special effect when a status change is active. Non-stackable. (Default: None) +# Opt2: Special options/client effects when a status change is active. (Default: None) +# Opt3: Special options/client effects when a status change is active. (Default: Normal) +# Options: Special options/client effects when a status change is active. (Default: Nothing) +# Flags: Special flags which trigger during certain events. (Default: None) +# 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) +# EndReturn If the status has an End list and succeeds to remove these status changes, it won't give its effect. (Default: false) +########################################################################### + +Header: + Type: STATUS_DB + Version: 1 + +Body: + - Status: Stone + DurationLookup: NPC_PETRIFYATTACK + States: + NoMove: true + NoMoveCond: true + NoCast: true + NoAttack: true + CalcFlags: + Def_Ele: true + Def: true + Mdef: true + Flags: + SendOption: true + BossResist: true + StopAttacking: true + StopCasting: true + Fail: + Refresh: true + Inspiration: true + Power_Of_Gaia: true + Gvg_Stone: true + End: + Dancing: true + - Status: Freeze + DurationLookup: NPC_WIDEFREEZE + States: + NoMove: true + NoCast: true + NoAttack: true + CalcFlags: + Def_Ele: true + Def: true + Mdef: true + Opt1: Freeze + Flags: + SendOption: true + BossResist: true + StopAttacking: true + StopCasting: true + RemoveOnDamaged: true + Fail: + Refresh: true + Inspiration: true + Warmer: true + Gvg_Freez: true + End: + Dancing: true + Aeterna: true + - Status: Stun + DurationLookup: NPC_STUNATTACK + States: + NoMove: true + NoCast: true + NoAttack: true + Opt1: Stun + Flags: + SendOption: true + BossResist: true + StopAttacking: true + StopCasting: true + OverlapFail: true + Fail: + Refresh: true + Inspiration: true + Gvg_Stun: true + End: + Dancing: true + - Status: Sleep + DurationLookup: NPC_SLEEPATTACK + States: + NoMove: true + NoCast: true + NoAttack: true + Opt1: Sleep + Flags: + SendOption: true + BossResist: true + StopAttacking: true + StopCasting: true + RemoveOnDamaged: true + OverlapFail: true + Fail: + Refresh: true + Inspiration: true + Gvg_Sleep: true + End: + Dancing: true + - Status: Poison + DurationLookup: NPC_POISON + CalcFlags: + Def2: true + Regen: true + Opt2: + Poison: true + Flags: + SendOption: true + BossResist: true + StopAttacking: true + OverlapFail: true + Fail: + Refresh: true + Inspiration: true + - Status: Curse + DurationLookup: NPC_CURSEATTACK + CalcFlags: + Luk: true + Batk: true + Watk: true + Speed: true + Opt2: + Curse: true + Flags: + SendOption: true + BossResist: true + OverlapFail: true + Fail: + Refresh: true + Inspiration: true + Gvg_Curse: true + - Status: Silence + DurationLookup: NPC_SILENCEATTACK + States: + NoCast: true + Opt2: + Silence: true + Flags: + SendOption: true + BossResist: true + StopCasting: true + OverlapFail: true + Fail: + Refresh: true + Inspiration: true + Gvg_Silence: true + - Status: Confusion + DurationLookup: NPC_WIDECONFUSE + Flags: + BossResist: true + StopWalking: true + RemoveOnDamaged: true + OverlapFail: true + Fail: + Refresh: true + Inspiration: true + Confusion: true + - Status: Blind + DurationLookup: NPC_BLINDATTACK + CalcFlags: + Hit: true + Flee: true + Opt2: + Blind: true + Flags: + SendOption: true + BossResist: true + OverlapFail: true + Fail: + Refresh: true + Inspiration: true + Fear: true + Gvg_Blind: true + - Status: Bleeding + Icon: EFST_BLOODING + DurationLookup: NPC_BLEEDING + CalcFlags: + Regen: true + Opt2: + Bleeding: true + Flags: + SendOption: true + BossResist: true + NoSave: true + NoClearance: true + OverlapFail: true + Fail: + Refresh: true + Inspiration: true + - Status: Dpoison + DurationLookup: NPC_POISON + CalcFlags: + Def2: true + Regen: true + Opt2: + Dpoison: true + Flags: + SendOption: true + BossResist: true + OverlapFail: true + Fail: + Refresh: true + Inspiration: true + - Status: Provoke + Icon: EFST_PROVOKE + DurationLookup: SM_PROVOKE + CalcFlags: + Def: true + Def2: true + Batk: true + Watk: true + Flags: + BossResist: true + Debuff: true + NoSaveInfinite: true + - Status: Endure + Icon: EFST_ENDURE + DurationLookup: SM_ENDURE + CalcFlags: + Mdef: true + Dspd: true + Flags: + NoRemoveOnDead: true + NoSaveInfinite: true + - Status: Twohandquicken + Icon: EFST_TWOHANDQUICKEN + DurationLookup: KN_TWOHANDQUICKEN + CalcFlags: + Aspd: true + Opt3: + Quicken: true + Flags: + RequireWeapon: true + Fail: + Decreaseagi: true + - Status: Concentrate + Icon: EFST_CONCENTRATION + DurationLookup: AC_CONCENTRATION + CalcFlags: + Agi: true + Dex: true + Flags: + FailedMado: true + Fail: + Quagmire: true + - Status: Hiding + Icon: EFST_HIDING + DurationLookup: TF_HIDING + States: + NoMove: true + NoMoveCond: true + NoPickItem: true + NoConsumeItem: true + CalcFlags: + Speed: true + Options: + Hide: true + Flags: + OnTouch: true + StopAttacking: true + RemoveOnDamaged: true + RemoveOnChangeMap: true + NoBanishingBuster: true + NoDispell: true + NoClearance: true + End: + Closeconfine: true + Closeconfine2: true + - Status: Cloaking + Icon: EFST_CLOAKING + DurationLookup: AS_CLOAKING + States: + NoPickItem: true + CalcFlags: + Cri: true + Speed: true + Options: + Cloak: true + Flags: + OnTouch: true + StopAttacking: true + RemoveOnDamaged: true + RemoveOnMapWarp: true + NoBanishingBuster: true + NoDispell: true + NoClearance: true + - Status: Encpoison + Icon: EFST_ENCHANTPOISON + DurationLookup: AS_ENCHANTPOISON + CalcFlags: + Atk_Ele: true + Fail: + Fireweapon: true + Waterweapon: true + Windweapon: true + Earthweapon: true + Shadowweapon: true + Ghostweapon: true + - Status: Poisonreact + Icon: EFST_POISONREACT + DurationLookup: AS_POISONREACT + - Status: Quagmire + Icon: EFST_QUAGMIRE + DurationLookup: WZ_QUAGMIRE + CalcFlags: + Agi: true + Dex: true + Aspd: true + Speed: true + Flags: + NoSave: true + NoClearance: true + Debuff: true + Fail: + Speedup1: true + End: + Loud: true + Concentrate: true + Truesight: true + Windwalk: true + Magneticfield: true + Cartboost: true + Gn_Cartboost: true + Increaseagi: true + Adrenaline: true + Adrenaline2: true + Spearquicken: true + Twohandquicken: true + Onehand: true + Merc_Quicken: true + Acceleration: true + - Status: Angelus + Icon: EFST_ANGELUS + DurationLookup: AL_ANGELUS + CalcFlags: + Def2: true + Opt2: + Angelus: true + Flags: + SendOption: true + - Status: Blessing + Icon: EFST_BLESSING + DurationLookup: AL_BLESSING + CalcFlags: + Str: true + Int: true + Dex: true + Flags: + BossResist: true + TaekwonAngel: true + - Status: Signumcrucis + Icon: EFST_CRUCIS + DurationLookup: AL_CRUCIS + CalcFlags: + Def: true + Opt2: + SignumCrucis: true + Flags: + SendOption: true + Debuff: true + - Status: Increaseagi + Icon: EFST_INC_AGI + DurationLookup: AL_INCAGI + CalcFlags: + Agi: true + Speed: true + Flags: + FailedMado: true + TaekwonAngel: true + Fail: + Quagmire: true + End: + Decreaseagi: true + Adoramus: true + - Status: Decreaseagi + Icon: EFST_DEC_AGI + DurationLookup: AL_DECAGI + CalcFlags: + Agi: true + Speed: true + Flags: + BossResist: true + NoSave: true + Debuff: true + Fail: + Speedup1: true + End: + Cartboost: true + Gn_Cartboost: true + Increaseagi: true + Adrenaline: true + Adrenaline2: true + Spearquicken: true + Twohandquicken: true + Onehand: true + Merc_Quicken: true + Acceleration: true + - Status: Slowpoison + Icon: EFST_SLOWPOISON + DurationLookup: PR_SLOWPOISON + Flags: + NoClearance: true + - Status: Impositio + Icon: EFST_IMPOSITIO + DurationLookup: PR_IMPOSITIO + CalcFlags: + Watk: true + Flags: + SuperNoviceAngel: true + End: + Impositio: true + - Status: Suffragium + Icon: EFST_SUFFRAGIUM + DurationLookup: PR_SUFFRAGIUM + Flags: + SuperNoviceAngel: true + - Status: Aspersio + Icon: EFST_ASPERSIO + DurationLookup: PR_ASPERSIO + CalcFlags: + Atk_Ele: true + - Status: Benedictio + Icon: EFST_BENEDICTIO + DurationLookup: PR_BENEDICTIO + CalcFlags: + Def_Ele: true + Flags: + NoSave: true + NoClearance: true + - Status: Kyrie + Icon: EFST_KYRIE + DurationLookup: PR_KYRIE + Flags: + SuperNoviceAngel: true + End: + Assumptio: true + - Status: Magnificat + Icon: EFST_MAGNIFICAT + DurationLookup: PR_MAGNIFICAT + CalcFlags: + Regen: true + Flags: + FailedMado: true + NoSave: true + SuperNoviceAngel: true + Fail: + Offertorium: true + - Status: Gloria + Icon: EFST_GLORIA + DurationLookup: PR_GLORIA + CalcFlags: + Luk: true + Flags: + SuperNoviceAngel: true + - Status: Aeterna + Icon: EFST_LEXAETERNA + DurationLookup: PR_LEXAETERNA + Flags: + NoSave: true + Fail: + Freeze: true + - Status: Adrenaline + Icon: EFST_ADRENALINE + DurationLookup: BS_ADRENALINE + CalcFlags: + Aspd: true + Flags: + MadoCancel: true + RequireWeapon: true + Fail: + Quagmire: true + Decreaseagi: true + - Status: Weaponperfection + Icon: EFST_WEAPONPERFECT + DurationLookup: BS_WEAPONPERFECT + Flags: + MadoCancel: true + - Status: Overthrust + Icon: EFST_OVERTHRUST + DurationLookup: BS_OVERTHRUST + Opt3: + OverThrust: true + Flags: + MadoCancel: true + Fail: + Maxoverthrust: true + - Status: Maximizepower + Icon: EFST_MAXIMIZE + DurationLookup: BS_MAXIMIZE + CalcFlags: + Regen: true + Flags: + MadoCancel: true + - Status: Trickdead + Icon: EFST_TRICKDEAD + DurationLookup: NV_TRICKDEAD + States: + NoMove: true + NoPickItem: true + NoConsumeItem: true + NoAttack: true + NoInteract: true + CalcFlags: + Regen: true + Flags: + StopWalking: true + StopAttacking: true + StopCasting: true + RemoveOnDamaged: true + NoSave: true + NoClearance: true + RemoveOnChangeMap: true + End: + Dancing: true + - Status: Loud + Icon: EFST_SHOUT + DurationLookup: MC_LOUD + CalcFlags: + Str: true + Flags: + MadoCancel: true + - Status: Energycoat + Icon: EFST_ENERGYCOAT + DurationLookup: MG_ENERGYCOAT + Opt3: + EnergyCoat: true + - Status: Brokenarmor + Icon: EFST_BROKENARMOR + DurationLookup: NPC_ARMORBRAKE + - Status: Brokenweapon + Icon: EFST_BROKENWEAPON + DurationLookup: NPC_WEAPONBRAKER + - Status: Hallucination + Icon: EFST_ILLUSION + DurationLookup: NPC_HALLUCINATION + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + Debuff: true + Fail: + Inspiration: true + - Status: Weight50 + Icon: EFST_WEIGHTOVER50 + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Weight90 + Icon: EFST_WEIGHTOVER90 + Flags: + NoRemoveOnDead: true + NoClearbuff: true + StopAttacking: true + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Aspdpotion0 + Icon: EFST_ATTHASTE_POTION1 + CalcFlags: + Aspd: true + Flags: + NoClearance: true + OverlapIgnoreLevel: true + - Status: Aspdpotion1 + Icon: EFST_ATTHASTE_POTION2 + CalcFlags: + Aspd: true + Flags: + NoClearance: true + OverlapIgnoreLevel: true + - Status: Aspdpotion2 + Icon: EFST_ATTHASTE_POTION3 + CalcFlags: + Aspd: true + Flags: + OverlapIgnoreLevel: true + - Status: Aspdpotion3 + Icon: EFST_ATTHASTE_INFINITY + CalcFlags: + Aspd: true + Flags: + NoClearance: true + OverlapIgnoreLevel: true + - Status: Speedup0 + Icon: EFST_MOVHASTE_HORSE + CalcFlags: + Speed: true + Flags: + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + - Status: Speedup1 + Icon: EFST_MOVHASTE_POTION + CalcFlags: + Speed: true + Flags: + NoSave: true + NoClearance: true + - Status: Atkpotion + Icon: EFST_PLUSATTACKPOWER + CalcFlags: + Batk: true + Flags: + NoRemoveOnDead: true + NoClearance: true + OverlapIgnoreLevel: true + - Status: Matkpotion + Icon: EFST_PLUSMAGICPOWER + CalcFlags: + Matk: true + Flags: + NoRemoveOnDead: true + NoClearance: true + OverlapIgnoreLevel: true + - Status: Wedding + States: + NoAttack: true + CalcFlags: + Speed: true + Options: + Wedding: true + Flags: + SendLook: true + StopAttacking: true + NoRemoveOnDead: true + NoBanishingBuster: true + NoDispell: true + NoClearance: true + - Status: Slowdown + CalcFlags: + Speed: true + Flags: + Debuff: true + - Status: Ankle + Icon: EFST_ANKLESNARE + DurationLookup: HT_ANKLESNARE + States: + NoMove: true + Flags: + NoClearbuff: true + StopWalking: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + RemoveOnChangeMap: true + MinDuration: 5000 + - Status: Keeping + DurationLookup: NPC_KEEPING + CalcFlags: + Def: true + - Status: Barrier + Icon: EFST_BARRIER + DurationLookup: NPC_BARRIER + CalcFlags: + Mdef: true + Def: true + - Status: Stripweapon + Icon: EFST_NOEQUIPWEAPON + DurationLookup: RG_STRIPWEAPON + CalcFlags: + Watk: true + Flags: + Debuff: true + BossResist: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Stripshield + Icon: EFST_NOEQUIPSHIELD + DurationLookup: RG_STRIPSHIELD + CalcFlags: + Def: true + Flags: + Debuff: true + BossResist: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Striparmor + Icon: EFST_NOEQUIPARMOR + DurationLookup: RG_STRIPARMOR + CalcFlags: + Vit: true + Flags: + Debuff: true + BossResist: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Striphelm + Icon: EFST_NOEQUIPHELM + DurationLookup: RG_STRIPHELM + CalcFlags: + Int: true + Flags: + Debuff: true + BossResist: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Cp_Weapon + Icon: EFST_PROTECTWEAPON + DurationLookup: AM_CP_WEAPON + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + RemoveChemicalProtect: true + - Status: Cp_Shield + Icon: EFST_PROTECTSHIELD + DurationLookup: AM_CP_SHIELD + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + RemoveChemicalProtect: true + - Status: Cp_Armor + Icon: EFST_PROTECTARMOR + DurationLookup: AM_CP_ARMOR + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + RemoveChemicalProtect: true + - Status: Cp_Helm + Icon: EFST_PROTECTHELM + DurationLookup: AM_CP_HELM + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + RemoveChemicalProtect: true + - Status: Autoguard + Icon: EFST_AUTOGUARD + DurationLookup: CR_AUTOGUARD + Flags: + NoClearance: true + RequireShield: true + - Status: Reflectshield + Icon: EFST_REFLECTSHIELD + DurationLookup: CR_REFLECTSHIELD + Flags: + NoClearance: true + RequireShield: true + End: + Reflectdamage: true + - Status: Splasher + Icon: EFST_SPLASHER + DurationLookup: AS_SPLASHER + - Status: Providence + Icon: EFST_PROVIDENCE + DurationLookup: CR_PROVIDENCE + CalcFlags: + All: true + Flags: + NoSave: true + - Status: Defender + Icon: EFST_DEFENDER + DurationLookup: CR_DEFENDER + CalcFlags: + Speed: true + Aspd: true + Flags: + RequireShield: true + - Status: Magicrod + Icon: EFST_MAGICROD + DurationLookup: SA_MAGICROD + Flags: + NoSave: true + - Status: Spellbreaker + - Status: Autospell + Icon: EFST_AUTOSPELL + DurationLookup: SA_AUTOSPELL + Flags: + NoDispell: true + NoBanishingBuster: true + NoRemoveOnDead: true + NoClearance: true + - Status: Sighttrasher + - Status: Autoberserk + Icon: EFST_AUTOBERSERK + DurationLookup: SM_AUTOBERSERK + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Spearquicken + Icon: EFST_SPEARQUICKEN + DurationLookup: CR_SPEARQUICKEN + CalcFlags: + Aspd: true + Cri: true + Flee: true + Opt3: + Quicken: true + Flags: + FailedMado: true + RequireWeapon: true + Fail: + Quagmire: true + - Status: Autocounter + Icon: EFST_AUTOCOUNTER + DurationLookup: KN_AUTOCOUNTER + States: + NoAttack: true + NoMove: true + NoDropItem: true + NoInteract: true + - Status: Sight + DurationLookup: MG_SIGHT + Options: + Sight: true + Flags: + SendOption: true + NoDispell: true + NoBanishingBuster: true + NoSave: true + - Status: Safetywall + DurationLookup: MG_SAFETYWALL + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Ruwach + DurationLookup: AL_RUWACH + Options: + Ruwach: true + Flags: + SendOption: true + - Status: Extremityfist + DurationLookup: MO_EXTREMITYFIST + CalcFlags: + Regen: true + Flags: + Debuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Explosionspirits + Icon: EFST_EXPLOSIONSPIRITS + DurationLookup: MO_EXPLOSIONSPIRITS + CalcFlags: + Cri: true + Regen: true + Opt3: + ExplosionSpirits: true + Flags: + Debuff: true + NoClearance: true + - Status: Combo + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapIgnoreLevel: true + - Status: Bladestop_Wait + DurationLookup: MO_BLADESTOP + States: + NoMove: true + Flags: + RemoveOnChangeMap: true + - Status: Bladestop + Icon: EFST_BLADESTOP + DurationLookup: MO_BLADESTOP + States: + NoMove: true + NoPickItem: true + NoDropItem: true + NoAttack: true + NoInteract: true + Opt3: + BladeStop: true + Flags: + MobLoseTarget: true + NoClearbuff: true + NoSave: true + NoClearance: true + RemoveOnChangeMap: true + - Status: Fireweapon + Icon: EFST_PROPERTYFIRE + DurationLookup: SA_FLAMELAUNCHER + CalcFlags: + Atk_Ele: true + Flags: + NoRemoveOnDead: true + - Status: Waterweapon + Icon: EFST_PROPERTYWATER + DurationLookup: SA_FROSTWEAPON + CalcFlags: + Atk_Ele: true + Flags: + NoRemoveOnDead: true + - Status: Windweapon + Icon: EFST_PROPERTYWIND + DurationLookup: SA_LIGHTNINGLOADER + CalcFlags: + Atk_Ele: true + Flags: + NoRemoveOnDead: true + - Status: Earthweapon + Icon: EFST_PROPERTYGROUND + DurationLookup: SA_SEISMICWEAPON + CalcFlags: + Atk_Ele: true + Flags: + NoRemoveOnDead: true + - Status: Volcano + Icon: EFST_GROUNDMAGIC + DurationLookup: SA_VOLCANO + CalcFlags: + Watk: true + Flags: + NoSave: true + NoClearance: true + - Status: Deluge + Icon: EFST_GROUNDMAGIC + DurationLookup: SA_DELUGE + CalcFlags: + MaxHp: true + Flags: + NoSave: true + NoClearance: true + - Status: Violentgale + Icon: EFST_GROUNDMAGIC + DurationLookup: SA_VIOLENTGALE + CalcFlags: + Flee: true + Flags: + NoSave: true + NoClearance: true + - Status: Watk_Element + DurationLookup: MS_MAGNUM + - Status: Armor + DurationLookup: NPC_DEFENDER + - Status: Armor_Element_Water + Icon: EFST_RESIST_PROPERTY_WATER + CalcFlags: + All: true + Flags: + NoDispell: true + OverlapIgnoreLevel: true + - Status: Nochat + States: + NoPickItem: true + NoPickItemCond: true + NoDropItem: true + NoDropItemCond: true + NoChat: true + NoChatCond: true + NoConsumeItem: true + NoConsumeItemCond: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + OverlapFail: true + NoClearance: true + - Status: Protectexp + Icon: EFST_PROTECTEXP + DurationLookup: WE_BABY + States: + NoDeathPenalty: true + - Status: Aurablade + Icon: EFST_AURABLADE + DurationLookup: LK_AURABLADE + Opt3: + AuraBlade: true + Flags: + NoSave: true + RequireWeapon: true + - Status: Parrying + Icon: EFST_PARRYING + DurationLookup: LK_PARRYING + Flags: + NoSave: true + NoClearance: true + RequireWeapon: true + - Status: Concentration + Icon: EFST_LKCONCENTRATION + DurationLookup: LK_CONCENTRATION + CalcFlags: + Batk: true + Watk: true + Hit: true + Def: true + Def2: true + Opt3: + Quicken: true + Flags: + NoSave: true + - Status: Tensionrelax + Icon: EFST_TENSIONRELAX + DurationLookup: LK_TENSIONRELAX + CalcFlags: + Regen: true + Flags: + NoSave: true + NoClearance: true + - Status: Berserk + Icon: EFST_BERSERK + DurationLookup: LK_BERSERK + States: + NoCast: true + NoChat: true + NoEquipItem: true + NoUnEquipItem: true + NoConsumeItem: true + CalcFlags: + Def: true + Def2: true + Mdef: true + MDef2: true + Flee: true + Speed: true + Aspd: true + MaxHp: true + Regen: true + Opt3: + Berserk: true + Flags: + NoSave: true + Fail: + Saturdaynightfever: true + _Bloodylust: true + - Status: Fury + - Status: Gospel + Icon: EFST_GOSPEL + DurationLookup: PA_GOSPEL + States: + NoMove: true + NoMoveCond: true + CalcFlags: + Speed: true + Aspd: true + Flags: + NoSave: true + - Status: Assumptio + Icon: EFST_ASSUMPTIO + DurationLookup: HP_ASSUMPTIO + Opt3: + Assumptio: true + End: + Kyrie: true + Kaite: true + - Status: Basilica + DurationLookup: HP_BASILICA + States: + NoMove: true + NoMoveCond: true + NoAttack: true + Flags: + NoSave: true + NoClearance: true + RemoveOnChangeMap: true + - Status: Guildaura + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Magicpower + Icon: EFST_MAGICPOWER + DurationLookup: HW_MAGICPOWER + CalcFlags: + Matk: true + Flags: + NoSave: true + End: + Magicpower: true + - Status: Edp + Icon: EFST_EDP + DurationLookup: ASC_EDP + Flags: + NoRemoveOnDead: true + NoDispell: true + NoBanishingBuster: true + NoSave: true + - Status: Truesight + Icon: EFST_TRUESIGHT + DurationLookup: SN_SIGHT + CalcFlags: + Str: true + Agi: true + Vit: true + Int: true + Dex: true + Luk: true + Cri: true + Hit: true + Flags: + FailedMado: true + NoSave: true + Fail: + Quagmire: true + - Status: Windwalk + Icon: EFST_WINDWALK + DurationLookup: SN_WINDWALK + CalcFlags: + Flee: true + Speed: true + Flags: + FailedMado: true + NoSave: true + Fail: + Quagmire: true + - Status: Meltdown + Icon: EFST_MELTDOWN + DurationLookup: WS_MELTDOWN + Flags: + MadoCancel: true + NoRemoveOnDead: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + - Status: Cartboost + Icon: EFST_CARTBOOST + DurationLookup: WS_CARTBOOST + CalcFlags: + Speed: true + Flags: + MadoCancel: true + NoRemoveOnDead: true + NoClearance: true + NoSave: true + NoBanishingBuster: true + NoDispell: true + Fail: + Quagmire: true + Dontforgetme: true + End: + Decreaseagi: true + EndReturn: true + - Status: Chasewalk + Icon: EFST_CHASEWALK + DurationLookup: ST_CHASEWALK + States: + NoPickItem: true + CalcFlags: + Speed: true + Options: + ChaseWalk: true + Cloak: true + Flags: + OnTouch: true + StopAttacking: true + RemoveOnDamaged: true + RemoveOnChangeMap: true + NoBanishingBuster: true + NoDispell: true + NoClearance: true + - Status: Rejectsword + Icon: EFST_SWORDREJECT + DurationLookup: ST_REJECTSWORD + - Status: Marionette + Icon: EFST_MARIONETTE_MASTER + DurationLookup: CG_MARIONETTE + CalcFlags: + Str: true + Agi: true + Vit: true + Int: true + Dex: true + Luk: true + Opt3: + Marionette: true + Flags: + RemoveOnChangeMap: true + OverlapFail: true + - Status: Marionette2 + Icon: EFST_MARIONETTE + DurationLookup: CG_MARIONETTE + CalcFlags: + Str: true + Agi: true + Vit: true + Int: true + Dex: true + Luk: true + Opt3: + Marionette: true + Flags: + RemoveOnChangeMap: true + OverlapFail: true + - Status: Changeundead + Icon: EFST_PROPERTYUNDEAD + DurationLookup: NPC_CHANGEUNDEAD + CalcFlags: + Def_Ele: true + Opt3: + Undead: true + Flags: + Debuff: true + NoClearance: true + End: + Blessing: true + Increaseagi: true + - Status: Jointbeat + Icon: EFST_JOINTBEAT + DurationLookup: LK_JOINTBEAT + CalcFlags: + Batk: true + Def2: true + Speed: true + Aspd: true + Flags: + NoSave: true + NoClearance: true + Debuff: true + - Status: Mindbreaker + Icon: EFST_MINDBREAKER + DurationLookup: PF_MINDBREAKER + CalcFlags: + Matk: true + MDef2: true + Flags: + NoSave: true + Debuff: true + - Status: Memorize + Icon: EFST_MEMORIZE + DurationLookup: PF_MEMORIZE + Flags: + NoSave: true + - Status: Fogwall + Icon: EFST_FOGWALL + DurationLookup: PF_FOGWALL + Flags: + BossResist: true + NoSave: true + NoClearance: true + - Status: Spiderweb + Icon: EFST_SPIDERWEB + DurationLookup: PF_SPIDERWEB + CalcFlags: + Flee: true + Flags: + StopWalking: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + NoSave: true + Debuff: true + - Status: Devotion + Icon: EFST_DEVOTION + DurationLookup: CR_DEVOTION + Flags: + NoSave: true + RemoveOnChangeMap: true + OverlapIgnoreLevel: true + - Status: Sacrifice + DurationLookup: PA_SACRIFICE + - Status: Steelbody + Icon: EFST_STEELBODY + DurationLookup: MO_STEELBODY + States: + NoCast: true + CalcFlags: + Def: true + Mdef: true + Aspd: true + Speed: true + Opt3: + SteelBody: true + - Status: Orcish + DurationLookup: SA_REVERSEORCISH + Flags: + Debuff: true + Options: + Orcish: true + Flags: + SendOption: true + - Status: Readystorm + Icon: EFST_STORMKICK_ON + DurationLookup: TK_READYSTORM + Flags: + NoRemoveOnDead: true + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Readydown + Icon: EFST_DOWNKICK_ON + DurationLookup: TK_READYDOWN + Flags: + NoRemoveOnDead: true + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Readyturn + Icon: EFST_TURNKICK_ON + DurationLookup: TK_READYTURN + Flags: + NoRemoveOnDead: true + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Readycounter + Icon: EFST_COUNTER_ON + DurationLookup: TK_READYCOUNTER + Flags: + NoRemoveOnDead: true + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Dodge + Icon: EFST_DODGE_ON + DurationLookup: TK_DODGE + Flags: + NoRemoveOnDead: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + - Status: Run + Icon: EFST_RUN + DurationLookup: TK_RUN + CalcFlags: + Speed: true + Dspd: true + Flags: + NoSave: true + NoClearance: true + RemoveOnChangeMap: true + - Status: Shadowweapon + Icon: EFST_PROPERTYDARK + DurationLookup: TK_SEVENWIND + CalcFlags: + Atk_Ele: true + Flags: + NoSave: true + NoClearance: true + - Status: Adrenaline2 + Icon: EFST_ADRENALINE2 + DurationLookup: BS_ADRENALINE2 + CalcFlags: + Aspd: true + Flags: + MadoCancel: true + NoSave: true + RequireWeapon: true + Fail: + Quagmire: true + Decreaseagi: true + - Status: Ghostweapon + Icon: EFST_PROPERTYTELEKINESIS + DurationLookup: TK_SEVENWIND + CalcFlags: + Atk_Ele: true + Flags: + NoSave: true + NoClearance: true + - Status: Kaizel + Icon: EFST_KAIZEL + DurationLookup: SL_KAIZEL + - Status: Kaahi + Icon: EFST_KAAHI + DurationLookup: SL_KAAHI + Flags: + NoSave: true + NoClearance: true + End: + Kaahi: true + - Status: Kaupe + Icon: EFST_KAUPE + DurationLookup: SL_KAUPE + Flags: + NoSave: true + NoClearance: true + - Status: Onehand + Icon: EFST_ONEHANDQUICKEN + DurationLookup: KN_ONEHAND + CalcFlags: + Aspd: true + Opt3: + Quicken: true + Flags: + NoSave: true + NoClearance: true + RequireWeapon: true + Fail: + Decreaseagi: true + End: + Aspdpotion0: true + Aspdpotion1: true + Aspdpotion2: true + Aspdpotion3: true + - Status: Preserve + Icon: EFST_PRESERVE + DurationLookup: ST_PRESERVE + Flags: + NoSave: true + - Status: Battleorders + Icon: EFST_GDSKILL_BATTLEORDER + DurationLookup: GD_BATTLEORDER + CalcFlags: + Str: true + Int: true + Dex: true + - Status: Regeneration + Icon: EFST_GDSKILL_REGENERATION + DurationLookup: GD_REGENERATION + CalcFlags: + Regen: true + Flags: + NoBanishingBuster: true + NoDispell: true + NoClearance: true + NoSaveInfinite: true + - Status: Doublecast + Icon: EFST_DOUBLECASTING + DurationLookup: PF_DOUBLECASTING + Flags: + NoSave: true + NoClearance: true + - Status: Gravitation + Icon: EFST_GRAVITATION + DurationLookup: HW_GRAVITATION + States: + NoMove: true + NoMoveCond: true + NoConsumeItem: true + NoConsumeItemCond: true + CalcFlags: + Aspd: true + Flags: + BossResist: true + NoSave: true + NoClearance: true + - Status: Maxoverthrust + Icon: EFST_OVERTHRUSTMAX + DurationLookup: WS_OVERTHRUSTMAX + Opt3: + OverThrust: true + Flags: + MadoCancel: true + NoSave: true + End: + Overthrust: true + - Status: Longing + Icon: EFST_LONGING + DurationLookup: CG_LONGINGFREEDOM + CalcFlags: + Speed: true + Aspd: true + - Status: Hermode + Icon: EFST_HERMODE + DurationLookup: CG_HERMODE + - Status: Shrink + Icon: EFST_CR_SHRINK + DurationLookup: CR_SHRINK + Flags: + NoRemoveOnDead: true + NoDispell: true + NoBanishingBuster: true + NoSave: true + - Status: Sightblaster + Icon: EFST_WZ_SIGHTBLASTER + DurationLookup: WZ_SIGHTBLASTER + Options: + Sight: true + Flags: + NoSave: true + NoDispell: true + NoBanishingBuster: true + - Status: Winkcharm + Icon: EFST_DC_WINKCHARM + DurationLookup: DC_WINKCHARM + Flags: + RemoveOnDamaged: true + Debuff: true + - Status: Closeconfine + Icon: EFST_RG_CCONFINE_M + DurationLookup: RG_CLOSECONFINE + States: + NoMove: true + CalcFlags: + Flee: true + Flags: + StopWalking: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + NoRemoveOnDead: true + RemoveOnChangeMap: true + - Status: Closeconfine2 + Icon: EFST_RG_CCONFINE_S + DurationLookup: RG_CLOSECONFINE + States: + NoMove: true + Flags: + StopWalking: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + NoRemoveOnDead: true + RemoveOnChangeMap: true + OverlapFail: true + - Status: Dancing + Icon: EFST_BDPLAYING + DurationLookup: BD_ENCORE + States: + NoMove: true + NoMoveCond: true + CalcFlags: + Speed: true + Regen: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + RemoveOnChangeMap: true + RequireWeapon: true + OverlapIgnoreLevel: true + - Status: Elementalchange + Icon: EFST_ARMOR_PROPERTY + DurationLookup: NPC_ATTRICHANGE + CalcFlags: + Def_Ele: true + Flags: + NoRemoveOnDead: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Richmankim + Icon: EFST_RICHMANKIM + DurationLookup: BD_RICHMANKIM + Flags: + BossResist: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Eternalchaos + Icon: EFST_ETERNALCHAOS + DurationLookup: BD_ETERNALCHAOS + CalcFlags: + Def2: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Drumbattle + Icon: EFST_DRUMBATTLEFIELD + DurationLookup: BD_DRUMBATTLEFIELD + CalcFlags: + Watk: true + Def: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Nibelungen + Icon: EFST_RINGNIBELUNGEN + DurationLookup: BD_RINGNIBELUNGEN + CalcFlags: + Watk: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Rokisweil + Icon: EFST_ROKISWEIL + DurationLookup: BD_ROKISWEIL + Flags: + BossResist: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Intoabyss + Icon: EFST_INTOABYSS + DurationLookup: BD_INTOABYSS + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Siegfried + Icon: EFST_SIEGFRIED + DurationLookup: BD_SIEGFRIED + CalcFlags: + All: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Whistle + Icon: EFST_WHISTLE + DurationLookup: BA_WHISTLE + CalcFlags: + Flee: true + Flee2: true + Flags: + NoRemoveOnDead: true + NoClearance: true + - Status: Assncros + Icon: EFST_ASSASSINCROSS + DurationLookup: BA_ASSASSINCROSS + CalcFlags: + Aspd: true + Flags: + NoRemoveOnDead: true + FailedMado: true + NoClearance: true + Fail: + Quagmire: true + - Status: Poembragi + Icon: EFST_POEMBRAGI + DurationLookup: BA_POEMBRAGI + Flags: + NoRemoveOnDead: true + NoClearance: true + - Status: Appleidun + Icon: EFST_APPLEIDUN + DurationLookup: BA_APPLEIDUN + CalcFlags: + MaxHp: true + Flags: + NoRemoveOnDead: true + NoClearance: true + - Status: Modechange + DurationLookup: NPC_EMOTION + CalcFlags: + Mode: true + - Status: Humming + Icon: EFST_HUMMING + DurationLookup: DC_HUMMING + CalcFlags: + Hit: true + Flags: + NoRemoveOnDead: true + NoClearance: true + - Status: Dontforgetme + Icon: EFST_DONTFORGETME + DurationLookup: DC_DONTFORGETME + CalcFlags: + Speed: true + Aspd: true + Flags: + NoRemoveOnDead: true + NoClearance: true + Fail: + Speedup1: true + End: + Increaseagi: true + Adrenaline: true + Adrenaline2: true + Spearquicken: true + Twohandquicken: true + Onehand: true + Merc_Quicken: true + Acceleration: true + - Status: Fortune + Icon: EFST_FORTUNEKISS + DurationLookup: DC_FORTUNEKISS + CalcFlags: + All: true + Flags: + NoRemoveOnDead: true + NoClearance: true + - Status: Service4u + Icon: EFST_SERVICEFORYOU + DurationLookup: DC_SERVICEFORYOU + CalcFlags: + All: true + Flags: + NoRemoveOnDead: true + NoClearance: true + - Status: Stop + Icon: EFST_STOP + DurationLookup: NPC_STOP + States: + NoMove: true + Flags: + StopWalking: true + NoSave: true + NoClearance: true + RemoveOnChangeMap: true + Debuff: true + - Status: Spurt + Icon: EFST_STRUP + DurationLookup: TK_RUN + CalcFlags: + Str: true + Flags: + NoSave: true + NoClearance: true + RequireWeapon: true + - Status: Spirit + Icon: EFST_SOULLINK + DurationLookup: SL_HIGH + CalcFlags: + All: true + Opt3: + SoulLink: true + Flags: + NoClearance: true + NoSave: true + NoBanishingBuster: true + - Status: Coma + DurationLookup: NPC_DARKBLESSING + Flags: + BossResist: true + MvpResist: true + - Status: Intravision + Icon: EFST_CLAIRVOYANCE + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Incallstatus + CalcFlags: + Str: true + Agi: true + Vit: true + Int: true + Dex: true + Luk: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + - Status: Incstr + CalcFlags: + Str: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + - Status: Incagi + CalcFlags: + Agi: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Incvit + CalcFlags: + Vit: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Incint + CalcFlags: + Int: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Incdex + CalcFlags: + Dex: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Incluk + CalcFlags: + Luk: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Inchit + CalcFlags: + Hit: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Inchitrate + DurationLookup: NPC_POWERUP + CalcFlags: + Hit: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Incflee + CalcFlags: + Flee: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Incfleerate + DurationLookup: NPC_AGIUP + CalcFlags: + Flee: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Incmhprate + CalcFlags: + MaxHp: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Incmsprate + CalcFlags: + MaxSp: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Incatkrate + CalcFlags: + Batk: true + Watk: true + Opt3: + ExplosionSpirits: true + Flags: + SendOption: true + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Incmatkrate + CalcFlags: + Matk: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Incdefrate + CalcFlags: + Def: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Strfood + Icon: EFST_FOOD_STR + CalcFlags: + Str: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Food_Str_Cash: true + - Status: Agifood + Icon: EFST_FOOD_AGI + CalcFlags: + Agi: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Food_Agi_Cash: true + - Status: Vitfood + Icon: EFST_FOOD_VIT + CalcFlags: + Vit: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Food_Vit_Cash: true + - Status: Intfood + Icon: EFST_FOOD_INT + CalcFlags: + Int: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Food_Int_Cash: true + - Status: Dexfood + Icon: EFST_FOOD_DEX + CalcFlags: + Dex: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Food_Dex_Cash: true + - Status: Lukfood + Icon: EFST_FOOD_LUK + CalcFlags: + Luk: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Food_Luk_Cash: true + - Status: Hitfood + Icon: EFST_FOOD_BASICHIT + CalcFlags: + Hit: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Fleefood + Icon: EFST_FOOD_BASICAVOIDANCE + CalcFlags: + Flee: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Batkfood + CalcFlags: + Batk: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Watkfood + CalcFlags: + Watk: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Matkfood + CalcFlags: + Matk: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Scresist + DurationLookup: PA_GOSPEL + - Status: Xmas + States: + NoAttack: true + Options: + Xmas: true + Flags: + SendLook: true + StopAttacking: true + NoRemoveOnDead: true + NoBanishingBuster: true + NoDispell: true + NoClearance: true + - Status: Warm + Icon: EFST_SG_SUN_WARM + DurationLookup: SG_SUN_WARM + Opt3: + Warm: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + RemoveOnChangeMap: true + RemoveOnMapWarp: true + - Status: Sun_Comfort + Icon: EFST_SUN_COMFORT + DurationLookup: SG_SUN_COMFORT + CalcFlags: + Def2: true + Flags: + RemoveOnMapWarp: true + - Status: Moon_Comfort + Icon: EFST_MOON_COMFORT + DurationLookup: SG_MOON_COMFORT + CalcFlags: + Flee: true + Flags: + RemoveOnMapWarp: true + - Status: Star_Comfort + Icon: EFST_STAR_COMFORT + DurationLookup: SG_STAR_COMFORT + CalcFlags: + Aspd: true + Flags: + RemoveOnMapWarp: true + - Status: Fusion + DurationLookup: SG_FUSION + CalcFlags: + Speed: true + Options: + Flying: true + Flags: + SendOption: true + NoRemoveOnDead: true + End: + Spirit: true + - Status: Skillrate_Up + DurationLookup: SG_FRIEND + - Status: Ske + DurationLookup: SL_SKE + CalcFlags: + Batk: true + Watk: true + Def: true + Def2: true + Opt3: + EnergyCoat: true + - Status: Kaite + Icon: EFST_KAITE + DurationLookup: SL_KAITE + Opt3: + Kaite: true + Flags: + NoSave: true + NoClearance: true + End: + Assumptio: true + - Status: Swoo + Icon: EFST_SWOO + DurationLookup: SL_SWOO + CalcFlags: + Speed: true + Opt3: + OverThrust: true + Flags: + NonPlayer: true + - Status: Ska + DurationLookup: SL_SKA + CalcFlags: + Def2: true + MDef2: true + Speed: true + Aspd: true + Opt3: + SteelBody: true + Flags: + NonPlayer: true + - Status: Earthscroll + Icon: EFST_EARTHSCROLL + DurationLookup: TK_SPTIME + CalcFlags: + Def: true + Mdef: true + Aspd: true + Flags: + NoRemoveOnDead: true + - Status: Miracle + Icon: EFST_SOULLINK + Flags: + NoDispell: true + NoBanishingBuster: true + RemoveOnMapWarp: true + NoRemoveOnDead: true + NoClearance: true + - Status: Madnesscancel + Icon: EFST_GS_MADNESSCANCEL + DurationLookup: GS_MADNESSCANCEL + States: + NoMove: true + CalcFlags: + Batk: true + Aspd: true + Flags: + NoDispell: true + NoBanishingBuster: true + Fail: + P_Alter: true + Heat_Barrel: true + End: + Adjustment: true + - Status: Adjustment + Icon: EFST_GS_ADJUSTMENT + DurationLookup: GS_ADJUSTMENT + CalcFlags: + Hit: true + Flee: true + Flags: + NoDispell: true + NoBanishingBuster: true + End: + Madnesscancel: true + - Status: Increasing + Icon: EFST_GS_ACCURACY + DurationLookup: GS_INCREASING + CalcFlags: + Agi: true + Dex: true + Hit: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Gatlingfever + Icon: EFST_GS_GATLINGFEVER + DurationLookup: GS_GATLINGFEVER + CalcFlags: + Flee: true + Speed: true + Aspd: true + Batk: true + Flags: + NoDispell: true + NoBanishingBuster: true + RequireWeapon: true + - Status: Tatamigaeshi + DurationLookup: NJ_TATAMIGAESHI + - Status: Utsusemi + Icon: EFST_NJ_UTSUSEMI + DurationLookup: NJ_UTSUSEMI + Flags: + NoSave: true + NoClearance: true + NoBanishingBuster: true + NoDispell: true + - Status: Bunsinjyutsu + Icon: EFST_NJ_BUNSINJYUTSU + DurationLookup: NJ_BUNSINJYUTSU + CalcFlags: + Dye: true + Opt3: + Bunsin: true + Flags: + NoSave: true + NoClearance: true + - Status: Kaensin + - Status: Suiton + Icon: EFST_NJ_SUITON + DurationLookup: NJ_SUITON + CalcFlags: + Agi: true + Speed: true + Flags: + BossResist: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + NoRemoveOnDead: true + Debuff: true + - Status: Nen + Icon: EFST_NJ_NEN + DurationLookup: NJ_NEN + CalcFlags: + Str: true + Int: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Knowledge + DurationLookup: SG_KNOWLEDGE + CalcFlags: + All: true + Flags: + RestartOnMapWarp: true + - Status: Sma + Icon: EFST_SMA_READY + DurationLookup: SL_SMA + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Fling + DurationLookup: GS_FLING + CalcFlags: + Def: true + Def2: true + - Status: Avoid + DurationLookup: HLIF_AVOID + CalcFlags: + Speed: true + - Status: Change + DurationLookup: HLIF_CHANGE + CalcFlags: + Vit: true + Int: true + Flags: + RemoveOnChangeMap: true + Fail: + Change: true + - Status: Bloodlust + DurationLookup: HAMI_BLOODLUST + CalcFlags: + Batk: true + Watk: true + - Status: Fleet + DurationLookup: HFLI_FLEET + CalcFlags: + Aspd: true + Batk: true + Watk: true + - Status: Speed + DurationLookup: HFLI_SPEED + CalcFlags: + Flee: true + - Status: Defence + DurationLookup: HAMI_DEFENCE + CalcFlags: + Def: true + - Status: Incaspdrate + CalcFlags: + Aspd: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Incflee2 + Icon: EFST_PLUSAVOIDVALUE + CalcFlags: + Flee2: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + - Status: Jailed + States: + NoWarp: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Enchantarms + Icon: EFST_WEAPONPROPERTY + DurationLookup: ITEM_ENCHANTARMS + CalcFlags: + Atk_Ele: true + Flags: + SendVal1: true + OverlapIgnoreLevel: true + - Status: Magicalattack + DurationLookup: NPC_MAGICALATTACK + CalcFlags: + Matk: true + - Status: Armorchange + DurationLookup: NPC_STONESKIN + CalcFlags: + Def: true + Mdef: true + - Status: Criticalwound + Icon: EFST_CRITICALWOUND + DurationLookup: NPC_CRITICALWOUND + Flags: + Debuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Magicmirror + DurationLookup: NPC_MAGICMIRROR + - Status: Slowcast + Icon: EFST_SLOWCAST + DurationLookup: NPC_SLOWCAST + Flags: + Debuff: true + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Summer + States: + NoAttack: true + Options: + Summer: true + Flags: + SendLook: true + StopAttacking: true + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Expboost + Icon: EFST_CASH_PLUSEXP + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + SendVal1: true + - Status: Itemboost + Icon: EFST_CASH_RECEIVEITEM + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + SendVal1: true + - Status: Bossmapinfo + Icon: EFST_CASH_BOSS_ALARM + Flags: + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + RemoveOnMapWarp: true + OverlapFail: true + - Status: Lifeinsurance + Icon: EFST_CASH_DEATHPENALTY + States: + NoDeathPenalty: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + - Status: Inccri + Icon: EFST_CRITICALPERCENT + CalcFlags: + Cri: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + #- Status: Incdef + #- Status: Incbaseatk + #- Status: Fastcast + - Status: Mdef_Rate + Icon: EFST_PROTECT_MDEF + CalcFlags: + Mdef: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + #- Status: Hpregen + - Status: Inchealrate + Icon: EFST_HEALPLUS + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Pneuma + DurationLookup: AL_PNEUMA + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Autotrade + Flags: + NoRemoveOnDead: true + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Ksprotected + - Status: Armor_Resist + CalcFlags: + All: true + Flags: + OverlapIgnoreLevel: true + - Status: Spcost_Rate + Icon: EFST_ATKER_BLOOD + CalcFlags: + All: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Commonsc_Resist + Icon: EFST_TARGET_BLOOD + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Sevenwind + DurationLookup: TK_SEVENWIND + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + - Status: Def_Rate + Icon: EFST_PROTECT_DEF + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + #- Status: Spregen + - Status: Walkspeed + CalcFlags: + Speed: true + - Status: Merc_Fleeup + Icon: EFST_MER_FLEE + CalcFlags: + Flee: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Merc_Atkup + Icon: EFST_MER_ATK + CalcFlags: + Watk: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Merc_Hpup + Icon: EFST_MER_HP + CalcFlags: + MaxHp: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Merc_Spup + Icon: EFST_MER_SP + CalcFlags: + MaxSp: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Merc_Hitup + Icon: EFST_MER_HIT + CalcFlags: + Hit: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Merc_Quicken + DurationLookup: MER_QUICKEN + CalcFlags: + Aspd: true + Opt3: + Quicken: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + Fail: + Decreaseagi: true + - Status: Rebirth + DurationLookup: NPC_REBIRTH + #- Status: Skillcastrate + #- Status: Defratioatk + #- Status: Hpdrain + #- Status: Skillatkbonus + - Status: Itemscript + CalcFlags: + All: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: S_Lifepotion + Icon: EFST_S_LIFEPOTION + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + NoRemoveOnDead: true + - Status: L_Lifepotion + Icon: EFST_L_LIFEPOTION + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + NoRemoveOnDead: true + - Status: Jexpboost + Icon: EFST_CASH_PLUSONLYJOBEXP + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + SendVal1: true + #- Status: Ignoredef + - Status: Hellpower + Icon: EFST_HELLPOWER + DurationLookup: NPC_HELLPOWER + Flags: + NoRemoveOnDead: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Invincible + Icon: EFST_INVINCIBLE + DurationLookup: NPC_INVINCIBLE + CalcFlags: + Speed: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Invincibleoff: true + - Status: Invincibleoff + DurationLookup: NPC_INVINCIBLEOFF + CalcFlags: + Speed: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Invincible: true + - Status: Manu_Atk + Icon: EFST_MANU_ATK + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Manu_Def + Icon: EFST_MANU_DEF + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Spl_Atk + Icon: EFST_SPL_ATK + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Spl_Def + Icon: EFST_SPL_DEF + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Manu_Matk + Icon: EFST_MANU_MATK + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Spl_Matk + Icon: EFST_SPL_MATK + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Food_Str_Cash + Icon: EFST_FOOD_STR_CASH + CalcFlags: + Str: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Strfood: true + - Status: Food_Agi_Cash + Icon: EFST_FOOD_AGI_CASH + CalcFlags: + Agi: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Agifood: true + - Status: Food_Vit_Cash + Icon: EFST_FOOD_VIT_CASH + CalcFlags: + Vit: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Vitfood: true + - Status: Food_Dex_Cash + Icon: EFST_FOOD_DEX_CASH + CalcFlags: + Dex: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Intfood: true + - Status: Food_Int_Cash + Icon: EFST_FOOD_INT_CASH + CalcFlags: + Int: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Dexfood: true + - Status: Food_Luk_Cash + Icon: EFST_FOOD_LUK_CASH + CalcFlags: + Luk: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Lukfood: true + - Status: Fear + DurationLookup: RK_WINDCUTTER + States: + NoMove: true + NoMoveCond: true + CalcFlags: + Flee: true + Hit: true + Flags: + BossResist: true + StopWalking: true + OverlapFail: true + Debuff: true + Fail: + Inspiration: true + End: + Blind: true + - Status: Burning + Icon: EFST_BURNT + DurationLookup: RK_DRAGONBREATH + Opt1: Burning + Flags: + SendOption: true + RemoveOnRefresh: true + RemoveOnLuxAnima: true + BossResist: true + Debuff: true + OverlapFail: true + MinDuration: 10000 + Fail: + Refresh: true + Inspiration: true + CalcFlags: + Mdef: true + - Status: Freezing + Icon: EFST_FROSTMISTY + DurationLookup: WL_FROSTMISTY + CalcFlags: + Aspd: true + Speed: true + Def: true + Flags: + BlEffect: true + DisplayPc: true + RemoveOnRefresh: true + RemoveOnLuxAnima: true + BossResist: true + NoDispell: true + NoBanishingBuster: true + Debuff: true + OverlapFail: true + MinDuration: 6000 + Fail: + Refresh: true + Inspiration: true + Warmer: true + End: + Burning: true + - Status: Enchantblade + Icon: EFST_ENCHANTBLADE + DurationLookup: RK_ENCHANTBLADE + - Status: Deathbound + Icon: EFST_DEATHBOUND + DurationLookup: RK_DEATHBOUND + States: + NoCast: true + Flags: + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Millenniumshield + Icon: EFST_REUSE_MILLENNIUMSHIELD + DurationLookup: RK_MILLENNIUMSHIELD + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Crushstrike + Icon: EFST_CRUSHSTRIKE + DurationLookup: RK_CRUSHSTRIKE + Flags: + NoClearbuff: true + NoDispell: true + - Status: Refresh + Icon: EFST_REFRESH + DurationLookup: RK_REFRESH + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoSave: true + - Status: Reuse_Refresh + Icon: EFST_REUSE_REFRESH + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: Giantgrowth + Icon: EFST_GIANTGROWTH + DurationLookup: RK_GIANTGROWTH + CalcFlags: + Str: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + - Status: Stonehardskin + Icon: EFST_STONEHARDSKIN + DurationLookup: RK_STONEHARDSKIN + CalcFlags: + Def: true + Mdef: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoRemoveOnDead: true + NoSave: true + - Status: Vitalityactivation + Icon: EFST_VITALITYACTIVATION + DurationLookup: RK_VITALITYACTIVATION + CalcFlags: + Regen: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + - Status: Stormblast + Icon: EFST_REUSE_STORMBLAST + DurationLookup: RK_VITALITYACTIVATION + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoRemoveOnDead: true + - Status: Fightingspirit + Icon: EFST_FIGHTINGSPIRIT + DurationLookup: RK_FIGHTINGSPIRIT + CalcFlags: + Watk: true + Aspd: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Fightingspirit: true + - Status: Abundance + Icon: EFST_ABUNDANCE + DurationLookup: RK_ABUNDANCE + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: Adoramus + Icon: EFST_ADORAMUS + DurationLookup: AB_ADORAMUS + CalcFlags: + Agi: true + Speed: true + Flags: + BossResist: true + Debuff: true + End: + Decreaseagi: true + - Status: Epiclesis + Icon: EFST_EPICLESIS + DurationLookup: AB_EPICLESIS + CalcFlags: + MaxHp: true + Flags: + NoRemoveOnDead: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Oratio + Icon: EFST_ORATIO + DurationLookup: AB_ORATIO + Flags: + BlEffect: true + DisplayPc: true + NoDispell: true + NoBanishingBuster: true + - Status: Laudaagnus + Icon: EFST_LAUDAAGNUS + DurationLookup: AB_LAUDAAGNUS + CalcFlags: + MaxHp: true + Flags: + NoDispell: true + NoBanishingBuster: true + - Status: Laudaramus + Icon: EFST_LAUDARAMUS + DurationLookup: AB_LAUDARAMUS + CalcFlags: + All: true + Flags: + NoDispell: true + NoBanishingBuster: true + - Status: Renovatio + Icon: EFST_RENOVATIO + DurationLookup: AB_RENOVATIO + CalcFlags: + Regen: true + Flags: + NoDispell: true + NoBanishingBuster: true + - Status: Expiatio + Icon: EFST_EXPIATIO + DurationLookup: AB_EXPIATIO + Flags: + NoDispell: true + NoBanishingBuster: true + - Status: Duplelight + Icon: EFST_DUPLELIGHT + DurationLookup: AB_DUPLELIGHT + Flags: + DisplayPc: true + NoDispell: true + NoBanishingBuster: true + - Status: Secrament + Icon: EFST_AB_SECRAMENT + DurationLookup: AB_SECRAMENT + Flags: + NoDispell: true + NoBanishingBuster: true + - Status: Whiteimprison + DurationLookup: WL_WHITEIMPRISON + States: + NoMove: true + NoCast: true + Opt1: Imprison + Flags: + SendOption: true + BossResist: true + SetStand: true + StopWalking: true + StopAttacking: true + OverlapFail: true + End: + Dancing: true + Burning: true + Freezing: true + Freeze: true + Stone: true + - Status: Marshofabyss + Icon: EFST_MARSHOFABYSS + DurationLookup: WL_MARSHOFABYSS + CalcFlags: + Agi: true + Dex: true + Speed: true + Flags: + RemoveOnRefresh: true + RemoveOnLuxAnima: true + BossResist: true + NoDispell: true + NoBanishingBuster: true + Debuff: true + MinDuration: 5000 + Fail: + Refresh: true + End: + Increaseagi: true + Windwalk: true + Aspdpotion0: true + Aspdpotion1: true + Aspdpotion2: true + Aspdpotion3: true + - Status: Recognizedspell + Icon: EFST_RECOGNIZEDSPELL + DurationLookup: WL_RECOGNIZEDSPELL + CalcFlags: + Matk: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Stasis + Icon: EFST_STASIS + DurationLookup: WL_STASIS + MinDuration: 10000 + - Status: Sphere_1 + Icon: EFST_SUMMON1 + Flags: + DisplayPc: true + NoClearance: true + - Status: Sphere_2 + Icon: EFST_SUMMON2 + Flags: + DisplayPc: true + NoClearance: true + - Status: Sphere_3 + Icon: EFST_SUMMON3 + Flags: + DisplayPc: true + NoClearance: true + - Status: Sphere_4 + Icon: EFST_SUMMON4 + Flags: + DisplayPc: true + NoClearance: true + - Status: Sphere_5 + Icon: EFST_SUMMON5 + Flags: + DisplayPc: true + NoClearance: true + - Status: Reading_Sb + - Status: Freeze_Sp + Icon: EFST_FREEZE_SP + Flags: + BlEffect: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + NoRemoveOnDead: true + - Status: Fearbreeze + Icon: EFST_FEARBREEZE + DurationLookup: RA_FEARBREEZE + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Electricshocker + Icon: EFST_ELECTRICSHOCKER + DurationLookup: RA_ELECTRICSHOCKER + States: + NoMove: true + Flags: + StopWalking: true + NoDispell: true + NoBanishingBuster: true + NoSave: true + OverlapFail: true + NoClearance: true + - Status: Wugdash + Icon: EFST_WUGDASH + DurationLookup: RA_WUGDASH + CalcFlags: + Speed: true + Dspd: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + RemoveOnChangeMap: true + - Status: Bite + Icon: EFST_WUGBITE + DurationLookup: RA_WUGBITE + States: + NoMove: true + Flags: + BossResist: true + StopWalking: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + Debuff: true + MinRate: 5000 + - Status: Camouflage + Icon: EFST_CAMOUFLAGE + DurationLookup: RA_CAMOUFLAGE + States: + NoMove: true + NoMoveCond: true + CalcFlags: + Speed: true + Flags: + DisplayPc: true + OnTouch: true + StopAttacking: true + RemoveOnDamaged: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + RemoveOnChangeMap: true + - Status: Acceleration + Icon: EFST_ACCELERATION + DurationLookup: NC_ACCELERATION + CalcFlags: + Speed: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Hovering + Icon: EFST_HOVERING + DurationLookup: NC_HOVERING + CalcFlags: + Speed: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Shapeshift + Icon: EFST_SHAPESHIFT + DurationLookup: NC_SHAPESHIFT + CalcFlags: + Def_Ele: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Infraredscan + Icon: EFST_INFRAREDSCAN + DurationLookup: NC_INFRAREDSCAN + CalcFlags: + Flee: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Analyze + Icon: EFST_ANALYZE + DurationLookup: NC_ANALYZE + CalcFlags: + Def: true + Def2: true + Mdef: true + MDef2: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Magneticfield + Icon: EFST_MAGNETICFIELD + DurationLookup: NC_MAGNETICFIELD + States: + NoMove: true + Flags: + BossResist: true + StopWalking: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + Debuff: true + Fail: + Hovering: true + - Status: Neutralbarrier + Icon: EFST_NEUTRALBARRIER + DurationLookup: NC_NEUTRALBARRIER + CalcFlags: + Def: true + Mdef: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + - Status: Neutralbarrier_Master + Icon: EFST_NEUTRALBARRIER_MASTER + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + RemoveOnChangeMap: true + - Status: Stealthfield + Icon: EFST_STEALTHFIELD + DurationLookup: NC_STEALTHFIELD + Flags: + DisplayPc: true + OnTouch: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + StopAttacking: true + CalcFlags: + Speed: true + - Status: Stealthfield_Master + Icon: EFST_STEALTHFIELD_MASTER + CalcFlags: + Speed: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + RemoveOnChangeMap: true + - Status: Overheat + Icon: EFST_OVERHEAT + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Overheat_Limitpoint + Icon: EFST_OVERHEAT_LIMITPOINT + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Venomimpress + Icon: EFST_VENOMIMPRESS + DurationLookup: GC_VENOMIMPRESS + Flags: + BlEffect: true + DisplayPc: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Poisoningweapon + Icon: EFST_POISONINGWEAPON + DurationLookup: GC_POISONINGWEAPON + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Weaponblocking + Icon: EFST_WEAPONBLOCKING + DurationLookup: GC_WEAPONBLOCKING + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + #- Status: Weaponblocking_Postdelay + # Icon: EFST_WEAPONBLOCKING_POSTDELAY + # Flags: + # NoDispell: true + # NoBanishingBuster: true + # NoClearance: true + # NoRemoveOnDead: true + # NoSave: true + - Status: Cloakingexceed + Icon: EFST_CLOAKINGEXCEED + DurationLookup: GC_CLOAKINGEXCEED + States: + NoPickItem: true + CalcFlags: + Speed: true + Options: + Cloak: true + Flags: + OnTouch: true + StopAttacking: true + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + RemoveOnMapWarp: true + - Status: Hallucinationwalk + Icon: EFST_HALLUCINATIONWALK + DurationLookup: GC_HALLUCINATIONWALK + CalcFlags: + Flee: true + Flags: + DisplayPc: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Hallucinationwalk_Postdelay + Icon: EFST_HALLUCINATIONWALK_POSTDELAY + DurationLookup: GC_HALLUCINATIONWALK + CalcFlags: + Speed: true + Aspd: true + Flags: + NoRemoveOnDead: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + - Status: Rollingcutter + Icon: EFST_ROLLINGCUTTER + DurationLookup: GC_ROLLINGCUTTER + Flags: + DisplayPc: true + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Toxin + Icon: EFST_TOXIN + Flags: + RemoveOnRefresh: true + RemoveOnLuxAnima: true + BossResist: true + NoDispell: true + NoBanishingBuster: true + Debuff: true + OverlapFail: true + - Status: Paralyse + Icon: EFST_PARALYSE + CalcFlags: + Flee: true + Speed: true + Aspd: true + Flags: + RemoveOnRefresh: true + RemoveOnLuxAnima: true + BossResist: true + NoDispell: true + NoBanishingBuster: true + Debuff: true + OverlapFail: true + Fail: + Refresh: true + Inspiration: true + Toxin: true + Paralyse: true + Venombleed: true + Magicmushroom: true + Deathhurt: true + Pyrexia: true + Oblivioncurse: true + Leechesend: true + - Status: Venombleed + Icon: EFST_VENOMBLEED + CalcFlags: + MaxHp: true + Flags: + RemoveOnRefresh: true + RemoveOnLuxAnima: true + BossResist: true + NoDispell: true + NoBanishingBuster: true + Debuff: true + OverlapFail: true + Fail: + Refresh: true + Inspiration: true + Toxin: true + Paralyse: true + Venombleed: true + Magicmushroom: true + Deathhurt: true + Pyrexia: true + Oblivioncurse: true + Leechesend: true + - Status: Magicmushroom + Icon: EFST_MAGICMUSHROOM + CalcFlags: + Regen: true + Flags: + RemoveOnRefresh: true + RemoveOnLuxAnima: true + BossResist: true + NoDispell: true + NoBanishingBuster: true + Debuff: true + OverlapFail: true + Fail: + Refresh: true + Inspiration: true + Toxin: true + Paralyse: true + Venombleed: true + Magicmushroom: true + Deathhurt: true + Pyrexia: true + Oblivioncurse: true + Leechesend: true + - Status: Deathhurt + Icon: EFST_DEATHHURT + CalcFlags: + Regen: true + Flags: + RemoveOnRefresh: true + RemoveOnLuxAnima: true + BossResist: true + NoDispell: true + NoBanishingBuster: true + Debuff: true + OverlapFail: true + Fail: + Refresh: true + Inspiration: true + Toxin: true + Paralyse: true + Venombleed: true + Magicmushroom: true + Deathhurt: true + Pyrexia: true + Oblivioncurse: true + Leechesend: true + - Status: Pyrexia + Icon: EFST_PYREXIA + CalcFlags: + All: true + Flags: + RemoveOnRefresh: true + RemoveOnLuxAnima: true + BossResist: true + NoDispell: true + NoBanishingBuster: true + Debuff: true + OverlapFail: true + Fail: + Refresh: true + Inspiration: true + Toxin: true + Paralyse: true + Venombleed: true + Magicmushroom: true + Deathhurt: true + Pyrexia: true + Oblivioncurse: true + Leechesend: true + - Status: Oblivioncurse + Icon: EFST_OBLIVIONCURSE + States: + NoCast: true + Nocastcond: true + CalcFlags: + Regen: true + Flags: + RemoveOnRefresh: true + RemoveOnLuxAnima: true + BossResist: true + NoDispell: true + NoBanishingBuster: true + Debuff: true + OverlapFail: true + Fail: + Refresh: true + Inspiration: true + Toxin: true + Paralyse: true + Venombleed: true + Magicmushroom: true + Deathhurt: true + Pyrexia: true + Oblivioncurse: true + Leechesend: true + - Status: Leechesend + Icon: EFST_LEECHESEND + Flags: + RemoveOnRefresh: true + RemoveOnLuxAnima: true + BossResist: true + NoDispell: true + NoBanishingBuster: true + Debuff: true + OverlapFail: true + Fail: + Refresh: true + Inspiration: true + Toxin: true + Paralyse: true + Venombleed: true + Magicmushroom: true + Deathhurt: true + Pyrexia: true + Oblivioncurse: true + Leechesend: true + - Status: Reflectdamage + Icon: EFST_LG_REFLECTDAMAGE + DurationLookup: LG_REFLECTDAMAGE + Flags: + NoDispell: true + NoBanishingBuster: true + RequireShield: true + End: + Reflectshield: true + - Status: Forceofvanguard + Icon: EFST_FORCEOFVANGUARD + DurationLookup: LG_FORCEOFVANGUARD + CalcFlags: + MaxHp: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Shieldspell_Hp + Icon: EFST_SHIELDSPELL_DEF + DurationLookup: LG_SHIELDSPELL + End: + Shieldspell_Sp: true + Shieldspell_Atk: true + - Status: Shieldspell_Sp + Icon: EFST_SHIELDSPELL_MDEF + DurationLookup: LG_SHIELDSPELL + End: + Shieldspell_Hp: true + Shieldspell_Atk: true + - Status: Shieldspell_Atk + Icon: EFST_SHIELDSPELL_REF + DurationLookup: LG_SHIELDSPELL + CalcFlags: + Watk: true + Matk: true + End: + Shieldspell_Hp: true + Shieldspell_Sp: true + - Status: Exeedbreak + Icon: EFST_EXEEDBREAK + DurationLookup: LG_EXEEDBREAK + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Prestige + Icon: EFST_PRESTIGE + DurationLookup: LG_PRESTIGE + CalcFlags: + Def: true + - Status: Banding + Icon: EFST_BANDING + DurationLookup: LG_BANDING + CalcFlags: + Def: true + Watk: true + Regen: true + Flags: + DisplayPc: true + OverlapFail: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Prestige: true + - Status: Banding_Defence + Icon: EFST_BANDING_DEFENCE + CalcFlags: + Speed: true + Flags: + BossResist: true + OverlapFail: true + - Status: Earthdrive + Icon: EFST_EARTHDRIVE + DurationLookup: LG_EARTHDRIVE + CalcFlags: + Def: true + Aspd: true + Flags: + NoDispell: true + NoBanishingBuster: true + - Status: Inspiration + Icon: EFST_INSPIRATION + DurationLookup: LG_INSPIRATION + CalcFlags: + Watk: true + Str: true + Agi: true + Vit: true + Int: true + Dex: true + Luk: true + Hit: true + MaxHp: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Spellfist + Icon: EFST_SPELLFIST + DurationLookup: SO_SPELLFIST + - Status: Crystalize + Icon: EFST_COLD + DurationLookup: SO_DIAMONDDUST + States: + NoMove: true + NoMoveCond: true + NoCast: true + NoCastCond: true + NoConsumeItem: true + NoAttack: true + Flags: + BlEffect: true + DisplayPc: true + SendOption: true + RemoveOnRefresh: true + RemoveOnLuxAnima: true + BossResist: true + StopWalking: true + Debuff: true + OverlapFail: true + Fail: + Refresh: true + Inspiration: true + Warmer: true + - Status: Striking + Icon: EFST_STRIKING + DurationLookup: SO_STRIKING + CalcFlags: + All: true + Flags: + NoSave: true + - Status: Warmer + Icon: EFST_WARMER + DurationLookup: SO_WARMER + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Crystalize: true + Freezing: true + Freeze: true + - Status: Vacuum_Extreme + Icon: EFST_VACUUM_EXTREME + DurationLookup: SO_VACUUM_EXTREME + Flags: + BossResist: true + StopWalking: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + RemoveOnChangeMap: true + Debuff: true + Fail: + Hallucinationwalk: true + Hovering: true + States: + Nomove: true + - Status: Propertywalk + Icon: EFST_PROPERTYWALK + DurationLookup: SO_FIREWALK + Flags: + NoSave: true + RemoveOnMapWarp: true + - Status: Swingdance + Icon: EFST_SWING + DurationLookup: WA_SWING_DANCE + CalcFlags: + Speed: true + Aspd: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Symphonyoflover: true + Moonlitserenade: true + Rushwindmill: true + Echosong: true + Harmonize: true + - Status: Symphonyoflover + Icon: EFST_SYMPHONY_LOVE + DurationLookup: WA_SYMPHONY_OF_LOVER + CalcFlags: + Mdef: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Swingdance: true + Moonlitserenade: true + Rushwindmill: true + Echosong: true + Harmonize: true + - Status: Moonlitserenade + Icon: EFST_MOONLIT_SERENADE + DurationLookup: WA_MOONLIT_SERENADE + CalcFlags: + Matk: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Swingdance: true + Symphonyoflover: true + Rushwindmill: true + Echosong: true + Harmonize: true + - Status: Rushwindmill + Icon: EFST_RUSH_WINDMILL + DurationLookup: MI_RUSH_WINDMILL + CalcFlags: + Watk: true + Speed: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Swingdance: true + Symphonyoflover: true + Moonlitserenade: true + Echosong: true + Harmonize: true + - Status: Echosong + Icon: EFST_ECHOSONG + DurationLookup: MI_ECHOSONG + CalcFlags: + Def: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Swingdance: true + Symphonyoflover: true + Moonlitserenade: true + Rushwindmill: true + Harmonize: true + - Status: Harmonize + Icon: EFST_HARMONIZE + DurationLookup: MI_HARMONIZE + CalcFlags: + Str: true + Agi: true + Vit: true + Int: true + Dex: true + Luk: true + End: + Swingdance: true + Symphonyoflover: true + Moonlitserenade: true + Rushwindmill: true + Echosong: true + - Status: Voiceofsiren + Icon: EFST_SIREN + DurationLookup: WM_VOICEOFSIREN + Flags: + BlEffect: true + DisplayPc: true + StopAttacking: true + MinDuration: 10000 + End: + Deepsleep: true + Gloomyday: true + Gloomyday_Sk: true + Songofmana: true + Dancewithwug: true + Saturdaynightfever: true + Leradsdew: true + Melodyofsink: true + Beyondofwarcry: true + Unlimitedhummingvoice: true + Sircleofnature: true + - Status: Deepsleep + Icon: EFST_HANDICAPSTATE_DEEP_SLEEP + DurationLookup: WM_LULLABY_DEEPSLEEP + States: + NoCast: true + NoChat: true + NoMove: true + NoConsumeItem: true + NoAttack: true + Opt1: Sleep + Flags: + BlEffect: true + DisplayPc: true + RemoveOnRefresh: true + RemoveOnLuxAnima: true + BossResist: true + StopWalking: true + StopAttacking: true + SetStand: true + RemoveOnDamaged: true + NoSave: true + Debuff: true + OverlapFail: true + MinDuration: 5000 + Fail: + Refresh: true + Inspiration: true + End: + Dancing: true + Voiceofsiren: true + Gloomyday: true + Gloomyday_Sk: true + Songofmana: true + Dancewithwug: true + Saturdaynightfever: true + Leradsdew: true + Melodyofsink: true + Beyondofwarcry: true + Unlimitedhummingvoice: true + Sircleofnature: true + - Status: Sircleofnature + Icon: EFST_SIRCLEOFNATURE + DurationLookup: WM_SIRCLEOFNATURE + End: + Deepsleep: true + Gloomyday: true + Gloomyday_Sk: true + Songofmana: true + Dancewithwug: true + Saturdaynightfever: true + Leradsdew: true + Melodyofsink: true + Beyondofwarcry: true + Unlimitedhummingvoice: true + Sircleofnature: true + CalcFlags: + Regen: true + - Status: Gloomyday + Icon: EFST_GLOOMYDAY + DurationLookup: WM_GLOOMYDAY + CalcFlags: + Flee: true + Speed: true + Aspd: true + End: + Voiceofsiren: true + Deepsleep: true + Songofmana: true + Dancewithwug: true + Saturdaynightfever: true + Leradsdew: true + Melodyofsink: true + Beyondofwarcry: true + Unlimitedhummingvoice: true + - Status: Gloomyday_Sk + Icon: EFST_GLOOMYDAY + - Status: Songofmana + Icon: EFST_SONG_OF_MANA + DurationLookup: WM_SONG_OF_MANA + End: + Voiceofsiren: true + Deepsleep: true + Gloomyday: true + Gloomyday_Sk: true + Dancewithwug: true + Saturdaynightfever: true + Leradsdew: true + Melodyofsink: true + Beyondofwarcry: true + Unlimitedhummingvoice: true + Sircleofnature: true + CalcFlags: + Regen: true + - Status: Dancewithwug + Icon: EFST_DANCE_WITH_WUG + DurationLookup: WM_DANCE_WITH_WUG + CalcFlags: + Aspd: true + End: + Voiceofsiren: true + Deepsleep: true + Gloomyday: true + Gloomyday_Sk: true + Songofmana: true + Saturdaynightfever: true + Leradsdew: true + Melodyofsink: true + Beyondofwarcry: true + Unlimitedhummingvoice: true + Sircleofnature: true + - Status: Saturdaynightfever + Icon: EFST_SATURDAY_NIGHT_FEVER + DurationLookup: WM_SATURDAY_NIGHT_FEVER + States: + NoCast: true + NoChat: true + NoEquipItem: true + NoUnEquipItem: true + NoConsumeItem: true + CalcFlags: + Hit: true + Flee: true + Regen: true + Flags: + NoSave: true + Fail: + Berserk: true + Inspiration: true + End: + Voiceofsiren: true + Deepsleep: true + Gloomyday: true + Gloomyday_Sk: true + Songofmana: true + Dancewithwug: true + Leradsdew: true + Melodyofsink: true + Beyondofwarcry: true + Unlimitedhummingvoice: true + Sircleofnature: true + - Status: Leradsdew + Icon: EFST_LERADS_DEW + DurationLookup: WM_LERADS_DEW + CalcFlags: + MaxHp: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Voiceofsiren: true + Deepsleep: true + Gloomyday: true + Gloomyday_Sk: true + Songofmana: true + Dancewithwug: true + Saturdaynightfever: true + Melodyofsink: true + Beyondofwarcry: true + Unlimitedhummingvoice: true + Sircleofnature: true + - Status: Melodyofsink + Icon: EFST_MELODYOFSINK + DurationLookup: WM_MELODYOFSINK + CalcFlags: + Int: true + MaxSp: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Voiceofsiren: true + Deepsleep: true + Gloomyday: true + Gloomyday_Sk: true + Songofmana: true + Dancewithwug: true + Saturdaynightfever: true + Leradsdew: true + Beyondofwarcry: true + Unlimitedhummingvoice: true + Sircleofnature: true + - Status: Beyondofwarcry + Icon: EFST_BEYOND_OF_WARCRY + DurationLookup: WM_BEYOND_OF_WARCRY + CalcFlags: + Str: true + MaxHp: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Voiceofsiren: true + Deepsleep: true + Gloomyday: true + Gloomyday_Sk: true + Songofmana: true + Dancewithwug: true + Saturdaynightfever: true + Leradsdew: true + Melodyofsink: true + Unlimitedhummingvoice: true + Sircleofnature: true + - Status: Unlimitedhummingvoice + Icon: EFST_UNLIMITED_HUMMING_VOICE + DurationLookup: WM_UNLIMITED_HUMMING_VOICE + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Voiceofsiren: true + Deepsleep: true + Gloomyday: true + Gloomyday_Sk: true + Songofmana: true + Dancewithwug: true + Saturdaynightfever: true + Leradsdew: true + Melodyofsink: true + Beyondofwarcry: true + Sircleofnature: true + - Status: Sitdown_Force + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Netherworld + Icon: EFST_NETHERWORLD + DurationLookup: WM_POEMOFNETHERWORLD + States: + NoMove: true + Flags: + BlEffect: true + DisplayPc: true + BossResist: true + StopWalking: true + OverlapFail: true + Debuff: true + - Status: Crescentelbow + Icon: EFST_CRESCENTELBOW + DurationLookup: SR_CRESCENTELBOW + Flags: + BossResist: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Cursedcircle_Atker + Icon: EFST_CURSEDCIRCLE_ATKER + DurationLookup: SR_CURSEDCIRCLE + States: + NoMove: true + NoAttack: true + Flags: + DisplayPc: true + NoClearbuff: true + StopWalking: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + StopAttacking: true + RemoveOnChangeMap: true + - Status: Cursedcircle_Target + Icon: EFST_CURSEDCIRCLE_TARGET + DurationLookup: SR_CURSEDCIRCLE + States: + NoMove: true + NoCast: true + NoAttack: true + Flags: + BlEffect: true + DisplayPc: true + MobLoseTarget: true + NoClearbuff: true + StopWalking: true + StopAttacking: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: Lightningwalk + Icon: EFST_LIGHTNINGWALK + DurationLookup: SR_LIGHTNINGWALK + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Raisingdragon + Icon: EFST_RAISINGDRAGON + DurationLookup: SR_RAISINGDRAGON + CalcFlags: + Regen: true + MaxHp: true + MaxSp: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + - Status: Gt_Energygain + Icon: EFST_GENTLETOUCH_ENERGYGAIN + DurationLookup: SR_GENTLETOUCH_ENERGYGAIN + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Gt_Change + Icon: EFST_GENTLETOUCH_CHANGE + DurationLookup: SR_GENTLETOUCH_CHANGE + CalcFlags: + Watk: true + Aspd: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Gt_Revitalize: true + - Status: Gt_Revitalize + Icon: EFST_GENTLETOUCH_REVITALIZE + DurationLookup: SR_GENTLETOUCH_REVITALIZE + CalcFlags: + MaxHp: true + Regen: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Gt_Change: true + - Status: Gn_Cartboost + Icon: EFST_GN_CARTBOOST + DurationLookup: GN_CARTBOOST + CalcFlags: + Speed: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + Fail: + Quagmire: true + Dontforgetme: true + End: + Decreaseagi: true + EndReturn: true + - Status: Thornstrap + Icon: EFST_THORNS_TRAP + DurationLookup: GN_THORNS_TRAP + States: + NoMove: true + Flags: + StopWalking: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + - Status: Bloodsucker + Icon: EFST_BLOOD_SUCKER + DurationLookup: GN_BLOOD_SUCKER + Flags: + BlEffect: true + DisplayPc: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + - Status: Smokepowder + Icon: EFST_FIRE_EXPANSION_SMOKE_POWDER + DurationLookup: GN_FIRE_EXPANSION_SMOKE_POWDER + CalcFlags: + Flee: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + - Status: Teargas + Icon: EFST_FIRE_EXPANSION_TEAR_GAS + DurationLookup: GN_FIRE_EXPANSION_TEAR_GAS + CalcFlags: + Hit: true + Flee: true + Flags: + BossResist: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + - Status: Mandragora + Icon: EFST_MANDRAGORA + DurationLookup: GN_MANDRAGORA + CalcFlags: + Int: true + Flags: + RemoveOnRefresh: true + RemoveOnLuxAnima: true + NoDispell: true + NoBanishingBuster: true + Debuff: true + OverlapFail: true + Fail: + Refresh: true + Inspiration: true + - Status: Stomachache + Icon: EFST_STOMACHACHE + CalcFlags: + Str: true + Agi: true + Vit: true + Dex: true + Int: true + Luk: true + Flags: + NoDispell: true + NoBanishingBuster: true + Debuff: true + - Status: Mysterious_Powder + Icon: EFST_MYSTERIOUS_POWDER + CalcFlags: + MaxHp: true + Flags: + NoDispell: true + NoBanishingBuster: true + Debuff: true + - Status: Melon_Bomb + Icon: EFST_MELON_BOMB + CalcFlags: + Speed: true + Aspd: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + - Status: Banana_Bomb + Icon: EFST_BANANA_BOMB + CalcFlags: + Luk: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Banana_Bomb_Sitdown + Icon: EFST_BANANA_BOMB_SITDOWN_POSTDELAY + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + - Status: Savage_Steak + Icon: EFST_SAVAGE_STEAK + CalcFlags: + Str: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + - Status: Cocktail_Warg_Blood + Icon: EFST_COCKTAIL_WARG_BLOOD + CalcFlags: + Int: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + - Status: Minor_Bbq + Icon: EFST_MINOR_BBQ + CalcFlags: + Vit: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + - Status: Siroma_Ice_Tea + Icon: EFST_SIROMA_ICE_TEA + CalcFlags: + Dex: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + - Status: Drocera_Herb_Steamed + Icon: EFST_DROCERA_HERB_STEAMED + CalcFlags: + Agi: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + - Status: Putti_Tails_Noodles + Icon: EFST_PUTTI_TAILS_NOODLES + CalcFlags: + Luk: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + - Status: Boost500 + Icon: EFST_BOOST500 + CalcFlags: + Aspd: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Full_Swing_K + Icon: EFST_FULL_SWING_K + CalcFlags: + Batk: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Mana_Plus + Icon: EFST_MANA_PLUS + CalcFlags: + Matk: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Mustle_M + Icon: EFST_MUSTLE_M + CalcFlags: + MaxHp: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Life_Force_F + Icon: EFST_LIFE_FORCE_F + CalcFlags: + MaxSp: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Extract_White_Potion_Z + Icon: EFST_EXTRACT_WHITE_POTION_Z + CalcFlags: + Regen: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Vitata_500 + Icon: EFST_VITATA_500 + CalcFlags: + Regen: true + MaxSp: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Extract_Salamine_Juice + Icon: EFST_EXTRACT_SALAMINE_JUICE + CalcFlags: + Aspd: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: _Reproduce + Icon: EFST_REPRODUCE + DurationLookup: SC_REPRODUCE + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: _Autoshadowspell + Icon: EFST_AUTOSHADOWSPELL + DurationLookup: SC_AUTOSHADOWSPELL + - Status: _Shadowform + Icon: EFST_SHADOWFORM + DurationLookup: SC_SHADOWFORM + States: + NoCast: true + NoConsumeItem: true + NoAttack: true + Flags: + DisplayPc: true + OnTouch: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + RemoveOnChangeMap: true + - Status: _Bodypaint + Icon: EFST_BODYPAINT + DurationLookup: SC_BODYPAINT + CalcFlags: + Aspd: true + Flags: + NoDispell: true + NoBanishingBuster: true + Fail: + Inspiration: true + - Status: _Invisibility + Icon: EFST_INVISIBILITY + DurationLookup: SC_INVISIBILITY + States: + NoCast: true + NoConsumeItem: true + CalcFlags: + Aspd: true + Cri: true + Atk_Ele: true + Options: + Cloak: true + Flags: + OnTouch: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + Fail: + _Invisibility: true + - Status: _Deadlyinfect + Icon: EFST_DEADLYINFECT + DurationLookup: SC_DEADLYINFECT + Flags: + NoDispell: true + NoBanishingBuster: true + - Status: _Enervation + Icon: EFST_ENERVATION + DurationLookup: SC_ENERVATION + CalcFlags: + Batk: true + Watk: true + Flags: + OverlapFail: true + BossResist: true + NoBanishingBuster: true + NoClearance: true + Fail: + Inspiration: true + - Status: _Groomy + Icon: EFST_GROOMY + DurationLookup: SC_GROOMY + CalcFlags: + Aspd: true + Hit: true + Flags: + OverlapFail: true + BossResist: true + NoBanishingBuster: true + NoClearance: true + Fail: + Inspiration: true + - Status: _Ignorance + Icon: EFST_IGNORANCE + DurationLookup: SC_IGNORANCE + States: + NoCast: true + Flags: + OverlapFail: true + BossResist: true + NoBanishingBuster: true + NoClearance: true + Fail: + Inspiration: true + - Status: _Laziness + Icon: EFST_LAZINESS + DurationLookup: SC_LAZINESS + CalcFlags: + Flee: true + Speed: true + Flags: + OverlapFail: true + BossResist: true + NoBanishingBuster: true + NoClearance: true + Fail: + Inspiration: true + - Status: _Unlucky + Icon: EFST_UNLUCKY + DurationLookup: SC_UNLUCKY + CalcFlags: + Cri: true + Flee2: true + Flags: + OverlapFail: true + BossResist: true + NoBanishingBuster: true + NoClearance: true + Fail: + Inspiration: true + - Status: _Weakness + Icon: EFST_WEAKNESS + DurationLookup: SC_WEAKNESS + CalcFlags: + MaxHp: true + Flags: + OverlapFail: true + BossResist: true + NoBanishingBuster: true + NoClearance: true + Fail: + Inspiration: true + - Status: _Stripaccessory + Icon: EFST_STRIPACCESSARY + DurationLookup: SC_STRIPACCESSARY + CalcFlags: + Dex: true + Int: true + Luk: true + Flags: + Debuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: _Manhole + Icon: EFST_MANHOLE + DurationLookup: SC_MANHOLE + States: + NoMove: true + NoCast: true + NoConsumeItem: true + Flags: + BlEffect: true + DisplayPc: true + MobLoseTarget: true + NoClearbuff: true + StopWalking: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + RemoveOnChangeMap: true + - Status: _Bloodylust + Icon: EFST_BLOODYLUST + DurationLookup: SC_BLOODYLUST + States: + NoCast: true + NoUnEquipItem: true + CalcFlags: + Def: true + Def2: true + Batk: true + Watk: true + Flags: + Debuff: true + NoSave: true + - Status: Circle_Of_Fire + Icon: EFST_CIRCLE_OF_FIRE + - Status: Circle_Of_Fire_Option + Icon: EFST_CIRCLE_OF_FIRE_OPTION + DurationLookup: EL_CIRCLE_OF_FIRE + CalcFlags: + All: true + - Status: Fire_Cloak + Icon: EFST_FIRE_CLOAK + - Status: Fire_Cloak_Option + Icon: EFST_FIRE_CLOAK_OPTION + DurationLookup: EL_FIRE_CLOAK + CalcFlags: + All: true + - Status: Water_Screen + Icon: EFST_WATER_SCREEN + - Status: Water_Screen_Option + Icon: EFST_WATER_SCREEN_OPTION + DurationLookup: EL_WATER_SCREEN + CalcFlags: + All: true + - Status: Water_Drop + Icon: EFST_WATER_DROP + - Status: Water_Drop_Option + Icon: EFST_WATER_DROP_OPTION + DurationLookup: EL_WATER_DROP + CalcFlags: + All: true + - Status: Water_Barrier + Icon: EFST_WATER_BARRIER + DurationLookup: EL_WATER_BARRIER + CalcFlags: + Watk: true + Flee: true + - Status: Wind_Step + Icon: EFST_WIND_STEP + - Status: Wind_Step_Option + Icon: EFST_WIND_STEP_OPTION + DurationLookup: EL_WIND_STEP + CalcFlags: + Speed: true + Flee: true + - Status: Wind_Curtain + Icon: EFST_WIND_CURTAIN + - Status: Wind_Curtain_Option + Icon: EFST_WIND_CURTAIN_OPTION + DurationLookup: EL_WIND_CURTAIN + CalcFlags: + All: true + - Status: Zephyr + Icon: EFST_ZEPHYR + DurationLookup: EL_ZEPHYR + CalcFlags: + Flee: true + - Status: Solid_Skin + Icon: EFST_SOLID_SKIN + - Status: Solid_Skin_Option + Icon: EFST_SOLID_SKIN_OPTION + DurationLookup: EL_SOLID_SKIN + CalcFlags: + Def: true + MaxHp: true + - Status: Stone_Shield + Icon: EFST_STONE_SHIELD + - Status: Stone_Shield_Option + Icon: EFST_STONE_SHIELD_OPTION + DurationLookup: EL_STONE_SHIELD + CalcFlags: + All: true + - Status: Power_Of_Gaia + Icon: EFST_POWER_OF_GAIA + DurationLookup: EL_POWER_OF_GAIA + CalcFlags: + MaxHp: true + Def: true + Speed: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + NoRemoveOnDead: true + - Status: Pyrotechnic + Icon: EFST_PYROTECHNIC + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Pyrotechnic_Option + Icon: EFST_PYROTECHNIC_OPTION + DurationLookup: EL_PYROTECHNIC + CalcFlags: + Watk: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + NoSave: true + - Status: Heater + Icon: EFST_HEATER + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Heater_Option + Icon: EFST_HEATER_OPTION + DurationLookup: EL_HEATER + CalcFlags: + Watk: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + NoSave: true + - Status: Tropic + Icon: EFST_TROPIC + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Tropic_Option + Icon: EFST_TROPIC_OPTION + DurationLookup: EL_TROPIC + CalcFlags: + Watk: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + NoSave: true + - Status: Aquaplay + Icon: EFST_AQUAPLAY + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Aquaplay_Option + Icon: EFST_AQUAPLAY_OPTION + DurationLookup: EL_AQUAPLAY + CalcFlags: + Matk: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + NoSave: true + - Status: Cooler + Icon: EFST_COOLER + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Cooler_Option + Icon: EFST_COOLER_OPTION + DurationLookup: EL_COOLER + CalcFlags: + Matk: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + NoSave: true + - Status: Chilly_Air + Icon: EFST_CHILLY_AIR + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Chilly_Air_Option + Icon: EFST_CHILLY_AIR_OPTION + DurationLookup: EL_CHILLY_AIR + CalcFlags: + Matk: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + NoSave: true + - Status: Gust + Icon: EFST_GUST + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Gust_Option + Icon: EFST_GUST_OPTION + DurationLookup: EL_GUST + CalcFlags: + Aspd: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + NoSave: true + - Status: Blast + Icon: EFST_BLAST + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Blast_Option + Icon: EFST_BLAST_OPTION + DurationLookup: EL_BLAST + CalcFlags: + Aspd: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + NoSave: true + - Status: Wild_Storm + Icon: EFST_WILD_STORM + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Wild_Storm_Option + Icon: EFST_WILD_STORM_OPTION + DurationLookup: EL_WILD_STORM + CalcFlags: + Aspd: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + NoSave: true + - Status: Petrology + Icon: EFST_PETROLOGY + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Petrology_Option + Icon: EFST_PETROLOGY_OPTION + DurationLookup: EL_PETROLOGY + CalcFlags: + MaxHp: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + NoSave: true + - Status: Cursed_Soil + Icon: EFST_CURSED_SOIL + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Cursed_Soil_Option + Icon: EFST_CURSED_SOIL_OPTION + DurationLookup: EL_CURSED_SOIL + CalcFlags: + MaxHp: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + NoSave: true + - Status: Upheaval + Icon: EFST_UPHEAVAL + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Upheaval_Option + Icon: EFST_UPHEAVAL_OPTION + DurationLookup: EL_UPHEAVAL + CalcFlags: + MaxHp: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + NoSave: true + - Status: Tidal_Weapon + Icon: EFST_TIDAL_WEAPON + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Tidal_Weapon_Option + Icon: EFST_TIDAL_WEAPON_OPTION + DurationLookup: EL_TIDAL_WEAPON + CalcFlags: + All: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + NoSave: true + - Status: Rock_Crusher + Icon: EFST_ROCK_CRUSHER + DurationLookup: EL_ROCK_CRUSHER + CalcFlags: + Def: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Rock_Crusher_Atk + Icon: EFST_ROCK_CRUSHER_ATK + DurationLookup: EL_ROCK_CRUSHER_ATK + CalcFlags: + Speed: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Leadership + DurationLookup: GD_LEADERSHIP + CalcFlags: + Str: true + Flags: + NoClearbuff: true + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Glorywounds + DurationLookup: GD_GLORYWOUNDS + CalcFlags: + Vit: true + Flags: + NoClearbuff: true + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Soulcold + DurationLookup: GD_SOULCOLD + CalcFlags: + Agi: true + Flags: + NoClearbuff: true + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Hawkeyes + DurationLookup: GD_HAWKEYES + CalcFlags: + Dex: true + Flags: + NoClearbuff: true + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Odins_Power + Icon: EFST_ODINS_POWER + DurationLookup: ALL_ODINS_POWER + CalcFlags: + Watk: true + Matk: true + Mdef: true + Def: true + - Status: Fire_Insignia + Icon: EFST_FIRE_INSIGNIA + DurationLookup: SO_FIRE_INSIGNIA + CalcFlags: + Matk: true + Watk: true + Atk_Ele: true + Regen: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + - Status: Water_Insignia + Icon: EFST_WATER_INSIGNIA + DurationLookup: SO_FIRE_INSIGNIA + CalcFlags: + Matk: true + Watk: true + Atk_Ele: true + Regen: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + - Status: Wind_Insignia + Icon: EFST_WIND_INSIGNIA + DurationLookup: SO_WATER_INSIGNIA + CalcFlags: + Matk: true + Watk: true + Aspd: true + Atk_Ele: true + Regen: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + - Status: Earth_Insignia + Icon: EFST_EARTH_INSIGNIA + DurationLookup: SO_WIND_INSIGNIA + CalcFlags: + Mdef: true + Def: true + MaxHp: true + MaxSp: true + Matk: true + Watk: true + Atk_Ele: true + Regen: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + - Status: Push_Cart + Icon: EFST_ON_PUSH_CART + CalcFlags: + Speed: true + Flags: + DisplayPc: true + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapIgnoreLevel: true + - Status: Spellbook1 + Icon: EFST_SPELLBOOK1 + Flags: + NoClearance: true + - Status: Spellbook2 + Icon: EFST_SPELLBOOK2 + Flags: + NoClearance: true + - Status: Spellbook3 + Icon: EFST_SPELLBOOK3 + Flags: + NoClearance: true + - Status: Spellbook4 + Icon: EFST_SPELLBOOK4 + Flags: + NoClearance: true + - Status: Spellbook5 + Icon: EFST_SPELLBOOK5 + Flags: + NoClearance: true + - Status: Spellbook6 + Icon: EFST_SPELLBOOK6 + Flags: + NoClearance: true + - Status: Maxspellbook + Icon: EFST_SPELLBOOK7 + Flags: + NoClearance: true + - Status: Incmhp + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + CalcFlags: + MaxHp: true + - Status: Incmsp + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + CalcFlags: + MaxSp: true + - Status: Partyflee + Icon: EFST_PARTYFLEE + DurationLookup: ALL_PARTYFLEE + Flags: + NoClearance: true + NoBanishingBuster: true + - Status: Meikyousisui + Icon: EFST_MEIKYOUSISUI + DurationLookup: KO_MEIKYOUSISUI + States: + NoMove: true + Flags: + StopWalking: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Jyumonjikiri + Icon: EFST_KO_JYUMONJIKIRI + DurationLookup: KO_JYUMONJIKIRI + Flags: + BlEffect: true + DisplayPc: true + - Status: Kyougaku + Icon: EFST_KYOUGAKU + DurationLookup: KO_KYOUGAKU + States: + NoMove: true + NoEquipItem: true + NoUnEquipItem: true + CalcFlags: + Str: true + Agi: true + Vit: true + Int: true + Dex: true + Luk: true + Flags: + StopWalking: true + NoSave: true + Debuff: true + - Status: Izayoi + Icon: EFST_IZAYOI + DurationLookup: KO_IZAYOI + CalcFlags: + Matk: true + - Status: Zenkai + Icon: EFST_ZENKAI + DurationLookup: KO_ZENKAI + - Status: Kagehumi + Icon: EFST_KG_KAGEHUMI + DurationLookup: KG_KAGEHUMI + States: + NoMove: true + NoConsumeItem: true + - Status: Kyomu + Icon: EFST_KYOMU + DurationLookup: KG_KYOMU + - Status: Kagemusya + Icon: EFST_KAGEMUSYA + DurationLookup: KG_KAGEMUSYA + - Status: Zangetsu + Icon: EFST_ZANGETSU + DurationLookup: OB_ZANGETSU + CalcFlags: + Matk: true + Batk: true + - Status: Gensou + Icon: EFST_GENSOU + DurationLookup: OB_OBOROGENSOU + - Status: Akaitsuki + Icon: EFST_AKAITSUKI + DurationLookup: OB_AKAITSUKI + Flags: + BlEffect: true + DisplayPc: true + Debuff: true + - Status: Style_Change + DurationLookup: MH_STYLE_CHANGE + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Tinder_Breaker + Icon: EFST_TINDER_BREAKER_POSTDELAY + DurationLookup: MH_TINDER_BREAKER + States: + NoMove: true + CalcFlags: + Flee: true + Flags: + StopWalking: true + NoSave: true + RemoveOnChangeMap: true + - Status: Tinder_Breaker2 + Icon: EFST_TINDER_BREAKER + DurationLookup: MH_TINDER_BREAKER + States: + NoMove: true + CalcFlags: + Flee: true + Flags: + StopWalking: true + NoSave: true + RemoveOnChangeMap: true + OverlapFail: true + - Status: Cbc + Icon: EFST_CBC + DurationLookup: MH_CBC + CalcFlags: + Flee: true + Flags: + NoSave: true + - Status: Eqc + Icon: EFST_EQC + DurationLookup: MH_EQC + CalcFlags: + Def2: true + MaxHp: true + Flags: + NoSave: true + End: + Tinder_Breaker2: true + - Status: Goldene_Ferse + Icon: EFST_GOLDENE_FERSE + DurationLookup: MH_GOLDENE_FERSE + CalcFlags: + Aspd: true + Flee: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + Fail: + Angriffs_Modus: true + - Status: Angriffs_Modus + Icon: EFST_ANGRIFFS_MODUS + DurationLookup: MH_ANGRIFFS_MODUS + CalcFlags: + Batk: true + Def: true + Flee: true + MaxHp: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + Fail: + Goldene_Ferse: true + - Status: Overed_Boost + Icon: EFST_OVERED_BOOST + DurationLookup: MH_OVERED_BOOST + CalcFlags: + Flee: true + Aspd: true + Def: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Overed_Boost: true + - Status: Light_Of_Regene + Icon: EFST_LIGHT_OF_REGENE + DurationLookup: MH_LIGHT_OF_REGENE + Flags: + NoRemoveOnDead: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Ash + Icon: EFST_VOLCANIC_ASH + DurationLookup: MH_VOLCANIC_ASH + CalcFlags: + Def: true + Def2: true + Hit: true + Batk: true + Flee: true + - Status: Granitic_Armor + Icon: EFST_GRANITIC_ARMOR + DurationLookup: MH_GRANITIC_ARMOR + - Status: Magma_Flow + Icon: EFST_MAGMA_FLOW + DurationLookup: MH_MAGMA_FLOW + - Status: Pyroclastic + Icon: EFST_PYROCLASTIC + DurationLookup: MH_PYROCLASTIC + States: + NoEquipItem: true + CalcFlags: + Batk: true + Atk_Ele: true + - Status: Paralysis + Icon: EFST_NEEDLE_OF_PARALYZE + DurationLookup: MH_NEEDLE_OF_PARALYZE + States: + NoMove: true + CalcFlags: + Def2: true + Flags: + BossResist: true + StopWalking: true + NoRemoveOnDead: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Pain_Killer + Icon: EFST_PAIN_KILLER + DurationLookup: MH_PAIN_KILLER + CalcFlags: + Aspd: true + Flags: + NoRemoveOnDead: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Hanbok + States: + NoAttack: true + Options: + Hanbok: true + Flags: + SendLook: true + StopAttacking: true + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Defset + Icon: EFST_SET_NUM_DEF + CalcFlags: + Def: true + Flags: + OverlapFail: true + - Status: Mdefset + Icon: EFST_SET_NUM_MDEF + CalcFlags: + Mdef: true + Flags: + OverlapFail: true + - Status: Darkcrow + Icon: EFST_DARKCROW + DurationLookup: GC_DARKCROW + Flags: + BlEffect: true + DisplayPc: true + - Status: Full_Throttle + Icon: EFST_FULL_THROTTLE + DurationLookup: ALL_FULL_THROTTLE + CalcFlags: + Speed: true + Str: true + Agi: true + Vit: true + Int: true + Dex: true + Luk: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Rebound + Icon: EFST_REBOUND + CalcFlags: + Speed: true + Regen: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Unlimit + Icon: EFST_UNLIMIT + DurationLookup: RA_UNLIMIT + CalcFlags: + Def: true + Def2: true + Mdef: true + MDef2: true + Flags: + DisplayPc: true + - Status: Kings_Grace + Icon: EFST_KINGS_GRACE + DurationLookup: LG_KINGS_GRACE + States: + NoCast: true + NoAttack: true + Nomove: true + NoConsumeItem: true + Flags: + StopAttacking: true + End: + Poison: true + Blind: true + Freeze: true + Stone: true + Stun: true + Sleep: true + Bleeding: true + Curse: true + Confusion: true + Hallucination: true + Silence: true + Burning: true + Crystalize: true + Freezing: true + Deepsleep: true + Fear: true + Mandragora: true + - Status: Telekinesis_Intense + Icon: EFST_TELEKINESIS_INTENSE + DurationLookup: WL_TELEKINESIS_INTENSE + Flags: + DisplayPc: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + CalcFlags: + Matk: true + - Status: Offertorium + Icon: EFST_OFFERTORIUM + DurationLookup: AB_OFFERTORIUM + Flags: + DisplayPc: true + Fail: + Magnificat: true + End: + Magnificat: true + Blind: true + Curse: true + Poison: true + Hallucination: true + Confusion: true + Bleeding: true + Burning: true + Freezing: true + Mandragora: true + Paralyse: true + Pyrexia: true + Deathhurt: true + Leechesend: true + Venombleed: true + Toxin: true + Magicmushroom: true + - Status: Frigg_Song + Icon: EFST_FRIGG_SONG + DurationLookup: WM_FRIGG_SONG + CalcFlags: + MaxHp: true + - Status: Monster_Transform + Icon: EFST_MONSTER_TRANSFORM + Flags: + DisplayPc: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Angel_Protect + Icon: EFST_ANGEL_PROTECT + Flags: + NoClearance: true + NoBanishingBuster: true + NoDispell: true + - Status: Illusiondoping + Icon: EFST_ILLUSIONDOPING + DurationLookup: GN_ILLUSIONDOPING + CalcFlags: + Hit: true + Flags: + BlEffect: true + DisplayPc: true + - Status: Flashcombo + Icon: EFST_FLASHCOMBO + DurationLookup: SR_FLASHCOMBO + CalcFlags: + Watk: true + - Status: Moonstar + Icon: EFST_MOONSTAR + Flags: + NoSave: true + BlEffect: true + DisplayPc: true + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Super_Star + Icon: EFST_SUPER_STAR + Flags: + NoSave: true + BlEffect: true + DisplayPc: true + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Heat_Barrel + Icon: EFST_HEAT_BARREL + DurationLookup: RL_HEAT_BARREL + CalcFlags: + Hit: true + Aspd: true + Flags: + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + Fail: + P_Alter: true + Madnesscancel: true + - Status: P_Alter + Icon: EFST_P_ALTER + DurationLookup: RL_P_ALTER + Flags: + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + Fail: + Heat_Barrel: true + Madnesscancel: true + - Status: E_Chain + Icon: EFST_E_CHAIN + DurationLookup: RL_E_CHAIN + Flags: + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: C_Marker + Icon: EFST_C_MARKER + DurationLookup: RL_C_MARKER + CalcFlags: + Flee: true + Flags: + BlEffect: true + DisplayPc: true + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Anti_M_Blast + Icon: EFST_ANTI_M_BLAST + DurationLookup: RL_AM_BLAST + Flags: + BlEffect: true + DisplayPc: true + Debuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: B_Trap + Icon: EFST_B_TRAP + DurationLookup: RL_B_TRAP + CalcFlags: + Speed: true + Flags: + Debuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: H_Mine + Icon: EFST_H_MINE + DurationLookup: RL_H_MINE + Flags: + Debuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Qd_Shot_Ready + Icon: EFST_E_QD_SHOT_READY + Flags: + NoSave: true + - Status: Mtf_Aspd + Icon: EFST_MTF_ASPD + CalcFlags: + Aspd: true + Hit: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Mtf_Rangeatk + Icon: EFST_MTF_RANGEATK + CalcFlags: + Batk: true + Watk: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Mtf_Matk + Icon: EFST_MTF_MATK + CalcFlags: + Matk: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Mtf_Mleatked + Icon: EFST_MTF_MLEATKED + CalcFlags: + All: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Mtf_Cridamage + Icon: EFST_MTF_CRIDAMAGE + CalcFlags: + All: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Oktoberfest + States: + NoAttack: true + Options: + Oktoberfest: true + Flags: + SendLook: true + StopAttacking: true + NoRemoveOnDead: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Strangelights + Icon: EFST_STRANGELIGHTS + Flags: + NoSave: true + DisplayPc: true + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + BlEffect: true + - Status: Decoration_Of_Music + Icon: EFST_DECORATION_OF_MUSIC + Flags: + NoSave: true + DisplayPc: true + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + BlEffect: true + - Status: Quest_Buff1 + Icon: EFST_QUEST_BUFF1 + CalcFlags: + Batk: true + Matk: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Quest_Buff2 + Icon: EFST_QUEST_BUFF2 + CalcFlags: + Batk: true + Matk: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Quest_Buff3 + Icon: EFST_QUEST_BUFF3 + CalcFlags: + Batk: true + Matk: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: All_Riding + Icon: EFST_ALL_RIDING + States: + NoAttack: true + CalcFlags: + Speed: true + Flags: + BlEffect: true + DisplayPc: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + All_Riding: true + EndReturn: true + - Status: Teargas_Sob + Flags: + BossResist: true + - Status: _Feintbomb + DurationLookup: SC_FEINTBOMB + States: + NoPickItem: true + Options: + Invisible: true + Flags: + SendLook: true + OnTouch: true + StopAttacking: true + - Status: _Chaos + Flags: + StopWalking: true + Fail: + _Chaos: true + - Status: Chasewalk2 + Icon: EFST_CHASEWALK2 + CalcFlags: + Str: true + Flags: + NoSave: true + NoClearance: true + RemoveOnChangeMap: true + NoBanishingBuster: true + NoDispell: true + - Status: Mtf_Aspd2 + Icon: EFST_MTF_ASPD2 + CalcFlags: + Aspd: true + Hit: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Mtf_Rangeatk2 + Icon: EFST_MTF_RANGEATK2 + CalcFlags: + Aspd: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Mtf_Matk2 + Icon: EFST_MTF_MATK2 + CalcFlags: + Matk: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: 2011rwc_Scroll + Icon: EFST_2011RWC_SCROLL + CalcFlags: + Str: true + Agi: true + Vit: true + Int: true + Dex: true + Luk: true + Batk: true + Matk: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Food_Str_Cash: true + Food_Agi_Cash: true + Food_Vit_Cash: true + Food_Int_Cash: true + Food_Dex_Cash: true + Food_Luk_Cash: true + - Status: Jp_Event04 + Icon: EFST_JP_EVENT04 + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Mtf_Mhp + Icon: EFST_MTF_MHP + CalcFlags: + MaxHp: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Mtf_Msp + Icon: EFST_MTF_MSP + CalcFlags: + MaxSp: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Mtf_Pumpkin + Icon: EFST_MTF_PUMPKIN + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Mtf_Hitflee + Icon: EFST_MTF_HITFLEE + CalcFlags: + Hit: true + Flee: true + Cri: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Vacuum_Extreme_Postdelay + DurationLookup: SO_VACUUM_EXTREME + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Crifood + Icon: EFST_FOOD_CRITICALSUCCESSVALUE + CalcFlags: + Cri: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Atthaste_Cash + Icon: EFST_ATTHASTE_CASH + CalcFlags: + Aspd: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapIgnoreLevel: true + - Status: Reuse_Limit_A + Icon: EFST_REUSE_LIMIT_A + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: Reuse_Limit_B + Icon: EFST_REUSE_LIMIT_B + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: Reuse_Limit_C + Icon: EFST_REUSE_LIMIT_C + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: Reuse_Limit_D + Icon: EFST_REUSE_LIMIT_D + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: Reuse_Limit_E + Icon: EFST_REUSE_LIMIT_E + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: Reuse_Limit_F + Icon: EFST_REUSE_LIMIT_F + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: Reuse_Limit_G + Icon: EFST_REUSE_LIMIT_G + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: Reuse_Limit_H + Icon: EFST_REUSE_LIMIT_H + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: Reuse_Limit_Mtf + Icon: EFST_REUSE_LIMIT_MTF + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: Reuse_Limit_Aspd_Potion + Icon: EFST_REUSE_LIMIT_ASPD_POTION + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: Reuse_Millenniumshield + Icon: EFST_REUSE_MILLENNIUMSHIELD + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: Reuse_Crushstrike + Icon: EFST_REUSE_CRUSHSTRIKE + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: Reuse_Stormblast + Icon: EFST_REUSE_STORMBLAST + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: All_Riding_Reuse_Limit + Icon: EFST_ALL_RIDING_REUSE_LIMIT + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: Reuse_Limit_Ecl + Icon: EFST_REUSE_LIMIT_ECL + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: Reuse_Limit_Recall + Icon: EFST_REUSE_LIMIT_RECALL + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: Promote_Health_Reserch + Icon: EFST_PROMOTE_HEALTH_RESERCH + CalcFlags: + MaxHp: true + - Status: Energy_Drink_Reserch + Icon: EFST_ENERGY_DRINK_RESERCH + CalcFlags: + MaxSp: true + - Status: Norecover_State + Icon: EFST_HANDICAPSTATE_NORECOVER + Flags: + OverlapFail: true + - Status: Suhide + Icon: EFST_SUHIDE + DurationLookup: SU_HIDE + States: + NoMove: true + NoPickItem: true + NoConsumeItem: true + Flags: + StopAttacking: true + RemoveOnDamaged: true + RemoveOnChangeMap: true + RemoveOnMapWarp: true + - Status: Su_Stoop + Icon: EFST_SU_STOOP + DurationLookup: SU_STOOP + - Status: Spritemable + Icon: EFST_SPRITEMABLE + Flags: + DisplayPc: true + NoRemoveOnDead: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + NoClearbuff: true + - Status: Catnippowder + Icon: EFST_CATNIPPOWDER + DurationLookup: SU_CN_POWDERING + CalcFlags: + Watk: true + Matk: true + Speed: true + Regen: true + Flags: + BossResist: true + - Status: Sv_Roottwist + Icon: EFST_SV_ROOTTWIST + DurationLookup: SU_SV_ROOTTWIST + States: + NoMove: true + Flags: + BlEffect: true + DisplayPc: true + BossResist: true + StopWalking: true + NoSave: true + - Status: Bitescar + Icon: EFST_BITESCAR + DurationLookup: SU_SCAROFTAROU + Flags: + BossResist: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + - Status: Arclousedash + Icon: EFST_ARCLOUSEDASH + DurationLookup: SU_ARCLOUSEDASH + CalcFlags: + Agi: true + Speed: true + - Status: Tunaparty + Icon: EFST_TUNAPARTY + DurationLookup: SU_TUNAPARTY + - Status: Shrimp + Icon: EFST_SHRIMP + DurationLookup: SU_BUNCHOFSHRIMP + CalcFlags: + Batk: true + Matk: true + - Status: Freshshrimp + Icon: EFST_FRESHSHRIMP + DurationLookup: SU_FRESHSHRIMP + Flags: + BossResist: true + - Status: Active_Monster_Transform + Icon: EFST_ACTIVE_MONSTER_TRANSFORM + Flags: + DisplayPc: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Ljosalfar + Icon: EFST_LJOSALFAR + Flags: + BlEffect: true + DisplayPc: true + NoRemoveOnDead: true + NoSave: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Mermaid_Longing + Icon: EFST_MERMAID_LONGING + Flags: + BlEffect: true + DisplayPc: true + NoRemoveOnDead: true + NoSave: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Hat_Effect + Icon: EFST_HAT_EFFECT + Flags: + BlEffect: true + DisplayPc: true + NoRemoveOnDead: true + NoSave: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Flowersmoke + Icon: EFST_FLOWERSMOKE + Flags: + BlEffect: true + DisplayPc: true + NoRemoveOnDead: true + NoSave: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Fstone + Icon: EFST_FSTONE + Flags: + BlEffect: true + DisplayPc: true + NoRemoveOnDead: true + NoSave: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Happiness_Star + Icon: EFST_HAPPINESS_STAR + Flags: + BlEffect: true + DisplayPc: true + NoRemoveOnDead: true + NoSave: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Maple_Falls + Icon: EFST_MAPLE_FALLS + Flags: + BlEffect: true + DisplayPc: true + NoRemoveOnDead: true + NoSave: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Time_Accessory + Icon: EFST_TIME_ACCESSORY + Flags: + BlEffect: true + DisplayPc: true + NoRemoveOnDead: true + NoSave: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Magical_Feather + Icon: EFST_MAGICAL_FEATHER + Flags: + BlEffect: true + DisplayPc: true + NoRemoveOnDead: true + NoSave: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Gvg_Giant + Icon: EFST_GVG_GIANT + - Status: Gvg_Golem + Icon: EFST_GVG_GOLEM + - Status: Gvg_Stun + Icon: EFST_GVG_STUN + End: + Gvg_Stun: true + - Status: Gvg_Stone + Icon: EFST_GVG_STONE + End: + Stone: true + - Status: Gvg_Freez + Icon: EFST_GVG_FREEZ + End: + Freeze: true + - Status: Gvg_Sleep + Icon: EFST_GVG_SLEEP + End: + Sleep: true + - Status: Gvg_Curse + Icon: EFST_GVG_CURSE + End: + Curse: true + - Status: Gvg_Silence + Icon: EFST_GVG_SILENCE + End: + Silence: true + - Status: Gvg_Blind + Icon: EFST_GVG_BLIND + End: + Blind: true + - Status: Clan_Info + Icon: EFST_CLAN_INFO + Flags: + DisplayPc: true + DisplayNpc: true + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Swordclan + Icon: EFST_SWORDCLAN + CalcFlags: + Str: true + Vit: true + MaxHp: true + MaxSp: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Arcwandclan + Icon: EFST_ARCWANDCLAN + CalcFlags: + Int: true + Dex: true + MaxHp: true + MaxSp: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Goldenmaceclan + Icon: EFST_GOLDENMACECLAN + CalcFlags: + Luk: true + Int: true + MaxHp: true + MaxSp: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Crossbowclan + Icon: EFST_CROSSBOWCLAN + CalcFlags: + Agi: true + Vit: true + MaxHp: true + MaxSp: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Jumpingclan + Icon: EFST_JUMPINGCLAN + CalcFlags: + Str: true + Agi: true + Vit: true + Int: true + Dex: true + Luk: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Tarotcard + Icon: EFST_TAROTCARD + DurationLookup: CG_TAROTCARD + - Status: Geffen_Magic1 + Icon: EFST_GEFFEN_MAGIC1 + CalcFlags: + All: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + - Status: Geffen_Magic2 + Icon: EFST_GEFFEN_MAGIC2 + CalcFlags: + All: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + - Status: Geffen_Magic3 + Icon: EFST_GEFFEN_MAGIC3 + CalcFlags: + All: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + - Status: Maxpain + Icon: EFST_MAXPAIN + DurationLookup: NPC_MAXPAIN + Flags: + BlEffect: true + - Status: Armor_Element_Earth + Icon: EFST_RESIST_PROPERTY_GROUND + CalcFlags: + All: true + Flags: + NoDispell: true + OverlapIgnoreLevel: true + - Status: Armor_Element_Fire + Icon: EFST_RESIST_PROPERTY_FIRE + CalcFlags: + All: true + Flags: + NoDispell: true + OverlapIgnoreLevel: true + - Status: Armor_Element_Wind + Icon: EFST_RESIST_PROPERTY_WIND + CalcFlags: + All: true + Flags: + NoDispell: true + OverlapIgnoreLevel: true + - Status: Dailysendmailcnt + Icon: EFST_DAILYSENDMAILCNT + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoClearance: true + NoBanishingBuster: true + - Status: Doram_Buf_01 + Icon: EFST_DORAM_BUF_01 + CalcFlags: + Regen: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoBanishingBuster: true + OverlapFail: true + NoDispell: true + NoClearance: true + - Status: Doram_Buf_02 + Icon: EFST_DORAM_BUF_02 + CalcFlags: + Regen: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoBanishingBuster: true + OverlapFail: true + NoDispell: true + NoClearance: true + - Status: Hiss + Icon: EFST_HISS + DurationLookup: SU_HISS + Flags: + NoRemoveOnDead: true + CalcFlags: + Flee2: true + - Status: Nyanggrass + Icon: EFST_NYANGGRASS + DurationLookup: SU_NYANGGRASS + Flags: + NoRemoveOnDead: true + CalcFlags: + Def: true + Mdef: true + - Status: Grooming + Icon: EFST_GROOMING + DurationLookup: SU_GROOMING + CalcFlags: + Flee: true + Flags: + NoRemoveOnDead: true + End: + Stun: true + Freeze: true + Stone: true + Sleep: true + Silence: true + Bleeding: true + Poison: true + Fear: true + Mandragora: true + Crystalize: true + Freezing: true + - Status: Shrimpblessing + Icon: EFST_PROTECTIONOFSHRIMP + DurationLookup: SU_SHRIMPARTY + CalcFlags: + Regen: true + Flags: + NoRemoveOnDead: true + - Status: Chattering + Icon: EFST_CHATTERING + DurationLookup: SU_CHATTERING + CalcFlags: + Watk: true + Matk: true + Flags: + NoRemoveOnDead: true + - Status: Doram_Walkspeed + CalcFlags: + Speed: true + - Status: Doram_Matk + CalcFlags: + Matk: true + - Status: Doram_Flee2 + CalcFlags: + Flee2: true + - Status: Doram_Svsp + - Status: Fallen_Angel + DurationLookup: RL_FALLEN_ANGEL + - Status: Cheerup + Icon: EFST_CHEERUP + DurationLookup: WE_CHEERUP + CalcFlags: + Str: true + Agi: true + Vit: true + Int: true + Dex: true + Luk: true + Flags: + NoRemoveOnDead: true + - Status: Dressup + Icon: EFST_DRESS_UP + States: + NoAttack: true + Options: + Summer2: true + Flags: + DisplayPc: true + SendLook: true + StopAttacking: true + NoRemoveOnDead: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Glastheim_Atk + Icon: EFST_GLASTHEIM_ATK + CalcFlags: + All: true + Flags: + NoSave: true + - Status: Glastheim_Def + Icon: EFST_GLASTHEIM_DEF + Flags: + NoSave: true + - Status: Glastheim_Heal + Icon: EFST_GLASTHEIM_HEAL + Flags: + NoSave: true + - Status: Glastheim_Hidden + Icon: EFST_GLASTHEIM_HIDDEN + Flags: + NoSave: true + - Status: Glastheim_State + Icon: EFST_GLASTHEIM_STATE + CalcFlags: + Str: true + Agi: true + Vit: true + Dex: true + Int: true + Luk: true + Flags: + NoSave: true + - Status: Glastheim_Itemdef + Icon: EFST_GLASTHEIM_ITEMDEF + CalcFlags: + Def: true + Mdef: true + Flags: + NoSave: true + - Status: Glastheim_Hpsp + Icon: EFST_GLASTHEIM_HPSP + CalcFlags: + MaxHp: true + MaxSp: true + Flags: + NoSave: true + - Status: Lhz_Dun_N1 + Icon: EFST_LHZ_DUN_N1 + Flags: + NoClearbuff: true + NoClearance: true + NoRemoveOnDead: true + NoBanishingBuster: true + NoDispell: true + - Status: Lhz_Dun_N2 + Icon: EFST_LHZ_DUN_N2 + Flags: + NoClearbuff: true + NoClearance: true + NoRemoveOnDead: true + NoBanishingBuster: true + NoDispell: true + - Status: Lhz_Dun_N3 + Icon: EFST_LHZ_DUN_N3 + Flags: + NoClearbuff: true + NoClearance: true + NoRemoveOnDead: true + NoBanishingBuster: true + NoDispell: true + - Status: Lhz_Dun_N4 + Icon: EFST_LHZ_DUN_N4 + Flags: + NoClearbuff: true + NoClearance: true + NoRemoveOnDead: true + NoBanishingBuster: true + NoDispell: true + - Status: Ancilla + Icon: EFST_ANCILLA + Flags: + NoRemoveOnDead: true + CalcFlags: + Regen: true + - Status: Earthshaker + - Status: Weaponblock_On + Icon: EFST_WEAPONBLOCK_ON + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + NoClearbuff: true + - Status: Spore_Explosion + Icon: EFST_SPORE_EXPLOSION + DurationLookup: GN_SPORE_EXPLOSION + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Basilica_Cell + States: + NoCast: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoClearbuff: true + RemoveOnChangeMap: true + - Status: Entry_Queue_Apply_Delay + Icon: EFST_ENTRY_QUEUE_APPLY_DELAY + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + NoClearbuff: true + - Status: Entry_Queue_Notify_Admission_Time_Out + Icon: EFST_ENTRY_QUEUE_NOTIFY_ADMISSION_TIME_OUT + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + NoClearbuff: true + - Status: Lightofmoon + Icon: EFST_LIGHTOFMOON + DurationLookup: SJ_LIGHTOFMOON + End: + Lunarstance: true + Universestance: true + - Status: Lightofsun + Icon: EFST_LIGHTOFSUN + DurationLookup: SJ_LIGHTOFSUN + End: + Lightofsun: true + Universestance: true + - Status: Lightofstar + Icon: EFST_LIGHTOFSTAR + DurationLookup: SJ_LIGHTOFSTAR + End: + Starstance: true + Universestance: true + - Status: Lunarstance + Icon: EFST_LUNARSTANCE + DurationLookup: SJ_LUNARSTANCE + CalcFlags: + MaxHp: true + End: + Sunstance: true + Starstance: true + Universestance: true + - Status: Universestance + Icon: EFST_UNIVERSESTANCE + DurationLookup: SJ_UNIVERSESTANCE + CalcFlags: + Str: true + Agi: true + Vit: true + Int: true + Dex: true + Luk: true + End: + Sunstance: true + Lunarstance: true + Starstance: true + - Status: Sunstance + Icon: EFST_SUNSTANCE + DurationLookup: SJ_SUNSTANCE + CalcFlags: + Batk: true + Watk: true + End: + Lunarstance: true + Starstance: true + Universestance: true + - Status: Flashkick + Icon: EFST_FLASHKICK + DurationLookup: SJ_FLASHKICK + Flags: + RemoveOnChangeMap: true + NoBanishingBuster: true + NoDispell: true + NoClearance: true + - Status: Newmoon + Icon: EFST_NEWMOON + DurationLookup: SJ_NEWMOONKICK + States: + NoPickItem: true + Options: + Cloak: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + StopAttacking: true + RemoveOnDamaged: true + RemoveOnChangeMap: true + Fail: + Bite: true + - Status: Starstance + Icon: EFST_STARSTANCE + DurationLookup: SJ_STARSTANCE + CalcFlags: + Aspd: true + End: + Sunstance: true + Lunarstance: true + Universestance: true + - Status: Dimension + Icon: EFST_DIMENSION + DurationLookup: SJ_BOOKOFDIMENSION + Flags: + NoClearance: true + - Status: Dimension1 + - Status: Dimension2 + - Status: Creatingstar + Icon: EFST_CREATINGSTAR + DurationLookup: SJ_BOOKOFCREATINGSTAR + CalcFlags: + Speed: true + Flags: + Debuff: true + Fail: + Speedup1: true + - Status: Fallingstar + Icon: EFST_FALLINGSTAR + DurationLookup: SJ_FALLINGSTAR + - Status: Novaexplosing + Icon: EFST_NOVAEXPLOSING + DurationLookup: SJ_NOVAEXPLOSING + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Gravitycontrol + Icon: EFST_GRAVITYCONTROL + DurationLookup: SJ_GRAVITYCONTROL + States: + NoMove: true + NoCast: true + Flags: + StopCasting: true + StopAttacking: true + StopWalking: true + - Status: Soulcollect + Icon: EFST_SOULCOLLECT + DurationLookup: SP_SOULCOLLECT + MinDuration: 1000 + - Status: Soulreaper + Icon: EFST_SOULREAPER + DurationLookup: SP_SOULREAPER + - Status: Soulunity + Icon: EFST_SOULUNITY + DurationLookup: SP_SOULUNITY + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Soulshadow + Icon: EFST_SOULSHADOW + DurationLookup: SP_SOULSHADOW + CalcFlags: + Aspd: true + Cri: true + Flags: + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Spirit: true + Soulgolem: true + Soulfalcon: true + Soulfairy: true + - Status: Soulfairy + Icon: EFST_SOULFAIRY + DurationLookup: SP_SOULFAIRY + CalcFlags: + Matk: true + Flags: + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Spirit: true + Soulgolem: true + Soulshadow: true + Soulfalcon: true + - Status: Soulfalcon + Icon: EFST_SOULFALCON + DurationLookup: SP_SOULFALCON + CalcFlags: + Watk: true + Hit: true + Flags: + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Spirit: true + Soulgolem: true + Soulshadow: true + Soulfairy: true + - Status: Soulgolem + Icon: EFST_SOULGOLEM + DurationLookup: SP_SOULGOLEM + CalcFlags: + Def: true + Mdef: true + Flags: + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Spirit: true + Soulshadow: true + Soulfalcon: true + Soulfairy: true + - Status: Souldivision + Icon: EFST_SOULDIVISION + DurationLookup: SP_SOULDIVISION + - Status: Soulenergy + Icon: EFST_SOULENERGY + - Status: Use_Skill_Sp_Spa + Icon: EFST_USE_SKILL_SP_SPA + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Use_Skill_Sp_Sha + Icon: EFST_USE_SKILL_SP_SHA + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Sp_Sha + Icon: EFST_SP_SHA + DurationLookup: SP_SHA + CalcFlags: + Speed: true + Flags: + BossResist: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Soulcurse + Icon: EFST_SOULCURSE + DurationLookup: SP_SOULCURSE + - Status: Hells_Plant + Icon: EFST_HELLS_PLANT_ARMOR + DurationLookup: GN_HELLS_PLANT + Flags: + NoSave: true + RemoveOnChangeMap: true + DisplayPc: true + BlEffect: true + - Status: Increase_Maxhp + Icon: EFST_ATKER_ASPD + CalcFlags: + MaxHp: true + Regen: true + - Status: Increase_Maxsp + Icon: EFST_ATKER_MOVESPEED + CalcFlags: + MaxHp: true + Regen: true + - Status: Ref_T_Potion + Icon: EFST_REF_T_POTION + - Status: Add_Atk_Damage + Icon: EFST_ADD_ATK_DAMAGE + - Status: Add_Matk_Damage + Icon: EFST_ADD_MATK_DAMAGE + - Status: Soundofdestruction + Icon: EFST_SOUND_OF_DESTRUCTION + DurationLookup: WM_SOUND_OF_DESTRUCTION + - Status: Luxanima + Icon: EFST_LUXANIMA + DurationLookup: RK_LUXANIMA + CalcFlags: + All: true + Flags: + NoBanishingBuster: true + NoDispell: true + NoClearance: true + NoClearbuff: true + - Status: Reuse_Limit_Luxanima + Flags: + NoBanishingBuster: true + NoDispell: true + NoClearance: true + OverlapFail: true + NoRemoveOnDead: true + NoClearbuff: true + - Status: Ensemblefatigue + Icon: EFST_ENSEMBLEFATIGUE + States: + NoCast: true + CalcFlags: + Speed: true + Aspd: true + - Status: Misty_Frost + Icon: EFST_MISTY_FROST + Flags: + DisplayPc: true + - Status: Magic_Poison + Icon: EFST_MAGIC_POISON + DurationLookup: WL_COMET + Flags: + DisplayPc: true + BlEffect: true + - Status: Ep16_2_Buff_Ss + Icon: EFST_EP16_2_BUFF_SS + CalcFlags: + Aspd: true + Flags: + NoBanishingBuster: true + NoDispell: true + NoClearance: true + NoClearbuff: true + - Status: Ep16_2_Buff_Sc + Icon: EFST_EP16_2_BUFF_SC + CalcFlags: + Cri: true + Flags: + NoBanishingBuster: true + NoDispell: true + NoClearance: true + NoClearbuff: true + - Status: Ep16_2_Buff_Ac + Icon: EFST_EP16_2_BUFF_AC + Flags: + NoBanishingBuster: true + NoDispell: true + NoClearance: true + NoClearbuff: true diff --git a/db/re/skill_db.yml b/db/re/skill_db.yml index f4012666d5..84fc374c19 100644 --- a/db/re/skill_db.yml +++ b/db/re/skill_db.yml @@ -135,6 +135,7 @@ # Interval Skill unit interval in milliseconds. (Default: 0) # Target Skill unit target type. (Default: All) # Flag: Skill unit flags. (Default: None) +# Status Status Change that is associated to the skill. (Optional) ########################################################################### Header: @@ -219,6 +220,7 @@ Body: Shotgun: true Grenade: true Huuma: true + Status: Stun - Id: 6 Name: SM_PROVOKE Description: Provoke @@ -252,6 +254,7 @@ Body: Amount: 12 - Level: 10 Amount: 13 + Status: Provoke - Id: 7 Name: SM_MAGNUM Description: Magnum Break @@ -333,6 +336,7 @@ Body: Cooldown: 10000 Requires: SpCost: 10 + Status: Endure - Id: 9 Name: MG_SRECOVERY Description: Increase SP Recovery @@ -354,6 +358,7 @@ Body: Duration1: 10000 Requires: SpCost: 10 + Status: Sight - Id: 11 Name: MG_NAPALMBEAT Description: Napalm Beat @@ -757,6 +762,7 @@ Body: Amount: 17 - Level: 10 Amount: 16 + Status: Freeze - Id: 16 Name: MG_STONECURSE Description: Stone Curse @@ -799,6 +805,7 @@ Body: ItemCost: - Item: Red_Gemstone Amount: 1 + Status: Stone - Id: 17 Name: MG_FIREBALL Description: Fire Ball @@ -1284,6 +1291,7 @@ Body: Duration1: 10000 Requires: SpCost: 10 + Status: Ruwach - Id: 25 Name: AL_PNEUMA Description: Pneuma @@ -1307,6 +1315,7 @@ Body: NoEnemy: true NoReiteration: true RangedSingleUnit: true + Status: Pneuma - Id: 26 Name: AL_TELEPORT Description: Teleport @@ -1474,6 +1483,7 @@ Body: Amount: 42 - Level: 10 Amount: 45 + Status: IncreaseAgi - Id: 30 Name: AL_DECAGI Description: Decrease AGI @@ -1534,6 +1544,7 @@ Body: Amount: 31 - Level: 10 Amount: 33 + Status: DecreaseAgi - Id: 31 Name: AL_HOLYWATER Description: Aqua Benedicta @@ -1569,6 +1580,7 @@ Body: FixedCastTime: 150 Requires: SpCost: 35 + Status: SignumCrucis - Id: 33 Name: AL_ANGELUS Description: Angelus @@ -1628,6 +1640,7 @@ Body: Amount: 47 - Level: 10 Amount: 50 + Status: Angelus - Id: 34 Name: AL_BLESSING Description: Blessing @@ -1683,6 +1696,7 @@ Body: Amount: 60 - Level: 10 Amount: 64 + Status: Blessing - Id: 35 Name: AL_CURE Description: Cure @@ -1847,6 +1861,7 @@ Body: Amount: 65 - Level: 10 Amount: 70 + Status: Concentrate - Id: 46 Name: AC_DOUBLE Description: Double Strafe @@ -1989,6 +2004,7 @@ Body: Time: 300000 Requires: SpCost: 10 + Status: Hiding - Id: 52 Name: TF_POISON Description: Envenom @@ -2006,6 +2022,7 @@ Body: Duration2: 20000 Requires: SpCost: 12 + Status: Poison - Id: 53 Name: TF_DETOXIFY Description: Detoxify @@ -2215,6 +2232,7 @@ Body: Amount: 50 Weapon: 2hSword: true + Status: TwoHandQuicken - Id: 61 Name: KN_AUTOCOUNTER Description: Counter Attack @@ -2262,6 +2280,7 @@ Body: Shotgun: true Grenade: true Huuma: true + Status: AutoCounter - Id: 62 Name: KN_BOWLINGBASH Description: Bowling Bash @@ -2371,6 +2390,7 @@ Body: Amount: 68 - Level: 5 Amount: 71 + Status: Impositio - Id: 67 Name: PR_SUFFRAGIUM Description: Suffragium @@ -2391,6 +2411,7 @@ Body: FixedCastTime: 500 Requires: SpCost: 8 + Status: Suffragium - Id: 68 Name: PR_ASPERSIO Description: Aspersio @@ -2437,6 +2458,7 @@ Body: ItemCost: - Item: Holy_Water Amount: 1 + Status: Aspersio - Id: 69 Name: PR_BENEDICTIO Description: B.S. Sacramenti @@ -2471,6 +2493,7 @@ Body: Time: 200000 Requires: SpCost: 20 + Status: Benedictio - Id: 70 Name: PR_SANCTUARY Description: Sanctuary @@ -2577,6 +2600,7 @@ Body: Amount: 10 - Level: 4 Amount: 12 + Status: SlowPoison - Id: 72 Name: PR_STRECOVERY Description: Status Recovery @@ -2593,6 +2617,7 @@ Body: Duration2: 20000 Requires: SpCost: 5 + Status: Blind - Id: 73 Name: PR_KYRIE Description: Kyrie Eleison @@ -2631,6 +2656,7 @@ Body: Amount: 30 - Level: 10 Amount: 35 + Status: Kyrie - Id: 74 Name: PR_MAGNIFICAT Description: Magnificat @@ -2660,6 +2686,7 @@ Body: FixedCastTime: 800 Requires: SpCost: 40 + Status: Magnificat - Id: 75 Name: PR_GLORIA Description: Gloria @@ -2687,6 +2714,7 @@ Body: Time: 30000 Requires: SpCost: 20 + Status: Gloria - Id: 76 Name: PR_LEXDIVINA Description: Lex Divina @@ -2742,6 +2770,7 @@ Body: Amount: 12 - Level: 10 Amount: 10 + Status: Silence - Id: 77 Name: PR_TURNUNDEAD Description: Turn Undead @@ -2780,6 +2809,7 @@ Body: Duration1: 600000 Requires: SpCost: 10 + Status: Aeterna - Id: 79 Name: PR_MAGNUS Description: Magnus Exorcismus @@ -3236,6 +3266,7 @@ Body: Target: Enemy Flag: PathCheck: true + Status: Stun - Id: 84 Name: WZ_JUPITEL Description: Jupitel Thunder @@ -3474,6 +3505,7 @@ Body: Flag: NoOverlap: true PathCheck: true + Status: Blind - Id: 86 Name: WZ_WATERBALL Description: Water Ball @@ -3691,6 +3723,7 @@ Body: Amount: 29 - Level: 10 Amount: 27 + Status: Freeze - Id: 89 Name: WZ_STORMGUST Description: Storm Gust @@ -3766,6 +3799,7 @@ Body: Flag: NoOverlap: true PathCheck: true + Status: Freeze - Id: 90 Name: WZ_EARTHSPIKE Description: Earth Spike @@ -3989,6 +4023,7 @@ Body: Flag: PathCheck: true RemovedByFireRain: true + Status: Quagmire - Id: 93 Name: WZ_ESTIMATION Description: Sense @@ -4132,6 +4167,7 @@ Body: 1hAxe: true 2hAxe: true Mace: true + Status: Stun - Id: 111 Name: BS_ADRENALINE Description: Adrenaline Rush @@ -4173,6 +4209,7 @@ Body: 1hAxe: true 2hAxe: true Mace: true + Status: Adrenaline - Id: 112 Name: BS_WEAPONPERFECT Description: Weapon Perfection @@ -4210,6 +4247,7 @@ Body: Amount: 12 - Level: 5 Amount: 10 + Status: WeaponPerfection - Id: 113 Name: BS_OVERTHRUST Description: Power-Thrust @@ -4271,6 +4309,7 @@ Body: Grenade: true Huuma: true 2hStaff: true + Status: Overthrust - Id: 114 Name: BS_MAXIMIZE Description: Maximize Power @@ -4296,6 +4335,7 @@ Body: Time: 5000 Requires: SpCost: 10 + Status: MaximizePower - Id: 115 Name: HT_SKIDTRAP Description: Skid Trap @@ -4401,6 +4441,7 @@ Body: NoFootSet: true RemovedByFireRain: true HiddenTrap: true + Status: Stun - Id: 117 Name: HT_ANKLESNARE Description: Ankle Snare @@ -4454,6 +4495,7 @@ Body: NoKnockback: true RemovedByFireRain: true HiddenTrap: true + Status: Ankle - Id: 118 Name: HT_SHOCKWAVE Description: Shockwave Trap @@ -4541,6 +4583,7 @@ Body: NoFootSet: true RemovedByFireRain: true HiddenTrap: true + Status: Sleep - Id: 120 Name: HT_FLASHER Description: Flasher @@ -4585,6 +4628,7 @@ Body: NoFootSet: true RemovedByFireRain: true HiddenTrap: true + Status: Blind - Id: 121 Name: HT_FREEZINGTRAP Description: Freezing Trap @@ -4645,6 +4689,7 @@ Body: NoFootSet: true RemovedByFireRain: true HiddenTrap: true + Status: Freeze - Id: 122 Name: HT_BLASTMINE Description: Blast Mine @@ -4952,6 +4997,7 @@ Body: Time: 9000 Requires: SpCost: 15 + Status: Cloaking - Id: 136 Name: AS_SONICBLOW Description: Sonic Blow @@ -4990,6 +5036,7 @@ Body: Amount: 34 Weapon: Katar: true + Status: Stun - Id: 137 Name: AS_GRIMTOOTH Description: Grimtooth @@ -5081,6 +5128,7 @@ Body: Time: 100000 Requires: SpCost: 20 + Status: EncPoison - Id: 139 Name: AS_POISONREACT Description: Poison React @@ -5132,6 +5180,7 @@ Body: Amount: 45 - Level: 10 Amount: 45 + Status: PoisonReact - Id: 140 Name: AS_VENOMDUST Description: Venom Dust @@ -5179,6 +5228,7 @@ Body: Target: Enemy Flag: RemovedByFireRain: true + Status: Poison - Id: 141 Name: AS_SPLASHER Description: Venom Splasher @@ -5266,6 +5316,7 @@ Body: Amount: 28 - Level: 10 Amount: 30 + Status: Splasher - Id: 142 Name: NV_FIRSTAID Description: First Aid @@ -5293,6 +5344,7 @@ Body: Duration1: 600000 Requires: SpCost: 5 + Status: TrickDead - Id: 144 Name: SM_MOVINGRECOVERY Description: Moving HP-Recovery @@ -5321,6 +5373,7 @@ Body: HitCount: 1 Requires: SpCost: 1 + Status: AutoBerserk - Id: 147 Name: AC_MAKINGARROW Description: Arrow Crafting @@ -5377,6 +5430,7 @@ Body: Duration2: 20000 Requires: SpCost: 9 + Status: Blind - Id: 150 Name: TF_BACKSLIDING Description: Back Slide @@ -5408,6 +5462,7 @@ Body: Requires: SpCost: 2 State: Recover_Weight_Rate + Status: Stun - Id: 152 Name: TF_THROWSTONE Description: Stone Fling @@ -5433,6 +5488,7 @@ Body: ItemCost: - Item: Stone Amount: 1 + Status: Stun - Id: 153 Name: MC_CARTREVOLUTION Description: Cart Revolution @@ -5490,6 +5546,7 @@ Body: FixedCastTime: 300 Requires: SpCost: 8 + Status: Loud - Id: 156 Name: AL_HOLYLIGHT Description: Holy Light @@ -5528,6 +5585,7 @@ Body: FixedCastTime: 5000 Requires: SpCost: 30 + Status: EnergyCoat - Id: 158 Name: NPC_PIERCINGATT Description: Piercing Attack @@ -5579,6 +5637,7 @@ Body: IsNpc: true HitCount: 1 Duration1: 1800000 + Status: ElementalChange - Id: 162 Name: NPC_CHANGEWATER Description: Water Attribute Change @@ -5592,6 +5651,7 @@ Body: HitCount: 1 Element: Water Duration1: 1800000 + Status: ElementalChange - Id: 163 Name: NPC_CHANGEGROUND Description: Earth Attribute Change @@ -5605,6 +5665,7 @@ Body: HitCount: 1 Element: Earth Duration1: 1800000 + Status: ElementalChange - Id: 164 Name: NPC_CHANGEFIRE Description: Fire Attribute Change @@ -5618,6 +5679,7 @@ Body: HitCount: 1 Element: Fire Duration1: 1800000 + Status: ElementalChange - Id: 165 Name: NPC_CHANGEWIND Description: Wind Attribute Change @@ -5631,6 +5693,7 @@ Body: HitCount: 1 Element: Wind Duration1: 1800000 + Status: ElementalChange - Id: 166 Name: NPC_CHANGEPOISON Description: Poison Attribute Change @@ -5644,6 +5707,7 @@ Body: HitCount: 1 Element: Poison Duration1: 1800000 + Status: ElementalChange - Id: 167 Name: NPC_CHANGEHOLY Description: Holy Attribute Change @@ -5657,6 +5721,7 @@ Body: HitCount: 1 Element: Holy Duration1: 1800000 + Status: ElementalChange - Id: 168 Name: NPC_CHANGEDARKNESS Description: Shadow Attribute Change @@ -5670,6 +5735,7 @@ Body: HitCount: 1 Element: Dark Duration1: 1800000 + Status: ElementalChange - Id: 169 Name: NPC_CHANGETELEKINESIS Description: Ghost Attribute Change @@ -5683,6 +5749,7 @@ Body: HitCount: 1 Element: Ghost Duration1: 1800000 + Status: ElementalChange - Id: 170 Name: NPC_CRITICALSLASH Description: Defense disregard attack @@ -5806,6 +5873,7 @@ Body: HitCount: 1 Element: Weapon Duration2: 20000 + Status: Poison - Id: 177 Name: NPC_BLINDATTACK Description: Blind Attack @@ -5819,6 +5887,7 @@ Body: HitCount: 1 Element: Weapon Duration2: 20000 + Status: Blind - Id: 178 Name: NPC_SILENCEATTACK Description: Silence Attack @@ -5832,6 +5901,7 @@ Body: HitCount: 1 Element: Weapon Duration2: 20000 + Status: Silence - Id: 179 Name: NPC_STUNATTACK Description: Stun Attack @@ -5845,6 +5915,7 @@ Body: HitCount: 1 Element: Weapon Duration2: 5000 + Status: Stun - Id: 180 Name: NPC_PETRIFYATTACK Description: Petrify Attack @@ -5858,6 +5929,7 @@ Body: HitCount: 1 Element: Weapon Duration2: 20000 + Status: Stone - Id: 181 Name: NPC_CURSEATTACK Description: Curse Attack @@ -5871,6 +5943,7 @@ Body: HitCount: 1 Element: Dark Duration2: 30000 + Status: Curse - Id: 182 Name: NPC_SLEEPATTACK Description: Sleep attack @@ -5884,6 +5957,7 @@ Body: HitCount: 1 Element: Weapon Duration2: 30000 + Status: Sleep - Id: 183 Name: NPC_RANDOMATTACK Description: Random Attack @@ -5957,6 +6031,7 @@ Body: Hit: Single HitCount: 1 Element: Poison + Status: Poison - Id: 189 Name: NPC_HOLYATTACK Description: Holy Attribute Attack @@ -6006,6 +6081,7 @@ Body: HitCount: 1 Element: Weapon Duration1: 15000 + Status: MagicalAttack - Id: 193 Name: NPC_METAMORPHOSIS Description: Metamorphosis @@ -6060,6 +6136,7 @@ Body: Flags: IsNpc: true HitCount: 1 + Status: ModeChange - Id: 198 Name: NPC_TRANSFORMATION Description: Transformation @@ -6129,6 +6206,7 @@ Body: Time: 140000 - Level: 10 Time: 150000 + Status: Keeping - Id: 202 Name: NPC_DARKBREATH Description: Dark Breath @@ -6155,6 +6233,7 @@ Body: Hit: Single HitCount: 1 Element: Dark + Status: Coma - Id: 204 Name: NPC_BARRIER Description: Barrier @@ -6187,6 +6266,7 @@ Body: Time: 140000 - Level: 10 Time: 150000 + Status: Barrier - Id: 205 Name: NPC_DEFENDER Description: Defender @@ -6219,6 +6299,7 @@ Body: Time: 140000 - Level: 10 Time: 150000 + Status: Armor - Id: 206 Name: NPC_LICK Description: Lick @@ -6234,6 +6315,7 @@ Body: HitCount: 1 Element: Weapon Duration2: 5000 + Status: Stun - Id: 207 Name: NPC_HALLUCINATION Description: Hallucination @@ -6247,6 +6329,7 @@ Body: Range: 9 HitCount: 1 Duration2: 30000 + Status: Hallucination - Id: 208 Name: NPC_REBIRTH Description: Rebirth @@ -6258,6 +6341,7 @@ Body: Flags: IsNpc: true HitCount: 1 + Status: Rebirth - Id: 209 Name: NPC_SUMMONMONSTER Description: Monster Summons @@ -6307,6 +6391,7 @@ Body: Cooldown: 500 Requires: SpCost: 16 + Status: Stun - Id: 213 Name: RG_TUNNELDRIVE Description: Stalk @@ -6332,6 +6417,7 @@ Body: SpCost: 15 Status: Hiding: true + Status: Raid - Id: 215 Name: RG_STRIPWEAPON Description: Divest Weapon @@ -6389,6 +6475,7 @@ Body: Amount: 23 - Level: 5 Amount: 25 + Status: StripWeapon - Id: 216 Name: RG_STRIPSHIELD Description: Divest Shield @@ -6446,6 +6533,7 @@ Body: Amount: 18 - Level: 5 Amount: 20 + Status: StripShield - Id: 217 Name: RG_STRIPARMOR Description: Divest Armor @@ -6503,6 +6591,7 @@ Body: Amount: 23 - Level: 5 Amount: 25 + Status: StripArmor - Id: 218 Name: RG_STRIPHELM Description: Divest Helm @@ -6560,6 +6649,7 @@ Body: Amount: 18 - Level: 5 Amount: 20 + Status: StripHelm - Id: 219 Name: RG_INTIMIDATE Description: Snatch @@ -6752,6 +6842,7 @@ Body: ItemCost: - Item: Acid_Bottle Amount: 1 + Status: Bleeding - Id: 231 Name: AM_POTIONPITCHER Description: Aid Potion @@ -6870,6 +6961,7 @@ Body: ItemCost: - Item: Coating_Bottle Amount: 1 + Status: Cp_Weapon - Id: 235 Name: AM_CP_SHIELD Description: Synthesized Shield @@ -6900,6 +6992,7 @@ Body: ItemCost: - Item: Coating_Bottle Amount: 1 + Status: Cp_Shield - Id: 236 Name: AM_CP_ARMOR Description: Synthetic Armor @@ -6930,6 +7023,7 @@ Body: ItemCost: - Item: Coating_Bottle Amount: 1 + Status: Cp_Armor - Id: 237 Name: AM_CP_HELM Description: Biochemical Helm @@ -6960,6 +7054,7 @@ Body: ItemCost: - Item: Coating_Bottle Amount: 1 + Status: Cp_Helm - Id: 238 Name: AM_BIOETHICS Description: Bioethics @@ -7055,6 +7150,7 @@ Body: - Level: 10 Amount: 30 State: Shield + Status: AutoGuard - Id: 250 Name: CR_SHIELDCHARGE Description: Smite @@ -7083,6 +7179,7 @@ Body: Requires: SpCost: 10 State: Shield + Status: Stun - Id: 251 Name: CR_SHIELDBOOMERANG Description: Shield Boomerang @@ -7144,6 +7241,7 @@ Body: - Level: 10 Amount: 80 State: Shield + Status: ReflectShield - Id: 253 Name: CR_HOLYCROSS Description: Holy Cross @@ -7183,6 +7281,7 @@ Body: Amount: 19 - Level: 10 Amount: 20 + Status: Blind - Id: 254 Name: CR_GRANDCROSS Description: Grand Cross @@ -7240,6 +7339,7 @@ Body: Target: Enemy Flag: PathCheck: true + Status: Blind - Id: 255 Name: CR_DEVOTION Description: Sacrifice @@ -7279,6 +7379,7 @@ Body: FixedCastTime: 1500 Requires: SpCost: 25 + Status: Devotion - Id: 256 Name: CR_PROVIDENCE Description: Resistant Souls @@ -7297,6 +7398,7 @@ Body: FixedCastTime: 1500 Requires: SpCost: 30 + Status: Providence - Id: 257 Name: CR_DEFENDER Description: Defending Aura @@ -7312,6 +7414,7 @@ Body: Requires: SpCost: 30 State: Shield + Status: Defender - Id: 258 Name: CR_SPEARQUICKEN Description: Spear Quicken @@ -7368,6 +7471,7 @@ Body: Weapon: 1hSpear: true 2hSpear: true + Status: SpearQuicken - Id: 259 Name: MO_IRONHAND Description: Iron Fists @@ -7553,6 +7657,7 @@ Body: Requires: SpCost: 200 SpiritSphereCost: 5 + Status: SteelBody - Id: 269 Name: MO_BLADESTOP Description: Root @@ -7602,6 +7707,7 @@ Body: Grenade: true Huuma: true SpiritSphereCost: 1 + Status: BladeStop_Wait - Id: 270 Name: MO_EXPLOSIONSPIRITS Description: Fury @@ -7615,6 +7721,7 @@ Body: Requires: SpCost: 15 SpiritSphereCost: 5 + Status: ExplosionSpirits - Id: 271 Name: MO_EXTREMITYFIST Description: Asura Strike @@ -7697,6 +7804,7 @@ Body: Status: Explosionspirits: true SpiritSphereCost: 5 + Status: ExtremityFist - Id: 272 Name: MO_CHAINCOMBO Description: Raging Quadruple Blow @@ -7846,6 +7954,7 @@ Body: Time: 1200 Requires: SpCost: 2 + Status: MagicRod - Id: 277 Name: SA_SPELLBREAKER Description: Spell Breaker @@ -7902,6 +8011,7 @@ Body: FixedCastTime: 3000 Requires: SpCost: 35 + Status: AutoSpell - Id: 280 Name: SA_FLAMELAUNCHER Description: Endow Blaze @@ -7936,6 +8046,7 @@ Body: ItemCost: - Item: Scarlet_Pts Amount: 1 + Status: FireWeapon - Id: 281 Name: SA_FROSTWEAPON Description: Endow Tsunami @@ -7970,6 +8081,7 @@ Body: ItemCost: - Item: Indigo_Pts Amount: 1 + Status: WaterWeapon - Id: 282 Name: SA_LIGHTNINGLOADER Description: Endow Tornado @@ -8004,6 +8116,7 @@ Body: ItemCost: - Item: Yellow_Wish_Pts Amount: 1 + Status: WindWeapon - Id: 283 Name: SA_SEISMICWEAPON Description: Endow Quake @@ -8038,6 +8151,7 @@ Body: ItemCost: - Item: Lime_Green_Pts Amount: 1 + Status: EarthWeapon - Id: 284 Name: SA_DRAGONOLOGY Description: Dragonology @@ -8093,6 +8207,7 @@ Body: Flag: PathCheck: true RemovedByFireRain: true + Status: Volcano - Id: 286 Name: SA_DELUGE Description: Deluge @@ -8143,6 +8258,7 @@ Body: Flag: PathCheck: true RemovedByFireRain: true + Status: Deluge - Id: 287 Name: SA_VIOLENTGALE Description: Whirlwind @@ -8193,6 +8309,7 @@ Body: Flag: PathCheck: true RemovedByFireRain: true + Status: ViolentGale - Id: 288 Name: SA_LANDPROTECTOR Description: Magnetic Earth @@ -8356,6 +8473,7 @@ Body: Duration1: 1200000 Requires: SpCost: 1 + Status: Orcish - Id: 295 Name: SA_DEATH Description: Grim Reaper @@ -8496,6 +8614,7 @@ Body: CastCancel: true Requires: SpCost: 1 + Status: Coma - Id: 304 Name: BD_ADAPTATION Description: Amp @@ -8512,6 +8631,7 @@ Body: Cooldown: 300000 Requires: SpCost: 10 + Status: Adaptation - Id: 305 Name: BD_ENCORE Description: Encore @@ -8528,6 +8648,7 @@ Body: Weapon: Musical: true Whip: true + Status: Dancing - Id: 306 Name: BD_LULLABY Description: Lullaby @@ -8582,6 +8703,7 @@ Body: Weapon: Musical: true Whip: true + Status: RichManKim - Id: 308 Name: BD_ETERNALCHAOS Description: Down Tempo @@ -8604,6 +8726,7 @@ Body: Weapon: Musical: true Whip: true + Status: EternalChaos - Id: 309 Name: BD_DRUMBATTLEFIELD Description: Battle Theme @@ -8636,6 +8759,7 @@ Body: Weapon: Musical: true Whip: true + Status: DrumBattle - Id: 310 Name: BD_RINGNIBELUNGEN Description: Harmonic Lick @@ -8668,6 +8792,7 @@ Body: Weapon: Musical: true Whip: true + Status: Nibelungen - Id: 311 Name: BD_ROKISWEIL Description: Classical Pluck @@ -8690,6 +8815,7 @@ Body: Weapon: Musical: true Whip: true + Status: RokisWeil - Id: 312 Name: BD_INTOABYSS Description: Power Chord @@ -8712,6 +8838,7 @@ Body: Weapon: Musical: true Whip: true + Status: IntoAbyss - Id: 313 Name: BD_SIEGFRIED Description: Acoustic Rhythm @@ -8744,6 +8871,7 @@ Body: Weapon: Musical: true Whip: true + Status: Siegfried - Id: 315 Name: BA_MUSICALLESSON Description: Music Lessons @@ -8830,6 +8958,7 @@ Body: Amount: 18 - Level: 5 Amount: 20 + Status: Freeze - Id: 319 Name: BA_WHISTLE Description: Perfect Tablature @@ -8872,6 +9001,7 @@ Body: Weapon: Musical: true Whip: true + Status: Whistle - Id: 320 Name: BA_ASSASSINCROSS Description: Impressive Riff @@ -8914,6 +9044,7 @@ Body: Weapon: Musical: true Whip: true + Status: AssnCros - Id: 321 Name: BA_POEMBRAGI Description: Magic Strings @@ -8956,6 +9087,7 @@ Body: Weapon: Musical: true Whip: true + Status: PoemBragi - Id: 322 Name: BA_APPLEIDUN Description: Song of Lutie @@ -8998,6 +9130,7 @@ Body: Weapon: Musical: true Whip: true + Status: AppleIdun - Id: 323 Name: DC_DANCINGLESSON Description: Dance Lessons @@ -9082,6 +9215,7 @@ Body: Amount: 18 - Level: 5 Amount: 20 + Status: Stun - Id: 327 Name: DC_HUMMING Description: Focus Ballet @@ -9124,6 +9258,7 @@ Body: Weapon: Musical: true Whip: true + Status: Humming - Id: 328 Name: DC_DONTFORGETME Description: Slow Grace @@ -9166,6 +9301,7 @@ Body: Weapon: Musical: true Whip: true + Status: DontForgetMe - Id: 329 Name: DC_FORTUNEKISS Description: Lady Luck @@ -9208,6 +9344,7 @@ Body: Weapon: Musical: true Whip: true + Status: Fortune - Id: 330 Name: DC_SERVICEFORYOU Description: Gypsy's Kiss @@ -9250,6 +9387,7 @@ Body: Weapon: Musical: true Whip: true + Status: Service4U - Id: 331 Name: NPC_RANDOMMOVE Description: Random Move @@ -9371,6 +9509,7 @@ Body: HitCount: -2 Element: Dark Duration2: 20000 + Status: Blind - Id: 339 Name: NPC_GRANDDARKNESS Description: Grand cross of Darkness @@ -9394,6 +9533,7 @@ Body: Layout: -1 Interval: 300 Target: Enemy + Status: Blind - Id: 340 Name: NPC_DARKSTRIKE Description: Soul Strike of Darkness @@ -9505,6 +9645,7 @@ Body: Hit: Single HitCount: 1 Element: Weapon + Status: BrokenWeapon - Id: 344 Name: NPC_ARMORBRAKE Description: Break armor @@ -9517,6 +9658,7 @@ Body: Hit: Single HitCount: 1 Element: Weapon + Status: BrokenArmor - Id: 345 Name: NPC_HELMBRAKE Description: Break helm @@ -9567,6 +9709,7 @@ Body: HitCount: 1 Element: Undead Duration1: 30000 + Status: ChangeUndead - Id: 349 Name: NPC_POWERUP Description: Power Up @@ -9589,6 +9732,7 @@ Body: Time: 25000 - Level: 5 Time: 30000 + Status: IncHitRate - Id: 350 Name: NPC_AGIUP Description: Agility UP @@ -9610,6 +9754,7 @@ Body: Time: 25000 - Level: 5 Time: 30000 + Status: IncFleeRate - Id: 351 Name: NPC_SIEGEMODE Description: Siege Mode @@ -9649,6 +9794,7 @@ Body: IsNpc: true Range: 2 Hit: Single + Status: Cloaking - Id: 355 Name: LK_AURABLADE Description: Aura Blade @@ -9705,6 +9851,7 @@ Body: Shotgun: true Grenade: true Huuma: true + Status: AuraBlade - Id: 356 Name: LK_PARRYING Description: Parrying @@ -9740,6 +9887,7 @@ Body: SpCost: 50 Weapon: 2hSword: true + Status: Parrying - Id: 357 Name: LK_CONCENTRATION Description: Concentration @@ -9773,6 +9921,7 @@ Body: Amount: 26 - Level: 5 Amount: 30 + Status: Concentration - Id: 358 Name: LK_TENSIONRELAX Description: Relax @@ -9786,6 +9935,7 @@ Body: Duration1: 180000 Requires: SpCost: 15 + Status: TensionRelax - Id: 359 Name: LK_BERSERK Description: Frenzy @@ -9800,6 +9950,7 @@ Body: Duration2: 15000 Requires: SpCost: 200 + Status: Berserk - Id: 360 Name: LK_FURY Description: Fury @@ -9880,6 +10031,7 @@ Body: Amount: 50 - Level: 5 Amount: 60 + Status: Assumptio - Id: 362 Name: HP_BASILICA Description: Basilica @@ -9938,6 +10090,7 @@ Body: Amount: 70 - Level: 5 Amount: 80 + Status: Basilica - Id: 363 Name: HP_MEDITATIO Description: Meditatio @@ -10001,6 +10154,7 @@ Body: Amount: 75 - Level: 10 Amount: 80 + Status: MagicPower - Id: 367 Name: PA_PRESSURE Description: Gloria Domini @@ -10066,6 +10220,7 @@ Body: CastCancel: true Requires: SpCost: 100 + Status: Sacrifice - Id: 369 Name: PA_GOSPEL Description: Battle Chant @@ -10108,6 +10263,7 @@ Body: Interval: 10000 Flag: NoOverlap: true + Status: Gospel - Id: 370 Name: CH_PALMSTRIKE Description: Raging Palm Strike @@ -10175,6 +10331,7 @@ Body: - Level: 5 Amount: 12 SpiritSphereCost: 1 + Status: Stop - Id: 372 Name: CH_CHAINCRUSH Description: Chain Crush Combo @@ -10367,6 +10524,7 @@ Body: ItemCost: - Item: Poison_Bottle Amount: 1 + Status: Edp - Id: 379 Name: ASC_BREAKER Description: Soul Destroyer @@ -10419,6 +10577,7 @@ Body: Amount: 40 - Level: 10 Amount: 40 + Status: TrueSight - Id: 381 Name: SN_FALCONASSAULT Description: Falcon Assault @@ -10584,6 +10743,7 @@ Body: Amount: 94 - Level: 10 Amount: 100 + Status: WindWalk - Id: 384 Name: WS_MELTDOWN Description: Shattering Strike @@ -10661,6 +10821,7 @@ Body: Amount: 90 - Level: 10 Amount: 90 + Status: Meltdown - Id: 385 Name: WS_CREATECOIN Description: Create Coins @@ -10711,6 +10872,7 @@ Body: Requires: SpCost: 20 State: Cart + Status: CartBoost - Id: 388 Name: WS_SYSTEMCREATE Description: Auto Attack System @@ -10743,6 +10905,7 @@ Body: FixedCastTime: 500 Requires: SpCost: 10 + Status: ChaseWalk - Id: 390 Name: ST_REJECTSWORD Description: Counter Instinct @@ -10766,6 +10929,7 @@ Body: Amount: 25 - Level: 5 Amount: 30 + Status: RejectSword - Id: 392 Name: CR_ALCHEMY Description: Alchemy @@ -10934,6 +11098,7 @@ Body: Duration1: 1000 Requires: SpCost: 100 + Status: Marionette - Id: 397 Name: LK_SPIRALPIERCE Description: Spiral Pierce @@ -10997,6 +11162,7 @@ Body: 2hSword: true 1hSpear: true 2hSpear: true + Status: Stop - Id: 398 Name: LK_HEADCRUSH Description: Traumatic Blow @@ -11011,6 +11177,7 @@ Body: Duration2: 120000 Requires: SpCost: 23 + Status: Bleeding - Id: 399 Name: LK_JOINTBEAT Description: Vital Strike @@ -11058,6 +11225,7 @@ Body: Weapon: 1hSpear: true 2hSpear: true + Status: JointBeat - Id: 400 Name: HW_NAPALMVULCAN Description: Napalm Vulcan @@ -11149,6 +11317,7 @@ Body: Amount: 21 - Level: 5 Amount: 24 + Status: MindBreaker - Id: 403 Name: PF_MEMORIZE Description: Foresight @@ -11165,6 +11334,7 @@ Body: IgnoreStatus: true Requires: SpCost: 1 + Status: Memorize - Id: 404 Name: PF_FOGWALL Description: Blinding Mist @@ -11192,6 +11362,7 @@ Body: Interval: -1 Flag: RemovedByFireRain: true + Status: FogWall - Id: 405 Name: PF_SPIDERWEB Description: Fiber Lock @@ -11217,6 +11388,7 @@ Body: Target: Enemy Flag: RemovedByFireRain: true + Status: SpiderWeb - Id: 406 Name: ASC_METEORASSAULT Description: Meteor Assault @@ -11296,6 +11468,7 @@ Body: Requires: SpCost: 1 SpRateCost: -10 + Status: ProtectExp - Id: 409 Name: WE_CALLPARENT Description: Call Parent @@ -11416,6 +11589,7 @@ Body: - Level: 10 Amount: 10 State: Move_Enable + Status: Run - Id: 412 Name: TK_READYSTORM Description: Tornado Stance @@ -11472,6 +11646,7 @@ Body: HitCount: 1 Requires: SpCost: 1 + Status: ReadyDown - Id: 415 Name: TK_DOWNKICK Description: Heel Drop @@ -11501,6 +11676,7 @@ Body: Amount: 4 - Level: 7 Amount: 2 + Status: Stun - Id: 416 Name: TK_READYTURN Description: Roundhouse Stance @@ -11513,6 +11689,7 @@ Body: HitCount: 1 Requires: SpCost: 1 + Status: ReadyTurn - Id: 417 Name: TK_TURNKICK Description: Roundhouse Kick @@ -11558,6 +11735,7 @@ Body: HitCount: 1 Requires: SpCost: 1 + Status: ReadyCounter - Id: 419 Name: TK_COUNTER Description: Counter Kick @@ -11600,6 +11778,7 @@ Body: HitCount: 1 Requires: SpCost: 1 + Status: Dodge - Id: 421 Name: TK_JUMPKICK Description: Flying Kick @@ -11643,6 +11822,7 @@ Body: MaxLevel: 10 SplashArea: 1 Duration1: 1800000 + Status: EarthScroll - Id: 424 Name: TK_POWER Description: Kihop @@ -11690,6 +11870,7 @@ Body: Amount: 50 - Level: 7 Amount: 50 + Status: SevenWind - Id: 426 Name: TK_HIGHJUMP Description: Taekwon Jump @@ -11770,6 +11951,7 @@ Body: Range: 1 Interval: 100 Target: Enemy + Status: Warm - Id: 429 Name: SG_MOON_WARM Description: Warmth of the Moon @@ -11802,6 +11984,7 @@ Body: Range: 1 Interval: 100 Target: Enemy + Status: Warm - Id: 430 Name: SG_STAR_WARM Description: Warmth of the Stars @@ -11834,6 +12017,7 @@ Body: Range: 1 Interval: 100 Target: Enemy + Status: Warm - Id: 431 Name: SG_SUN_COMFORT Description: Comfort of the Sun @@ -11863,6 +12047,7 @@ Body: Amount: 50 - Level: 4 Amount: 40 + Status: Sun_Comfort - Id: 432 Name: SG_MOON_COMFORT Description: Comfort of the Moon @@ -11892,6 +12077,7 @@ Body: Amount: 50 - Level: 4 Amount: 40 + Status: Moon_Comfort - Id: 433 Name: SG_STAR_COMFORT Description: Comfort of the Stars @@ -11921,6 +12107,7 @@ Body: Amount: 50 - Level: 4 Amount: 40 + Status: Star_Comfort - Id: 434 Name: SG_HATE Description: Hatred of the Sun Moon and Stars @@ -11969,11 +12156,13 @@ Body: Description: Friend of the Sun Moon and Stars MaxLevel: 3 Duration1: 10000 + Status: SkillRate_Up - Id: 443 Name: SG_KNOWLEDGE Description: Knowledge of the Sun Moon and Stars MaxLevel: 10 Duration1: 600000 + Status: Knowledge - Id: 444 Name: SG_FUSION Description: Union of the Sun Moon and Stars @@ -11987,28 +12176,7 @@ Body: Duration1: 600000 Requires: SpCost: 100 - - Id: 446 - Name: AM_BERSERKPITCHER - Description: Aid Berserk Potion - MaxLevel: 1 - TargetType: Support - DamageFlags: - NoDamage: true - Flags: - IsSpirit: true - PartyOnly: true - GuildOnly: true - Range: 9 - Hit: Single - HitCount: 1 - CastCancel: true - FixedCastTime: 1000 - Requires: - SpCost: 10 - SpRateCost: 8 - ItemCost: - - Item: Berserk_Potion - Amount: 2 + Status: Fusion - Id: 445 Name: SL_ALCHEMIST Description: Spirit of the Alchemist @@ -12047,6 +12215,29 @@ Body: Amount: 160 - Level: 5 Amount: 60 + Status: Spirit + - Id: 446 + Name: AM_BERSERKPITCHER + Description: Aid Berserk Potion + MaxLevel: 1 + TargetType: Support + DamageFlags: + NoDamage: true + Flags: + IsSpirit: true + PartyOnly: true + GuildOnly: true + Range: 9 + Hit: Single + HitCount: 1 + CastCancel: true + FixedCastTime: 1000 + Requires: + SpCost: 10 + SpRateCost: 8 + ItemCost: + - Item: Berserk_Potion + Amount: 2 - Id: 447 Name: SL_MONK Description: Spirit of the Monk @@ -12085,6 +12276,7 @@ Body: Amount: 160 - Level: 5 Amount: 60 + Status: Spirit - Id: 448 Name: SL_STAR Description: Spirit of the Star Gladiator @@ -12124,6 +12316,7 @@ Body: Amount: 160 - Level: 5 Amount: 60 + Status: Spirit - Id: 449 Name: SL_SAGE Description: Spirit of the Sage @@ -12162,6 +12355,7 @@ Body: Amount: 160 - Level: 5 Amount: 60 + Status: Spirit - Id: 450 Name: SL_CRUSADER Description: Spirit of the Crusader @@ -12200,6 +12394,7 @@ Body: Amount: 160 - Level: 5 Amount: 60 + Status: Spirit - Id: 451 Name: SL_SUPERNOVICE Description: Spirit of the Supernovice @@ -12238,6 +12433,7 @@ Body: Amount: 160 - Level: 5 Amount: 60 + Status: Spirit - Id: 452 Name: SL_KNIGHT Description: Spirit of the Knight @@ -12276,6 +12472,7 @@ Body: Amount: 160 - Level: 5 Amount: 60 + Status: Spirit - Id: 453 Name: SL_WIZARD Description: Spirit of the Wizard @@ -12314,6 +12511,7 @@ Body: Amount: 160 - Level: 5 Amount: 60 + Status: Spirit - Id: 454 Name: SL_PRIEST Description: Spirit of the Priest @@ -12352,6 +12550,7 @@ Body: Amount: 160 - Level: 5 Amount: 60 + Status: Spirit - Id: 455 Name: SL_BARDDANCER Description: Spirit of the Artist @@ -12390,6 +12589,7 @@ Body: Amount: 160 - Level: 5 Amount: 60 + Status: Spirit - Id: 456 Name: SL_ROGUE Description: Spirit of the Rogue @@ -12428,6 +12628,7 @@ Body: Amount: 160 - Level: 5 Amount: 60 + Status: Spirit - Id: 457 Name: SL_ASSASIN Description: Spirit of the Assasin @@ -12466,6 +12667,7 @@ Body: Amount: 160 - Level: 5 Amount: 60 + Status: Spirit - Id: 458 Name: SL_BLACKSMITH Description: Spirit of the Blacksmith @@ -12504,6 +12706,7 @@ Body: Amount: 160 - Level: 5 Amount: 60 + Status: Spirit - Id: 459 Name: BS_ADRENALINE2 Description: Advanced Adrenaline Rush @@ -12539,6 +12742,7 @@ Body: Whip: true Book: true Katar: true + Status: Adrenaline2 - Id: 460 Name: SL_HUNTER Description: Spirit of the Hunter @@ -12577,6 +12781,7 @@ Body: Amount: 160 - Level: 5 Amount: 60 + Status: Spirit - Id: 461 Name: SL_SOULLINKER Description: Spirit of the Soul Linker @@ -12615,6 +12820,7 @@ Body: Amount: 160 - Level: 5 Amount: 60 + Status: Spirit - Id: 462 Name: SL_KAIZEL Description: Kaizel @@ -12669,6 +12875,7 @@ Body: Amount: 70 - Level: 7 Amount: 60 + Status: Kaizel - Id: 463 Name: SL_KAAHI Description: Kaahi @@ -12684,6 +12891,7 @@ Body: Duration1: 350000 Requires: SpCost: 30 + Status: Kaahi - Id: 464 Name: SL_KAUPE Description: Kaupe @@ -12707,6 +12915,7 @@ Body: Amount: 30 - Level: 3 Amount: 40 + Status: Kaupe - Id: 465 Name: SL_KAITE Description: Kaite @@ -12766,6 +12975,7 @@ Body: Time: 600 Requires: SpCost: 70 + Status: Kaite - Id: 466 Name: SL_KAINA Description: Kaina @@ -12832,6 +13042,7 @@ Body: Amount: 28 - Level: 7 Amount: 30 + Status: Stun - Id: 469 Name: SL_SMA Description: Esma @@ -12889,6 +13100,7 @@ Body: Amount: 72 - Level: 10 Amount: 80 + Status: Sma - Id: 470 Name: SL_SWOO Description: Eswoo @@ -12934,6 +13146,7 @@ Body: Amount: 25 - Level: 7 Amount: 15 + Status: Swoo - Id: 471 Name: SL_SKE Description: Eske @@ -12976,6 +13189,7 @@ Body: Amount: 30 - Level: 3 Amount: 15 + Status: Ske - Id: 472 Name: SL_SKA Description: Eska @@ -13017,6 +13231,7 @@ Body: Amount: 80 - Level: 3 Amount: 60 + Status: Ska - Id: 473 Name: SM_SELFPROVOKE Description: Provoke Self @@ -13027,6 +13242,7 @@ Body: Hit: Single HitCount: 1 Duration1: 30000 + Status: Provoke - Id: 474 Name: NPC_EMOTION_ON Description: Emotion ON @@ -13037,6 +13253,7 @@ Body: Flags: IsNpc: true HitCount: 1 + Status: ModeChange - Id: 475 Name: ST_PRESERVE Description: Preserve @@ -13050,6 +13267,7 @@ Body: FixedCastTime: 1000 Requires: SpCost: 30 + Status: Preserve - Id: 476 Name: ST_FULLSTRIP Description: Divest All @@ -13235,6 +13453,7 @@ Body: Amount: 55 - Level: 5 Amount: 60 + Status: DoubleCast - Id: 483 Name: HW_GANBANTEIN Description: Ganbantein @@ -13314,6 +13533,7 @@ Body: Flag: PathCheck: true RemovedByFireRain: true + Status: Gravitation - Id: 485 Name: WS_CARTTERMINATION Description: Cart Termination @@ -13375,6 +13595,7 @@ Body: Huuma: true Status: Cartboost: true + Status: Stun - Id: 486 Name: WS_OVERTHRUSTMAX Description: Maximum Power Thrust @@ -13424,6 +13645,7 @@ Body: Shotgun: true Grenade: true Huuma: true + Status: MaxOverThrust - Id: 488 Name: CG_HERMODE Description: Wand of Hermode @@ -13475,6 +13697,7 @@ Body: Weapon: Musical: true Whip: true + Status: Hermode - Id: 489 Name: CG_TAROTCARD Description: Tarot Card of Fate @@ -13587,6 +13810,7 @@ Body: Duration1: 180000 Requires: SpCost: 1 + Status: EnchantArms - Id: 493 Name: TK_MISSION Description: Taekwon Mission @@ -13635,6 +13859,7 @@ Body: Amount: 160 - Level: 5 Amount: 60 + Status: Spirit - Id: 495 Name: KN_ONEHAND Description: Onehand Quicken @@ -13652,6 +13877,7 @@ Body: SpCost: 100 Weapon: 1hSword: true + Status: OneHand - Id: 496 Name: AM_TWILIGHT1 Description: Twilight Alchemy 1 @@ -13760,6 +13986,7 @@ Body: Requires: SpCost: 10 SpiritSphereCost: 5 + Status: Fling - Id: 502 Name: GS_TRIPLEACTION Description: Triple Action @@ -13834,9 +14061,10 @@ Body: Requires: SpCost: 30 SpiritSphereCost: 1 + Status: MadnessCancel - Id: 505 Name: GS_ADJUSTMENT - Description: AdJustment + Description: Adjustment MaxLevel: 1 Type: Weapon TargetType: Self @@ -13851,6 +14079,7 @@ Body: Requires: SpCost: 15 SpiritSphereCost: 2 + Status: Adjustment - Id: 506 Name: GS_INCREASING Description: Increasing Accuracy @@ -13866,6 +14095,7 @@ Body: Requires: SpCost: 30 SpiritSphereCost: 4 + Status: Increasing - Id: 507 Name: GS_MAGICALBULLET Description: Magical Bullet @@ -13909,6 +14139,7 @@ Body: Throwweapon: true AmmoAmount: 1 SpiritSphereCost: 1 + Status: Stun - Id: 509 Name: GS_SINGLEACTION Description: Single Action @@ -14024,6 +14255,7 @@ Body: Ammo: Bullet: true AmmoAmount: 1 + Status: StripWeapon - Id: 514 Name: GS_PIERCINGSHOT Description: Piercing Shot @@ -14060,6 +14292,7 @@ Body: Ammo: Bullet: true AmmoAmount: 1 + Status: Bleeding - Id: 515 Name: GS_RAPIDSHOWER Description: Rapid Shower @@ -14207,6 +14440,7 @@ Body: Amount: 48 Weapon: Gatling: true + Status: GatlingFever - Id: 518 Name: GS_DUST Description: Dust @@ -14620,6 +14854,7 @@ Body: Flag: NoOverlap: true PathCheck: true + Status: Tatamigaeshi - Id: 528 Name: NJ_KASUMIKIRI Description: Vanishing Slash @@ -14770,6 +15005,7 @@ Body: Amount: 21 - Level: 5 Amount: 24 + Status: Utsusemi - Id: 532 Name: NJ_BUNSINJYUTSU Description: Mirror Image @@ -14870,6 +15106,7 @@ Body: ItemCost: - Item: Shadow_Orb Amount: 1 + Status: Bunsinjyutsu - Id: 533 Name: NJ_NINPOU Description: Spirit of the Blade @@ -15297,6 +15534,7 @@ Body: Flag: PathCheck: true RemovedByFireRain: true + Status: Suiton - Id: 539 Name: NJ_HYOUSYOURAKU Description: Ice Meteor @@ -15359,6 +15597,7 @@ Body: Target: Enemy Flag: PathCheck: true + Status: Freeze - Id: 540 Name: NJ_HUUJIN Description: Wind Blade @@ -15620,6 +15859,7 @@ Body: - Level: 5 Amount: 60 HpRateCost: -5 + Status: Nen - Id: 544 Name: NJ_ISSEN Description: Final Strike @@ -15813,6 +16053,7 @@ Body: SplashArea: 3 ActiveInstance: 14 Duration2: 30000 + Status: Freeze - Id: 656 Name: NPC_THUNDERBREATH Description: Thunder Breath @@ -15842,6 +16083,7 @@ Body: SplashArea: 3 ActiveInstance: 14 Duration2: 20000 + Status: Poison - Id: 658 Name: NPC_DARKNESSBREATH Description: Darkness Breath @@ -15918,6 +16160,7 @@ Body: HitCount: 1 SplashArea: 7 Knockback: 7 + Status: Bleeding - Id: 662 Name: NPC_HELLJUDGEMENT Description: Hell's Judgement @@ -15934,6 +16177,7 @@ Body: HitCount: 1 SplashArea: 14 Duration2: 20000 + Status: Curse - Id: 663 Name: NPC_WIDESILENCE Description: Wide Silence @@ -15959,6 +16203,7 @@ Body: - Level: 5 Area: 14 Duration2: 20000 + Status: Silence - Id: 664 Name: NPC_WIDEFREEZE Description: Wide Freeze @@ -15984,6 +16229,7 @@ Body: - Level: 5 Area: 14 Duration2: 30000 + Status: Freeze - Id: 665 Name: NPC_WIDEBLEEDING Description: Wide Bleeding @@ -16009,6 +16255,7 @@ Body: - Level: 5 Area: 14 Duration2: 120000 + Status: Bleeding - Id: 666 Name: NPC_WIDESTONE Description: Wide Petrify @@ -16034,6 +16281,7 @@ Body: - Level: 5 Area: 14 Duration2: 20000 + Status: Stone - Id: 667 Name: NPC_WIDECONFUSE Description: Wide Confusion @@ -16059,6 +16307,7 @@ Body: - Level: 5 Area: 14 Duration2: 30000 + Status: Confusion - Id: 668 Name: NPC_WIDESLEEP Description: Wide Sleep @@ -16084,6 +16333,7 @@ Body: - Level: 5 Area: 14 Duration2: 30000 + Status: Sleep - Id: 669 Name: NPC_WIDESIGHT Description: Wide Sight @@ -16101,6 +16351,7 @@ Body: Element: Fire SplashArea: 5 Duration1: 10000 + Status: Sight - Id: 670 Name: NPC_EVILLAND Description: Evil Land @@ -16168,6 +16419,7 @@ Body: Interval: 1000 Flag: NoOverlap: true + Status: Blind - Id: 671 Name: NPC_MAGICMIRROR Description: Magic Mirror @@ -16201,6 +16453,7 @@ Body: Time: 2000 - Level: 10 Time: 2000 + Status: MagicMirror - Id: 672 Name: NPC_SLOWCAST Description: Slow Cast @@ -16226,6 +16479,7 @@ Body: - Level: 5 Area: 14 Duration2: 30000 + Status: SlowCast - Id: 673 Name: NPC_CRITICALWOUND Description: Critical Wounds @@ -16285,6 +16539,7 @@ Body: Time: 2000 - Level: 10 Time: 2000 + Status: ArmorChange - Id: 676 Name: NPC_ANTIMAGIC Description: Anti Magic @@ -16318,6 +16573,7 @@ Body: Time: 2000 - Level: 10 Time: 2000 + Status: ArmorChange - Id: 677 Name: NPC_WIDECURSE Description: Wide Curse @@ -16343,6 +16599,7 @@ Body: - Level: 5 Area: 14 Duration2: 20000 + Status: Curse - Id: 678 Name: NPC_WIDESTUN Description: Wide Stun @@ -16368,6 +16625,7 @@ Body: - Level: 5 Area: 14 Duration2: 5000 + Status: Stun - Id: 679 Name: NPC_VAMPIRE_GIFT Description: Vampire Gift @@ -16464,6 +16722,7 @@ Body: Range: -9 HitCount: 1 Duration2: 180000 + Status: HellPower - Id: 684 Name: NPC_WIDEHELLDIGNITY Description: Hell Dignity @@ -16478,6 +16737,7 @@ Body: HitCount: 1 SplashArea: -1 Duration2: 180000 + Status: HellPower - Id: 685 Name: NPC_INVINCIBLE Description: Invincible @@ -16489,6 +16749,7 @@ Body: IsNpc: true HitCount: 1 Duration1: -1 + Status: Invincible - Id: 686 Name: NPC_INVINCIBLEOFF Description: Invincible off @@ -16500,6 +16761,7 @@ Body: IsNpc: true HitCount: 1 Duration1: 60000 + Status: InvincibleOff - Id: 687 Name: NPC_ALLHEAL Description: Full Heal @@ -16561,6 +16823,7 @@ Body: Time: 220000 - Level: 10 Time: 240000 + Status: Blessing - Id: 690 Name: CASH_INCAGI Description: Party Increase AGI @@ -16597,6 +16860,7 @@ Body: Time: 220000 - Level: 10 Time: 240000 + Status: IncreaseAgi - Id: 691 Name: CASH_ASSUMPTIO Description: Party Assumptio @@ -16623,6 +16887,7 @@ Body: Time: 80000 - Level: 5 Time: 100000 + Status: Assumptio - Id: 692 Name: ALL_CATCRY Description: Cat Cry @@ -16646,6 +16911,7 @@ Body: SplashArea: -1 CastCancel: true Cooldown: 300000 + Status: PartyFlee - Id: 694 Name: ALL_ANGEL_PROTECT Description: Angel's Protection @@ -16724,6 +16990,7 @@ Body: Hit: Single HitCount: 1 Duration1: 900000 # skill duration (unknown value) + Status: MillenniumShield - Id: 708 Name: NPC_COMET Description: Comet 2 @@ -16748,6 +17015,7 @@ Body: Target: Enemy Flag: PathCheck: true + Status: Burning - Id: 709 Name: NPC_ICEMINE Description: Ice Mine @@ -16873,6 +17141,7 @@ Body: IsNpc: true Hit: Single Duration1: 10000 + Status: MaxPain - Id: 717 Name: NPC_MAXPAIN_ATK Description: Max Pain Attack @@ -16957,6 +17226,7 @@ Body: Time: 27500 - Level: 5 Time: 32500 + Status: Freeze - Id: 721 Name: NPC_WIDEWEB Description: Wide Web @@ -16973,6 +17243,7 @@ Body: HitCount: 1 SplashArea: 7 Duration2: 10000 + Status: WideWeb - Id: 722 Name: NPC_WIDESUCK Description: Wide Suck @@ -17013,6 +17284,7 @@ Body: Flag: NoOverlap: true PathCheck: true + Status: Freeze - Id: 724 Name: NPC_FIRESTORM Description: Fire Storm @@ -17037,6 +17309,7 @@ Body: SplashArea: 3 Knockback: 3 Duration1: 10000 + Status: Burnt - Id: 725 Name: NPC_REVERBERATION Description: Reverberation 2 @@ -17188,6 +17461,7 @@ Body: - Level: 5 Area: 5 Duration1: 7000 + Status: CursedCircle_Target - Id: 731 Name: NPC_DRAGONBREATH Description: NPC Dragon Breath @@ -17276,6 +17550,7 @@ Body: Flag: NoOverlap: true PathCheck: true + Status: Stun - Id: 734 Name: NPC_MAGMA_ERUPTION_DOTDAMAGE Description: NPC Magma Eruption Dot Damage @@ -17290,6 +17565,7 @@ Body: Range: 1 Hit: Single HitCount: 1 + #Status: Burning - Id: 735 Name: NPC_MANDRAGORA Description: NPC Howling of Mandragora @@ -17326,6 +17602,7 @@ Body: Time: 25000 - Level: 5 Time: 30000 + Status: Mandragora - Id: 736 Name: NPC_PSYCHIC_WAVE Description: Psychic Wave @@ -17479,6 +17756,7 @@ Body: Flag: PathCheck: true RemovedByFireRain: true + Status: Poison - Id: 740 Name: NPC_IGNITIONBREAK Description: Ignition Break @@ -17546,6 +17824,7 @@ Body: HitCount: 1 CastCancel: true Duration1: 20000 + Status: Npc_HallucinationWalk - Id: 744 Name: NPC_ELECTRICWALK Description: Electric Walk @@ -17578,6 +17857,7 @@ Body: Flag: NoReiteration: true NoOverlap: true + Status: PropertyWalk - Id: 745 Name: NPC_FIREWALK Description: Fire Walk @@ -17610,6 +17890,7 @@ Body: Flag: NoReiteration: true NoOverlap: true + Status: PropertyWalk - Id: 1001 Name: KN_CHARGEATK Description: Charge Attack @@ -17645,6 +17926,7 @@ Body: Requires: SpCost: 15 State: Shield + Status: Shrink - Id: 1003 Name: AS_SONICACCEL Description: Sonic Acceleration @@ -17713,6 +17995,7 @@ Body: Duration1: 10000 Requires: SpCost: 25 + Status: CloseConfine2 - Id: 1006 Name: WZ_SIGHTBLASTER Description: Sight Blaster @@ -17737,6 +18020,7 @@ Body: FixedCastTime: 320 Requires: SpCost: 40 + Status: SightBlaster - Id: 1007 Name: SA_CREATECON Description: Create Elemental Converter @@ -17772,6 +18056,7 @@ Body: ItemCost: - Item: Elemental_Water Amount: 1 + Status: ElementalChange - Id: 1009 Name: HT_PHANTASMIC Description: Phantasmic Arrow @@ -17830,6 +18115,7 @@ Body: FixedCastTime: 200 Requires: SpCost: 20 + Status: WinkCharm - Id: 1012 Name: BS_UNFAIRLYTRICK Description: Unfair Trick @@ -17921,6 +18207,7 @@ Body: Requires: HpCost: 10 SpCost: 20 + Status: Stun - Id: 1017 Name: SA_ELEMENTGROUND Description: Elemental Change Earth @@ -17944,6 +18231,7 @@ Body: ItemCost: - Item: Elemental_Earth Amount: 1 + Status: ElementalChange - Id: 1018 Name: SA_ELEMENTFIRE Description: Elemental Change Fire @@ -17967,6 +18255,7 @@ Body: ItemCost: - Item: Elemental_Fire Amount: 1 + Status: ElementalChange - Id: 1019 Name: SA_ELEMENTWIND Description: Elemental Change Wind @@ -17990,6 +18279,7 @@ Body: ItemCost: - Item: Elemental_Wind Amount: 1 + Status: ElementalChange - Id: 2001 Name: RK_ENCHANTBLADE Description: Enchant Blade @@ -18025,6 +18315,7 @@ Body: Amount: 66 - Level: 10 Amount: 70 + Status: EnchantBlade - Id: 2002 Name: RK_SONICWAVE Description: Sonic Wave @@ -18121,6 +18412,7 @@ Body: Amount: 95 - Level: 10 Amount: 100 + Status: DeathBound - Id: 2004 Name: RK_HUNDREDSPEAR Description: Hundred Spear @@ -18237,6 +18529,7 @@ Body: 2hSword: true 1hSpear: true 2hSpear: true + Status: Fear - Id: 2006 Name: RK_IGNITIONBREAK Description: Ignition Break @@ -18354,6 +18647,7 @@ Body: - Level: 10 Amount: 75 State: Ridingdragon + Status: Burning - Id: 2009 Name: RK_DRAGONHOWLING Description: Dragon Howling @@ -18380,6 +18674,7 @@ Body: Requires: SpCost: 30 State: Ridingdragon + Status: Fear - Id: 2010 Name: RK_RUNEMASTERY Description: Rune Mastery @@ -18398,6 +18693,7 @@ Body: Duration2: 60000 Requires: SpCost: 1 + Status: MillenniumShield - Id: 2012 Name: RK_CRUSHSTRIKE Description: Crush Strike @@ -18417,6 +18713,7 @@ Body: IgnoreItemBonus: true Requires: SpCost: 1 + Status: CrushStrike - Id: 2013 Name: RK_REFRESH Description: Refresh @@ -18436,6 +18733,7 @@ Body: IgnoreItemBonus: true Requires: SpCost: 1 + Status: Refresh - Id: 2014 Name: RK_GIANTGROWTH Description: Giant Growth @@ -18454,6 +18752,7 @@ Body: IgnoreItemBonus: true Requires: SpCost: 1 + Status: GiantGrowth - Id: 2015 Name: RK_STONEHARDSKIN Description: Stone Hard Skin @@ -18473,6 +18772,7 @@ Body: IgnoreItemBonus: true Requires: SpCost: 1 + Status: StoneHardSkin - Id: 2016 Name: RK_VITALITYACTIVATION Description: Vitality Activation @@ -18486,6 +18786,7 @@ Body: Duration1: 900000 Requires: SpCost: 1 + Status: VitalityActivation - Id: 2017 Name: RK_STORMBLAST Description: Storm Blast @@ -18518,6 +18819,7 @@ Body: Duration1: 900000 Requires: SpCost: 1 + Status: FightingSpirit - Id: 2019 Name: RK_ABUNDANCE Description: Abundance @@ -18533,6 +18835,7 @@ Body: Duration1: 900000 Requires: SpCost: 1 + Status: Abundance - Id: 2020 Name: RK_PHANTOMTHRUST Description: Phantom Thrust @@ -18607,6 +18910,7 @@ Body: Amount: 65 - Level: 5 Amount: 70 + Status: WhiteImprison - Id: 2202 Name: WL_SOULEXPANSION Description: Soul Expansion @@ -18717,6 +19021,7 @@ Body: Amount: 64 - Level: 5 Amount: 72 + Status: Freezing - Id: 2204 Name: WL_JACKFROST Description: Jack Frost @@ -18811,6 +19116,7 @@ Body: Amount: 46 - Level: 5 Amount: 48 + Status: MarshOfAbyss - Id: 2206 Name: WL_RECOGNIZEDSPELL Description: Recognized Spell @@ -18859,6 +19165,7 @@ Body: Amount: 160 - Level: 5 Amount: 180 + Status: RecognizedSpell - Id: 2207 Name: WL_SIENNAEXECRATE Description: Sienna Execrate @@ -18914,6 +19221,7 @@ Body: ItemCost: - Item: Red_Gemstone Amount: 2 + Status: Stone - Id: 2208 Name: WL_RADIUS Description: Radius @@ -18978,6 +19286,7 @@ Body: Amount: 80 - Level: 5 Amount: 90 + Status: Stasis - Id: 2210 Name: WL_DRAINLIFE Description: Drain Life @@ -19045,6 +19354,7 @@ Body: Amount: 90 - Level: 5 Amount: 100 + Status: Stun - Id: 2212 Name: WL_HELLINFERNO Description: Hell Inferno @@ -19091,6 +19401,7 @@ Body: Amount: 82 - Level: 5 Amount: 88 + Status: Burning - Id: 2213 Name: WL_COMET Description: Comet @@ -19145,6 +19456,7 @@ Body: Target: Enemy Flag: PathCheck: true + Status: Burning - Id: 2214 Name: WL_CHAINLIGHTNING Description: Chain Lightning @@ -19709,6 +20021,7 @@ Body: Amount: 24 - Level: 5 Amount: 28 + Status: VenomImpress - Id: 2022 Name: GC_CROSSIMPACT Description: Cross Impact @@ -19845,6 +20158,7 @@ Body: Weapon: Dagger: true Katar: true + Status: PoisoningWeapon - Id: 2028 Name: GC_WEAPONBLOCKING Description: Weapon Blocking @@ -19869,6 +20183,7 @@ Body: Amount: 28 - Level: 5 Amount: 24 + Status: WeaponBlocking - Id: 2029 Name: GC_COUNTERSLASH Description: Counter Slash @@ -20028,6 +20343,7 @@ Body: AfterCastActDelay: 2000 Requires: SpCost: 45 + Status: CloakingExceed - Id: 2034 Name: GC_PHANTOMMENACE Description: Phantom Menace @@ -20071,6 +20387,7 @@ Body: Requires: SpCost: 100 HpRateCost: 10 + Status: HallucinationWalk - Id: 2036 Name: GC_ROLLINGCUTTER Description: Rolling Cutter @@ -20099,6 +20416,7 @@ Body: SpCost: 5 Weapon: Katar: true + Status: RollingCutter - Id: 2037 Name: GC_CROSSRIPPERSLASHER Description: Cross Ripper Slasher @@ -20315,6 +20633,7 @@ Body: ItemCost: - Item: Blue_Gemstone Amount: 1 + Status: Adoramus - Id: 2041 Name: AB_CLEMENTIA Description: Crementia @@ -20351,6 +20670,7 @@ Body: Amount: 320 - Level: 3 Amount: 360 + Status: Blessing - Id: 2042 Name: AB_CANTO Description: Canto Candidus @@ -20387,6 +20707,7 @@ Body: Amount: 220 - Level: 3 Amount: 240 + Status: IncreaseAgi - Id: 2043 Name: AB_CHEAL Description: Coluceo Heal @@ -20478,6 +20799,7 @@ Body: Flag: NoOverlap: true PathCheck: true + Status: Epiclesis - Id: 2045 Name: AB_PRAEFATIO Description: Praefatio @@ -20537,6 +20859,7 @@ Body: Amount: 170 - Level: 10 Amount: 180 + Status: Kyrie - Id: 2046 Name: AB_ORATIO Description: Oratio @@ -20577,6 +20900,7 @@ Body: Amount: 59 - Level: 10 Amount: 62 + Status: Oratio - Id: 2047 Name: AB_LAUDAAGNUS Description: Lauda Agnus @@ -20604,6 +20928,7 @@ Body: Amount: 70 - Level: 4 Amount: 80 + Status: LaudaAgnus - Id: 2048 Name: AB_LAUDARAMUS Description: Lauda Ramus @@ -20631,6 +20956,7 @@ Body: Amount: 70 - Level: 4 Amount: 80 + Status: LaudaRamus - Id: 2049 # Removed on kRO Name: AB_EUCHARISTICA Description: Eucharistica @@ -20673,6 +20999,7 @@ Body: Amount: 320 - Level: 4 Amount: 360 + Status: Renovatio - Id: 2051 Name: AB_HIGHNESSHEAL Description: Highness Heal @@ -20771,6 +21098,7 @@ Body: Amount: 50 - Level: 5 Amount: 55 + Status: Expiatio - Id: 2054 Name: AB_DUPLELIGHT Description: Duple Light @@ -20831,6 +21159,7 @@ Body: Amount: 95 - Level: 10 Amount: 100 + Status: DupleLight - Id: 2055 Name: AB_DUPLELIGHT_MELEE Description: Duple Light Melee @@ -20947,6 +21276,7 @@ Body: Amount: 160 - Level: 5 Amount: 180 + Status: Secrament - Id: 2233 Name: RA_ARROWSTORM Description: Arrow Storm @@ -21056,6 +21386,7 @@ Body: Amount: 75 Weapon: Bow: true + Status: FearBreeze - Id: 2235 Name: RA_RANGERMAIN Description: Ranger Main @@ -21148,6 +21479,7 @@ Body: NoReiteration: true NoFootSet: true RemovedByFireRain: true + Status: ElectricShocker - Id: 2239 Name: RA_CLUSTERBOMB Description: Cluster Bomb @@ -21228,6 +21560,7 @@ Body: Requires: SpCost: 4 State: Move_Enable + Status: WugDash - Id: 2243 Name: RA_WUGSTRIKE Description: Warg Strike @@ -21358,6 +21691,7 @@ Body: Duration1: 10000 Requires: SpCost: 40 + Status: Camouflage - Id: 2248 Name: RA_RESEARCHTRAP Description: Research Trap @@ -21399,6 +21733,7 @@ Body: NoReiteration: true NoPc: true RemovedByFireRain: true + Status: ElementalChange - Id: 2250 Name: RA_COBALTTRAP Description: Cobalt Trap @@ -21436,6 +21771,7 @@ Body: NoReiteration: true NoPc: true RemovedByFireRain: true + Status: ElementalChange - Id: 2251 Name: RA_MAIZETRAP Description: Maize Trap @@ -21473,6 +21809,7 @@ Body: NoReiteration: true NoPc: true RemovedByFireRain: true + Status: ElementalChange - Id: 2252 Name: RA_VERDURETRAP Description: Verdure Trap @@ -21510,6 +21847,7 @@ Body: NoReiteration: true NoPc: true RemovedByFireRain: true + Status: ElementalChange - Id: 2253 Name: RA_FIRINGTRAP Description: Firing Trap @@ -21548,6 +21886,7 @@ Body: Flag: NoReiteration: true RemovedByFireRain: true + Status: Burning - Id: 2254 Name: RA_ICEBOUNDTRAP Description: Icebound Trap @@ -21586,6 +21925,7 @@ Body: Flag: NoReiteration: true RemovedByFireRain: true + Status: Freezing - Id: 2255 Name: NC_MADOLICENCE Description: Mado License @@ -21879,6 +22219,7 @@ Body: Amount: 1 Equipment: Accelerator: true + Status: Acceleration - Id: 2263 Name: NC_HOVERING Description: Hovering @@ -21899,6 +22240,7 @@ Body: Amount: 1 Equipment: Hovering_Booster: true + Status: Hovering - Id: 2264 Name: NC_F_SIDESLIDE Description: Front-Side Slide @@ -22023,6 +22365,7 @@ Body: Amount: 2 Equipment: Shape_Shifter: true + Status: ShapeShift - Id: 2269 Name: NC_EMERGENCYCOOL Description: Emergency Cool @@ -22066,6 +22409,7 @@ Body: Requires: SpCost: 45 State: Mado + Status: InfraredScan - Id: 2271 Name: NC_ANALYZE Description: Analyze @@ -22092,6 +22436,7 @@ Body: ItemCost: - Item: Magic_Gear_Fuel Amount: 1 + Status: Analyze - Id: 2272 Name: NC_MAGNETICFIELD Description: Magnetic Field @@ -22133,6 +22478,7 @@ Body: Amount: 2 Equipment: Mag_Field_Generator: true + Status: MagneticField - Id: 2273 Name: NC_NEUTRALBARRIER Description: Neutral Barrier @@ -22176,6 +22522,7 @@ Body: Id: Neutralbarrier Layout: 2 Interval: -1 + Status: NeutralBarrier - Id: 2274 Name: NC_STEALTHFIELD Description: Stealth Field @@ -22219,6 +22566,7 @@ Body: Id: Stealthfield Layout: 2 Interval: -1 + Status: StealthField - Id: 2275 Name: NC_REPAIR Description: Repair @@ -22678,6 +23026,7 @@ Body: Amount: 80 - Level: 10 Amount: 85 + Status: _Reproduce - Id: 2286 Name: SC_AUTOSHADOWSPELL Description: Auto Shadow Spell @@ -22753,6 +23102,7 @@ Body: Amount: 80 - Level: 10 Amount: 85 + Status: _AutoShadowSpell - Id: 2287 Name: SC_SHADOWFORM Description: Shadow Form @@ -22790,6 +23140,7 @@ Body: Amount: 70 - Level: 5 Amount: 80 + Status: _ShadowForm - Id: 2288 Name: SC_TRIANGLESHOT Description: Triangle Shot @@ -22895,6 +23246,7 @@ Body: Amount: 0 - Item: Surface_Paint Amount: 1 + Status: _BodyPaint - Id: 2290 Name: SC_INVISIBILITY Description: Invisibility @@ -22920,6 +23272,7 @@ Body: Time: 60000 Requires: SpCost: 100 + Status: _Invisibility - Id: 2291 Name: SC_DEADLYINFECT Description: Deadly Infect @@ -22954,6 +23307,7 @@ Body: Amount: 52 - Level: 5 Amount: 56 + Status: _DeadlyInfect - Id: 2292 Name: SC_ENERVATION Description: Masquerade - Enervation @@ -22988,6 +23342,7 @@ Body: Amount: 1 - Item: Makeover_Brush Amount: 0 + Status: _Enervation - Id: 2293 Name: SC_GROOMY Description: Masquerade - Gloomy @@ -23022,6 +23377,7 @@ Body: Amount: 1 - Item: Makeover_Brush Amount: 0 + Status: _Groomy - Id: 2294 Name: SC_IGNORANCE Description: Masquerade - Ignorance @@ -23056,6 +23412,7 @@ Body: Amount: 1 - Item: Makeover_Brush Amount: 0 + Status: _Ignorance - Id: 2295 Name: SC_LAZINESS Description: Masquerade - Laziness @@ -23090,6 +23447,7 @@ Body: Amount: 1 - Item: Makeover_Brush Amount: 0 + Status: _Laziness - Id: 2296 Name: SC_UNLUCKY Description: Masquerade - Unlucky @@ -23124,6 +23482,7 @@ Body: Amount: 1 - Item: Makeover_Brush Amount: 0 + Status: _Unlucky - Id: 2297 Name: SC_WEAKNESS Description: Masquerade - Weakness @@ -23158,6 +23517,7 @@ Body: Amount: 1 - Item: Makeover_Brush Amount: 0 + Status: _Weakness - Id: 2298 Name: SC_STRIPACCESSARY Description: Strip Accessory @@ -23194,6 +23554,7 @@ Body: Amount: 24 - Level: 5 Amount: 27 + Status: _StripAccessory - Id: 2299 Name: SC_MANHOLE Description: Man Hole @@ -23244,6 +23605,7 @@ Body: NoReiteration: true NoFootSet: true RemovedByFireRain: true + Status: _ManHole - Id: 2300 Name: SC_DIMENSIONDOOR Description: Dimension Door @@ -23342,6 +23704,7 @@ Body: NoOverlap: true RangedSingleUnit: true RemovedByFireRain: true + Status: Confusion - Id: 2302 Name: SC_MAELSTROM Description: Maelstrom @@ -23434,6 +23797,7 @@ Body: NoMob: true RangedSingleUnit: true RemovedByFireRain: true + Status: Berserk - Id: 2304 Name: SC_FEINTBOMB Description: Feint Bomb @@ -23507,6 +23871,7 @@ Body: Flag: NoOverlap: true PathCheck: true + Status: _FeintBomb - Id: 2307 Name: LG_CANNONSPEAR Description: Cannon Spear @@ -23664,6 +24029,7 @@ Body: - Level: 5 Amount: 100 State: Shield + Status: ReflectDamage - Id: 2312 Name: LG_PINPOINTATTACK Description: Pinpoint Attack @@ -23703,6 +24069,7 @@ Body: IgnoreItemBonus: true Requires: SpCost: 30 + Status: ForceOfVanguard - Id: 2314 Name: LG_RAGEBURST Description: Rage Burst @@ -23767,6 +24134,7 @@ Body: Amount: 56 - Level: 5 Amount: 68 + Status: ExeedBreak - Id: 2317 Name: LG_OVERBRAND Description: Over Brand @@ -23833,6 +24201,7 @@ Body: Amount: 90 - Level: 5 Amount: 95 + Status: Prestige - Id: 2319 Name: LG_BANDING Description: Banding @@ -23873,6 +24242,7 @@ Body: Id: Banding Range: 3 Interval: 5000 + Status: Banding - Id: 2320 Name: LG_MOONSLASHER Description: Moon Slasher @@ -23931,6 +24301,7 @@ Body: Weapon: 1hSpear: true 2hSpear: true + Status: OverBrandReady - Id: 2321 Name: LG_RAYOFGENESIS Description: Ray of Genesis @@ -24041,6 +24412,7 @@ Body: ItemCost: - Item: Holy_Water Amount: 2 + Status: Benedictio - Id: 2323 Name: LG_EARTHDRIVE Description: Earth Drive @@ -24182,6 +24554,7 @@ Body: Amount: 110 - Level: 5 Amount: 120 + Status: Inspiration - Id: 2519 Name: LG_OVERBRAND_BRANDISH # Removed on kRO Description: Overbrand Brandish @@ -24249,6 +24622,7 @@ Body: Amount: 11 - Level: 10 Amount: 12 + Status: Stun - Id: 2327 Name: SR_SKYNETBLOW Description: Sky Net Blow @@ -24333,6 +24707,7 @@ Body: Amount: 48 - Level: 5 Amount: 52 + Status: Stun - Id: 2329 Name: SR_FALLENEMPIRE Description: Fallen Empire @@ -24577,6 +24952,7 @@ Body: Requires: SpCost: 80 SpiritSphereCost: 2 + Status: CrescentElbow - Id: 2334 Name: SR_CURSEDCIRCLE Description: Cursed Circle @@ -24635,6 +25011,7 @@ Body: Amount: -4 - Level: 5 Amount: -5 + Status: CursedCircle_Target - Id: 2335 Name: SR_LIGHTNINGWALK Description: Lightning Walk @@ -24681,6 +25058,7 @@ Body: Amount: -2 - Level: 5 Amount: -1 + Status: LightningWalk - Id: 2336 Name: SR_KNUCKLEARROW Description: Knuckle Arrow @@ -24828,6 +25206,7 @@ Body: Cooldown: 30000 Requires: SpCost: 120 + Status: RaisingDragon - Id: 2339 Name: SR_GENTLETOUCH Description: Gentle Touch @@ -25077,6 +25456,7 @@ Body: Amount: -4 - Level: 5 Amount: -5 + Status: Gt_EnergyGain - Id: 2347 Name: SR_GENTLETOUCH_CHANGE Description: Gentle Touch - Change @@ -25117,6 +25497,7 @@ Body: - Level: 5 Amount: -10 SpiritSphereCost: 1 + Status: Gt_Change - Id: 2348 Name: SR_GENTLETOUCH_REVITALIZE Description: Gentle Touch - Revitalize @@ -25146,6 +25527,7 @@ Body: - Level: 5 Amount: 80 SpiritSphereCost: 1 + Status: Gt_Revitalize - Id: 2517 Name: SR_HOWLINGOFLION Description: Howling of Lion @@ -25258,6 +25640,7 @@ Body: Weapon: Musical: true Whip: true + Status: SwingDance - Id: 2351 Name: WA_SYMPHONY_OF_LOVER Description: Symphony of Lovers @@ -25288,6 +25671,7 @@ Body: Weapon: Musical: true Whip: true + Status: SymphonyOfLover - Id: 2352 Name: WA_MOONLIT_SERENADE Description: Moonlit Serenade @@ -25318,6 +25702,7 @@ Body: Weapon: Musical: true Whip: true + Status: MoonlitSerenade - Id: 2381 Name: MI_RUSH_WINDMILL Description: Windmill Rush Attack @@ -25348,6 +25733,7 @@ Body: Weapon: Musical: true Whip: true + Status: RushWindmill - Id: 2382 Name: MI_ECHOSONG Description: Echo Song @@ -25388,6 +25774,7 @@ Body: Weapon: Musical: true Whip: true + Status: EchoSong - Id: 2383 Name: MI_HARMONIZE Description: Harmonize @@ -25420,6 +25807,7 @@ Body: Weapon: Musical: true Whip: true + Status: Harmonize - Id: 2412 Name: WM_LESSON Description: Lesson @@ -25694,6 +26082,7 @@ Body: NoFootSet: true PathCheck: true NoKnockback: true + Status: Netherworld - Id: 2420 Name: WM_VOICEOFSIREN Description: Voice of Siren @@ -25755,6 +26144,7 @@ Body: Weapon: Musical: true Whip: true + Status: VoiceOfSiren - Id: 2421 Name: WM_DEADHILLHERE Description: Valley of Death @@ -25852,6 +26242,7 @@ Body: ItemCost: - Item: Protect_Neck_Candy Amount: 2 + Status: DeepSleep - Id: 2423 Name: WM_SIRCLEOFNATURE Description: Circle of Nature's Sound @@ -25883,6 +26274,7 @@ Body: Weapon: Musical: true Whip: true + Status: SircleOfNature - Id: 2424 Name: WM_RANDOMIZESPELL Description: Improvised Song @@ -25943,6 +26335,7 @@ Body: Weapon: Musical: true Whip: true + Status: GloomyDay - Id: 2426 Name: WM_GREAT_ECHO Description: Great Echo @@ -26044,6 +26437,7 @@ Body: ItemCost: - Item: Protect_Neck_Candy Amount: 1 + Status: SongOfMana - Id: 2428 Name: WM_DANCE_WITH_WUG Description: Dance With A Warg @@ -26101,6 +26495,7 @@ Body: ItemCost: - Item: Protect_Neck_Candy Amount: 1 + Status: DanceWithWug - Id: 2429 Name: WM_SOUND_OF_DESTRUCTION Description: Sound of Destruction @@ -26234,6 +26629,7 @@ Body: ItemCost: - Item: Protect_Neck_Candy Amount: 5 + Status: SaturdayNightFever - Id: 2431 Name: WM_LERADS_DEW Description: Lerad's Dew @@ -26281,6 +26677,7 @@ Body: ItemCost: - Item: Protect_Neck_Candy Amount: 1 + Status: LeradsDew - Id: 2432 Name: WM_MELODYOFSINK Description: Melody of Sink @@ -26338,6 +26735,7 @@ Body: ItemCost: - Item: Protect_Neck_Candy Amount: 2 + Status: MelodyOfSink - Id: 2433 Name: WM_BEYOND_OF_WARCRY Description: Warcry of Beyond @@ -26395,6 +26793,7 @@ Body: ItemCost: - Item: Protect_Neck_Candy Amount: 2 + Status: BeyondOfWarcry - Id: 2434 Name: WM_UNLIMITED_HUMMING_VOICE Description: Unlimited Humming Voice @@ -26462,6 +26861,7 @@ Body: ItemCost: - Item: Protect_Neck_Candy Amount: 5 + Status: UnlimitedHummingVoice - Id: 2516 Name: WM_SEVERE_RAINSTORM_MELEE Description: Severe Rainstorm Melee @@ -26527,6 +26927,7 @@ Body: Flag: NoReiteration: true NoOverlap: true + Status: PropertyWalk - Id: 2444 Name: SO_ELECTRICWALK Description: Electric Walk @@ -26576,6 +26977,7 @@ Body: Flag: NoReiteration: true NoOverlap: true + Status: PropertyWalk - Id: 2445 Name: SO_SPELLFIST Description: Spell Fist @@ -26630,6 +27032,7 @@ Body: Amount: 72 - Level: 10 Amount: 76 + Status: SpellFist - Id: 2446 Name: SO_EARTHGRAVE Description: Earth Grave @@ -26791,6 +27194,7 @@ Body: Target: Enemy Flag: PathCheck: true + Status: Crystalize - Id: 2448 Name: SO_POISON_BUSTER Description: Poison Buster @@ -26844,6 +27248,7 @@ Body: Amount: 130 - Level: 5 Amount: 150 + Status: Poison - Id: 2449 Name: SO_PSYCHIC_WAVE Description: Psychic Wave @@ -26981,6 +27386,7 @@ Body: Flag: PathCheck: true RemovedByFireRain: true + Status: Cloud_Poison - Id: 2451 Name: SO_STRIKING Description: Striking @@ -27008,6 +27414,7 @@ Body: Amount: 65 - Level: 5 Amount: 70 + Status: Striking - Id: 2452 Name: SO_WARMER Description: Warmer @@ -27086,6 +27493,7 @@ Body: PathCheck: true RangedSingleUnit: true RemovedByFireRain: true + Status: Warmer - Id: 2453 Name: SO_VACUUM_EXTREME Description: Vacuum Extreme @@ -27155,6 +27563,7 @@ Body: Flag: PathCheck: true RemovedByFireRain: true + Status: Vacuum_Extreme - Id: 2454 Name: SO_VARETYR_SPEAR Description: Varetyr Spear @@ -27373,6 +27782,7 @@ Body: ItemCost: - Item: Yellow_Gemstone Amount: 1 + Status: DeepSleep - Id: 2456 Name: SO_EL_CONTROL Description: Spirit Control @@ -27665,6 +28075,7 @@ Body: Flag: PathCheck: true RangedSingleUnit: true + Status: Fire_Insignia - Id: 2466 Name: SO_WATER_INSIGNIA Description: Water Insignia @@ -27708,6 +28119,7 @@ Body: Flag: PathCheck: true RangedSingleUnit: true + Status: Water_Insignia - Id: 2467 Name: SO_WIND_INSIGNIA Description: Wind Insignia @@ -27751,6 +28163,7 @@ Body: Flag: PathCheck: true RangedSingleUnit: true + Status: Wind_Insignia - Id: 2468 Name: SO_EARTH_INSIGNIA Description: Earth Insignia @@ -27794,6 +28207,7 @@ Body: Flag: PathCheck: true RangedSingleUnit: true + Status: Earth_Insignia - Id: 2474 Name: GN_TRAINING_SWORD Description: Sword Training @@ -27911,6 +28325,7 @@ Body: - Level: 5 Amount: 36 State: Cart + Status: Gn_CartBoost - Id: 2479 Name: GN_THORNS_TRAP Description: Thorn Trap @@ -27965,6 +28380,7 @@ Body: NoReiteration: true NoFootSet: true RemovedByFireRain: true + Status: ThornsTrap - Id: 2480 Name: GN_BLOOD_SUCKER Description: Blood Sucker @@ -28011,6 +28427,7 @@ Body: ItemCost: - Item: Bloodsuck_Plant_Seed Amount: 5 + Status: BloodSucker - Id: 2481 Name: GN_SPORE_EXPLOSION Description: Spore Explosion @@ -28077,6 +28494,7 @@ Body: ItemCost: - Item: Bomb_Mushroom_Spore Amount: 1 + Status: Spore_Explosion - Id: 2482 Name: GN_WALLOFTHORN Description: Wall of Thorns @@ -28380,6 +28798,7 @@ Body: Interval: -1 Flag: RangedSingleUnit: true + Status: SmokePowder - Id: 2488 Name: GN_FIRE_EXPANSION_TEAR_GAS Description: Fire Expansion Tear Gas @@ -28397,6 +28816,7 @@ Body: Interval: -1 Flag: RangedSingleUnit: true + Status: TearGas - Id: 2489 Name: GN_FIRE_EXPANSION_ACID Description: Fire Expansion Acid @@ -28552,6 +28972,7 @@ Body: ItemCost: - Item: Mandragora_Flowerpot Amount: 1 + Status: Mandragora - Id: 2493 # Removed on kRO Name: GN_SLINGITEM Description: Sling Item @@ -28720,6 +29141,7 @@ Body: Amount: 70 - Level: 2 Amount: 100 + Status: Odins_Power - Id: 2544 Name: MC_CARTDECORATE Description: Decorate Cart @@ -28785,6 +29207,7 @@ Body: ItemCost: - Item: Full_Metal_Jacket Amount: 1 + Status: Bleeding - Id: 2554 Name: RL_BANISHING_BUSTER Description: Banishing Buster @@ -28908,6 +29331,7 @@ Body: ItemCost: - Item: Special_Alloy_Trap Amount: 1 + Status: B_Trap Unit: Id: B_Trap Range: @@ -29034,6 +29458,7 @@ Body: Shotgun: true Grenade: true SpiritSphereCost: 1 + Status: E_Chain - Id: 2559 Name: RL_QD_SHOT Description: Quick Draw Shot @@ -29083,6 +29508,7 @@ Body: Shotgun: true Grenade: true SpiritSphereCost: 1 + Status: C_Marker - Id: 2561 Name: RL_FIREDANCE Description: Fire Dance @@ -29176,6 +29602,7 @@ Body: ItemCost: - Item: Shooting_Mine Amount: 1 + Status: H_Mine - Id: 2563 Name: RL_P_ALTER Description: Platinum Alter @@ -29217,6 +29644,7 @@ Body: Silver_Bullet: true Sanctified_Bullet: true Silver_Bullet_: true + Status: P_Alter - Id: 2564 Name: RL_FALLEN_ANGEL Description: Fallen Angel @@ -29436,6 +29864,7 @@ Body: Requires: SpCost: 30 SpiritSphereCost: -1 + Status: Heat_Barrel - Id: 2569 Name: RL_AM_BLAST Description: Anti-Material Blast @@ -29475,6 +29904,7 @@ Body: Amount: 96 Weapon: Rifle: true + Status: Anti_M_Blast - Id: 2570 Name: RL_SLUGSHOT Description: Slug Shot @@ -29517,6 +29947,7 @@ Body: ItemCost: - Item: Slug_Bullet Amount: 1 + Status: Stun - Id: 2571 Name: RL_HAMMER_OF_GOD Description: Hammer of God @@ -29576,6 +30007,7 @@ Body: Weapon: Rifle: true SpiritSphereCost: -1 + Status: Stun - Id: 2572 Name: RL_R_TRIP_PLUSATK Description: Round Trip Plus Attack @@ -29613,6 +30045,7 @@ Body: Requires: SpCost: 40 State: Moonstance + Status: LightOfMoon - Id: 2575 Name: SJ_LUNARSTANCE Description: Lunar Stance @@ -29625,6 +30058,7 @@ Body: CastCancel: true Requires: SpCost: 10 + Status: LunarStance - Id: 2576 Name: SJ_FULLMOONKICK Description: Full Moon Kick @@ -29663,6 +30097,7 @@ Body: - Level: 10 Amount: 75 State: Moonstance + Status: Blind - Id: 2577 Name: SJ_LIGHTOFSTAR Description: Light of Star @@ -29687,6 +30122,7 @@ Body: Requires: SpCost: 40 State: Starstance + Status: LightOfStar - Id: 2578 Name: SJ_STARSTANCE Description: Star Stance @@ -29699,6 +30135,7 @@ Body: CastCancel: true Requires: SpCost: 10 + Status: StarStance - Id: 2579 Name: SJ_NEWMOONKICK Description: New Moon Kick @@ -29732,6 +30169,7 @@ Body: - Level: 7 Amount: 50 State: Moonstance + Status: NewMoon - Id: 2580 Name: SJ_FLASHKICK Description: Flash Kick @@ -29775,6 +30213,7 @@ Body: - Level: 7 Amount: 15 State: Starstance + Status: FlashKick - Id: 2581 Name: SJ_STAREMPEROR Description: Star Emperor Advent @@ -29805,6 +30244,7 @@ Body: - Level: 5 Amount: 90 State: Universestance + Status: Silence - Id: 2582 Name: SJ_NOVAEXPLOSING Description: Nova Explosion @@ -29837,6 +30277,7 @@ Body: - Level: 5 Amount: 80 State: Universestance + Status: NovaExplosing - Id: 2583 Name: SJ_UNIVERSESTANCE Description: Universe Stance @@ -29849,6 +30290,7 @@ Body: CastCancel: true Requires: SpCost: 10 + Status: UniverseStance - Id: 2584 Name: SJ_FALLINGSTAR Description: Falling Star @@ -29905,6 +30347,7 @@ Body: - Level: 10 Amount: 85 State: Starstance + Status: FallingStar - Id: 2585 Name: SJ_GRAVITYCONTROL Description: Gravity Control @@ -29923,6 +30366,7 @@ Body: Requires: SpCost: 80 State: Universestance + Status: GravityControl - Id: 2586 Name: SJ_BOOKOFDIMENSION Description: Book of Dimension @@ -29949,6 +30393,7 @@ Body: Requires: SpCost: 40 State: Universestance + Status: Dimension - Id: 2587 Name: SJ_BOOKOFCREATINGSTAR Description: Book of Creating Star @@ -29997,6 +30442,7 @@ Body: NoOverlap: true PathCheck: true NoKnockback: true + Status: CreatingStar - Id: 2588 Name: SJ_DOCUMENT Description: Document of Sun Moon and Star @@ -30038,6 +30484,7 @@ Body: Requires: SpCost: 40 State: Sunstance + Status: LightOfSun - Id: 2591 Name: SJ_SUNSTANCE Description: Sun Stance @@ -30050,6 +30497,7 @@ Body: CastCancel: true Requires: SpCost: 10 + Status: SunStance - Id: 2592 Name: SJ_SOLARBURST Description: Solar Burst @@ -30181,6 +30629,7 @@ Body: - Level: 5 Amount: 50 SpiritSphereCost: 1 + Status: SoulGolem - Id: 2597 Name: SP_SOULSHADOW Description: Shadow's Soul @@ -30218,6 +30667,7 @@ Body: - Level: 5 Amount: 50 SpiritSphereCost: 1 + Status: SoulShadow - Id: 2598 Name: SP_SOULFALCON Description: Falcon's Soul @@ -30255,6 +30705,7 @@ Body: - Level: 5 Amount: 50 SpiritSphereCost: 1 + Status: SoulFalcon - Id: 2599 Name: SP_SOULFAIRY Description: Fairy's Soul @@ -30292,6 +30743,7 @@ Body: - Level: 5 Amount: 50 SpiritSphereCost: 1 + Status: SoulFairy - Id: 2600 Name: SP_CURSEEXPLOSION Description: Curse Explosion @@ -30354,6 +30806,7 @@ Body: Requires: SpCost: 70 SpiritSphereCost: 3 + Status: SoulCurse - Id: 2602 Name: SP_SPA Description: Espa @@ -30464,6 +30917,7 @@ Body: - Level: 5 Amount: 26 SpiritSphereCost: 1 + Status: Sp_Sha - Id: 2604 Name: SP_SWHOO Description: Eswhoo @@ -30621,6 +31075,7 @@ Body: - Level: 7 Amount: 56 SpiritSphereCost: 10 + Status: SoulUnity - Id: 2606 Name: SP_SOULDIVISION Description: Soul Division @@ -30651,6 +31106,7 @@ Body: - Level: 5 Amount: 52 SpiritSphereCost: 1 + Status: SoulDivision - Id: 2607 Name: SP_SOULREAPER Description: Soul Reaper @@ -30699,6 +31155,7 @@ Body: - Level: 5 Amount: 50 SpiritSphereCost: 2 + Status: SoulReaper - Id: 2608 Name: SP_SOULREVOLVE Description: Soul Revolution @@ -30749,6 +31206,7 @@ Body: Duration2: 600000 Requires: SpCost: 100 + Status: SoulCollect - Id: 2610 Name: SP_SOULEXPLOSION Description: Soul Explosion @@ -30823,6 +31281,7 @@ Body: Duration1: 200000 Requires: SpCost: 10 + Status: Hiding - Id: 3002 Name: KO_RIGHT Description: Right Hand Mastery @@ -30907,6 +31366,7 @@ Body: Amount: 26 - Level: 10 Amount: 28 + Status: Jyumonjikiri - Id: 3005 Name: KO_SETSUDAN Description: Soul Cutter @@ -31245,6 +31705,7 @@ Body: Flag: NoOverlap: true PathCheck: true + Status: Stun - Id: 3011 Name: KO_MEIKYOUSISUI Description: Pure Soul @@ -31259,6 +31720,7 @@ Body: Cooldown: 10000 Requires: SpCost: 100 + Status: Meikyousisui - Id: 3012 Name: KO_ZANZOU Description: Illusion - Shadow @@ -31359,6 +31821,7 @@ Body: Amount: 52 - Level: 5 Amount: 56 + Status: Kyougaku - Id: 3014 Name: KO_JYUSATSU Description: Illusion - Death @@ -31404,6 +31867,7 @@ Body: Amount: 52 - Level: 5 Amount: 56 + Status: Curse - Id: 3015 Name: KO_KAHU_ENTEN Description: Fire Charm @@ -31504,6 +31968,7 @@ Body: Flag: NoOverlap: true PathCheck: true + Status: Zenkai - Id: 3021 Name: KO_GENWAKU Description: Illusion - Bewitch @@ -31582,6 +32047,7 @@ Body: Amount: 85 - Level: 5 Amount: 90 + Status: Izayoi - Id: 3023 Name: KG_KAGEHUMI Description: Shadow Trampling @@ -31625,6 +32091,7 @@ Body: Amount: 40 - Level: 5 Amount: 45 + Status: Kagehumi - Id: 3024 Name: KG_KYOMU Description: Empty Shadow @@ -31653,6 +32120,7 @@ Body: ItemCost: - Item: Shadow_Orb Amount: 1 + Status: Kyomu - Id: 3025 Name: KG_KAGEMUSYA Description: Shadow Warrior @@ -31691,6 +32159,7 @@ Body: ItemCost: - Item: Shadow_Orb Amount: 1 + Status: Kagemusya - Id: 3026 Name: OB_ZANGETSU Description: Distorted Crescent @@ -31738,6 +32207,7 @@ Body: Amount: 90 - Level: 5 Amount: 100 + Status: Zangetsu - Id: 3027 Name: OB_OBOROGENSOU Description: Moonlight Fantasy @@ -31774,6 +32244,7 @@ Body: Amount: 70 - Level: 5 Amount: 75 + Status: Gensou - Id: 3028 Name: OB_OBOROGENSOU_TRANSITION_ATK Description: Moonlight Fantasy Transition Attack @@ -31832,6 +32303,7 @@ Body: Amount: 50 - Level: 5 Amount: 60 + Status: Akaitsuki - Id: 3031 Name: ECL_SNOWFLIP Description: Snow Flip @@ -31957,6 +32429,7 @@ Body: Amount: 58 - Level: 5 Amount: 70 + Status: DarkCrow - Id: 5002 Name: RA_UNLIMIT Description: Unlimited @@ -31982,6 +32455,7 @@ Body: Amount: 160 - Level: 5 Amount: 180 + Status: Unlimit - Id: 5003 Name: GN_ILLUSIONDOPING Description: Illusion Doping @@ -32047,6 +32521,7 @@ Body: ItemCost: - Item: Alchol Amount: 1 + Status: IllusionDoping - Id: 5004 Name: RK_DRAGONBREATH_WATER Description: Dragon Breath - Water @@ -32124,6 +32599,7 @@ Body: - Level: 10 Amount: 75 State: Ridingdragon + Status: Freezing - Id: 5005 Name: RK_LUXANIMA Description: Lux Anima @@ -32232,6 +32708,7 @@ Body: ItemCost: - Item: Heartbroken_Tears Amount: 1 + Status: Frigg_Song - Id: 5008 Name: SO_ELEMENTAL_SHIELD Description: Elemental Shield @@ -32285,6 +32762,7 @@ Body: Amount: 4 - Level: 5 Amount: 3 + Status: FlashCombo - Id: 5010 Name: SC_ESCAPE Description: Emergency Escape @@ -32376,6 +32854,7 @@ Body: Amount: 120 - Level: 5 Amount: 150 + Status: Offertorium - Id: 5012 Name: WL_TELEKINESIS_INTENSE Description: Intense Telekinesis @@ -32400,6 +32879,7 @@ Body: Amount: 250 - Level: 5 Amount: 300 + Status: Telekinesis_Intense - Id: 5013 Name: LG_KINGS_GRACE Description: King's Grace @@ -32442,6 +32922,7 @@ Body: Flag: NoReiteration: true RangedSingleUnit: true + Status: Kings_Grace - Id: 5014 Name: ALL_FULL_THROTTLE Description: Full Throttle @@ -32469,6 +32950,7 @@ Body: Cooldown: 1800000 Requires: SpCost: 1 + Status: Full_Throttle - Id: 5015 Name: NC_MAGMA_ERUPTION_DOTDAMAGE Description: Magma Eruption Dot Damage @@ -32516,6 +32998,7 @@ Body: Cooldown: 15000 Requires: SpCost: 10 + Status: SuHide - Id: 5021 Name: SU_SCRATCH Description: Scratch @@ -32547,6 +33030,7 @@ Body: Amount: 25 - Level: 3 Amount: 30 + Status: Bleeding - Id: 5022 Name: SU_STOOP Description: Stoop @@ -32562,6 +33046,7 @@ Body: Cooldown: 15000 Requires: SpCost: 10 + Status: Su_Stoop - Id: 5023 Name: SU_LOPE Description: Lope @@ -32624,6 +33109,7 @@ Body: Duration2: 120000 Requires: SpCost: 40 + Status: Bleeding - Id: 5027 Name: SU_CN_POWDERING Description: Catnip Powdering @@ -32684,6 +33170,7 @@ Body: Flag: PathCheck: true RangedSingleUnit: true + Status: CatnipPowder - Id: 5028 Name: SU_CN_METEOR Description: Catnip Meteor @@ -32740,6 +33227,7 @@ Body: Target: Enemy Flag: PathCheck: true + Status: Curse - Id: 5029 Name: SU_SV_ROOTTWIST Description: Silvervine Root Twist @@ -32786,6 +33274,7 @@ Body: Amount: 16 - Level: 5 Amount: 18 + Status: Sv_RootTwist - Id: 5030 Name: SU_SV_ROOTTWIST_ATK Description: Silver Vine Root Twist Attack @@ -32833,6 +33322,7 @@ Body: Amount: 16 - Level: 5 Amount: 18 + Status: BiteScar - Id: 5033 Name: SU_PICKYPECK Description: Picky Peck @@ -32908,6 +33398,7 @@ Body: Amount: 18 - Level: 5 Amount: 20 + Status: ArclouseDash - Id: 5036 Name: SU_LUNATICCARROTBEAT Description: Lunatic Carrot Beat @@ -32948,6 +33439,7 @@ Body: Amount: 30 - Level: 5 Amount: 35 + Status: Stun - Id: 5037 Name: SU_POWEROFSEA Description: Power of Sea @@ -33015,6 +33507,7 @@ Body: Amount: 50 - Level: 5 Amount: 60 + Status: TunaParty - Id: 5040 Name: SU_BUNCHOFSHRIMP Description: Bunch of Shrimp @@ -33056,6 +33549,7 @@ Body: ItemCost: - Item: Prawn Amount: 1 + Status: Shrimp - Id: 5041 Name: SU_FRESHSHRIMP Description: Fresh Shrimp @@ -33093,6 +33587,7 @@ Body: Amount: 28 - Level: 5 Amount: 30 + Status: FreshShrimp - Id: 5042 Name: SU_CN_METEOR2 Description: Catnip Meteor 2 @@ -33276,6 +33771,7 @@ Body: Amount: 38 - Level: 5 Amount: 34 + Status: Hiss - Id: 5048 Name: SU_NYANGGRASS Description: Nyang Grass @@ -33342,6 +33838,7 @@ Body: Flag: PathCheck: true RangedSingleUnit: true + Status: NyangGrass - Id: 5049 Name: SU_GROOMING Description: Grooming @@ -33378,6 +33875,7 @@ Body: Time: 20000 Requires: SpCost: 15 + Status: Grooming - Id: 5050 Name: SU_PURRING Description: Purring @@ -33427,6 +33925,7 @@ Body: Amount: 55 - Level: 5 Amount: 50 + Status: Grooming - Id: 5051 Name: SU_SHRIMPARTY Description: Tasty Shrimp Party @@ -33486,6 +33985,7 @@ Body: Amount: 70 - Level: 5 Amount: 60 + Status: ShrimpBlessing - Id: 5052 Name: SU_SPIRITOFLIFE Description: Spirit of Life @@ -33538,6 +34038,7 @@ Body: Amount: 70 - Level: 5 Amount: 60 + Status: Chattering - Id: 5054 Name: SU_SPIRITOFLAND Description: Spirit of Land @@ -33579,6 +34080,7 @@ Body: Amount: 35 - Level: 5 Amount: 30 + Status: Chattering - Id: 5056 Name: SU_SPIRITOFSEA Description: Spirit of Sea @@ -34241,6 +34743,7 @@ Body: - Level: 4 Amount: 110 - Level: 5 + Amount: 120 - Id: 5215 Name: AG_DESTRUCTIVE_HURRICANE @@ -35476,6 +35979,7 @@ Body: Amount: 54 - Level: 5 Amount: 60 + Status: Second_Brand - Id: 5250 Name: IQ_SECOND_JUDGEMENT Description: Second Judgement @@ -35515,6 +36019,7 @@ Body: Amount: 60 - Level: 5 Amount: 65 + Status: Second_Brand - Id: 5251 Name: IQ_THIRD_PUNISH Description: Third Punish @@ -36899,6 +37404,7 @@ Body: Requires: SpCost: 150 ApCost: 150 + Status: Darkcrow - Id: 5295 Name: MT_AXE_STOMP Description: Axe Stomp @@ -37961,6 +38467,7 @@ Body: Flag: NoOverlap: true PathCheck: true + Status: Handicapstate_Deepblind - Id: 5332 Name: WH_SOLIDTRAP Description: Solid Trap @@ -39469,6 +39976,7 @@ Body: Flag: NoOverlap: true PathCheck: true + Status: Handicapstate_Lightningstrike - Id: 5371 Name: EM_VENOM_SWAMP Description: Venom Swamp @@ -39545,6 +40053,7 @@ Body: Flag: NoOverlap: true PathCheck: true + Status: Handicapstate_Conflagration - Id: 5373 Name: EM_TERRA_DRIVE Description: Terra Drive @@ -39582,6 +40091,7 @@ Body: Target: Enemy Flag: PathCheck: true + Status: Handicapstate_Crystallization - Id: 5374 Name: EM_ELEMENTAL_SPIRIT_M Description: Elemental Spirit Mastery @@ -39964,6 +40474,7 @@ Body: Amount: 35 - Level: 5 Amount: 40 + Status: Avoid - Id: 8003 Name: HLIF_BRAIN Description: Brain Surgery @@ -39993,6 +40504,7 @@ Body: Time: 1200000 Requires: SpCost: 100 + Status: Change - Id: 8005 Name: HAMI_CASTLE Description: Castling @@ -40036,6 +40548,7 @@ Body: Amount: 35 - Level: 5 Amount: 40 + Status: Defence - Id: 8007 Name: HAMI_SKIN Description: Adamantium Skin @@ -40066,6 +40579,7 @@ Body: Time: 900000 Requires: SpCost: 120 + Status: Bloodlust - Id: 8009 Name: HFLI_MOON Description: Moonlight @@ -40140,6 +40654,7 @@ Body: Amount: 60 - Level: 5 Amount: 70 + Status: Fleet - Id: 8011 Name: HFLI_SPEED Description: Speed @@ -40184,6 +40699,7 @@ Body: Amount: 60 - Level: 5 Amount: 70 + Status: Speed - Id: 8012 Name: HFLI_SBR44 Description: S.B.R.44 @@ -40427,6 +40943,7 @@ Body: Amount: 90 - Level: 10 Amount: 96 + Status: Paralysis - Id: 8020 Name: MH_POISON_MIST Description: Poison Mist @@ -40492,6 +41009,7 @@ Body: Flag: NoOverlap: true PathCheck: true + Status: Poison_Mist - Id: 8021 Name: MH_PAIN_KILLER Description: Pain Killer @@ -40587,6 +41105,7 @@ Body: Amount: 80 - Level: 10 Amount: 84 + Status: Pain_Killer - Id: 8022 Name: MH_LIGHT_OF_REGENE Description: Light of Regene @@ -40630,6 +41149,7 @@ Body: Amount: 70 - Level: 5 Amount: 80 + Status: Light_Of_Regene - Id: 8023 Name: MH_OVERED_BOOST Description: Overed Boost @@ -40684,6 +41204,7 @@ Body: Amount: 130 - Level: 5 Amount: 150 + Status: Overed_Boost - Id: 8024 Name: MH_ERASER_CUTTER Description: Eraser Cutter @@ -40924,6 +41445,7 @@ Body: AfterCastActDelay: 1000 Requires: SpCost: 35 + Status: Style_Change - Id: 8028 Name: MH_SONIC_CRAW Description: Sonic Claw @@ -41074,6 +41596,7 @@ Body: Amount: 67 - Level: 10 Amount: 70 + Status: Stun - Id: 8032 Name: MH_GOLDENE_FERSE Description: Golden Heel @@ -41117,6 +41640,7 @@ Body: Amount: 75 - Level: 5 Amount: 80 + Status: Goldene_Ferse - Id: 8033 Name: MH_STEINWAND Description: Stone Wall @@ -41167,6 +41691,7 @@ Body: Flag: NoEnemy: true NoReiteration: true + Status: SafetyWall - Id: 8034 Name: MH_HEILIGE_STANGE Description: Holy Pole @@ -41308,6 +41833,7 @@ Body: Amount: 75 - Level: 5 Amount: 80 + Status: Angriffs_Modus - Id: 8036 Name: MH_TINDER_BREAKER Description: Tinder Breaker @@ -41343,6 +41869,7 @@ Body: - Level: 5 Amount: 40 SpiritSphereCost: 1 + Status: Tinder_Breaker2 - Id: 8037 Name: MH_CBC Description: Continual Break Combo @@ -41367,6 +41894,7 @@ Body: - Level: 5 Amount: 50 SpiritSphereCost: 1 + Status: Cbc - Id: 8038 Name: MH_EQC Description: Eternal Quick Combo @@ -41392,6 +41920,7 @@ Body: - Level: 5 Amount: 40 SpiritSphereCost: 2 + Status: Eqc - Id: 8039 Name: MH_MAGMA_FLOW Description: Magma Flow @@ -41460,6 +41989,7 @@ Body: Amount: 46 - Level: 5 Amount: 50 + Status: Magma_Flow - Id: 8040 Name: MH_GRANITIC_ARMOR Description: Granitic Armor @@ -41495,6 +42025,7 @@ Body: Amount: 66 - Level: 5 Amount: 70 + Status: Granitic_Armor - Id: 8041 Name: MH_LAVA_SLIDE Description: Lava Slide @@ -41659,6 +42190,7 @@ Body: Amount: 66 - Level: 10 Amount: 70 + Status: Pyroclastic - Id: 8043 Name: MH_VOLCANIC_ASH Description: Volcanic Ash @@ -41714,6 +42246,7 @@ Body: NoOverlap: true PathCheck: true RangedSingleUnit: true + Status: Ash - Id: 8201 Name: MS_BASH Description: Bash @@ -41811,6 +42344,7 @@ Body: - Level: 10 Amount: 16 SpCost: 30 + Status: Watk_Element - Id: 8203 Name: MS_BOWLINGBASH Description: Bowling_Bash @@ -41885,6 +42419,7 @@ Body: Time: 60000 Requires: SpCost: 50 + Status: Parrying - Id: 8205 Name: MS_REFLECTSHIELD Description: Shield_Reflect @@ -41918,6 +42453,7 @@ Body: Amount: 75 - Level: 10 Amount: 80 + Status: ReflectShield - Id: 8206 Name: MS_BERSERK Description: Frenzy @@ -41932,6 +42468,7 @@ Body: Duration2: 15000 Requires: SpCost: 200 + Status: Berserk - Id: 8207 Name: MA_DOUBLE Description: Double_Strafe @@ -42084,6 +42621,7 @@ Body: NoReiteration: true NoFootSet: true RemovedByFireRain: true + Status: Stun - Id: 8211 Name: MA_SANDMAN Description: Sandman @@ -42134,6 +42672,7 @@ Body: NoReiteration: true NoFootSet: true RemovedByFireRain: true + Status: Sleep - Id: 8212 Name: MA_FREEZINGTRAP Description: Freezing_Trap @@ -42186,6 +42725,7 @@ Body: NoReiteration: true NoFootSet: true RemovedByFireRain: true + Status: Freeze - Id: 8213 Name: MA_REMOVETRAP Description: Remove_Trap @@ -42356,6 +42896,7 @@ Body: Amount: 27 - Level: 5 Amount: 30 + Status: Stop - Id: 8219 Name: ML_DEFENDER Description: Defending_Aura @@ -42371,6 +42912,7 @@ Body: Requires: SpCost: 30 State: Shield + Status: Defender - Id: 8220 Name: ML_AUTOGUARD Description: Guard @@ -42404,6 +42946,7 @@ Body: Amount: 28 - Level: 10 Amount: 30 + Status: AutoGuard - Id: 8221 Name: ML_DEVOTION Description: Sacrifice @@ -42447,6 +42990,7 @@ Body: IgnoreItemBonus: true Requires: SpCost: 25 + Status: Devotion - Id: 8222 Name: MER_MAGNIFICAT Description: Magnificat @@ -42480,6 +43024,7 @@ Body: IgnoreItemBonus: true Requires: SpCost: 40 + Status: Magnificat - Id: 8223 Name: MER_QUICKEN Description: Two-Hand_Quicken @@ -42533,6 +43078,7 @@ Body: Amount: 46 - Level: 10 Amount: 50 + Status: Merc_Quicken - Id: 8224 Name: MER_SIGHT Description: Sight @@ -42550,6 +43096,7 @@ Body: Duration1: 10000 Requires: SpCost: 10 + Status: Sight - Id: 8225 Name: MER_CRASH Description: Crash @@ -42569,6 +43116,7 @@ Body: IgnoreItemBonus: true Requires: SpCost: 10 + Status: Stun - Id: 8226 Name: MER_REGAIN Description: Regain @@ -42698,6 +43246,7 @@ Body: Amount: 12 - Level: 10 Amount: 13 + Status: Provoke - Id: 8233 Name: MER_AUTOBERSERK Description: Berserk @@ -42710,6 +43259,7 @@ Body: HitCount: 1 Requires: SpCost: 1 + Status: AutoBerserk - Id: 8234 Name: MER_DECAGI Description: Decrease_AGI @@ -42772,6 +43322,7 @@ Body: Amount: 31 - Level: 10 Amount: 33 + Status: DecreaseAgi - Id: 8235 Name: MER_SCAPEGOAT Description: Scapegoat @@ -42844,6 +43395,7 @@ Body: Amount: 12 - Level: 10 Amount: 10 + Status: Silence - Id: 8237 Name: MER_ESTIMATION Description: Sense @@ -42899,6 +43451,7 @@ Body: Amount: 30 - Level: 10 Amount: 35 + Status: Kyrie - Id: 8239 Name: MER_BLESSING Description: Blessing @@ -42954,6 +43507,7 @@ Body: Amount: 60 - Level: 10 Amount: 64 + Status: Blessing - Id: 8240 Name: MER_INCAGI Description: Increase Agility @@ -43016,6 +43570,7 @@ Body: Amount: 42 - Level: 10 Amount: 45 + Status: IncreaseAgi - Id: 8241 Name: MER_INVINCIBLEOFF2 Description: Mind Blaster @@ -43029,6 +43584,7 @@ Body: HitCount: 1 Duration1: 10000 Cooldown: 30000 + Status: InvincibleOff - Id: 8401 Name: EL_CIRCLE_OF_FIRE Description: Circle of Fire @@ -43042,6 +43598,7 @@ Body: Duration1: -1 Requires: SpCost: 40 + Status: Circle_Of_Fire_Option - Id: 8402 Name: EL_FIRE_CLOAK Description: Fire Cloak @@ -43054,6 +43611,7 @@ Body: Duration1: -1 Requires: SpCost: 60 + Status: Fire_Cloak_Option - Id: 8403 Name: EL_FIRE_MANTLE Description: Fire Mantle @@ -43089,6 +43647,7 @@ Body: Duration1: -1 Requires: SpCost: 40 + Status: Water_Screen_Option - Id: 8405 Name: EL_WATER_DROP Description: Water Drop @@ -43101,6 +43660,7 @@ Body: Duration1: -1 Requires: SpCost: 60 + Status: Water_Drop_Option - Id: 8406 Name: EL_WATER_BARRIER Description: Water Barrier @@ -43122,6 +43682,7 @@ Body: NoOverlap: true PathCheck: true RangedSingleUnit: true + Status: Water_Barrier - Id: 8407 Name: EL_WIND_STEP Description: Wind Step @@ -43135,6 +43696,7 @@ Body: Duration1: -1 Requires: SpCost: 40 + Status: Wind_Step_Option - Id: 8408 Name: EL_WIND_CURTAIN Description: Wind Curtain @@ -43147,6 +43709,7 @@ Body: Duration1: -1 Requires: SpCost: 60 + Status: Wind_Curtain_Option - Id: 8409 Name: EL_ZEPHYR Description: Zephyr @@ -43168,6 +43731,7 @@ Body: NoOverlap: true PathCheck: true RangedSingleUnit: true + Status: Zephyr - Id: 8410 Name: EL_SOLID_SKIN Description: Solid Skin @@ -43180,6 +43744,7 @@ Body: Duration1: -1 Requires: SpCost: 40 + Status: Solid_Skin_Option - Id: 8411 Name: EL_STONE_SHIELD Description: Stone Shield @@ -43192,6 +43757,7 @@ Body: Duration1: -1 Requires: SpCost: 60 + Status: Stone_Shield_Option - Id: 8412 Name: EL_POWER_OF_GAIA Description: Power of Gaia @@ -43213,6 +43779,7 @@ Body: NoOverlap: true PathCheck: true RangedSingleUnit: true + Status: Power_Of_Gaia - Id: 8413 Name: EL_PYROTECHNIC Description: Pyrotechnic @@ -43225,6 +43792,7 @@ Body: Duration1: -1 Requires: SpCost: 1 + Status: Pyrotechnic_Option - Id: 8414 Name: EL_HEATER Description: Heater @@ -43237,6 +43805,7 @@ Body: Duration1: -1 Requires: SpCost: 1 + Status: Heater_Option - Id: 8415 Name: EL_TROPIC Description: Tropic @@ -43249,6 +43818,7 @@ Body: Duration1: -1 Requires: SpCost: 1 + Status: Tropic_Option - Id: 8416 Name: EL_AQUAPLAY Description: Aqua Play @@ -43261,6 +43831,7 @@ Body: Duration1: -1 Requires: SpCost: 1 + Status: AquaPlay_Option - Id: 8417 Name: EL_COOLER Description: Cooler @@ -43273,6 +43844,7 @@ Body: Duration1: -1 Requires: SpCost: 1 + Status: Cooler_Option - Id: 8418 Name: EL_CHILLY_AIR Description: Cool Air @@ -43285,6 +43857,7 @@ Body: Duration1: -1 Requires: SpCost: 1 + Status: Chilly_Air_Option - Id: 8419 Name: EL_GUST Description: Gust @@ -43297,6 +43870,7 @@ Body: Duration1: -1 Requires: SpCost: 1 + Status: Gust_Option - Id: 8420 Name: EL_BLAST Description: Blast @@ -43309,6 +43883,7 @@ Body: Duration1: -1 Requires: SpCost: 1 + Status: Blast_Option - Id: 8421 Name: EL_WILD_STORM Description: Wild Storm @@ -43321,6 +43896,7 @@ Body: Duration1: -1 Requires: SpCost: 1 + Status: Wild_Storm_Option - Id: 8422 Name: EL_PETROLOGY Description: Petrology @@ -43333,6 +43909,7 @@ Body: Duration1: -1 Requires: SpCost: 1 + Status: Petrology_Option - Id: 8423 Name: EL_CURSED_SOIL Description: Cursed Soil @@ -43345,6 +43922,7 @@ Body: Duration1: -1 Requires: SpCost: 1 + Status: Cursed_Soil_Option - Id: 8424 Name: EL_UPHEAVAL Description: Upheaval @@ -43357,6 +43935,7 @@ Body: Duration1: -1 Requires: SpCost: 1 + Status: Upheaval_Option - Id: 8425 Name: EL_FIRE_ARROW Description: Fire Arrow @@ -43473,6 +44052,7 @@ Body: Duration1: -1 Requires: SpCost: 80 + Status: Tidal_Weapon_Option - Id: 8434 Name: EL_WIND_SLASH Description: Wind Slasher @@ -43567,6 +44147,7 @@ Body: Duration1: 15000 Requires: SpCost: 60 + Status: Rock_Crusher - Id: 8441 Name: EL_ROCK_CRUSHER_ATK Description: Rock Launcher Attack @@ -43581,6 +44162,7 @@ Body: Duration1: 15000 Requires: SpCost: 1 + Status: Rock_Crusher_Atk - Id: 8442 Name: EL_STONE_RAIN Description: Stone Rain @@ -43954,6 +44536,7 @@ Body: Target: SameGuild Flag: NoMob: true + Status: Leadership - Id: 10007 Name: GD_GLORYWOUNDS Description: Glorious Wounds @@ -43969,6 +44552,7 @@ Body: Target: SameGuild Flag: NoMob: true + Status: GloryWounds - Id: 10008 Name: GD_SOULCOLD Description: Cold Heart @@ -43984,6 +44568,7 @@ Body: Target: SameGuild Flag: NoMob: true + Status: SoulCold - Id: 10009 Name: GD_HAWKEYES Description: Sharp Gaze @@ -43999,6 +44584,7 @@ Body: Target: SameGuild Flag: NoMob: true + Status: HawkEyes - Id: 10010 Name: GD_BATTLEORDER Description: Battle Orders @@ -44016,6 +44602,7 @@ Body: CastTimeFlags: IgnoreDex: true IgnoreStatus: true + Status: BattleOrders - Id: 10011 Name: GD_REGENERATION Description: Regeneration @@ -44033,6 +44620,7 @@ Body: CastTimeFlags: IgnoreDex: true IgnoreStatus: true + Status: Regeneration - Id: 10012 Name: GD_RESTORE Description: Restoration diff --git a/db/re/status.yml b/db/re/status.yml new file mode 100644 index 0000000000..c205f7c9e8 --- /dev/null +++ b/db/re/status.yml @@ -0,0 +1,7946 @@ +# This file is a part of rAthena. +# Copyright(C) 2022 rAthena Development Team +# https://rathena.org - https://github.com/rathena +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +########################################################################### +# Status Change Database +########################################################################### +# +# Status Change Settings +# +########################################################################### +# - Status Status change name. +# Icon Status change icon. (Default: EFST_BLANK) +# DurationLookup Default status change duration. (Default: 0) +# States: Status change state to determine player states. (Default: None) +# CalcFlags: Status change calculation to indicate which stat is adjusted. (Default: None) +# Opt1 Special effect when a status change is active. Non-stackable. (Default: None) +# Opt2: Special options/client effects when a status change is active. (Default: None) +# Opt3: Special options/client effects when a status change is active. (Default: Normal) +# Options: Special options/client effects when a status change is active. (Default: Nothing) +# Flags: Special flags which trigger during certain events. (Default: None) +# 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) +# EndReturn If the status has an End list and succeeds to remove these status changes, it won't give its effect. (Default: false) +########################################################################### + +Header: + Type: STATUS_DB + Version: 1 + +Body: + - Status: Stone + DurationLookup: NPC_PETRIFYATTACK + States: + NoMove: true + NoMoveCond: true + NoCast: true + NoAttack: true + CalcFlags: + Def_Ele: true + Def: true + Mdef: true + Flags: + SendOption: true + BossResist: true + StopAttacking: true + StopCasting: true + Fail: + Refresh: true + Inspiration: true + Power_Of_Gaia: true + Gvg_Stone: true + End: + Dancing: true + - Status: Freeze + DurationLookup: NPC_WIDEFREEZE + States: + NoMove: true + NoCast: true + NoAttack: true + CalcFlags: + Def_Ele: true + Def: true + Mdef: true + Opt1: Freeze + Flags: + SendOption: true + BossResist: true + StopAttacking: true + StopCasting: true + RemoveOnDamaged: true + Fail: + Refresh: true + Inspiration: true + Warmer: true + Gvg_Freez: true + End: + Dancing: true + Aeterna: true + - Status: Stun + DurationLookup: NPC_STUNATTACK + States: + NoMove: true + NoCast: true + NoAttack: true + Opt1: Stun + Flags: + SendOption: true + BossResist: true + StopAttacking: true + StopCasting: true + OverlapFail: true + Fail: + Refresh: true + Inspiration: true + Gvg_Stun: true + End: + Dancing: true + - Status: Sleep + DurationLookup: NPC_SLEEPATTACK + States: + NoMove: true + NoCast: true + NoAttack: true + Opt1: Sleep + Flags: + SendOption: true + BossResist: true + StopAttacking: true + StopCasting: true + RemoveOnDamaged: true + OverlapFail: true + Fail: + Refresh: true + Inspiration: true + Gvg_Sleep: true + End: + Dancing: true + - Status: Poison + DurationLookup: NPC_POISON + CalcFlags: + Def2: true + Regen: true + Opt2: + Poison: true + Flags: + SendOption: true + BossResist: true + StopAttacking: true + OverlapFail: true + SpreadEffect: true + Fail: + Refresh: true + Inspiration: true + - Status: Curse + DurationLookup: NPC_CURSEATTACK + CalcFlags: + Luk: true + Batk: true + Watk: true + Speed: true + Opt2: + Curse: true + Flags: + SendOption: true + BossResist: true + OverlapFail: true + SpreadEffect: true + Fail: + Refresh: true + Inspiration: true + Gvg_Curse: true + - Status: Silence + DurationLookup: NPC_SILENCEATTACK + States: + NoCast: true + Opt2: + Silence: true + Flags: + SendOption: true + BossResist: true + StopCasting: true + OverlapFail: true + SpreadEffect: true + Fail: + Refresh: true + Inspiration: true + Gvg_Silence: true + - Status: Confusion + DurationLookup: NPC_WIDECONFUSE + Flags: + BossResist: true + StopWalking: true + RemoveOnDamaged: true + OverlapFail: true + SpreadEffect: true + Fail: + Refresh: true + Inspiration: true + Confusion: true + - Status: Blind + DurationLookup: NPC_BLINDATTACK + CalcFlags: + Hit: true + Flee: true + Opt2: + Blind: true + Flags: + SendOption: true + BossResist: true + OverlapFail: true + SpreadEffect: true + Fail: + Refresh: true + Inspiration: true + Fear: true + Gvg_Blind: true + - Status: Bleeding + Icon: EFST_BLOODING + DurationLookup: NPC_BLEEDING + CalcFlags: + Regen: true + Opt2: + Bleeding: true + Flags: + SendOption: true + BossResist: true + NoSave: true + NoClearance: true + OverlapFail: true + SpreadEffect: true + Fail: + Refresh: true + Inspiration: true + - Status: Dpoison + DurationLookup: NPC_POISON + CalcFlags: + Def2: true + Regen: true + Opt2: + Dpoison: true + Flags: + SendOption: true + BossResist: true + OverlapFail: true + Fail: + Refresh: true + Inspiration: true + - Status: Provoke + Icon: EFST_PROVOKE + DurationLookup: SM_PROVOKE + CalcFlags: + Def: true + Def2: true + Batk: true + Watk: true + Flags: + BossResist: true + Debuff: true + NoSaveInfinite: true + - Status: Endure + Icon: EFST_ENDURE + DurationLookup: SM_ENDURE + CalcFlags: + Mdef: true + Dspd: true + Flags: + NoRemoveOnDead: true + NoSaveInfinite: true + - Status: Twohandquicken + Icon: EFST_TWOHANDQUICKEN + DurationLookup: KN_TWOHANDQUICKEN + CalcFlags: + Aspd: true + Hit: true + Cri: true + Opt3: + Quicken: true + Flags: + RequireWeapon: true + Fail: + Decreaseagi: true + - Status: Concentrate + Icon: EFST_CONCENTRATION + DurationLookup: AC_CONCENTRATION + CalcFlags: + Agi: true + Dex: true + Flags: + FailedMado: true + Fail: + Quagmire: true + - Status: Hiding + Icon: EFST_HIDING + DurationLookup: TF_HIDING + States: + NoMove: true + NoMoveCond: true + NoPickItem: true + NoConsumeItem: true + CalcFlags: + Speed: true + Options: + Hide: true + Flags: + OnTouch: true + StopAttacking: true + RemoveOnDamaged: true + RemoveOnChangeMap: true + NoBanishingBuster: true + NoDispell: true + NoClearance: true + End: + Closeconfine: true + Closeconfine2: true + - Status: Cloaking + Icon: EFST_CLOAKING + DurationLookup: AS_CLOAKING + States: + NoPickItem: true + CalcFlags: + Cri: true + Speed: true + Options: + Cloak: true + Flags: + OnTouch: true + StopAttacking: true + RemoveOnDamaged: true + RemoveOnMapWarp: true + NoBanishingBuster: true + NoDispell: true + NoClearance: true + - Status: Encpoison + Icon: EFST_ENCHANTPOISON + DurationLookup: AS_ENCHANTPOISON + CalcFlags: + Atk_Ele: true + Fail: + Fireweapon: true + Waterweapon: true + Windweapon: true + Earthweapon: true + Shadowweapon: true + Ghostweapon: true + - Status: Poisonreact + Icon: EFST_POISONREACT + DurationLookup: AS_POISONREACT + - Status: Quagmire + Icon: EFST_QUAGMIRE + DurationLookup: WZ_QUAGMIRE + CalcFlags: + Agi: true + Dex: true + Aspd: true + Speed: true + Flags: + NoSave: true + NoClearance: true + Debuff: true + Fail: + Speedup1: true + End: + Loud: true + Concentrate: true + Truesight: true + Windwalk: true + Magneticfield: true + Cartboost: true + Gn_Cartboost: true + Increaseagi: true + Adrenaline: true + Adrenaline2: true + Spearquicken: true + Twohandquicken: true + Onehand: true + Merc_Quicken: true + Acceleration: true + - Status: Angelus + Icon: EFST_ANGELUS + DurationLookup: AL_ANGELUS + CalcFlags: + Def2: true + MaxHp: true + Opt2: + Angelus: true + Flags: + SendOption: true + - Status: Blessing + Icon: EFST_BLESSING + DurationLookup: AL_BLESSING + CalcFlags: + Str: true + Int: true + Dex: true + Hit: true + Flags: + BossResist: true + TaekwonAngel: true + - Status: Signumcrucis + Icon: EFST_CRUCIS + DurationLookup: AL_CRUCIS + CalcFlags: + Def: true + Opt2: + SignumCrucis: true + Flags: + SendOption: true + Debuff: true + - Status: Increaseagi + Icon: EFST_INC_AGI + DurationLookup: AL_INCAGI + CalcFlags: + Agi: true + Speed: true + Aspd: true + Flags: + FailedMado: true + TaekwonAngel: true + Fail: + Quagmire: true + End: + Decreaseagi: true + Adoramus: true + - Status: Decreaseagi + Icon: EFST_DEC_AGI + DurationLookup: AL_DECAGI + CalcFlags: + Agi: true + Speed: true + Flags: + BossResist: true + NoSave: true + Debuff: true + Fail: + Speedup1: true + End: + Cartboost: true + Gn_Cartboost: true + Increaseagi: true + Adrenaline: true + Adrenaline2: true + Spearquicken: true + Twohandquicken: true + Onehand: true + Merc_Quicken: true + Acceleration: true + - Status: Slowpoison + Icon: EFST_SLOWPOISON + DurationLookup: PR_SLOWPOISON + Flags: + NoClearance: true + - Status: Impositio + Icon: EFST_IMPOSITIO + DurationLookup: PR_IMPOSITIO + CalcFlags: + Watk: true + Matk: true + Flags: + SuperNoviceAngel: true + End: + Impositio: true + - Status: Suffragium + Icon: EFST_SUFFRAGIUM + DurationLookup: PR_SUFFRAGIUM + Flags: + SuperNoviceAngel: true + - Status: Aspersio + Icon: EFST_ASPERSIO + DurationLookup: PR_ASPERSIO + CalcFlags: + Atk_Ele: true + - Status: Benedictio + Icon: EFST_BENEDICTIO + DurationLookup: PR_BENEDICTIO + CalcFlags: + Def_Ele: true + Flags: + NoSave: true + NoClearance: true + - Status: Kyrie + Icon: EFST_KYRIE + DurationLookup: PR_KYRIE + Flags: + SuperNoviceAngel: true + - Status: Magnificat + Icon: EFST_MAGNIFICAT + DurationLookup: PR_MAGNIFICAT + CalcFlags: + Regen: true + Flags: + FailedMado: true + NoSave: true + SuperNoviceAngel: true + Fail: + Offertorium: true + - Status: Gloria + Icon: EFST_GLORIA + DurationLookup: PR_GLORIA + CalcFlags: + Luk: true + Flags: + SuperNoviceAngel: true + - Status: Aeterna + Icon: EFST_LEXAETERNA + DurationLookup: PR_LEXAETERNA + Flags: + NoSave: true + Fail: + Freeze: true + - Status: Adrenaline + Icon: EFST_ADRENALINE + DurationLookup: BS_ADRENALINE + CalcFlags: + Aspd: true + Hit: true + Flags: + MadoCancel: true + RequireWeapon: true + Fail: + Quagmire: true + Decreaseagi: true + - Status: Weaponperfection + Icon: EFST_WEAPONPERFECT + DurationLookup: BS_WEAPONPERFECT + Flags: + MadoCancel: true + - Status: Overthrust + Icon: EFST_OVERTHRUST + DurationLookup: BS_OVERTHRUST + Opt3: + OverThrust: true + Flags: + MadoCancel: true + Fail: + Maxoverthrust: true + - Status: Maximizepower + Icon: EFST_MAXIMIZE + DurationLookup: BS_MAXIMIZE + CalcFlags: + Regen: true + Flags: + MadoCancel: true + - Status: Trickdead + Icon: EFST_TRICKDEAD + DurationLookup: NV_TRICKDEAD + States: + NoMove: true + NoPickItem: true + NoConsumeItem: true + NoAttack: true + NoInteract: true + CalcFlags: + Regen: true + Flags: + StopWalking: true + StopAttacking: true + StopCasting: true + RemoveOnDamaged: true + NoSave: true + NoClearance: true + RemoveOnChangeMap: true + End: + Dancing: true + - Status: Loud + Icon: EFST_SHOUT + DurationLookup: MC_LOUD + Flags: + MadoCancel: true + CalcFlags: + Str: true + Batk: true + - Status: Energycoat + Icon: EFST_ENERGYCOAT + DurationLookup: MG_ENERGYCOAT + Opt3: + EnergyCoat: true + - Status: Brokenarmor + Icon: EFST_BROKENARMOR + DurationLookup: NPC_ARMORBRAKE + - Status: Brokenweapon + Icon: EFST_BROKENWEAPON + DurationLookup: NPC_WEAPONBRAKER + - Status: Hallucination + Icon: EFST_ILLUSION + DurationLookup: NPC_HALLUCINATION + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + Debuff: true + SpreadEffect: true + Fail: + Inspiration: true + - Status: Weight50 + Icon: EFST_WEIGHTOVER50 + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Weight90 + Icon: EFST_WEIGHTOVER90 + Flags: + NoRemoveOnDead: true + NoClearbuff: true + StopAttacking: true + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Aspdpotion0 + Icon: EFST_ATTHASTE_POTION1 + CalcFlags: + Aspd: true + Flags: + NoClearance: true + OverlapIgnoreLevel: true + - Status: Aspdpotion1 + Icon: EFST_ATTHASTE_POTION2 + CalcFlags: + Aspd: true + Flags: + NoClearance: true + OverlapIgnoreLevel: true + - Status: Aspdpotion2 + Icon: EFST_ATTHASTE_POTION3 + CalcFlags: + Aspd: true + Flags: + OverlapIgnoreLevel: true + - Status: Aspdpotion3 + Icon: EFST_ATTHASTE_INFINITY + CalcFlags: + Aspd: true + Flags: + NoClearance: true + OverlapIgnoreLevel: true + - Status: Speedup0 + Icon: EFST_MOVHASTE_HORSE + CalcFlags: + Speed: true + Flags: + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + - Status: Speedup1 + Icon: EFST_MOVHASTE_POTION + CalcFlags: + Speed: true + Flags: + NoSave: true + NoClearance: true + - Status: Atkpotion + Icon: EFST_PLUSATTACKPOWER + CalcFlags: + Batk: true + Flags: + NoRemoveOnDead: true + NoClearance: true + OverlapIgnoreLevel: true + - Status: Matkpotion + Icon: EFST_PLUSMAGICPOWER + CalcFlags: + Matk: true + Flags: + NoRemoveOnDead: true + NoClearance: true + OverlapIgnoreLevel: true + - Status: Wedding + States: + NoAttack: true + CalcFlags: + Speed: true + Options: + Wedding: true + Flags: + SendLook: true + StopAttacking: true + NoRemoveOnDead: true + NoBanishingBuster: true + NoDispell: true + NoClearance: true + - Status: Slowdown + CalcFlags: + Speed: true + Flags: + Debuff: true + - Status: Ankle + Icon: EFST_ANKLESNARE + DurationLookup: HT_ANKLESNARE + States: + NoMove: true + Flags: + NoClearbuff: true + StopWalking: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + RemoveOnChangeMap: true + MinDuration: 5000 + - Status: Keeping + DurationLookup: NPC_KEEPING + CalcFlags: + Def: true + - Status: Barrier + Icon: EFST_BARRIER + DurationLookup: NPC_BARRIER + CalcFlags: + Mdef: true + Def: true + - Status: Stripweapon + Icon: EFST_NOEQUIPWEAPON + DurationLookup: RG_STRIPWEAPON + CalcFlags: + Watk: true + Flags: + Debuff: true + BossResist: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Stripshield + Icon: EFST_NOEQUIPSHIELD + DurationLookup: RG_STRIPSHIELD + CalcFlags: + Def: true + Flags: + Debuff: true + BossResist: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Striparmor + Icon: EFST_NOEQUIPARMOR + DurationLookup: RG_STRIPARMOR + CalcFlags: + Vit: true + Flags: + Debuff: true + BossResist: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Striphelm + Icon: EFST_NOEQUIPHELM + DurationLookup: RG_STRIPHELM + CalcFlags: + Int: true + Flags: + Debuff: true + BossResist: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Cp_Weapon + Icon: EFST_PROTECTWEAPON + DurationLookup: AM_CP_WEAPON + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + RemoveChemicalProtect: true + - Status: Cp_Shield + Icon: EFST_PROTECTSHIELD + DurationLookup: AM_CP_SHIELD + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + RemoveChemicalProtect: true + - Status: Cp_Armor + Icon: EFST_PROTECTARMOR + DurationLookup: AM_CP_ARMOR + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + RemoveChemicalProtect: true + - Status: Cp_Helm + Icon: EFST_PROTECTHELM + DurationLookup: AM_CP_HELM + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + RemoveChemicalProtect: true + - Status: Autoguard + Icon: EFST_AUTOGUARD + DurationLookup: CR_AUTOGUARD + Flags: + NoClearance: true + RequireShield: true + - Status: Reflectshield + Icon: EFST_REFLECTSHIELD + DurationLookup: CR_REFLECTSHIELD + Flags: + NoClearance: true + RequireShield: true + End: + Reflectdamage: true + - Status: Splasher + Icon: EFST_SPLASHER + DurationLookup: AS_SPLASHER + - Status: Providence + Icon: EFST_PROVIDENCE + DurationLookup: CR_PROVIDENCE + CalcFlags: + All: true + Flags: + NoSave: true + - Status: Defender + Icon: EFST_DEFENDER + DurationLookup: CR_DEFENDER + CalcFlags: + Speed: true + Aspd: true + Flags: + RequireShield: true + - Status: Magicrod + Icon: EFST_MAGICROD + DurationLookup: SA_MAGICROD + Flags: + NoSave: true + - Status: Spellbreaker + - Status: Autospell + Icon: EFST_AUTOSPELL + DurationLookup: SA_AUTOSPELL + Flags: + NoDispell: true + NoBanishingBuster: true + NoRemoveOnDead: true + NoClearance: true + - Status: Sighttrasher + - Status: Autoberserk + Icon: EFST_AUTOBERSERK + DurationLookup: SM_AUTOBERSERK + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Spearquicken + Icon: EFST_SPEARQUICKEN + DurationLookup: CR_SPEARQUICKEN + CalcFlags: + Aspd: true + Cri: true + Flee: true + Opt3: + Quicken: true + Flags: + FailedMado: true + RequireWeapon: true + Fail: + Quagmire: true + - Status: Autocounter + Icon: EFST_AUTOCOUNTER + DurationLookup: KN_AUTOCOUNTER + States: + NoAttack: true + NoMove: true + NoDropItem: true + NoInteract: true + - Status: Sight + DurationLookup: MG_SIGHT + Options: + Sight: true + Flags: + SendOption: true + NoDispell: true + NoBanishingBuster: true + NoSave: true + - Status: Safetywall + DurationLookup: MG_SAFETYWALL + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Ruwach + DurationLookup: AL_RUWACH + Options: + Ruwach: true + Flags: + SendOption: true + - Status: Extremityfist + DurationLookup: MO_EXTREMITYFIST + CalcFlags: + Regen: true + Flags: + Debuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Explosionspirits + Icon: EFST_EXPLOSIONSPIRITS + DurationLookup: MO_EXPLOSIONSPIRITS + CalcFlags: + Cri: true + Regen: true + Opt3: + ExplosionSpirits: true + Flags: + Debuff: true + NoClearance: true + - Status: Combo + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapIgnoreLevel: true + - Status: Bladestop_Wait + DurationLookup: MO_BLADESTOP + States: + NoMove: true + Flags: + RemoveOnChangeMap: true + - Status: Bladestop + Icon: EFST_BLADESTOP + DurationLookup: MO_BLADESTOP + States: + NoMove: true + NoPickItem: true + NoDropItem: true + NoAttack: true + NoInteract: true + Opt3: + BladeStop: true + Flags: + MobLoseTarget: true + NoClearbuff: true + NoSave: true + NoClearance: true + RemoveOnChangeMap: true + - Status: Fireweapon + Icon: EFST_PROPERTYFIRE + DurationLookup: SA_FLAMELAUNCHER + CalcFlags: + All: true + Flags: + NoRemoveOnDead: true + - Status: Waterweapon + Icon: EFST_PROPERTYWATER + DurationLookup: SA_FROSTWEAPON + CalcFlags: + All: true + Flags: + NoRemoveOnDead: true + - Status: Windweapon + Icon: EFST_PROPERTYWIND + DurationLookup: SA_LIGHTNINGLOADER + CalcFlags: + All: true + Flags: + NoRemoveOnDead: true + - Status: Earthweapon + Icon: EFST_PROPERTYGROUND + DurationLookup: SA_SEISMICWEAPON + CalcFlags: + All: true + Flags: + NoRemoveOnDead: true + - Status: Volcano + Icon: EFST_GROUNDMAGIC + DurationLookup: SA_VOLCANO + CalcFlags: + Watk: true + Matk: true + Flags: + NoSave: true + NoClearance: true + - Status: Deluge + Icon: EFST_GROUNDMAGIC + DurationLookup: SA_DELUGE + CalcFlags: + MaxHp: true + Flags: + NoSave: true + NoClearance: true + - Status: Violentgale + Icon: EFST_GROUNDMAGIC + DurationLookup: SA_VIOLENTGALE + CalcFlags: + Flee: true + Flags: + NoSave: true + NoClearance: true + - Status: Watk_Element + DurationLookup: MS_MAGNUM + - Status: Armor + DurationLookup: NPC_DEFENDER + - Status: Armor_Element_Water + Icon: EFST_RESIST_PROPERTY_WATER + CalcFlags: + All: true + Flags: + NoDispell: true + OverlapIgnoreLevel: true + - Status: Nochat + States: + NoPickItem: true + NoPickItemCond: true + NoDropItem: true + NoDropItemCond: true + NoChat: true + NoChatCond: true + NoConsumeItem: true + NoConsumeItemCond: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + OverlapFail: true + NoClearance: true + - Status: Protectexp + Icon: EFST_PROTECTEXP + DurationLookup: WE_BABY + States: + NoDeathPenalty: true + - Status: Aurablade + Icon: EFST_AURABLADE + DurationLookup: LK_AURABLADE + Opt3: + AuraBlade: true + Flags: + NoSave: true + RequireWeapon: true + - Status: Parrying + Icon: EFST_PARRYING + DurationLookup: LK_PARRYING + Flags: + NoSave: true + NoClearance: true + RequireWeapon: true + - Status: Concentration + Icon: EFST_LKCONCENTRATION + DurationLookup: LK_CONCENTRATION + CalcFlags: + Hit: true + Def: true + Opt3: + Quicken: true + Flags: + NoSave: true + - Status: Tensionrelax + Icon: EFST_TENSIONRELAX + DurationLookup: LK_TENSIONRELAX + CalcFlags: + Regen: true + Flags: + NoSave: true + NoClearance: true + - Status: Berserk + Icon: EFST_BERSERK + DurationLookup: LK_BERSERK + States: + NoCast: true + NoChat: true + NoEquipItem: true + NoUnEquipItem: true + NoConsumeItem: true + CalcFlags: + Def: true + Def2: true + Mdef: true + MDef2: true + Flee: true + Speed: true + Aspd: true + MaxHp: true + Regen: true + Opt3: + Berserk: true + Flags: + NoSave: true + Fail: + Saturdaynightfever: true + _Bloodylust: true + - Status: Fury + - Status: Gospel + Icon: EFST_GOSPEL + DurationLookup: PA_GOSPEL + States: + NoMove: true + NoMoveCond: true + CalcFlags: + Speed: true + Aspd: true + Flags: + NoSave: true + - Status: Assumptio + Icon: EFST_ASSUMPTIO_BUFF + DurationLookup: HP_ASSUMPTIO + CalcFlags: + Def: true + Opt3: + Assumptio: true + End: + Kaite: true + - Status: Basilica + Icon: EFST_BASILICA_BUFF + DurationLookup: HP_BASILICA + CalcFlags: + All: true + States: + NoAttack: true + Flags: + NoSave: true + NoClearance: true + - Status: Guildaura + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Magicpower + Icon: EFST_MAGICPOWER + DurationLookup: HW_MAGICPOWER + CalcFlags: + Matk: true + Flags: + NoSave: true + End: + Magicpower: true + - Status: Edp + Icon: EFST_EDP + DurationLookup: ASC_EDP + CalcFlags: + Watk: true + Flags: + NoRemoveOnDead: true + NoDispell: true + NoBanishingBuster: true + NoSave: true + - Status: Truesight + Icon: EFST_TRUESIGHT + DurationLookup: SN_SIGHT + CalcFlags: + Str: true + Agi: true + Vit: true + Int: true + Dex: true + Luk: true + Cri: true + Hit: true + Flags: + FailedMado: true + NoSave: true + Fail: + Quagmire: true + - Status: Windwalk + Icon: EFST_WINDWALK + DurationLookup: SN_WINDWALK + CalcFlags: + Flee: true + Speed: true + Flags: + FailedMado: true + NoSave: true + Fail: + Quagmire: true + - Status: Meltdown + Icon: EFST_MELTDOWN + DurationLookup: WS_MELTDOWN + Flags: + MadoCancel: true + NoRemoveOnDead: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + - Status: Cartboost + Icon: EFST_CARTBOOST + DurationLookup: WS_CARTBOOST + CalcFlags: + Speed: true + Flags: + MadoCancel: true + NoRemoveOnDead: true + NoClearance: true + NoSave: true + NoBanishingBuster: true + NoDispell: true + Fail: + Quagmire: true + End: + Decreaseagi: true + EndReturn: true + - Status: Chasewalk + Icon: EFST_CHASEWALK + DurationLookup: ST_CHASEWALK + States: + NoPickItem: true + CalcFlags: + Speed: true + Options: + ChaseWalk: true + Cloak: true + Flags: + OnTouch: true + StopAttacking: true + RemoveOnDamaged: true + RemoveOnChangeMap: true + NoBanishingBuster: true + NoDispell: true + NoClearance: true + - Status: Rejectsword + Icon: EFST_SWORDREJECT + DurationLookup: ST_REJECTSWORD + - Status: Marionette + Icon: EFST_MARIONETTE_MASTER + DurationLookup: CG_MARIONETTE + CalcFlags: + Str: true + Agi: true + Vit: true + Int: true + Dex: true + Luk: true + Opt3: + Marionette: true + Flags: + RemoveOnChangeMap: true + OverlapFail: true + - Status: Marionette2 + Icon: EFST_MARIONETTE + DurationLookup: CG_MARIONETTE + CalcFlags: + Str: true + Agi: true + Vit: true + Int: true + Dex: true + Luk: true + Opt3: + Marionette: true + Flags: + RemoveOnChangeMap: true + OverlapFail: true + - Status: Changeundead + Icon: EFST_PROPERTYUNDEAD + DurationLookup: NPC_CHANGEUNDEAD + CalcFlags: + Def_Ele: true + Opt3: + Undead: true + Flags: + Debuff: true + NoClearance: true + End: + Blessing: true + Increaseagi: true + - Status: Jointbeat + Icon: EFST_JOINTBEAT + DurationLookup: LK_JOINTBEAT + CalcFlags: + Batk: true + Def2: true + Speed: true + Aspd: true + Flags: + NoSave: true + NoClearance: true + Debuff: true + - Status: Mindbreaker + Icon: EFST_MINDBREAKER + DurationLookup: PF_MINDBREAKER + CalcFlags: + Matk: true + MDef2: true + Flags: + NoSave: true + Debuff: true + - Status: Memorize + Icon: EFST_MEMORIZE + DurationLookup: PF_MEMORIZE + Flags: + NoSave: true + - Status: Fogwall + Icon: EFST_FOGWALL + DurationLookup: PF_FOGWALL + Flags: + BossResist: true + NoSave: true + NoClearance: true + - Status: Spiderweb + Icon: EFST_SPIDERWEB + DurationLookup: PF_SPIDERWEB + CalcFlags: + Flee: true + Flags: + StopWalking: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + NoSave: true + Debuff: true + - Status: Devotion + Icon: EFST_DEVOTION + DurationLookup: CR_DEVOTION + Flags: + NoSave: true + RemoveOnChangeMap: true + OverlapIgnoreLevel: true + - Status: Sacrifice + DurationLookup: PA_SACRIFICE + - Status: Steelbody + Icon: EFST_STEELBODY + DurationLookup: MO_STEELBODY + States: + NoCast: true + CalcFlags: + Def: true + Mdef: true + Aspd: true + Speed: true + Opt3: + SteelBody: true + - Status: Orcish + DurationLookup: SA_REVERSEORCISH + Flags: + Debuff: true + Options: + Orcish: true + Flags: + SendOption: true + - Status: Readystorm + Icon: EFST_STORMKICK_ON + DurationLookup: TK_READYSTORM + Flags: + NoRemoveOnDead: true + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Readydown + Icon: EFST_DOWNKICK_ON + DurationLookup: TK_READYDOWN + Flags: + NoRemoveOnDead: true + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Readyturn + Icon: EFST_TURNKICK_ON + DurationLookup: TK_READYTURN + Flags: + NoRemoveOnDead: true + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Readycounter + Icon: EFST_COUNTER_ON + DurationLookup: TK_READYCOUNTER + Flags: + NoRemoveOnDead: true + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Dodge + Icon: EFST_DODGE_ON + DurationLookup: TK_DODGE + Flags: + NoRemoveOnDead: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + - Status: Run + Icon: EFST_RUN + DurationLookup: TK_RUN + CalcFlags: + Speed: true + Dspd: true + Flags: + NoSave: true + NoClearance: true + RemoveOnChangeMap: true + - Status: Shadowweapon + Icon: EFST_PROPERTYDARK + DurationLookup: TK_SEVENWIND + CalcFlags: + Atk_Ele: true + Flags: + NoSave: true + NoClearance: true + - Status: Adrenaline2 + Icon: EFST_ADRENALINE2 + DurationLookup: BS_ADRENALINE2 + CalcFlags: + Aspd: true + Flags: + MadoCancel: true + NoSave: true + RequireWeapon: true + Fail: + Quagmire: true + Decreaseagi: true + - Status: Ghostweapon + Icon: EFST_PROPERTYTELEKINESIS + DurationLookup: TK_SEVENWIND + CalcFlags: + Atk_Ele: true + Flags: + NoSave: true + NoClearance: true + - Status: Kaizel + Icon: EFST_KAIZEL + DurationLookup: SL_KAIZEL + - Status: Kaahi + Icon: EFST_KAAHI + DurationLookup: SL_KAAHI + Flags: + NoSave: true + NoClearance: true + End: + Kaahi: true + - Status: Kaupe + Icon: EFST_KAUPE + DurationLookup: SL_KAUPE + Flags: + NoSave: true + NoClearance: true + - Status: Onehand + Icon: EFST_ONEHANDQUICKEN + DurationLookup: KN_ONEHAND + CalcFlags: + Aspd: true + Opt3: + Quicken: true + Flags: + NoSave: true + NoClearance: true + RequireWeapon: true + Fail: + Decreaseagi: true + End: + Aspdpotion0: true + Aspdpotion1: true + Aspdpotion2: true + Aspdpotion3: true + - Status: Preserve + Icon: EFST_PRESERVE + DurationLookup: ST_PRESERVE + Flags: + NoSave: true + - Status: Battleorders + Icon: EFST_GDSKILL_BATTLEORDER + DurationLookup: GD_BATTLEORDER + CalcFlags: + Str: true + Int: true + Dex: true + - Status: Regeneration + Icon: EFST_GDSKILL_REGENERATION + DurationLookup: GD_REGENERATION + CalcFlags: + Regen: true + Flags: + NoBanishingBuster: true + NoDispell: true + NoClearance: true + NoSaveInfinite: true + - Status: Doublecast + Icon: EFST_DOUBLECASTING + DurationLookup: PF_DOUBLECASTING + Flags: + NoSave: true + NoClearance: true + - Status: Maxoverthrust + Icon: EFST_OVERTHRUSTMAX + DurationLookup: WS_OVERTHRUSTMAX + Opt3: + OverThrust: true + Flags: + MadoCancel: true + NoSave: true + End: + Overthrust: true + - Status: Hermode + Icon: EFST_HERMODE + DurationLookup: CG_HERMODE + - Status: Shrink + Icon: EFST_CR_SHRINK + DurationLookup: CR_SHRINK + Flags: + NoRemoveOnDead: true + NoDispell: true + NoBanishingBuster: true + NoSave: true + - Status: Sightblaster + Icon: EFST_WZ_SIGHTBLASTER + DurationLookup: WZ_SIGHTBLASTER + Options: + Sight: true + Flags: + NoSave: true + NoDispell: true + NoBanishingBuster: true + - Status: Winkcharm + Icon: EFST_DC_WINKCHARM + DurationLookup: DC_WINKCHARM + Flags: + RemoveOnDamaged: true + Debuff: true + - Status: Closeconfine + Icon: EFST_RG_CCONFINE_M + DurationLookup: RG_CLOSECONFINE + States: + NoMove: true + CalcFlags: + Flee: true + Flags: + StopWalking: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + NoRemoveOnDead: true + RemoveOnChangeMap: true + - Status: Closeconfine2 + Icon: EFST_RG_CCONFINE_S + DurationLookup: RG_CLOSECONFINE + States: + NoMove: true + Flags: + StopWalking: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + NoRemoveOnDead: true + RemoveOnChangeMap: true + OverlapFail: true + - Status: Dancing + Icon: EFST_BDPLAYING + DurationLookup: BD_ENCORE + States: + NoMove: true + NoMoveCond: true + CalcFlags: + Speed: true + Regen: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + RemoveOnChangeMap: true + RequireWeapon: true + OverlapIgnoreLevel: true + - Status: Elementalchange + Icon: EFST_ARMOR_PROPERTY + DurationLookup: NPC_ATTRICHANGE + CalcFlags: + Def_Ele: true + Flags: + NoRemoveOnDead: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Richmankim + Icon: EFST_RICHMANKIM + DurationLookup: BD_RICHMANKIM + Flags: + BossResist: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Richmankim: true + Eternalchaos: true + Drumbattle: true + Nibelungen: true + Rokisweil: true + Intoabyss: true + Siegfried: true + - Status: Eternalchaos + Icon: EFST_ETERNALCHAOS + DurationLookup: BD_ETERNALCHAOS + CalcFlags: + Def2: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Richmankim: true + Eternalchaos: true + Drumbattle: true + Nibelungen: true + Rokisweil: true + Intoabyss: true + Siegfried: true + - Status: Drumbattle + Icon: EFST_DRUMBATTLEFIELD + DurationLookup: BD_DRUMBATTLEFIELD + CalcFlags: + Def: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Richmankim: true + Eternalchaos: true + Drumbattle: true + Nibelungen: true + Rokisweil: true + Intoabyss: true + Siegfried: true + - Status: Nibelungen + Icon: EFST_RINGNIBELUNGEN + DurationLookup: BD_RINGNIBELUNGEN + CalcFlags: + All: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Richmankim: true + Eternalchaos: true + Drumbattle: true + Nibelungen: true + Rokisweil: true + Intoabyss: true + Siegfried: true + - Status: Rokisweil + Icon: EFST_ROKISWEIL + DurationLookup: BD_ROKISWEIL + States: + NoCast: true + Flags: + BossResist: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Richmankim: true + Eternalchaos: true + Drumbattle: true + Nibelungen: true + Rokisweil: true + Intoabyss: true + Siegfried: true + - Status: Intoabyss + Icon: EFST_INTOABYSS + DurationLookup: BD_INTOABYSS + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Richmankim: true + Eternalchaos: true + Drumbattle: true + Nibelungen: true + Rokisweil: true + Intoabyss: true + Siegfried: true + - Status: Siegfried + Icon: EFST_SIEGFRIED + DurationLookup: BD_SIEGFRIED + CalcFlags: + All: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Richmankim: true + Eternalchaos: true + Drumbattle: true + Nibelungen: true + Rokisweil: true + Intoabyss: true + Siegfried: true + - Status: Whistle + Icon: EFST_WHISTLE + DurationLookup: BA_WHISTLE + CalcFlags: + Flee: true + Flee2: true + Flags: + NoRemoveOnDead: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Whistle: true + Assncros: true + Poembragi: true + Appleidun: true + - Status: Assncros + Icon: EFST_ASSASSINCROSS + DurationLookup: BA_ASSASSINCROSS + CalcFlags: + Aspd: true + Flags: + NoRemoveOnDead: true + FailedMado: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + Fail: + Quagmire: true + End: + Whistle: true + Assncros: true + Poembragi: true + Appleidun: true + - Status: Poembragi + Icon: EFST_POEMBRAGI + DurationLookup: BA_POEMBRAGI + Flags: + NoRemoveOnDead: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Whistle: true + Assncros: true + Poembragi: true + Appleidun: true + - Status: Appleidun + Icon: EFST_APPLEIDUN + DurationLookup: BA_APPLEIDUN + CalcFlags: + MaxHp: true + Flags: + NoRemoveOnDead: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Whistle: true + Assncros: true + Poembragi: true + Appleidun: true + - Status: Modechange + DurationLookup: NPC_EMOTION + CalcFlags: + Mode: true + - Status: Humming + Icon: EFST_HUMMING + DurationLookup: DC_HUMMING + CalcFlags: + Hit: true + Flags: + NoRemoveOnDead: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Dontforgetme: true + Humming: true + Fortune: true + Service4u: true + - Status: Dontforgetme + Icon: EFST_DONTFORGETME + DurationLookup: DC_DONTFORGETME + CalcFlags: + Speed: true + Aspd: true + Flags: + NoRemoveOnDead: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + Fail: + Speedup1: true + End: + Increaseagi: true + Adrenaline: true + Adrenaline2: true + Spearquicken: true + Twohandquicken: true + Onehand: true + Merc_Quicken: true + Acceleration: true + Dontforgetme: true + Humming: true + Fortune: true + Service4u: true + - Status: Fortune + Icon: EFST_FORTUNEKISS + DurationLookup: DC_FORTUNEKISS + CalcFlags: + All: true + Flags: + NoRemoveOnDead: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Dontforgetme: true + Humming: true + Fortune: true + Service4u: true + - Status: Service4u + Icon: EFST_SERVICEFORYOU + DurationLookup: DC_SERVICEFORYOU + CalcFlags: + All: true + Flags: + NoRemoveOnDead: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Dontforgetme: true + Humming: true + Fortune: true + Service4u: true + - Status: Stop + Icon: EFST_STOP + DurationLookup: NPC_STOP + States: + NoMove: true + Flags: + StopWalking: true + NoSave: true + NoClearance: true + RemoveOnChangeMap: true + Debuff: true + - Status: Spurt + Icon: EFST_STRUP + DurationLookup: TK_RUN + CalcFlags: + Str: true + Flags: + NoSave: true + NoClearance: true + RequireWeapon: true + - Status: Spirit + Icon: EFST_SOULLINK + DurationLookup: SL_HIGH + CalcFlags: + All: true + Opt3: + SoulLink: true + Flags: + NoClearance: true + NoSave: true + NoBanishingBuster: true + End: + Soulgolem: true + Soulshadow: true + Soulfalcon: true + Soulfairy: true + - Status: Coma + DurationLookup: NPC_DARKBLESSING + Flags: + BossResist: true + MvpResist: true + - Status: Intravision + Icon: EFST_CLAIRVOYANCE + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Incallstatus + CalcFlags: + Str: true + Agi: true + Vit: true + Int: true + Dex: true + Luk: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + - Status: Incstr + CalcFlags: + Str: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + - Status: Incagi + CalcFlags: + Agi: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Incvit + CalcFlags: + Vit: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Incint + CalcFlags: + Int: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Incdex + CalcFlags: + Dex: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Incluk + CalcFlags: + Luk: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Inchit + CalcFlags: + Hit: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Inchitrate + DurationLookup: NPC_POWERUP + CalcFlags: + Hit: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Incflee + CalcFlags: + Flee: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Incfleerate + DurationLookup: NPC_AGIUP + CalcFlags: + Flee: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Incmhprate + CalcFlags: + MaxHp: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Incmsprate + CalcFlags: + MaxSp: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Incatkrate + CalcFlags: + Batk: true + Watk: true + Opt3: + ExplosionSpirits: true + Flags: + SendOption: true + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Incmatkrate + CalcFlags: + Matk: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Incdefrate + CalcFlags: + Def: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Strfood + Icon: EFST_FOOD_STR + CalcFlags: + Str: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Food_Str_Cash: true + - Status: Agifood + Icon: EFST_FOOD_AGI + CalcFlags: + Agi: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Food_Agi_Cash: true + - Status: Vitfood + Icon: EFST_FOOD_VIT + CalcFlags: + Vit: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Food_Vit_Cash: true + - Status: Intfood + Icon: EFST_FOOD_INT + CalcFlags: + Int: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Food_Int_Cash: true + - Status: Dexfood + Icon: EFST_FOOD_DEX + CalcFlags: + Dex: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Food_Dex_Cash: true + - Status: Lukfood + Icon: EFST_FOOD_LUK + CalcFlags: + Luk: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Food_Luk_Cash: true + - Status: Hitfood + Icon: EFST_FOOD_BASICHIT + CalcFlags: + Hit: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Fleefood + Icon: EFST_FOOD_BASICAVOIDANCE + CalcFlags: + Flee: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Batkfood + CalcFlags: + Batk: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Watkfood + CalcFlags: + Watk: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Matkfood + CalcFlags: + Matk: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Scresist + DurationLookup: PA_GOSPEL + - Status: Xmas + States: + NoAttack: true + Options: + Xmas: true + Flags: + SendLook: true + StopAttacking: true + NoRemoveOnDead: true + NoBanishingBuster: true + NoDispell: true + NoClearance: true + - Status: Warm + Icon: EFST_SG_SUN_WARM + DurationLookup: SG_SUN_WARM + Opt3: + Warm: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + RemoveOnChangeMap: true + RemoveOnMapWarp: true + - Status: Sun_Comfort + Icon: EFST_SUN_COMFORT + DurationLookup: SG_SUN_COMFORT + CalcFlags: + Def2: true + Flags: + RemoveOnMapWarp: true + - Status: Moon_Comfort + Icon: EFST_MOON_COMFORT + DurationLookup: SG_MOON_COMFORT + CalcFlags: + Flee: true + Flags: + RemoveOnMapWarp: true + - Status: Star_Comfort + Icon: EFST_STAR_COMFORT + DurationLookup: SG_STAR_COMFORT + CalcFlags: + Aspd: true + Flags: + RemoveOnMapWarp: true + - Status: Fusion + DurationLookup: SG_FUSION + CalcFlags: + Speed: true + Options: + Flying: true + Flags: + SendOption: true + NoRemoveOnDead: true + End: + Spirit: true + - Status: Skillrate_Up + DurationLookup: SG_FRIEND + - Status: Ske + DurationLookup: SL_SKE + CalcFlags: + Batk: true + Watk: true + Def: true + Def2: true + Opt3: + EnergyCoat: true + - Status: Kaite + Icon: EFST_KAITE + DurationLookup: SL_KAITE + Opt3: + Kaite: true + Flags: + NoSave: true + NoClearance: true + End: + Assumptio: true + - Status: Swoo + Icon: EFST_SWOO + DurationLookup: SL_SWOO + CalcFlags: + Speed: true + Opt3: + OverThrust: true + Flags: + NonPlayer: true + - Status: Ska + DurationLookup: SL_SKA + CalcFlags: + Def2: true + MDef2: true + Speed: true + Aspd: true + Opt3: + SteelBody: true + Flags: + NonPlayer: true + - Status: Earthscroll + Icon: EFST_EARTHSCROLL + DurationLookup: TK_SPTIME + CalcFlags: + Def: true + Mdef: true + Aspd: true + Flags: + NoRemoveOnDead: true + - Status: Miracle + Icon: EFST_SOULLINK + Flags: + NoDispell: true + NoBanishingBuster: true + RemoveOnMapWarp: true + NoRemoveOnDead: true + NoClearance: true + - Status: Madnesscancel + Icon: EFST_GS_MADNESSCANCEL + DurationLookup: GS_MADNESSCANCEL + States: + NoMove: true + CalcFlags: + Aspd: true + Flags: + NoDispell: true + NoBanishingBuster: true + Fail: + P_Alter: true + Heat_Barrel: true + End: + Adjustment: true + - Status: Adjustment + Icon: EFST_GS_ADJUSTMENT + DurationLookup: GS_ADJUSTMENT + CalcFlags: + Hit: true + Flee: true + Flags: + NoDispell: true + NoBanishingBuster: true + End: + Madnesscancel: true + - Status: Increasing + Icon: EFST_GS_ACCURACY + DurationLookup: GS_INCREASING + CalcFlags: + Agi: true + Dex: true + Hit: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Gatlingfever + Icon: EFST_GS_GATLINGFEVER + DurationLookup: GS_GATLINGFEVER + CalcFlags: + Flee: true + Speed: true + Aspd: true + Flags: + NoDispell: true + NoBanishingBuster: true + RequireWeapon: true + - Status: Tatamigaeshi + DurationLookup: NJ_TATAMIGAESHI + - Status: Utsusemi + Icon: EFST_NJ_UTSUSEMI + DurationLookup: NJ_UTSUSEMI + Flags: + NoSave: true + NoClearance: true + NoBanishingBuster: true + NoDispell: true + - Status: Bunsinjyutsu + Icon: EFST_NJ_BUNSINJYUTSU + DurationLookup: NJ_BUNSINJYUTSU + CalcFlags: + Dye: true + Opt3: + Bunsin: true + Flags: + NoSave: true + NoClearance: true + - Status: Kaensin + - Status: Suiton + Icon: EFST_NJ_SUITON + DurationLookup: NJ_SUITON + CalcFlags: + Agi: true + Speed: true + Flags: + BossResist: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + NoRemoveOnDead: true + Debuff: true + - Status: Nen + Icon: EFST_NJ_NEN + DurationLookup: NJ_NEN + CalcFlags: + Str: true + Int: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Knowledge + DurationLookup: SG_KNOWLEDGE + CalcFlags: + All: true + Flags: + RestartOnMapWarp: true + - Status: Sma + Icon: EFST_SMA_READY + DurationLookup: SL_SMA + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Fling + DurationLookup: GS_FLING + CalcFlags: + Def: true + Def2: true + - Status: Avoid + DurationLookup: HLIF_AVOID + CalcFlags: + Speed: true + - Status: Change + DurationLookup: HLIF_CHANGE + CalcFlags: + Vit: true + Int: true + Flags: + RemoveOnChangeMap: true + Fail: + Change: true + - Status: Bloodlust + DurationLookup: HAMI_BLOODLUST + CalcFlags: + Batk: true + Watk: true + - Status: Fleet + DurationLookup: HFLI_FLEET + CalcFlags: + Aspd: true + Batk: true + Watk: true + - Status: Speed + DurationLookup: HFLI_SPEED + CalcFlags: + Flee: true + - Status: Defence + DurationLookup: HAMI_DEFENCE + CalcFlags: + Vit: true + - Status: Incaspdrate + CalcFlags: + Aspd: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Incflee2 + Icon: EFST_PLUSAVOIDVALUE + CalcFlags: + Flee2: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + - Status: Jailed + States: + NoWarp: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Enchantarms + Icon: EFST_WEAPONPROPERTY + DurationLookup: ITEM_ENCHANTARMS + CalcFlags: + Atk_Ele: true + Flags: + SendVal1: true + OverlapIgnoreLevel: true + - Status: Magicalattack + DurationLookup: NPC_MAGICALATTACK + CalcFlags: + Matk: true + - Status: Armorchange + DurationLookup: NPC_STONESKIN + CalcFlags: + Def: true + Mdef: true + - Status: Criticalwound + Icon: EFST_CRITICALWOUND + DurationLookup: NPC_CRITICALWOUND + Flags: + Debuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Magicmirror + DurationLookup: NPC_MAGICMIRROR + - Status: Slowcast + Icon: EFST_SLOWCAST + DurationLookup: NPC_SLOWCAST + Flags: + Debuff: true + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Summer + States: + NoAttack: true + Options: + Summer: true + Flags: + SendLook: true + StopAttacking: true + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Expboost + Icon: EFST_CASH_PLUSEXP + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + SendVal1: true + - Status: Itemboost + Icon: EFST_CASH_RECEIVEITEM + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + SendVal1: true + - Status: Bossmapinfo + Icon: EFST_CASH_BOSS_ALARM + Flags: + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + RemoveOnMapWarp: true + OverlapFail: true + - Status: Lifeinsurance + Icon: EFST_CASH_DEATHPENALTY + States: + NoDeathPenalty: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + - Status: Inccri + Icon: EFST_CRITICALPERCENT + CalcFlags: + Cri: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + #- Status: Incdef + #- Status: Incbaseatk + #- Status: Fastcast + - Status: Mdef_Rate + Icon: EFST_PROTECT_MDEF + CalcFlags: + Mdef: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + #- Status: Hpregen + - Status: Inchealrate + Icon: EFST_HEALPLUS + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Pneuma + DurationLookup: AL_PNEUMA + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Autotrade + Flags: + NoRemoveOnDead: true + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Ksprotected + - Status: Armor_Resist + CalcFlags: + All: true + Flags: + OverlapIgnoreLevel: true + - Status: Spcost_Rate + Icon: EFST_ATKER_BLOOD + CalcFlags: + All: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Commonsc_Resist + Icon: EFST_TARGET_BLOOD + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Sevenwind + DurationLookup: TK_SEVENWIND + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + - Status: Def_Rate + Icon: EFST_PROTECT_DEF + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + #- Status: Spregen + - Status: Walkspeed + CalcFlags: + Speed: true + - Status: Merc_Fleeup + Icon: EFST_MER_FLEE + CalcFlags: + Flee: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Merc_Atkup + Icon: EFST_MER_ATK + CalcFlags: + Watk: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Merc_Hpup + Icon: EFST_MER_HP + CalcFlags: + MaxHp: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Merc_Spup + Icon: EFST_MER_SP + CalcFlags: + MaxSp: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Merc_Hitup + Icon: EFST_MER_HIT + CalcFlags: + Hit: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Merc_Quicken + DurationLookup: MER_QUICKEN + CalcFlags: + Aspd: true + Opt3: + Quicken: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + Fail: + Decreaseagi: true + - Status: Rebirth + DurationLookup: NPC_REBIRTH + #- Status: Skillcastrate + #- Status: Defratioatk + #- Status: Hpdrain + #- Status: Skillatkbonus + - Status: Itemscript + CalcFlags: + All: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: S_Lifepotion + Icon: EFST_S_LIFEPOTION + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + NoRemoveOnDead: true + - Status: L_Lifepotion + Icon: EFST_L_LIFEPOTION + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + NoRemoveOnDead: true + - Status: Jexpboost + Icon: EFST_CASH_PLUSONLYJOBEXP + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + SendVal1: true + #- Status: Ignoredef + - Status: Hellpower + Icon: EFST_HELLPOWER + DurationLookup: NPC_HELLPOWER + Flags: + NoRemoveOnDead: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Invincible + Icon: EFST_INVINCIBLE + DurationLookup: NPC_INVINCIBLE + CalcFlags: + Speed: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Invincibleoff: true + - Status: Invincibleoff + DurationLookup: NPC_INVINCIBLEOFF + CalcFlags: + Speed: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Invincible: true + - Status: Manu_Atk + Icon: EFST_MANU_ATK + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Manu_Def + Icon: EFST_MANU_DEF + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Spl_Atk + Icon: EFST_SPL_ATK + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Spl_Def + Icon: EFST_SPL_DEF + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Manu_Matk + Icon: EFST_MANU_MATK + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Spl_Matk + Icon: EFST_SPL_MATK + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Food_Str_Cash + Icon: EFST_FOOD_STR_CASH + CalcFlags: + Str: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Strfood: true + - Status: Food_Agi_Cash + Icon: EFST_FOOD_AGI_CASH + CalcFlags: + Agi: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Agifood: true + - Status: Food_Vit_Cash + Icon: EFST_FOOD_VIT_CASH + CalcFlags: + Vit: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Vitfood: true + - Status: Food_Dex_Cash + Icon: EFST_FOOD_DEX_CASH + CalcFlags: + Dex: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Intfood: true + - Status: Food_Int_Cash + Icon: EFST_FOOD_INT_CASH + CalcFlags: + Int: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Dexfood: true + - Status: Food_Luk_Cash + Icon: EFST_FOOD_LUK_CASH + CalcFlags: + Luk: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Lukfood: true + - Status: Fear + DurationLookup: RK_WINDCUTTER + States: + NoMove: true + NoMoveCond: true + CalcFlags: + Flee: true + Hit: true + Flags: + BossResist: true + StopWalking: true + OverlapFail: true + Debuff: true + Fail: + Inspiration: true + End: + Blind: true + - Status: Burning + Icon: EFST_BURNT + DurationLookup: RK_DRAGONBREATH + CalcFlags: + Mdef: true + Opt1: Burning + Flags: + SendOption: true + RemoveOnRefresh: true + RemoveOnLuxAnima: true + BossResist: true + Debuff: true + OverlapFail: true + SpreadEffect: true + MinDuration: 10000 + Fail: + Refresh: true + Inspiration: true + - Status: Freezing + Icon: EFST_FROSTMISTY + DurationLookup: WL_FROSTMISTY + CalcFlags: + Aspd: true + Speed: true + Def: true + Flags: + BlEffect: true + DisplayPc: true + RemoveOnRefresh: true + RemoveOnLuxAnima: true + BossResist: true + NoDispell: true + NoBanishingBuster: true + Debuff: true + OverlapFail: true + SpreadEffect: true + MinDuration: 6000 + Fail: + Refresh: true + Inspiration: true + Warmer: true + - Status: Enchantblade + Icon: EFST_ENCHANTBLADE + DurationLookup: RK_ENCHANTBLADE + - Status: Deathbound + Icon: EFST_DEATHBOUND + DurationLookup: RK_DEATHBOUND + States: + NoCast: true + Flags: + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Millenniumshield + Icon: EFST_REUSE_MILLENNIUMSHIELD + DurationLookup: RK_MILLENNIUMSHIELD + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Crushstrike + Icon: EFST_CRUSHSTRIKE + DurationLookup: RK_CRUSHSTRIKE + Flags: + NoClearbuff: true + NoDispell: true + - Status: Refresh + Icon: EFST_REFRESH + DurationLookup: RK_REFRESH + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoSave: true + - Status: Reuse_Refresh + Icon: EFST_REUSE_REFRESH + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: Giantgrowth + Icon: EFST_GIANTGROWTH + DurationLookup: RK_GIANTGROWTH + CalcFlags: + Str: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + - Status: Stonehardskin + Icon: EFST_STONEHARDSKIN + DurationLookup: RK_STONEHARDSKIN + CalcFlags: + Def: true + Mdef: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoRemoveOnDead: true + NoSave: true + - Status: Vitalityactivation + Icon: EFST_VITALITYACTIVATION + DurationLookup: RK_VITALITYACTIVATION + CalcFlags: + Regen: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + - Status: Stormblast + DurationLookup: RK_VITALITYACTIVATION + Flags: + NoDispell: true + NoBanishingBuster: true + NoRemoveOnDead: true + - Status: Fightingspirit + Icon: EFST_FIGHTINGSPIRIT + DurationLookup: RK_FIGHTINGSPIRIT + CalcFlags: + Watk: true + Aspd: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + SendVal2: true + End: + Fightingspirit: true + - Status: Abundance + Icon: EFST_ABUNDANCE + DurationLookup: RK_ABUNDANCE + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: Adoramus + Icon: EFST_ADORAMUS + DurationLookup: AB_ADORAMUS + CalcFlags: + Agi: true + Speed: true + Flags: + BossResist: true + Debuff: true + End: + Decreaseagi: true + - Status: Epiclesis + Icon: EFST_EPICLESIS + DurationLookup: AB_EPICLESIS + CalcFlags: + MaxHp: true + Flags: + NoRemoveOnDead: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Oratio + Icon: EFST_ORATIO + DurationLookup: AB_ORATIO + Flags: + BlEffect: true + DisplayPc: true + NoDispell: true + NoBanishingBuster: true + - Status: Laudaagnus + Icon: EFST_LAUDAAGNUS + DurationLookup: AB_LAUDAAGNUS + CalcFlags: + MaxHp: true + Flags: + NoDispell: true + NoBanishingBuster: true + - Status: Laudaramus + Icon: EFST_LAUDARAMUS + DurationLookup: AB_LAUDARAMUS + CalcFlags: + All: true + Flags: + NoDispell: true + NoBanishingBuster: true + - Status: Renovatio + Icon: EFST_RENOVATIO + DurationLookup: AB_RENOVATIO + CalcFlags: + Regen: true + Flags: + NoDispell: true + NoBanishingBuster: true + - Status: Expiatio + Icon: EFST_EXPIATIO + DurationLookup: AB_EXPIATIO + Flags: + NoDispell: true + NoBanishingBuster: true + - Status: Duplelight + Icon: EFST_DUPLELIGHT + DurationLookup: AB_DUPLELIGHT + Flags: + DisplayPc: true + NoDispell: true + NoBanishingBuster: true + - Status: Secrament + Icon: EFST_AB_SECRAMENT + DurationLookup: AB_SECRAMENT + Flags: + NoDispell: true + NoBanishingBuster: true + - Status: Whiteimprison + DurationLookup: WL_WHITEIMPRISON + States: + NoMove: true + NoCast: true + Opt1: Imprison + Flags: + SendOption: true + BossResist: true + SetStand: true + StopWalking: true + StopAttacking: true + StopCasting: true + OverlapFail: true + End: + Burning: true + Freezing: true + Freeze: true + Stone: true + - Status: Marshofabyss + Icon: EFST_MARSHOFABYSS + DurationLookup: WL_MARSHOFABYSS + CalcFlags: + Agi: true + Dex: true + Speed: true + Flags: + RemoveOnRefresh: true + RemoveOnLuxAnima: true + BossResist: true + NoDispell: true + NoBanishingBuster: true + Debuff: true + MinDuration: 5000 + Fail: + Refresh: true + End: + Increaseagi: true + Windwalk: true + Aspdpotion0: true + Aspdpotion1: true + Aspdpotion2: true + Aspdpotion3: true + - Status: Recognizedspell + Icon: EFST_RECOGNIZEDSPELL + DurationLookup: WL_RECOGNIZEDSPELL + CalcFlags: + Matk: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Stasis + Icon: EFST_STASIS + DurationLookup: WL_STASIS + MinDuration: 10000 + - Status: Sphere_1 + Icon: EFST_SUMMON1 + Flags: + DisplayPc: true + NoClearance: true + SendVal1: true + - Status: Sphere_2 + Icon: EFST_SUMMON2 + Flags: + DisplayPc: true + NoClearance: true + SendVal1: true + - Status: Sphere_3 + Icon: EFST_SUMMON3 + Flags: + DisplayPc: true + NoClearance: true + SendVal1: true + - Status: Sphere_4 + Icon: EFST_SUMMON4 + Flags: + DisplayPc: true + NoClearance: true + SendVal1: true + - Status: Sphere_5 + Icon: EFST_SUMMON5 + Flags: + DisplayPc: true + NoClearance: true + SendVal1: true + - Status: Reading_Sb + - Status: Freeze_Sp + Icon: EFST_FREEZE_SP + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + NoRemoveOnDead: true + - Status: Fearbreeze + Icon: EFST_FEARBREEZE + DurationLookup: RA_FEARBREEZE + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Electricshocker + Icon: EFST_ELECTRICSHOCKER + DurationLookup: RA_ELECTRICSHOCKER + States: + NoMove: true + Flags: + StopWalking: true + NoDispell: true + NoBanishingBuster: true + NoSave: true + OverlapFail: true + NoClearance: true + - Status: Wugdash + Icon: EFST_WUGDASH + DurationLookup: RA_WUGDASH + CalcFlags: + Speed: true + Dspd: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + RemoveOnChangeMap: true + - Status: Bite + Icon: EFST_WUGBITE + DurationLookup: RA_WUGBITE + States: + NoMove: true + Flags: + BossResist: true + StopWalking: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + Debuff: true + MinRate: 5000 + - Status: Camouflage + Icon: EFST_CAMOUFLAGE + DurationLookup: RA_CAMOUFLAGE + States: + NoMove: true + NoMoveCond: true + CalcFlags: + Speed: true + Flags: + DisplayPc: true + OnTouch: true + StopAttacking: true + RemoveOnDamaged: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + RemoveOnChangeMap: true + - Status: Acceleration + Icon: EFST_ACCELERATION + DurationLookup: NC_ACCELERATION + CalcFlags: + Speed: true + Flags: + MadoEndCancel: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Hovering + Icon: EFST_HOVERING + DurationLookup: NC_HOVERING + CalcFlags: + Speed: true + Flags: + MadoEndCancel: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Shapeshift + Icon: EFST_SHAPESHIFT + DurationLookup: NC_SHAPESHIFT + CalcFlags: + Def_Ele: true + Flags: + MadoEndCancel: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Infraredscan + Icon: EFST_INFRAREDSCAN + DurationLookup: NC_INFRAREDSCAN + CalcFlags: + Flee: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Analyze + Icon: EFST_ANALYZE + DurationLookup: NC_ANALYZE + CalcFlags: + Def: true + Def2: true + Mdef: true + MDef2: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Magneticfield + Icon: EFST_MAGNETICFIELD + DurationLookup: NC_MAGNETICFIELD + States: + NoMove: true + Flags: + MadoEndCancel: true + BossResist: true + StopWalking: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + Debuff: true + Fail: + Hovering: true + - Status: Neutralbarrier + Icon: EFST_NEUTRALBARRIER + DurationLookup: NC_NEUTRALBARRIER + CalcFlags: + Def: true + Mdef: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + - Status: Neutralbarrier_Master + Icon: EFST_NEUTRALBARRIER_MASTER + Flags: + MadoEndCancel: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + RemoveOnChangeMap: true + - Status: Stealthfield + Icon: EFST_STEALTHFIELD + DurationLookup: NC_STEALTHFIELD + CalcFlags: + Speed: true + Flags: + DisplayPc: true + OnTouch: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + StopAttacking: true + - Status: Stealthfield_Master + Icon: EFST_STEALTHFIELD_MASTER + CalcFlags: + Speed: true + Flags: + MadoEndCancel: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + RemoveOnChangeMap: true + - Status: Overheat + Icon: EFST_OVERHEAT + Flags: + MadoEndCancel: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + SendVal1: true + - Status: Overheat_Limitpoint + Icon: EFST_OVERHEAT_LIMITPOINT + Flags: + MadoEndCancel: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Venomimpress + Icon: EFST_VENOMIMPRESS + DurationLookup: GC_VENOMIMPRESS + Flags: + BlEffect: true + DisplayPc: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + SendVal2: true + - Status: Poisoningweapon + Icon: EFST_POISONINGWEAPON + DurationLookup: GC_POISONINGWEAPON + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + SendVal3: true + - Status: Weaponblocking + Icon: EFST_WEAPONBLOCKING + DurationLookup: GC_WEAPONBLOCKING + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + SendVal2: true + #- Status: Weaponblocking_Postdelay + # Icon: EFST_WEAPONBLOCKING_POSTDELAY + # Flags: + # NoDispell: true + # NoBanishingBuster: true + # NoClearance: true + # NoRemoveOnDead: true + # NoSave: true + - Status: Cloakingexceed + Icon: EFST_CLOAKINGEXCEED + DurationLookup: GC_CLOAKINGEXCEED + States: + NoPickItem: true + CalcFlags: + Speed: true + Options: + Cloak: true + Flags: + OnTouch: true + StopAttacking: true + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + RemoveOnMapWarp: true + SendVal3: true + - Status: Hallucinationwalk + Icon: EFST_HALLUCINATIONWALK + DurationLookup: GC_HALLUCINATIONWALK + CalcFlags: + Flee: true + Flags: + DisplayPc: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + SendVal3: true + - Status: Hallucinationwalk_Postdelay + Icon: EFST_HALLUCINATIONWALK_POSTDELAY + DurationLookup: GC_HALLUCINATIONWALK + CalcFlags: + Speed: true + Aspd: true + Flags: + NoRemoveOnDead: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + - Status: Rollingcutter + Icon: EFST_ROLLINGCUTTER + DurationLookup: GC_ROLLINGCUTTER + Flags: + DisplayPc: true + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + SendVal1: true + - Status: Toxin + Icon: EFST_TOXIN + Flags: + RemoveOnRefresh: true + RemoveOnLuxAnima: true + BossResist: true + NoDispell: true + NoBanishingBuster: true + Debuff: true + OverlapFail: true + SpreadEffect: true + - Status: Paralyse + Icon: EFST_PARALYSE + CalcFlags: + Flee: true + Speed: true + Aspd: true + Flags: + RemoveOnRefresh: true + RemoveOnLuxAnima: true + BossResist: true + NoDispell: true + NoBanishingBuster: true + Debuff: true + OverlapFail: true + SpreadEffect: true + Fail: + Refresh: true + Inspiration: true + Toxin: true + Paralyse: true + Venombleed: true + Magicmushroom: true + Deathhurt: true + Pyrexia: true + Oblivioncurse: true + Leechesend: true + - Status: Venombleed + Icon: EFST_VENOMBLEED + CalcFlags: + MaxHp: true + Flags: + RemoveOnRefresh: true + RemoveOnLuxAnima: true + BossResist: true + NoDispell: true + NoBanishingBuster: true + Debuff: true + OverlapFail: true + SpreadEffect: true + Fail: + Refresh: true + Inspiration: true + Toxin: true + Paralyse: true + Venombleed: true + Magicmushroom: true + Deathhurt: true + Pyrexia: true + Oblivioncurse: true + Leechesend: true + - Status: Magicmushroom + Icon: EFST_MAGICMUSHROOM + CalcFlags: + Regen: true + Flags: + RemoveOnRefresh: true + RemoveOnLuxAnima: true + BossResist: true + NoDispell: true + NoBanishingBuster: true + Debuff: true + OverlapFail: true + SpreadEffect: true + Fail: + Refresh: true + Inspiration: true + Toxin: true + Paralyse: true + Venombleed: true + Magicmushroom: true + Deathhurt: true + Pyrexia: true + Oblivioncurse: true + Leechesend: true + - Status: Deathhurt + Icon: EFST_DEATHHURT + CalcFlags: + Regen: true + Flags: + RemoveOnRefresh: true + RemoveOnLuxAnima: true + BossResist: true + NoDispell: true + NoBanishingBuster: true + Debuff: true + OverlapFail: true + SpreadEffect: true + Fail: + Refresh: true + Inspiration: true + Toxin: true + Paralyse: true + Venombleed: true + Magicmushroom: true + Deathhurt: true + Pyrexia: true + Oblivioncurse: true + Leechesend: true + - Status: Pyrexia + Icon: EFST_PYREXIA + CalcFlags: + All: true + Flags: + RemoveOnRefresh: true + RemoveOnLuxAnima: true + BossResist: true + NoDispell: true + NoBanishingBuster: true + Debuff: true + OverlapFail: true + SpreadEffect: true + Fail: + Refresh: true + Inspiration: true + Toxin: true + Paralyse: true + Venombleed: true + Magicmushroom: true + Deathhurt: true + Pyrexia: true + Oblivioncurse: true + Leechesend: true + - Status: Oblivioncurse + Icon: EFST_OBLIVIONCURSE + States: + NoCast: true + Nocastcond: true + CalcFlags: + Regen: true + Flags: + RemoveOnRefresh: true + RemoveOnLuxAnima: true + BossResist: true + NoDispell: true + NoBanishingBuster: true + Debuff: true + OverlapFail: true + SpreadEffect: true + Fail: + Refresh: true + Inspiration: true + Toxin: true + Paralyse: true + Venombleed: true + Magicmushroom: true + Deathhurt: true + Pyrexia: true + Oblivioncurse: true + Leechesend: true + - Status: Leechesend + Icon: EFST_LEECHESEND + Flags: + RemoveOnRefresh: true + RemoveOnLuxAnima: true + BossResist: true + NoDispell: true + NoBanishingBuster: true + Debuff: true + OverlapFail: true + SpreadEffect: true + Fail: + Refresh: true + Inspiration: true + Toxin: true + Paralyse: true + Venombleed: true + Magicmushroom: true + Deathhurt: true + Pyrexia: true + Oblivioncurse: true + Leechesend: true + - Status: Reflectdamage + Icon: EFST_LG_REFLECTDAMAGE + DurationLookup: LG_REFLECTDAMAGE + Flags: + NoDispell: true + NoBanishingBuster: true + RequireShield: true + End: + Reflectshield: true + - Status: Forceofvanguard + Icon: EFST_FORCEOFVANGUARD + DurationLookup: LG_FORCEOFVANGUARD + CalcFlags: + MaxHp: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + SendVal3: true + - Status: Shieldspell_Hp + Icon: EFST_SHIELDSPELL + DurationLookup: LG_SHIELDSPELL + End: + Shieldspell_Sp: true + Shieldspell_Atk: true + - Status: Shieldspell_Sp + Icon: EFST_SHIELDSPELL + DurationLookup: LG_SHIELDSPELL + End: + Shieldspell_Hp: true + Shieldspell_Atk: true + - Status: Shieldspell_Atk + Icon: EFST_SHIELDSPELL + DurationLookup: LG_SHIELDSPELL + CalcFlags: + Watk: true + Matk: true + End: + Shieldspell_Hp: true + Shieldspell_Sp: true + - Status: Exeedbreak + Icon: EFST_EXEEDBREAK + DurationLookup: LG_EXEEDBREAK + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Prestige + Icon: EFST_PRESTIGE + DurationLookup: LG_PRESTIGE + CalcFlags: + Def: true + Flags: + SendVal2: true + - Status: Banding + Icon: EFST_BANDING + DurationLookup: LG_BANDING + CalcFlags: + Def: true + Flags: + DisplayPc: true + OverlapFail: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + SendVal1: true + End: + Prestige: true + - Status: Banding_Defence + Icon: EFST_BANDING_DEFENCE + Flags: + BossResist: true + OverlapFail: true + - Status: Earthdrive + Icon: EFST_EARTHDRIVE + DurationLookup: LG_EARTHDRIVE + Flags: + NoDispell: true + NoBanishingBuster: true + - Status: Inspiration + Icon: EFST_INSPIRATION + DurationLookup: LG_INSPIRATION + CalcFlags: + Watk: true + Matk: true + Str: true + Agi: true + Vit: true + Int: true + Dex: true + Luk: true + Hit: true + MaxHp: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Spellfist + Icon: EFST_SPELLFIST + DurationLookup: SO_SPELLFIST + Flags: + SendVal3: true + - Status: Crystalize + Icon: EFST_COLD + DurationLookup: SO_DIAMONDDUST + States: + NoMove: true + NoMoveCond: true + NoCast: true + NoCastCond: true + NoConsumeItem: true + NoAttack: true + Flags: + BlEffect: true + DisplayPc: true + SendOption: true + RemoveOnRefresh: true + RemoveOnLuxAnima: true + BossResist: true + StopAttacking: true + StopWalking: true + StopCasting: true + SetStand: true + Debuff: true + OverlapFail: true + Fail: + Refresh: true + Inspiration: true + Warmer: true + - Status: Striking + Icon: EFST_STRIKING + DurationLookup: SO_STRIKING + CalcFlags: + All: true + Flags: + NoSave: true + - Status: Warmer + Icon: EFST_WARMER + DurationLookup: SO_WARMER + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Crystalize: true + Freezing: true + Freeze: true + - Status: Vacuum_Extreme + Icon: EFST_VACUUM_EXTREME + DurationLookup: SO_VACUUM_EXTREME + Flags: + BossResist: true + StopWalking: true + StopAttacking: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + RemoveOnChangeMap: true + Debuff: true + Fail: + Hallucinationwalk: true + Hovering: true + Npc_HallucinationWalk: true + Vacuum_Extreme: true + States: + Nomove: true + - Status: Propertywalk + Icon: EFST_PROPERTYWALK + DurationLookup: SO_FIREWALK + Flags: + NoSave: true + RemoveOnMapWarp: true + SendVal2: true + - Status: Swingdance + Icon: EFST_SWING + DurationLookup: WA_SWING_DANCE + CalcFlags: + Speed: true + Aspd: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Symphonyoflover: true + Moonlitserenade: true + Rushwindmill: true + Echosong: true + Harmonize: true + - Status: Symphonyoflover + Icon: EFST_SYMPHONY_LOVE + DurationLookup: WA_SYMPHONY_OF_LOVER + CalcFlags: + Mdef: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Swingdance: true + Moonlitserenade: true + Rushwindmill: true + Echosong: true + Harmonize: true + - Status: Moonlitserenade + Icon: EFST_MOONLIT_SERENADE + DurationLookup: WA_MOONLIT_SERENADE + CalcFlags: + Matk: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Swingdance: true + Symphonyoflover: true + Rushwindmill: true + Echosong: true + Harmonize: true + - Status: Rushwindmill + Icon: EFST_RUSH_WINDMILL + DurationLookup: MI_RUSH_WINDMILL + CalcFlags: + Watk: true + Speed: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Swingdance: true + Symphonyoflover: true + Moonlitserenade: true + Echosong: true + Harmonize: true + - Status: Echosong + Icon: EFST_ECHOSONG + DurationLookup: MI_ECHOSONG + CalcFlags: + Def: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Swingdance: true + Symphonyoflover: true + Moonlitserenade: true + Rushwindmill: true + Harmonize: true + - Status: Harmonize + Icon: EFST_HARMONIZE + DurationLookup: MI_HARMONIZE + CalcFlags: + Str: true + Agi: true + Vit: true + Int: true + Dex: true + Luk: true + End: + Swingdance: true + Symphonyoflover: true + Moonlitserenade: true + Rushwindmill: true + Echosong: true + - Status: Voiceofsiren + Icon: EFST_SIREN + DurationLookup: WM_VOICEOFSIREN + Flags: + BlEffect: true + DisplayPc: true + StopAttacking: true + MinDuration: 10000 + End: + Deepsleep: true + Gloomyday: true + Gloomyday_Sk: true + Songofmana: true + Dancewithwug: true + Saturdaynightfever: true + Leradsdew: true + Melodyofsink: true + Beyondofwarcry: true + Unlimitedhummingvoice: true + Sircleofnature: true + - Status: Deepsleep + Icon: EFST_HANDICAPSTATE_DEEP_SLEEP + DurationLookup: WM_LULLABY_DEEPSLEEP + States: + NoCast: true + NoChat: true + NoConsumeItem: true + NoMove: true + NoAttack: true + Opt1: Sleep + Flags: + BlEffect: true + DisplayPc: true + RemoveOnRefresh: true + RemoveOnLuxAnima: true + BossResist: true + StopWalking: true + StopAttacking: true + StopCasting: true + SetStand: true + RemoveOnDamaged: true + NoSave: true + Debuff: true + OverlapFail: true + MinDuration: 5000 + Fail: + Refresh: true + Inspiration: true + End: + Dancing: true + Voiceofsiren: true + Gloomyday: true + Gloomyday_Sk: true + Songofmana: true + Dancewithwug: true + Saturdaynightfever: true + Leradsdew: true + Melodyofsink: true + Beyondofwarcry: true + Unlimitedhummingvoice: true + Sircleofnature: true + - Status: Sircleofnature + Icon: EFST_SIRCLEOFNATURE + DurationLookup: WM_SIRCLEOFNATURE + End: + Deepsleep: true + Gloomyday: true + Gloomyday_Sk: true + Songofmana: true + Dancewithwug: true + Saturdaynightfever: true + Leradsdew: true + Melodyofsink: true + Beyondofwarcry: true + Unlimitedhummingvoice: true + Sircleofnature: true + CalcFlags: + Regen: true + - Status: Gloomyday + Icon: EFST_GLOOMYDAY + DurationLookup: WM_GLOOMYDAY + CalcFlags: + Flee: true + Speed: true + Aspd: true + End: + Voiceofsiren: true + Deepsleep: true + Songofmana: true + Dancewithwug: true + Saturdaynightfever: true + Leradsdew: true + Melodyofsink: true + Beyondofwarcry: true + Unlimitedhummingvoice: true + - Status: Gloomyday_Sk + Icon: EFST_GLOOMYDAY + - Status: Songofmana + Icon: EFST_SONG_OF_MANA + DurationLookup: WM_SONG_OF_MANA + End: + Voiceofsiren: true + Deepsleep: true + Gloomyday: true + Gloomyday_Sk: true + Dancewithwug: true + Saturdaynightfever: true + Leradsdew: true + Melodyofsink: true + Beyondofwarcry: true + Unlimitedhummingvoice: true + Sircleofnature: true + CalcFlags: + Regen: true + - Status: Dancewithwug + Icon: EFST_DANCE_WITH_WUG + DurationLookup: WM_DANCE_WITH_WUG + CalcFlags: + Aspd: true + End: + Voiceofsiren: true + Deepsleep: true + Gloomyday: true + Gloomyday_Sk: true + Songofmana: true + Saturdaynightfever: true + Leradsdew: true + Melodyofsink: true + Beyondofwarcry: true + Unlimitedhummingvoice: true + Sircleofnature: true + - Status: Saturdaynightfever + Icon: EFST_SATURDAY_NIGHT_FEVER + DurationLookup: WM_SATURDAY_NIGHT_FEVER + States: + NoCast: true + NoChat: true + NoEquipItem: true + NoUnEquipItem: true + NoConsumeItem: true + CalcFlags: + Hit: true + Flee: true + Regen: true + Flags: + NoSave: true + Fail: + Berserk: true + Inspiration: true + End: + Voiceofsiren: true + Deepsleep: true + Gloomyday: true + Gloomyday_Sk: true + Songofmana: true + Dancewithwug: true + Leradsdew: true + Melodyofsink: true + Beyondofwarcry: true + Unlimitedhummingvoice: true + Sircleofnature: true + - Status: Leradsdew + Icon: EFST_LERADS_DEW + DurationLookup: WM_LERADS_DEW + CalcFlags: + MaxHp: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Voiceofsiren: true + Deepsleep: true + Gloomyday: true + Gloomyday_Sk: true + Songofmana: true + Dancewithwug: true + Saturdaynightfever: true + Melodyofsink: true + Beyondofwarcry: true + Unlimitedhummingvoice: true + Sircleofnature: true + - Status: Melodyofsink + Icon: EFST_MELODYOFSINK + DurationLookup: WM_MELODYOFSINK + CalcFlags: + Int: true + MaxSp: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Voiceofsiren: true + Deepsleep: true + Gloomyday: true + Gloomyday_Sk: true + Songofmana: true + Dancewithwug: true + Saturdaynightfever: true + Leradsdew: true + Beyondofwarcry: true + Unlimitedhummingvoice: true + Sircleofnature: true + - Status: Beyondofwarcry + Icon: EFST_BEYOND_OF_WARCRY + DurationLookup: WM_BEYOND_OF_WARCRY + CalcFlags: + Str: true + MaxHp: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Voiceofsiren: true + Deepsleep: true + Gloomyday: true + Gloomyday_Sk: true + Songofmana: true + Dancewithwug: true + Saturdaynightfever: true + Leradsdew: true + Melodyofsink: true + Unlimitedhummingvoice: true + Sircleofnature: true + - Status: Unlimitedhummingvoice + Icon: EFST_UNLIMITED_HUMMING_VOICE + DurationLookup: WM_UNLIMITED_HUMMING_VOICE + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Voiceofsiren: true + Deepsleep: true + Gloomyday: true + Gloomyday_Sk: true + Songofmana: true + Dancewithwug: true + Saturdaynightfever: true + Leradsdew: true + Melodyofsink: true + Beyondofwarcry: true + Sircleofnature: true + - Status: Sitdown_Force + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Netherworld + Icon: EFST_NETHERWORLD + DurationLookup: WM_POEMOFNETHERWORLD + States: + NoMove: true + Flags: + BlEffect: true + DisplayPc: true + BossResist: true + StopWalking: true + OverlapFail: true + Debuff: true + - Status: Crescentelbow + Icon: EFST_CRESCENTELBOW + DurationLookup: SR_CRESCENTELBOW + Flags: + BossResist: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + SendVal2: true + - Status: Cursedcircle_Atker + Icon: EFST_CURSEDCIRCLE_ATKER + DurationLookup: SR_CURSEDCIRCLE + States: + NoMove: true + NoAttack: true + Flags: + DisplayPc: true + NoClearbuff: true + StopWalking: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + StopAttacking: true + RemoveOnChangeMap: true + SendVal3: true + - Status: Cursedcircle_Target + Icon: EFST_CURSEDCIRCLE_TARGET + DurationLookup: SR_CURSEDCIRCLE + States: + NoMove: true + NoCast: true + NoAttack: true + Flags: + BlEffect: true + DisplayPc: true + MobLoseTarget: true + NoClearbuff: true + StopWalking: true + StopAttacking: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: Lightningwalk + Icon: EFST_LIGHTNINGWALK + DurationLookup: SR_LIGHTNINGWALK + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + SendVal1: true + - Status: Raisingdragon + Icon: EFST_RAISINGDRAGON + DurationLookup: SR_RAISINGDRAGON + CalcFlags: + MaxHp: true + MaxSp: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + - Status: Gt_Energygain + Icon: EFST_GENTLETOUCH_ENERGYGAIN + DurationLookup: SR_GENTLETOUCH_ENERGYGAIN + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Gt_Change + Icon: EFST_GENTLETOUCH_CHANGE + DurationLookup: SR_GENTLETOUCH_CHANGE + CalcFlags: + Watk: true + Aspd: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Gt_Revitalize: true + - Status: Gt_Revitalize + Icon: EFST_GENTLETOUCH_REVITALIZE + DurationLookup: SR_GENTLETOUCH_REVITALIZE + CalcFlags: + MaxHp: true + Regen: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Gt_Change: true + - Status: Gn_Cartboost + Icon: EFST_GN_CARTBOOST + DurationLookup: GN_CARTBOOST + CalcFlags: + Speed: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + Fail: + Quagmire: true + Dontforgetme: true + End: + Decreaseagi: true + EndReturn: true + - Status: Thornstrap + Icon: EFST_THORNS_TRAP + DurationLookup: GN_THORNS_TRAP + States: + NoMove: true + Flags: + StopWalking: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + - Status: Bloodsucker + Icon: EFST_BLOOD_SUCKER + DurationLookup: GN_BLOOD_SUCKER + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + - Status: Smokepowder + Icon: EFST_FIRE_EXPANSION_SMOKE_POWDER + DurationLookup: GN_FIRE_EXPANSION_SMOKE_POWDER + CalcFlags: + Flee: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + - Status: Teargas + Icon: EFST_FIRE_EXPANSION_TEAR_GAS + DurationLookup: GN_FIRE_EXPANSION_TEAR_GAS + CalcFlags: + Hit: true + Flee: true + Flags: + BossResist: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + - Status: Mandragora + Icon: EFST_MANDRAGORA + DurationLookup: GN_MANDRAGORA + CalcFlags: + Int: true + Flags: + RemoveOnRefresh: true + RemoveOnLuxAnima: true + NoDispell: true + NoBanishingBuster: true + Debuff: true + OverlapFail: true + Fail: + Refresh: true + Inspiration: true + - Status: Stomachache + Icon: EFST_STOMACHACHE + CalcFlags: + Str: true + Agi: true + Vit: true + Dex: true + Int: true + Luk: true + Flags: + NoDispell: true + NoBanishingBuster: true + Debuff: true + - Status: Mysterious_Powder + Icon: EFST_MYSTERIOUS_POWDER + CalcFlags: + MaxHp: true + Flags: + NoDispell: true + NoBanishingBuster: true + Debuff: true + - Status: Melon_Bomb + Icon: EFST_MELON_BOMB + CalcFlags: + Speed: true + Aspd: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + - Status: Banana_Bomb + Icon: EFST_BANANA_BOMB + CalcFlags: + Luk: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Banana_Bomb_Sitdown + Icon: EFST_BANANA_BOMB_SITDOWN_POSTDELAY + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + - Status: Savage_Steak + Icon: EFST_SAVAGE_STEAK + CalcFlags: + Str: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + - Status: Cocktail_Warg_Blood + Icon: EFST_COCKTAIL_WARG_BLOOD + CalcFlags: + Int: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + - Status: Minor_Bbq + Icon: EFST_MINOR_BBQ + CalcFlags: + Vit: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + - Status: Siroma_Ice_Tea + Icon: EFST_SIROMA_ICE_TEA + CalcFlags: + Dex: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + - Status: Drocera_Herb_Steamed + Icon: EFST_DROCERA_HERB_STEAMED + CalcFlags: + Agi: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + - Status: Putti_Tails_Noodles + Icon: EFST_PUTTI_TAILS_NOODLES + CalcFlags: + Luk: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + - Status: Boost500 + Icon: EFST_BOOST500 + CalcFlags: + Aspd: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Full_Swing_K + Icon: EFST_FULL_SWING_K + CalcFlags: + Batk: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Mana_Plus + Icon: EFST_MANA_PLUS + CalcFlags: + Matk: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Mustle_M + Icon: EFST_MUSTLE_M + CalcFlags: + MaxHp: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Life_Force_F + Icon: EFST_LIFE_FORCE_F + CalcFlags: + MaxSp: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Extract_White_Potion_Z + Icon: EFST_EXTRACT_WHITE_POTION_Z + CalcFlags: + Regen: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Vitata_500 + Icon: EFST_VITATA_500 + CalcFlags: + Regen: true + MaxSp: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Extract_Salamine_Juice + Icon: EFST_EXTRACT_SALAMINE_JUICE + CalcFlags: + Aspd: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: _Reproduce + Icon: EFST_REPRODUCE + DurationLookup: SC_REPRODUCE + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: _Autoshadowspell + Icon: EFST_AUTOSHADOWSPELL + DurationLookup: SC_AUTOSHADOWSPELL + CalcFlags: + Matk: true + - Status: _Shadowform + Icon: EFST_SHADOWFORM + DurationLookup: SC_SHADOWFORM + States: + NoCast: true + NoConsumeItem: true + NoAttack: true + Flags: + DisplayPc: true + OnTouch: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + RemoveOnChangeMap: true + SendVal3: true + - Status: _Bodypaint + Icon: EFST_BODYPAINT + DurationLookup: SC_BODYPAINT + CalcFlags: + Aspd: true + Flags: + NoDispell: true + NoBanishingBuster: true + SpreadEffect: true + Fail: + Inspiration: true + - Status: _Invisibility + Icon: EFST_INVISIBILITY + DurationLookup: SC_INVISIBILITY + States: + NoCast: true + NoConsumeItem: true + CalcFlags: + Aspd: true + Cri: true + Atk_Ele: true + Options: + Cloak: true + Flags: + OnTouch: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + SendVal2: true + Fail: + _Invisibility: true + - Status: _Deadlyinfect + Icon: EFST_DEADLYINFECT + DurationLookup: SC_DEADLYINFECT + Flags: + NoDispell: true + NoBanishingBuster: true + - Status: _Enervation + Icon: EFST_ENERVATION + DurationLookup: SC_ENERVATION + CalcFlags: + Batk: true + Watk: true + Flags: + OverlapFail: true + BossResist: true + NoBanishingBuster: true + NoClearance: true + SendVal2: true + Fail: + Inspiration: true + - Status: _Groomy + Icon: EFST_GROOMY + DurationLookup: SC_GROOMY + CalcFlags: + Aspd: true + Hit: true + Flags: + OverlapFail: true + BossResist: true + NoBanishingBuster: true + NoClearance: true + SendVal3: true + Fail: + Inspiration: true + - Status: _Ignorance + Icon: EFST_IGNORANCE + DurationLookup: SC_IGNORANCE + States: + NoCast: true + Flags: + OverlapFail: true + BossResist: true + NoBanishingBuster: true + NoClearance: true + Fail: + Inspiration: true + - Status: _Laziness + Icon: EFST_LAZINESS + DurationLookup: SC_LAZINESS + CalcFlags: + Flee: true + Speed: true + Flags: + OverlapFail: true + BossResist: true + NoBanishingBuster: true + NoClearance: true + SendVal3: true + Fail: + Inspiration: true + - Status: _Unlucky + Icon: EFST_UNLUCKY + DurationLookup: SC_UNLUCKY + CalcFlags: + Cri: true + Flee2: true + Flags: + OverlapFail: true + BossResist: true + NoBanishingBuster: true + NoClearance: true + SendVal3: true + Fail: + Inspiration: true + - Status: _Weakness + Icon: EFST_WEAKNESS + DurationLookup: SC_WEAKNESS + CalcFlags: + MaxHp: true + Flags: + OverlapFail: true + BossResist: true + NoBanishingBuster: true + NoClearance: true + SendVal2: true + Fail: + Inspiration: true + - Status: _Stripaccessory + Icon: EFST_STRIPACCESSARY + DurationLookup: SC_STRIPACCESSARY + CalcFlags: + Dex: true + Int: true + Luk: true + Flags: + Debuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: _Manhole + Icon: EFST_MANHOLE + DurationLookup: SC_MANHOLE + States: + NoAttack: true + NoMove: true + NoCast: true + NoConsumeItem: true + NoInteract: true + Flags: + BlEffect: true + DisplayPc: true + MobLoseTarget: true + NoClearbuff: true + StopWalking: true + StopAttacking: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + RemoveOnChangeMap: true + - Status: _Bloodylust + Icon: EFST_BLOODYLUST + DurationLookup: SC_BLOODYLUST + States: + NoCast: true + NoUnEquipItem: true + CalcFlags: + Def: true + Def2: true + Batk: true + Watk: true + Flags: + Debuff: true + NoSave: true + - Status: Circle_Of_Fire + Icon: EFST_CIRCLE_OF_FIRE + Flags: + RemoveElementalOption: true + - Status: Circle_Of_Fire_Option + Icon: EFST_CIRCLE_OF_FIRE_OPTION + DurationLookup: EL_CIRCLE_OF_FIRE + CalcFlags: + All: true + Flags: + RemoveElementalOption: true + SendVal2: true + - Status: Fire_Cloak + Icon: EFST_FIRE_CLOAK + Flags: + RemoveElementalOption: true + - Status: Fire_Cloak_Option + Icon: EFST_FIRE_CLOAK_OPTION + DurationLookup: EL_FIRE_CLOAK + CalcFlags: + All: true + Flags: + RemoveElementalOption: true + - Status: Water_Screen + Icon: EFST_WATER_SCREEN + Flags: + RemoveElementalOption: true + - Status: Water_Screen_Option + Icon: EFST_WATER_SCREEN_OPTION + DurationLookup: EL_WATER_SCREEN + CalcFlags: + All: true + Flags: + RemoveElementalOption: true + - Status: Water_Drop + Icon: EFST_WATER_DROP + Flags: + RemoveElementalOption: true + - Status: Water_Drop_Option + Icon: EFST_WATER_DROP_OPTION + DurationLookup: EL_WATER_DROP + CalcFlags: + All: true + Flags: + RemoveElementalOption: true + - Status: Water_Barrier + Icon: EFST_WATER_BARRIER + DurationLookup: EL_WATER_BARRIER + CalcFlags: + Watk: true + Flee: true + Flags: + RemoveElementalOption: true + SendVal3: true + - Status: Wind_Step + Icon: EFST_WIND_STEP + Flags: + RemoveElementalOption: true + - Status: Wind_Step_Option + Icon: EFST_WIND_STEP_OPTION + DurationLookup: EL_WIND_STEP + CalcFlags: + Speed: true + Flee: true + Flags: + RemoveElementalOption: true + - Status: Wind_Curtain + Icon: EFST_WIND_CURTAIN + Flags: + RemoveElementalOption: true + - Status: Wind_Curtain_Option + Icon: EFST_WIND_CURTAIN_OPTION + DurationLookup: EL_WIND_CURTAIN + CalcFlags: + All: true + Flags: + RemoveElementalOption: true + - Status: Zephyr + Icon: EFST_ZEPHYR + DurationLookup: EL_ZEPHYR + CalcFlags: + Flee: true + Flags: + RemoveElementalOption: true + - Status: Solid_Skin + Icon: EFST_SOLID_SKIN + Flags: + RemoveElementalOption: true + - Status: Solid_Skin_Option + Icon: EFST_SOLID_SKIN_OPTION + DurationLookup: EL_SOLID_SKIN + CalcFlags: + Def: true + MaxHp: true + Flags: + RemoveElementalOption: true + - Status: Stone_Shield + Icon: EFST_STONE_SHIELD + Flags: + RemoveElementalOption: true + - Status: Stone_Shield_Option + Icon: EFST_STONE_SHIELD_OPTION + DurationLookup: EL_STONE_SHIELD + CalcFlags: + All: true + Flags: + RemoveElementalOption: true + - Status: Power_Of_Gaia + Icon: EFST_POWER_OF_GAIA + DurationLookup: EL_POWER_OF_GAIA + CalcFlags: + MaxHp: true + Def: true + Speed: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + NoRemoveOnDead: true + - Status: Pyrotechnic + Icon: EFST_PYROTECHNIC + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + RemoveElementalOption: true + - Status: Pyrotechnic_Option + Icon: EFST_PYROTECHNIC_OPTION + DurationLookup: EL_PYROTECHNIC + CalcFlags: + Watk: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + NoSave: true + RemoveElementalOption: true + SendVal3: true + - Status: Heater + Icon: EFST_HEATER + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + RemoveElementalOption: true + - Status: Heater_Option + Icon: EFST_HEATER_OPTION + DurationLookup: EL_HEATER + CalcFlags: + Watk: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + NoSave: true + RemoveElementalOption: true + SendVal3: true + - Status: Tropic + Icon: EFST_TROPIC + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + RemoveElementalOption: true + - Status: Tropic_Option + Icon: EFST_TROPIC_OPTION + DurationLookup: EL_TROPIC + CalcFlags: + Watk: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + NoSave: true + RemoveElementalOption: true + - Status: Aquaplay + Icon: EFST_AQUAPLAY + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + RemoveElementalOption: true + - Status: Aquaplay_Option + Icon: EFST_AQUAPLAY_OPTION + DurationLookup: EL_AQUAPLAY + CalcFlags: + Matk: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + NoSave: true + RemoveElementalOption: true + SendVal3: true + - Status: Cooler + Icon: EFST_COOLER + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + RemoveElementalOption: true + - Status: Cooler_Option + Icon: EFST_COOLER_OPTION + DurationLookup: EL_COOLER + CalcFlags: + Matk: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + NoSave: true + RemoveElementalOption: true + SendVal3: true + - Status: Chilly_Air + Icon: EFST_CHILLY_AIR + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + RemoveElementalOption: true + - Status: Chilly_Air_Option + Icon: EFST_CHILLY_AIR_OPTION + DurationLookup: EL_CHILLY_AIR + CalcFlags: + Matk: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + NoSave: true + RemoveElementalOption: true + SendVal2: true + - Status: Gust + Icon: EFST_GUST + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + RemoveElementalOption: true + - Status: Gust_Option + Icon: EFST_GUST_OPTION + DurationLookup: EL_GUST + CalcFlags: + Aspd: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + NoSave: true + RemoveElementalOption: true + SendVal2: true + - Status: Blast + Icon: EFST_BLAST + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + RemoveElementalOption: true + - Status: Blast_Option + Icon: EFST_BLAST_OPTION + DurationLookup: EL_BLAST + CalcFlags: + Aspd: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + NoSave: true + RemoveElementalOption: true + SendVal3: true + - Status: Wild_Storm + Icon: EFST_WILD_STORM + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + RemoveElementalOption: true + - Status: Wild_Storm_Option + Icon: EFST_WILD_STORM_OPTION + DurationLookup: EL_WILD_STORM + CalcFlags: + Aspd: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + NoSave: true + RemoveElementalOption: true + SendVal2: true + - Status: Petrology + Icon: EFST_PETROLOGY + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + RemoveElementalOption: true + - Status: Petrology_Option + Icon: EFST_PETROLOGY_OPTION + DurationLookup: EL_PETROLOGY + CalcFlags: + MaxHp: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + NoSave: true + RemoveElementalOption: true + SendVal3: true + - Status: Cursed_Soil + Icon: EFST_CURSED_SOIL + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + RemoveElementalOption: true + - Status: Cursed_Soil_Option + Icon: EFST_CURSED_SOIL_OPTION + DurationLookup: EL_CURSED_SOIL + CalcFlags: + MaxHp: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + NoSave: true + RemoveElementalOption: true + SendVal3: true + - Status: Upheaval + Icon: EFST_UPHEAVAL + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + RemoveElementalOption: true + - Status: Upheaval_Option + Icon: EFST_UPHEAVAL_OPTION + DurationLookup: EL_UPHEAVAL + CalcFlags: + MaxHp: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + NoSave: true + RemoveElementalOption: true + SendVal2: true + - Status: Tidal_Weapon + Icon: EFST_TIDAL_WEAPON + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + RemoveElementalOption: true + - Status: Tidal_Weapon_Option + Icon: EFST_TIDAL_WEAPON_OPTION + DurationLookup: EL_TIDAL_WEAPON + CalcFlags: + All: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + NoSave: true + RemoveElementalOption: true + - Status: Rock_Crusher + Icon: EFST_ROCK_CRUSHER + DurationLookup: EL_ROCK_CRUSHER + CalcFlags: + Def: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Rock_Crusher_Atk + Icon: EFST_ROCK_CRUSHER_ATK + DurationLookup: EL_ROCK_CRUSHER_ATK + CalcFlags: + Speed: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Leadership + DurationLookup: GD_LEADERSHIP + CalcFlags: + Str: true + Flags: + NoClearbuff: true + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Glorywounds + DurationLookup: GD_GLORYWOUNDS + CalcFlags: + Vit: true + Flags: + NoClearbuff: true + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Soulcold + DurationLookup: GD_SOULCOLD + CalcFlags: + Agi: true + Flags: + NoClearbuff: true + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Hawkeyes + DurationLookup: GD_HAWKEYES + CalcFlags: + Dex: true + Flags: + NoClearbuff: true + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Odins_Power + Icon: EFST_ODINS_POWER + DurationLookup: ALL_ODINS_POWER + CalcFlags: + Watk: true + Matk: true + Mdef: true + Def: true + - Status: Raid + Icon: EFST_RAID + DurationLookup: RG_RAID + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Fire_Insignia + Icon: EFST_FIRE_INSIGNIA + DurationLookup: SO_FIRE_INSIGNIA + CalcFlags: + Matk: true + Watk: true + Atk_Ele: true + Regen: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + - Status: Water_Insignia + Icon: EFST_WATER_INSIGNIA + DurationLookup: SO_FIRE_INSIGNIA + CalcFlags: + Matk: true + Watk: true + Atk_Ele: true + Regen: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + - Status: Wind_Insignia + Icon: EFST_WIND_INSIGNIA + DurationLookup: SO_WATER_INSIGNIA + CalcFlags: + Matk: true + Watk: true + Aspd: true + Atk_Ele: true + Regen: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + - Status: Earth_Insignia + Icon: EFST_EARTH_INSIGNIA + DurationLookup: SO_WIND_INSIGNIA + CalcFlags: + Mdef: true + Def: true + MaxHp: true + MaxSp: true + Matk: true + Watk: true + Atk_Ele: true + Regen: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + - Status: Push_Cart + Icon: EFST_ON_PUSH_CART + CalcFlags: + Speed: true + Flags: + DisplayPc: true + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + SendVal1: true + OverlapIgnoreLevel: true + - Status: Spellbook1 + Icon: EFST_SPELLBOOK1 + Flags: + NoClearance: true + - Status: Spellbook2 + Icon: EFST_SPELLBOOK2 + Flags: + NoClearance: true + - Status: Spellbook3 + Icon: EFST_SPELLBOOK3 + Flags: + NoClearance: true + - Status: Spellbook4 + Icon: EFST_SPELLBOOK4 + Flags: + NoClearance: true + - Status: Spellbook5 + Icon: EFST_SPELLBOOK5 + Flags: + NoClearance: true + - Status: Spellbook6 + Icon: EFST_SPELLBOOK6 + Flags: + NoClearance: true + - Status: Maxspellbook + Icon: EFST_SPELLBOOK7 + Flags: + NoClearance: true + - Status: Incmhp + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + CalcFlags: + MaxHp: true + - Status: Incmsp + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + CalcFlags: + MaxSp: true + - Status: Partyflee + Icon: EFST_PARTYFLEE + DurationLookup: ALL_PARTYFLEE + Flags: + NoClearance: true + NoBanishingBuster: true + - Status: Meikyousisui + Icon: EFST_MEIKYOUSISUI + DurationLookup: KO_MEIKYOUSISUI + States: + NoMove: true + Flags: + StopWalking: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Jyumonjikiri + Icon: EFST_KO_JYUMONJIKIRI + DurationLookup: KO_JYUMONJIKIRI + Flags: + BlEffect: true + DisplayPc: true + - Status: Kyougaku + Icon: EFST_KYOUGAKU + DurationLookup: KO_KYOUGAKU + States: + NoMove: true + NoEquipItem: true + NoUnEquipItem: true + CalcFlags: + Str: true + Agi: true + Vit: true + Int: true + Dex: true + Luk: true + Flags: + StopWalking: true + NoSave: true + Debuff: true + - Status: Izayoi + Icon: EFST_IZAYOI + DurationLookup: KO_IZAYOI + CalcFlags: + Matk: true + - Status: Zenkai + Icon: EFST_ZENKAI + DurationLookup: KO_ZENKAI + - Status: Kagehumi + Icon: EFST_KG_KAGEHUMI + DurationLookup: KG_KAGEHUMI + States: + NoMove: true + NoConsumeItem: true + - Status: Kyomu + Icon: EFST_KYOMU + DurationLookup: KG_KYOMU + - Status: Kagemusya + Icon: EFST_KAGEMUSYA + DurationLookup: KG_KAGEMUSYA + - Status: Zangetsu + Icon: EFST_ZANGETSU + DurationLookup: OB_ZANGETSU + CalcFlags: + Matk: true + Batk: true + - Status: Gensou + Icon: EFST_GENSOU + DurationLookup: OB_OBOROGENSOU + - Status: Akaitsuki + Icon: EFST_AKAITSUKI + DurationLookup: OB_AKAITSUKI + Flags: + BlEffect: true + DisplayPc: true + Debuff: true + - Status: Style_Change + DurationLookup: MH_STYLE_CHANGE + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Tinder_Breaker + Icon: EFST_TINDER_BREAKER_POSTDELAY + DurationLookup: MH_TINDER_BREAKER + CalcFlags: + Flee: true + Flags: + NoSave: true + RemoveOnChangeMap: true + - Status: Tinder_Breaker2 + Icon: EFST_TINDER_BREAKER + DurationLookup: MH_TINDER_BREAKER + CalcFlags: + Flee: true + Flags: + NoSave: true + RemoveOnChangeMap: true + OverlapFail: true + - Status: Cbc + Icon: EFST_CBC + DurationLookup: MH_CBC + CalcFlags: + Flee: true + Flags: + NoSave: true + - Status: Eqc + Icon: EFST_EQC + DurationLookup: MH_EQC + CalcFlags: + Def2: true + MaxHp: true + Flags: + NoSave: true + End: + Tinder_Breaker2: true + - Status: Goldene_Ferse + Icon: EFST_GOLDENE_FERSE + DurationLookup: MH_GOLDENE_FERSE + CalcFlags: + Aspd: true + Flee: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + Fail: + Angriffs_Modus: true + - Status: Angriffs_Modus + Icon: EFST_ANGRIFFS_MODUS + DurationLookup: MH_ANGRIFFS_MODUS + CalcFlags: + Batk: true + Def: true + Flee: true + MaxHp: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + Fail: + Goldene_Ferse: true + - Status: Overed_Boost + Icon: EFST_OVERED_BOOST + DurationLookup: MH_OVERED_BOOST + CalcFlags: + Flee: true + Aspd: true + Def: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Overed_Boost: true + - Status: Light_Of_Regene + Icon: EFST_LIGHT_OF_REGENE + DurationLookup: MH_LIGHT_OF_REGENE + Flags: + NoRemoveOnDead: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Ash + Icon: EFST_VOLCANIC_ASH + DurationLookup: MH_VOLCANIC_ASH + CalcFlags: + Def: true + Def2: true + Hit: true + Batk: true + Flee: true + - Status: Granitic_Armor + Icon: EFST_GRANITIC_ARMOR + DurationLookup: MH_GRANITIC_ARMOR + - Status: Magma_Flow + Icon: EFST_MAGMA_FLOW + DurationLookup: MH_MAGMA_FLOW + - Status: Pyroclastic + Icon: EFST_PYROCLASTIC + DurationLookup: MH_PYROCLASTIC + CalcFlags: + Batk: true + Watk: true + - Status: Paralysis + Icon: EFST_NEEDLE_OF_PARALYZE + DurationLookup: MH_NEEDLE_OF_PARALYZE + States: + NoMove: true + CalcFlags: + Def2: true + Flags: + BossResist: true + StopWalking: true + NoRemoveOnDead: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Pain_Killer + Icon: EFST_PAIN_KILLER + DurationLookup: MH_PAIN_KILLER + Flags: + NoRemoveOnDead: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Hanbok + States: + NoAttack: true + Options: + Hanbok: true + Flags: + SendLook: true + StopAttacking: true + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Defset + Icon: EFST_SET_NUM_DEF + CalcFlags: + Def: true + Flags: + OverlapFail: true + - Status: Mdefset + Icon: EFST_SET_NUM_MDEF + CalcFlags: + Mdef: true + Flags: + OverlapFail: true + - Status: Darkcrow + Icon: EFST_DARKCROW + DurationLookup: GC_DARKCROW + Flags: + BlEffect: true + DisplayPc: true + - Status: Full_Throttle + Icon: EFST_FULL_THROTTLE + DurationLookup: ALL_FULL_THROTTLE + CalcFlags: + Speed: true + Str: true + Agi: true + Vit: true + Int: true + Dex: true + Luk: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Rebound + Icon: EFST_REBOUND + CalcFlags: + Speed: true + Regen: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Unlimit + Icon: EFST_UNLIMIT + DurationLookup: RA_UNLIMIT + Flags: + DisplayPc: true + - Status: Kings_Grace + Icon: EFST_KINGS_GRACE + DurationLookup: LG_KINGS_GRACE + States: + NoCast: true + NoAttack: true + NoMove: true + NoConsumeItem: true + Flags: + StopAttacking: true + StopWalking: true + StopCasting: true + Fail: + Devotion: true + Whiteimprison: true + End: + Poison: true + Blind: true + Freeze: true + Stone: true + Stun: true + Sleep: true + Bleeding: true + Curse: true + Confusion: true + Hallucination: true + Silence: true + Burning: true + Crystalize: true + Freezing: true + Deepsleep: true + Fear: true + Mandragora: true + - Status: Telekinesis_Intense + Icon: EFST_TELEKINESIS_INTENSE + DurationLookup: WL_TELEKINESIS_INTENSE + Flags: + DisplayPc: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + CalcFlags: + Matk: true + - Status: Offertorium + Icon: EFST_OFFERTORIUM + DurationLookup: AB_OFFERTORIUM + Flags: + DisplayPc: true + Fail: + Magnificat: true + End: + Magnificat: true + Blind: true + Curse: true + Poison: true + Hallucination: true + Confusion: true + Bleeding: true + Burning: true + Freezing: true + Mandragora: true + Paralyse: true + Pyrexia: true + Deathhurt: true + Leechesend: true + Venombleed: true + Toxin: true + Magicmushroom: true + - Status: Frigg_Song + Icon: EFST_FRIGG_SONG + DurationLookup: WM_FRIGG_SONG + CalcFlags: + MaxHp: true + - Status: Monster_Transform + Icon: EFST_MONSTER_TRANSFORM + Flags: + DisplayPc: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + SendVal1: true + - Status: Angel_Protect + Icon: EFST_ANGEL_PROTECT + Flags: + NoClearance: true + NoBanishingBuster: true + NoDispell: true + - Status: Illusiondoping + Icon: EFST_ILLUSIONDOPING + DurationLookup: GN_ILLUSIONDOPING + CalcFlags: + Hit: true + Flags: + BlEffect: true + DisplayPc: true + - Status: Flashcombo + Icon: EFST_FLASHCOMBO + DurationLookup: SR_FLASHCOMBO + CalcFlags: + Watk: true + - Status: Moonstar + Icon: EFST_MOONSTAR + Flags: + NoSave: true + BlEffect: true + DisplayPc: true + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Super_Star + Icon: EFST_SUPER_STAR + Flags: + NoSave: true + BlEffect: true + DisplayPc: true + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Heat_Barrel + Icon: EFST_HEAT_BARREL + DurationLookup: RL_HEAT_BARREL + CalcFlags: + Hit: true + Aspd: true + Flags: + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + Fail: + P_Alter: true + Madnesscancel: true + - Status: Magicalbullet + Icon: EFST_GS_MAGICAL_BULLET + DurationLookup: GS_MAGICALBULLET + - Status: P_Alter + Icon: EFST_P_ALTER + DurationLookup: RL_P_ALTER + Flags: + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + Fail: + Heat_Barrel: true + Madnesscancel: true + - Status: E_Chain + Icon: EFST_E_CHAIN + DurationLookup: RL_E_CHAIN + Flags: + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: C_Marker + Icon: EFST_C_MARKER + DurationLookup: RL_C_MARKER + CalcFlags: + Flee: true + Flags: + BlEffect: true + DisplayPc: true + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Anti_M_Blast + Icon: EFST_ANTI_M_BLAST + DurationLookup: RL_AM_BLAST + Flags: + BlEffect: true + DisplayPc: true + Debuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: B_Trap + Icon: EFST_B_TRAP + DurationLookup: RL_B_TRAP + CalcFlags: + Speed: true + Flags: + Debuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: H_Mine + Icon: EFST_H_MINE + DurationLookup: RL_H_MINE + Flags: + Debuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Qd_Shot_Ready + Icon: EFST_E_QD_SHOT_READY + Flags: + NoSave: true + - Status: Mtf_Aspd + Icon: EFST_MTF_ASPD + CalcFlags: + Aspd: true + Hit: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Mtf_Rangeatk + Icon: EFST_MTF_RANGEATK + CalcFlags: + Batk: true + Watk: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Mtf_Matk + Icon: EFST_MTF_MATK + CalcFlags: + Matk: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Mtf_Mleatked + Icon: EFST_MTF_MLEATKED + CalcFlags: + All: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Mtf_Cridamage + Icon: EFST_MTF_CRIDAMAGE + CalcFlags: + All: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Oktoberfest + States: + NoAttack: true + Options: + Oktoberfest: true + Flags: + SendLook: true + StopAttacking: true + NoRemoveOnDead: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Strangelights + Icon: EFST_STRANGELIGHTS + Flags: + NoSave: true + DisplayPc: true + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + BlEffect: true + - Status: Decoration_Of_Music + Icon: EFST_DECORATION_OF_MUSIC + Flags: + NoSave: true + DisplayPc: true + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + BlEffect: true + - Status: Quest_Buff1 + Icon: EFST_QUEST_BUFF1 + CalcFlags: + Batk: true + Matk: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Quest_Buff2 + Icon: EFST_QUEST_BUFF2 + CalcFlags: + Batk: true + Matk: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Quest_Buff3 + Icon: EFST_QUEST_BUFF3 + CalcFlags: + Batk: true + Matk: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: All_Riding + Icon: EFST_ALL_RIDING + States: + NoAttack: true + CalcFlags: + Speed: true + Flags: + BlEffect: true + DisplayPc: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + All_Riding: true + EndReturn: true + - Status: Teargas_Sob + Flags: + BossResist: true + - Status: _Feintbomb + DurationLookup: SC_FEINTBOMB + States: + NoPickItem: true + Options: + Invisible: true + Flags: + UnitMove: true + OnTouch: true + StopAttacking: true + - Status: _Chaos + Flags: + StopWalking: true + Fail: + _Chaos: true + - Status: Chasewalk2 + Icon: EFST_CHASEWALK2 + CalcFlags: + Str: true + Flags: + NoSave: true + NoClearance: true + RemoveOnChangeMap: true + NoBanishingBuster: true + NoDispell: true + - Status: Extremityfist2 + Icon: EFST_EXTREMITYFIST + DurationLookup: MO_EXTREMITYFIST + Flags: + NoRemoveOnDead: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Mtf_Aspd2 + Icon: EFST_MTF_ASPD2 + CalcFlags: + Aspd: true + Hit: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Mtf_Rangeatk2 + Icon: EFST_MTF_RANGEATK2 + CalcFlags: + Aspd: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Mtf_Matk2 + Icon: EFST_MTF_MATK2 + CalcFlags: + Matk: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: 2011rwc_Scroll + Icon: EFST_2011RWC_SCROLL + CalcFlags: + Str: true + Agi: true + Vit: true + Int: true + Dex: true + Luk: true + Batk: true + Matk: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Food_Str_Cash: true + Food_Agi_Cash: true + Food_Vit_Cash: true + Food_Int_Cash: true + Food_Dex_Cash: true + Food_Luk_Cash: true + - Status: Jp_Event04 + Icon: EFST_JP_EVENT04 + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + SendVal1: true + - Status: Mtf_Mhp + Icon: EFST_MTF_MHP + CalcFlags: + MaxHp: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Mtf_Msp + Icon: EFST_MTF_MSP + CalcFlags: + MaxSp: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Mtf_Pumpkin + Icon: EFST_MTF_PUMPKIN + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Mtf_Hitflee + Icon: EFST_MTF_HITFLEE + CalcFlags: + Hit: true + Flee: true + Cri: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Vacuum_Extreme_Postdelay + DurationLookup: SO_VACUUM_EXTREME + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Crifood + Icon: EFST_FOOD_CRITICALSUCCESSVALUE + CalcFlags: + Cri: true + Flags: + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Atthaste_Cash + Icon: EFST_ATTHASTE_CASH + CalcFlags: + Aspd: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapIgnoreLevel: true + - Status: Reuse_Limit_A + Icon: EFST_REUSE_LIMIT_A + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: Reuse_Limit_B + Icon: EFST_REUSE_LIMIT_B + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: Reuse_Limit_C + Icon: EFST_REUSE_LIMIT_C + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: Reuse_Limit_D + Icon: EFST_REUSE_LIMIT_D + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: Reuse_Limit_E + Icon: EFST_REUSE_LIMIT_E + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: Reuse_Limit_F + Icon: EFST_REUSE_LIMIT_F + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: Reuse_Limit_G + Icon: EFST_REUSE_LIMIT_G + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: Reuse_Limit_H + Icon: EFST_REUSE_LIMIT_H + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: Reuse_Limit_Mtf + Icon: EFST_REUSE_LIMIT_MTF + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: Reuse_Limit_Aspd_Potion + Icon: EFST_REUSE_LIMIT_ASPD_POTION + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: Reuse_Millenniumshield + Icon: EFST_REUSE_MILLENNIUMSHIELD + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: Reuse_Crushstrike + Icon: EFST_REUSE_CRUSHSTRIKE + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: Reuse_Stormblast + Icon: EFST_REUSE_STORMBLAST + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: All_Riding_Reuse_Limit + Icon: EFST_ALL_RIDING_REUSE_LIMIT + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: Reuse_Limit_Ecl + Icon: EFST_REUSE_LIMIT_ECL + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: Reuse_Limit_Recall + Icon: EFST_REUSE_LIMIT_RECALL + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapFail: true + - Status: Promote_Health_Reserch + Icon: EFST_PROMOTE_HEALTH_RESERCH + CalcFlags: + MaxHp: true + - Status: Energy_Drink_Reserch + Icon: EFST_ENERGY_DRINK_RESERCH + CalcFlags: + MaxSp: true + - Status: Norecover_State + Icon: EFST_HANDICAPSTATE_NORECOVER + Flags: + OverlapFail: true + - Status: Suhide + Icon: EFST_SUHIDE + DurationLookup: SU_HIDE + States: + NoMove: true + NoPickItem: true + NoConsumeItem: true + NoAttack: true + NoInteract: true + Flags: + StopAttacking: true + RemoveOnDamaged: true + RemoveOnChangeMap: true + RemoveOnMapWarp: true + - Status: Su_Stoop + Icon: EFST_SU_STOOP + DurationLookup: SU_STOOP + - Status: Spritemable + Icon: EFST_SPRITEMABLE + Flags: + DisplayPc: true + NoRemoveOnDead: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoSave: true + NoClearbuff: true + - Status: Catnippowder + Icon: EFST_CATNIPPOWDER + DurationLookup: SU_CN_POWDERING + CalcFlags: + Watk: true + Matk: true + Speed: true + Regen: true + Flags: + BossResist: true + - Status: Sv_Roottwist + Icon: EFST_SV_ROOTTWIST + DurationLookup: SU_SV_ROOTTWIST + States: + NoMove: true + Flags: + BlEffect: true + DisplayPc: true + BossResist: true + StopWalking: true + NoSave: true + - Status: Bitescar + Icon: EFST_BITESCAR + DurationLookup: SU_SCAROFTAROU + Flags: + BossResist: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + - Status: Arclousedash + Icon: EFST_ARCLOUSEDASH + DurationLookup: SU_ARCLOUSEDASH + CalcFlags: + Agi: true + Speed: true + - Status: Tunaparty + Icon: EFST_TUNAPARTY + DurationLookup: SU_TUNAPARTY + - Status: Shrimp + Icon: EFST_SHRIMP + DurationLookup: SU_BUNCHOFSHRIMP + CalcFlags: + Batk: true + Matk: true + - Status: Freshshrimp + Icon: EFST_FRESHSHRIMP + DurationLookup: SU_FRESHSHRIMP + Flags: + BossResist: true + - Status: Active_Monster_Transform + Icon: EFST_ACTIVE_MONSTER_TRANSFORM + Flags: + DisplayPc: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + SendVal1: true + # deprecated + #- Status: Cloud_Kill + - Status: Ljosalfar + Icon: EFST_LJOSALFAR + Flags: + BlEffect: true + DisplayPc: true + NoRemoveOnDead: true + NoSave: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Mermaid_Longing + Icon: EFST_MERMAID_LONGING + Flags: + BlEffect: true + DisplayPc: true + NoRemoveOnDead: true + NoSave: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Hat_Effect + Icon: EFST_HAT_EFFECT + Flags: + BlEffect: true + DisplayPc: true + NoRemoveOnDead: true + NoSave: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Flowersmoke + Icon: EFST_FLOWERSMOKE + Flags: + BlEffect: true + DisplayPc: true + NoRemoveOnDead: true + NoSave: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Fstone + Icon: EFST_FSTONE + Flags: + BlEffect: true + DisplayPc: true + NoRemoveOnDead: true + NoSave: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Happiness_Star + Icon: EFST_HAPPINESS_STAR + Flags: + BlEffect: true + DisplayPc: true + NoRemoveOnDead: true + NoSave: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Maple_Falls + Icon: EFST_MAPLE_FALLS + Flags: + BlEffect: true + DisplayPc: true + NoRemoveOnDead: true + NoSave: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Time_Accessory + Icon: EFST_TIME_ACCESSORY + Flags: + BlEffect: true + DisplayPc: true + NoRemoveOnDead: true + NoSave: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Magical_Feather + Icon: EFST_MAGICAL_FEATHER + Flags: + BlEffect: true + DisplayPc: true + NoRemoveOnDead: true + NoSave: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Gvg_Giant + Icon: EFST_GVG_GIANT + - Status: Gvg_Golem + Icon: EFST_GVG_GOLEM + - Status: Gvg_Stun + Icon: EFST_GVG_STUN + End: + Gvg_Stun: true + - Status: Gvg_Stone + Icon: EFST_GVG_STONE + End: + Stone: true + - Status: Gvg_Freez + Icon: EFST_GVG_FREEZ + End: + Freeze: true + - Status: Gvg_Sleep + Icon: EFST_GVG_SLEEP + End: + Sleep: true + - Status: Gvg_Curse + Icon: EFST_GVG_CURSE + End: + Curse: true + - Status: Gvg_Silence + Icon: EFST_GVG_SILENCE + End: + Silence: true + - Status: Gvg_Blind + Icon: EFST_GVG_BLIND + End: + Blind: true + - Status: Clan_Info + Icon: EFST_CLAN_INFO + Flags: + DisplayPc: true + DisplayNpc: true + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + SendVal2: true + - Status: Swordclan + Icon: EFST_SWORDCLAN + CalcFlags: + Str: true + Vit: true + MaxHp: true + MaxSp: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + SendVal1: true + - Status: Arcwandclan + Icon: EFST_ARCWANDCLAN + CalcFlags: + Int: true + Dex: true + MaxHp: true + MaxSp: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + SendVal1: true + - Status: Goldenmaceclan + Icon: EFST_GOLDENMACECLAN + CalcFlags: + Luk: true + Int: true + MaxHp: true + MaxSp: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + SendVal1: true + - Status: Crossbowclan + Icon: EFST_CROSSBOWCLAN + CalcFlags: + Agi: true + Vit: true + MaxHp: true + MaxSp: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + SendVal1: true + - Status: Jumpingclan + Icon: EFST_JUMPINGCLAN + CalcFlags: + Str: true + Agi: true + Vit: true + Int: true + Dex: true + Luk: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + SendVal1: true + - Status: Tarotcard + Icon: EFST_TAROTCARD + DurationLookup: CG_TAROTCARD + - Status: Geffen_Magic1 + Icon: EFST_GEFFEN_MAGIC1 + CalcFlags: + All: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + - Status: Geffen_Magic2 + Icon: EFST_GEFFEN_MAGIC2 + CalcFlags: + All: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + - Status: Geffen_Magic3 + Icon: EFST_GEFFEN_MAGIC3 + CalcFlags: + All: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + - Status: Maxpain + Icon: EFST_MAXPAIN + DurationLookup: NPC_MAXPAIN + Flags: + BlEffect: true + - Status: Armor_Element_Earth + Icon: EFST_RESIST_PROPERTY_GROUND + CalcFlags: + All: true + Flags: + NoDispell: true + OverlapIgnoreLevel: true + - Status: Armor_Element_Fire + Icon: EFST_RESIST_PROPERTY_FIRE + CalcFlags: + All: true + Flags: + NoDispell: true + OverlapIgnoreLevel: true + - Status: Armor_Element_Wind + Icon: EFST_RESIST_PROPERTY_WIND + CalcFlags: + All: true + Flags: + NoDispell: true + OverlapIgnoreLevel: true + - Status: Dailysendmailcnt + Icon: EFST_DAILYSENDMAILCNT + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoDispell: true + NoClearance: true + NoBanishingBuster: true + SendVal2: true + - Status: Doram_Buf_01 + Icon: EFST_DORAM_BUF_01 + CalcFlags: + Regen: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoBanishingBuster: true + OverlapFail: true + NoDispell: true + NoClearance: true + - Status: Doram_Buf_02 + Icon: EFST_DORAM_BUF_02 + CalcFlags: + Regen: true + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoBanishingBuster: true + OverlapFail: true + NoDispell: true + NoClearance: true + - Status: Hiss + Icon: EFST_HISS + DurationLookup: SU_HISS + Flags: + NoRemoveOnDead: true + CalcFlags: + Flee2: true + - Status: Nyanggrass + Icon: EFST_NYANGGRASS + DurationLookup: SU_NYANGGRASS + Flags: + NoRemoveOnDead: true + CalcFlags: + Def: true + Mdef: true + - Status: Grooming + Icon: EFST_GROOMING + DurationLookup: SU_GROOMING + CalcFlags: + Flee: true + Flags: + NoRemoveOnDead: true + Fail: + Grooming: true + End: + Stun: true + Freeze: true + Stone: true + Sleep: true + Silence: true + Bleeding: true + Poison: true + Fear: true + Mandragora: true + Crystalize: true + Freezing: true + - Status: Shrimpblessing + Icon: EFST_PROTECTIONOFSHRIMP + DurationLookup: SU_SHRIMPARTY + CalcFlags: + Regen: true + Flags: + NoRemoveOnDead: true + - Status: Chattering + Icon: EFST_CHATTERING + DurationLookup: SU_CHATTERING + CalcFlags: + Watk: true + Matk: true + Flags: + NoRemoveOnDead: true + Fail: + Chattering: true + - Status: Doram_Walkspeed + CalcFlags: + Speed: true + - Status: Doram_Matk + CalcFlags: + Matk: true + - Status: Doram_Flee2 + CalcFlags: + Flee2: true + - Status: Doram_Svsp + - Status: Fallen_Angel + DurationLookup: RL_FALLEN_ANGEL + - Status: Cheerup + Icon: EFST_CHEERUP + DurationLookup: WE_CHEERUP + CalcFlags: + Str: true + Agi: true + Vit: true + Int: true + Dex: true + Luk: true + Flags: + NoRemoveOnDead: true + - Status: Dressup + Icon: EFST_DRESS_UP + States: + NoAttack: true + Options: + Summer2: true + Flags: + DisplayPc: true + SendLook: true + StopAttacking: true + NoRemoveOnDead: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + SendVal1: true + - Status: Glastheim_Atk + Icon: EFST_GLASTHEIM_ATK + CalcFlags: + All: true + Flags: + NoSave: true + - Status: Glastheim_Def + Icon: EFST_GLASTHEIM_DEF + Flags: + NoSave: true + - Status: Glastheim_Heal + Icon: EFST_GLASTHEIM_HEAL + Flags: + NoSave: true + - Status: Glastheim_Hidden + Icon: EFST_GLASTHEIM_HIDDEN + Flags: + NoSave: true + - Status: Glastheim_State + Icon: EFST_GLASTHEIM_STATE + CalcFlags: + Str: true + Agi: true + Vit: true + Dex: true + Int: true + Luk: true + Flags: + NoSave: true + - Status: Glastheim_Itemdef + Icon: EFST_GLASTHEIM_ITEMDEF + CalcFlags: + Def: true + Mdef: true + Flags: + NoSave: true + - Status: Glastheim_Hpsp + Icon: EFST_GLASTHEIM_HPSP + CalcFlags: + MaxHp: true + MaxSp: true + Flags: + NoSave: true + - Status: Lhz_Dun_N1 + Icon: EFST_LHZ_DUN_N1 + Flags: + NoClearbuff: true + NoClearance: true + NoRemoveOnDead: true + NoBanishingBuster: true + NoDispell: true + OverlapIgnoreLevel: true + - Status: Lhz_Dun_N2 + Icon: EFST_LHZ_DUN_N2 + Flags: + NoClearbuff: true + NoClearance: true + NoRemoveOnDead: true + NoBanishingBuster: true + NoDispell: true + OverlapIgnoreLevel: true + - Status: Lhz_Dun_N3 + Icon: EFST_LHZ_DUN_N3 + Flags: + NoClearbuff: true + NoClearance: true + NoRemoveOnDead: true + NoBanishingBuster: true + NoDispell: true + OverlapIgnoreLevel: true + - Status: Lhz_Dun_N4 + Icon: EFST_LHZ_DUN_N4 + Flags: + NoClearbuff: true + NoClearance: true + NoRemoveOnDead: true + NoBanishingBuster: true + NoDispell: true + OverlapIgnoreLevel: true + - Status: Ancilla + Icon: EFST_ANCILLA + Flags: + NoRemoveOnDead: true + CalcFlags: + Regen: true + - Status: Earthshaker + - Status: Weaponblock_On + Icon: EFST_WEAPONBLOCK_ON + DurationLookup: SHC_IMPACT_CRATER + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + NoClearbuff: true + - Status: Spore_Explosion + Icon: EFST_SPORE_EXPLOSION_DEBUFF + DurationLookup: GN_SPORE_EXPLOSION + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Adaptation + Icon: EFST_ADAPTATION + DurationLookup: BD_ADAPTATION + - Status: Basilica_Cell + States: + NoCast: true + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoClearbuff: true + RemoveOnChangeMap: true + - Status: Entry_Queue_Apply_Delay + Icon: EFST_ENTRY_QUEUE_APPLY_DELAY + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + NoClearbuff: true + - Status: Entry_Queue_Notify_Admission_Time_Out + Icon: EFST_ENTRY_QUEUE_NOTIFY_ADMISSION_TIME_OUT + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + NoRemoveOnDead: true + NoClearbuff: true + - Status: Lightofmoon + Icon: EFST_LIGHTOFMOON + DurationLookup: SJ_LIGHTOFMOON + End: + Lunarstance: true + Universestance: true + - Status: Lightofsun + Icon: EFST_LIGHTOFSUN + DurationLookup: SJ_LIGHTOFSUN + End: + Lightofsun: true + Universestance: true + - Status: Lightofstar + Icon: EFST_LIGHTOFSTAR + DurationLookup: SJ_LIGHTOFSTAR + End: + Starstance: true + Universestance: true + - Status: Lunarstance + Icon: EFST_LUNARSTANCE + DurationLookup: SJ_LUNARSTANCE + CalcFlags: + MaxHp: true + End: + Sunstance: true + Starstance: true + Universestance: true + - Status: Universestance + Icon: EFST_UNIVERSESTANCE + DurationLookup: SJ_UNIVERSESTANCE + CalcFlags: + Str: true + Agi: true + Vit: true + Int: true + Dex: true + Luk: true + End: + Sunstance: true + Lunarstance: true + Starstance: true + - Status: Sunstance + Icon: EFST_SUNSTANCE + DurationLookup: SJ_SUNSTANCE + CalcFlags: + Batk: true + Watk: true + End: + Lunarstance: true + Starstance: true + Universestance: true + - Status: Flashkick + Icon: EFST_FLASHKICK + DurationLookup: SJ_FLASHKICK + Flags: + RemoveOnChangeMap: true + NoBanishingBuster: true + NoDispell: true + NoClearance: true + OverlapIgnoreLevel: true + - Status: Newmoon + Icon: EFST_NEWMOON + DurationLookup: SJ_NEWMOONKICK + States: + NoPickItem: true + Options: + Cloak: true + Flags: + OnTouch: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + StopAttacking: true + RemoveOnDamaged: true + RemoveOnChangeMap: true + Fail: + Bite: true + - Status: Starstance + Icon: EFST_STARSTANCE + DurationLookup: SJ_STARSTANCE + CalcFlags: + Aspd: true + End: + Sunstance: true + Lunarstance: true + Universestance: true + - Status: Dimension + Icon: EFST_DIMENSION + DurationLookup: SJ_BOOKOFDIMENSION + Flags: + NoClearance: true + - Status: Dimension1 + - Status: Dimension2 + - Status: Creatingstar + Icon: EFST_CREATINGSTAR + DurationLookup: SJ_BOOKOFCREATINGSTAR + CalcFlags: + Speed: true + Flags: + Debuff: true + Fail: + Speedup1: true + - Status: Fallingstar + Icon: EFST_FALLINGSTAR + DurationLookup: SJ_FALLINGSTAR + - Status: Novaexplosing + Icon: EFST_NOVAEXPLOSING + DurationLookup: SJ_NOVAEXPLOSING + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Gravitycontrol + Icon: EFST_GRAVITYCONTROL + DurationLookup: SJ_GRAVITYCONTROL + States: + NoMove: true + NoCast: true + NoAttack: true + NoInteract: true + Flags: + StopCasting: true + StopAttacking: true + StopWalking: true + - Status: Soulcollect + Icon: EFST_SOULCOLLECT + DurationLookup: SP_SOULCOLLECT + MinDuration: 1000 + - Status: Soulreaper + Icon: EFST_SOULREAPER + DurationLookup: SP_SOULREAPER + - Status: Soulunity + Icon: EFST_SOULUNITY + DurationLookup: SP_SOULUNITY + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + OverlapIgnoreLevel: true + - Status: Soulshadow + Icon: EFST_SOULSHADOW + DurationLookup: SP_SOULSHADOW + CalcFlags: + Aspd: true + Cri: true + Flags: + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Spirit: true + Soulgolem: true + Soulfalcon: true + Soulfairy: true + - Status: Soulfairy + Icon: EFST_SOULFAIRY + DurationLookup: SP_SOULFAIRY + CalcFlags: + Matk: true + Flags: + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Spirit: true + Soulgolem: true + Soulshadow: true + Soulfalcon: true + - Status: Soulfalcon + Icon: EFST_SOULFALCON + DurationLookup: SP_SOULFALCON + CalcFlags: + Watk: true + Hit: true + Flags: + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Spirit: true + Soulgolem: true + Soulshadow: true + Soulfairy: true + - Status: Soulgolem + Icon: EFST_SOULGOLEM + DurationLookup: SP_SOULGOLEM + CalcFlags: + Def: true + Mdef: true + Flags: + NoSave: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + End: + Spirit: true + Soulshadow: true + Soulfalcon: true + Soulfairy: true + - Status: Souldivision + Icon: EFST_SOULDIVISION + DurationLookup: SP_SOULDIVISION + - Status: Soulenergy + Icon: EFST_SOULENERGY + Flags: + NoRemoveOnDead: true + NoClearbuff: true + NoBanishingBuster: true + NoDispell: true + NoClearance: true + - Status: Use_Skill_Sp_Spa + Icon: EFST_USE_SKILL_SP_SPA + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Use_Skill_Sp_Sha + Icon: EFST_USE_SKILL_SP_SHA + Flags: + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Sp_Sha + Icon: EFST_SP_SHA + DurationLookup: SP_SHA + CalcFlags: + Speed: true + Flags: + BossResist: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true + - Status: Soulcurse + Icon: EFST_SOULCURSE + DurationLookup: SP_SOULCURSE + - Status: Hells_Plant + Icon: EFST_HELLS_PLANT_ARMOR + DurationLookup: GN_HELLS_PLANT + Flags: + NoSave: true + RemoveOnChangeMap: true + DisplayPc: true + BlEffect: true + - Status: Increase_Maxhp + Icon: EFST_ATKER_ASPD + CalcFlags: + MaxHp: true + Regen: true + - Status: Increase_Maxsp + Icon: EFST_ATKER_MOVESPEED + CalcFlags: + MaxHp: true + Regen: true + - Status: Ref_T_Potion + Icon: EFST_REF_T_POTION + - Status: Add_Atk_Damage + Icon: EFST_ADD_ATK_DAMAGE + - Status: Add_Matk_Damage + Icon: EFST_ADD_MATK_DAMAGE + - Status: Helpangel + Icon: EFST_HELPANGEL + DurationLookup: NV_HELPANGEL + - Status: Soundofdestruction + Icon: EFST_SOUND_OF_DESTRUCTION + DurationLookup: WM_SOUND_OF_DESTRUCTION + - Status: Luxanima + Icon: EFST_LUXANIMA + DurationLookup: RK_LUXANIMA + CalcFlags: + All: true + Flags: + NoBanishingBuster: true + NoDispell: true + NoClearance: true + NoClearbuff: true + - Status: Reuse_Limit_Luxanima + Flags: + NoBanishingBuster: true + NoDispell: true + NoClearance: true + OverlapFail: true + NoRemoveOnDead: true + NoClearbuff: true + - Status: Ensemblefatigue + Icon: EFST_ENSEMBLEFATIGUE + States: + NoCast: true + CalcFlags: + Speed: true + Aspd: true + - Status: Misty_Frost + Icon: EFST_MISTY_FROST + Flags: + DisplayPc: true + SendVal1: true + - Status: Magic_Poison + Icon: EFST_MAGIC_POISON + DurationLookup: WL_COMET + Flags: + DisplayPc: true + BlEffect: true + - Status: Ep16_2_Buff_Ss + Icon: EFST_EP16_2_BUFF_SS + CalcFlags: + Aspd: true + Flags: + NoBanishingBuster: true + NoDispell: true + NoClearance: true + NoClearbuff: true + - Status: Ep16_2_Buff_Sc + Icon: EFST_EP16_2_BUFF_SC + CalcFlags: + Cri: true + Flags: + NoBanishingBuster: true + NoDispell: true + NoClearance: true + NoClearbuff: true + - Status: Ep16_2_Buff_Ac + Icon: EFST_EP16_2_BUFF_AC + Flags: + NoBanishingBuster: true + NoDispell: true + NoClearance: true + NoClearbuff: true + - Status: OverBrandReady + Icon: EFST_OVERBRANDREADY + Flags: + - Status: Poison_Mist + Icon: EFST_POISON_MIST + DurationLookup: MH_POISON_MIST + CalcFlags: + Flee: true + Flags: + - Status: Stone_Wall + Icon: EFST_STONE_WALL + DurationLookup: MH_STEINWAND + CalcFlags: + Def: true + Mdef: true + Flags: + - Status: Cloud_Poison + Icon: EFST_CLOUD_POISON + DurationLookup: SO_CLOUD_KILL + Flags: + - Status: Homun_Time + Icon: EFST_HOMUN_TIME + Flags: + DisplayPc: true + NoRemoveOnDead: true + NoBanishingBuster: true + NoDispell: true + NoClearance: true + NoClearbuff: true + - Status: Emergency_Move + Icon: EFST_INC_AGI + DurationLookup: GD_EMERGENCY_MOVE + CalcFlags: + Speed: true + Flags: + NoSave: true + NoBanishingBuster: true + NoDispell: true + NoClearance: true + NoClearbuff: true + - Status: Madogear + Icon: EFST_MADOGEAR + CalcFlags: + Speed: true + Flags: + DisplayPc: true + NoRemoveOnDead: true + NoBanishingBuster: true + NoDispell: true + NoClearance: true + NoClearbuff: true + SendVal1: true + End: + Shapeshift: true + Hovering: true + Acceleration: true + Overheat_Limitpoint: true + Overheat: true + Magneticfield: true + Neutralbarrier_Master: true + Stealthfield_Master: true + - Status: Npc_HallucinationWalk + Icon: EFST_NPC_HALLUCINATIONWALK + DurationLookup: NPC_HALLUCINATIONWALK + CalcFlags: + Flee: true + Flags: + SendVal3: true + - Status: Packing_Envelope1 + Icon: EFST_PACKING_ENVELOPE1 + CalcFlags: + Watk: true + Flags: + NoRemoveOnDead: true + NoBanishingBuster: true + NoDispell: true + NoClearance: true + - Status: Packing_Envelope2 + Icon: EFST_PACKING_ENVELOPE2 + CalcFlags: + Matk: true + Flags: + NoRemoveOnDead: true + NoBanishingBuster: true + NoDispell: true + NoClearance: true + - Status: Packing_Envelope3 + Icon: EFST_PACKING_ENVELOPE3 + CalcFlags: + MaxHp: true + Flags: + NoRemoveOnDead: true + NoBanishingBuster: true + NoDispell: true + NoClearance: true + - Status: Packing_Envelope4 + Icon: EFST_PACKING_ENVELOPE4 + CalcFlags: + MaxSp: true + Flags: + NoRemoveOnDead: true + NoBanishingBuster: true + NoDispell: true + NoClearance: true + - Status: Packing_Envelope5 + Icon: EFST_PACKING_ENVELOPE5 + CalcFlags: + Flee: true + Flags: + NoRemoveOnDead: true + NoBanishingBuster: true + NoDispell: true + NoClearance: true + - Status: Packing_Envelope6 + Icon: EFST_PACKING_ENVELOPE6 + CalcFlags: + Aspd: true + Flags: + NoRemoveOnDead: true + NoBanishingBuster: true + NoDispell: true + NoClearance: true + - Status: Packing_Envelope7 + Icon: EFST_PACKING_ENVELOPE7 + CalcFlags: + Def: true + Flags: + NoRemoveOnDead: true + NoBanishingBuster: true + NoDispell: true + NoClearance: true + - Status: Packing_Envelope8 + Icon: EFST_PACKING_ENVELOPE8 + CalcFlags: + Mdef: true + Flags: + NoRemoveOnDead: true + NoBanishingBuster: true + NoDispell: true + NoClearance: true + - Status: Packing_Envelope9 + Icon: EFST_PACKING_ENVELOPE9 + CalcFlags: + Cri: true + Flags: + NoRemoveOnDead: true + NoBanishingBuster: true + NoDispell: true + NoClearance: true + - Status: Packing_Envelope10 + Icon: EFST_PACKING_ENVELOPE10 + CalcFlags: + Hit: true + Flags: + NoRemoveOnDead: true + NoBanishingBuster: true + NoDispell: true + NoClearance: true + - Status: Soulattack + Icon: EFST_SOULATTACK + Flags: + DisplayPc: true + NoRemoveOnDead: true + NoClearbuff: true + - Status: Wideweb + Icon: EFST_WIDEWEB + DurationLookup: NPC_WIDEWEB + CalcFlags: + Flee: true + Flags: + StopWalking: true + - Status: Burnt + Icon: EFST_BURNT + DurationLookup: NPC_FIRESTORM + Flags: + BlEffect: true + Fail: + Chill: true + - Status: Chill + Icon: EFST_CHILL + End: + Burnt: true + - Status: Handicapstate_Deepblind + Icon: EFST_HANDICAPSTATE_DEEPBLIND + DurationLookup: DK_SERVANT_W_PHANTOM + CalcFlags: + Flee: true + Flee2: true + Flags: + BlEffect: true + DisplayPc: true + - Status: Handicapstate_Deepsilence + Icon: EFST_HANDICAPSTATE_DEEPSILENCE + DurationLookup: CD_ARBITRIUM + #States: + #NoCast: true + CalcFlags: + Aspd: true + Flags: + BlEffect: true + DisplayPc: true + - Status: Handicapstate_Lassitude + CalcFlags: + Speed: true + Cri: true + Flags: + DisplayPc: true + - Status: Handicapstate_Frostbite + Icon: EFST_HANDICAPSTATE_FROSTBITE + DurationLookup: EM_DIAMOND_STORM + States: + #NoMove: true + #NoCast: true + NoConsumeItem: true + CalcFlags: + Def: true + Mdef: true + Def_Ele: true + Flags: + BlEffect: true + DisplayPc: true + RemoveOnDamaged: true + - Status: Handicapstate_Swooning + States: + #NoMove: true + #NoCast: true + NoConsumeItem: true + Flags: + DisplayPc: true + RemoveOnDamaged: true + - Status: Handicapstate_Lightningstrike + Icon: EFST_HANDICAPSTATE_LIGHTNINGSTRIKE + DurationLookup: WH_SWIFTTRAP + States: + #NoMove: true + #NoCast: true + NoConsumeItem: true + CalcFlags: + Def_Ele: true + Flags: + BlEffect: true + DisplayPc: true + RemoveOnDamaged: true + - Status: Handicapstate_Crystallization + Icon: EFST_HANDICAPSTATE_CRYSTALLIZATION + DurationLookup: WH_SOLIDTRAP + States: + #NoMove: true + #NoCast: true + NoConsumeItem: true + CalcFlags: + Mdef: true + Def_Ele: true + Flags: + BlEffect: true + DisplayPc: true + RemoveOnDamaged: true + - Status: Handicapstate_Conflagration + Icon: EFST_HANDICAPSTATE_CONFLAGRATION + DurationLookup: WH_FLAMETRAP + Flags: + BlEffect: true + DisplayPc: true + - Status: Handicapstate_Misfortune + Icon: EFST_HANDICAPSTATE_MISFORTUNE + DurationLookup: ABC_UNLUCKY_RUSH + CalcFlags: + Hit: true + Flags: + BlEffect: true + DisplayPc: true + - Status: Handicapstate_Deadlypoison + Icon: EFST_HANDICAPSTATE_DEADLYPOISON + DurationLookup: EM_VENOM_SWAMP + CalcFlags: + Def: true + Flags: + BlEffect: true + DisplayPc: true + - Status: Handicapstate_Depression + Flags: + DisplayPc: true + - Status: Handicapstate_Holyflame + Flags: + DisplayPc: true + - Status: Servantweapon + Icon: EFST_SERVANTWEAPON + DurationLookup: DK_SERVANTWEAPON + Flags: + NoBanishingBuster: true + NoDispell: true + NoClearance: true + - Status: Servant_Sign + Icon: EFST_SERVANT_SIGN + DurationLookup: DK_SERVANT_W_SIGN + Flags: + BlEffect: true + DisplayPc: true + OverlapIgnoreLevel: true + RemoveOnChangeMap: true + NoBanishingBuster: true + NoDispell: true + NoClearance: true + - Status: Chargingpierce + Icon: EFST_CHARGINGPIERCE + DurationLookup: DK_CHARGINGPIERCE + Flags: + SendVal1: true + - Status: Chargingpierce_Count + Icon: EFST_CHARGINGPIERCE_COUNT + Flags: + DisplayPc: true + - Status: Dragonic_Aura + Icon: EFST_DRAGONIC_AURA + DurationLookup: DK_DRAGONIC_AURA + Flags: + BlEffect: true + DisplayPc: true + - Status: Vigor + Icon: EFST_VIGOR + DurationLookup: DK_VIGOR + CalcFlags: + All: true + Flags: + BlEffect: true + DisplayPc: true + - Status: Deadly_Defeasance + Icon: EFST_DEADLY_DEFEASANCE + DurationLookup: AG_DEADLY_PROJECTION + CalcFlags: + All: true + Flags: + BlEffect: true + DisplayPc: true + - Status: Climax_Des_Hu + Icon: EFST_CLIMAX_DES_HU + DurationLookup: AG_DESTRUCTIVE_HURRICANE + CalcFlags: + Matk: true + - Status: Climax + Icon: EFST_CLIMAX + DurationLookup: AG_CLIMAX + CalcFlags: + All: true + Flags: + BlEffect: true + DisplayPc: true + SendVal1: true + - Status: Climax_Earth + Icon: EFST_CLIMAX_EARTH + DurationLookup: AG_VIOLENT_QUAKE + CalcFlags: + All: true + - Status: Climax_Bloom + Icon: EFST_CLIMAX_BLOOM + DurationLookup: AG_ALL_BLOOM + CalcFlags: + All: true + - Status: Climax_Cryimp + Icon: EFST_CLIMAX_CRYIMP + DurationLookup: AG_CRYSTAL_IMPACT + CalcFlags: + All: true + - Status: Windsign + Icon: EFST_WINDSIGN + DurationLookup: WH_WIND_SIGN + Flags: + BlEffect: true + DisplayPc: true + - Status: Crescivebolt + Icon: EFST_CRESCIVEBOLT + DurationLookup: WH_CRESCIVE_BOLT + - Status: Calamitygale + Icon: EFST_CALAMITYGALE + DurationLookup: WH_CALAMITYGALE + Flags: + BlEffect: true + DisplayPc: true + - Status: Mediale + Icon: EFST_MEDIALE + DurationLookup: CD_MEDIALE_VOTUM + Flags: + BlEffect: true + DisplayPc: true + - Status: A_Vita + Icon: EFST_A_VITA + DurationLookup: CD_ARGUTUS_VITA + - Status: A_Telum + Icon: EFST_A_TELUM + DurationLookup: CD_ARGUTUS_TELUM + - Status: Pre_Acies + Icon: EFST_PRE_ACIES + DurationLookup: CD_PRESENS_ACIES + CalcFlags: + Crate: true + Flags: + BlEffect: true + DisplayPc: true + - Status: Competentia + Icon: EFST_COMPETENTIA + DurationLookup: CD_COMPETENTIA + CalcFlags: + Patk: true + Smatk: true + Flags: + BlEffect: true + DisplayPc: true + - Status: Religio + Icon: EFST_RELIGIO + DurationLookup: CD_RELIGIO + CalcFlags: + Sta: true + Wis: true + Spl: true + Flags: + BlEffect: true + DisplayPc: true + - Status: Benedictum + Icon: EFST_BENEDICTUM + DurationLookup: CD_BENEDICTUM + CalcFlags: + Pow: true + Con: true + Crt: true + Flags: + BlEffect: true + DisplayPc: true + - Status: Axe_Stomp + Icon: EFST_AXE_STOMP + DurationLookup: MT_AXE_STOMP + - Status: A_Machine + Icon: EFST_A_MACHINE + DurationLookup: MT_A_MACHINE + Flags: + BlEffect: true + DisplayPc: true + - Status: D_Machine + Icon: EFST_D_MACHINE + DurationLookup: MT_D_MACHINE + CalcFlags: + Def: true + Res: true + Flags: + BlEffect: true + DisplayPc: true + - Status: Abr_Battle_Warior + Icon: EFST_ABR_BATTLE_WARIOR + DurationLookup: MT_SUMMON_ABR_BATTLE_WARIOR + - Status: Abr_Dual_Cannon + Icon: EFST_ABR_DUAL_CANNON + DurationLookup: MT_SUMMON_ABR_DUAL_CANNON + - Status: Abr_Mother_Net + Icon: EFST_ABR_MOTHER_NET + DurationLookup: MT_SUMMON_ABR_MOTHER_NET + - Status: Abr_Infinity + Icon: EFST_ABR_INFINITY + DurationLookup: MT_SUMMON_ABR_INFINITY + - Status: Shadow_Exceed + Icon: EFST_SHADOW_EXCEED + DurationLookup: SHC_SHADOW_EXCEED + Flags: + BlEffect: true + DisplayPc: true + - Status: Dancing_Knife + Icon: EFST_DANCING_KNIFE + DurationLookup: SHC_DANCING_KNIFE + Flags: + BlEffect: true + DisplayPc: true + RequireWeapon: true + - Status: Potent_Venom + Icon: EFST_POTENT_VENOM + DurationLookup: SHC_POTENT_VENOM + - Status: Shadow_Scar + Icon: EFST_SHADOW_SCAR + - Status: E_Slash_Count + Icon: EFST_E_SLASH_COUNT + DurationLookup: SHC_ETERNAL_SLASH + Flags: + BlEffect: true + DisplayPc: true + SendVal1: true + - Status: Shadow_Weapon + Icon: EFST_SHADOW_WEAPON + DurationLookup: SHC_ENCHANTING_SHADOW + - Status: Guard_Stance + Icon: EFST_GUARD_STANCE + DurationLookup: IG_GUARD_STANCE + CalcFlags: + Watk: true + Def: true + Flags: + NoRemoveOnDead: true + NoSave: true + NoBanishingBuster: true + NoDispell: true + NoClearance: true + End: + Attack_Stance: true + - Status: Attack_Stance + Icon: EFST_ATTACK_STANCE + DurationLookup: IG_ATTACK_STANCE + CalcFlags: + Watk: true + Def: true + Flags: + NoRemoveOnDead: true + NoSave: true + NoBanishingBuster: true + NoDispell: true + NoClearance: true + End: + Guard_Stance: true + - Status: Guardian_S + Icon: EFST_GUARDIAN_S + DurationLookup: IG_GUARDIAN_SHIELD + - Status: Rebound_S + Icon: EFST_REBOUND_S + DurationLookup: IG_REBOUND_SHIELD + - Status: Holy_S + Icon: EFST_HOLY_S + DurationLookup: IG_HOLY_SHIELD + CalcFlags: + All: true + Flags: + BlEffect: true + DisplayPc: true + - Status: Ultimate_S + Icon: EFST_ULTIMATE_S + DurationLookup: IG_ULTIMATE_SACRIFICE + - Status: Spear_Scar + Icon: EFST_SPEAR_SCAR + DurationLookup: IG_GRAND_JUDGEMENT + Flags: + BlEffect: true + DisplayPc: true + - Status: Shield_Power + Icon: EFST_SHIELD_POWER + DurationLookup: IG_SHIELD_SHOOTING + - Status: Spell_Enchanting + Icon: EFST_SPELL_ENCHANTING + DurationLookup: EM_SPELL_ENCHANTING + CalcFlags: + Smatk: true + - Status: Summon_Elemental_Ardor + Icon: EFST_SUMMON_ELEMENTAL_ARDOR + DurationLookup: EM_SUMMON_ELEMENTAL_ARDOR + - Status: Summon_Elemental_Diluvio + Icon: EFST_SUMMON_ELEMENTAL_DILUVIO + DurationLookup: EM_SUMMON_ELEMENTAL_DILUVIO + - Status: Summon_Elemental_Procella + Icon: EFST_SUMMON_ELEMENTAL_PROCELLA + DurationLookup: EM_SUMMON_ELEMENTAL_PROCELLA + - Status: Summon_Elemental_Terremotus + Icon: EFST_SUMMON_ELEMENTAL_TERREMOTUS + DurationLookup: EM_SUMMON_ELEMENTAL_TERREMOTUS + - Status: Summon_Elemental_Serpens + Icon: EFST_SUMMON_ELEMENTAL_SERPENS + DurationLookup: EM_SUMMON_ELEMENTAL_SERPENS + - Status: Elemental_Veil + Icon: EFST_ELEMENTAL_VEIL + DurationLookup: EM_ELEMENTAL_VEIL + Flags: + BlEffect: true + DisplayPc: true + - Status: Mystic_Symphony + Icon: EFST_MYSTIC_SYMPHONY + DurationLookup: TR_MYSTIC_SYMPHONY + Flags: + BlEffect: true + DisplayPc: true + - Status: Kvasir_Sonata + Icon: EFST_KVASIR_SONATA + DurationLookup: TR_KVASIR_SONATA + - Status: Soundblend + Icon: EFST_SOUNDBLEND + DurationLookup: TR_SOUNDBLEND + Flags: + BlEffect: true + DisplayPc: true + - Status: Gef_Nocturn + Icon: EFST_GEF_NOCTURN + DurationLookup: TR_GEF_NOCTURN + CalcFlags: + Mres: true + - Status: Ain_Rhapsody + Icon: EFST_AIN_RHAPSODY + DurationLookup: TR_AIN_RHAPSODY + CalcFlags: + Res: true + - Status: Musical_Interlude + Icon: EFST_MUSICAL_INTERLUDE + DurationLookup: TR_MUSICAL_INTERLUDE + CalcFlags: + Res: true + - Status: Jawaii_Serenade + Icon: EFST_JAWAII_SERENADE + DurationLookup: TR_JAWAII_SERENADE + CalcFlags: + Smatk: true + - Status: Pron_March + Icon: EFST_PRON_MARCH + DurationLookup: TR_PRON_MARCH + CalcFlags: + Patk: true + - Status: Roseblossom + Icon: EFST_ROSEBLOSSOM + DurationLookup: TR_ROSEBLOSSOM + - Status: Powerful_Faith + Icon: EFST_POWERFUL_FAITH + DurationLookup: IQ_POWERFUL_FAITH + CalcFlags: + Watk: true + Patk: true + End: + Powerful_Faith: true + Firm_Faith: true + Sincere_Faith: true + - Status: Sincere_Faith + Icon: EFST_SINCERE_FAITH + DurationLookup: IQ_SINCERE_FAITH + CalcFlags: + All: true + End: + Powerful_Faith: true + Firm_Faith: true + Sincere_Faith: true + - Status: Firm_Faith + Icon: EFST_FIRM_FAITH + DurationLookup: IQ_FIRM_FAITH + CalcFlags: + MaxHp: true + Res: true + End: + Powerful_Faith: true + Firm_Faith: true + Sincere_Faith: true + - Status: Holy_Oil + Icon: EFST_HOLY_OIL + DurationLookup: IQ_OLEUM_SANCTUM + Flags: + BlEffect: true + DisplayPc: true + - Status: First_Brand + Icon: EFST_FIRST_BRAND + DurationLookup: IQ_FIRST_BRAND + Flags: + BlEffect: true + DisplayPc: true + End: + First_Brand: true + Second_Brand: true + - Status: Second_Brand + Icon: EFST_SECOND_BRAND + DurationLookup: IQ_SECOND_FLAME + Flags: + BlEffect: true + DisplayPc: true + End: + First_Brand: true + Second_Brand: true + - Status: Second_Judge + Icon: EFST_SECOND_JUDGE + DurationLookup: IQ_JUDGE + Flags: + BlEffect: true + DisplayPc: true + End: + First_Faith_Power: true + Second_Judge: true + Third_Exor_Flame: true + - Status: Third_Exor_Flame + Icon: EFST_THIRD_EXOR_FLAME + DurationLookup: IQ_THIRD_EXOR_FLAME + Flags: + BlEffect: true + DisplayPc: true + End: + First_Faith_Power: true + Second_Judge: true + Third_Exor_Flame: true + - Status: First_Faith_Power + Icon: EFST_FIRST_FAITH_POWER + DurationLookup: IQ_FIRST_FAITH_POWER + Flags: + BlEffect: true + DisplayPc: true + End: + First_Faith_Power: true + Second_Judge: true + Third_Exor_Flame: true + - Status: Massive_F_Blaster + Icon: EFST_MASSIVE_F_BLASTER + DurationLookup: IQ_MASSIVE_F_BLASTER + - Status: Protectshadowequip + Icon: EFST_PROTECTSHADOWEQUIP + DurationLookup: BO_ADVANCE_PROTECTION + Flags: + RemoveChemicalProtect: true + NoBanishingBuster: true + NoDispell: true + NoClearance: true + - Status: Researchreport + Icon: EFST_RESEARCHREPORT + DurationLookup: BO_RESEARCHREPORT + - Status: Bo_Hell_Dusty + Icon: EFST_BO_HELL_DUSTY + - Status: Bionic_Woodenwarrior + DurationLookup: BO_WOODENWARRIOR + - Status: Bionic_Wooden_Fairy + DurationLookup: BO_WOODEN_FAIRY + - Status: Bionic_Creeper + DurationLookup: BO_CREEPER + - Status: Bionic_Helltree + DurationLookup: BO_HELLTREE + - Status: Shadow_Strip + Icon: EFST_SHADOW_STRIP + DurationLookup: ABC_STRIP_SHADOW + CalcFlags: + Res: true + Mres: true + Flags: + BossResist: true + NoClearbuff: true + Debuff: true + NoBanishingBuster: true + NoDispell: true + NoClearance: true + - Status: Abyss_Dagger + Icon: EFST_ABYSS_DAGGER + DurationLookup: ABC_ABYSS_DAGGER + - Status: Abyssforceweapon + Icon: EFST_ABYSSFORCEWEAPON + DurationLookup: ABC_FROM_THE_ABYSS + Flags: + NoBanishingBuster: true + NoDispell: true + NoClearance: true + - Status: Abyss_Slayer + Icon: EFST_ABYSS_SLAYER + DurationLookup: ABC_ABYSS_SLAYER + CalcFlags: + Hit: true + Patk: true + Smatk: true + Flags: + BlEffect: true + DisplayPc: true + - Status: Flametechnic + Icon: EFST_FLAMETECHNIC + Flags: + RemoveElementalOption: true + - Status: Flametechnic_Option + Icon: EFST_FLAMETECHNIC_OPTION + DurationLookup: EM_EL_FLAMETECHNIC + Flags: + RemoveElementalOption: true + - Status: Flamearmor + Icon: EFST_FLAMEARMOR + Flags: + RemoveElementalOption: true + - Status: Flamearmor_Option + Icon: EFST_FLAMEARMOR_OPTION + DurationLookup: EM_EL_FLAMEARMOR + CalcFlags: + All: true + Flags: + RemoveElementalOption: true + - Status: Cold_Force + Icon: EFST_COLD_FORCE + Flags: + RemoveElementalOption: true + - Status: Cold_Force_Option + Icon: EFST_COLD_FORCE_OPTION + DurationLookup: EM_EL_COLD_FORCE + Flags: + RemoveElementalOption: true + - Status: Crystal_Armor + Icon: EFST_CRYSTAL_ARMOR + Flags: + RemoveElementalOption: true + - Status: Crystal_Armor_Option + Icon: EFST_CRYSTAL_ARMOR_OPTION + DurationLookup: EM_EL_CRYSTAL_ARMOR + CalcFlags: + All: true + Flags: + RemoveElementalOption: true + - Status: Grace_Breeze + Icon: EFST_GRACE_BREEZE + Flags: + RemoveElementalOption: true + - Status: Grace_Breeze_Option + Icon: EFST_GRACE_BREEZE_OPTION + DurationLookup: EM_EL_GRACE_BREEZE + Flags: + RemoveElementalOption: true + - Status: Eyes_Of_Storm + Icon: EFST_EYES_OF_STORM + Flags: + RemoveElementalOption: true + - Status: Eyes_Of_Storm_Option + Icon: EFST_EYES_OF_STORM_OPTION + DurationLookup: EM_EL_EYES_OF_STORM + CalcFlags: + All: true + Flags: + RemoveElementalOption: true + - Status: Earth_Care + Icon: EFST_EARTH_CARE + Flags: + RemoveElementalOption: true + - Status: Earth_Care_Option + Icon: EFST_EARTH_CARE_OPTION + DurationLookup: EM_EL_EARTH_CARE + Flags: + RemoveElementalOption: true + - Status: Strong_Protection + Icon: EFST_STRONG_PROTECTION + Flags: + RemoveElementalOption: true + - Status: Strong_Protection_Option + Icon: EFST_STRONG_PROTECTION_OPTION + DurationLookup: EM_EL_STRONG_PROTECTION + CalcFlags: + All: true + Flags: + RemoveElementalOption: true + - Status: Deep_Poisoning + Icon: EFST_DEEP_POISONING + Flags: + RemoveElementalOption: true + - Status: Deep_Poisoning_Option + Icon: EFST_DEEP_POISONING_OPTION + DurationLookup: EM_EL_DEEP_POISONING + Flags: + RemoveElementalOption: true + - Status: Poison_Shield + Icon: EFST_POISON_SHIELD + Flags: + RemoveElementalOption: true + - Status: Poison_Shield_Option + Icon: EFST_POISON_SHIELD_OPTION + DurationLookup: EM_EL_POISON_SHIELD + CalcFlags: + All: true + Flags: + RemoveElementalOption: true diff --git a/db/skill_db.yml b/db/skill_db.yml index ced4e2195f..a65420614a 100644 --- a/db/skill_db.yml +++ b/db/skill_db.yml @@ -135,6 +135,7 @@ # Interval Skill unit interval in milliseconds. (Default: 0) # Target Skill unit target type. (Default: All) # Flag: Skill unit flags. (Default: None) +# Status Status Change that is associated to the skill. (Optional) ########################################################################### Header: diff --git a/db/status.yml b/db/status.yml new file mode 100644 index 0000000000..6e01c14366 --- /dev/null +++ b/db/status.yml @@ -0,0 +1,52 @@ +# This file is a part of rAthena. +# Copyright(C) 2022 rAthena Development Team +# https://rathena.org - https://github.com/rathena +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +########################################################################### +# Status Change Database +########################################################################### +# +# Status Change Settings +# +########################################################################### +# - Status Status change name. +# Icon Status change icon. (Default: EFST_BLANK) +# DurationLookup Default status change duration. (Default: 0) +# States: Status change state to determine player states. (Default: None) +# CalcFlags: Status change calculation to indicate which stat is adjusted. (Default: None) +# Opt1 Special effect when a status change is active. Non-stackable. (Default: None) +# Opt2: Special options/client effects when a status change is active. (Default: None) +# Opt3: Special options/client effects when a status change is active. (Default: Normal) +# Options: Special options/client effects when a status change is active. (Default: Nothing) +# Flags: Special flags which trigger during certain events. (Default: None) +# 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) +# EndReturn If the status has an End list and succeeds to remove these status changes, it won't give its effect. (Default: false) +########################################################################### + +Header: + Type: STATUS_DB + Version: 1 + +Footer: + Imports: + - Path: db/pre-re/status.yml + Mode: Prerenewal + - Path: db/re/status.yml + Mode: Renewal + - Path: db/import/status.yml diff --git a/doc/skill_db.txt b/doc/skill_db.txt index 02e6902c4d..17dfb3d70c 100644 --- a/doc/skill_db.txt +++ b/doc/skill_db.txt @@ -925,3 +925,7 @@ CrazyWeedImmune - Immune to GN_CRAZYWEED. RemovedByFireRain - Removed by RL_FIRE_RAIN. KnockbackGroup - Knock back a whole skill group (by default, skill unit is knocked back by each unit). HiddenTrap - Hidden trap. See battle_config::traps_setting to enable this flag. + +------------------ + +Status: Status Change that is associated to the skill. The status is used in association with the status.yml database. diff --git a/doc/status.txt b/doc/status.txt new file mode 100644 index 0000000000..943a799648 --- /dev/null +++ b/doc/status.txt @@ -0,0 +1,297 @@ +//===== rAthena Documentation ================================ +//= Status Change Database Structure +//===== By: ================================================== +//= rAthena Dev Team +//===== Last Updated: ======================================== +//= 20220222 +//===== Description: ========================================= +//= Explanation of the status.yml file and structure. +//============================================================ + +--------------------------------------- + +Status: Status change name. + +See src/map/script_constants.hpp for SC_ constants. + +--------------------------------------- + +Icon: Status change icon or client effect that will be displayed client-side. + +See src/map/script_constants.hpp for EFST_ constants. + +--------------------------------------- + +DurationLookup: Used for default duration lookup in skill_db.yml. The lookup is used for some item bonuses as default duration. + +--------------------------------------- + +States: Specified states given when the SC is active. + + None - No special state. (Default) + NoMove - Cannot move. + NoMoveCond - Condition check for SCS_NOMOVE. + NoPickItem - Cannot pick item. + NoPickItemCond - Condition check for SCS_NOPICKITEM. + NoDropItem - Cannot drop item. + NoDropItemCond - Condition check for SCS_NODROPITEM. + NoCast - Cannot cast a skill. + NoCastCond - Condition check for SCS_NOCAST. + NoChat - Cannot chat and open chat room. + NoChatCond - Condition check for SCS_NOCHATCOND. + NoEquipItem - Cannot put on equipment. + NoEquipItemCond - Condition check for SCS_NOEQUIPITEM. + NoUnEquipItem - Cannot put off equipment. + NoUnEquipItemCond - Condition check for SCS_NOUNEQUIPITEM. + NoConsumeItem - Cannot consume item. + NoConsumeItemCond - Condition check for SCS_NOCONSUMEITEM. + NoAttack - Cannot attack. + NoAttackCond - Condition check for SCS_NOATTACK. + NoWarp - Cannot warp. + NoWarpCond - Condition check for SCS_NOWARP. + NoDeathPenalty - Cannot lose experience on death. + NoDeathPenaltyCond - Condition check for SCS_NODEATHPENALTY. + NoInteract - Cannot interact with client (sit/stand or talk with NPC). + NoInteractCond - Condition check for SCS_NOINTERACT. + +States that have a suffix of "Cond" means the State has hard coded conditions in status.cpp::status_calc_state + +--------------------------------------- + +CalcFlags: Flag that indicates which status calculation needs to be performed. Even if the value is changed in the status_db.yml the SC must have the respective bonus defined in source. + + None - Calculates nothing. (Default) + Base - Base status + MaxHp - Maximum HP + MaxSp - Maximum SP + Str - STR + Agi - AGI + Vit - VIT + Int - INT + Dex - DEX + Luk - LUK + Batk - Base Attack + Watk - Weapon Attack + Matk - Magic Attack + Hit - Hit/accuracy rate + Flee - Flee/dodge rate + Def - Equipment Defense + Def2 - Defense + Mdef - Equipment Magic Defense + Mdef2 - Magic Defense + Speed - Walk speed + Aspd - Attack speed + Dspd - Damage delay speed + Cri - Critical rate + Flee2 - Perfect dodge rate + Atk_Ele - Attack Element + Def_Ele - Defense Element + Mode - Mode + Size - Size + Race - Race + Range - Range + Regen - Regeneration + MaxAp - Maximum AP + Pow - POW + Sta - STA + Wis - WIS + Spl - SPL + Con - CON + Crt - CRT + Patk - Physical Power + Smatk - Spell Magic Attack + Res - Physical Resistance + Mres - Magic Resistance + Hplus - Heal Plus + Crate - Critical Rate + Dye - Dye + All - Calculates all CalcFlags + +--------------------------------------- + +Opt1: Special effect when status is active (Aegis: BODYSTATE_*). This option is not stackable. These effects also apply their special behaviors. + + None - No effect (Default) + Stone - Stone curse effect + Freeze - Freeze effect + Stun - Stun effect + Sleep - Sleep effect + StoneWait - Effect before Stone is really applied + Burning - Burning effect + Imprison - Imprison effect + Crystalize - Crystalize effect + +--------------------------------------- + +Opt2: Special option/client effect when status is active (Aegis: HEALTHSTATE_*). + + None - No effect (Default) + Poison - Posioned effect + Curse - Cursed effect + Silence - Silenced effect + SignumCrucis - Signum Crucis effect + Blind - Blind effect + Angelus - Angelus effect + Bleeding - Bleeding effect + Dpoison - Heavy Poisoned effect + Fear - Fear effect + +--------------------------------------- + +Opt3: Special option/client effect when status is active (Aegis: SHOW_EFST_*) + + Normal - No effect (Default) + Quicken - Quicken effect + OverThrust - Overthrust effect + EnergyCoat - Energy Coat effect + ExplosionSpirits - Explosion Spirits effect + SteelBody - Steel Body effect + BladeStop - Blade Stop effect + AuraBlade - Aura Blade effect + Berserk - Berserk effect + LightBlade - Light Blade effect + Moonlit - Moonlit effect + Marionette - Marionette effect + Assumptio - Assumptio effect + Warm - Warm effect + Kaite - Kaite effect + Bunsin - Bunshin effect + SoulLink - Soul Link effect + Undead - Undead effect + Contract - Contract effect + +--------------------------------------- + +Options: Special option/client effect state when status is active. + + Nothing - No effect (Default) + Sight - Sight effect + Hide - Hide effect + Cloak - Cloaking effect + Falcon - Falcon effect + Riding - Riding effect + Invisible - Invisible effect + Orcish - Orcish effect, the ugly face! + Wedding - Wedding costume + Ruwach - Ruwach effect + ChaseWalk - Chasewalk effect + Flying - Flying effect (Star Gladiator's Union) + Xmas - Christmas costume + Transform - Transformation + Summer - Summer costume + Dragon1 - Dragon + Dragon2 - Dragon + Dragon3 - Dragon + Dragon4 - Dragon + Dragon5 - Dragon + Wug - Wug + WugRider - Riding a Wug + Madogear - Madogear + Hanbok - Hanbok costume + Oktoberfest - Oktoberfest costume + +--------------------------------------- + +Flags: Various status flags for specific status change events. + + None - No special flag. (Default) + BlEffect - Status should have BL_SCEFFECT as relevant effect, must have an EFST (displays on BL_PC, BL_HOM, BL_MER, BL_MOB, BL_ELEM). BL_PC is the default value. + DisplayPc - Displays status effect when player logs in. + DislpayNpc - Displays status effect on a NPC. + Debuff - Status is considered a debuff. Used in combination with 'battle_config.debuff_on_logout'. + SetStand - Sets player to standing state. + OverlapFail - The status will fail to activate if the status is already active. + OverlapIgnoreLevel - The status will successfully activate for any level if the status is already active. + FailedMado - Cannot be applied if Madogear is active. + MadoCancel - Cancels the status when mounting Madogear. + MadoEndCancel - Cancels the status when unmounting Madogear. + MobLoseTarget - When active on a monster it will lose the target. + RestartOnMapWarp - Restarts the timer of a status when warping to another map. + SpreadEffect - Passes the status onto a target when SC_DEADLYINFECT is active. + SendVal1 - Notifies the client of a status change (val1). + SendVal2 - Notifies the client of a status change (val2). + SendVal3 - Notifies the client of a status change (val3). + + NoClearbuff - Cannot be removed by 'status_change_clear_buffs()', 'sc_end SC_ALL', 'status_change_clear(3)', etc. + NoRemoveOnDead - Cannot be removed when a player dies. + NoDispell - Cannot be removed by SA_DISPELL. + NoClearance - Cannot be removed by AB_CLEARANCE. + NoBanishingBuster - Cannot be removed by RL_BANISHING_BUSTER. + NoSave - Won't be saved when player logs out. + NoSaveInfinite - Infinite duration status won't be saved when player logs out. + + RemoveOnDamaged - Removed when receiving damage. + RemoveOnRefresh - Removed by RK_REFRESH. + RemoveOnLuxAnima - Removed by RK_LUXANIMA. + RemoveOnMapWarp - Removed when warping to another map. + RemoveOnChangeMap - Removed when changing map-server. + RemoveChemicalProtect - Removed by AM_CP_ARMOR/AM_CP_HELM/AM_CP_SHIELD/AM_CP_WEAPON. + RemoveElementalOption - Removed by elemental changing modes/quitting/EL_TIDAL_WEAPON/EL_WATER_SCREEN on the master and elemental. + + StopAttacking - Makes the unit stop attacking. + StopCasting - Makes the unit stop casting skills. + StopWalking - Makes the unit stop walking. + + BossResist - Cannot be applied to Boss Monster (Mob has mode MD_STATUS_IMMUNE). + MvpResist - Cannot be applied to MvP (Mob has mode MD_MVP). + + SendOption - Sends the STATE_CHANGE packet. For statuses that have Opt1, Opt2, or Opt3 values. + SendLook - Sends the STATE_CHANGE packet. For statuses that have body/look changes through 'Option' flags (only for players). + OnTouch - Triggers OnTouch_ NPC events. For statuses that have an invisible effect. + UnitMove - Triggers when the player has moved location and invokes the skill unit on place. + NonPlayer - Sends the NPC_SHOWEFST_UPDATE packet. Used to send effects to NPC/monsters. + + RequireWeapon - Status requires a weapon to be equipped. + RequireShield - Status requires a shield to be equipped. + + SuperNoviceAngel - Status that is given from Super Novice Angel. + TaekwonAngel - Status that is given from Taekwon Angel. + +--------------------------------------- + +MinDuration: Minimum duration, in milliseconds, after reduction calculation for status resistance. + +--------------------------------------- + +MinRate: Minimum success rate, at n/10000, after reduction calculation for status resistance. + +--------------------------------------- + +Fail: List of status that causes the status to fail to activate. + +--------------------------------------- + +End: List of status that will end if the status activates. + +--------------------------------------- + +EndReturn: If the status has any 'End' and succeeds to end other status in the list, it won't give its effect. + +--------------------------------------- + +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'. + +The NoClearbuff flag prevents some permanent and non-permanent statuses that cannot be removed by 'status_change_clear', 'status_change_clear_buffs', 'map_quit', or other +clearing means. +The function 'status_change_clear_buffs' is called by CG_TAROTCARD, RK_REFRESH, RK_LUXANIMA, CG_HERMODE, PA_GOSPEL, and LG_INSPIRATION. + +CG_TAROTCARD and CG_HERMODE only remove buffs while PA_GOSPEL and LG_INSPIRATION remove buffs and debuffs. + +RK_REFRESH and RK_LUXANIMA only remove statuses that have the Rem_On_Rerfresh or RemoveOnLuxAnima flag. Works just like SA_DISPELL, AB_CLEARANCE, RL_BANISHING_BUSTER that has the +effect to remove buffs or debuffs. + +---- Removed comments from source ---- +- Mado is immune to increase agi, wind walk, cart boost, etc (others above) [Ind] +- Cart Boost cannot be affected by Slow grace. Assumed if player got Slow Grace first, Cart Boost is failed since Cart Boost doesn't cancel Slow Grace effect + http://irowiki.org/wiki/Cart_Boost_%28Genetic%29 (view date: 2014-01-26) + http://irowiki.org/wiki/Cart_Boost (view date: 2014-01-26) +- kRO Update 2014-02-12: Cannot be stacked with Platinum Alter and Madness Canceler (and otherwise?) [Cydh] +- SC_BERSERK, SC_SATURDAYNIGHTFEVER, and SC__BLOODYLUST are all like berserk, do not everlap each other. +- SC_STONE, SC_FREEZE, SC_DEEPSLEEP, SC_SLEEP, SC_STUN, SC_FREEZING, and SC_CRYSTALIZE cannot override other opt1 status changes. [Skotlex] + TODO: SC that has OPT1: SC_STONE, SC_FREEZE, SC_STUN, SC_SLEEP, SC_BURNING, SC_WHITEIMPRISON, SC_CRYSTALIZE +- Immune to Frozen and Freezing status if under Warmer status. [Jobbie] +- SC_ONEHAND removes the Aspd potion effect, as reported by Vicious. [Skotlex] +- SC_ALL_RIDING. Already mounted, just dismount. +- SC_GN_CARTBOOST andSC_CARTBOOST cancel Decrease Agi, but take no further effect [Skotlex] diff --git a/doc/status_change.txt b/doc/status_change.txt index ed16d6186f..b7cc62c42c 100644 --- a/doc/status_change.txt +++ b/doc/status_change.txt @@ -45,7 +45,7 @@ SC_POISON () desc: DEF -25%; if HP>25% lose 1.5% + 2 HP/sec; SP Regeneration is disabled val1: Skill Level val2: Caster's object ID - val3: + val3: val4: Remaining tick SC_CURSE () @@ -75,7 +75,7 @@ SC_DPOISON () desc: DEF -25%; if HP>25% lose 10/15% HP/sec val1: Skill Level val2: Caster's object ID (for mob_log_damage) - val3: + val3: val4: Remaining tick SC_PROVOKE (EFST_PROVOKE) @@ -1760,7 +1760,7 @@ SC_RAISINGDRAGON () val1: SC_GT_ENERGYGAIN (EFST_GENTLETOUCH_ENERGYGAIN) - desc: + desc: val1: SR_GENTLETOUCH_ENERGYGAIN Skill Level val2: Sphere Gain Chance @@ -2368,7 +2368,7 @@ SC_REBOUND (EFST_REBOUND) val1: SC_UNLIMIT (EFST_UNLIMIT) - desc: Increase attak rate & set Def/MDef to 1, + desc: Increase attak rate & set Def/MDef to 1, val1: val2: +% Attack @@ -2710,13 +2710,81 @@ SC_LHZ_DUN_N4 (EFST_LHZ_DUN_N4) desc: Increases and reduces damage against MVPs of Biolab 5. val1: +% Damage val2: +% Defense - + SC_DORAM_BUF_01 () desc: Recovers 10 HP every 10 seconds. - + SC_DORAM_BUF_02 () desc: Recovers 5 SP every 10 seconds. +SC_INCREASE_MAXHP (EFST_ATKER_ASPD) + desc: Increases MaxHP. Increases natural HP regeneration. + val1: + HP + val2: +% HP regeneration + +SC_INCREASE_MAXSP (EFST_ATKER_MOVESPEED) + desc: Increases MaxSP. Increases natural SP regeneration. + val1: + SP + val2: +% SP regeneration + +SC_REF_T_POTION (EFST_REF_T_POTION) + desc: Decreases reflected damage by 100%. + +SC_ADD_ATK_DAMAGE (EFST_ADD_ATK_DAMAGE) + desc: Increases melee physical damage by 15%. Increases ranged physical damage by 15%. + val1: + +SC_ADD_MATK_DAMAGE (EFST_ADD_MATK_DAMAGE) + desc: Increases all elemental magical damage by 15%. + +SC_HELPANGEL (EFST_HELPANGEL) + desc: Recover 1000 HP every second. Recover 350 SP every second. + val1: + val2: + val3: + val4: Tick time (milliseconds) + +SC_SOUNDOFDESTRUCTION (EFST_SOUND_OF_DESTRUCTION) + desc: Doubles incoming damage for 10 seconds. + +SC_LUXANIMA (EFST_LUXANIMA) + desc: Physical attacks has the chance to activate Storm Blast Level 1. Increases physical damage against all sizes. + Increases Critical Damage. Increases Melee and Ranged Physical Damage. + val1: + val2: Storm Blast success 15% (hardcoded) + val3: Damage/HP/SP 30% increase (hardcoded) + +SC_REUSE_LIMIT_LUXANIMA () + desc: + val1: + +SC_ENSEMBLEFATIGUE (EFST_ENSEMBLEFATIGUE) + desc: Disables skill use. Movement and attack speed reduced by 30%. + val1: + val2: + 30 Speed and ASPD rates penalty (hardcoded) + +SC_MISTY_FROST (EFST_MISTY_FROST) + desc: Freezing. + +SC_MAGIC_POISON (EFST_MAGIC_POISON) + desc: Decreases resistance against all elemental attacks by 50%. + val1: + val2: Attribute Reduction (50, hardcoded). + +SC_EP16_2_BUFF_SS (EFST_EP16_2_BUFF_SS) + desc: ASPD +10. + +SC_EP16_2_BUFF_SC (EFST_EP16_2_BUFF_SC) + desc: CRIT +30. + +SC_EP16_2_BUFF_AC (EFST_EP16_2_BUFF_AC) + desc: Reduce variable cast time by 80%. + +SC_EMERGENCY_MOVE (EFST_INC_AGI) + desc: Increase AGI and walkspeed, AL_INCAGI effect. + val1: + val2: Movement speed +25 (hardcoded) + SC_PACKING_ENVELOPE1 (EFST_PACKING_ENVELOPE1) desc: Increases ATK val1: + watk diff --git a/doc/yaml/db/skill_db.yml b/doc/yaml/db/skill_db.yml index 0cb6392bd0..d0640285f7 100644 --- a/doc/yaml/db/skill_db.yml +++ b/doc/yaml/db/skill_db.yml @@ -118,4 +118,5 @@ # Interval Skill unit interval in milliseconds. (Default: 0) # Target Skill unit target type. (Default: All) # Flag: Skill unit flags. (Default: None) +# Status Status Change that is associated to the skill. (Optional) ########################################################################### diff --git a/src/common/database.hpp b/src/common/database.hpp index 6ec31af735..175769722e 100644 --- a/src/common/database.hpp +++ b/src/common/database.hpp @@ -150,12 +150,7 @@ public: void clear() override{ TypesafeYamlDatabase::clear(); - - // Restore size after clearing - size_t cap = cache.capacity(); - cache.clear(); - cache.resize(cap, nullptr); } std::shared_ptr find( keytype key ) override{ diff --git a/src/map/battle.cpp b/src/map/battle.cpp index 5a07e9f237..cb3ca03dca 100644 --- a/src/map/battle.cpp +++ b/src/map/battle.cpp @@ -1704,7 +1704,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam } if( sc->data[SC__DEADLYINFECT] && (flag&(BF_SHORT|BF_MAGIC)) == BF_SHORT && damage > 0 && rnd()%100 < 30 + 10 * sc->data[SC__DEADLYINFECT]->val1 ) - status_change_spread(bl, src, 1); // Deadly infect attacked side + status_change_spread(bl, src); } //End of target SC_ check @@ -1771,7 +1771,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam } if( sc->data[SC__DEADLYINFECT] && (flag&(BF_SHORT|BF_MAGIC)) == BF_SHORT && damage > 0 && rnd()%100 < 30 + 10 * sc->data[SC__DEADLYINFECT]->val1 ) - status_change_spread(src, bl, 0); + status_change_spread(src, bl); if (sc->data[SC_STYLE_CHANGE] && sc->data[SC_STYLE_CHANGE]->val1 == MH_MD_FIGHTING) { TBL_HOM *hd = BL_CAST(BL_HOM,src); //when attacking @@ -9803,9 +9803,8 @@ static const struct _battle_data { { "display_version", &battle_config.display_version, 1, 0, 1, }, { "display_hallucination", &battle_config.display_hallucination, 1, 0, 1, }, { "use_statpoint_table", &battle_config.use_statpoint_table, 1, 0, 1, }, - { "berserk_cancels_buffs", &battle_config.berserk_cancels_buffs, 0, 0, 1, }, - { "debuff_on_logout", &battle_config.debuff_on_logout, 1|2, 0, 1|2, }, - { "monster_ai", &battle_config.mob_ai, 0x000, 0x000, 0xFFF, }, + { "debuff_on_logout", &battle_config.debuff_on_logout, 0, 0, 1|2, }, + { "monster_ai", &battle_config.mob_ai, 0x000, 0x000, 0x77F, }, { "hom_setting", &battle_config.hom_setting, 0xFFFF, 0x0000, 0xFFFF, }, { "dynamic_mobs", &battle_config.dynamic_mobs, 1, 0, 1, }, { "mob_remove_damaged", &battle_config.mob_remove_damaged, 1, 0, 1, }, diff --git a/src/map/battle.hpp b/src/map/battle.hpp index 6b85d93c99..7976ee9ef8 100644 --- a/src/map/battle.hpp +++ b/src/map/battle.hpp @@ -423,7 +423,6 @@ struct Battle_Config int display_hallucination; // [Skotlex] int use_statpoint_table; // [Skotlex] - int berserk_cancels_buffs; // [Aru] int debuff_on_logout; // Removes a few "official" negative Scs on logout. [Skotlex] int mob_ai; //Configures various mob_ai settings to make them smarter or dumber(official). [Skotlex] int hom_setting; //Configures various homunc settings which make them behave unlike normal characters.. [Skotlex] diff --git a/src/map/chrif.cpp b/src/map/chrif.cpp index 6fd092c350..7eb70c61c3 100644 --- a/src/map/chrif.cpp +++ b/src/map/chrif.cpp @@ -1656,7 +1656,8 @@ int chrif_bsdata_save(struct map_session_data *sd, bool quit) { // Removing... if (quit && sd->bonus_script.head) { - uint16 flag = BSF_REM_ON_LOGOUT; //Remove bonus when logout + uint32 flag = BSF_REM_ON_LOGOUT; //Remove bonus when logout + if (battle_config.debuff_on_logout&1) //Remove negative buffs flag |= BSF_REM_DEBUFF; if (battle_config.debuff_on_logout&2) //Remove positive buffs @@ -1734,7 +1735,7 @@ int chrif_bsdata_received(int fd) { if (bs->script_str[0] == '\0' || !bs->tick) continue; - if (!(entry = pc_bonus_script_add(sd, bs->script_str, bs->tick, (enum efst_types)bs->icon, bs->flag, bs->type))) + if (!(entry = pc_bonus_script_add(sd, bs->script_str, bs->tick, (enum efst_type)bs->icon, bs->flag, bs->type))) continue; linkdb_insert(&sd->bonus_script.head, (void *)((intptr_t)entry), entry); diff --git a/src/map/clif.cpp b/src/map/clif.cpp index 7948e24c02..886b8d8e09 100644 --- a/src/map/clif.cpp +++ b/src/map/clif.cpp @@ -4288,7 +4288,7 @@ void clif_changeoption_target( struct block_list* bl, struct block_list* target if( sc->data[SC_PROVOKE] ){ const struct TimerData *td = get_timer( sc->data[SC_PROVOKE]->timer ); - clif_status_change( bl, StatusIconChangeTable[SC_PROVOKE], 1, ( !td ? INFINITE_TICK : DIFF_TICK( td->tick, gettick() ) ), 0, 0, 0 ); + clif_status_change( bl, status_db.getIcon(SC_PROVOKE), 1, ( !td ? INFINITE_TICK : DIFF_TICK( td->tick, gettick() ) ), 0, 0, 0 ); } }else{ if( disguised( bl ) ){ @@ -6371,7 +6371,7 @@ void clif_cooking_list( struct map_session_data *sd, int trigger, uint16 skill_i /// 0983 .W .L .B .L .L { .L }*3 (ZC_MSG_STATE_CHANGE3) (PACKETVER >= 20120618) /// @param bl Sends packet to clients around this object /// @param id ID of object that has this effect -/// @param type Status icon see enum efst_types +/// @param type Status icon see enum efst_type /// @param flag 1:Active, 0:Deactive /// @param tick Duration in ms /// @param val1 @@ -6433,7 +6433,7 @@ void clif_status_change_sub(struct block_list *bl, int id, int type, int flag, t /* Sends status effect to clients around the bl * @param bl Object that has the effect - * @param type Status icon see enum efst_types + * @param type Status icon see enum efst_type * @param flag 1:Active, 0:Deactive * @param tick Duration in ms * @param val1 @@ -6452,11 +6452,17 @@ void clif_status_change(struct block_list *bl, int type, int flag, t_tick tick, if (type == EFST_ILLUSION && !battle_config.display_hallucination) // Disable Hallucination. return; +#if PACKETVER_MAIN_NUM < 20191120 || PACKETVER_RE_NUM < 20191106 + // Older clients display normal riding icon. + if (type == EFST_MADOGEAR) + type = EFST_RIDING; +#endif + nullpo_retv(bl); sd = BL_CAST(BL_PC, bl); - if (!(status_type2relevant_bl_types(type)&bl->type)) // only send status changes that actually matter to the client + if (!(status_efst_get_bl_type((efst_type)type)&bl->type)) // only send status changes that actually matter to the client return; clif_status_change_sub(bl, bl->id, type, flag, tick, val1, val2, val3, ((sd ? (pc_isinvisible(sd) ? SELF : AREA) : AREA_WOS))); @@ -6525,9 +6531,9 @@ void clif_efst_status_change_sub(struct block_list *tbl, struct block_list *bl, } #if PACKETVER > 20120418 - clif_efst_status_change(tbl, bl->id, target, StatusIconChangeTable[type], tick, sc_display[i]->val1, sc_display[i]->val2, sc_display[i]->val3); + clif_efst_status_change(tbl, bl->id, target, status_db.getIcon(type), tick, sc_display[i]->val1, sc_display[i]->val2, sc_display[i]->val3); #else - clif_status_change_sub(tbl, bl->id, StatusIconChangeTable[type], 1, tick, sc_display[i]->val1, sc_display[i]->val2, sc_display[i]->val3, target); + clif_status_change_sub(tbl, bl->id, status_db.getIcon(type), 1, tick, sc_display[i]->val1, sc_display[i]->val2, sc_display[i]->val3, target); #endif } } @@ -11724,19 +11730,12 @@ void clif_parse_ActionRequest_sub(struct map_session_data *sd, int action_type, return; } - // Statuses that don't let the player sit / attack / talk with NPCs(targeted) - // (not all are included in pc_can_attack) - if (sd->sc.count && - (sd->sc.data[SC_TRICKDEAD] || - (sd->sc.data[SC_AUTOCOUNTER] && action_type != 0x07) || - sd->sc.data[SC_BLADESTOP] || - sd->sc.data[SC__MANHOLE] || - sd->sc.data[SC_SUHIDE] || - sd->sc.data[SC_GRAVITYCONTROL])) - return; - - if(action_type != 0x00 && action_type != 0x07) + // Statuses that don't let the player sit / stand / talk with NPCs (targeted) + if (action_type != 0x00 && action_type != 0x07) { + if (sd->sc.cant.interact) + return; pc_stop_walking(sd, 1); + } pc_stop_attack(sd); if(target_id<0 && -target_id == sd->bl.id) // for disguises [Valaris] @@ -11747,10 +11746,7 @@ void clif_parse_ActionRequest_sub(struct map_session_data *sd, int action_type, case 0x00: // once attack case 0x07: // continuous attack - if( pc_cant_act(sd) || sd->sc.option&OPTION_HIDE ) - return; - - if( sd->sc.option&OPTION_COSTUME ) + if( pc_cant_act(sd) ) return; if (!battle_config.sdelay_attack_enable && pc_checkskill(sd, SA_FREECAST) <= 0) { @@ -12073,11 +12069,7 @@ void clif_parse_DropItem(int fd, struct map_session_data *sd){ if (pc_cant_act2(sd) || sd->npc_id) break; - if (sd->sc.count && ( - sd->sc.data[SC_AUTOCOUNTER] || - sd->sc.data[SC_BLADESTOP] || - (sd->sc.data[SC_NOCHAT] && sd->sc.data[SC_NOCHAT]->val1&MANNER_NOITEM) - )) + if (sd->sc.cant.drop) break; if (!pc_dropitem(sd, item_index, item_amount)) @@ -15176,7 +15168,7 @@ void clif_parse_NoviceExplosionSpirits(int fd, struct map_session_data *sd) int percent = (int)( ( (double)sd->status.base_exp/(double)next )*1000. ); if( percent && ( percent%100 ) == 0 ) {// 10.0%, 20.0%, ..., 90.0% - sc_start(&sd->bl,&sd->bl, status_skill2sc(MO_EXPLOSIONSPIRITS), 100, 17, skill_get_time(MO_EXPLOSIONSPIRITS, 5)); //Lv17-> +50 critical (noted by Poki) [Skotlex] + sc_start(&sd->bl,&sd->bl, SC_EXPLOSIONSPIRITS, 100, 17, skill_get_time(MO_EXPLOSIONSPIRITS, 5)); //Lv17-> +50 critical (noted by Poki) [Skotlex] clif_skill_nodamage(&sd->bl, &sd->bl, MO_EXPLOSIONSPIRITS, 5, 1); // prayer always shows successful Lv5 cast and disregards noskill restrictions } } diff --git a/src/map/elemental.cpp b/src/map/elemental.cpp index 1d580db885..0031b4a048 100644 --- a/src/map/elemental.cpp +++ b/src/map/elemental.cpp @@ -286,137 +286,11 @@ int elemental_data_received(s_elemental *ele, bool flag) { return 1; } -int elemental_clean_single_effect(s_elemental_data *ed, uint16 skill_id) { - nullpo_ret(ed); - - sc_type type = status_skill2sc(skill_id); - block_list *bl = battle_get_master(&ed->bl); - - if( type ) { - switch( type ) { - // Just remove status change. - case SC_PYROTECHNIC_OPTION: - case SC_HEATER_OPTION: - case SC_TROPIC_OPTION: - case SC_FIRE_CLOAK_OPTION: - case SC_AQUAPLAY_OPTION: - case SC_WATER_SCREEN_OPTION: - case SC_COOLER_OPTION: - case SC_CHILLY_AIR_OPTION: - case SC_GUST_OPTION: - case SC_WIND_STEP_OPTION: - case SC_BLAST_OPTION: - case SC_WATER_DROP_OPTION: - case SC_WIND_CURTAIN_OPTION: - case SC_WILD_STORM_OPTION: - case SC_PETROLOGY_OPTION: - case SC_SOLID_SKIN_OPTION: - case SC_CURSED_SOIL_OPTION: - case SC_STONE_SHIELD_OPTION: - case SC_UPHEAVAL_OPTION: - case SC_CIRCLE_OF_FIRE_OPTION: - case SC_TIDAL_WEAPON_OPTION: - case SC_FLAMETECHNIC_OPTION: - case SC_FLAMEARMOR_OPTION: - case SC_COLD_FORCE_OPTION: - case SC_CRYSTAL_ARMOR_OPTION: - case SC_GRACE_BREEZE_OPTION: - case SC_EYES_OF_STORM_OPTION: - case SC_EARTH_CARE_OPTION: - case SC_STRONG_PROTECTION_OPTION: - case SC_DEEP_POISONING_OPTION: - case SC_POISON_SHIELD_OPTION: - if( bl ) status_change_end(bl,type,INVALID_TIMER); // Master - status_change_end(&ed->bl,static_cast(type-1),INVALID_TIMER); // Elemental Spirit - break; - case SC_ZEPHYR: - if( bl ) status_change_end(bl,type,INVALID_TIMER); - break; - default: - ShowWarning("Invalid SC=%d in elemental_clean_single_effect\n",type); - break; - } - } - - return 1; -} - int elemental_clean_effect(s_elemental_data *ed) { nullpo_ret(ed); - map_session_data *sd; - - // Elemental side - status_change_end(&ed->bl, SC_TROPIC, INVALID_TIMER); - status_change_end(&ed->bl, SC_HEATER, INVALID_TIMER); - status_change_end(&ed->bl, SC_AQUAPLAY, INVALID_TIMER); - status_change_end(&ed->bl, SC_COOLER, INVALID_TIMER); - status_change_end(&ed->bl, SC_CHILLY_AIR, INVALID_TIMER); - status_change_end(&ed->bl, SC_PYROTECHNIC, INVALID_TIMER); - status_change_end(&ed->bl, SC_FIRE_CLOAK, INVALID_TIMER); - status_change_end(&ed->bl, SC_WATER_DROP, INVALID_TIMER); - status_change_end(&ed->bl, SC_WATER_SCREEN, INVALID_TIMER); - status_change_end(&ed->bl, SC_GUST, INVALID_TIMER); - status_change_end(&ed->bl, SC_WIND_STEP, INVALID_TIMER); - status_change_end(&ed->bl, SC_BLAST, INVALID_TIMER); - status_change_end(&ed->bl, SC_WIND_CURTAIN, INVALID_TIMER); - status_change_end(&ed->bl, SC_WILD_STORM, INVALID_TIMER); - status_change_end(&ed->bl, SC_PETROLOGY, INVALID_TIMER); - status_change_end(&ed->bl, SC_SOLID_SKIN, INVALID_TIMER); - status_change_end(&ed->bl, SC_CURSED_SOIL, INVALID_TIMER); - status_change_end(&ed->bl, SC_STONE_SHIELD, INVALID_TIMER); - status_change_end(&ed->bl, SC_UPHEAVAL, INVALID_TIMER); - status_change_end(&ed->bl, SC_CIRCLE_OF_FIRE, INVALID_TIMER); - status_change_end(&ed->bl, SC_TIDAL_WEAPON, INVALID_TIMER); - status_change_end(&ed->bl, SC_FLAMETECHNIC, INVALID_TIMER); - status_change_end(&ed->bl, SC_FLAMEARMOR, INVALID_TIMER); - status_change_end(&ed->bl, SC_COLD_FORCE, INVALID_TIMER); - status_change_end(&ed->bl, SC_CRYSTAL_ARMOR, INVALID_TIMER); - status_change_end(&ed->bl, SC_GRACE_BREEZE, INVALID_TIMER); - status_change_end(&ed->bl, SC_EYES_OF_STORM, INVALID_TIMER); - status_change_end(&ed->bl, SC_EARTH_CARE, INVALID_TIMER); - status_change_end(&ed->bl, SC_STRONG_PROTECTION, INVALID_TIMER); - status_change_end(&ed->bl, SC_DEEP_POISONING, INVALID_TIMER); - status_change_end(&ed->bl, SC_POISON_SHIELD, INVALID_TIMER); - - if( (sd = ed->master) == NULL ) - return 0; - - // Master side - status_change_end(&sd->bl, SC_TROPIC_OPTION, INVALID_TIMER); - status_change_end(&sd->bl, SC_HEATER_OPTION, INVALID_TIMER); - status_change_end(&sd->bl, SC_AQUAPLAY_OPTION, INVALID_TIMER); - status_change_end(&sd->bl, SC_COOLER_OPTION, INVALID_TIMER); - status_change_end(&sd->bl, SC_CHILLY_AIR_OPTION, INVALID_TIMER); - status_change_end(&sd->bl, SC_PYROTECHNIC_OPTION, INVALID_TIMER); - status_change_end(&sd->bl, SC_FIRE_CLOAK_OPTION, INVALID_TIMER); - status_change_end(&sd->bl, SC_WATER_DROP_OPTION, INVALID_TIMER); - status_change_end(&sd->bl, SC_WATER_SCREEN_OPTION, INVALID_TIMER); - status_change_end(&sd->bl, SC_GUST_OPTION, INVALID_TIMER); - status_change_end(&sd->bl, SC_WIND_STEP_OPTION, INVALID_TIMER); - status_change_end(&sd->bl, SC_BLAST_OPTION, INVALID_TIMER); - status_change_end(&sd->bl, SC_WATER_DROP_OPTION, INVALID_TIMER); - status_change_end(&sd->bl, SC_WIND_CURTAIN_OPTION, INVALID_TIMER); - status_change_end(&sd->bl, SC_WILD_STORM_OPTION, INVALID_TIMER); - status_change_end(&sd->bl, SC_ZEPHYR, INVALID_TIMER); - status_change_end(&sd->bl, SC_WIND_STEP_OPTION, INVALID_TIMER); - status_change_end(&sd->bl, SC_PETROLOGY_OPTION, INVALID_TIMER); - status_change_end(&sd->bl, SC_SOLID_SKIN_OPTION, INVALID_TIMER); - status_change_end(&sd->bl, SC_CURSED_SOIL_OPTION, INVALID_TIMER); - status_change_end(&sd->bl, SC_STONE_SHIELD_OPTION, INVALID_TIMER); - status_change_end(&sd->bl, SC_UPHEAVAL_OPTION, INVALID_TIMER); - status_change_end(&sd->bl, SC_CIRCLE_OF_FIRE_OPTION, INVALID_TIMER); - status_change_end(&sd->bl, SC_TIDAL_WEAPON_OPTION, INVALID_TIMER); - status_change_end(&sd->bl, SC_FLAMETECHNIC_OPTION, INVALID_TIMER); - status_change_end(&sd->bl, SC_FLAMEARMOR_OPTION, INVALID_TIMER); - status_change_end(&sd->bl, SC_COLD_FORCE_OPTION, INVALID_TIMER); - status_change_end(&sd->bl, SC_CRYSTAL_ARMOR_OPTION, INVALID_TIMER); - status_change_end(&sd->bl, SC_GRACE_BREEZE_OPTION, INVALID_TIMER); - status_change_end(&sd->bl, SC_EYES_OF_STORM_OPTION, INVALID_TIMER); - status_change_end(&sd->bl, SC_EARTH_CARE_OPTION, INVALID_TIMER); - status_change_end(&sd->bl, SC_STRONG_PROTECTION_OPTION, INVALID_TIMER); - status_change_end(&sd->bl, SC_DEEP_POISONING_OPTION, INVALID_TIMER); - status_change_end(&sd->bl, SC_POISON_SHIELD_OPTION, INVALID_TIMER); + status_db.removeByStatusFlag(&ed->bl, { SCF_REMOVEELEMENTALOPTION }); + status_db.removeByStatusFlag(battle_get_master(&ed->bl), { SCF_REMOVEELEMENTALOPTION }); return 1; } diff --git a/src/map/elemental.hpp b/src/map/elemental.hpp index 7c91ef9540..ecc630f3fb 100644 --- a/src/map/elemental.hpp +++ b/src/map/elemental.hpp @@ -125,7 +125,6 @@ t_tick elemental_get_lifetime(s_elemental_data *ed); int elemental_unlocktarget(s_elemental_data *ed); bool elemental_skillnotok(uint16 skill_id, s_elemental_data *ed); int elemental_set_target( map_session_data *sd, block_list *bl ); -int elemental_clean_single_effect(s_elemental_data *ed, uint16 skill_id); int elemental_clean_effect(s_elemental_data *ed); int elemental_action(s_elemental_data *ed, block_list *bl, t_tick tick); struct s_skill_condition elemental_skill_get_requirements(uint16 skill_id, uint16 skill_lv); @@ -133,7 +132,6 @@ struct s_skill_condition elemental_skill_get_requirements(uint16 skill_id, uint1 #define elemental_stop_walking(ed, type) unit_stop_walking(&(ed)->bl, type) #define elemental_stop_attack(ed) unit_stop_attack(&(ed)->bl) -void read_elemental_skilldb(void); void do_init_elemental(void); void do_final_elemental(void); diff --git a/src/map/guild.cpp b/src/map/guild.cpp index 33a0eb55b9..39c29c3b7e 100644 --- a/src/map/guild.cpp +++ b/src/map/guild.cpp @@ -1529,14 +1529,15 @@ void guild_guildaura_refresh(struct map_session_data *sd, uint16 skill_id, uint1 if( !skill_lv ) return; - std::shared_ptr group; - sc_type type = status_skill2sc(skill_id); + sc_type type = skill_get_sc(skill_id); + + if (type == SC_NONE) + return; + + status_change_end(&sd->bl, type, INVALID_TIMER); + + std::shared_ptr group = skill_unitsetting(&sd->bl,skill_id,skill_lv,sd->bl.x,sd->bl.y,0); - if( sd->sc.data[type] && (group = skill_id2group(sd->sc.data[type]->val4)) ) { - skill_delunitgroup(group); - status_change_end(&sd->bl,type,INVALID_TIMER); - } - group = skill_unitsetting(&sd->bl,skill_id,skill_lv,sd->bl.x,sd->bl.y,0); if( group ) sc_start4(NULL,&sd->bl,type,100,(battle_config.guild_aura&16)?0:skill_lv,0,0,group->group_id,600000);//duration doesn't matter these status never end with val4 return; diff --git a/src/map/homunculus.cpp b/src/map/homunculus.cpp index 989f9e1b85..e71c3e771f 100644 --- a/src/map/homunculus.cpp +++ b/src/map/homunculus.cpp @@ -270,7 +270,7 @@ int hom_dead(struct homun_data *hd) clif_emotion(&sd->bl, ET_CRY); #ifdef RENEWAL - status_change_end(&sd->bl, status_skill2sc(AM_CALLHOMUN), INVALID_TIMER); + status_change_end(&sd->bl, SC_HOMUN_TIME, INVALID_TIMER); #endif //Remove from map (if it has no intimacy, it is auto-removed from memory) @@ -310,7 +310,7 @@ int hom_vaporize(struct map_session_data *sd, int flag) hom_save(hd); #ifdef RENEWAL - status_change_end(&sd->bl, status_skill2sc(AM_CALLHOMUN), INVALID_TIMER); + status_change_end(&sd->bl, SC_HOMUN_TIME, INVALID_TIMER); #endif return unit_remove_map(&hd->bl, CLR_OUTSIGHT); @@ -1183,7 +1183,7 @@ bool hom_call(struct map_session_data *sd) unit_warp(&hd->bl,sd->bl.m, sd->bl.x, sd->bl.y,CLR_OUTSIGHT); #ifdef RENEWAL - sc_start(&sd->bl, &sd->bl, status_skill2sc(AM_CALLHOMUN), 100, 1, skill_get_time(AM_CALLHOMUN, 1)); + sc_start(&sd->bl, &sd->bl, SC_HOMUN_TIME, 100, 1, skill_get_time(AM_CALLHOMUN, 1)); #endif return true; @@ -1243,7 +1243,7 @@ int hom_recv_data(uint32 account_id, struct s_homunculus *sh, int flag) } #ifdef RENEWAL - sc_start(&sd->bl, &sd->bl, status_skill2sc(AM_CALLHOMUN), 100, 1, skill_get_time(AM_CALLHOMUN, 1)); + sc_start(&sd->bl, &sd->bl, SC_HOMUN_TIME, 100, 1, skill_get_time(AM_CALLHOMUN, 1)); #endif return 1; @@ -1332,7 +1332,7 @@ int hom_ressurect(struct map_session_data* sd, unsigned char per, short x, short } #ifdef RENEWAL - sc_start(&sd->bl, &sd->bl, status_skill2sc(AM_CALLHOMUN), 100, 1, skill_get_time(AM_CALLHOMUN, 1)); + sc_start(&sd->bl, &sd->bl, SC_HOMUN_TIME, 100, 1, skill_get_time(AM_CALLHOMUN, 1)); #endif return status_revive(&hd->bl, per, 0); diff --git a/src/map/map-server.vcxproj b/src/map/map-server.vcxproj index bbbbe519d2..b6b3d99ba4 100644 --- a/src/map/map-server.vcxproj +++ b/src/map/map-server.vcxproj @@ -345,6 +345,7 @@ + diff --git a/src/map/map.cpp b/src/map/map.cpp index ad37dc96f2..8c3a4392ac 100644 --- a/src/map/map.cpp +++ b/src/map/map.cpp @@ -2084,85 +2084,27 @@ int map_quit(struct map_session_data *sd) { //map_quit handles extra specific data which is related to quitting normally //(changing map-servers invokes unit_free but bypasses map_quit) if( sd->sc.count ) { - //Status that are not saved... - status_change_end(&sd->bl, SC_BOSSMAPINFO, INVALID_TIMER); - status_change_end(&sd->bl, SC_AUTOTRADE, INVALID_TIMER); - status_change_end(&sd->bl, SC_SPURT, INVALID_TIMER); - status_change_end(&sd->bl, SC_BERSERK, INVALID_TIMER); - status_change_end(&sd->bl, SC__BLOODYLUST, INVALID_TIMER); - status_change_end(&sd->bl, SC_TRICKDEAD, INVALID_TIMER); - status_change_end(&sd->bl, SC_LEADERSHIP, INVALID_TIMER); - status_change_end(&sd->bl, SC_GLORYWOUNDS, INVALID_TIMER); - status_change_end(&sd->bl, SC_SOULCOLD, INVALID_TIMER); - status_change_end(&sd->bl, SC_HAWKEYES, INVALID_TIMER); - status_change_end(&sd->bl, SC_EMERGENCY_MOVE, INVALID_TIMER); - status_change_end(&sd->bl, SC_CHASEWALK2, INVALID_TIMER); - if(sd->sc.data[SC_PROVOKE] && sd->sc.data[SC_PROVOKE]->timer == INVALID_TIMER) - status_change_end(&sd->bl, SC_PROVOKE, INVALID_TIMER); //Infinite provoke ends on logout - status_change_end(&sd->bl, SC_WEIGHT50, INVALID_TIMER); - status_change_end(&sd->bl, SC_WEIGHT90, INVALID_TIMER); - status_change_end(&sd->bl, SC_SATURDAYNIGHTFEVER, INVALID_TIMER); - status_change_end(&sd->bl, SC_KYOUGAKU, INVALID_TIMER); - status_change_end(&sd->bl, SC_C_MARKER, INVALID_TIMER); - status_change_end(&sd->bl, SC_READYSTORM, INVALID_TIMER); - status_change_end(&sd->bl, SC_READYDOWN, INVALID_TIMER); - status_change_end(&sd->bl, SC_READYTURN, INVALID_TIMER); - status_change_end(&sd->bl, SC_READYCOUNTER, INVALID_TIMER); - status_change_end(&sd->bl, SC_DODGE, INVALID_TIMER); - status_change_end(&sd->bl, SC_CBC, INVALID_TIMER); - status_change_end(&sd->bl, SC_EQC, INVALID_TIMER); - status_change_end(&sd->bl, SC_SPRITEMABLE, INVALID_TIMER); - status_change_end(&sd->bl, SC_SV_ROOTTWIST, INVALID_TIMER); - status_change_end(&sd->bl, SC_GUARD_STANCE, INVALID_TIMER); - status_change_end(&sd->bl, SC_ATTACK_STANCE, INVALID_TIMER); - // Remove visuals effect from headgear - status_change_end(&sd->bl, SC_MOONSTAR, INVALID_TIMER); - status_change_end(&sd->bl, SC_SUPER_STAR, INVALID_TIMER); - status_change_end(&sd->bl, SC_STRANGELIGHTS, INVALID_TIMER); - status_change_end(&sd->bl, SC_DECORATION_OF_MUSIC, INVALID_TIMER); - if (battle_config.debuff_on_logout&1) { //Remove negative buffs - status_change_end(&sd->bl, SC_ORCISH, INVALID_TIMER); - status_change_end(&sd->bl, SC_STRIPWEAPON, INVALID_TIMER); - status_change_end(&sd->bl, SC_STRIPARMOR, INVALID_TIMER); - status_change_end(&sd->bl, SC_STRIPSHIELD, INVALID_TIMER); - status_change_end(&sd->bl, SC_STRIPHELM, INVALID_TIMER); - status_change_end(&sd->bl, SC_EXTREMITYFIST, INVALID_TIMER); - status_change_end(&sd->bl, SC_EXPLOSIONSPIRITS, INVALID_TIMER); - if(sd->sc.data[SC_REGENERATION] && sd->sc.data[SC_REGENERATION]->val4) - status_change_end(&sd->bl, SC_REGENERATION, INVALID_TIMER); - //TO-DO Probably there are way more NPC_type negative status that are removed - status_change_end(&sd->bl, SC_CHANGEUNDEAD, INVALID_TIMER); - // Both these statuses are removed on logout. [L0ne_W0lf] - status_change_end(&sd->bl, SC_SLOWCAST, INVALID_TIMER); - status_change_end(&sd->bl, SC_CRITICALWOUND, INVALID_TIMER); - status_change_end(&sd->bl, SC_H_MINE, INVALID_TIMER); - status_change_end(&sd->bl, SC_ANTI_M_BLAST, INVALID_TIMER); - status_change_end(&sd->bl, SC_B_TRAP, INVALID_TIMER); - status_change_end(&sd->bl, SC_SHADOW_STRIP, INVALID_TIMER); - } - if (battle_config.debuff_on_logout&2) { //Remove positive buffs - status_change_end(&sd->bl, SC_MAXIMIZEPOWER, INVALID_TIMER); - status_change_end(&sd->bl, SC_MAXOVERTHRUST, INVALID_TIMER); - status_change_end(&sd->bl, SC_STEELBODY, INVALID_TIMER); - status_change_end(&sd->bl, SC_PRESERVE, INVALID_TIMER); - status_change_end(&sd->bl, SC_KAAHI, INVALID_TIMER); - status_change_end(&sd->bl, SC_SPIRIT, INVALID_TIMER); - status_change_end(&sd->bl, SC_HEAT_BARREL, INVALID_TIMER); - status_change_end(&sd->bl, SC_P_ALTER, INVALID_TIMER); - status_change_end(&sd->bl, SC_E_CHAIN, INVALID_TIMER); - status_change_end(&sd->bl, SC_SIGHTBLASTER, INVALID_TIMER); - status_change_end(&sd->bl, SC_BENEDICTIO, INVALID_TIMER); - status_change_end(&sd->bl, SC_GLASTHEIM_ATK, INVALID_TIMER); - status_change_end(&sd->bl, SC_GLASTHEIM_DEF, INVALID_TIMER); - status_change_end(&sd->bl, SC_GLASTHEIM_HEAL, INVALID_TIMER); - status_change_end(&sd->bl, SC_GLASTHEIM_HIDDEN, INVALID_TIMER); - status_change_end(&sd->bl, SC_GLASTHEIM_STATE, INVALID_TIMER); - status_change_end(&sd->bl, SC_GLASTHEIM_ITEMDEF, INVALID_TIMER); - status_change_end(&sd->bl, SC_GLASTHEIM_HPSP, INVALID_TIMER); - status_change_end(&sd->bl, SC_SOULGOLEM, INVALID_TIMER); - status_change_end(&sd->bl, SC_SOULSHADOW, INVALID_TIMER); - status_change_end(&sd->bl, SC_SOULFALCON, INVALID_TIMER); - status_change_end(&sd->bl, SC_SOULFAIRY, INVALID_TIMER); + for (const auto &it : status_db) { + std::bitset &flag = it.second->flag; + + //No need to save infinite status + if (flag[SCF_NOSAVEINFINITE] && sd->sc.data[it.first] && sd->sc.data[it.first]->val4 > 0) { + status_change_end(&sd->bl, static_cast(it.first), INVALID_TIMER); + continue; + } + + //Status that are not saved + if (flag[SCF_NOSAVE]) { + status_change_end(&sd->bl, static_cast(it.first), INVALID_TIMER); + continue; + } + //Removes status by config + if (battle_config.debuff_on_logout&1 && flag[SCF_DEBUFF] || //Removes debuffs + (battle_config.debuff_on_logout&2 && !(flag[SCF_DEBUFF]))) //Removes buffs + { + status_change_end(&sd->bl, static_cast(it.first), INVALID_TIMER); + continue; + } } } diff --git a/src/map/mob.cpp b/src/map/mob.cpp index 8146f6838c..06106aada2 100644 --- a/src/map/mob.cpp +++ b/src/map/mob.cpp @@ -1698,8 +1698,7 @@ static bool mob_ai_sub_hard(struct mob_data *md, t_tick tick) return false; // Abnormalities - if(( md->sc.opt1 > 0 && md->sc.opt1 != OPT1_STONEWAIT && md->sc.opt1 != OPT1_BURNING ) - || md->sc.data[SC_BLADESTOP] || md->sc.data[SC__MANHOLE] || md->sc.data[SC_CURSEDCIRCLE_TARGET]) {//Should reset targets. + if(( md->sc.opt1 && md->sc.opt1 != OPT1_STONEWAIT && md->sc.opt1 != OPT1_BURNING ) || status_db.hasSCF(&md->sc, SCF_MOBLOSETARGET)) {//Should reset targets. md->target_id = md->attacked_id = md->norm_attacked_id = 0; return false; } diff --git a/src/map/pc.cpp b/src/map/pc.cpp index 46c67339f9..1c884ed4f0 100755 --- a/src/map/pc.cpp +++ b/src/map/pc.cpp @@ -2690,7 +2690,7 @@ static void pc_bonus_addeff(std::vector &effect, enum sc_type sc, s flag |= ATF_WEAPON; //Default type: weapon. if (!duration) - duration = (unsigned int)skill_get_time2(status_sc2skill(sc), 7); + duration = (unsigned int)skill_get_time2(status_db.getSkill(sc), 7); for (auto &it : effect) { if (it.sc == sc && it.flag == flag) { @@ -2732,7 +2732,7 @@ static void pc_bonus_addeff_onskill(std::vector &effect, enu } if (!duration) - duration = (unsigned int)skill_get_time2(status_sc2skill(sc), 7); + duration = (unsigned int)skill_get_time2(status_db.getSkill(sc), 7); for (auto &it : effect) { if (it.sc == sc && it.skill_id == skill_id && it.target == target) { @@ -5697,7 +5697,7 @@ bool pc_isUseitem(struct map_session_data *sd,int n) case ITEMID_M_BERSERK_POTION: if( sd->md == NULL || sd->md->db == NULL ) return false; - if( sd->md->sc.data[SC_BERSERK] ) + if( sd->md->sc.cant.consume ) return false; if( nameid == ITEMID_M_AWAKENING_POTION && sd->md->db->lv < 40 ) return false; @@ -5738,24 +5738,7 @@ bool pc_isUseitem(struct map_session_data *sd,int n) if (!pc_job_can_use_item(sd,item)) return false; - if (sd->sc.count && ( - sd->sc.data[SC_BERSERK] || sd->sc.data[SC_SATURDAYNIGHTFEVER] || - (sd->sc.data[SC_GRAVITATION] && sd->sc.data[SC_GRAVITATION]->val3 == BCT_SELF) || - sd->sc.data[SC_TRICKDEAD] || - sd->sc.data[SC_HIDING] || - sd->sc.data[SC__SHADOWFORM] || - sd->sc.data[SC__INVISIBILITY] || - sd->sc.data[SC__MANHOLE] || - sd->sc.data[SC_DEEPSLEEP] || - sd->sc.data[SC_CRYSTALIZE] || - sd->sc.data[SC_KAGEHUMI] || - (sd->sc.data[SC_NOCHAT] && sd->sc.data[SC_NOCHAT]->val1&MANNER_NOITEM) || - sd->sc.data[SC_KINGS_GRACE] || - sd->sc.data[SC_SUHIDE] || - sd->sc.data[SC_HANDICAPSTATE_FROSTBITE] || - sd->sc.data[SC_HANDICAPSTATE_SWOONING] || - sd->sc.data[SC_HANDICAPSTATE_LIGHTNINGSTRIKE] || - sd->sc.data[SC_HANDICAPSTATE_CRYSTALLIZATION])) + if (sd->sc.cant.consume) return false; if (!pc_isItemClass(sd,item)) @@ -6292,24 +6275,23 @@ enum e_setpos pc_setpos(struct map_session_data* sd, unsigned short mapindex, in sd->state.pmap = sd->bl.m; if (sc && sc->count) { // Cancel some map related stuff. - if (sc->data[SC_JAILED]) - return SETPOS_MAPINDEX; //You may not get out! - status_change_end(&sd->bl, SC_BOSSMAPINFO, INVALID_TIMER); - status_change_end(&sd->bl, SC_WARM, INVALID_TIMER); - status_change_end(&sd->bl, SC_SUN_COMFORT, INVALID_TIMER); - status_change_end(&sd->bl, SC_MOON_COMFORT, INVALID_TIMER); - status_change_end(&sd->bl, SC_STAR_COMFORT, INVALID_TIMER); - status_change_end(&sd->bl, SC_MIRACLE, INVALID_TIMER); - if (sc->data[SC_KNOWLEDGE]) { - struct status_change_entry *sce = sc->data[SC_KNOWLEDGE]; - if (sce->timer != INVALID_TIMER) - delete_timer(sce->timer, status_change_timer); - sce->timer = add_timer(gettick() + skill_get_time(SG_KNOWLEDGE, sce->val1), status_change_timer, sd->bl.id, SC_KNOWLEDGE); + if (sc->cant.warp) + return SETPOS_MAPINDEX; // You may not get out! + + for (const auto &it : status_db) { + if (sc->data[it.first]) { + if (it.second->flag[SCF_REMOVEONMAPWARP]) + status_change_end(&sd->bl, static_cast(it.first), INVALID_TIMER); + + if (it.second->flag[SCF_RESTARTONMAPWARP] && it.second->skill_id > 0) { + status_change_entry *sce = sd->sc.data[it.first]; + + if (sce->timer != INVALID_TIMER) + delete_timer(sce->timer, status_change_timer); + sce->timer = add_timer(gettick() + skill_get_time(it.second->skill_id, sce->val1), status_change_timer, sd->bl.id, it.first); + } + } } - status_change_end(&sd->bl, SC_PROPERTYWALK, INVALID_TIMER); - status_change_end(&sd->bl, SC_CLOAKING, INVALID_TIMER); - status_change_end(&sd->bl, SC_CLOAKINGEXCEED, INVALID_TIMER); - status_change_end(&sd->bl, SC_SUHIDE, INVALID_TIMER); } for(int i = 0; i < EQI_MAX; i++ ) { if( sd->equip_index[i] >= 0 ) @@ -6685,47 +6667,26 @@ uint8 pc_checkskill_imperial_guard(struct map_session_data *sd, short flag) */ static void pc_checkallowskill(struct map_session_data *sd) { - const enum sc_type scw_list[] = { - SC_TWOHANDQUICKEN, - SC_ONEHAND, - SC_AURABLADE, - SC_PARRYING, - SC_SPEARQUICKEN, - SC_ADRENALINE, - SC_ADRENALINE2, - SC_DANCING, - SC_GATLINGFEVER, - SC_DANCING_KNIFE, - }; - uint8 i; nullpo_retv(sd); if(!sd->sc.count) return; - for (i = 0; i < ARRAYLENGTH(scw_list); i++) - { // Skills requiring specific weapon types - if( scw_list[i] == SC_DANCING && !battle_config.dancing_weaponswitch_fix ) - continue; - if(sd->sc.data[scw_list[i]] && - !pc_check_weapontype(sd,skill_get_weapontype(status_sc2skill(scw_list[i])))) - status_change_end(&sd->bl, scw_list[i], INVALID_TIMER); - } + for (const auto &it : status_db) { + sc_type status = it.second->type; + std::bitset flag = it.second->flag; - if(sd->sc.data[SC_SPURT] && sd->status.weapon) - // Spurt requires bare hands (feet, in fact xD) - status_change_end(&sd->bl, SC_SPURT, INVALID_TIMER); + if (flag[SCF_REQUIREWEAPON]) { // Skills requiring specific weapon types + if (status == SC_DANCING && !battle_config.dancing_weaponswitch_fix) + continue; + if (sd->sc.data[status] && !pc_check_weapontype(sd, skill_get_weapontype(it.second->skill_id))) + status_change_end(&sd->bl, status, INVALID_TIMER); + } - if(sd->status.shield <= 0) { // Skills requiring a shield - const enum sc_type scs_list[] = { - SC_AUTOGUARD, - SC_DEFENDER, - SC_REFLECTSHIELD, - SC_REFLECTDAMAGE - }; - for (i = 0; i < ARRAYLENGTH(scs_list); i++) - if(sd->sc.data[scs_list[i]]) - status_change_end(&sd->bl, scs_list[i], INVALID_TIMER); + if (flag[SCF_REQUIRESHIELD]) { // Skills requiring a shield + if (sd->sc.data[status] && sd->status.shield <= 0) + status_change_end(&sd->bl, status, INVALID_TIMER); + } } } @@ -7539,16 +7500,17 @@ int pc_checkbaselevelup(struct map_session_data *sd) { status_percent_heal(&sd->bl,100,100); if ((sd->class_&MAPID_UPPERMASK) == MAPID_SUPER_NOVICE) { - sc_start(&sd->bl,&sd->bl,status_skill2sc(PR_KYRIE),100,1,skill_get_time(PR_KYRIE,1)); - sc_start(&sd->bl,&sd->bl,status_skill2sc(PR_IMPOSITIO),100,1,skill_get_time(PR_IMPOSITIO,1)); - sc_start(&sd->bl,&sd->bl,status_skill2sc(PR_MAGNIFICAT),100,1,skill_get_time(PR_MAGNIFICAT,1)); - sc_start(&sd->bl,&sd->bl,status_skill2sc(PR_GLORIA),100,1,skill_get_time(PR_GLORIA,1)); - sc_start(&sd->bl,&sd->bl,status_skill2sc(PR_SUFFRAGIUM),100,1,skill_get_time(PR_SUFFRAGIUM,1)); + for (const auto &status : status_db) { + if (status.second->flag[SCF_SUPERNOVICEANGEL]) + sc_start(&sd->bl, &sd->bl, status.second->type, 100, 1, skill_get_time(status.second->skill_id, 1)); + } if (sd->state.snovice_dead_flag) sd->state.snovice_dead_flag = 0; //Reenable steelbody resurrection on dead. } else if( (sd->class_&MAPID_BASEMASK) == MAPID_TAEKWON ) { - sc_start(&sd->bl,&sd->bl,status_skill2sc(AL_INCAGI),100,10,600000); - sc_start(&sd->bl,&sd->bl,status_skill2sc(AL_BLESSING),100,10,600000); + for (const auto &status : status_db) { + if (status.second->flag[SCF_TAEKWONANGEL]) + sc_start(&sd->bl, &sd->bl, status.second->type, 100, 10, 600000); + } } clif_misceffect(&sd->bl,0); npc_script_event(sd, NPCE_BASELVUP); //LORDALFA - LVLUPEVENT @@ -9035,7 +8997,7 @@ int pc_dead(struct map_session_data *sd,struct block_list *src) clif_resurrection(&sd->bl, 1); if(battle_config.pc_invincible_time) pc_setinvincibletimer(sd, battle_config.pc_invincible_time); - sc_start(&sd->bl,&sd->bl,status_skill2sc(MO_STEELBODY),100,5,skill_get_time(MO_STEELBODY,5)); + sc_start(&sd->bl,&sd->bl,SC_STEELBODY,100,5,skill_get_time(MO_STEELBODY,5)); if(mapdata_flag_gvg2(mapdata)) pc_respawn_timer(INVALID_TIMER, gettick(), sd->bl.id, 0); return 0; @@ -9243,7 +9205,7 @@ int pc_dead(struct map_session_data *sd,struct block_list *src) // changed penalty options, added death by player if pk_mode [Valaris] if(battle_config.death_penalty_type && (sd->class_&MAPID_UPPERMASK) != MAPID_NOVICE // only novices will receive no penalty - && !sd->sc.data[SC_BABY] && !sd->sc.data[SC_LIFEINSURANCE] + && !sd->sc.cant.deathpenalty && !mapdata->flag[MF_NOEXPPENALTY] && !mapdata_flag_gvg2(mapdata)) { t_exp base_penalty = 0; @@ -10154,16 +10116,7 @@ bool pc_jobchange(struct map_session_data *sd,int job, char upper) } if ( (b_class&MAPID_UPPERMASK) != (sd->class_&MAPID_UPPERMASK) ) { //Things to remove when changing class tree. - std::shared_ptr tree = skill_tree_db.find(sd->status.class_); - - if (tree != nullptr && !tree->skills.empty()) { - for (const auto &skillsit : tree->skills) { - //Remove status specific to your current tree skills. - enum sc_type sc = status_skill2sc(skillsit.first); - if (sc > SC_COMMON_MAX && sd->sc.data[sc]) - status_change_end(&sd->bl, sc, INVALID_TIMER); - } - } + status_db.changeSkillTree(sd); } if( (sd->class_&MAPID_UPPERMASK) == MAPID_STAR_GLADIATOR && (b_class&MAPID_UPPERMASK) != MAPID_STAR_GLADIATOR) { @@ -10613,45 +10566,6 @@ bool pc_candrop(struct map_session_data *sd, struct item *item) return (itemdb_isdropable(item, pc_get_group_level(sd))); } -/** - * Determines whether a player can attack based on status changes - * Why not use status_check_skilluse? - * "src MAY be null to indicate we shouldn't check it, this is a ground-based skill attack." - * Even ground-based attacks should be blocked by these statuses - * Called from unit_attack and unit_attack_timer_sub - * @retval true Can attack - **/ -bool pc_can_attack( struct map_session_data *sd, int target_id ) { - nullpo_retr(false, sd); - - if( pc_is90overweight(sd) || pc_isridingwug(sd) ) - return false; - - if (sd->state.block_action & PCBLOCK_ATTACK) - return false; - - if( -#ifdef RENEWAL - sd->sc.data[SC_BASILICA_CELL] || -#else - sd->sc.data[SC_BASILICA] || -#endif - sd->sc.data[SC__SHADOWFORM] || - sd->sc.data[SC_CURSEDCIRCLE_ATKER] || - sd->sc.data[SC_CURSEDCIRCLE_TARGET] || - sd->sc.data[SC_CRYSTALIZE] || - sd->sc.data[SC_ALL_RIDING] || // The client doesn't let you, this is to make cheat-safe - sd->sc.data[SC_TRICKDEAD] || - (sd->sc.data[SC_VOICEOFSIREN] && sd->sc.data[SC_VOICEOFSIREN]->val2 == target_id) || - sd->sc.data[SC_BLADESTOP] || - sd->sc.data[SC_DEEPSLEEP] || - (sd->sc.data[SC_GRAVITATION] && sd->sc.data[SC_GRAVITATION]->val3 == BCT_SELF) || - sd->sc.data[SC_KINGS_GRACE] ) - return false; - - return true; -} - /*========================================== * Read '@type' variables (temporary numeric char reg) *------------------------------------------*/ @@ -11355,8 +11269,7 @@ bool pc_equipitem(struct map_session_data *sd,short n,int req_pos,bool equipswit } return false; } - if( sd->sc.count && (sd->sc.data[SC_BERSERK] || sd->sc.data[SC_SATURDAYNIGHTFEVER] || - sd->sc.data[SC_KYOUGAKU] || (sd->sc.data[SC_PYROCLASTIC] && sd->inventory_data[n]->type == IT_WEAPON)) ) { + if( sd->sc.count && (sd->sc.cant.equip || (sd->sc.data[SC_PYROCLASTIC] && sd->inventory_data[n]->type == IT_WEAPON)) ) { if( equipswitch ){ clif_equipswitch_add( sd, n, req_pos, ITEM_EQUIP_ACK_FAIL ); }else{ @@ -11678,13 +11591,8 @@ bool pc_unequipitem(struct map_session_data *sd, int n, int flag) { return false; //Nothing to unequip } // status change that makes player cannot unequip equipment - if (!(flag&2) && sd->sc.count && - (sd->sc.data[SC_BERSERK] || - sd->sc.data[SC_SATURDAYNIGHTFEVER] || - sd->sc.data[SC__BLOODYLUST] || - sd->sc.data[SC_KYOUGAKU] || - (sd->sc.data[SC_PYROCLASTIC] && - sd->inventory_data[n]->type == IT_WEAPON))) // can't switch weapon + if (!(flag&2) && sd->sc.count &&( sd->sc.cant.unequip || + (sd->sc.data[SC_PYROCLASTIC] && sd->inventory_data[n]->type == IT_WEAPON))) // can't switch weapon { clif_unequipitemack(sd,n,0,0); return false; @@ -14236,7 +14144,7 @@ void pc_bonus_script(struct map_session_data *sd) { * @return New created entry pointer or NULL if failed or NULL if duplicate fail * @author [Cydh] **/ -struct s_bonus_script_entry *pc_bonus_script_add(struct map_session_data *sd, const char *script_str, t_tick dur, enum efst_types icon, uint16 flag, uint8 type) { +struct s_bonus_script_entry *pc_bonus_script_add(struct map_session_data *sd, const char *script_str, t_tick dur, enum efst_type icon, uint16 flag, uint8 type) { struct script_code *script = NULL; struct linkdb_node *node = NULL; struct s_bonus_script_entry *entry = NULL; @@ -14361,7 +14269,7 @@ TIMER_FUNC(pc_bonus_script_timer){ * @param flag: Reason to remove the bonus_script. e_bonus_script_flags or e_bonus_script_types * @author [Cydh] **/ -void pc_bonus_script_clear(struct map_session_data *sd, uint16 flag) { +void pc_bonus_script_clear(struct map_session_data *sd, uint32 flag) { struct linkdb_node *node = NULL; uint16 count = 0; diff --git a/src/map/pc.hpp b/src/map/pc.hpp index 5006cb956b..8db3d84647 100644 --- a/src/map/pc.hpp +++ b/src/map/pc.hpp @@ -291,7 +291,7 @@ struct s_bonus_script_entry { StringBuf *script_buf; //Used for comparing and storing on table t_tick tick; uint16 flag; - enum efst_types icon; + enum efst_type icon; uint8 type; //0 - Ignore; 1 - Buff; 2 - Debuff int tid; }; @@ -1459,7 +1459,6 @@ void pc_regen (struct map_session_data *sd, t_tick diff_tick); bool pc_setstand(struct map_session_data *sd, bool force); bool pc_candrop(struct map_session_data *sd,struct item *item); -bool pc_can_attack(struct map_session_data *sd, int target_id); uint64 pc_jobid2mapid(unsigned short b_class); // Skotlex int pc_mapid2jobid(uint64 class_, int sex); // Skotlex @@ -1573,8 +1572,8 @@ void pc_show_version(struct map_session_data *sd); TIMER_FUNC(pc_bonus_script_timer); void pc_bonus_script(struct map_session_data *sd); -struct s_bonus_script_entry *pc_bonus_script_add(struct map_session_data *sd, const char *script_str, t_tick dur, enum efst_types icon, uint16 flag, uint8 type); -void pc_bonus_script_clear(struct map_session_data *sd, uint16 flag); +struct s_bonus_script_entry *pc_bonus_script_add(struct map_session_data *sd, const char *script_str, t_tick dur, enum efst_type icon, uint16 flag, uint8 type); +void pc_bonus_script_clear(struct map_session_data *sd, uint32 flag); void pc_cell_basilica(struct map_session_data *sd); diff --git a/src/map/script.cpp b/src/map/script.cpp index 4df7e551cc..7a82c8e56b 100644 --- a/src/map/script.cpp +++ b/src/map/script.cpp @@ -11944,9 +11944,11 @@ BUILDIN_FUNC(sc_start) else bl = map_id2bl(st->rid); - if(tick == 0 && val1 > 0 && type > SC_NONE && type < SC_MAX && status_sc2skill(type) != 0) + uint16 skill_id; + + if(tick == 0 && val1 > 0 && type > SC_NONE && type < SC_MAX && (skill_id = status_db.getSkill(type)) > 0) {// When there isn't a duration specified, try to get it from the skill_db - tick = skill_get_time(status_sc2skill(type), val1); + tick = skill_get_time(skill_id, val1); } if(potion_flag == 1 && potion_target) { //skill.cpp set the flags before running the script, this is a potion-pitched effect. @@ -11996,45 +11998,16 @@ BUILDIN_FUNC(sc_end) if (!bl) return SCRIPT_CMD_SUCCESS; - if (type >= 0 && type < SC_MAX) { + if (type >= SC_NONE && type < SC_MAX) { struct status_change *sc = status_get_sc(bl); - struct status_change_entry *sce = sc ? sc->data[type] : NULL; - if (!sce) + if (!sc) return SCRIPT_CMD_SUCCESS; - switch (type) { - case SC_WEIGHT50: - case SC_WEIGHT90: - case SC_NOCHAT: - case SC_PUSH_CART: - case SC_ALL_RIDING: - case SC_STYLE_CHANGE: - case SC_MONSTER_TRANSFORM: - case SC_ACTIVE_MONSTER_TRANSFORM: - case SC_MTF_ASPD: - case SC_MTF_RANGEATK: - case SC_MTF_MATK: - case SC_MTF_MLEATKED: - case SC_MTF_CRIDAMAGE: - case SC_MTF_ASPD2: - case SC_MTF_RANGEATK2: - case SC_MTF_MATK2: - case SC_MTF_MHP: - case SC_MTF_MSP: - case SC_MTF_PUMPKIN: - case SC_MTF_HITFLEE: - case SC_ATTHASTE_CASH: - case SC_REUSE_LIMIT_A: case SC_REUSE_LIMIT_B: case SC_REUSE_LIMIT_C: - case SC_REUSE_LIMIT_D: case SC_REUSE_LIMIT_E: case SC_REUSE_LIMIT_F: - case SC_REUSE_LIMIT_G: case SC_REUSE_LIMIT_H: case SC_REUSE_LIMIT_MTF: - case SC_REUSE_LIMIT_ASPD_POTION: case SC_REUSE_MILLENNIUMSHIELD: case SC_REUSE_CRUSHSTRIKE: - case SC_REUSE_STORMBLAST: case SC_ALL_RIDING_REUSE_LIMIT: case SC_REUSE_REFRESH: - case SC_REUSE_LIMIT_ECL: case SC_REUSE_LIMIT_RECALL: - return SCRIPT_CMD_SUCCESS; - default: - break; - } + if (status_db.hasSCF(sc, SCF_NOCLEARBUFF)) + return SCRIPT_CMD_SUCCESS; + + struct status_change_entry *sce = sc ? sc->data[type] : NULL; //This should help status_change_end force disabling the SC in case it has no limit. sce->val1 = sce->val2 = sce->val3 = sce->val4 = 0; @@ -12053,7 +12026,6 @@ BUILDIN_FUNC(sc_end) BUILDIN_FUNC(sc_end_class) { struct map_session_data *sd; - uint16 skill_id; int class_; if (!script_charid2sd(2, sd)) @@ -12069,17 +12041,7 @@ BUILDIN_FUNC(sc_end_class) return SCRIPT_CMD_FAILURE; } - std::shared_ptr tree = skill_tree_db.find(class_); - - if( tree != nullptr ){ - for (const auto &it : tree->skills) { - skill_id = it.first; - enum sc_type sc = status_skill2sc(skill_id); - - if (sc > SC_COMMON_MAX && sd->sc.data[sc]) - status_change_end(&sd->bl, sc, INVALID_TIMER); - } - } + status_db.changeSkillTree(sd, class_); return SCRIPT_CMD_SUCCESS; } @@ -23021,7 +22983,7 @@ BUILDIN_FUNC(bonus_script) { if (icon <= EFST_BLANK || icon >= EFST_MAX) icon = EFST_BLANK; - if ((entry = pc_bonus_script_add(sd, script_str, dur, (enum efst_types)icon, flag, type))) { + if ((entry = pc_bonus_script_add(sd, script_str, dur, (enum efst_type)icon, flag, type))) { linkdb_insert(&sd->bonus_script.head, (void *)((intptr_t)entry), entry); status_calc_pc(sd,SCO_NONE); } diff --git a/src/map/script_constants.hpp b/src/map/script_constants.hpp index cee941af73..6774966a78 100644 --- a/src/map/script_constants.hpp +++ b/src/map/script_constants.hpp @@ -1054,7 +1054,8 @@ export_constant(SC_ARMOR); export_constant(SC_ARMOR_ELEMENT_WATER); export_constant(SC_NOCHAT); - export_constant(SC_BABY); + export_constant(SC_PROTECTEXP); + export_deprecated_constant3("SC_BABY", SC_PROTECTEXP, "SC_PROTECTEXP"); export_constant(SC_AURABLADE); export_constant(SC_PARRYING); export_constant(SC_CONCENTRATION); @@ -1611,6 +1612,7 @@ export_constant(SC_GOLDENMACECLAN); export_constant(SC_CROSSBOWCLAN); export_constant(SC_JUMPINGCLAN); + export_constant(SC_TAROTCARD); export_constant(SC_GEFFEN_MAGIC1); export_constant(SC_GEFFEN_MAGIC2); export_constant(SC_GEFFEN_MAGIC3); @@ -1647,6 +1649,7 @@ export_constant(SC_ANCILLA); export_constant(SC_EARTHSHAKER); export_constant(SC_WEAPONBLOCK_ON); + export_constant(SC_SPORE_EXPLOSION); export_constant(SC_ENTRY_QUEUE_APPLY_DELAY); export_constant(SC_ENTRY_QUEUE_NOTIFY_ADMISSION_TIME_OUT); export_constant(SC_ADAPTATION); @@ -1691,6 +1694,8 @@ export_constant(SC_LUXANIMA); export_constant(SC_REUSE_LIMIT_LUXANIMA); export_constant(SC_ENSEMBLEFATIGUE); + export_constant(SC_MISTY_FROST); + export_constant(SC_MAGIC_POISON); export_constant(SC_EP16_2_BUFF_SS); export_constant(SC_EP16_2_BUFF_SC); export_constant(SC_EP16_2_BUFF_AC); @@ -8724,6 +8729,169 @@ export_constant(EL_SKILLMODE_ASSIST); export_constant(EL_SKILLMODE_AGGRESSIVE); + /* status calc bl */ + export_constant(SCB_NONE); + export_constant(SCB_BASE); + export_constant(SCB_MAXHP); + export_constant(SCB_MAXSP); + export_constant(SCB_STR); + export_constant(SCB_AGI); + export_constant(SCB_VIT); + export_constant(SCB_INT); + export_constant(SCB_DEX); + export_constant(SCB_LUK); + export_constant(SCB_BATK); + export_constant(SCB_WATK); + export_constant(SCB_MATK); + export_constant(SCB_HIT); + export_constant(SCB_FLEE); + export_constant(SCB_DEF); + export_constant(SCB_DEF2); + export_constant(SCB_MDEF); + export_constant(SCB_MDEF2); + export_constant(SCB_SPEED); + export_constant(SCB_ASPD); + export_constant(SCB_DSPD); + export_constant(SCB_CRI); + export_constant(SCB_FLEE2); + export_constant(SCB_ATK_ELE); + export_constant(SCB_DEF_ELE); + export_constant(SCB_MODE); + export_constant(SCB_SIZE); + export_constant(SCB_RACE); + export_constant(SCB_RANGE); + export_constant(SCB_REGEN); + export_constant(SCB_DYE); + export_constant(SCB_BATTLE); + export_constant(SCB_MAXAP); + export_constant(SCB_POW); + export_constant(SCB_STA); + export_constant(SCB_WIS); + export_constant(SCB_SPL); + export_constant(SCB_CON); + export_constant(SCB_CRT); + export_constant(SCB_PATK); + export_constant(SCB_SMATK); + export_constant(SCB_RES); + export_constant(SCB_MRES); + export_constant(SCB_HPLUS); + export_constant(SCB_CRATE); + export_constant(SCB_ALL); + + /* status change states */ + export_constant(SCS_NONE); + export_constant(SCS_NOMOVECOND); + export_constant(SCS_NOMOVE); + export_constant(SCS_NOPICKITEMCOND); + export_constant(SCS_NOPICKITEM); + export_constant(SCS_NODROPITEMCOND); + export_constant(SCS_NODROPITEM); + export_constant(SCS_NOCASTCOND); + export_constant(SCS_NOCAST); + export_constant(SCS_NOCHAT); + export_constant(SCS_NOCHATCOND); + export_constant(SCS_NOEQUIPITEM); + export_constant(SCS_NOEQUIPITEMCOND); + export_constant(SCS_NOUNEQUIPITEM); + export_constant(SCS_NOUNEQUIPITEMCOND); + export_constant(SCS_NOCONSUMEITEM); + export_constant(SCS_NOCONSUMEITEMCOND); + export_constant(SCS_NOATTACK); + export_constant(SCS_NOATTACKCOND); + export_constant(SCS_NOWARP); + export_constant(SCS_NOWARPCOND); + export_constant(SCS_NODEATHPENALTY); + export_constant(SCS_NODEATHPENALTYCOND); + export_constant(SCS_NOINTERACT); + export_constant(SCS_NOINTERACTCOND); + + /* body states */ + export_constant(OPT1_STONE); + export_constant(OPT1_FREEZE); + export_constant(OPT1_STUN); + export_constant(OPT1_SLEEP); + export_constant(OPT1_STONEWAIT); + export_constant(OPT1_BURNING); + export_constant(OPT1_IMPRISON); + + /* health states */ + export_constant(OPT2_POISON); + export_constant(OPT2_CURSE); + export_constant(OPT2_SILENCE); + export_constant(OPT2_SIGNUMCRUCIS); + export_constant(OPT2_BLIND); + export_constant(OPT2_ANGELUS); + export_constant(OPT2_BLEEDING); + export_constant(OPT2_DPOISON); + export_constant(OPT2_FEAR); + + /* show effect states */ + export_constant(OPT3_NORMAL); + export_constant(OPT3_QUICKEN); + export_constant(OPT3_OVERTHRUST); + export_constant(OPT3_ENERGYCOAT); + export_constant(OPT3_EXPLOSIONSPIRITS); + export_constant(OPT3_STEELBODY); + export_constant(OPT3_BLADESTOP); + export_constant(OPT3_AURABLADE); + export_constant(OPT3_BERSERK); + export_constant(OPT3_LIGHTBLADE); + export_constant(OPT3_MOONLIT); + export_constant(OPT3_MARIONETTE); + export_constant(OPT3_ASSUMPTIO); + export_constant(OPT3_WARM); + export_constant(OPT3_KAITE); + export_constant(OPT3_BUNSIN); + export_constant(OPT3_SOULLINK); + export_constant(OPT3_UNDEAD); + export_constant(OPT3_CONTRACT); + + /* status change flags */ + export_constant(SCF_BLEFFECT); + export_constant(SCF_DISPLAYPC); + export_constant(SCF_NOCLEARBUFF); + export_constant(SCF_NOREMOVEONDEAD); + export_constant(SCF_NODISPELL); + export_constant(SCF_NOCLEARANCE); + export_constant(SCF_NOBANISHINGBUSTER); + export_constant(SCF_NOSAVE); + export_constant(SCF_NOSAVEINFINITE); + export_constant(SCF_REMOVEONDAMAGED); + export_constant(SCF_REMOVEONREFRESH); + export_constant(SCF_REMOVEONLUXANIMA); + export_constant(SCF_STOPATTACKING); + export_constant(SCF_STOPCASTING); + export_constant(SCF_STOPWALKING); + export_constant(SCF_BOSSRESIST); + export_constant(SCF_MVPRESIST); + export_constant(SCF_SETSTAND); + export_constant(SCF_FAILEDMADO); + export_constant(SCF_DEBUFF); + export_constant(SCF_REMOVEONCHANGEMAP); + export_constant(SCF_REMOVEONMAPWARP); + export_constant(SCF_REMOVECHEMICALPROTECT); + export_constant(SCF_OVERLAPFAIL); + export_constant(SCF_OVERLAPIGNORELEVEL); + export_constant(SCF_SENDOPTION); + export_constant(SCF_ONTOUCH); + export_constant(SCF_UNITMOVE); + export_constant(SCF_NONPLAYER); + export_constant(SCF_SENDLOOK); + export_constant(SCF_DISPLAYNPC); + export_constant(SCF_REQUIREWEAPON); + export_constant(SCF_REQUIRESHIELD); + export_constant(SCF_MOBLOSETARGET); + export_constant(SCF_REMOVEELEMENTALOPTION); + export_constant(SCF_SUPERNOVICEANGEL); + export_constant(SCF_TAEKWONANGEL); + export_constant(SCF_MADOCANCEL); + export_constant(SCF_MADOENDCANCEL); + export_constant(SCF_RESTARTONMAPWARP); + export_constant(SCF_SPREADEFFECT); + export_constant(SCF_SENDVAL1); + export_constant(SCF_SENDVAL2); + export_constant(SCF_SENDVAL3); + #undef export_constant #undef export_constant2 #undef export_parameter diff --git a/src/map/skill.cpp b/src/map/skill.cpp index 3a54811874..4de60a4126 100755 --- a/src/map/skill.cpp +++ b/src/map/skill.cpp @@ -218,6 +218,7 @@ int skill_get_ammo_qty( uint16 skill_id, uint16 skill_lv ) { skill_get_l int skill_get_state( uint16 skill_id ) { skill_get(skill_id, skill_db.find(skill_id)->require.state); } int skill_get_status_count( uint16 skill_id ) { skill_get(skill_id, skill_db.find(skill_id)->require.status.size()); } int skill_get_spiritball( uint16 skill_id, uint16 skill_lv ) { skill_get_lv(skill_id, skill_lv, skill_db.find(skill_id)->require.spiritball); } +sc_type skill_get_sc(int16 skill_id) { if (!skill_check(skill_id)) return SC_NONE; return skill_db.find(skill_id)->sc; } int skill_get_splash( uint16 skill_id , uint16 skill_lv ) { int splash = skill_get_splash_(skill_id, skill_lv); @@ -1601,22 +1602,34 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1 break; case NPC_PETRIFYATTACK: - sc_start4(src,bl,status_skill2sc(skill_id),(20*skill_lv), - skill_lv,0,0,skill_get_time(skill_id,skill_lv), - skill_get_time2(skill_id,skill_lv)); + sc_start4(src,bl,SC_STONE,50+10*skill_lv,skill_lv,0,0,skill_get_time(skill_id,skill_lv),skill_get_time2(skill_id,skill_lv)); break; case NPC_CURSEATTACK: + sc_start(src,bl,SC_CURSE,(20*skill_lv),skill_lv,skill_get_time2(skill_id,skill_lv)); + break; case NPC_SLEEPATTACK: + sc_start(src,bl,SC_SLEEP,(20*skill_lv),skill_lv,skill_get_time2(skill_id,skill_lv)); + break; case NPC_BLINDATTACK: + sc_start(src,bl,SC_BLIND,(20*skill_lv),skill_lv,skill_get_time2(skill_id,skill_lv)); + break; case NPC_POISON: + sc_start(src,bl,SC_POISON,(20*skill_lv),skill_lv,skill_get_time2(skill_id,skill_lv)); + break; case NPC_SILENCEATTACK: + sc_start(src,bl,SC_SILENCE,(20*skill_lv),skill_lv,skill_get_time2(skill_id,skill_lv)); + break; case NPC_STUNATTACK: + sc_start(src,bl,SC_STUN,(20*skill_lv),skill_lv,skill_get_time2(skill_id,skill_lv)); + break; case NPC_BLEEDING: - sc_start(src,bl,status_skill2sc(skill_id),(20*skill_lv),skill_lv,skill_get_time2(skill_id,skill_lv)); + sc_start(src,bl,SC_BLEEDING,(20*skill_lv),skill_lv,skill_get_time2(skill_id,skill_lv)); break; case NPC_ACIDBREATH: + sc_start(src,bl,SC_POISON,70,skill_lv,skill_get_time2(skill_id,skill_lv)); + break; case NPC_ICEBREATH: - sc_start(src,bl,status_skill2sc(skill_id),70,skill_lv,skill_get_time2(skill_id,skill_lv)); + sc_start(src,bl,SC_FREEZE,70,skill_lv,skill_get_time2(skill_id,skill_lv)); break; case NPC_MENTALBREAKER: { //Based on observations by Tharis, Mental Breaker should do SP damage @@ -1772,7 +1785,7 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1 sc_start(src,bl, SC_ADORAMUS, skill_lv * 4 + (sd ? sd->status.job_level : 50) / 2, skill_lv, skill_get_time2(skill_id, skill_lv)); break; case WL_COMET: - sc_start(src, bl, status_skill2sc(skill_id), 100, skill_lv, 20000); + sc_start(src, bl, SC_BURNING, 100, skill_lv, 20000); break; case NPC_COMET: sc_start4(src,bl,SC_BURNING,100,skill_lv,1000,src->id,0,skill_get_time(skill_id,skill_lv)); @@ -1899,7 +1912,7 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1 sc_start(src,bl, SC_POISON, 5 * skill_lv, skill_lv, skill_get_time(skill_id, skill_lv)); break; case GN_SPORE_EXPLOSION: - sc_start(src, bl, status_skill2sc(skill_id), 100, skill_lv, skill_get_time(skill_id, skill_lv)); + sc_start(src, bl, SC_SPORE_EXPLOSION, 100, skill_lv, skill_get_time(skill_id, skill_lv)); break; case GN_SLINGITEM_RANGEMELEEATK: if( sd ) { @@ -1935,8 +1948,10 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1 sc_start(src,bl, SC_STUN, rate, skill_lv, skill_get_time(skill_id,skill_lv)); break; case EL_ROCK_CRUSHER: + sc_start(src,bl, SC_ROCK_CRUSHER,50,skill_lv,skill_get_time(EL_ROCK_CRUSHER,skill_lv)); + break; case EL_ROCK_CRUSHER_ATK: - sc_start(src,bl,status_skill2sc(skill_id),50,skill_lv,skill_get_time(EL_ROCK_CRUSHER,skill_lv)); + sc_start(src,bl,SC_ROCK_CRUSHER_ATK,50,skill_lv,skill_get_time(EL_ROCK_CRUSHER,skill_lv)); break; case EL_TYPOON_MIS: sc_start(src,bl,SC_SILENCE,10*skill_lv,skill_lv,skill_get_time(skill_id,skill_lv)); @@ -1993,8 +2008,6 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1 sc_start(src,bl,SC_STUN,100,skill_lv,skill_get_time2(skill_id,skill_lv)); break; case RL_BANISHING_BUSTER: { - uint16 i, n = skill_lv; - if (!tsc || !tsc->count) break; @@ -2007,99 +2020,24 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1 break; } - for (i = 0; n > 0 && i < SC_MAX; i++) { - if (!tsc->data[i]) + uint16 n = skill_lv; + + for (const auto &it : status_db) { + sc_type status = static_cast(it.first); + + if (n <= 0) + break; + if (!tsc->data[status]) continue; - switch (i) { - case SC_WEIGHT50: case SC_WEIGHT90: case SC_HALLUCINATION: - case SC_STRIPWEAPON: case SC_STRIPSHIELD: case SC_STRIPARMOR: - case SC_STRIPHELM: case SC_CP_WEAPON: case SC_CP_SHIELD: - case SC_CP_ARMOR: case SC_CP_HELM: case SC_COMBO: - case SC_STRFOOD: case SC_AGIFOOD: case SC_VITFOOD: - case SC_INTFOOD: case SC_DEXFOOD: case SC_LUKFOOD: - case SC_HITFOOD: case SC_FLEEFOOD: case SC_BATKFOOD: - case SC_WATKFOOD: case SC_MATKFOOD: case SC_CRIFOOD: - case SC_DANCING: case SC_SPIRIT: case SC_AUTOBERSERK: - case SC_CARTBOOST: case SC_MELTDOWN: case SC_SAFETYWALL: - case SC_SMA: case SC_SPEEDUP0: case SC_NOCHAT: - case SC_ANKLE: case SC_SPIDERWEB: case SC_JAILED: - case SC_ITEMBOOST: case SC_EXPBOOST: case SC_LIFEINSURANCE: - case SC_BOSSMAPINFO: case SC_PNEUMA: case SC_AUTOSPELL: - case SC_INCHITRATE: case SC_INCATKRATE: case SC_NEN: - case SC_READYSTORM: case SC_READYDOWN: case SC_READYTURN: - case SC_READYCOUNTER: case SC_DODGE: case SC_WARM: - /*case SC_SPEEDUP1:*/ case SC_AUTOTRADE: case SC_CRITICALWOUND: - case SC_JEXPBOOST: case SC_INVINCIBLE: case SC_INVINCIBLEOFF: - case SC_HELLPOWER: case SC_MANU_ATK: case SC_MANU_DEF: - case SC_SPL_ATK: case SC_SPL_DEF: case SC_MANU_MATK: - case SC_SPL_MATK: case SC_RICHMANKIM: case SC_ETERNALCHAOS: - case SC_DRUMBATTLE: case SC_NIBELUNGEN: case SC_ROKISWEIL: - case SC_INTOABYSS: case SC_SIEGFRIED: case SC_FOOD_STR_CASH: - case SC_FOOD_AGI_CASH: case SC_FOOD_VIT_CASH: case SC_FOOD_DEX_CASH: - case SC_FOOD_INT_CASH: case SC_FOOD_LUK_CASH: case SC_ELECTRICSHOCKER: - case SC__STRIPACCESSORY: case SC__ENERVATION: case SC__GROOMY: - case SC__IGNORANCE: case SC__LAZINESS: case SC__UNLUCKY: - case SC__WEAKNESS: case SC_SAVAGE_STEAK: case SC_COCKTAIL_WARG_BLOOD: - case SC_MAGNETICFIELD: case SC_MINOR_BBQ: case SC_SIROMA_ICE_TEA: - case SC_DROCERA_HERB_STEAMED: case SC_PUTTI_TAILS_NOODLES: case SC_NEUTRALBARRIER_MASTER: - case SC_NEUTRALBARRIER: case SC_STEALTHFIELD_MASTER: case SC_STEALTHFIELD: - case SC_LEADERSHIP: case SC_GLORYWOUNDS: case SC_SOULCOLD: - case SC_HAWKEYES: case SC_REGENERATION: case SC_SEVENWIND: - case SC_MIRACLE: case SC_S_LIFEPOTION: case SC_L_LIFEPOTION: - case SC_INCHEALRATE: case SC_PUSH_CART: case SC_PARTYFLEE: - case SC_RAISINGDRAGON: case SC_GT_REVITALIZE: case SC_GT_ENERGYGAIN: - case SC_GT_CHANGE: case SC_ANGEL_PROTECT: case SC_MONSTER_TRANSFORM: - case SC_FULL_THROTTLE: case SC_REBOUND: case SC_TELEKINESIS_INTENSE: - case SC_MOONSTAR: case SC_SUPER_STAR: case SC_ALL_RIDING: - case SC_MTF_ASPD: case SC_MTF_RANGEATK: case SC_MTF_MATK: - case SC_MTF_MLEATKED: case SC_MTF_CRIDAMAGE: case SC_HEAT_BARREL: - case SC_P_ALTER: case SC_E_CHAIN: - case SC_C_MARKER: case SC_B_TRAP: case SC_H_MINE: - case SC_STRANGELIGHTS: case SC_DECORATION_OF_MUSIC: case SC_GN_CARTBOOST: - case SC_RECOGNIZEDSPELL: case SC_CHASEWALK2: case SC_BITE: - case SC_ACTIVE_MONSTER_TRANSFORM: case SC_DORAM_BUF_01: case SC_DORAM_BUF_02: - case SC_SPORE_EXPLOSION: - case SC_NEWMOON: case SC_FLASHKICK: case SC_NOVAEXPLOSING: - case SC_SOULUNITY: case SC_SOULSHADOW: case SC_SOULFAIRY: - case SC_SOULFALCON: case SC_SOULGOLEM: case SC_USE_SKILL_SP_SPA: - case SC_USE_SKILL_SP_SHA: case SC_SP_SHA: - // 4th Jobs - case SC_SERVANTWEAPON: case SC_SERVANT_SIGN: case SC_GUARD_STANCE: - case SC_ATTACK_STANCE: case SC_PROTECTSHADOWEQUIP: case SC_SHADOW_STRIP: - case SC_ABYSSFORCEWEAPON: -#ifdef RENEWAL - case SC_EXTREMITYFIST2: -#endif - case SC_HIDING: case SC_CLOAKING: case SC_CHASEWALK: - case SC_CLOAKINGEXCEED: case SC__INVISIBILITY: case SC_UTSUSEMI: - case SC_MTF_ASPD2: case SC_MTF_RANGEATK2: case SC_MTF_MATK2: - case SC_2011RWC_SCROLL: case SC_JP_EVENT04: case SC_MTF_MHP: - case SC_MTF_MSP: case SC_MTF_PUMPKIN: case SC_MTF_HITFLEE: - case SC_ATTHASTE_CASH: case SC_REUSE_REFRESH: - case SC_REUSE_LIMIT_A: case SC_REUSE_LIMIT_B: case SC_REUSE_LIMIT_C: - case SC_REUSE_LIMIT_D: case SC_REUSE_LIMIT_E: case SC_REUSE_LIMIT_F: - case SC_REUSE_LIMIT_G: case SC_REUSE_LIMIT_H: case SC_REUSE_LIMIT_MTF: - case SC_REUSE_LIMIT_ASPD_POTION: case SC_REUSE_MILLENNIUMSHIELD: case SC_REUSE_CRUSHSTRIKE: - case SC_REUSE_STORMBLAST: case SC_ALL_RIDING_REUSE_LIMIT: - case SC_SPRITEMABLE: case SC_BITESCAR: - case SC_CLAN_INFO: case SC_SWORDCLAN: case SC_ARCWANDCLAN: - case SC_GOLDENMACECLAN: case SC_CROSSBOWCLAN: - case SC_DAILYSENDMAILCNT: - case SC_WEDDING: case SC_XMAS: case SC_SUMMER: - case SC_DRESSUP: case SC_HANBOK: case SC_OKTOBERFEST: - case SC_LHZ_DUN_N1: case SC_LHZ_DUN_N2: case SC_LHZ_DUN_N3: case SC_LHZ_DUN_N4: - case SC_ENTRY_QUEUE_APPLY_DELAY: case SC_ENTRY_QUEUE_NOTIFY_ADMISSION_TIME_OUT: - case SC_REUSE_LIMIT_LUXANIMA: case SC_LUXANIMA: case SC_SOULENERGY: - case SC_EP16_2_BUFF_SS: case SC_EP16_2_BUFF_SC: case SC_EP16_2_BUFF_AC: - case SC_EMERGENCY_MOVE: case SC_MADOGEAR: case SC_HOMUN_TIME: - case SC_PACKING_ENVELOPE1: case SC_PACKING_ENVELOPE2: case SC_PACKING_ENVELOPE3: - case SC_PACKING_ENVELOPE4: case SC_PACKING_ENVELOPE5: case SC_PACKING_ENVELOPE6: - case SC_PACKING_ENVELOPE7: case SC_PACKING_ENVELOPE8: case SC_PACKING_ENVELOPE9: case SC_PACKING_ENVELOPE10: - continue; + + if (it.second->flag[SCF_NOBANISHINGBUSTER]) + continue; + + switch (status) { case SC_WHISTLE: case SC_ASSNCROS: case SC_POEMBRAGI: case SC_APPLEIDUN: case SC_HUMMING: case SC_DONTFORGETME: case SC_FORTUNE: case SC_SERVICE4U: - if (!battle_config.dispel_song || tsc->data[i]->val4 == 0) + if (!battle_config.dispel_song || tsc->data[status]->val4 == 0) continue; //If in song area don't end it, even if config enabled break; case SC_ASSUMPTIO: @@ -2107,9 +2045,9 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1 continue; break; } - if( i == SC_BERSERK || i == SC_SATURDAYNIGHTFEVER ) - tsc->data[i]->val2 = 0; - status_change_end(bl,(sc_type)i,INVALID_TIMER); + if( status == SC_BERSERK || status == SC_SATURDAYNIGHTFEVER ) + tsc->data[status]->val2 = 0; + status_change_end(bl,status,INVALID_TIMER); n--; } //Remove bonus_script by Banishing Buster @@ -2802,7 +2740,7 @@ int skill_break_equip(struct block_list *src, struct block_list *bl, unsigned sh else if (rnd()%10000 >= rate) where&=~where_list[i]; else if (!sd) //Cause Strip effect. - sc_start(src,bl,scatk[i],100,0,skill_get_time(status_sc2skill(scatk[i]),1)); + sc_start(src,bl,scatk[i],100,0,skill_get_time(status_db.getSkill(scatk[i]),1)); } } if (!where) //Nothing to break. @@ -4490,14 +4428,19 @@ static TIMER_FUNC(skill_timerskill){ case PR_LEXDIVINA: if (src->type == BL_MOB) { // Monsters use the default duration when casting Lex Divina - sc_start(src, target, status_skill2sc(skl->skill_id), skl->type, skl->skill_lv, skill_get_time2(status_sc2skill(status_skill2sc(skl->skill_id)), 1)); + sc_start(src, target, SC_SILENCE, skl->type, skl->skill_lv, skill_get_time2(status_db.getSkill(SC_SILENCE), 1)); break; } - // Fall through + sc_start(src, target, SC_SILENCE, skl->type, skl->skill_lv, skill_get_time2(skl->skill_id, skl->skill_lv)); + break; case PR_STRECOVERY: + sc_start(src, target, SC_BLIND, skl->type, skl->skill_lv, skill_get_time2(skl->skill_id, skl->skill_lv)); + break; case BS_HAMMERFALL: + sc_start(src, target, SC_STUN, skl->type, skl->skill_lv, skill_get_time2(skl->skill_id, skl->skill_lv)); + break; case MER_LEXDIVINA: - sc_start(src, target, status_skill2sc(skl->skill_id), skl->type, skl->skill_lv, skill_get_time2(skl->skill_id, skl->skill_lv)); + sc_start(src, target, SC_SILENCE, skl->type, skl->skill_lv, skill_get_time2(skl->skill_id, skl->skill_lv)); break; case WZ_WATERBALL: { @@ -4884,15 +4827,15 @@ static int skill_tarotcard(struct block_list* src, struct block_list *target, ui { enum sc_type sc[] = { SC_STOP, SC_FREEZE, SC_STONE }; uint8 rand_eff = rnd() % 3; - int time = ((rand_eff == 0) ? skill_get_time2(skill_id, skill_lv) : skill_get_time2(status_sc2skill(sc[rand_eff]), 1)); + int time = ((rand_eff == 0) ? skill_get_time2(skill_id, skill_lv) : skill_get_time2(status_db.getSkill(sc[rand_eff]), 1)); sc_start(src, target, sc[rand_eff], 100, skill_lv, time); break; } case 9: // DEATH - curse, coma and poison { status_change_start(src, target, SC_COMA, 10000, skill_lv, 0, src->id, 0, 0, SCSTART_NONE); - sc_start(src, target, SC_CURSE, 100, skill_lv, skill_get_time2(status_sc2skill(SC_CURSE), 1)); - sc_start2(src, target, SC_POISON, 100, skill_lv, src->id, skill_get_time2(status_sc2skill(SC_POISON), 1)); + sc_start(src, target, SC_CURSE, 100, skill_lv, skill_get_time2(status_db.getSkill(SC_CURSE), 1)); + sc_start2(src, target, SC_POISON, 100, skill_lv, src->id, skill_get_time2(status_db.getSkill(SC_POISON), 1)); break; } case 10: // TEMPERANCE - confusion @@ -4906,7 +4849,7 @@ static int skill_tarotcard(struct block_list* src, struct block_list *target, ui clif_damage(src, target, tick, 0, 0, 6666, 0, DMG_NORMAL, 0, false); sc_start(src, target, SC_INCATKRATE, 100, -50, skill_get_time2(skill_id, skill_lv)); sc_start(src, target, SC_INCMATKRATE, 100, -50, skill_get_time2(skill_id, skill_lv)); - sc_start(src, target, SC_CURSE, skill_lv, 100, skill_get_time2(status_sc2skill(SC_CURSE), 1)); + sc_start(src, target, SC_CURSE, skill_lv, 100, skill_get_time2(status_db.getSkill(SC_CURSE), 1)); break; } case 12: // THE TOWER - 4444 damage @@ -4917,7 +4860,7 @@ static int skill_tarotcard(struct block_list* src, struct block_list *target, ui } case 13: // THE STAR - stun { - sc_start(src, target, SC_STUN, 100, skill_lv, skill_get_time2(status_sc2skill(SC_STUN), 1)); + sc_start(src, target, SC_STUN, 100, skill_lv, skill_get_time2(status_db.getSkill(SC_STUN), 1)); break; } default: // THE SUN - atk, matk, hit, flee and def reduced, immune to more tarot card effects @@ -4966,7 +4909,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint if (skill_id && skill_id != AG_DEADLY_PROJECTION && skill_get_type(skill_id) == BF_MAGIC && status_isimmune(bl) == 100) { //GTB makes all targetted magic display miss with a single bolt. - sc_type sct = status_skill2sc(skill_id); + sc_type sct = skill_get_sc(skill_id); if(sct != SC_NONE) status_change_end(bl, sct, INVALID_TIMER); clif_skill_damage(src, bl, tick, status_get_amotion(src), status_get_dmotion(bl), 0, 1, skill_id, skill_lv, skill_get_hit(skill_id)); @@ -5957,7 +5900,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint case NPC_MAGICALATTACK: skill_attack(BF_MAGIC,src,src,bl,skill_id,skill_lv,tick,flag); - sc_start(src,src,status_skill2sc(skill_id),100,skill_lv,skill_get_time(skill_id,skill_lv)); + sc_start(src,src,SC_MAGICALATTACK,100,skill_lv,skill_get_time(skill_id,skill_lv)); break; case HVAN_CAPRICE: //[blackhole89] @@ -6209,7 +6152,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint case GC_DARKCROW: skill_attack(BF_WEAPON, src, src, bl, skill_id, skill_lv, tick, flag); - sc_start(src, bl, status_skill2sc(skill_id), 100, skill_lv, skill_get_time(skill_id, skill_lv)); // Should be applied even on miss + sc_start(src, bl, SC_DARKCROW, 100, skill_lv, skill_get_time(skill_id, skill_lv)); // Should be applied even on miss break; case WL_DRAINLIFE: @@ -6376,7 +6319,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint break; case WL_FROSTMISTY: // Causes Freezing status through walls. - sc_start(src, bl, status_skill2sc(skill_id), 25 + 5 * skill_lv, skill_lv, skill_get_time(skill_id, skill_lv)); + sc_start(src, bl, SC_FREEZING, 25 + 5 * skill_lv, skill_lv, skill_get_time(skill_id, skill_lv)); sc_start(src, bl, SC_MISTY_FROST, 100, skill_lv, skill_get_time2(skill_id, skill_lv)); // Doesn't deal damage through non-shootable walls. if( !battle_config.skill_wall_check || (battle_config.skill_wall_check && path_search(NULL,src->m,src->x,src->y,bl->x,bl->y,1,CELL_CHKWALL)) ) @@ -6632,14 +6575,13 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint if( src->type == BL_ELEM ) { s_elemental_data *ele = BL_CAST(BL_ELEM,src); struct status_change *tsc_ele = status_get_sc(&ele->bl); - sc_type type = status_skill2sc(skill_id), type2; - - type2 = static_cast(type - 1); + sc_type type = SC_TIDAL_WEAPON_OPTION, type2 = SC_TIDAL_WEAPON; clif_skill_nodamage(src,battle_get_master(src),skill_id,skill_lv,1); clif_skill_damage(src, src, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE); if( (tsc_ele && tsc_ele->data[type2]) || (tsc && tsc->data[type]) ) { - elemental_clean_single_effect(ele, skill_id); + status_change_end(battle_get_master(src),type,INVALID_TIMER); + status_change_end(src,type2,INVALID_TIMER); } if( rnd()%100 < 50 ) skill_attack(skill_get_type(skill_id),src,src,bl,skill_id,skill_lv,tick,flag); @@ -6676,13 +6618,21 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint { TBL_HOM *hd = BL_CAST(BL_HOM,src); int duration = max(skill_lv, (status_get_str(src) / 7 - status_get_str(bl) / 10)) * 1000; //Yommy formula + sc_type type; - if (skill_id == MH_TINDER_BREAKER && unit_movepos(src, bl->x, bl->y, 1, 1)) { - clif_blown(src); - clif_skill_poseffect(src,skill_id,skill_lv,bl->x,bl->y,tick); + if( skill_id == MH_TINDER_BREAKER ){ + type = SC_TINDER_BREAKER2; + if( unit_movepos(src, bl->x, bl->y, 1, 1) ){ + clif_blown(src); + clif_skill_poseffect(src,skill_id,skill_lv,bl->x,bl->y,tick); + } + }else if( skill_id == MH_CBC ){ + type = SC_CBC; + }else if( skill_id == MH_EQC ){ + type = SC_EQC; } - clif_skill_nodamage(src,bl,skill_id,skill_lv, - sc_start4(src,bl,status_skill2sc(skill_id),100,skill_lv,src->id,0,0,duration)); + + clif_skill_nodamage(src,bl,skill_id,skill_lv,sc_start4(src,bl,type,100,skill_lv,src->id,0,0,duration)); skill_attack(skill_get_type(skill_id),src,src,bl,skill_id,skill_lv,tick,flag); } break; @@ -6742,13 +6692,12 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint break; case SU_SCAROFTAROU: + sc_start(src, bl, SC_BITESCAR, 10, skill_lv, skill_get_time(skill_id, skill_lv)); //! TODO: What's the activation chance for the Bite effect? + skill_attack(skill_get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, flag); + break; case SU_SV_STEMSPEAR: - if (skill_id == SU_SCAROFTAROU) - sc_start(src, bl, status_skill2sc(skill_id), 10, skill_lv, skill_get_time(skill_id, skill_lv)); //! TODO: What's the activation chance for the Bite effect? - else { - if (sd && pc_checkskill(sd, SU_SPIRITOFLAND)) - sc_start(src, src, SC_DORAM_WALKSPEED, 100, 50, skill_get_time(SU_SPIRITOFLAND, 1)); - } + if (sd && pc_checkskill(sd, SU_SPIRITOFLAND)) + sc_start(src, src, SC_DORAM_WALKSPEED, 100, 50, skill_get_time(SU_SPIRITOFLAND, 1)); skill_attack(skill_get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, flag); break; @@ -6903,7 +6852,7 @@ static int skill_apply_songs(struct block_list* target, va_list ap) default: // Buff/Debuff type songs if (skill_id == CG_HERMODE && src->id != target->id) status_change_clear_buffs(target, SCCB_BUFFS); // Should dispell only allies. - return sc_start(src, target, status_skill2sc(skill_id), 100, skill_lv, skill_get_time(skill_id, skill_lv)); + return sc_start(src, target, skill_get_sc(skill_id), 100, skill_lv, skill_get_time(skill_id, skill_lv)); } } @@ -7061,12 +7010,11 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui return skill_castend_pos2(src,bl->x,bl->y,skill_id,skill_lv,tick,0); } - type = status_skill2sc(skill_id); - status_change *sc = status_get_sc(src); + type = skill_get_sc(skill_id); tsc = status_get_sc(bl); - tsce = (tsc && type != -1)?tsc->data[type]:NULL; + tsce = (tsc && type != SC_NONE)?tsc->data[type]:NULL; - if (src!=bl && type > -1 && + if (src!=bl && type > SC_NONE && CHK_ELEMENT((i = skill_get_ele(skill_id, skill_lv))) && i > ELE_NEUTRAL && skill_get_inf(skill_id) != INF_SUPPORT_SKILL && battle_attr_fix(NULL, NULL, 100, i, tstatus->def_ele, tstatus->ele_lv) <= 0) @@ -7703,6 +7651,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui sc_start(src, bl, type, 100, skill_lv, skill_get_time2(skill_id, skill_lv)); } else { uint16 climax_lv = 0, splash_size = skill_get_splash(skill_id, skill_lv); + status_change *sc = status_get_sc(src); if (sc && sc->data[SC_CLIMAX]) climax_lv = sc->data[SC_CLIMAX]->val1; @@ -7885,23 +7834,16 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv))); break; - case AS_ENCHANTPOISON: // Prevent spamming [Valaris] - if (sd && dstsd && dstsd->sc.count) { - if (dstsd->sc.data[SC_FIREWEAPON] || - dstsd->sc.data[SC_WATERWEAPON] || - dstsd->sc.data[SC_WINDWEAPON] || - dstsd->sc.data[SC_EARTHWEAPON] || - dstsd->sc.data[SC_SHADOWWEAPON] || - dstsd->sc.data[SC_GHOSTWEAPON] - // dstsd->sc.data[SC_ENCPOISON] //People say you should be able to recast to lengthen the timer. [Skotlex] - ) { - clif_skill_nodamage(src,bl,skill_id,skill_lv,0); - clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0); - break; + case AS_ENCHANTPOISON: + if( sc_start( src, bl, type, 100, skill_lv, skill_get_time( skill_id, skill_lv ) ) ){ + clif_skill_nodamage( src, bl, skill_id, skill_lv, 1 ); + }else{ + clif_skill_nodamage( src, bl, skill_id, skill_lv, 0 ); + + if( sd != nullptr ){ + clif_skill_fail( sd, skill_id, USESKILL_FAIL_LEVEL, 0 ); } } - clif_skill_nodamage(src,bl,skill_id,skill_lv, - sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv))); break; case LK_TENSIONRELAX: @@ -8544,7 +8486,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui } if( skill_id == SP_SOULCOLLECT ){ - clif_skill_nodamage(src, bl, skill_id, skill_lv, sc_start2(src, bl, type, 100, skill_lv, pc_checkskill(sd, SP_SOULENERGY), max(1000, skill_get_time(skill_id, skill_lv)))); + clif_skill_nodamage(src, bl, skill_id, skill_lv, sc_start2(src, bl, type, 100, skill_lv, pc_checkskill(sd, SP_SOULENERGY), skill_get_time(skill_id, skill_lv))); }else{ clif_skill_nodamage(src, bl, skill_id, skill_lv, sc_start(src, bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv))); } @@ -9237,116 +9179,21 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui if(!tsc || !tsc->count) break; - for(i=0;idata[i]) + //Statuses that can't be Dispelled + for (const auto &it : status_db) { + sc_type status = static_cast(it.first); + + if (!tsc->data[status]) continue; - switch (i) { - case SC_WEIGHT50: case SC_WEIGHT90: case SC_HALLUCINATION: - case SC_STRIPWEAPON: case SC_STRIPSHIELD: case SC_STRIPARMOR: - case SC_STRIPHELM: case SC_CP_WEAPON: case SC_CP_SHIELD: - case SC_CP_ARMOR: case SC_CP_HELM: case SC_COMBO: - case SC_STRFOOD: case SC_AGIFOOD: case SC_VITFOOD: - case SC_INTFOOD: case SC_DEXFOOD: case SC_LUKFOOD: - case SC_HITFOOD: case SC_FLEEFOOD: case SC_BATKFOOD: - case SC_WATKFOOD: case SC_MATKFOOD: case SC_CRIFOOD: - case SC_DANCING: case SC_EDP: case SC_AUTOBERSERK: - case SC_CARTBOOST: case SC_MELTDOWN: case SC_SAFETYWALL: - case SC_SMA: case SC_SPEEDUP0: case SC_NOCHAT: - case SC_ANKLE: case SC_SPIDERWEB: case SC_JAILED: - case SC_ITEMBOOST: case SC_EXPBOOST: case SC_LIFEINSURANCE: - case SC_BOSSMAPINFO: case SC_PNEUMA: case SC_AUTOSPELL: - case SC_INCHITRATE: case SC_INCATKRATE: case SC_NEN: - case SC_READYSTORM: case SC_READYDOWN: case SC_READYTURN: - case SC_READYCOUNTER: case SC_DODGE: case SC_WARM: - /*case SC_SPEEDUP1:*/ case SC_AUTOTRADE: case SC_CRITICALWOUND: - case SC_JEXPBOOST: case SC_INVINCIBLE: case SC_INVINCIBLEOFF: - case SC_HELLPOWER: case SC_MANU_ATK: case SC_MANU_DEF: - case SC_SPL_ATK: case SC_SPL_DEF: case SC_MANU_MATK: - case SC_SPL_MATK: case SC_RICHMANKIM: case SC_ETERNALCHAOS: - case SC_DRUMBATTLE: case SC_NIBELUNGEN: case SC_ROKISWEIL: - case SC_INTOABYSS: case SC_SIEGFRIED: case SC_FOOD_STR_CASH: - case SC_FOOD_AGI_CASH: case SC_FOOD_VIT_CASH: case SC_FOOD_DEX_CASH: - case SC_FOOD_INT_CASH: case SC_FOOD_LUK_CASH: case SC_SEVENWIND: - case SC_MIRACLE: case SC_S_LIFEPOTION: case SC_L_LIFEPOTION: - case SC_INCHEALRATE: case SC_ELECTRICSHOCKER: case SC__STRIPACCESSORY: - case SC_SAVAGE_STEAK: case SC_COCKTAIL_WARG_BLOOD: case SC_MINOR_BBQ: - case SC_SIROMA_ICE_TEA: case SC_DROCERA_HERB_STEAMED: case SC_PUTTI_TAILS_NOODLES: - case SC_NEUTRALBARRIER_MASTER: case SC_NEUTRALBARRIER: case SC_STEALTHFIELD_MASTER: - case SC_STEALTHFIELD: case SC_GIANTGROWTH: case SC_MILLENNIUMSHIELD: - case SC_REFRESH: case SC_STONEHARDSKIN: case SC_VITALITYACTIVATION: - case SC_FIGHTINGSPIRIT: case SC_ABUNDANCE: case SC__SHADOWFORM: - case SC_RECOGNIZEDSPELL:case SC_LEADERSHIP: case SC_GLORYWOUNDS: - case SC_SOULCOLD: case SC_HAWKEYES: case SC_REGENERATION: - case SC_PUSH_CART: case SC_RAISINGDRAGON: case SC_GT_ENERGYGAIN: - case SC_GT_CHANGE: case SC_GT_REVITALIZE: case SC_REFLECTDAMAGE: - case SC_INSPIRATION: case SC_EXEEDBREAK: case SC_FORCEOFVANGUARD: - case SC_BANDING: case SC_DUPLELIGHT: case SC_EXPIATIO: - case SC_LAUDAAGNUS: case SC_LAUDARAMUS: case SC_GATLINGFEVER: - case SC_INCREASING: case SC_ADJUSTMENT: case SC_MADNESSCANCEL: - case SC_ANGEL_PROTECT: case SC_MONSTER_TRANSFORM: case SC_FULL_THROTTLE: - case SC_REBOUND: case SC_TELEKINESIS_INTENSE: case SC_MOONSTAR: - case SC_SUPER_STAR: case SC_ALL_RIDING: case SC_MTF_ASPD: - case SC_MTF_RANGEATK: case SC_MTF_MATK: case SC_MTF_MLEATKED: - case SC_MTF_CRIDAMAGE: case SC_HEAT_BARREL: - case SC_P_ALTER: case SC_E_CHAIN: case SC_C_MARKER: - case SC_B_TRAP: case SC_H_MINE: case SC_STRANGELIGHTS: - case SC_DECORATION_OF_MUSIC: case SC_GN_CARTBOOST: case SC_CHASEWALK2: - case SC_ACTIVE_MONSTER_TRANSFORM: case SC_DORAM_BUF_01: case SC_DORAM_BUF_02: - case SC_SPORE_EXPLOSION: - case SC_NEWMOON: case SC_FLASHKICK: case SC_NOVAEXPLOSING: - case SC_SOULUNITY: case SC_SOULSHADOW: case SC_SOULFAIRY: - case SC_SOULFALCON: case SC_SOULGOLEM: case SC_USE_SKILL_SP_SPA: - case SC_USE_SKILL_SP_SHA: case SC_SP_SHA: - // 4th Jobs - case SC_SERVANTWEAPON: case SC_SERVANT_SIGN: case SC_GUARD_STANCE: - case SC_ATTACK_STANCE: case SC_PROTECTSHADOWEQUIP: case SC_SHADOW_STRIP: - case SC_ABYSSFORCEWEAPON: -#ifdef RENEWAL - case SC_EXTREMITYFIST2: -#endif - case SC_HIDING: case SC_CLOAKING: case SC_CHASEWALK: - case SC_CLOAKINGEXCEED: case SC__INVISIBILITY: case SC_UTSUSEMI: - case SC_MTF_ASPD2: case SC_MTF_RANGEATK2: case SC_MTF_MATK2: - case SC_2011RWC_SCROLL: case SC_JP_EVENT04: case SC_MTF_MHP: - case SC_MTF_MSP: case SC_MTF_PUMPKIN: case SC_MTF_HITFLEE: - case SC_ATTHASTE_CASH: case SC_ARMOR_ELEMENT_WATER: case SC_REUSE_REFRESH: - case SC_REUSE_LIMIT_A: case SC_REUSE_LIMIT_B: case SC_REUSE_LIMIT_C: - case SC_REUSE_LIMIT_D: case SC_REUSE_LIMIT_E: case SC_REUSE_LIMIT_F: - case SC_REUSE_LIMIT_G: case SC_REUSE_LIMIT_H: case SC_REUSE_LIMIT_MTF: - case SC_REUSE_LIMIT_ASPD_POTION: case SC_REUSE_MILLENNIUMSHIELD: case SC_REUSE_CRUSHSTRIKE: - case SC_REUSE_STORMBLAST: case SC_ALL_RIDING_REUSE_LIMIT: - case SC_SPRITEMABLE: case SC_BITESCAR: case SC_CRUSHSTRIKE: - case SC_QUEST_BUFF1: case SC_QUEST_BUFF2: case SC_QUEST_BUFF3: - case SC_ARMOR_ELEMENT_EARTH: case SC_ARMOR_ELEMENT_FIRE: case SC_ARMOR_ELEMENT_WIND: - case SC_ENTRY_QUEUE_APPLY_DELAY: case SC_ENTRY_QUEUE_NOTIFY_ADMISSION_TIME_OUT: - case SC_MADOGEAR: - // Clans - case SC_CLAN_INFO: - case SC_SWORDCLAN: - case SC_ARCWANDCLAN: - case SC_GOLDENMACECLAN: - case SC_CROSSBOWCLAN: - case SC_JUMPINGCLAN: - case SC_DAILYSENDMAILCNT: - case SC_WEDDING: case SC_XMAS: case SC_SUMMER: - case SC_DRESSUP: case SC_HANBOK: case SC_OKTOBERFEST: - case SC_LHZ_DUN_N1: case SC_LHZ_DUN_N2: case SC_LHZ_DUN_N3: case SC_LHZ_DUN_N4: - case SC_REUSE_LIMIT_LUXANIMA: case SC_LUXANIMA: case SC_SOULENERGY: - case SC_EP16_2_BUFF_SS: case SC_EP16_2_BUFF_SC: case SC_EP16_2_BUFF_AC: - case SC_EMERGENCY_MOVE: case SC_HOMUN_TIME: - case SC_PACKING_ENVELOPE1: case SC_PACKING_ENVELOPE2: case SC_PACKING_ENVELOPE3: - case SC_PACKING_ENVELOPE4: case SC_PACKING_ENVELOPE5: case SC_PACKING_ENVELOPE6: - case SC_PACKING_ENVELOPE7: case SC_PACKING_ENVELOPE8: case SC_PACKING_ENVELOPE9: case SC_PACKING_ENVELOPE10: - continue; - case SC_WHISTLE: - case SC_ASSNCROS: - case SC_POEMBRAGI: - case SC_APPLEIDUN: - case SC_HUMMING: - case SC_DONTFORGETME: - case SC_FORTUNE: - case SC_SERVICE4U: - if (!battle_config.dispel_song || tsc->data[i]->val4 == 0) + + if (it.second->flag[SCF_NODISPELL]) + continue; + switch (status) { + // bugreport:4888 these songs may only be dispelled if you're not in their song area anymore + case SC_WHISTLE: case SC_ASSNCROS: case SC_POEMBRAGI: + case SC_APPLEIDUN: case SC_HUMMING: case SC_DONTFORGETME: + case SC_FORTUNE: case SC_SERVICE4U: + if (!battle_config.dispel_song || tsc->data[status]->val4 == 0) continue; //If in song area don't end it, even if config enabled break; case SC_ASSUMPTIO: @@ -9354,8 +9201,9 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui continue; break; } - if(i == SC_BERSERK) tsc->data[i]->val2=0; //Mark a dispelled berserk to avoid setting hp to 100 by setting hp penalty to 0. - status_change_end(bl, (sc_type)i, INVALID_TIMER); + if (i == SC_BERSERK || i == SC_SATURDAYNIGHTFEVER) + tsc->data[status]->val2 = 0; //Mark a dispelled berserk to avoid setting hp to 100 by setting hp penalty to 0. + status_change_end(bl, status, INVALID_TIMER); } break; } @@ -10161,7 +10009,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui break; } if (tsc) { - if (tsc->data[status_skill2sc(skill_id)]) { // Allow refreshing an already active soul link. + if (tsc->data[skill_get_sc(skill_id)]) { // Allow refreshing an already active soul link. clif_skill_nodamage(src, bl, skill_id, skill_lv, sc_start(src, bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv))); break; } else if (tsc->data[SC_SPIRIT] || tsc->data[SC_SOULGOLEM] || tsc->data[SC_SOULSHADOW] || tsc->data[SC_SOULFALCON] || tsc->data[SC_SOULFAIRY]) { // Soul links from Soul Linker and Soul Reaper skills don't stack. @@ -10190,7 +10038,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui if (tsce) { if(sd) clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0); - status_change_start(src,src,SC_STUN,10000,skill_lv,0,0,0,10000,8); + status_change_start(src,src,SC_STUN,10000,skill_lv,0,0,0,10000,SCSTART_NORATEDEF); status_change_end(bl, SC_SWOO, INVALID_TIMER); break; } @@ -10825,106 +10673,32 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui if(!tsc || !tsc->count) break; - for( i = 0; i < SC_MAX; i++ ) { - if (!tsc->data[i]) + + //Statuses change that can't be removed by Cleareance + for (const auto &it : status_db) { + sc_type status = static_cast(it.first); + + if (!tsc->data[status]) continue; - switch (i) { - case SC_WEIGHT50: case SC_WEIGHT90: case SC_HALLUCINATION: - case SC_STRIPWEAPON: case SC_STRIPSHIELD: case SC_STRIPARMOR: - case SC_STRIPHELM: case SC_CP_WEAPON: case SC_CP_SHIELD: - case SC_CP_ARMOR: case SC_CP_HELM: case SC_COMBO: - case SC_STRFOOD: case SC_AGIFOOD: case SC_VITFOOD: - case SC_INTFOOD: case SC_DEXFOOD: case SC_LUKFOOD: - case SC_HITFOOD: case SC_FLEEFOOD: case SC_BATKFOOD: - case SC_WATKFOOD: case SC_MATKFOOD: case SC_CRIFOOD: - case SC_DANCING: case SC_SPIRIT: case SC_AUTOBERSERK: - case SC_CARTBOOST: case SC_MELTDOWN: case SC_SAFETYWALL: - case SC_SMA: case SC_SPEEDUP0: case SC_NOCHAT: - case SC_ANKLE: case SC_SPIDERWEB: case SC_JAILED: - case SC_ITEMBOOST: case SC_EXPBOOST: case SC_LIFEINSURANCE: - case SC_BOSSMAPINFO: case SC_PNEUMA: case SC_AUTOSPELL: - case SC_INCHITRATE: case SC_INCATKRATE: case SC_NEN: - case SC_READYSTORM: case SC_READYDOWN: case SC_READYTURN: - case SC_READYCOUNTER: case SC_DODGE: case SC_WARM: - /*case SC_SPEEDUP1:*/ case SC_AUTOTRADE: case SC_CRITICALWOUND: - case SC_JEXPBOOST: case SC_INVINCIBLE: case SC_INVINCIBLEOFF: - case SC_HELLPOWER: case SC_MANU_ATK: case SC_MANU_DEF: - case SC_SPL_ATK: case SC_SPL_DEF: case SC_MANU_MATK: - case SC_SPL_MATK: case SC_RICHMANKIM: case SC_ETERNALCHAOS: - case SC_DRUMBATTLE: case SC_NIBELUNGEN: case SC_ROKISWEIL: - case SC_INTOABYSS: case SC_SIEGFRIED: case SC_WHISTLE: - case SC_ASSNCROS: case SC_POEMBRAGI: case SC_APPLEIDUN: - case SC_HUMMING: case SC_DONTFORGETME: case SC_FORTUNE: - case SC_SERVICE4U: case SC_FOOD_STR_CASH: case SC_FOOD_AGI_CASH: - case SC_FOOD_VIT_CASH: case SC_FOOD_DEX_CASH: case SC_FOOD_INT_CASH: - case SC_FOOD_LUK_CASH: case SC_ELECTRICSHOCKER: case SC_BITE: - case SC__STRIPACCESSORY: case SC__ENERVATION: case SC__GROOMY: - case SC__IGNORANCE: case SC__LAZINESS: case SC__UNLUCKY: - case SC__WEAKNESS: case SC_SAVAGE_STEAK: case SC_COCKTAIL_WARG_BLOOD: - case SC_MAGNETICFIELD: case SC_MINOR_BBQ: case SC_SIROMA_ICE_TEA: - case SC_DROCERA_HERB_STEAMED: case SC_PUTTI_TAILS_NOODLES: case SC_NEUTRALBARRIER_MASTER: - case SC_NEUTRALBARRIER: case SC_STEALTHFIELD_MASTER: case SC_STEALTHFIELD: - case SC_LEADERSHIP: case SC_GLORYWOUNDS: case SC_SOULCOLD: - case SC_HAWKEYES: case SC_REGENERATION: case SC_SEVENWIND: - case SC_MIRACLE: case SC_S_LIFEPOTION: case SC_L_LIFEPOTION: - case SC_INCHEALRATE: case SC_PUSH_CART: case SC_PARTYFLEE: - case SC_RAISINGDRAGON: case SC_GT_REVITALIZE: case SC_GT_ENERGYGAIN: - case SC_GT_CHANGE: case SC_ANGEL_PROTECT: case SC_MONSTER_TRANSFORM: - case SC_FULL_THROTTLE: case SC_REBOUND: case SC_TELEKINESIS_INTENSE: - case SC_MOONSTAR: case SC_SUPER_STAR: case SC_ALL_RIDING: - case SC_MTF_ASPD: case SC_MTF_RANGEATK: case SC_MTF_MATK: - case SC_MTF_MLEATKED: case SC_MTF_CRIDAMAGE: case SC_HEAT_BARREL: - case SC_P_ALTER: case SC_E_CHAIN: - case SC_C_MARKER: case SC_B_TRAP: case SC_H_MINE: - case SC_NEWMOON: case SC_FLASHKICK: case SC_DIMENSION: - case SC_NOVAEXPLOSING: - case SC_SOULUNITY: case SC_SOULSHADOW: case SC_SOULFAIRY: - case SC_SOULFALCON: case SC_SOULGOLEM: case SC_USE_SKILL_SP_SPA: - case SC_USE_SKILL_SP_SHA: case SC_SP_SHA: - case SC_STRANGELIGHTS: case SC_DECORATION_OF_MUSIC: case SC_GN_CARTBOOST: - case SC_RECOGNIZEDSPELL: case SC_CHASEWALK2: case SC_ACTIVE_MONSTER_TRANSFORM: - case SC_SPORE_EXPLOSION: - // 4th Jobs - case SC_SERVANTWEAPON: case SC_SERVANT_SIGN: case SC_GUARD_STANCE: - case SC_ATTACK_STANCE: case SC_PROTECTSHADOWEQUIP: case SC_SHADOW_STRIP: - case SC_ABYSSFORCEWEAPON: -#ifdef RENEWAL - case SC_EXTREMITYFIST2: -#endif - case SC_HIDING: case SC_CLOAKING: case SC_CHASEWALK: - case SC_CLOAKINGEXCEED: case SC__INVISIBILITY: case SC_UTSUSEMI: - case SC_MTF_ASPD2: case SC_MTF_RANGEATK2: case SC_MTF_MATK2: - case SC_2011RWC_SCROLL: case SC_JP_EVENT04: case SC_MTF_MHP: - case SC_MTF_MSP: case SC_MTF_PUMPKIN: case SC_MTF_HITFLEE: - case SC_ATTHASTE_CASH: case SC_REUSE_REFRESH: - case SC_REUSE_LIMIT_A: case SC_REUSE_LIMIT_B: case SC_REUSE_LIMIT_C: - case SC_REUSE_LIMIT_D: case SC_REUSE_LIMIT_E: case SC_REUSE_LIMIT_F: - case SC_REUSE_LIMIT_G: case SC_REUSE_LIMIT_H: case SC_REUSE_LIMIT_MTF: - case SC_REUSE_LIMIT_ASPD_POTION: case SC_REUSE_MILLENNIUMSHIELD: case SC_REUSE_CRUSHSTRIKE: - case SC_REUSE_STORMBLAST: case SC_ALL_RIDING_REUSE_LIMIT: - case SC_SPRITEMABLE: case SC_DORAM_BUF_01: case SC_DORAM_BUF_02: - case SC_QUEST_BUFF1: case SC_QUEST_BUFF2: case SC_QUEST_BUFF3: - case SC_CLAN_INFO: case SC_SWORDCLAN: case SC_ARCWANDCLAN: - case SC_GOLDENMACECLAN: case SC_CROSSBOWCLAN: - case SC_DAILYSENDMAILCNT: - case SC_WEDDING: case SC_XMAS: case SC_SUMMER: - case SC_DRESSUP: case SC_HANBOK: case SC_OKTOBERFEST: - case SC_LHZ_DUN_N1: case SC_LHZ_DUN_N2: case SC_LHZ_DUN_N3: case SC_LHZ_DUN_N4: - case SC_ENTRY_QUEUE_APPLY_DELAY: case SC_ENTRY_QUEUE_NOTIFY_ADMISSION_TIME_OUT: - case SC_REUSE_LIMIT_LUXANIMA: case SC_LUXANIMA: case SC_SOULENERGY: - case SC_EP16_2_BUFF_SS: case SC_EP16_2_BUFF_SC: case SC_EP16_2_BUFF_AC: - case SC_EMERGENCY_MOVE: case SC_MADOGEAR: case SC_HOMUN_TIME: - case SC_PACKING_ENVELOPE1: case SC_PACKING_ENVELOPE2: case SC_PACKING_ENVELOPE3: - case SC_PACKING_ENVELOPE4: case SC_PACKING_ENVELOPE5: case SC_PACKING_ENVELOPE6: - case SC_PACKING_ENVELOPE7: case SC_PACKING_ENVELOPE8: case SC_PACKING_ENVELOPE9: case SC_PACKING_ENVELOPE10: + + if (it.second->flag[SCF_NOCLEARANCE]) continue; - case SC_ASSUMPTIO: - if( bl->type == BL_MOB ) - continue; - break; + + switch (status) { + case SC_WHISTLE: case SC_ASSNCROS: case SC_POEMBRAGI: + case SC_APPLEIDUN: case SC_HUMMING: case SC_DONTFORGETME: + case SC_FORTUNE: case SC_SERVICE4U: + if (!battle_config.dispel_song || tsc->data[status]->val4 == 0) + continue; //If in song area don't end it, even if config enabled + break; + case SC_ASSUMPTIO: + if (bl->type == BL_MOB) + continue; + break; } - if(i == SC_BERSERK) tsc->data[i]->val2=0; //Mark a dispelled berserk to avoid setting hp to 100 by setting hp penalty to 0. - status_change_end(bl,(sc_type)i,INVALID_TIMER); + if (i == SC_BERSERK || i == SC_SATURDAYNIGHTFEVER) + tsc->data[status]->val2 = 0; //Mark a dispelled berserk to avoid setting hp to 100 by setting hp penalty to 0. + status_change_end(bl,status,INVALID_TIMER); } break; } @@ -11929,7 +11703,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui struct status_change *sc = status_get_sc(&ele->bl); if( (sc && sc->data[type2]) || (tsc && tsc->data[type]) ) { - elemental_clean_single_effect(ele, skill_id); + status_change_end(src,type,INVALID_TIMER); + status_change_end(bl,type2,INVALID_TIMER); } else { clif_skill_nodamage(src,src,skill_id,skill_lv,1); if (!(skill_id >= EM_EL_FLAMETECHNIC && skill_id <= EM_EL_DEADLY_POISON)) @@ -11957,7 +11732,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui clif_skill_nodamage(src,src,skill_id,skill_lv,1); if( (sc && sc->data[type2]) || (tsc && tsc->data[type]) ) { - elemental_clean_single_effect(ele, skill_id); + status_change_end(bl,type,INVALID_TIMER); + status_change_end(src,type2,INVALID_TIMER); } else { // This not heals at the end. clif_skill_damage(src, src, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE); @@ -13354,9 +13130,8 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui sd = BL_CAST(BL_PC, src); sc = status_get_sc(src); - status_data *sstatus = status_get_status_data(src); - type = status_skill2sc(skill_id); - sce = (sc && type != -1)?sc->data[type]:NULL; + type = skill_get_sc(skill_id); + sce = (sc && type != SC_NONE)?sc->data[type]:NULL; switch (skill_id) { //Skill effect. case WZ_METEOR: @@ -13746,7 +13521,9 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui // Final heal increased by HPlus. // Is this the right place for this??? [Rytech] // Can HPlus also affect SP recovery??? - if (sd && sstatus->hplus > 0) { + status_data *sstatus = status_get_status_data(src); + + if (sstatus && sstatus->hplus > 0) { potion_hp += potion_hp * sstatus->hplus / 100; potion_sp += potion_sp * sstatus->hplus / 100; } @@ -14283,7 +14060,7 @@ int skill_castend_map (struct map_session_data *sd, uint16 skill_id, const char return 0; } - if( ( sd->sc.opt1 && sd->sc.opt1 != OPT1_BURNING ) || sd->sc.option&OPTION_HIDE ) { + if( sd->sc.cant.cast ) { skill_failed(sd); return 0; } @@ -15134,7 +14911,7 @@ static int skill_unit_onplace(struct skill_unit *unit, struct block_list *bl, t_ if (sc && sc->data[SC_HOVERING] && skill->inf2[INF2_IGNOREHOVERING]) return 0; // Under Hovering characters are immune to select trap and ground target skills. - type = status_skill2sc(sg->skill_id); + type = skill_get_sc(sg->skill_id); sce = (sc && type != SC_NONE) ? sc->data[type] : NULL; skill_id = sg->skill_id; //In case the group is deleted, we need to return the correct skill id, still. switch (sg->unit_id) { @@ -15463,7 +15240,7 @@ int skill_unit_onplace_timer(struct skill_unit *unit, struct block_list *bl, t_t tsc = status_get_sc(bl); sc = status_get_sc(ss); tstatus = status_get_status_data(bl); - type = status_skill2sc(sg->skill_id); + type = skill_get_sc(sg->skill_id); skill_id = sg->skill_id; std::bitset inf2 = skill_db.find(skill_id)->inf2; @@ -16234,8 +16011,8 @@ int skill_unit_onout(struct skill_unit *src, struct block_list *bl, t_tick tick) return 0; sc = status_get_sc(bl); - type = status_skill2sc(sg->skill_id); - sce = (sc && type != -1)?sc->data[type]:NULL; + type = skill_get_sc(sg->skill_id); + sce = (sc && type != SC_NONE)?sc->data[type]:NULL; if (bl->prev == NULL || (status_isdead(bl) && sg->unit_id != UNT_ANKLESNARE)) //Need to delete the trap if the source died. return 0; @@ -16265,8 +16042,8 @@ int skill_unit_onout(struct skill_unit *src, struct block_list *bl, t_tick tick) { for(uint16 i = BA_WHISTLE; i <= DC_SERVICEFORYOU; i++) { if(skill_get_inf2(i, INF2_ISSONG)) { - type = status_skill2sc(i); - sce = (sc && type != -1)?sc->data[type]:NULL; + type = skill_get_sc(i); + sce = (sc && type != SC_NONE)?sc->data[type]:NULL; if(sce) return i; } @@ -16302,8 +16079,8 @@ int skill_unit_onleft(uint16 skill_id, struct block_list *bl, t_tick tick) if (sc && !sc->count) sc = NULL; - type = status_skill2sc(skill_id); - sce = (sc && type != -1)?sc->data[type]:NULL; + type = skill_get_sc(skill_id); + sce = (sc && type != SC_NONE)?sc->data[type]:NULL; switch (skill_id) { @@ -16368,8 +16145,8 @@ int skill_unit_onleft(uint16 skill_id, struct block_list *bl, t_tick tick) { for(uint16 i = BA_WHISTLE; i <= DC_SERVICEFORYOU; i++){ if(skill_get_inf2(i, INF2_ISSONG)){ - type = status_skill2sc(i); - sce = (sc && type != -1)?sc->data[type]:NULL; + type = skill_get_sc(i); + sce = (sc && type != SC_NONE)?sc->data[type]:NULL; if(sce && !sce->val4){ //We don't want dissonance updating this anymore delete_timer(sce->timer, status_change_timer); sce->val4 = 1; //Store the fact that this is a "reduced" duration effect. @@ -16560,7 +16337,7 @@ int skill_check_condition_char_sub (struct block_list *bl, va_list ap) if(pc_isdead(tsd)) return 0; - if (tsd->sc.data[SC_SILENCE] || ( tsd->sc.opt1 && tsd->sc.opt1 != OPT1_BURNING )) + if (tsd->sc.cant.cast) return 0; if( is_chorus ) { @@ -20299,10 +20076,9 @@ int skill_delunit(struct skill_unit* unit) case SC_ESCAPE: { struct block_list* target = map_id2bl(group->val2); - enum sc_type type = status_skill2sc(group->skill_id); if( target ) - status_change_end(target, type, INVALID_TIMER); + status_change_end(target, SC_ANKLE, INVALID_TIMER); } break; case WZ_ICEWALL: @@ -20529,15 +20305,21 @@ int skill_delunitgroup_(std::shared_ptr group, const char* f break; case SG_SUN_WARM: case SG_MOON_WARM: - case SG_STAR_WARM: - case LG_BANDING: - { + case SG_STAR_WARM: { status_change *sc = status_get_sc(src); - sc_type type = status_skill2sc(group->skill_id); - if (sc && sc->data[type]) { - sc->data[type]->val4 = 0; - status_change_end(src, type, INVALID_TIMER); + if (sc && sc->data[SC_WARM]) { + sc->data[SC_WARM]->val4 = 0; + status_change_end(src, SC_WARM, INVALID_TIMER); + } + } + break; + case LG_BANDING: { + status_change *sc = status_get_sc(src); + + if (sc && sc->data[SC_BANDING]) { + sc->data[SC_BANDING]->val4 = 0; + status_change_end(src, SC_BANDING, INVALID_TIMER); } } break; @@ -22118,12 +21900,11 @@ void skill_toggle_magicpower(struct block_list *bl, uint16 skill_id) status_change_end(bl, SC_MAGICPOWER, INVALID_TIMER); } else { sc->data[SC_MAGICPOWER]->val4 = 1; - status_calc_bl(bl, status_sc2scb_flag(SC_MAGICPOWER)); + status_calc_bl(bl, status_db.getCalcFlag(SC_MAGICPOWER)); if(bl->type == BL_PC){// update current display. clif_updatestatus(((TBL_PC *)bl),SP_MATK1); clif_updatestatus(((TBL_PC *)bl),SP_MATK2); } - } } } @@ -23138,6 +22919,10 @@ int skill_block_check(struct block_list *bl, sc_type type , uint16 skill_id) { */ int skill_disable_check(struct status_change *sc, uint16 skill_id) { + enum sc_type type = skill_get_sc(skill_id); + + if (type <= SC_NONE || type >= SC_MAX) + return 0; switch( skill_id ) { //HP & SP Consumption Check case BS_MAXIMIZE: case NV_TRICKDEAD: @@ -23168,11 +22953,11 @@ int skill_disable_check(struct status_change *sc, uint16 skill_id) case SP_SOULCOLLECT: case IG_GUARD_STANCE: case IG_ATTACK_STANCE: - if( sc->data[status_skill2sc(skill_id)] ) + if( sc->data[type] ) return 1; break; - // These 2 skills contain a master and are not correctly pulled using skill2sc + // These 2 skills contain a master and are not correctly pulled using skill_get_sc case NC_NEUTRALBARRIER: if( sc->data[SC_NEUTRALBARRIER_MASTER] ) return 1; @@ -24226,6 +24011,31 @@ uint64 SkillDatabase::parseBodyNode(const YAML::Node &node) { } } + if (this->nodeExists(node, "Status")) { + std::string status; + + if (!this->asString(node, "Status", status)) + return 0; + + std::string status_constant = "SC_" + status; + int64 constant; + + if (!script_get_constant(status_constant.c_str(), &constant)) { + this->invalidWarning(node["Status"], "Status %s is invalid.\n", status.c_str()); + return 0; + } + + if (constant < SC_NONE || constant >= SC_MAX) { + this->invalidWarning(node["Status"], "Status %s is unknown. Defaulting to SC_NONE.\n", status.c_str()); + constant = SC_NONE; + } + + skill->sc = static_cast(constant); + } else { + if (!exists) + skill->sc = SC_NONE; + } + if (!exists) { this->put(skill_id, skill); this->skilldb_id2idx[skill_id] = this->skill_num; @@ -24722,15 +24532,8 @@ static bool skill_parse_row_skilldamage(char* split[], int columns, int current) return true; } -/*=============================== - * DB reading. - * skill_db.yml - * skill_nocast_db.txt - * produce_db.txt - * create_arrow_db.txt - *------------------------------*/ -static void skill_readdb(void) -{ +/** Reads skill database files */ +static void skill_readdb(void) { int i; const char* dbsubpath[] = { "", @@ -24757,6 +24560,7 @@ static void skill_readdb(void) safesnprintf(dbsubpath1,n1,"%s%s",db_path,dbsubpath[i]); safesnprintf(dbsubpath2,n1,"%s%s",db_path,dbsubpath[i]); } + sv_readdb(dbsubpath2, "skill_nocast_db.txt" , ',', 2, 2, -1, skill_parse_row_nocastdb, i > 0); sv_readdb(dbsubpath2, "produce_db.txt" , ',', 5, 5+2*MAX_PRODUCE_RESOURCE, MAX_SKILL_PRODUCE_DB, skill_parse_row_producedb, i > 0); @@ -24784,7 +24588,6 @@ void skill_reload (void) { skill_arrow_db.clear(); skill_readdb(); - initChangeTables(); // Re-init Status Change tables /* lets update all players skill tree : so that if any skill modes were changed they're properly updated */ s_mapiterator *iter = mapit_getallusers(); diff --git a/src/map/skill.hpp b/src/map/skill.hpp index a8f94af15c..27316cbc56 100644 --- a/src/map/skill.hpp +++ b/src/map/skill.hpp @@ -306,6 +306,7 @@ struct s_skill_db { int32 abra_probability[MAX_SKILL_LEVEL]; s_skill_spellbook reading_spellbook; uint16 improvisedsong_rate; + sc_type sc; ///< Default SC for skill }; class SkillDatabase : public TypesafeCachedYamlDatabase { @@ -2634,6 +2635,7 @@ int skill_is_combo(uint16 skill_id); void skill_combo_toggle_inf(struct block_list* bl, uint16 skill_id, int inf); void skill_combo(struct block_list* src,struct block_list *dsrc, struct block_list *bl, uint16 skill_id, uint16 skill_lv, t_tick tick); +enum sc_type skill_get_sc(int16 skill_id); void skill_reveal_trap_inarea(struct block_list *src, int range, int x, int y); int skill_get_time3(struct map_data *mapdata, uint16 skill_id, uint16 skill_lv); diff --git a/src/map/status.cpp b/src/map/status.cpp index a17edf0ae2..5dc1b3ad5c 100644 --- a/src/map/status.cpp +++ b/src/map/status.cpp @@ -57,15 +57,7 @@ int current_equip_card_id; /// To prevent card-stacking (from jA) [Skotlex] // We need it for new cards 15 Feb 2005, to check if the combo cards are insrerted into the CURRENT weapon only to avoid cards exploits short current_equip_opt_index; /// Contains random option index of an equipped item. [Secret] -unsigned int SCDisabled[SC_MAX]; ///< List of disabled SC on map zones. [Cydh] - -sc_type SkillStatusChangeTable[MAX_SKILL]; -int StatusIconChangeTable[SC_MAX]; -uint64 StatusChangeFlagTable[SC_MAX]; -int StatusSkillChangeTable[SC_MAX]; -int StatusRelevantBLTypes[EFST_MAX]; -unsigned int StatusChangeStateTable[SC_MAX]; -unsigned int StatusDisplayType[SC_MAX]; +uint16 SCDisabled[SC_MAX]; ///< List of disabled SC on map zones. [Cydh] static unsigned short status_calc_str(struct block_list *,struct status_change *,int); static unsigned short status_calc_agi(struct block_list *,struct status_change *,int); @@ -551,18 +543,47 @@ uint64 SizeFixDatabase::parseBodyNode(const YAML::Node &node) { SizeFixDatabase size_fix_db; /** - * Returns the status change associated with a skill. - * @param skill The skill to look up - * @return The status registered for this skill - */ -sc_type status_skill2sc(int skill) -{ - int idx = skill_get_index(skill); - if( idx == 0 ) { - ShowError("status_skill2sc: Unsupported skill id %d\n", skill); - return SC_NONE; - } - return SkillStatusChangeTable[idx]; + * Get icon ID of SC + * @param type: SC type + * @return EFST ID + **/ +efst_type StatusDatabase::getIcon(sc_type type) { + std::shared_ptr status = status_db.find(type); + + return status ? status->icon : EFST_BLANK; +} + +/** + * Get flag of SC (SCB value) for status_calc_ flag + * @param type: SC type + * @return cal_flag: Calc value + **/ +uint64 StatusDatabase::getCalcFlag(sc_type type) { + std::shared_ptr status = status_db.find(type); + + return status ? status->calc_flag : SCB_NONE; +} + +/** + * Get SC's END list + * @param sc: SC type + * @return End list + **/ +std::vector StatusDatabase::getEnd(sc_type type) { + std::shared_ptr status = status_db.find(type); + + return status ? status->end : std::vector {}; +} + +/** + * Get BL type to display proper effect + * @param efst: EFST type + * @return BL types + **/ +uint16 status_efst_get_bl_type(enum efst_type efst) { + if (efst <= EFST_BLANK || efst >= EFST_MAX) + return BL_PC; + return status_db.StatusRelevantBLTypes[efst]; } /** @@ -570,1784 +591,96 @@ sc_type status_skill2sc(int skill) * Utilized for various duration lookups. Use with caution! * @param sc The status to look up * @return A skill associated with the status - */ -int status_sc2skill(sc_type sc) -{ - if( sc < 0 || sc >= SC_MAX ) { - ShowError("status_sc2skill: Unsupported status change id %d\n", sc); - return 0; - } + **/ +uint16 StatusDatabase::getSkill(sc_type type) { + std::shared_ptr status = status_db.find(type); - return StatusSkillChangeTable[sc]; + return status ? status->skill_id : 0; } /** - * Returns the status calculation flag associated with a given status change. - * @param sc The status to look up - * @return The scb_flag registered for this status (see enum scb_flag) + * Returns if a status change flag is active or not for a SC. + * @param sc: Status changes active on target + * @param flag: Flag to check for + * @return True if flag is set or false otherwise */ -uint64 status_sc2scb_flag(sc_type sc) -{ - if( sc < 0 || sc >= SC_MAX ) { - ShowError("status_sc2scb_flag: Unsupported status change id %d\n", sc); - return SCB_NONE; +bool StatusDatabase::hasSCF(status_change *sc, e_status_change_flag flag) { + if (sc == nullptr || sc->count == 0 || flag == SCF_NONE) + return false; + + for (const auto &status_it : *this) { + std::shared_ptr status = status_it.second; + + if (sc->data[status->type] && status->flag[flag]) + return true; } - return StatusChangeFlagTable[sc]; + return false; } /** - * Returns the bl types which require a status change packet to be sent for a given client status identifier. - * @param type The client-side status identifier to look up (see enum efst_types) - * @return The bl types relevant to the type (see enum bl_type) + * Removes statuses from skills that aren't part of the new class skill tree. + * @param sd: Player data */ -int status_type2relevant_bl_types(int type) -{ - if( type < EFST_BLANK || type >= EFST_MAX ) { - ShowError("status_type2relevant_bl_types: Unsupported type %d\n", type); - return EFST_BLANK; - } - - return StatusRelevantBLTypes[type]; -} - -#define add_sc(skill,sc) set_sc(skill,sc,EFST_BLANK,SCB_NONE) -// Indicates that the status displays a visual effect for the affected unit, and should be sent to the client for all supported units -#define set_sc_with_vfx(skill, sc, icon, flag) set_sc((skill), (sc), (icon), (flag)); if((icon) < EFST_MAX) StatusRelevantBLTypes[(icon)] |= BL_SCEFFECT - -static void set_sc(uint16 skill_id, sc_type sc, int icon, uint64 flag) -{ - uint16 idx = skill_get_index(skill_id); - if( idx == 0 ) { - ShowError("set_sc: Unsupported skill id %d (SC: %d. Icon: %d)\n", skill_id, sc, icon); +void StatusDatabase::changeSkillTree(map_session_data *sd, int32 class_) { + if (sd == nullptr) return; - } - if( sc <= SC_NONE || sc >= SC_MAX ) { - ShowError("set_sc: Unsupported status change id %d (Skill: %d. Icon: %d)\n", sc, skill_id, icon); + + std::shared_ptr tree = skill_tree_db.find(class_ > 0 ? class_ : sd->status.class_); + + if (tree == nullptr) return; + + for (const auto &it : tree->skills) { + uint16 skill_id = it.first; + sc_type sc = skill_get_sc(skill_id); + + if (sc > SC_COMMON_MAX && sd->sc.data[sc]) + status_change_end(&sd->bl, sc, INVALID_TIMER); } - - if( StatusSkillChangeTable[sc] == 0 ) - StatusSkillChangeTable[sc] = skill_id; - if( StatusIconChangeTable[sc] == EFST_BLANK ) - StatusIconChangeTable[sc] = icon; - StatusChangeFlagTable[sc] |= flag; - - if( SkillStatusChangeTable[idx] == SC_NONE ) - SkillStatusChangeTable[idx] = sc; } -static void set_sc_with_vfx_noskill(sc_type sc, int icon, uint64 flag) { - if (sc > SC_NONE && sc < SC_MAX) { - if (StatusIconChangeTable[sc] == EFST_BLANK) - StatusIconChangeTable[sc] = icon; - StatusChangeFlagTable[sc] |= flag; +/** + * Validates if type is in SC ranges + * @param type: SC type + * @return True if type is in range, false otherwise + */ +bool StatusDatabase::validateStatus(sc_type type) { + if (type > SC_NONE && type < SC_MAX) + return true; + + return false; +} + +/** + * Removes a status based on the provided flag(s). + * @param bl: Target to remove status from + * @param flag: List of flags to check for removing + */ +void StatusDatabase::removeByStatusFlag(block_list *bl, std::vector flag) { + if (bl == nullptr || flag.empty()) + return; + + status_change *sc = status_get_sc(bl); + + if (sc == nullptr || sc->count == 0) + return; + + for (const auto &status_it : *this) { + std::shared_ptr status = status_it.second; + sc_type type = status->type; + + if (sc->data[type]) { + for (const auto &flag_it : flag) { + if (status->flag[flag_it]) + status_change_end(bl, type, INVALID_TIMER); + } + } } - if (icon > EFST_BLANK && icon < EFST_MAX) - StatusRelevantBLTypes[icon] |= BL_SCEFFECT; } -void initChangeTables(void) -{ - int i; - - for (i = 0; i < SC_MAX; i++) - StatusIconChangeTable[i] = EFST_BLANK; - - for (i = 0; i < MAX_SKILL; i++) - SkillStatusChangeTable[i] = SC_NONE; - - for (i = 0; i < EFST_MAX; i++) - StatusRelevantBLTypes[i] = BL_PC; - - memset(StatusSkillChangeTable, 0, sizeof(StatusSkillChangeTable)); - memset(StatusChangeFlagTable, 0, sizeof(StatusChangeFlagTable)); - memset(StatusChangeStateTable, 0, sizeof(StatusChangeStateTable)); - memset(StatusDisplayType, 0, sizeof(StatusDisplayType)); - memset(SCDisabled, 0, sizeof(SCDisabled)); - - /* First we define the skill for common ailments. These are used in skill_additional_effect through sc cards. [Skotlex] */ - set_sc( NPC_PETRIFYATTACK , SC_STONE , EFST_BLANK , SCB_DEF_ELE|SCB_DEF|SCB_MDEF ); - set_sc( NPC_WIDEFREEZE , SC_FREEZE , EFST_BLANK , SCB_DEF_ELE|SCB_DEF|SCB_MDEF ); - add_sc( NPC_STUNATTACK , SC_STUN ); - add_sc( NPC_SLEEPATTACK , SC_SLEEP ); - set_sc( NPC_POISON , SC_POISON , EFST_BLANK , SCB_DEF2|SCB_REGEN ); - set_sc( NPC_WIDECURSE , SC_CURSE , EFST_BLANK , SCB_LUK|SCB_BATK|SCB_WATK|SCB_SPEED ); - add_sc( NPC_SILENCEATTACK , SC_SILENCE ); - add_sc( NPC_WIDECONFUSE , SC_CONFUSION ); - set_sc( NPC_BLINDATTACK , SC_BLIND , EFST_BLANK , SCB_HIT|SCB_FLEE ); - set_sc( NPC_BLEEDING , SC_BLEEDING , EFST_BLOODING, SCB_REGEN ); - set_sc( NPC_POISON , SC_DPOISON , EFST_BLANK , SCB_DEF2|SCB_REGEN ); - add_sc( ALL_REVERSEORCISH, SC_ORCISH ); - - /* The main status definitions */ - add_sc( SM_BASH , SC_STUN ); - set_sc( SM_PROVOKE , SC_PROVOKE , EFST_PROVOKE , SCB_DEF|SCB_DEF2|SCB_BATK|SCB_WATK ); - add_sc( SM_MAGNUM , SC_WATK_ELEMENT ); - set_sc( SM_ENDURE , SC_ENDURE , EFST_ENDURE , SCB_MDEF|SCB_DSPD ); - add_sc( MG_SIGHT , SC_SIGHT ); - add_sc( MG_SAFETYWALL , SC_SAFETYWALL ); - add_sc( MG_FROSTDIVER , SC_FREEZE ); - add_sc( MG_STONECURSE , SC_STONE ); - add_sc( AL_RUWACH , SC_RUWACH ); - add_sc( AL_PNEUMA , SC_PNEUMA ); - set_sc( AL_INCAGI , SC_INCREASEAGI , EFST_INC_AGI, SCB_AGI|SCB_SPEED -#ifdef RENEWAL - |SCB_ASPD ); -#else - ); -#endif - set_sc( AL_DECAGI , SC_DECREASEAGI , EFST_DEC_AGI, SCB_AGI|SCB_SPEED ); - set_sc( AL_CRUCIS , SC_SIGNUMCRUCIS , EFST_CRUCIS, SCB_DEF ); - set_sc( AL_ANGELUS , SC_ANGELUS , EFST_ANGELUS , SCB_DEF2 -#ifdef RENEWAL - |SCB_MAXHP ); -#else - ); -#endif - set_sc( AL_BLESSING , SC_BLESSING , EFST_BLESSING , SCB_STR|SCB_INT|SCB_DEX -#ifdef RENEWAL - |SCB_HIT ); -#else - ); -#endif - set_sc( AC_CONCENTRATION , SC_CONCENTRATE , EFST_CONCENTRATION, SCB_AGI|SCB_DEX ); - set_sc( TF_HIDING , SC_HIDING , EFST_HIDING , SCB_SPEED ); - add_sc( TF_POISON , SC_POISON ); - set_sc( KN_TWOHANDQUICKEN , SC_TWOHANDQUICKEN , EFST_TWOHANDQUICKEN , SCB_ASPD -#ifdef RENEWAL - |SCB_HIT|SCB_CRI ); -#else - ); -#endif - set_sc( KN_AUTOCOUNTER , SC_AUTOCOUNTER , EFST_AUTOCOUNTER , SCB_NONE ); - set_sc( PR_IMPOSITIO , SC_IMPOSITIO , EFST_IMPOSITIO , SCB_WATK -#ifdef RENEWAL - |SCB_MATK ); -#else - ); -#endif - set_sc( PR_SUFFRAGIUM , SC_SUFFRAGIUM , EFST_SUFFRAGIUM , SCB_NONE ); - set_sc( PR_ASPERSIO , SC_ASPERSIO , EFST_ASPERSIO , SCB_ATK_ELE ); - set_sc( PR_BENEDICTIO , SC_BENEDICTIO , EFST_BENEDICTIO , SCB_DEF_ELE ); - set_sc( PR_SLOWPOISON , SC_SLOWPOISON , EFST_SLOWPOISON , SCB_REGEN ); - set_sc( PR_KYRIE , SC_KYRIE , EFST_KYRIE , SCB_NONE ); - set_sc( PR_MAGNIFICAT , SC_MAGNIFICAT , EFST_MAGNIFICAT , SCB_REGEN ); - set_sc( PR_GLORIA , SC_GLORIA , EFST_GLORIA , SCB_LUK ); - add_sc( PR_STRECOVERY , SC_BLIND ); - add_sc( PR_LEXDIVINA , SC_SILENCE ); - set_sc( PR_LEXAETERNA , SC_AETERNA , EFST_LEXAETERNA, SCB_NONE ); - add_sc( WZ_METEOR , SC_STUN ); - add_sc( WZ_VERMILION , SC_BLIND ); - add_sc( WZ_FROSTNOVA , SC_FREEZE ); - add_sc( WZ_STORMGUST , SC_FREEZE ); - set_sc( WZ_QUAGMIRE , SC_QUAGMIRE , EFST_QUAGMIRE , SCB_AGI|SCB_DEX|SCB_ASPD|SCB_SPEED ); - add_sc( BS_HAMMERFALL , SC_STUN ); - set_sc( BS_ADRENALINE , SC_ADRENALINE , EFST_ADRENALINE , SCB_ASPD -#ifdef RENEWAL - |SCB_HIT ); -#else - ); -#endif - set_sc( BS_WEAPONPERFECT , SC_WEAPONPERFECTION , EFST_WEAPONPERFECT, SCB_NONE ); - set_sc( BS_OVERTHRUST , SC_OVERTHRUST , EFST_OVERTHRUST , SCB_NONE ); - set_sc( BS_MAXIMIZE , SC_MAXIMIZEPOWER , EFST_MAXIMIZE, SCB_REGEN ); - add_sc( HT_LANDMINE , SC_STUN ); - set_sc( HT_ANKLESNARE , SC_ANKLE , EFST_ANKLESNARE , SCB_NONE ); - add_sc( HT_SANDMAN , SC_SLEEP ); - add_sc( HT_FLASHER , SC_BLIND ); - add_sc( HT_FREEZINGTRAP , SC_FREEZE ); - set_sc( AS_CLOAKING , SC_CLOAKING , EFST_CLOAKING , SCB_CRI|SCB_SPEED ); - add_sc( AS_SONICBLOW , SC_STUN ); - set_sc( AS_ENCHANTPOISON , SC_ENCPOISON , EFST_ENCHANTPOISON, SCB_ATK_ELE ); - set_sc( AS_POISONREACT , SC_POISONREACT , EFST_POISONREACT , SCB_NONE ); - add_sc( AS_VENOMDUST , SC_POISON ); - set_sc( AS_SPLASHER , SC_SPLASHER , EFST_SPLASHER , SCB_NONE ); - set_sc( NV_TRICKDEAD , SC_TRICKDEAD , EFST_TRICKDEAD , SCB_REGEN ); - set_sc( SM_AUTOBERSERK , SC_AUTOBERSERK , EFST_AUTOBERSERK , SCB_NONE ); - add_sc( TF_SPRINKLESAND , SC_BLIND ); - add_sc( TF_THROWSTONE , SC_STUN ); - set_sc( MC_LOUD , SC_LOUD , EFST_SHOUT, SCB_STR -#ifdef RENEWAL - |SCB_BATK ); -#else - ); -#endif - set_sc( MG_ENERGYCOAT , SC_ENERGYCOAT , EFST_ENERGYCOAT , SCB_NONE ); - set_sc( NPC_EMOTION , SC_MODECHANGE , EFST_BLANK , SCB_MODE ); - add_sc( NPC_EMOTION_ON , SC_MODECHANGE ); - set_sc( NPC_ATTRICHANGE , SC_ELEMENTALCHANGE , EFST_ARMOR_PROPERTY , SCB_DEF_ELE ); - add_sc( NPC_CHANGEWATER , SC_ELEMENTALCHANGE ); - add_sc( NPC_CHANGEGROUND , SC_ELEMENTALCHANGE ); - add_sc( NPC_CHANGEFIRE , SC_ELEMENTALCHANGE ); - add_sc( NPC_CHANGEWIND , SC_ELEMENTALCHANGE ); - add_sc( NPC_CHANGEPOISON , SC_ELEMENTALCHANGE ); - add_sc( NPC_CHANGEHOLY , SC_ELEMENTALCHANGE ); - add_sc( NPC_CHANGEDARKNESS , SC_ELEMENTALCHANGE ); - add_sc( NPC_CHANGETELEKINESIS , SC_ELEMENTALCHANGE ); - add_sc( NPC_POISON , SC_POISON ); - add_sc( NPC_BLINDATTACK , SC_BLIND ); - add_sc( NPC_SILENCEATTACK , SC_SILENCE ); - add_sc( NPC_STUNATTACK , SC_STUN ); - add_sc( NPC_PETRIFYATTACK , SC_STONE ); - add_sc( NPC_CURSEATTACK , SC_CURSE ); - add_sc( NPC_SLEEPATTACK , SC_SLEEP ); - add_sc( NPC_MAGICALATTACK , SC_MAGICALATTACK ); - set_sc( NPC_KEEPING , SC_KEEPING , EFST_BLANK , SCB_DEF ); - add_sc( NPC_DARKBLESSING , SC_COMA ); - set_sc( NPC_BARRIER , SC_BARRIER , EFST_BARRIER , SCB_MDEF|SCB_DEF ); - add_sc( NPC_DEFENDER , SC_ARMOR ); - add_sc( NPC_LICK , SC_STUN ); - set_sc( NPC_HALLUCINATION , SC_HALLUCINATION , EFST_ILLUSION, SCB_NONE ); - add_sc( NPC_REBIRTH , SC_REBIRTH ); - add_sc( RG_RAID , SC_STUN ); -#ifdef RENEWAL - add_sc( RG_RAID , SC_RAID ); - add_sc( RG_BACKSTAP , SC_STUN ); -#endif - set_sc( RG_STRIPWEAPON , SC_STRIPWEAPON , EFST_NOEQUIPWEAPON, SCB_WATK ); - set_sc( RG_STRIPSHIELD , SC_STRIPSHIELD , EFST_NOEQUIPSHIELD, SCB_DEF ); - set_sc( RG_STRIPARMOR , SC_STRIPARMOR , EFST_NOEQUIPARMOR, SCB_VIT ); - set_sc( RG_STRIPHELM , SC_STRIPHELM , EFST_NOEQUIPHELM, SCB_INT ); - add_sc( AM_ACIDTERROR , SC_BLEEDING ); - set_sc( AM_CP_WEAPON , SC_CP_WEAPON , EFST_PROTECTWEAPON, SCB_NONE ); - set_sc( AM_CP_SHIELD , SC_CP_SHIELD , EFST_PROTECTSHIELD, SCB_NONE ); - set_sc( AM_CP_ARMOR , SC_CP_ARMOR , EFST_PROTECTARMOR, SCB_NONE ); - set_sc( AM_CP_HELM , SC_CP_HELM , EFST_PROTECTHELM, SCB_NONE ); -#ifdef RENEWAL - set_sc( AM_CALLHOMUN , SC_HOMUN_TIME , EFST_HOMUN_TIME, SCB_NONE ); -#endif - set_sc( CR_AUTOGUARD , SC_AUTOGUARD , EFST_AUTOGUARD , SCB_NONE ); - add_sc( CR_SHIELDCHARGE , SC_STUN ); - set_sc( CR_REFLECTSHIELD , SC_REFLECTSHIELD , EFST_REFLECTSHIELD , SCB_NONE ); - add_sc( CR_HOLYCROSS , SC_BLIND ); - add_sc( CR_GRANDCROSS , SC_BLIND ); - set_sc( CR_DEVOTION , SC_DEVOTION , EFST_DEVOTION , SCB_NONE); - set_sc( CR_PROVIDENCE , SC_PROVIDENCE , EFST_PROVIDENCE , SCB_ALL ); - set_sc( CR_DEFENDER , SC_DEFENDER , EFST_DEFENDER , SCB_SPEED|SCB_ASPD ); - set_sc( CR_SPEARQUICKEN , SC_SPEARQUICKEN , EFST_SPEARQUICKEN , SCB_ASPD|SCB_CRI|SCB_FLEE ); - set_sc( MO_STEELBODY , SC_STEELBODY , EFST_STEELBODY , SCB_DEF|SCB_MDEF|SCB_ASPD|SCB_SPEED ); - add_sc( MO_BLADESTOP , SC_BLADESTOP_WAIT ); - set_sc( MO_BLADESTOP , SC_BLADESTOP , EFST_BLADESTOP , SCB_NONE ); - set_sc( MO_EXPLOSIONSPIRITS , SC_EXPLOSIONSPIRITS , EFST_EXPLOSIONSPIRITS , SCB_CRI|SCB_REGEN ); - set_sc( MO_EXTREMITYFIST , SC_EXTREMITYFIST , EFST_BLANK , SCB_REGEN ); -#ifdef RENEWAL - set_sc( MO_EXTREMITYFIST , SC_EXTREMITYFIST2 , EFST_EXTREMITYFIST , SCB_NONE ); -#endif - set_sc( SA_MAGICROD , SC_MAGICROD , EFST_MAGICROD , SCB_NONE ); - set_sc( SA_AUTOSPELL , SC_AUTOSPELL , EFST_AUTOSPELL , SCB_NONE ); - set_sc( SA_FLAMELAUNCHER , SC_FIREWEAPON , EFST_PROPERTYFIRE, -#ifndef RENEWAL - SCB_ATK_ELE ); -#else - SCB_ALL ); -#endif - set_sc( SA_FROSTWEAPON , SC_WATERWEAPON , EFST_PROPERTYWATER, -#ifndef RENEWAL - SCB_ATK_ELE); -#else - SCB_ALL); -#endif - set_sc( SA_LIGHTNINGLOADER , SC_WINDWEAPON , EFST_PROPERTYWIND, -#ifndef RENEWAL - SCB_ATK_ELE); -#else - SCB_ALL); -#endif - set_sc( SA_SEISMICWEAPON , SC_EARTHWEAPON , EFST_PROPERTYGROUND, -#ifndef RENEWAL - SCB_ATK_ELE); -#else - SCB_ALL ); -#endif - set_sc( SA_VOLCANO , SC_VOLCANO , EFST_GROUNDMAGIC, SCB_WATK -#ifdef RENEWAL - |SCB_MATK ); -#else - ); -#endif - set_sc( SA_DELUGE , SC_DELUGE , EFST_GROUNDMAGIC, SCB_MAXHP ); - set_sc( SA_VIOLENTGALE , SC_VIOLENTGALE , EFST_GROUNDMAGIC, SCB_FLEE ); - add_sc( SA_REVERSEORCISH , SC_ORCISH ); - add_sc( SA_COMA , SC_COMA ); -#ifdef RENEWAL - set_sc( BD_ADAPTATION , SC_ADAPTATION , EFST_ADAPTATION, SCB_NONE ); -#endif - set_sc( BD_ENCORE , SC_DANCING , EFST_BDPLAYING , SCB_SPEED|SCB_REGEN ); - set_sc( BD_RICHMANKIM , SC_RICHMANKIM , EFST_RICHMANKIM , SCB_NONE ); - set_sc( BD_ETERNALCHAOS , SC_ETERNALCHAOS , EFST_ETERNALCHAOS , SCB_DEF2 ); - set_sc( BD_DRUMBATTLEFIELD , SC_DRUMBATTLE , EFST_DRUMBATTLEFIELD , -#ifndef RENEWAL - SCB_WATK|SCB_DEF ); -#else - SCB_DEF ); -#endif - set_sc( BD_RINGNIBELUNGEN , SC_NIBELUNGEN , EFST_RINGNIBELUNGEN , -#ifndef RENEWAL - SCB_WATK ); -#else - SCB_ALL ); -#endif - set_sc( BD_ROKISWEIL , SC_ROKISWEIL , EFST_ROKISWEIL , SCB_NONE ); - set_sc( BD_INTOABYSS , SC_INTOABYSS , EFST_INTOABYSS , SCB_NONE ); - set_sc( BD_SIEGFRIED , SC_SIEGFRIED , EFST_SIEGFRIED , SCB_ALL ); - add_sc( BA_FROSTJOKER , SC_FREEZE ); - set_sc( BA_WHISTLE , SC_WHISTLE , EFST_WHISTLE , SCB_FLEE|SCB_FLEE2 ); - set_sc( BA_ASSASSINCROSS , SC_ASSNCROS , EFST_ASSASSINCROSS , SCB_ASPD ); - set_sc( BA_POEMBRAGI , SC_POEMBRAGI , EFST_POEMBRAGI , SCB_NONE ); - set_sc( BA_APPLEIDUN , SC_APPLEIDUN , EFST_APPLEIDUN , SCB_MAXHP ); - add_sc( DC_SCREAM , SC_STUN ); - set_sc( DC_HUMMING , SC_HUMMING , EFST_HUMMING , SCB_HIT ); - set_sc( DC_DONTFORGETME , SC_DONTFORGETME , EFST_DONTFORGETME , SCB_SPEED|SCB_ASPD ); - set_sc( DC_FORTUNEKISS , SC_FORTUNE , EFST_FORTUNEKISS , SCB_ALL ); - set_sc( DC_SERVICEFORYOU , SC_SERVICE4U , EFST_SERVICEFORYOU , SCB_ALL ); - add_sc( NPC_DARKCROSS , SC_BLIND ); - add_sc( NPC_GRANDDARKNESS , SC_BLIND ); - set_sc( NPC_STOP , SC_STOP , EFST_STOP , SCB_NONE ); - set_sc( NPC_WEAPONBRAKER , SC_BROKENWEAPON , EFST_BROKENWEAPON , SCB_NONE ); - set_sc( NPC_ARMORBRAKE , SC_BROKENARMOR , EFST_BROKENARMOR , SCB_NONE ); - set_sc( NPC_CHANGEUNDEAD , SC_CHANGEUNDEAD , EFST_PROPERTYUNDEAD, SCB_DEF_ELE ); - set_sc( NPC_POWERUP , SC_INCHITRATE , EFST_BLANK , SCB_HIT ); - set_sc( NPC_AGIUP , SC_INCFLEERATE , EFST_BLANK , SCB_FLEE ); - add_sc( NPC_INVISIBLE , SC_CLOAKING ); - set_sc( LK_AURABLADE , SC_AURABLADE , EFST_AURABLADE , SCB_NONE ); - set_sc( LK_PARRYING , SC_PARRYING , EFST_PARRYING , SCB_NONE ); - set_sc( LK_CONCENTRATION , SC_CONCENTRATION , EFST_LKCONCENTRATION , -#ifndef RENEWAL - SCB_BATK|SCB_WATK|SCB_HIT|SCB_DEF|SCB_DEF2 ); -#else - SCB_HIT|SCB_DEF ); -#endif - set_sc( LK_TENSIONRELAX , SC_TENSIONRELAX , EFST_TENSIONRELAX , SCB_REGEN ); - set_sc( LK_BERSERK , SC_BERSERK , EFST_BERSERK , SCB_DEF|SCB_DEF2|SCB_MDEF|SCB_MDEF2|SCB_FLEE|SCB_SPEED|SCB_ASPD|SCB_MAXHP|SCB_REGEN ); - set_sc( HP_ASSUMPTIO , SC_ASSUMPTIO , -#ifndef RENEWAL - EFST_ASSUMPTIO , SCB_NONE ); -#else - EFST_ASSUMPTIO_BUFF , SCB_DEF ); -#endif -#ifdef RENEWAL - set_sc( HP_BASILICA , SC_BASILICA , EFST_BASILICA_BUFF , SCB_ALL ); -#else - add_sc( HP_BASILICA , SC_BASILICA ); -#endif - set_sc( HW_MAGICPOWER , SC_MAGICPOWER , EFST_MAGICPOWER , SCB_MATK ); - add_sc( PA_SACRIFICE , SC_SACRIFICE ); - set_sc( PA_GOSPEL , SC_GOSPEL , EFST_GOSPEL , SCB_SPEED|SCB_ASPD ); - add_sc( PA_GOSPEL , SC_SCRESIST ); - add_sc( CH_TIGERFIST , SC_STOP ); - set_sc( ASC_EDP , SC_EDP , EFST_EDP , SCB_NONE ); - set_sc( SN_SIGHT , SC_TRUESIGHT , EFST_TRUESIGHT , SCB_STR|SCB_AGI|SCB_VIT|SCB_INT|SCB_DEX|SCB_LUK|SCB_CRI|SCB_HIT ); - set_sc( SN_WINDWALK , SC_WINDWALK , EFST_WINDWALK , SCB_FLEE|SCB_SPEED ); - set_sc( WS_MELTDOWN , SC_MELTDOWN , EFST_MELTDOWN , SCB_NONE ); - set_sc( WS_CARTBOOST , SC_CARTBOOST , EFST_CARTBOOST , SCB_SPEED ); - set_sc( ST_CHASEWALK , SC_CHASEWALK , EFST_CHASEWALK , SCB_SPEED ); - set_sc( ST_REJECTSWORD , SC_REJECTSWORD , EFST_SWORDREJECT, SCB_NONE ); - add_sc( ST_REJECTSWORD , SC_AUTOCOUNTER ); - set_sc( CG_MARIONETTE , SC_MARIONETTE , EFST_MARIONETTE_MASTER, SCB_STR|SCB_AGI|SCB_VIT|SCB_INT|SCB_DEX|SCB_LUK ); - set_sc( CG_MARIONETTE , SC_MARIONETTE2 , EFST_MARIONETTE, SCB_STR|SCB_AGI|SCB_VIT|SCB_INT|SCB_DEX|SCB_LUK ); - add_sc( LK_SPIRALPIERCE , SC_STOP ); - add_sc( LK_HEADCRUSH , SC_BLEEDING ); - set_sc( LK_JOINTBEAT , SC_JOINTBEAT , EFST_JOINTBEAT , SCB_BATK|SCB_DEF2|SCB_SPEED|SCB_ASPD ); - add_sc( HW_NAPALMVULCAN , SC_CURSE ); - set_sc( PF_MINDBREAKER , SC_MINDBREAKER , EFST_MINDBREAKER , SCB_MATK|SCB_MDEF2 ); - set_sc( PF_MEMORIZE , SC_MEMORIZE , EFST_MEMORIZE , SCB_NONE ); - set_sc( PF_FOGWALL , SC_FOGWALL , EFST_FOGWALL , SCB_NONE ); - set_sc( PF_SPIDERWEB , SC_SPIDERWEB , EFST_SPIDERWEB , SCB_FLEE ); - set_sc( WE_BABY , SC_BABY , EFST_PROTECTEXP, SCB_NONE ); - set_sc( TK_RUN , SC_RUN , EFST_RUN , SCB_SPEED|SCB_DSPD ); - set_sc( TK_RUN , SC_SPURT , EFST_STRUP, SCB_STR ); - set_sc( TK_READYSTORM , SC_READYSTORM , EFST_STORMKICK_ON, SCB_NONE ); - set_sc( TK_READYDOWN , SC_READYDOWN , EFST_DOWNKICK_ON, SCB_NONE ); - add_sc( TK_DOWNKICK , SC_STUN ); - set_sc( TK_READYTURN , SC_READYTURN , EFST_TURNKICK_ON, SCB_NONE ); - set_sc( TK_READYCOUNTER , SC_READYCOUNTER , EFST_COUNTER_ON, SCB_NONE ); - set_sc( TK_DODGE , SC_DODGE , EFST_DODGE_ON, SCB_NONE ); - set_sc( TK_SPTIME , SC_EARTHSCROLL , EFST_EARTHSCROLL , SCB_NONE ); - add_sc( TK_SEVENWIND , SC_SEVENWIND ); - set_sc( TK_SEVENWIND , SC_GHOSTWEAPON , EFST_PROPERTYTELEKINESIS, SCB_ATK_ELE ); - set_sc( TK_SEVENWIND , SC_SHADOWWEAPON , EFST_PROPERTYDARK, SCB_ATK_ELE ); - set_sc( SG_SUN_WARM , SC_WARM , EFST_SG_SUN_WARM, SCB_NONE ); - set_sc( SG_MOON_WARM , SC_WARM, EFST_SG_MOON_WARM, SCB_NONE); - set_sc( SG_STAR_WARM , SC_WARM, EFST_SG_STAR_WARM, SCB_NONE); - set_sc( SG_SUN_COMFORT , SC_SUN_COMFORT , EFST_SUN_COMFORT , SCB_DEF2 ); - set_sc( SG_MOON_COMFORT , SC_MOON_COMFORT , EFST_MOON_COMFORT , SCB_FLEE ); - set_sc( SG_STAR_COMFORT , SC_STAR_COMFORT , EFST_STAR_COMFORT , SCB_ASPD ); - add_sc( SG_FRIEND , SC_SKILLRATE_UP ); - set_sc( SG_KNOWLEDGE , SC_KNOWLEDGE , EFST_BLANK , SCB_ALL ); - set_sc( SG_FUSION , SC_FUSION , EFST_BLANK , SCB_SPEED ); - set_sc( BS_ADRENALINE2 , SC_ADRENALINE2 , EFST_ADRENALINE2 , SCB_ASPD ); - set_sc( SL_KAIZEL , SC_KAIZEL , EFST_KAIZEL , SCB_NONE ); - set_sc( SL_KAAHI , SC_KAAHI , EFST_KAAHI , SCB_NONE ); - set_sc( SL_KAUPE , SC_KAUPE , EFST_KAUPE , SCB_NONE ); - set_sc( SL_KAITE , SC_KAITE , EFST_KAITE , SCB_NONE ); - add_sc( SL_STUN , SC_STUN ); - set_sc( SL_SWOO , SC_SWOO , EFST_SWOO , SCB_SPEED ); - set_sc( SL_SKE , SC_SKE , EFST_BLANK , SCB_BATK|SCB_WATK|SCB_DEF|SCB_DEF2 ); - set_sc( SL_SKA , SC_SKA , EFST_BLANK , SCB_DEF2|SCB_MDEF2|SCB_SPEED|SCB_ASPD ); - set_sc( SL_SMA , SC_SMA , EFST_SMA_READY, SCB_NONE ); - set_sc( SM_SELFPROVOKE , SC_PROVOKE , EFST_PROVOKE , SCB_DEF|SCB_DEF2|SCB_BATK|SCB_WATK ); - set_sc( ST_PRESERVE , SC_PRESERVE , EFST_PRESERVE , SCB_NONE ); - set_sc( PF_DOUBLECASTING , SC_DOUBLECAST , EFST_DOUBLECASTING, SCB_NONE ); -#ifndef RENEWAL - set_sc( HW_GRAVITATION , SC_GRAVITATION , EFST_GRAVITATION , SCB_ASPD ); -#endif - add_sc( WS_CARTTERMINATION , SC_STUN ); - set_sc( WS_OVERTHRUSTMAX , SC_MAXOVERTHRUST , EFST_OVERTHRUSTMAX, SCB_NONE ); -#ifndef RENEWAL - set_sc( CG_LONGINGFREEDOM , SC_LONGING , EFST_LONGING , SCB_SPEED|SCB_ASPD ); -#endif - set_sc( CG_HERMODE , SC_HERMODE , EFST_HERMODE , SCB_NONE ); - set_sc( CG_TAROTCARD , SC_TAROTCARD , EFST_TAROTCARD, SCB_NONE ); - set_sc( ITEM_ENCHANTARMS , SC_ENCHANTARMS , EFST_WEAPONPROPERTY, SCB_ATK_ELE ); - set_sc( SL_HIGH , SC_SPIRIT , EFST_SOULLINK, SCB_ALL ); - set_sc( KN_ONEHAND , SC_ONEHAND , EFST_ONEHANDQUICKEN, SCB_ASPD ); - set_sc( GS_FLING , SC_FLING , EFST_BLANK , SCB_DEF|SCB_DEF2 ); - add_sc( GS_CRACKER , SC_STUN ); - add_sc( GS_DISARM , SC_STRIPWEAPON ); - add_sc( GS_PIERCINGSHOT , SC_BLEEDING ); - set_sc( GS_MADNESSCANCEL , SC_MADNESSCANCEL , EFST_GS_MADNESSCANCEL, -#ifndef RENEWAL - SCB_BATK|SCB_ASPD ); -#else - SCB_ASPD ); -#endif - set_sc( GS_ADJUSTMENT , SC_ADJUSTMENT , EFST_GS_ADJUSTMENT, SCB_HIT|SCB_FLEE ); - set_sc( GS_INCREASING , SC_INCREASING , EFST_GS_ACCURACY , SCB_AGI|SCB_DEX|SCB_HIT ); -#ifdef RENEWAL - set_sc( GS_MAGICALBULLET , SC_MAGICALBULLET , EFST_GS_MAGICAL_BULLET , SCB_NONE ); -#endif - set_sc( GS_GATLINGFEVER , SC_GATLINGFEVER , EFST_GS_GATLINGFEVER, SCB_FLEE|SCB_SPEED|SCB_ASPD -#ifndef RENEWAL - |SCB_BATK ); -#else - ); -#endif - add_sc( NJ_TATAMIGAESHI , SC_TATAMIGAESHI ); - set_sc( NJ_SUITON , SC_SUITON , EFST_BLANK , SCB_AGI|SCB_SPEED ); - add_sc( NJ_HYOUSYOURAKU , SC_FREEZE ); - set_sc( NJ_NEN , SC_NEN , EFST_NJ_NEN, SCB_STR|SCB_INT ); - set_sc( NJ_UTSUSEMI , SC_UTSUSEMI , EFST_NJ_UTSUSEMI, SCB_NONE ); - set_sc( NJ_BUNSINJYUTSU , SC_BUNSINJYUTSU , EFST_NJ_BUNSINJYUTSU, SCB_DYE ); - - add_sc( NPC_ICEBREATH , SC_FREEZE ); - add_sc( NPC_ACIDBREATH , SC_POISON ); - add_sc( NPC_HELLJUDGEMENT , SC_CURSE ); - add_sc( NPC_WIDESILENCE , SC_SILENCE ); - add_sc( NPC_WIDEFREEZE , SC_FREEZE ); - add_sc( NPC_WIDEBLEEDING , SC_BLEEDING ); - add_sc( NPC_WIDESTONE , SC_STONE ); - add_sc( NPC_WIDECONFUSE , SC_CONFUSION ); - add_sc( NPC_WIDESLEEP , SC_SLEEP ); - add_sc( NPC_WIDESIGHT , SC_SIGHT ); - add_sc( NPC_EVILLAND , SC_BLIND ); - add_sc( NPC_MAGICMIRROR , SC_MAGICMIRROR ); - set_sc( NPC_SLOWCAST , SC_SLOWCAST , EFST_SLOWCAST , SCB_NONE ); - set_sc( NPC_CRITICALWOUND , SC_CRITICALWOUND , EFST_CRITICALWOUND , SCB_NONE ); - set_sc( NPC_STONESKIN , SC_ARMORCHANGE , EFST_BLANK , SCB_NONE ); - add_sc( NPC_ANTIMAGIC , SC_ARMORCHANGE ); - add_sc( NPC_WIDECURSE , SC_CURSE ); - add_sc( NPC_WIDESTUN , SC_STUN ); - - set_sc( NPC_HELLPOWER , SC_HELLPOWER , EFST_HELLPOWER , SCB_NONE ); - set_sc( NPC_WIDEHELLDIGNITY , SC_HELLPOWER , EFST_HELLPOWER , SCB_NONE ); - set_sc( NPC_INVINCIBLE , SC_INVINCIBLE , EFST_INVINCIBLE , SCB_SPEED ); - set_sc( NPC_INVINCIBLEOFF , SC_INVINCIBLEOFF , EFST_BLANK , SCB_SPEED ); - add_sc( NPC_MILLENNIUMSHIELD , SC_MILLENNIUMSHIELD ); - set_sc( NPC_COMET , SC_BURNING , EFST_BURNT , SCB_MDEF ); - set_sc_with_vfx( NPC_MAXPAIN , SC_MAXPAIN , EFST_MAXPAIN , SCB_NONE ); - add_sc( NPC_STORMGUST2 , SC_FREEZE ); - add_sc( NPC_JACKFROST , SC_FREEZE ); - add_sc( NPC_ELECTRICWALK , SC_PROPERTYWALK ); - add_sc( NPC_FIREWALK , SC_PROPERTYWALK ); - add_sc( NPC_CLOUD_KILL , SC_POISON ); - set_sc( NPC_HALLUCINATIONWALK , SC_NPC_HALLUCINATIONWALK , EFST_NPC_HALLUCINATIONWALK , SCB_FLEE ); - set_sc( NPC_WIDEWEB , SC_WIDEWEB , EFST_WIDEWEB , SCB_FLEE ); - set_sc_with_vfx( NPC_FIRESTORM, SC_BURNT , EFST_BURNT , SCB_NONE ); - add_sc( NPC_SR_CURSEDCIRCLE , SC_CURSEDCIRCLE_TARGET ); - add_sc( NPC_MAGMA_ERUPTION , SC_STUN ); - // add_sc( NPC_MAGMA_ERUPTION_DOTDAMAGE, SC_BURNING ); // No data. Hidden status ? - set_sc( NPC_MANDRAGORA , SC_MANDRAGORA , EFST_MANDRAGORA , SCB_INT ); - - set_sc( CASH_BLESSING , SC_BLESSING , EFST_BLESSING , SCB_STR|SCB_INT|SCB_DEX ); - set_sc( CASH_INCAGI , SC_INCREASEAGI , EFST_INC_AGI, SCB_AGI|SCB_SPEED ); - set_sc( CASH_ASSUMPTIO , SC_ASSUMPTIO , -#ifndef RENEWAL - EFST_ASSUMPTIO , SCB_NONE ); -#else - EFST_ASSUMPTIO_BUFF , SCB_DEF ); -#endif - - set_sc( ALL_PARTYFLEE , SC_PARTYFLEE , EFST_PARTYFLEE , SCB_NONE ); - set_sc( ALL_ODINS_POWER , SC_ODINS_POWER , EFST_ODINS_POWER , SCB_WATK|SCB_MATK|SCB_MDEF|SCB_DEF ); - - set_sc( CR_SHRINK , SC_SHRINK , EFST_CR_SHRINK, SCB_NONE ); - set_sc( RG_CLOSECONFINE , SC_CLOSECONFINE2 , EFST_RG_CCONFINE_S, SCB_NONE ); - set_sc( RG_CLOSECONFINE , SC_CLOSECONFINE , EFST_RG_CCONFINE_M, SCB_FLEE ); - set_sc( WZ_SIGHTBLASTER , SC_SIGHTBLASTER , EFST_WZ_SIGHTBLASTER, SCB_NONE ); - set_sc( DC_WINKCHARM , SC_WINKCHARM , EFST_DC_WINKCHARM, SCB_NONE ); - add_sc( MO_BALKYOUNG , SC_STUN ); - add_sc( SA_ELEMENTWATER , SC_ELEMENTALCHANGE ); - add_sc( SA_ELEMENTFIRE , SC_ELEMENTALCHANGE ); - add_sc( SA_ELEMENTGROUND , SC_ELEMENTALCHANGE ); - add_sc( SA_ELEMENTWIND , SC_ELEMENTALCHANGE ); - - set_sc( HLIF_AVOID , SC_AVOID , EFST_BLANK , SCB_SPEED ); - set_sc( HLIF_CHANGE , SC_CHANGE , EFST_BLANK , SCB_VIT|SCB_INT ); - set_sc( HFLI_FLEET , SC_FLEET , EFST_BLANK , SCB_ASPD|SCB_BATK|SCB_WATK ); - set_sc( HFLI_SPEED , SC_SPEED , EFST_BLANK , SCB_FLEE ); - set_sc( HAMI_DEFENCE , SC_DEFENCE , EFST_BLANK , -#ifndef RENEWAL - SCB_DEF ); -#else - SCB_VIT ); -#endif - set_sc( HAMI_BLOODLUST , SC_BLOODLUST , EFST_BLANK , SCB_BATK|SCB_WATK ); - - /* Homunculus S */ - add_sc(MH_STAHL_HORN , SC_STUN ); - set_sc(MH_ANGRIFFS_MODUS , SC_ANGRIFFS_MODUS , EFST_ANGRIFFS_MODUS , SCB_BATK|SCB_DEF|SCB_FLEE|SCB_MAXHP ); - set_sc(MH_GOLDENE_FERSE , SC_GOLDENE_FERSE , EFST_GOLDENE_FERSE , SCB_ASPD|SCB_FLEE ); - set_sc(MH_STEINWAND , SC_STONE_WALL , EFST_STONE_WALL , SCB_DEF|SCB_MDEF ); - set_sc(MH_OVERED_BOOST , SC_OVERED_BOOST , EFST_OVERED_BOOST , SCB_FLEE|SCB_ASPD|SCB_DEF ); - set_sc(MH_LIGHT_OF_REGENE , SC_LIGHT_OF_REGENE, EFST_LIGHT_OF_REGENE, SCB_NONE); - set_sc(MH_VOLCANIC_ASH , SC_ASH , EFST_VOLCANIC_ASH , SCB_DEF|SCB_DEF2|SCB_HIT|SCB_BATK|SCB_FLEE ); - set_sc(MH_GRANITIC_ARMOR , SC_GRANITIC_ARMOR , EFST_GRANITIC_ARMOR , SCB_NONE ); - set_sc(MH_MAGMA_FLOW , SC_MAGMA_FLOW , EFST_MAGMA_FLOW , SCB_NONE ); - set_sc(MH_PYROCLASTIC , SC_PYROCLASTIC , EFST_PYROCLASTIC , SCB_BATK|SCB_WATK|SCB_ATK_ELE ); - set_sc(MH_NEEDLE_OF_PARALYZE , SC_PARALYSIS , EFST_NEEDLE_OF_PARALYZE , SCB_DEF2 ); - set_sc(MH_POISON_MIST , SC_POISON_MIST , EFST_POISON_MIST , SCB_FLEE ); - set_sc(MH_PAIN_KILLER , SC_PAIN_KILLER , EFST_PAIN_KILLER , SCB_NONE ); - - add_sc(MH_STYLE_CHANGE , SC_STYLE_CHANGE ); - set_sc(MH_TINDER_BREAKER , SC_TINDER_BREAKER2 , EFST_TINDER_BREAKER , SCB_FLEE ); - set_sc(MH_TINDER_BREAKER , SC_TINDER_BREAKER , EFST_TINDER_BREAKER_POSTDELAY , SCB_FLEE ); - set_sc(MH_CBC , SC_CBC , EFST_CBC , SCB_FLEE ); - set_sc(MH_EQC , SC_EQC , EFST_EQC , SCB_DEF2|SCB_MAXHP ); - - add_sc( MER_CRASH , SC_STUN ); - set_sc( MER_PROVOKE , SC_PROVOKE , EFST_PROVOKE , SCB_DEF|SCB_DEF2|SCB_BATK|SCB_WATK ); - add_sc( MS_MAGNUM , SC_WATK_ELEMENT ); - add_sc( MER_SIGHT , SC_SIGHT ); - set_sc( MER_DECAGI , SC_DECREASEAGI , EFST_DEC_AGI, SCB_AGI|SCB_SPEED ); - set_sc( MER_MAGNIFICAT , SC_MAGNIFICAT , EFST_MAGNIFICAT , SCB_REGEN ); - add_sc( MER_LEXDIVINA , SC_SILENCE ); - add_sc( MA_LANDMINE , SC_STUN ); - add_sc( MA_SANDMAN , SC_SLEEP ); - add_sc( MA_FREEZINGTRAP , SC_FREEZE ); - set_sc( MER_AUTOBERSERK , SC_AUTOBERSERK , EFST_AUTOBERSERK , SCB_NONE ); - set_sc( ML_AUTOGUARD , SC_AUTOGUARD , EFST_AUTOGUARD , SCB_NONE ); - set_sc( MS_REFLECTSHIELD , SC_REFLECTSHIELD , EFST_REFLECTSHIELD , SCB_NONE ); - set_sc( ML_DEFENDER , SC_DEFENDER , EFST_DEFENDER , SCB_SPEED|SCB_ASPD ); - set_sc( MS_PARRYING , SC_PARRYING , EFST_PARRYING , SCB_NONE ); - set_sc( MS_BERSERK , SC_BERSERK , EFST_BERSERK , SCB_DEF|SCB_DEF2|SCB_MDEF|SCB_MDEF2|SCB_FLEE|SCB_SPEED|SCB_ASPD|SCB_MAXHP|SCB_REGEN ); - add_sc( ML_SPIRALPIERCE , SC_STOP ); - set_sc( MER_QUICKEN , SC_MERC_QUICKEN , EFST_BLANK , SCB_ASPD ); - add_sc( ML_DEVOTION , SC_DEVOTION ); - set_sc( MER_KYRIE , SC_KYRIE , EFST_KYRIE , SCB_NONE ); - set_sc( MER_BLESSING , SC_BLESSING , EFST_BLESSING , SCB_STR|SCB_INT|SCB_DEX ); - set_sc( MER_INCAGI , SC_INCREASEAGI , EFST_INC_AGI, SCB_AGI|SCB_SPEED ); - set_sc( MER_INVINCIBLEOFF2 , SC_INVINCIBLEOFF , EFST_BLANK, SCB_SPEED ); - - set_sc( GD_LEADERSHIP , SC_LEADERSHIP , EFST_BLANK , SCB_STR ); - set_sc( GD_GLORYWOUNDS , SC_GLORYWOUNDS , EFST_BLANK , SCB_VIT ); - set_sc( GD_SOULCOLD , SC_SOULCOLD , EFST_BLANK , SCB_AGI ); - set_sc( GD_HAWKEYES , SC_HAWKEYES , EFST_BLANK , SCB_DEX ); - - set_sc( GD_BATTLEORDER , SC_BATTLEORDERS , EFST_GDSKILL_BATTLEORDER , SCB_STR|SCB_INT|SCB_DEX ); - set_sc( GD_REGENERATION , SC_REGENERATION , EFST_GDSKILL_REGENERATION , SCB_REGEN ); - -#ifdef RENEWAL - set_sc( GD_EMERGENCY_MOVE , SC_EMERGENCY_MOVE , EFST_INC_AGI , SCB_SPEED ); -#endif - - /* Rune Knight */ - set_sc( RK_ENCHANTBLADE , SC_ENCHANTBLADE , EFST_ENCHANTBLADE , SCB_NONE ); - set_sc( RK_DRAGONHOWLING , SC_FEAR , EFST_BLANK , SCB_FLEE|SCB_HIT ); - set_sc( RK_DEATHBOUND , SC_DEATHBOUND , EFST_DEATHBOUND , SCB_NONE ); - set_sc( RK_WINDCUTTER , SC_FEAR , EFST_BLANK , SCB_FLEE|SCB_HIT ); - set_sc( RK_DRAGONBREATH , SC_BURNING , EFST_BURNT , SCB_MDEF ); - set_sc( RK_MILLENNIUMSHIELD , SC_MILLENNIUMSHIELD , EFST_REUSE_MILLENNIUMSHIELD , SCB_NONE ); - set_sc( RK_REFRESH , SC_REFRESH , EFST_REFRESH , SCB_NONE ); - set_sc( RK_GIANTGROWTH , SC_GIANTGROWTH , EFST_GIANTGROWTH , SCB_STR ); - set_sc( RK_STONEHARDSKIN , SC_STONEHARDSKIN , EFST_STONEHARDSKIN , SCB_DEF|SCB_MDEF ); - set_sc( RK_VITALITYACTIVATION , SC_VITALITYACTIVATION , EFST_VITALITYACTIVATION , SCB_NONE ); - set_sc( RK_FIGHTINGSPIRIT , SC_FIGHTINGSPIRIT , EFST_FIGHTINGSPIRIT , SCB_WATK|SCB_ASPD ); - set_sc( RK_ABUNDANCE , SC_ABUNDANCE , EFST_ABUNDANCE , SCB_NONE ); - set_sc( RK_CRUSHSTRIKE , SC_CRUSHSTRIKE , EFST_CRUSHSTRIKE , SCB_NONE ); - set_sc_with_vfx( RK_DRAGONBREATH_WATER , SC_FREEZING , EFST_FROSTMISTY , SCB_ASPD|SCB_SPEED|SCB_DEF ); - set_sc( RK_LUXANIMA , SC_LUXANIMA , EFST_LUXANIMA , SCB_ALL ); - - /* GC Guillotine Cross */ - set_sc_with_vfx( GC_VENOMIMPRESS, SC_VENOMIMPRESS , EFST_VENOMIMPRESS , SCB_NONE ); - set_sc( GC_POISONINGWEAPON , SC_POISONINGWEAPON , EFST_POISONINGWEAPON , SCB_NONE ); - set_sc( GC_WEAPONBLOCKING , SC_WEAPONBLOCKING , EFST_WEAPONBLOCKING , SCB_NONE ); - set_sc( GC_CLOAKINGEXCEED , SC_CLOAKINGEXCEED , EFST_CLOAKINGEXCEED , SCB_SPEED ); - set_sc( GC_HALLUCINATIONWALK , SC_HALLUCINATIONWALK , EFST_HALLUCINATIONWALK , SCB_FLEE ); - set_sc( GC_ROLLINGCUTTER , SC_ROLLINGCUTTER , EFST_ROLLINGCUTTER , SCB_NONE ); - set_sc_with_vfx( GC_DARKCROW , SC_DARKCROW , EFST_DARKCROW , SCB_NONE ); - - /* Arch Bishop */ - set_sc( AB_ADORAMUS , SC_ADORAMUS , EFST_ADORAMUS , SCB_AGI|SCB_SPEED ); - add_sc( AB_CLEMENTIA , SC_BLESSING ); - add_sc( AB_CANTO , SC_INCREASEAGI ); - set_sc( AB_EPICLESIS , SC_EPICLESIS , EFST_EPICLESIS , SCB_MAXHP ); - add_sc( AB_PRAEFATIO , SC_KYRIE ); - set_sc_with_vfx( AB_ORATIO , SC_ORATIO , EFST_ORATIO , SCB_NONE ); - set_sc( AB_LAUDAAGNUS , SC_LAUDAAGNUS , EFST_LAUDAAGNUS , SCB_MAXHP ); - set_sc( AB_LAUDARAMUS , SC_LAUDARAMUS , EFST_LAUDARAMUS , SCB_ALL ); - set_sc( AB_RENOVATIO , SC_RENOVATIO , EFST_RENOVATIO , SCB_REGEN ); - set_sc( AB_EXPIATIO , SC_EXPIATIO , EFST_EXPIATIO , SCB_NONE ); - set_sc( AB_DUPLELIGHT , SC_DUPLELIGHT , EFST_DUPLELIGHT , SCB_NONE ); - set_sc( AB_SECRAMENT , SC_SECRAMENT , EFST_AB_SECRAMENT, SCB_NONE ); - set_sc( AB_OFFERTORIUM , SC_OFFERTORIUM , EFST_OFFERTORIUM , SCB_NONE ); - add_sc( AB_VITUPERATUM , SC_AETERNA ); - - /* Warlock */ - add_sc( WL_WHITEIMPRISON , SC_WHITEIMPRISON ); - set_sc_with_vfx( WL_FROSTMISTY , SC_FREEZING , EFST_FROSTMISTY , SCB_ASPD|SCB_SPEED|SCB_DEF ); - set_sc( WL_MARSHOFABYSS , SC_MARSHOFABYSS , EFST_MARSHOFABYSS , SCB_AGI|SCB_DEX|SCB_SPEED ); - set_sc( WL_RECOGNIZEDSPELL , SC_RECOGNIZEDSPELL , EFST_RECOGNIZEDSPELL , SCB_MATK); - add_sc( WL_SIENNAEXECRATE , SC_STONE ); - set_sc( WL_STASIS , SC_STASIS , EFST_STASIS , SCB_NONE ); - set_sc_with_vfx( WL_COMET , SC_MAGIC_POISON , EFST_MAGIC_POISON , SCB_NONE ); - set_sc( WL_TELEKINESIS_INTENSE , SC_TELEKINESIS_INTENSE, EFST_TELEKINESIS_INTENSE, SCB_MATK ); - - /* Ranger */ - set_sc( RA_FEARBREEZE , SC_FEARBREEZE , EFST_FEARBREEZE , SCB_NONE ); - set_sc( RA_ELECTRICSHOCKER , SC_ELECTRICSHOCKER , EFST_ELECTRICSHOCKER , SCB_NONE ); - set_sc( RA_WUGDASH , SC_WUGDASH , EFST_WUGDASH , SCB_SPEED|SCB_DSPD ); - set_sc( RA_WUGBITE , SC_BITE , EFST_WUGBITE , SCB_NONE ); - set_sc( RA_CAMOUFLAGE , SC_CAMOUFLAGE , EFST_CAMOUFLAGE , SCB_SPEED ); - set_sc( RA_FIRINGTRAP , SC_BURNING , EFST_BURNT , SCB_MDEF ); - set_sc_with_vfx( RA_ICEBOUNDTRAP, SC_FREEZING , EFST_FROSTMISTY , SCB_SPEED|SCB_ASPD|SCB_DEF ); - set_sc( RA_UNLIMIT , SC_UNLIMIT , EFST_UNLIMIT , SCB_NONE ); - - /* Mechanic */ - set_sc( NC_ACCELERATION , SC_ACCELERATION , EFST_ACCELERATION , SCB_SPEED ); - set_sc( NC_HOVERING , SC_HOVERING , EFST_HOVERING , SCB_SPEED ); - set_sc( NC_SHAPESHIFT , SC_SHAPESHIFT , EFST_SHAPESHIFT , SCB_DEF_ELE ); - set_sc( NC_INFRAREDSCAN , SC_INFRAREDSCAN , EFST_INFRAREDSCAN , SCB_FLEE ); - set_sc( NC_ANALYZE , SC_ANALYZE , EFST_ANALYZE , SCB_DEF|SCB_DEF2|SCB_MDEF|SCB_MDEF2 ); - set_sc( NC_MAGNETICFIELD , SC_MAGNETICFIELD , EFST_MAGNETICFIELD , SCB_NONE ); - set_sc( NC_NEUTRALBARRIER , SC_NEUTRALBARRIER , EFST_NEUTRALBARRIER , SCB_DEF|SCB_MDEF ); - set_sc( NC_STEALTHFIELD , SC_STEALTHFIELD , EFST_STEALTHFIELD , SCB_SPEED ); - add_sc( NC_MAGMA_ERUPTION , SC_STUN ); - add_sc( NC_MAGMA_ERUPTION_DOTDAMAGE, SC_BURNING ); - - /* Royal Guard */ - set_sc( LG_REFLECTDAMAGE , SC_REFLECTDAMAGE , EFST_LG_REFLECTDAMAGE , SCB_NONE ); - set_sc( LG_FORCEOFVANGUARD , SC_FORCEOFVANGUARD , EFST_FORCEOFVANGUARD , SCB_MAXHP ); - set_sc( LG_EXEEDBREAK , SC_EXEEDBREAK , EFST_EXEEDBREAK , SCB_NONE ); - set_sc( LG_PRESTIGE , SC_PRESTIGE , EFST_PRESTIGE , SCB_DEF ); - set_sc( LG_BANDING , SC_BANDING , EFST_BANDING , SCB_DEF|SCB_WATK|SCB_REGEN ); - set_sc( LG_PIETY , SC_BENEDICTIO , EFST_BENEDICTIO , SCB_DEF_ELE ); - set_sc( LG_INSPIRATION , SC_INSPIRATION , EFST_INSPIRATION , SCB_WATK|SCB_STR|SCB_AGI|SCB_VIT|SCB_INT|SCB_DEX|SCB_LUK|SCB_HIT|SCB_MAXHP); - set_sc( LG_KINGS_GRACE , SC_KINGS_GRACE , EFST_KINGS_GRACE , SCB_NONE ); - set_sc( LG_MOONSLASHER , SC_OVERBRANDREADY , EFST_OVERBRANDREADY , SCB_NONE ); - - /* Shadow Chaser */ - set_sc( SC_REPRODUCE , SC__REPRODUCE , EFST_REPRODUCE , SCB_NONE ); - set_sc( SC_AUTOSHADOWSPELL , SC__AUTOSHADOWSPELL , EFST_AUTOSHADOWSPELL , SCB_MATK ); - set_sc( SC_SHADOWFORM , SC__SHADOWFORM , EFST_SHADOWFORM , SCB_NONE ); - set_sc( SC_BODYPAINT , SC__BODYPAINT , EFST_BODYPAINT , SCB_ASPD ); - set_sc( SC_INVISIBILITY , SC__INVISIBILITY , EFST_INVISIBILITY , SCB_ASPD|SCB_CRI|SCB_ATK_ELE ); - set_sc( SC_DEADLYINFECT , SC__DEADLYINFECT , EFST_DEADLYINFECT , SCB_NONE ); - set_sc( SC_ENERVATION , SC__ENERVATION , EFST_ENERVATION , SCB_BATK|SCB_WATK ); - set_sc( SC_GROOMY , SC__GROOMY , EFST_GROOMY , SCB_ASPD|SCB_HIT ); - set_sc( SC_IGNORANCE , SC__IGNORANCE , EFST_IGNORANCE , SCB_NONE ); - set_sc( SC_LAZINESS , SC__LAZINESS , EFST_LAZINESS , SCB_FLEE|SCB_SPEED ); - set_sc( SC_UNLUCKY , SC__UNLUCKY , EFST_UNLUCKY , SCB_CRI|SCB_FLEE2 ); - set_sc( SC_WEAKNESS , SC__WEAKNESS , EFST_WEAKNESS , SCB_MAXHP ); - set_sc( SC_STRIPACCESSARY , SC__STRIPACCESSORY , EFST_STRIPACCESSARY , SCB_DEX|SCB_INT|SCB_LUK ); - set_sc_with_vfx( SC_MANHOLE , SC__MANHOLE , EFST_MANHOLE , SCB_NONE ); - add_sc( SC_CHAOSPANIC , SC_CONFUSION ); - add_sc( SC_BLOODYLUST , SC_BERSERK ); - add_sc( SC_FEINTBOMB , SC__FEINTBOMB ); - add_sc( SC_ESCAPE , SC_ANKLE ); - - /* Sura */ - add_sc( SR_DRAGONCOMBO , SC_STUN ); - add_sc( SR_EARTHSHAKER , SC_STUN ); - set_sc( SR_CRESCENTELBOW , SC_CRESCENTELBOW , EFST_CRESCENTELBOW , SCB_NONE ); - set_sc_with_vfx( SR_CURSEDCIRCLE , SC_CURSEDCIRCLE_TARGET, EFST_CURSEDCIRCLE_TARGET , SCB_NONE ); - set_sc( SR_LIGHTNINGWALK , SC_LIGHTNINGWALK , EFST_LIGHTNINGWALK , SCB_NONE ); - set_sc( SR_RAISINGDRAGON , SC_RAISINGDRAGON , EFST_RAISINGDRAGON , SCB_MAXHP|SCB_MAXSP ); - set_sc( SR_GENTLETOUCH_ENERGYGAIN , SC_GT_ENERGYGAIN , EFST_GENTLETOUCH_ENERGYGAIN , SCB_NONE ); - set_sc( SR_GENTLETOUCH_CHANGE , SC_GT_CHANGE , EFST_GENTLETOUCH_CHANGE , SCB_WATK|SCB_ASPD ); - set_sc( SR_GENTLETOUCH_REVITALIZE , SC_GT_REVITALIZE , EFST_GENTLETOUCH_REVITALIZE , SCB_MAXHP|SCB_REGEN ); - set_sc( SR_FLASHCOMBO , SC_FLASHCOMBO , EFST_FLASHCOMBO , SCB_WATK ); - - /* Wanderer / Minstrel */ - set_sc( WA_SWING_DANCE , SC_SWINGDANCE , EFST_SWING, SCB_SPEED|SCB_ASPD ); - set_sc( WA_SYMPHONY_OF_LOVER , SC_SYMPHONYOFLOVER , EFST_SYMPHONY_LOVE, SCB_MDEF ); - set_sc( WA_MOONLIT_SERENADE , SC_MOONLITSERENADE , EFST_MOONLIT_SERENADE, SCB_MATK ); - set_sc( MI_RUSH_WINDMILL , SC_RUSHWINDMILL , EFST_RUSH_WINDMILL, SCB_WATK|SCB_SPEED ); - set_sc( MI_ECHOSONG , SC_ECHOSONG , EFST_ECHOSONG , SCB_DEF ); - set_sc( MI_HARMONIZE , SC_HARMONIZE , EFST_HARMONIZE , SCB_STR|SCB_AGI|SCB_VIT|SCB_INT|SCB_DEX|SCB_LUK ); - set_sc_with_vfx( WM_POEMOFNETHERWORLD , SC_NETHERWORLD , EFST_NETHERWORLD , SCB_NONE ); - set_sc_with_vfx( WM_VOICEOFSIREN , SC_VOICEOFSIREN , EFST_SIREN, SCB_NONE ); - set_sc_with_vfx( WM_LULLABY_DEEPSLEEP , SC_DEEPSLEEP , EFST_HANDICAPSTATE_DEEP_SLEEP, SCB_NONE ); - set_sc( WM_SIRCLEOFNATURE , SC_SIRCLEOFNATURE , EFST_SIRCLEOFNATURE , SCB_REGEN ); - set_sc( WM_GLOOMYDAY , SC_GLOOMYDAY , EFST_GLOOMYDAY , SCB_FLEE|SCB_SPEED|SCB_ASPD ); - set_sc( WM_SONG_OF_MANA , SC_SONGOFMANA , EFST_SONG_OF_MANA, SCB_REGEN ); - set_sc( WM_DANCE_WITH_WUG , SC_DANCEWITHWUG , EFST_DANCE_WITH_WUG, SCB_ASPD ); - set_sc( WM_SOUND_OF_DESTRUCTION , SC_SOUNDOFDESTRUCTION , EFST_SOUND_OF_DESTRUCTION, SCB_NONE ); - set_sc( WM_SATURDAY_NIGHT_FEVER , SC_SATURDAYNIGHTFEVER , EFST_SATURDAY_NIGHT_FEVER, SCB_HIT|SCB_FLEE|SCB_REGEN ); - set_sc( WM_LERADS_DEW , SC_LERADSDEW , EFST_LERADS_DEW, SCB_MAXHP ); - set_sc( WM_MELODYOFSINK , SC_MELODYOFSINK , EFST_MELODYOFSINK , SCB_INT|SCB_MAXSP ); - set_sc( WM_BEYOND_OF_WARCRY , SC_BEYONDOFWARCRY , EFST_BEYOND_OF_WARCRY, SCB_STR|SCB_MAXHP ); - set_sc( WM_UNLIMITED_HUMMING_VOICE , SC_UNLIMITEDHUMMINGVOICE , EFST_UNLIMITED_HUMMING_VOICE, SCB_NONE ); - set_sc( WM_FRIGG_SONG , SC_FRIGG_SONG , EFST_FRIGG_SONG , SCB_MAXHP ); - - /* Sorcerer */ - set_sc( SO_FIREWALK , SC_PROPERTYWALK , EFST_PROPERTYWALK , SCB_NONE ); - set_sc( SO_ELECTRICWALK , SC_PROPERTYWALK , EFST_PROPERTYWALK , SCB_NONE ); - set_sc( SO_SPELLFIST , SC_SPELLFIST , EFST_SPELLFIST , SCB_NONE ); - set_sc_with_vfx( SO_DIAMONDDUST , SC_CRYSTALIZE , EFST_COLD , SCB_NONE ); - set_sc( SO_CLOUD_KILL , SC_CLOUD_POISON , EFST_CLOUD_POISON, SCB_NONE ); - add_sc( SO_POISON_BUSTER , SC_POISON ); - set_sc( SO_STRIKING , SC_STRIKING , EFST_STRIKING , SCB_ALL ); - set_sc( SO_WARMER , SC_WARMER , EFST_WARMER , SCB_NONE ); - set_sc( SO_VACUUM_EXTREME , SC_VACUUM_EXTREME , EFST_VACUUM_EXTREME , SCB_NONE ); - set_sc( SO_ARRULLO , SC_DEEPSLEEP , EFST_HANDICAPSTATE_DEEP_SLEEP, SCB_NONE ); - set_sc( SO_FIRE_INSIGNIA , SC_FIRE_INSIGNIA , EFST_FIRE_INSIGNIA , SCB_MATK|SCB_WATK|SCB_ATK_ELE|SCB_REGEN ); - set_sc( SO_WATER_INSIGNIA , SC_WATER_INSIGNIA , EFST_WATER_INSIGNIA , SCB_MATK|SCB_WATK|SCB_ATK_ELE|SCB_REGEN ); - set_sc( SO_WIND_INSIGNIA , SC_WIND_INSIGNIA , EFST_WIND_INSIGNIA , SCB_MATK|SCB_WATK|SCB_ASPD|SCB_ATK_ELE|SCB_REGEN ); - set_sc( SO_EARTH_INSIGNIA , SC_EARTH_INSIGNIA , EFST_EARTH_INSIGNIA , SCB_MDEF|SCB_DEF|SCB_MAXHP|SCB_MAXSP|SCB_MATK|SCB_WATK|SCB_ATK_ELE|SCB_REGEN ); - - /* Genetic */ - set_sc( GN_CARTBOOST , SC_GN_CARTBOOST , EFST_GN_CARTBOOST , SCB_SPEED ); - set_sc( GN_THORNS_TRAP , SC_THORNSTRAP , EFST_THORNS_TRAP, SCB_NONE ); - set_sc( GN_BLOOD_SUCKER , SC_BLOODSUCKER , EFST_BLOOD_SUCKER, SCB_NONE ); - set_sc( GN_SPORE_EXPLOSION , SC_SPORE_EXPLOSION , EFST_SPORE_EXPLOSION_DEBUFF, SCB_NONE ); - set_sc( GN_FIRE_EXPANSION_SMOKE_POWDER , SC_SMOKEPOWDER , EFST_FIRE_EXPANSION_SMOKE_POWDER, SCB_FLEE ); - set_sc( GN_FIRE_EXPANSION_TEAR_GAS , SC_TEARGAS , EFST_FIRE_EXPANSION_TEAR_GAS , SCB_HIT|SCB_FLEE ); - set_sc_with_vfx( GN_HELLS_PLANT , SC_HELLS_PLANT , EFST_HELLS_PLANT_ARMOR , SCB_NONE ); - set_sc( GN_MANDRAGORA , SC_MANDRAGORA , EFST_MANDRAGORA , SCB_INT ); - set_sc_with_vfx( GN_ILLUSIONDOPING , SC_ILLUSIONDOPING , EFST_ILLUSIONDOPING , SCB_HIT ); - - /* Elemental spirits' status changes */ - set_sc( EL_CIRCLE_OF_FIRE , SC_CIRCLE_OF_FIRE_OPTION , EFST_CIRCLE_OF_FIRE_OPTION , SCB_NONE ); - set_sc( EL_FIRE_CLOAK , SC_FIRE_CLOAK_OPTION , EFST_FIRE_CLOAK_OPTION , SCB_ALL ); - set_sc( EL_WATER_SCREEN , SC_WATER_SCREEN_OPTION , EFST_WATER_SCREEN_OPTION , SCB_NONE ); - set_sc( EL_WATER_DROP , SC_WATER_DROP_OPTION , EFST_WATER_DROP_OPTION , SCB_ALL ); - set_sc( EL_WATER_BARRIER , SC_WATER_BARRIER , EFST_WATER_BARRIER , SCB_WATK|SCB_FLEE ); - set_sc( EL_WIND_STEP , SC_WIND_STEP_OPTION , EFST_WIND_STEP_OPTION , SCB_SPEED|SCB_FLEE ); - set_sc( EL_WIND_CURTAIN , SC_WIND_CURTAIN_OPTION , EFST_WIND_CURTAIN_OPTION , SCB_ALL ); - set_sc( EL_ZEPHYR , SC_ZEPHYR , EFST_ZEPHYR , SCB_FLEE ); - set_sc( EL_SOLID_SKIN , SC_SOLID_SKIN_OPTION , EFST_SOLID_SKIN_OPTION , SCB_DEF|SCB_MAXHP ); - set_sc( EL_STONE_SHIELD , SC_STONE_SHIELD_OPTION , EFST_STONE_SHIELD_OPTION , SCB_ALL ); - set_sc( EL_POWER_OF_GAIA , SC_POWER_OF_GAIA , EFST_POWER_OF_GAIA , SCB_MAXHP|SCB_DEF|SCB_SPEED ); - set_sc( EL_PYROTECHNIC , SC_PYROTECHNIC_OPTION , EFST_PYROTECHNIC_OPTION , SCB_WATK ); - set_sc( EL_HEATER , SC_HEATER_OPTION , EFST_HEATER_OPTION , SCB_WATK ); - set_sc( EL_TROPIC , SC_TROPIC_OPTION , EFST_TROPIC_OPTION , SCB_WATK ); - set_sc( EL_AQUAPLAY , SC_AQUAPLAY_OPTION , EFST_AQUAPLAY_OPTION , SCB_MATK ); - set_sc( EL_COOLER , SC_COOLER_OPTION , EFST_COOLER_OPTION , SCB_MATK ); - set_sc( EL_CHILLY_AIR , SC_CHILLY_AIR_OPTION , EFST_CHILLY_AIR_OPTION , SCB_MATK ); - set_sc( EL_GUST , SC_GUST_OPTION , EFST_GUST_OPTION , SCB_ASPD ); - set_sc( EL_BLAST , SC_BLAST_OPTION , EFST_BLAST_OPTION , SCB_ASPD ); - set_sc( EL_WILD_STORM , SC_WILD_STORM_OPTION , EFST_WILD_STORM_OPTION , SCB_ASPD ); - set_sc( EL_PETROLOGY , SC_PETROLOGY_OPTION , EFST_PETROLOGY_OPTION , SCB_MAXHP ); - set_sc( EL_CURSED_SOIL , SC_CURSED_SOIL_OPTION , EFST_CURSED_SOIL_OPTION , SCB_MAXHP ); - set_sc( EL_UPHEAVAL , SC_UPHEAVAL_OPTION , EFST_UPHEAVAL_OPTION , SCB_MAXHP ); - set_sc( EL_TIDAL_WEAPON , SC_TIDAL_WEAPON_OPTION , EFST_TIDAL_WEAPON_OPTION , SCB_ALL ); - set_sc( EL_ROCK_CRUSHER , SC_ROCK_CRUSHER , EFST_ROCK_CRUSHER , SCB_DEF ); - set_sc( EL_ROCK_CRUSHER_ATK , SC_ROCK_CRUSHER_ATK , EFST_ROCK_CRUSHER_ATK , SCB_SPEED ); - - add_sc( KO_YAMIKUMO , SC_HIDING ); - set_sc_with_vfx( KO_JYUMONJIKIRI , SC_JYUMONJIKIRI , EFST_KO_JYUMONJIKIRI , SCB_NONE ); - add_sc( KO_MAKIBISHI , SC_STUN ); - set_sc( KO_MEIKYOUSISUI , SC_MEIKYOUSISUI , EFST_MEIKYOUSISUI , SCB_NONE ); - set_sc( KO_KYOUGAKU , SC_KYOUGAKU , EFST_KYOUGAKU , SCB_STR|SCB_AGI|SCB_VIT|SCB_INT|SCB_DEX|SCB_LUK ); - add_sc( KO_JYUSATSU , SC_CURSE ); - set_sc( KO_ZENKAI , SC_ZENKAI , EFST_ZENKAI , SCB_NONE ); - set_sc( KO_IZAYOI , SC_IZAYOI , EFST_IZAYOI , SCB_MATK ); - set_sc( KG_KYOMU , SC_KYOMU , EFST_KYOMU , SCB_NONE ); - set_sc( KG_KAGEMUSYA , SC_KAGEMUSYA , EFST_KAGEMUSYA , SCB_NONE ); - set_sc( KG_KAGEHUMI , SC_KAGEHUMI , EFST_KG_KAGEHUMI , SCB_NONE ); - set_sc( OB_ZANGETSU , SC_ZANGETSU , EFST_ZANGETSU , SCB_MATK|SCB_BATK ); - set_sc_with_vfx( OB_AKAITSUKI , SC_AKAITSUKI , EFST_AKAITSUKI , SCB_NONE ); - set_sc( OB_OBOROGENSOU , SC_GENSOU , EFST_GENSOU , SCB_NONE ); - - set_sc( ALL_FULL_THROTTLE , SC_FULL_THROTTLE , EFST_FULL_THROTTLE , SCB_SPEED|SCB_STR|SCB_AGI|SCB_VIT|SCB_INT|SCB_DEX|SCB_LUK ); - - /* Rebellion */ - add_sc( RL_MASS_SPIRAL , SC_BLEEDING ); - set_sc( RL_H_MINE , SC_H_MINE , EFST_H_MINE , SCB_NONE); - set_sc( RL_B_TRAP , SC_B_TRAP , EFST_B_TRAP , SCB_SPEED ); - set_sc( RL_E_CHAIN , SC_E_CHAIN , EFST_E_CHAIN , SCB_NONE ); - set_sc( RL_P_ALTER , SC_P_ALTER , EFST_P_ALTER , SCB_NONE ); - set_sc( RL_FALLEN_ANGEL , SC_FALLEN_ANGEL, EFST_BLANK, SCB_NONE ); - set_sc( RL_SLUGSHOT , SC_STUN , EFST_SLUGSHOT , SCB_NONE ); - set_sc( RL_HEAT_BARREL , SC_HEAT_BARREL , EFST_HEAT_BARREL , SCB_HIT|SCB_ASPD ); - set_sc_with_vfx( RL_C_MARKER , SC_C_MARKER , EFST_C_MARKER , SCB_FLEE ); - set_sc_with_vfx( RL_AM_BLAST , SC_ANTI_M_BLAST , EFST_ANTI_M_BLAST , SCB_NONE ); - - // New Mounts - set_sc_with_vfx_noskill( SC_ALL_RIDING , EFST_ALL_RIDING , SCB_SPEED ); - - // Costumes - set_sc_with_vfx_noskill( SC_MOONSTAR , EFST_MOONSTAR , SCB_NONE ); - set_sc_with_vfx_noskill( SC_SUPER_STAR , EFST_SUPER_STAR , SCB_NONE ); - set_sc_with_vfx_noskill( SC_STRANGELIGHTS , EFST_STRANGELIGHTS , SCB_NONE ); - set_sc_with_vfx_noskill( SC_DECORATION_OF_MUSIC , EFST_DECORATION_OF_MUSIC , SCB_NONE ); - set_sc_with_vfx_noskill( SC_LJOSALFAR , EFST_LJOSALFAR , SCB_NONE); - set_sc_with_vfx_noskill( SC_MERMAID_LONGING , EFST_MERMAID_LONGING , SCB_NONE); - set_sc_with_vfx_noskill( SC_HAT_EFFECT , EFST_HAT_EFFECT , SCB_NONE); - set_sc_with_vfx_noskill( SC_FLOWERSMOKE , EFST_FLOWERSMOKE , SCB_NONE); - set_sc_with_vfx_noskill( SC_FSTONE , EFST_FSTONE , SCB_NONE); - set_sc_with_vfx_noskill( SC_HAPPINESS_STAR , EFST_HAPPINESS_STAR , SCB_NONE); - set_sc_with_vfx_noskill( SC_MAPLE_FALLS , EFST_MAPLE_FALLS , SCB_NONE); - set_sc_with_vfx_noskill( SC_TIME_ACCESSORY , EFST_TIME_ACCESSORY , SCB_NONE); - set_sc_with_vfx_noskill( SC_MAGICAL_FEATHER , EFST_MAGICAL_FEATHER , SCB_NONE); - - /* Summoner */ - set_sc( SU_HIDE , SC_SUHIDE , EFST_SUHIDE , SCB_NONE ); - add_sc( SU_SCRATCH , SC_BLEEDING ); - set_sc( SU_STOOP , SC_SU_STOOP , EFST_SU_STOOP , SCB_NONE ); - add_sc( SU_SV_STEMSPEAR , SC_BLEEDING ); - set_sc( SU_CN_POWDERING , SC_CATNIPPOWDER , EFST_CATNIPPOWDER , SCB_WATK|SCB_MATK|SCB_SPEED|SCB_REGEN ); - add_sc( SU_CN_METEOR , SC_CURSE ); - set_sc_with_vfx( SU_SV_ROOTTWIST, SC_SV_ROOTTWIST , EFST_SV_ROOTTWIST , SCB_NONE ); - set_sc( SU_SCAROFTAROU , SC_BITESCAR , EFST_BITESCAR , SCB_NONE ); - set_sc( SU_ARCLOUSEDASH , SC_ARCLOUSEDASH , EFST_ARCLOUSEDASH , SCB_AGI|SCB_SPEED ); - add_sc( SU_LUNATICCARROTBEAT , SC_STUN ); - set_sc( SU_TUNAPARTY , SC_TUNAPARTY , EFST_TUNAPARTY , SCB_NONE ); - set_sc( SU_BUNCHOFSHRIMP , SC_SHRIMP , EFST_SHRIMP , SCB_BATK|SCB_MATK ); - set_sc( SU_FRESHSHRIMP , SC_FRESHSHRIMP , EFST_FRESHSHRIMP , SCB_NONE ); - set_sc( SU_HISS , SC_HISS , EFST_HISS , SCB_FLEE2 ); - set_sc( SU_NYANGGRASS , SC_NYANGGRASS , EFST_NYANGGRASS , SCB_DEF|SCB_MDEF ); - set_sc( SU_GROOMING , SC_GROOMING , EFST_GROOMING , SCB_FLEE ); - add_sc( SU_PURRING , SC_GROOMING ); - set_sc( SU_SHRIMPARTY , SC_SHRIMPBLESSING , EFST_PROTECTIONOFSHRIMP , SCB_REGEN ); - add_sc( SU_MEOWMEOW , SC_CHATTERING ); - set_sc( SU_CHATTERING , SC_CHATTERING , EFST_CHATTERING , SCB_WATK|SCB_MATK ); - - set_sc( WE_CHEERUP , SC_CHEERUP , EFST_CHEERUP , SCB_STR|SCB_AGI|SCB_VIT|SCB_INT|SCB_DEX|SCB_LUK ); - - // Star Emperor - set_sc( SJ_LIGHTOFMOON , SC_LIGHTOFMOON , EFST_LIGHTOFMOON , SCB_NONE ); - set_sc( SJ_LIGHTOFSTAR , SC_LIGHTOFSTAR , EFST_LIGHTOFSTAR , SCB_NONE ); - set_sc( SJ_LUNARSTANCE , SC_LUNARSTANCE , EFST_LUNARSTANCE , SCB_MAXHP ); - add_sc( SJ_FULLMOONKICK , SC_BLIND ); - set_sc( SJ_STARSTANCE , SC_STARSTANCE , EFST_STARSTANCE , SCB_ASPD ); - set_sc( SJ_NEWMOONKICK , SC_NEWMOON , EFST_NEWMOON , SCB_NONE ); - set_sc( SJ_FLASHKICK , SC_FLASHKICK , EFST_FLASHKICK , SCB_NONE ); - add_sc( SJ_STAREMPEROR , SC_SILENCE ); - set_sc( SJ_NOVAEXPLOSING , SC_NOVAEXPLOSING , EFST_NOVAEXPLOSING , SCB_NONE ); - set_sc( SJ_UNIVERSESTANCE , SC_UNIVERSESTANCE , EFST_UNIVERSESTANCE , SCB_STR|SCB_AGI|SCB_VIT|SCB_INT|SCB_DEX|SCB_LUK ); - set_sc( SJ_FALLINGSTAR , SC_FALLINGSTAR , EFST_FALLINGSTAR , SCB_NONE ); - set_sc( SJ_GRAVITYCONTROL , SC_GRAVITYCONTROL , EFST_GRAVITYCONTROL , SCB_NONE ); - set_sc( SJ_BOOKOFDIMENSION , SC_DIMENSION , EFST_DIMENSION , SCB_NONE ); - set_sc( SJ_BOOKOFCREATINGSTAR , SC_CREATINGSTAR , EFST_CREATINGSTAR , SCB_SPEED ); - set_sc( SJ_LIGHTOFSUN , SC_LIGHTOFSUN , EFST_LIGHTOFSUN , SCB_NONE ); - set_sc( SJ_SUNSTANCE , SC_SUNSTANCE , EFST_SUNSTANCE , SCB_BATK|SCB_WATK ); - - // Soul Reaper - set_sc( SP_SOULGOLEM , SC_SOULGOLEM , EFST_SOULGOLEM , SCB_DEF|SCB_MDEF ); - set_sc( SP_SOULSHADOW , SC_SOULSHADOW , EFST_SOULSHADOW , SCB_ASPD|SCB_CRI ); - set_sc( SP_SOULFALCON , SC_SOULFALCON , EFST_SOULFALCON , SCB_WATK|SCB_HIT ); - set_sc( SP_SOULFAIRY , SC_SOULFAIRY , EFST_SOULFAIRY , SCB_MATK ); - set_sc( SP_SOULCURSE , SC_SOULCURSE , EFST_SOULCURSE , SCB_NONE ); - set_sc( SP_SHA , SC_SP_SHA , EFST_SP_SHA , SCB_SPEED ); - set_sc( SP_SOULUNITY , SC_SOULUNITY , EFST_SOULUNITY , SCB_NONE ); - set_sc( SP_SOULDIVISION , SC_SOULDIVISION , EFST_SOULDIVISION , SCB_NONE ); - set_sc( SP_SOULREAPER , SC_SOULREAPER , EFST_SOULREAPER , SCB_NONE ); - set_sc( SP_SOULCOLLECT , SC_SOULCOLLECT , EFST_SOULCOLLECT , SCB_NONE ); - -#ifdef RENEWAL - set_sc( NV_HELPANGEL , SC_HELPANGEL , EFST_HELPANGEL , SCB_NONE ); - - // Dragon Knight - set_sc( DK_SERVANTWEAPON , SC_SERVANTWEAPON , EFST_SERVANTWEAPON , SCB_NONE ); - set_sc_with_vfx( DK_SERVANT_W_SIGN , SC_SERVANT_SIGN , EFST_SERVANT_SIGN , SCB_NONE ); - set_sc_with_vfx( DK_SERVANT_W_PHANTOM, SC_HANDICAPSTATE_DEEPBLIND, EFST_HANDICAPSTATE_DEEPBLIND, SCB_FLEE|SCB_FLEE2 ); - set_sc( DK_CHARGINGPIERCE , SC_CHARGINGPIERCE , EFST_CHARGINGPIERCE , SCB_NONE ); - set_sc_with_vfx( DK_DRAGONIC_AURA , SC_DRAGONIC_AURA , EFST_DRAGONIC_AURA , SCB_NONE ); - set_sc_with_vfx( DK_VIGOR , SC_VIGOR , EFST_VIGOR , SCB_ALL ); - - // Arch Mage - set_sc_with_vfx( AG_DEADLY_PROJECTION , SC_DEADLY_DEFEASANCE, EFST_DEADLY_DEFEASANCE, SCB_ALL ); - set_sc( AG_DESTRUCTIVE_HURRICANE, SC_CLIMAX_DES_HU , EFST_CLIMAX_DES_HU , SCB_MATK ); - set_sc( AG_VIOLENT_QUAKE , SC_CLIMAX_EARTH , EFST_CLIMAX_EARTH , SCB_ALL ); - set_sc( AG_ALL_BLOOM , SC_CLIMAX_BLOOM , EFST_CLIMAX_BLOOM , SCB_ALL ); - set_sc( AG_CRYSTAL_IMPACT , SC_CLIMAX_CRYIMP , EFST_CLIMAX_CRYIMP , SCB_ALL ); - set_sc_with_vfx( AG_CLIMAX , SC_CLIMAX , EFST_CLIMAX , SCB_NONE ); - - // Windhawk - set_sc_with_vfx( WH_WIND_SIGN , SC_WINDSIGN , EFST_WINDSIGN , SCB_NONE ); - set_sc_with_vfx( WH_CALAMITYGALE , SC_CALAMITYGALE , EFST_CALAMITYGALE , SCB_NONE ); - set_sc ( WH_CRESCIVE_BOLT, SC_CRESCIVEBOLT , EFST_CRESCIVEBOLT , SCB_NONE ); - set_sc_with_vfx( WH_DEEPBLINDTRAP, SC_HANDICAPSTATE_DEEPBLIND , EFST_HANDICAPSTATE_DEEPBLIND , SCB_FLEE|SCB_FLEE2 ); - set_sc_with_vfx( WH_SOLIDTRAP , SC_HANDICAPSTATE_CRYSTALLIZATION, EFST_HANDICAPSTATE_CRYSTALLIZATION, SCB_MDEF|SCB_DEF_ELE); - set_sc_with_vfx( WH_SWIFTTRAP , SC_HANDICAPSTATE_LIGHTNINGSTRIKE, EFST_HANDICAPSTATE_LIGHTNINGSTRIKE, SCB_DEF_ELE); - set_sc_with_vfx( WH_FLAMETRAP , SC_HANDICAPSTATE_CONFLAGRATION , EFST_HANDICAPSTATE_CONFLAGRATION , SCB_NONE ); - - // Cardinal - set_sc_with_vfx( CD_MEDIALE_VOTUM, SC_MEDIALE , EFST_MEDIALE , SCB_NONE ); - set_sc( CD_ARGUTUS_VITA , SC_A_VITA , EFST_A_VITA , SCB_NONE ); - set_sc( CD_ARGUTUS_TELUM, SC_A_TELUM , EFST_A_TELUM , SCB_NONE ); - set_sc_with_vfx( CD_ARBITRIUM , SC_HANDICAPSTATE_DEEPSILENCE, EFST_HANDICAPSTATE_DEEPSILENCE, SCB_ASPD); - set_sc_with_vfx( CD_PRESENS_ACIES, SC_PRE_ACIES , EFST_PRE_ACIES , SCB_CRATE ); - set_sc_with_vfx( CD_COMPETENTIA , SC_COMPETENTIA , EFST_COMPETENTIA , SCB_PATK|SCB_SMATK ); - set_sc_with_vfx( CD_RELIGIO , SC_RELIGIO , EFST_RELIGIO , SCB_STA|SCB_WIS|SCB_SPL ); - set_sc_with_vfx( CD_BENEDICTUM , SC_BENEDICTUM , EFST_BENEDICTUM , SCB_POW|SCB_CON|SCB_CRT ); - - // Meister - set_sc( MT_AXE_STOMP , SC_AXE_STOMP , EFST_AXE_STOMP , SCB_NONE ); - set_sc_with_vfx( MT_A_MACHINE , SC_A_MACHINE , EFST_A_MACHINE , SCB_NONE ); - set_sc_with_vfx( MT_D_MACHINE , SC_D_MACHINE , EFST_D_MACHINE , SCB_DEF|SCB_RES ); - set_sc( MT_SUMMON_ABR_BATTLE_WARIOR, SC_ABR_BATTLE_WARIOR, EFST_ABR_BATTLE_WARIOR, SCB_NONE ); - set_sc( MT_SUMMON_ABR_DUAL_CANNON , SC_ABR_DUAL_CANNON , EFST_ABR_DUAL_CANNON , SCB_NONE ); - set_sc( MT_SUMMON_ABR_MOTHER_NET , SC_ABR_MOTHER_NET , EFST_ABR_MOTHER_NET , SCB_NONE ); - set_sc( MT_SUMMON_ABR_INFINITY , SC_ABR_INFINITY , EFST_ABR_INFINITY , SCB_NONE ); - - // Shadow Cross - set_sc_with_vfx( SHC_SHADOW_EXCEED , SC_SHADOW_EXCEED , EFST_SHADOW_EXCEED , SCB_NONE ); - set_sc_with_vfx( SHC_DANCING_KNIFE , SC_DANCING_KNIFE , EFST_DANCING_KNIFE , SCB_NONE ); - set_sc_with_vfx( SHC_ETERNAL_SLASH , SC_E_SLASH_COUNT , EFST_E_SLASH_COUNT , SCB_NONE ); - set_sc( SHC_POTENT_VENOM , SC_POTENT_VENOM , EFST_POTENT_VENOM , SCB_NONE ); - set_sc( SHC_IMPACT_CRATER , SC_WEAPONBLOCK_ON, EFST_WEAPONBLOCK_ON, SCB_NONE ); - set_sc( SHC_ENCHANTING_SHADOW, SC_SHADOW_WEAPON , EFST_SHADOW_WEAPON , SCB_NONE ); - set_sc_with_vfx( SHC_FATAL_SHADOW_CROW, SC_DARKCROW , EFST_DARKCROW , SCB_NONE ); - - // Imperial Guard - set_sc( IG_GUARD_STANCE , SC_GUARD_STANCE , EFST_GUARD_STANCE , SCB_WATK|SCB_DEF ); - set_sc( IG_GUARDIAN_SHIELD , SC_GUARDIAN_S , EFST_GUARDIAN_S , SCB_NONE ); - set_sc( IG_REBOUND_SHIELD , SC_REBOUND_S , EFST_REBOUND_S , SCB_NONE ); - set_sc( IG_ATTACK_STANCE , SC_ATTACK_STANCE, EFST_ATTACK_STANCE, SCB_WATK|SCB_DEF ); - set_sc( IG_ULTIMATE_SACRIFICE, SC_ULTIMATE_S , EFST_ULTIMATE_S , SCB_NONE ); - set_sc_with_vfx( IG_HOLY_SHIELD , SC_HOLY_S , EFST_HOLY_S , SCB_ALL ); - set_sc_with_vfx( IG_GRAND_JUDGEMENT , SC_SPEAR_SCAR , EFST_SPEAR_SCAR , SCB_NONE ); - set_sc( IG_SHIELD_SHOOTING , SC_SHIELD_POWER , EFST_SHIELD_POWER , SCB_NONE ); - - // Elemental Master - set_sc( EM_SPELL_ENCHANTING , SC_SPELL_ENCHANTING , EFST_SPELL_ENCHANTING , SCB_SMATK ); - set_sc_with_vfx( EM_DIAMOND_STORM , SC_HANDICAPSTATE_FROSTBITE , EFST_HANDICAPSTATE_FROSTBITE , SCB_DEF|SCB_MDEF|SCB_DEF_ELE); - set_sc_with_vfx( EM_LIGHTNING_LAND , SC_HANDICAPSTATE_LIGHTNINGSTRIKE, EFST_HANDICAPSTATE_LIGHTNINGSTRIKE, SCB_DEF_ELE); - set_sc_with_vfx( EM_VENOM_SWAMP , SC_HANDICAPSTATE_DEADLYPOISON , EFST_HANDICAPSTATE_DEADLYPOISON , SCB_DEF); - set_sc_with_vfx( EM_CONFLAGRATION , SC_HANDICAPSTATE_CONFLAGRATION , EFST_HANDICAPSTATE_CONFLAGRATION , SCB_NONE ); - set_sc_with_vfx( EM_TERRA_DRIVE , SC_HANDICAPSTATE_CRYSTALLIZATION, EFST_HANDICAPSTATE_CRYSTALLIZATION, SCB_MDEF|SCB_DEF_ELE); - set_sc( EM_SUMMON_ELEMENTAL_ARDOR , SC_SUMMON_ELEMENTAL_ARDOR , EFST_SUMMON_ELEMENTAL_ARDOR , SCB_NONE ); - set_sc( EM_SUMMON_ELEMENTAL_DILUVIO , SC_SUMMON_ELEMENTAL_DILUVIO , EFST_SUMMON_ELEMENTAL_DILUVIO , SCB_NONE ); - set_sc( EM_SUMMON_ELEMENTAL_PROCELLA , SC_SUMMON_ELEMENTAL_PROCELLA , EFST_SUMMON_ELEMENTAL_PROCELLA , SCB_NONE ); - set_sc( EM_SUMMON_ELEMENTAL_TERREMOTUS, SC_SUMMON_ELEMENTAL_TERREMOTUS , EFST_SUMMON_ELEMENTAL_TERREMOTUS , SCB_NONE ); - set_sc( EM_SUMMON_ELEMENTAL_SERPENS , SC_SUMMON_ELEMENTAL_SERPENS , EFST_SUMMON_ELEMENTAL_SERPENS , SCB_NONE ); - set_sc_with_vfx( EM_ELEMENTAL_VEIL , SC_ELEMENTAL_VEIL , EFST_ELEMENTAL_VEIL , SCB_NONE ); - - // Troubadour/Trouvere - set_sc_with_vfx( TR_MYSTIC_SYMPHONY , SC_MYSTIC_SYMPHONY , EFST_MYSTIC_SYMPHONY , SCB_NONE ); - set_sc( TR_KVASIR_SONATA , SC_KVASIR_SONATA , EFST_KVASIR_SONATA , SCB_NONE ); - set_sc( TR_ROSEBLOSSOM , SC_ROSEBLOSSOM , EFST_ROSEBLOSSOM , SCB_NONE ); - set_sc_with_vfx( TR_SOUNDBLEND , SC_SOUNDBLEND , EFST_SOUNDBLEND , SCB_NONE ); - set_sc( TR_GEF_NOCTURN , SC_GEF_NOCTURN , EFST_GEF_NOCTURN , SCB_MRES ); - set_sc( TR_AIN_RHAPSODY , SC_AIN_RHAPSODY , EFST_AIN_RHAPSODY , SCB_RES ); - set_sc( TR_MUSICAL_INTERLUDE, SC_MUSICAL_INTERLUDE, EFST_MUSICAL_INTERLUDE, SCB_RES ); - set_sc( TR_JAWAII_SERENADE , SC_JAWAII_SERENADE , EFST_JAWAII_SERENADE , SCB_SMATK ); - set_sc( TR_PRON_MARCH , SC_PRON_MARCH , EFST_PRON_MARCH , SCB_PATK ); - - // Inquisitor - set_sc( IQ_POWERFUL_FAITH , SC_POWERFUL_FAITH , EFST_POWERFUL_FAITH , SCB_WATK|SCB_PATK ); - set_sc( IQ_FIRM_FAITH , SC_FIRM_FAITH , EFST_FIRM_FAITH , SCB_MAXHP|SCB_RES ); - set_sc_with_vfx( IQ_OLEUM_SANCTUM , SC_HOLY_OIL , EFST_HOLY_OIL , SCB_NONE ); - set_sc( IQ_SINCERE_FAITH , SC_SINCERE_FAITH , EFST_SINCERE_FAITH , SCB_ALL ); - set_sc( IQ_MASSIVE_F_BLASTER, SC_MASSIVE_F_BLASTER, EFST_MASSIVE_F_BLASTER, SCB_NONE ); - set_sc_with_vfx( IQ_FIRST_BRAND , SC_FIRST_BRAND , EFST_FIRST_BRAND , SCB_NONE ); - set_sc_with_vfx( IQ_FIRST_FAITH_POWER, SC_FIRST_FAITH_POWER, EFST_FIRST_FAITH_POWER, SCB_NONE ); - set_sc_with_vfx( IQ_JUDGE , SC_SECOND_JUDGE , EFST_SECOND_JUDGE , SCB_NONE ); - set_sc_with_vfx( IQ_SECOND_FLAME , SC_SECOND_BRAND , EFST_SECOND_BRAND , SCB_NONE ); - set_sc_with_vfx( IQ_SECOND_FAITH , SC_SECOND_BRAND , EFST_SECOND_BRAND , SCB_NONE ); - set_sc_with_vfx( IQ_SECOND_JUDGEMENT , SC_SECOND_BRAND , EFST_SECOND_BRAND , SCB_NONE ); - set_sc_with_vfx( IQ_THIRD_EXOR_FLAME , SC_THIRD_EXOR_FLAME , EFST_THIRD_EXOR_FLAME , SCB_NONE ); - - // Biolo - set_sc( BO_ADVANCE_PROTECTION, SC_PROTECTSHADOWEQUIP , EFST_PROTECTSHADOWEQUIP, SCB_NONE ); - set_sc( BO_WOODENWARRIOR , SC_BIONIC_WOODENWARRIOR, EFST_BLANK , SCB_NONE ); - set_sc( BO_WOODEN_FAIRY , SC_BIONIC_WOODEN_FAIRY , EFST_BLANK , SCB_NONE ); - set_sc( BO_CREEPER , SC_BIONIC_CREEPER , EFST_BLANK , SCB_NONE ); - set_sc( BO_RESEARCHREPORT , SC_RESEARCHREPORT , EFST_RESEARCHREPORT , SCB_NONE ); - set_sc( BO_HELLTREE , SC_BIONIC_HELLTREE , EFST_BLANK , SCB_NONE ); - - // Abyss Chaser - set_sc( ABC_STRIP_SHADOW , SC_SHADOW_STRIP , EFST_SHADOW_STRIP , SCB_RES|SCB_MRES ); - set_sc( ABC_ABYSS_DAGGER , SC_ABYSS_DAGGER , EFST_ABYSS_DAGGER , SCB_NONE ); - set_sc_with_vfx( ABC_UNLUCKY_RUSH , SC_HANDICAPSTATE_MISFORTUNE, EFST_HANDICAPSTATE_MISFORTUNE, SCB_HIT); - set_sc( ABC_FROM_THE_ABYSS, SC_ABYSSFORCEWEAPON , EFST_ABYSSFORCEWEAPON , SCB_NONE ); - set_sc_with_vfx( ABC_ABYSS_SLAYER , SC_ABYSS_SLAYER , EFST_ABYSS_SLAYER , SCB_HIT|SCB_PATK|SCB_SMATK ); - - // Super Elementals - set_sc( EM_EL_FLAMETECHNIC , SC_FLAMETECHNIC_OPTION , EFST_FLAMETECHNIC_OPTION , SCB_NONE ); - set_sc( EM_EL_FLAMEARMOR , SC_FLAMEARMOR_OPTION , EFST_FLAMEARMOR_OPTION , SCB_ALL ); - set_sc( EM_EL_COLD_FORCE , SC_COLD_FORCE_OPTION , EFST_COLD_FORCE_OPTION , SCB_NONE ); - set_sc( EM_EL_CRYSTAL_ARMOR , SC_CRYSTAL_ARMOR_OPTION , EFST_CRYSTAL_ARMOR_OPTION , SCB_ALL ); - set_sc( EM_EL_GRACE_BREEZE , SC_GRACE_BREEZE_OPTION , EFST_GRACE_BREEZE_OPTION , SCB_NONE ); - set_sc( EM_EL_EYES_OF_STORM , SC_EYES_OF_STORM_OPTION , EFST_EYES_OF_STORM_OPTION , SCB_ALL ); - set_sc( EM_EL_EARTH_CARE , SC_EARTH_CARE_OPTION , EFST_EARTH_CARE_OPTION , SCB_NONE ); - set_sc( EM_EL_STRONG_PROTECTION, SC_STRONG_PROTECTION_OPTION, EFST_STRONG_PROTECTION_OPTION, SCB_ALL ); - set_sc( EM_EL_DEEP_POISONING , SC_DEEP_POISONING_OPTION , EFST_DEEP_POISONING_OPTION , SCB_NONE ); - set_sc( EM_EL_POISON_SHIELD , SC_POISON_SHIELD_OPTION , EFST_POISON_SHIELD_OPTION , SCB_ALL ); -#endif - - /* Storing the target job rather than simply SC_SPIRIT simplifies code later on */ - SkillStatusChangeTable[skill_get_index(SL_ALCHEMIST)] = (sc_type)MAPID_ALCHEMIST, - SkillStatusChangeTable[skill_get_index(SL_MONK)] = (sc_type)MAPID_MONK, - SkillStatusChangeTable[skill_get_index(SL_STAR)] = (sc_type)MAPID_STAR_GLADIATOR, - SkillStatusChangeTable[skill_get_index(SL_SAGE)] = (sc_type)MAPID_SAGE, - SkillStatusChangeTable[skill_get_index(SL_CRUSADER)] = (sc_type)MAPID_CRUSADER, - SkillStatusChangeTable[skill_get_index(SL_SUPERNOVICE)] = (sc_type)MAPID_SUPER_NOVICE, - SkillStatusChangeTable[skill_get_index(SL_KNIGHT)] = (sc_type)MAPID_KNIGHT, - SkillStatusChangeTable[skill_get_index(SL_WIZARD)] = (sc_type)MAPID_WIZARD, - SkillStatusChangeTable[skill_get_index(SL_PRIEST)] = (sc_type)MAPID_PRIEST, - SkillStatusChangeTable[skill_get_index(SL_BARDDANCER)] = (sc_type)MAPID_BARDDANCER, - SkillStatusChangeTable[skill_get_index(SL_ROGUE)] = (sc_type)MAPID_ROGUE, - SkillStatusChangeTable[skill_get_index(SL_ASSASIN)] = (sc_type)MAPID_ASSASSIN, - SkillStatusChangeTable[skill_get_index(SL_BLACKSMITH)] = (sc_type)MAPID_BLACKSMITH, - SkillStatusChangeTable[skill_get_index(SL_HUNTER)] = (sc_type)MAPID_HUNTER, - SkillStatusChangeTable[skill_get_index(SL_SOULLINKER)] = (sc_type)MAPID_SOUL_LINKER, - - /* Status that don't have a skill associated */ - StatusIconChangeTable[SC_WEIGHT50] = EFST_WEIGHTOVER50; - StatusIconChangeTable[SC_WEIGHT90] = EFST_WEIGHTOVER90; - StatusIconChangeTable[SC_ASPDPOTION0] = EFST_ATTHASTE_POTION1; - StatusIconChangeTable[SC_ASPDPOTION1] = EFST_ATTHASTE_POTION2; - StatusIconChangeTable[SC_ASPDPOTION2] = EFST_ATTHASTE_POTION3; - StatusIconChangeTable[SC_ASPDPOTION3] = EFST_ATTHASTE_INFINITY; - StatusIconChangeTable[SC_SPEEDUP0] = EFST_MOVHASTE_HORSE; - StatusIconChangeTable[SC_SPEEDUP1] = EFST_MOVHASTE_POTION; - StatusIconChangeTable[SC_CHASEWALK2] = EFST_CHASEWALK2; - StatusIconChangeTable[SC_MIRACLE] = EFST_SOULLINK; - StatusIconChangeTable[SC_INTRAVISION] = EFST_CLAIRVOYANCE; - StatusIconChangeTable[SC_STRFOOD] = EFST_FOOD_STR; - StatusIconChangeTable[SC_AGIFOOD] = EFST_FOOD_AGI; - StatusIconChangeTable[SC_VITFOOD] = EFST_FOOD_VIT; - StatusIconChangeTable[SC_INTFOOD] = EFST_FOOD_INT; - StatusIconChangeTable[SC_DEXFOOD] = EFST_FOOD_DEX; - StatusIconChangeTable[SC_LUKFOOD] = EFST_FOOD_LUK; - StatusIconChangeTable[SC_FLEEFOOD] = EFST_FOOD_BASICAVOIDANCE; - StatusIconChangeTable[SC_HITFOOD] = EFST_FOOD_BASICHIT; - StatusIconChangeTable[SC_CRIFOOD] = EFST_FOOD_CRITICALSUCCESSVALUE; - StatusIconChangeTable[SC_MANU_ATK] = EFST_MANU_ATK; - StatusIconChangeTable[SC_MANU_DEF] = EFST_MANU_DEF; - StatusIconChangeTable[SC_SPL_ATK] = EFST_SPL_ATK; - StatusIconChangeTable[SC_SPL_DEF] = EFST_SPL_DEF; - StatusIconChangeTable[SC_MANU_MATK] = EFST_MANU_MATK; - StatusIconChangeTable[SC_SPL_MATK] = EFST_SPL_MATK; - StatusIconChangeTable[SC_ATKPOTION] = EFST_PLUSATTACKPOWER; - StatusIconChangeTable[SC_MATKPOTION] = EFST_PLUSMAGICPOWER; - StatusIconChangeTable[SC_INCREASE_MAXHP] = EFST_ATKER_ASPD; - StatusIconChangeTable[SC_INCREASE_MAXSP] = EFST_ATKER_MOVESPEED; - - /* Cash Items */ - StatusIconChangeTable[SC_FOOD_STR_CASH] = EFST_FOOD_STR_CASH; - StatusIconChangeTable[SC_FOOD_AGI_CASH] = EFST_FOOD_AGI_CASH; - StatusIconChangeTable[SC_FOOD_VIT_CASH] = EFST_FOOD_VIT_CASH; - StatusIconChangeTable[SC_FOOD_DEX_CASH] = EFST_FOOD_DEX_CASH; - StatusIconChangeTable[SC_FOOD_INT_CASH] = EFST_FOOD_INT_CASH; - StatusIconChangeTable[SC_FOOD_LUK_CASH] = EFST_FOOD_LUK_CASH; - StatusIconChangeTable[SC_EXPBOOST] = EFST_CASH_PLUSEXP; - StatusIconChangeTable[SC_ITEMBOOST] = EFST_CASH_RECEIVEITEM; - StatusIconChangeTable[SC_JEXPBOOST] = EFST_CASH_PLUSONLYJOBEXP; - StatusIconChangeTable[SC_LIFEINSURANCE] = EFST_CASH_DEATHPENALTY; - StatusIconChangeTable[SC_BOSSMAPINFO] = EFST_CASH_BOSS_ALARM; - StatusIconChangeTable[SC_DEF_RATE] = EFST_PROTECT_DEF; - StatusIconChangeTable[SC_MDEF_RATE] = EFST_PROTECT_MDEF; - StatusIconChangeTable[SC_INCCRI] = EFST_CRITICALPERCENT; - StatusIconChangeTable[SC_INCFLEE2] = EFST_PLUSAVOIDVALUE; - StatusIconChangeTable[SC_INCHEALRATE] = EFST_HEALPLUS; - StatusIconChangeTable[SC_S_LIFEPOTION] = EFST_S_LIFEPOTION; - StatusIconChangeTable[SC_L_LIFEPOTION] = EFST_L_LIFEPOTION; - StatusIconChangeTable[SC_SPCOST_RATE] = EFST_ATKER_BLOOD; - StatusIconChangeTable[SC_COMMONSC_RESIST] = EFST_TARGET_BLOOD; - StatusIconChangeTable[SC_ATTHASTE_CASH] = EFST_ATTHASTE_CASH; - - /* Mercenary Bonus Effects */ - StatusIconChangeTable[SC_MERC_FLEEUP] = EFST_MER_FLEE; - StatusIconChangeTable[SC_MERC_ATKUP] = EFST_MER_ATK; - StatusIconChangeTable[SC_MERC_HPUP] = EFST_MER_HP; - StatusIconChangeTable[SC_MERC_SPUP] = EFST_MER_SP; - StatusIconChangeTable[SC_MERC_HITUP] = EFST_MER_HIT; - - /* Warlock Spheres */ - StatusIconChangeTable[SC_SPHERE_1] = EFST_SUMMON1; - StatusIconChangeTable[SC_SPHERE_2] = EFST_SUMMON2; - StatusIconChangeTable[SC_SPHERE_3] = EFST_SUMMON3; - StatusIconChangeTable[SC_SPHERE_4] = EFST_SUMMON4; - StatusIconChangeTable[SC_SPHERE_5] = EFST_SUMMON5; - - /* Warlock Preserved spells */ - StatusIconChangeTable[SC_SPELLBOOK1] = EFST_SPELLBOOK1; - StatusIconChangeTable[SC_SPELLBOOK2] = EFST_SPELLBOOK2; - StatusIconChangeTable[SC_SPELLBOOK3] = EFST_SPELLBOOK3; - StatusIconChangeTable[SC_SPELLBOOK4] = EFST_SPELLBOOK4; - StatusIconChangeTable[SC_SPELLBOOK5] = EFST_SPELLBOOK5; - StatusIconChangeTable[SC_SPELLBOOK6] = EFST_SPELLBOOK6; - StatusIconChangeTable[SC_MAXSPELLBOOK] = EFST_SPELLBOOK7; - StatusIconChangeTable[SC_FREEZE_SP] = EFST_FREEZE_SP; - - StatusIconChangeTable[SC_NEUTRALBARRIER_MASTER] = EFST_NEUTRALBARRIER_MASTER; - StatusIconChangeTable[SC_STEALTHFIELD_MASTER] = EFST_STEALTHFIELD_MASTER; - StatusIconChangeTable[SC_OVERHEAT] = EFST_OVERHEAT; - StatusIconChangeTable[SC_OVERHEAT_LIMITPOINT] = EFST_OVERHEAT_LIMITPOINT; - - StatusIconChangeTable[SC_HALLUCINATIONWALK_POSTDELAY] = EFST_HALLUCINATIONWALK_POSTDELAY; - StatusIconChangeTable[SC_TOXIN] = EFST_TOXIN; - StatusIconChangeTable[SC_PARALYSE] = EFST_PARALYSE; - StatusIconChangeTable[SC_VENOMBLEED] = EFST_VENOMBLEED; - StatusIconChangeTable[SC_MAGICMUSHROOM] = EFST_MAGICMUSHROOM; - StatusIconChangeTable[SC_DEATHHURT] = EFST_DEATHHURT; - StatusIconChangeTable[SC_PYREXIA] = EFST_PYREXIA; - StatusIconChangeTable[SC_OBLIVIONCURSE] = EFST_OBLIVIONCURSE; - StatusIconChangeTable[SC_LEECHESEND] = EFST_LEECHESEND; - StatusIconChangeTable[SC_BANDING_DEFENCE] = EFST_BANDING_DEFENCE; - StatusIconChangeTable[SC_SHIELDSPELL_HP] = EFST_SHIELDSPELL; - StatusIconChangeTable[SC_SHIELDSPELL_SP] = EFST_SHIELDSPELL; - StatusIconChangeTable[SC_SHIELDSPELL_ATK] = EFST_SHIELDSPELL; - StatusIconChangeTable[SC_GLOOMYDAY_SK] = EFST_GLOOMYDAY; - - StatusIconChangeTable[SC_CURSEDCIRCLE_ATKER] = EFST_CURSEDCIRCLE_ATKER; - StatusIconChangeTable[SC__BLOODYLUST] = EFST_BLOODYLUST; - StatusIconChangeTable[SC_MYSTERIOUS_POWDER] = EFST_MYSTERIOUS_POWDER; - StatusIconChangeTable[SC_MELON_BOMB] = EFST_MELON_BOMB; - StatusIconChangeTable[SC_BANANA_BOMB] = EFST_BANANA_BOMB; - StatusIconChangeTable[SC_BANANA_BOMB_SITDOWN] = EFST_BANANA_BOMB_SITDOWN_POSTDELAY; - StatusIconChangeTable[SC_PROMOTE_HEALTH_RESERCH] = EFST_PROMOTE_HEALTH_RESERCH; - StatusIconChangeTable[SC_ENERGY_DRINK_RESERCH] = EFST_ENERGY_DRINK_RESERCH; - - /* Genetics New Food Items Status Icons */ - StatusIconChangeTable[SC_SAVAGE_STEAK] = EFST_SAVAGE_STEAK; - StatusIconChangeTable[SC_COCKTAIL_WARG_BLOOD] = EFST_COCKTAIL_WARG_BLOOD; - StatusIconChangeTable[SC_MINOR_BBQ] = EFST_MINOR_BBQ; - StatusIconChangeTable[SC_SIROMA_ICE_TEA] = EFST_SIROMA_ICE_TEA; - StatusIconChangeTable[SC_DROCERA_HERB_STEAMED] = EFST_DROCERA_HERB_STEAMED; - StatusIconChangeTable[SC_PUTTI_TAILS_NOODLES] = EFST_PUTTI_TAILS_NOODLES; - StatusIconChangeTable[SC_STOMACHACHE] = EFST_STOMACHACHE; - StatusIconChangeTable[SC_EXTRACT_WHITE_POTION_Z] = EFST_EXTRACT_WHITE_POTION_Z; - StatusIconChangeTable[SC_VITATA_500] = EFST_VITATA_500; - StatusIconChangeTable[SC_EXTRACT_SALAMINE_JUICE] = EFST_EXTRACT_SALAMINE_JUICE; - StatusIconChangeTable[SC_BOOST500] = EFST_BOOST500; - StatusIconChangeTable[SC_FULL_SWING_K] = EFST_FULL_SWING_K; - StatusIconChangeTable[SC_MANA_PLUS] = EFST_MANA_PLUS; - StatusIconChangeTable[SC_MUSTLE_M] = EFST_MUSTLE_M; - StatusIconChangeTable[SC_LIFE_FORCE_F] = EFST_LIFE_FORCE_F; - - /* Elemental Spirit's 'side' status change icons */ - StatusIconChangeTable[SC_CIRCLE_OF_FIRE] = EFST_CIRCLE_OF_FIRE; - StatusIconChangeTable[SC_FIRE_CLOAK] = EFST_FIRE_CLOAK; - StatusIconChangeTable[SC_WATER_SCREEN] = EFST_WATER_SCREEN; - StatusIconChangeTable[SC_WATER_DROP] = EFST_WATER_DROP; - StatusIconChangeTable[SC_WIND_STEP] = EFST_WIND_STEP; - StatusIconChangeTable[SC_WIND_CURTAIN] = EFST_WIND_CURTAIN; - StatusIconChangeTable[SC_SOLID_SKIN] = EFST_SOLID_SKIN; - StatusIconChangeTable[SC_STONE_SHIELD] = EFST_STONE_SHIELD; - StatusIconChangeTable[SC_PYROTECHNIC] = EFST_PYROTECHNIC; - StatusIconChangeTable[SC_HEATER] = EFST_HEATER; - StatusIconChangeTable[SC_TROPIC] = EFST_TROPIC; - StatusIconChangeTable[SC_AQUAPLAY] = EFST_AQUAPLAY; - StatusIconChangeTable[SC_COOLER] = EFST_COOLER; - StatusIconChangeTable[SC_CHILLY_AIR] = EFST_CHILLY_AIR; - StatusIconChangeTable[SC_GUST] = EFST_GUST; - StatusIconChangeTable[SC_BLAST] = EFST_BLAST; - StatusIconChangeTable[SC_WILD_STORM] = EFST_WILD_STORM; - StatusIconChangeTable[SC_PETROLOGY] = EFST_PETROLOGY; - StatusIconChangeTable[SC_CURSED_SOIL] = EFST_CURSED_SOIL; - StatusIconChangeTable[SC_UPHEAVAL] = EFST_UPHEAVAL; - - StatusIconChangeTable[SC_REBOUND] = EFST_REBOUND; - StatusIconChangeTable[SC_DEFSET] = EFST_SET_NUM_DEF; - StatusIconChangeTable[SC_MDEFSET] = EFST_SET_NUM_MDEF; - StatusIconChangeTable[SC_MONSTER_TRANSFORM] = EFST_MONSTER_TRANSFORM; - StatusIconChangeTable[SC_ACTIVE_MONSTER_TRANSFORM] = EFST_ACTIVE_MONSTER_TRANSFORM; - StatusIconChangeTable[SC_ALL_RIDING] = EFST_ALL_RIDING; - StatusIconChangeTable[SC_PUSH_CART] = EFST_ON_PUSH_CART; - StatusIconChangeTable[SC_MTF_ASPD] = EFST_MTF_ASPD; - StatusIconChangeTable[SC_MTF_RANGEATK] = EFST_MTF_RANGEATK; - StatusIconChangeTable[SC_MTF_MATK] = EFST_MTF_MATK; - StatusIconChangeTable[SC_MTF_MLEATKED] = EFST_MTF_MLEATKED; - StatusIconChangeTable[SC_MTF_CRIDAMAGE] = EFST_MTF_CRIDAMAGE; - StatusIconChangeTable[SC_QD_SHOT_READY] = EFST_E_QD_SHOT_READY; - StatusIconChangeTable[SC_QUEST_BUFF1] = EFST_QUEST_BUFF1; - StatusIconChangeTable[SC_QUEST_BUFF2] = EFST_QUEST_BUFF2; - StatusIconChangeTable[SC_QUEST_BUFF3] = EFST_QUEST_BUFF3; - StatusIconChangeTable[SC_MTF_ASPD2] = EFST_MTF_ASPD2; - StatusIconChangeTable[SC_MTF_RANGEATK2] = EFST_MTF_RANGEATK2; - StatusIconChangeTable[SC_MTF_MATK2] = EFST_MTF_MATK2; - StatusIconChangeTable[SC_2011RWC_SCROLL] = EFST_2011RWC_SCROLL; - StatusIconChangeTable[SC_JP_EVENT04] = EFST_JP_EVENT04; - StatusIconChangeTable[SC_MTF_HITFLEE] = EFST_MTF_HITFLEE; - StatusIconChangeTable[SC_MTF_MHP] = EFST_MTF_MHP; - StatusIconChangeTable[SC_MTF_MSP] = EFST_MTF_MSP; - StatusIconChangeTable[SC_MTF_PUMPKIN] = EFST_MTF_PUMPKIN; - StatusIconChangeTable[SC_NORECOVER_STATE] = EFST_HANDICAPSTATE_NORECOVER; - StatusIconChangeTable[SC_GVG_GIANT] = EFST_GVG_GIANT; - StatusIconChangeTable[SC_GVG_GOLEM] = EFST_GVG_GOLEM; - StatusIconChangeTable[SC_GVG_STUN] = EFST_GVG_STUN; - StatusIconChangeTable[SC_GVG_STONE] = EFST_GVG_STONE; - StatusIconChangeTable[SC_GVG_FREEZ] = EFST_GVG_FREEZ; - StatusIconChangeTable[SC_GVG_SLEEP] = EFST_GVG_SLEEP; - StatusIconChangeTable[SC_GVG_CURSE] = EFST_GVG_CURSE; - StatusIconChangeTable[SC_GVG_SILENCE] = EFST_GVG_SILENCE; - StatusIconChangeTable[SC_GVG_BLIND] = EFST_GVG_BLIND; - StatusIconChangeTable[SC_ARMOR_ELEMENT_WATER] = EFST_RESIST_PROPERTY_WATER; - StatusIconChangeTable[SC_ARMOR_ELEMENT_EARTH] = EFST_RESIST_PROPERTY_GROUND; - StatusIconChangeTable[SC_ARMOR_ELEMENT_FIRE] = EFST_RESIST_PROPERTY_FIRE; - StatusIconChangeTable[SC_ARMOR_ELEMENT_WIND] = EFST_RESIST_PROPERTY_WIND; - - // Costumes - StatusIconChangeTable[SC_MOONSTAR] = EFST_MOONSTAR; - StatusIconChangeTable[SC_SUPER_STAR] = EFST_SUPER_STAR; - StatusIconChangeTable[SC_STRANGELIGHTS] = EFST_STRANGELIGHTS; - StatusIconChangeTable[SC_DECORATION_OF_MUSIC] = EFST_DECORATION_OF_MUSIC; - StatusIconChangeTable[SC_LJOSALFAR] = EFST_LJOSALFAR; - StatusIconChangeTable[SC_MERMAID_LONGING] = EFST_MERMAID_LONGING; - StatusIconChangeTable[SC_HAT_EFFECT] = EFST_HAT_EFFECT; - StatusIconChangeTable[SC_FLOWERSMOKE] = EFST_FLOWERSMOKE; - StatusIconChangeTable[SC_FSTONE] = EFST_FSTONE; - StatusIconChangeTable[SC_HAPPINESS_STAR] = EFST_HAPPINESS_STAR; - StatusIconChangeTable[SC_MAPLE_FALLS] = EFST_MAPLE_FALLS; - StatusIconChangeTable[SC_TIME_ACCESSORY] = EFST_TIME_ACCESSORY; - StatusIconChangeTable[SC_MAGICAL_FEATHER] = EFST_MAGICAL_FEATHER; - - /* Summoners status icons */ - StatusIconChangeTable[SC_SPRITEMABLE] = EFST_SPRITEMABLE; - StatusIconChangeTable[SC_DORAM_BUF_01] = EFST_DORAM_BUF_01; - StatusIconChangeTable[SC_DORAM_BUF_02] = EFST_DORAM_BUF_02; - StatusIconChangeTable[SC_SOULATTACK] = EFST_SOULATTACK; - - StatusIconChangeTable[SC_CHILL] = EFST_CHILL; - - // Item Reuse Limits - StatusIconChangeTable[SC_REUSE_REFRESH] = EFST_REUSE_REFRESH; - StatusIconChangeTable[SC_REUSE_LIMIT_A] = EFST_REUSE_LIMIT_A; - StatusIconChangeTable[SC_REUSE_LIMIT_B] = EFST_REUSE_LIMIT_B; - StatusIconChangeTable[SC_REUSE_LIMIT_C] = EFST_REUSE_LIMIT_C; - StatusIconChangeTable[SC_REUSE_LIMIT_D] = EFST_REUSE_LIMIT_D; - StatusIconChangeTable[SC_REUSE_LIMIT_E] = EFST_REUSE_LIMIT_E; - StatusIconChangeTable[SC_REUSE_LIMIT_F] = EFST_REUSE_LIMIT_F; - StatusIconChangeTable[SC_REUSE_LIMIT_G] = EFST_REUSE_LIMIT_G; - StatusIconChangeTable[SC_REUSE_LIMIT_H] = EFST_REUSE_LIMIT_H; - StatusIconChangeTable[SC_REUSE_LIMIT_MTF] = EFST_REUSE_LIMIT_MTF; - StatusIconChangeTable[SC_REUSE_LIMIT_ECL] = EFST_REUSE_LIMIT_ECL; - StatusIconChangeTable[SC_REUSE_LIMIT_RECALL] = EFST_REUSE_LIMIT_RECALL; - StatusIconChangeTable[SC_REUSE_LIMIT_ASPD_POTION] = EFST_REUSE_LIMIT_ASPD_POTION; - StatusIconChangeTable[SC_REUSE_MILLENNIUMSHIELD] = EFST_REUSE_MILLENNIUMSHIELD; - StatusIconChangeTable[SC_REUSE_CRUSHSTRIKE] = EFST_REUSE_CRUSHSTRIKE; - StatusIconChangeTable[SC_REUSE_STORMBLAST] = EFST_REUSE_STORMBLAST; - StatusIconChangeTable[SC_ALL_RIDING_REUSE_LIMIT] = EFST_ALL_RIDING_REUSE_LIMIT; - - // Clan System - StatusIconChangeTable[SC_CLAN_INFO] = EFST_CLAN_INFO; - StatusIconChangeTable[SC_SWORDCLAN] = EFST_SWORDCLAN; - StatusIconChangeTable[SC_ARCWANDCLAN] = EFST_ARCWANDCLAN; - StatusIconChangeTable[SC_GOLDENMACECLAN] = EFST_GOLDENMACECLAN; - StatusIconChangeTable[SC_CROSSBOWCLAN] = EFST_CROSSBOWCLAN; - StatusIconChangeTable[SC_JUMPINGCLAN] = EFST_JUMPINGCLAN; - - // Geffen Magic Tournament Buffs - StatusIconChangeTable[SC_GEFFEN_MAGIC1] = EFST_GEFFEN_MAGIC1; - StatusIconChangeTable[SC_GEFFEN_MAGIC2] = EFST_GEFFEN_MAGIC2; - StatusIconChangeTable[SC_GEFFEN_MAGIC3] = EFST_GEFFEN_MAGIC3; - - // RODEX - StatusIconChangeTable[SC_DAILYSENDMAILCNT] = EFST_DAILYSENDMAILCNT; - - StatusIconChangeTable[SC_DRESSUP] = EFST_DRESS_UP; - - // Old Glast Heim - StatusIconChangeTable[SC_GLASTHEIM_ATK] = EFST_GLASTHEIM_ATK; - StatusIconChangeTable[SC_GLASTHEIM_DEF] = EFST_GLASTHEIM_DEF; - StatusIconChangeTable[SC_GLASTHEIM_HEAL] = EFST_GLASTHEIM_HEAL; - StatusIconChangeTable[SC_GLASTHEIM_HIDDEN] = EFST_GLASTHEIM_HIDDEN; - StatusIconChangeTable[SC_GLASTHEIM_STATE] = EFST_GLASTHEIM_STATE; - StatusIconChangeTable[SC_GLASTHEIM_ITEMDEF] = EFST_GLASTHEIM_ITEMDEF; - StatusIconChangeTable[SC_GLASTHEIM_HPSP] = EFST_GLASTHEIM_HPSP; - - // Nightmare Biolab - StatusIconChangeTable[SC_LHZ_DUN_N1] = EFST_LHZ_DUN_N1; - StatusIconChangeTable[SC_LHZ_DUN_N2] = EFST_LHZ_DUN_N2; - StatusIconChangeTable[SC_LHZ_DUN_N3] = EFST_LHZ_DUN_N3; - StatusIconChangeTable[SC_LHZ_DUN_N4] = EFST_LHZ_DUN_N4; - - StatusIconChangeTable[SC_ANCILLA] = EFST_ANCILLA; - StatusIconChangeTable[SC_WEAPONBLOCK_ON] = EFST_WEAPONBLOCK_ON; - StatusIconChangeTable[SC_REF_T_POTION] = EFST_REF_T_POTION; - StatusIconChangeTable[SC_ADD_ATK_DAMAGE] = EFST_ADD_ATK_DAMAGE; - StatusIconChangeTable[SC_ADD_MATK_DAMAGE] = EFST_ADD_MATK_DAMAGE; - StatusIconChangeTable[SC_ENSEMBLEFATIGUE] = EFST_ENSEMBLEFATIGUE; - StatusIconChangeTable[SC_MISTY_FROST] = EFST_MISTY_FROST; - - // Battleground Queue - StatusIconChangeTable[SC_ENTRY_QUEUE_APPLY_DELAY] = EFST_ENTRY_QUEUE_APPLY_DELAY; - StatusIconChangeTable[SC_ENTRY_QUEUE_NOTIFY_ADMISSION_TIME_OUT] = EFST_ENTRY_QUEUE_NOTIFY_ADMISSION_TIME_OUT; - - // Soul Reaper - StatusIconChangeTable[SC_SOULENERGY] = EFST_SOULENERGY; - StatusIconChangeTable[SC_USE_SKILL_SP_SPA] = EFST_USE_SKILL_SP_SPA; - StatusIconChangeTable[SC_USE_SKILL_SP_SHA] = EFST_USE_SKILL_SP_SHA; - - // ep16.2 - StatusIconChangeTable[SC_EP16_2_BUFF_SS] = EFST_EP16_2_BUFF_SS; - StatusIconChangeTable[SC_EP16_2_BUFF_SC] = EFST_EP16_2_BUFF_SC; - StatusIconChangeTable[SC_EP16_2_BUFF_AC] = EFST_EP16_2_BUFF_AC; - -#if PACKETVER_MAIN_NUM >= 20191120 || PACKETVER_RE_NUM >= 20191106 - StatusIconChangeTable[SC_MADOGEAR] = EFST_MADOGEAR; -#else - StatusIconChangeTable[SC_MADOGEAR] = EFST_RIDING; -#endif - - // ep15 - StatusIconChangeTable[SC_PACKING_ENVELOPE1] = EFST_PACKING_ENVELOPE1; - StatusIconChangeTable[SC_PACKING_ENVELOPE2] = EFST_PACKING_ENVELOPE2; - StatusIconChangeTable[SC_PACKING_ENVELOPE3] = EFST_PACKING_ENVELOPE3; - StatusIconChangeTable[SC_PACKING_ENVELOPE4] = EFST_PACKING_ENVELOPE4; - StatusIconChangeTable[SC_PACKING_ENVELOPE5] = EFST_PACKING_ENVELOPE5; - StatusIconChangeTable[SC_PACKING_ENVELOPE6] = EFST_PACKING_ENVELOPE6; - StatusIconChangeTable[SC_PACKING_ENVELOPE7] = EFST_PACKING_ENVELOPE7; - StatusIconChangeTable[SC_PACKING_ENVELOPE8] = EFST_PACKING_ENVELOPE8; - StatusIconChangeTable[SC_PACKING_ENVELOPE9] = EFST_PACKING_ENVELOPE9; - StatusIconChangeTable[SC_PACKING_ENVELOPE10] = EFST_PACKING_ENVELOPE10; - - // 4th Jobs - StatusIconChangeTable[SC_CHARGINGPIERCE_COUNT] = EFST_CHARGINGPIERCE_COUNT; - StatusIconChangeTable[SC_SHADOW_SCAR] = EFST_SHADOW_SCAR; - StatusIconChangeTable[SC_BO_HELL_DUSTY] = EFST_BO_HELL_DUSTY; - - // Super Elementals - StatusIconChangeTable[SC_FLAMETECHNIC] = EFST_FLAMETECHNIC; - StatusIconChangeTable[SC_FLAMEARMOR] = EFST_FLAMEARMOR; - StatusIconChangeTable[SC_COLD_FORCE] = EFST_COLD_FORCE; - StatusIconChangeTable[SC_CRYSTAL_ARMOR] = EFST_CRYSTAL_ARMOR; - StatusIconChangeTable[SC_GRACE_BREEZE] = EFST_GRACE_BREEZE; - StatusIconChangeTable[SC_EYES_OF_STORM] = EFST_EYES_OF_STORM; - StatusIconChangeTable[SC_EARTH_CARE] = EFST_EARTH_CARE; - StatusIconChangeTable[SC_STRONG_PROTECTION] = EFST_STRONG_PROTECTION; - StatusIconChangeTable[SC_DEEP_POISONING] = EFST_DEEP_POISONING; - StatusIconChangeTable[SC_POISON_SHIELD] = EFST_POISON_SHIELD; - - /* Other SC which are not necessarily associated to skills */ - StatusChangeFlagTable[SC_ASPDPOTION0] |= SCB_ASPD; - StatusChangeFlagTable[SC_ASPDPOTION1] |= SCB_ASPD; - StatusChangeFlagTable[SC_ASPDPOTION2] |= SCB_ASPD; - StatusChangeFlagTable[SC_ASPDPOTION3] |= SCB_ASPD; - StatusChangeFlagTable[SC_SPEEDUP0] |= SCB_SPEED; - StatusChangeFlagTable[SC_SPEEDUP1] |= SCB_SPEED; - StatusChangeFlagTable[SC_ATKPOTION] |= SCB_BATK; - StatusChangeFlagTable[SC_MATKPOTION] |= SCB_MATK; - StatusChangeFlagTable[SC_INCALLSTATUS] |= SCB_STR|SCB_AGI|SCB_VIT|SCB_INT|SCB_DEX|SCB_LUK; - StatusChangeFlagTable[SC_INCSTR] |= SCB_STR; - StatusChangeFlagTable[SC_INCAGI] |= SCB_AGI; - StatusChangeFlagTable[SC_INCVIT] |= SCB_VIT; - StatusChangeFlagTable[SC_INCINT] |= SCB_INT; - StatusChangeFlagTable[SC_INCDEX] |= SCB_DEX; - StatusChangeFlagTable[SC_INCLUK] |= SCB_LUK; - StatusChangeFlagTable[SC_INCHIT] |= SCB_HIT; - StatusChangeFlagTable[SC_INCHITRATE] |= SCB_HIT; - StatusChangeFlagTable[SC_INCFLEE] |= SCB_FLEE; - StatusChangeFlagTable[SC_INCFLEERATE] |= SCB_FLEE; - StatusChangeFlagTable[SC_INCCRI] |= SCB_CRI; - StatusChangeFlagTable[SC_INCASPDRATE] |= SCB_ASPD; - StatusChangeFlagTable[SC_INCFLEE2] |= SCB_FLEE2; - StatusChangeFlagTable[SC_INCMHPRATE] |= SCB_MAXHP; - StatusChangeFlagTable[SC_INCMSPRATE] |= SCB_MAXSP; - StatusChangeFlagTable[SC_INCMHP] |= SCB_MAXHP; - StatusChangeFlagTable[SC_INCMSP] |= SCB_MAXSP; - StatusChangeFlagTable[SC_INCATKRATE] |= SCB_BATK|SCB_WATK; - StatusChangeFlagTable[SC_INCMATKRATE] |= SCB_MATK; - StatusChangeFlagTable[SC_INCDEFRATE] |= SCB_DEF; - StatusChangeFlagTable[SC_STRFOOD] |= SCB_STR; - StatusChangeFlagTable[SC_AGIFOOD] |= SCB_AGI; - StatusChangeFlagTable[SC_VITFOOD] |= SCB_VIT; - StatusChangeFlagTable[SC_INTFOOD] |= SCB_INT; - StatusChangeFlagTable[SC_DEXFOOD] |= SCB_DEX; - StatusChangeFlagTable[SC_LUKFOOD] |= SCB_LUK; - StatusChangeFlagTable[SC_FLEEFOOD] |= SCB_FLEE; - StatusChangeFlagTable[SC_HITFOOD] |= SCB_HIT; - StatusChangeFlagTable[SC_CRIFOOD] |= SCB_CRI; - StatusChangeFlagTable[SC_BATKFOOD] |= SCB_BATK; - StatusChangeFlagTable[SC_WATKFOOD] |= SCB_WATK; - StatusChangeFlagTable[SC_MATKFOOD] |= SCB_MATK; - StatusChangeFlagTable[SC_ARMOR_ELEMENT_WATER] |= SCB_ALL; - StatusChangeFlagTable[SC_ARMOR_ELEMENT_EARTH] |= SCB_ALL; - StatusChangeFlagTable[SC_ARMOR_ELEMENT_FIRE] |= SCB_ALL; - StatusChangeFlagTable[SC_ARMOR_ELEMENT_WIND] |= SCB_ALL; - StatusChangeFlagTable[SC_ARMOR_RESIST] |= SCB_ALL; - StatusChangeFlagTable[SC_SPCOST_RATE] |= SCB_ALL; - StatusChangeFlagTable[SC_WALKSPEED] |= SCB_SPEED; - StatusChangeFlagTable[SC_ITEMSCRIPT] |= SCB_ALL; - StatusChangeFlagTable[SC_SLOWDOWN] |= SCB_SPEED; - StatusChangeFlagTable[SC_CHASEWALK2] |= SCB_STR; - StatusChangeFlagTable[SC_GEFFEN_MAGIC1] |= SCB_ALL; - StatusChangeFlagTable[SC_GEFFEN_MAGIC2] |= SCB_ALL; - StatusChangeFlagTable[SC_GEFFEN_MAGIC3] |= SCB_ALL; - StatusChangeFlagTable[SC_INCREASE_MAXHP] |= SCB_MAXHP|SCB_REGEN; - StatusChangeFlagTable[SC_INCREASE_MAXSP] |= SCB_MAXSP|SCB_REGEN; - - /* Cash Items */ - StatusChangeFlagTable[SC_FOOD_STR_CASH] |= SCB_STR; - StatusChangeFlagTable[SC_FOOD_AGI_CASH] |= SCB_AGI; - StatusChangeFlagTable[SC_FOOD_VIT_CASH] |= SCB_VIT; - StatusChangeFlagTable[SC_FOOD_DEX_CASH] |= SCB_DEX; - StatusChangeFlagTable[SC_FOOD_INT_CASH] |= SCB_INT; - StatusChangeFlagTable[SC_FOOD_LUK_CASH] |= SCB_LUK; - StatusChangeFlagTable[SC_ATTHASTE_CASH] |= SCB_ASPD; - - /* Mercenary Bonus Effects */ - StatusChangeFlagTable[SC_MERC_FLEEUP] |= SCB_FLEE; - StatusChangeFlagTable[SC_MERC_ATKUP] |= SCB_WATK; - StatusChangeFlagTable[SC_MERC_HPUP] |= SCB_MAXHP; - StatusChangeFlagTable[SC_MERC_SPUP] |= SCB_MAXSP; - StatusChangeFlagTable[SC_MERC_HITUP] |= SCB_HIT; - - StatusChangeFlagTable[SC_HALLUCINATIONWALK_POSTDELAY] |= SCB_SPEED|SCB_ASPD; - StatusChangeFlagTable[SC_PARALYSE] |= SCB_FLEE|SCB_SPEED|SCB_ASPD; - StatusChangeFlagTable[SC_DEATHHURT] |= SCB_REGEN; - StatusChangeFlagTable[SC_VENOMBLEED] |= SCB_MAXHP; - StatusChangeFlagTable[SC_MAGICMUSHROOM] |= SCB_REGEN; - StatusChangeFlagTable[SC_PYREXIA] |= SCB_ALL; - StatusChangeFlagTable[SC_OBLIVIONCURSE] |= SCB_REGEN; - StatusChangeFlagTable[SC_BANDING_DEFENCE] |= SCB_SPEED; - StatusChangeFlagTable[SC_SHIELDSPELL_ATK] |= SCB_WATK|SCB_MATK; - StatusChangeFlagTable[SC_STOMACHACHE] |= SCB_STR|SCB_AGI|SCB_VIT|SCB_DEX|SCB_INT|SCB_LUK; - StatusChangeFlagTable[SC_MYSTERIOUS_POWDER] |= SCB_MAXHP; - StatusChangeFlagTable[SC_MELON_BOMB] |= SCB_SPEED|SCB_ASPD; - StatusChangeFlagTable[SC_BANANA_BOMB] |= SCB_LUK; - StatusChangeFlagTable[SC_PROMOTE_HEALTH_RESERCH] |= SCB_MAXHP; - StatusChangeFlagTable[SC_ENERGY_DRINK_RESERCH] |= SCB_MAXSP; - StatusChangeFlagTable[SC_SAVAGE_STEAK] |= SCB_STR; - StatusChangeFlagTable[SC_COCKTAIL_WARG_BLOOD] |= SCB_INT; - StatusChangeFlagTable[SC_MINOR_BBQ] |= SCB_VIT; - StatusChangeFlagTable[SC_SIROMA_ICE_TEA] |= SCB_DEX; - StatusChangeFlagTable[SC_DROCERA_HERB_STEAMED] |= SCB_AGI; - StatusChangeFlagTable[SC_PUTTI_TAILS_NOODLES] |= SCB_LUK; - StatusChangeFlagTable[SC_BOOST500] |= SCB_ASPD; - StatusChangeFlagTable[SC_FULL_SWING_K] |= SCB_BATK; - StatusChangeFlagTable[SC_MANA_PLUS] |= SCB_MATK; - StatusChangeFlagTable[SC_MUSTLE_M] |= SCB_MAXHP; - StatusChangeFlagTable[SC_LIFE_FORCE_F] |= SCB_MAXSP; - StatusChangeFlagTable[SC_EXTRACT_WHITE_POTION_Z] |= SCB_REGEN; - StatusChangeFlagTable[SC_VITATA_500] |= SCB_REGEN|SCB_MAXSP; - StatusChangeFlagTable[SC_EXTRACT_SALAMINE_JUICE] |= SCB_ASPD; - StatusChangeFlagTable[SC_REBOUND] |= SCB_SPEED|SCB_REGEN; - StatusChangeFlagTable[SC_DEFSET] |= SCB_DEF|SCB_DEF2; - StatusChangeFlagTable[SC_MDEFSET] |= SCB_MDEF|SCB_MDEF2; - StatusChangeFlagTable[SC_WEDDING] |= SCB_SPEED; - StatusChangeFlagTable[SC_ALL_RIDING] |= SCB_SPEED; - StatusChangeFlagTable[SC_PUSH_CART] |= SCB_SPEED; - StatusChangeFlagTable[SC_MTF_ASPD] |= SCB_ASPD|SCB_HIT; - StatusChangeFlagTable[SC_MTF_MATK] |= SCB_MATK; - StatusChangeFlagTable[SC_MTF_MLEATKED] |= SCB_ALL; - StatusChangeFlagTable[SC_MTF_CRIDAMAGE] |= SCB_ALL; - StatusChangeFlagTable[SC_QUEST_BUFF1] |= SCB_BATK|SCB_MATK; - StatusChangeFlagTable[SC_QUEST_BUFF2] |= SCB_BATK|SCB_MATK; - StatusChangeFlagTable[SC_QUEST_BUFF3] |= SCB_BATK|SCB_MATK; - StatusChangeFlagTable[SC_MTF_ASPD2] |= SCB_ASPD|SCB_HIT; - StatusChangeFlagTable[SC_MTF_MATK2] |= SCB_MATK; - StatusChangeFlagTable[SC_2011RWC_SCROLL] |= SCB_BATK|SCB_MATK|SCB_STR|SCB_AGI|SCB_VIT|SCB_INT|SCB_DEX|SCB_LUK; - StatusChangeFlagTable[SC_MTF_HITFLEE] |= SCB_HIT|SCB_FLEE|SCB_CRI; - StatusChangeFlagTable[SC_MTF_MHP] |= SCB_MAXHP; - StatusChangeFlagTable[SC_MTF_MSP] |= SCB_MAXSP; - - // Costumes - StatusChangeFlagTable[SC_MOONSTAR] |= SCB_NONE; - StatusChangeFlagTable[SC_SUPER_STAR] |= SCB_NONE; - StatusChangeFlagTable[SC_STRANGELIGHTS] |= SCB_NONE; - StatusChangeFlagTable[SC_DECORATION_OF_MUSIC] |= SCB_NONE; - StatusChangeFlagTable[SC_LJOSALFAR] |= SCB_NONE; - StatusChangeFlagTable[SC_MERMAID_LONGING] |= SCB_NONE; - StatusChangeFlagTable[SC_HAT_EFFECT] |= SCB_NONE; - StatusChangeFlagTable[SC_FLOWERSMOKE] |= SCB_NONE; - StatusChangeFlagTable[SC_FSTONE] |= SCB_NONE; - StatusChangeFlagTable[SC_HAPPINESS_STAR] |= SCB_NONE; - StatusChangeFlagTable[SC_MAPLE_FALLS] |= SCB_NONE; - StatusChangeFlagTable[SC_TIME_ACCESSORY] |= SCB_NONE; - StatusChangeFlagTable[SC_MAGICAL_FEATHER] |= SCB_NONE; - - // Clan System - StatusChangeFlagTable[SC_CLAN_INFO] |= SCB_NONE; - StatusChangeFlagTable[SC_SWORDCLAN] |= SCB_STR|SCB_VIT|SCB_MAXHP|SCB_MAXSP; - StatusChangeFlagTable[SC_ARCWANDCLAN] |= SCB_INT|SCB_DEX|SCB_MAXHP|SCB_MAXSP; - StatusChangeFlagTable[SC_GOLDENMACECLAN] |= SCB_LUK|SCB_INT|SCB_MAXHP|SCB_MAXSP; - StatusChangeFlagTable[SC_CROSSBOWCLAN] |= SCB_DEX|SCB_AGI|SCB_MAXHP|SCB_MAXSP; - StatusChangeFlagTable[SC_JUMPINGCLAN] |= SCB_STR|SCB_AGI|SCB_VIT|SCB_INT|SCB_DEX|SCB_LUK; - - // RODEX - StatusChangeFlagTable[SC_DAILYSENDMAILCNT] |= SCB_NONE; - - // Old Glast Heim - StatusChangeFlagTable[SC_GLASTHEIM_ATK] |= SCB_ALL; - StatusChangeFlagTable[SC_GLASTHEIM_STATE] |= SCB_STR|SCB_AGI|SCB_VIT|SCB_DEX|SCB_INT|SCB_LUK; - StatusChangeFlagTable[SC_GLASTHEIM_ITEMDEF] |= SCB_DEF|SCB_MDEF; - StatusChangeFlagTable[SC_GLASTHEIM_HPSP] |= SCB_MAXHP|SCB_MAXSP; - - // Battleground Queue - StatusChangeFlagTable[SC_ENTRY_QUEUE_APPLY_DELAY] |= SCB_NONE; - StatusChangeFlagTable[SC_ENTRY_QUEUE_NOTIFY_ADMISSION_TIME_OUT] |= SCB_NONE; - - // Summoner - StatusChangeFlagTable[SC_DORAM_WALKSPEED] |= SCB_SPEED; - StatusChangeFlagTable[SC_DORAM_MATK] |= SCB_MATK; - StatusChangeFlagTable[SC_DORAM_FLEE2] |= SCB_FLEE2; - StatusChangeFlagTable[SC_DORAM_BUF_01] |= SCB_REGEN; - StatusChangeFlagTable[SC_DORAM_BUF_02] |= SCB_REGEN; - - // Soul Reaper - StatusChangeFlagTable[SC_SOULENERGY] |= SCB_NONE; - StatusChangeFlagTable[SC_USE_SKILL_SP_SPA] |= SCB_NONE; - StatusChangeFlagTable[SC_USE_SKILL_SP_SHA] |= SCB_NONE; - - StatusChangeFlagTable[SC_ANCILLA] |= SCB_REGEN; - StatusChangeFlagTable[SC_ENSEMBLEFATIGUE] |= SCB_SPEED|SCB_ASPD; - StatusChangeFlagTable[SC_MISTY_FROST] |= SCB_NONE; - - // ep16.2 - StatusChangeFlagTable[SC_EP16_2_BUFF_SS] |= SCB_ASPD; - StatusChangeFlagTable[SC_EP16_2_BUFF_SC] |= SCB_CRI; - StatusChangeFlagTable[SC_EP16_2_BUFF_AC] |= SCB_NONE; - - // 4th Job Common Status - StatusChangeFlagTable[SC_HANDICAPSTATE_DEEPBLIND] |= SCB_FLEE|SCB_FLEE2; - StatusChangeFlagTable[SC_HANDICAPSTATE_DEEPSILENCE] |= SCB_ASPD; - StatusChangeFlagTable[SC_HANDICAPSTATE_LASSITUDE] |= SCB_SPEED|SCB_CRI; - StatusChangeFlagTable[SC_HANDICAPSTATE_FROSTBITE] |= SCB_DEF|SCB_MDEF|SCB_DEF_ELE; - StatusChangeFlagTable[SC_HANDICAPSTATE_SWOONING] |= SCB_NONE; - StatusChangeFlagTable[SC_HANDICAPSTATE_LIGHTNINGSTRIKE] |= SCB_NONE|SCB_DEF_ELE; - StatusChangeFlagTable[SC_HANDICAPSTATE_CRYSTALLIZATION] |= SCB_MDEF|SCB_DEF_ELE; - StatusChangeFlagTable[SC_HANDICAPSTATE_CONFLAGRATION] |= SCB_NONE; - StatusChangeFlagTable[SC_HANDICAPSTATE_MISFORTUNE] |= SCB_HIT; - StatusChangeFlagTable[SC_HANDICAPSTATE_DEADLYPOISON] |= SCB_DEF; - StatusChangeFlagTable[SC_HANDICAPSTATE_DEPRESSION] |= SCB_NONE; - StatusChangeFlagTable[SC_HANDICAPSTATE_HOLYFLAME] |= SCB_NONE; - - // 4th Jobs - StatusChangeFlagTable[SC_CHARGINGPIERCE_COUNT] |= SCB_NONE; - StatusChangeFlagTable[SC_SHADOW_SCAR] |= SCB_NONE; - StatusChangeFlagTable[SC_BO_HELL_DUSTY] |= SCB_NONE; - -#ifdef RENEWAL - // renewal EDP increases your weapon atk - StatusChangeFlagTable[SC_EDP] |= SCB_WATK; -#endif - - StatusChangeFlagTable[SC_MADOGEAR] |= SCB_SPEED; - - StatusChangeFlagTable[SC_PACKING_ENVELOPE1] |= SCB_WATK; - StatusChangeFlagTable[SC_PACKING_ENVELOPE2] |= SCB_MATK; - StatusChangeFlagTable[SC_PACKING_ENVELOPE3] |= SCB_MAXHP; - StatusChangeFlagTable[SC_PACKING_ENVELOPE4] |= SCB_MAXSP; - StatusChangeFlagTable[SC_PACKING_ENVELOPE5] |= SCB_FLEE; - StatusChangeFlagTable[SC_PACKING_ENVELOPE6] |= SCB_ASPD; - StatusChangeFlagTable[SC_PACKING_ENVELOPE7] |= SCB_DEF; - StatusChangeFlagTable[SC_PACKING_ENVELOPE8] |= SCB_MDEF; - StatusChangeFlagTable[SC_PACKING_ENVELOPE9] |= SCB_CRI; - StatusChangeFlagTable[SC_PACKING_ENVELOPE10] |= SCB_HIT; - - /* StatusDisplayType Table [Ind] */ - StatusDisplayType[SC_ALL_RIDING] = BL_PC; - StatusDisplayType[SC_PUSH_CART] = BL_PC; - StatusDisplayType[SC_SPHERE_1] = BL_PC; - StatusDisplayType[SC_SPHERE_2] = BL_PC; - StatusDisplayType[SC_SPHERE_3] = BL_PC; - StatusDisplayType[SC_SPHERE_4] = BL_PC; - StatusDisplayType[SC_SPHERE_5] = BL_PC; - StatusDisplayType[SC_CAMOUFLAGE] = BL_PC; - StatusDisplayType[SC_STEALTHFIELD] = BL_PC; - StatusDisplayType[SC_DUPLELIGHT] = BL_PC; - StatusDisplayType[SC_ORATIO] = BL_PC; - StatusDisplayType[SC_FREEZING] = BL_PC; - StatusDisplayType[SC_VENOMIMPRESS] = BL_PC; - StatusDisplayType[SC_HALLUCINATIONWALK] = BL_PC; - StatusDisplayType[SC_ROLLINGCUTTER] = BL_PC; - StatusDisplayType[SC_BANDING] = BL_PC; - StatusDisplayType[SC_CRYSTALIZE] = BL_PC; - StatusDisplayType[SC_DEEPSLEEP] = BL_PC; - StatusDisplayType[SC_CURSEDCIRCLE_ATKER] = BL_PC; - StatusDisplayType[SC_CURSEDCIRCLE_TARGET] = BL_PC; - StatusDisplayType[SC_NETHERWORLD] = BL_PC; - StatusDisplayType[SC_VOICEOFSIREN] = BL_PC; - StatusDisplayType[SC__SHADOWFORM] = BL_PC; - StatusDisplayType[SC__MANHOLE] = BL_PC; - StatusDisplayType[SC_JYUMONJIKIRI] = BL_PC; - StatusDisplayType[SC_AKAITSUKI] = BL_PC; - StatusDisplayType[SC_MONSTER_TRANSFORM] = BL_PC; - StatusDisplayType[SC_ACTIVE_MONSTER_TRANSFORM] = BL_PC; - StatusDisplayType[SC_DARKCROW] = BL_PC; - StatusDisplayType[SC_OFFERTORIUM] = BL_PC; - StatusDisplayType[SC_TELEKINESIS_INTENSE] = BL_PC; - StatusDisplayType[SC_UNLIMIT] = BL_PC; - StatusDisplayType[SC_ILLUSIONDOPING] = BL_PC; - StatusDisplayType[SC_C_MARKER] = BL_PC; - StatusDisplayType[SC_ANTI_M_BLAST] = BL_PC; - StatusDisplayType[SC_SPRITEMABLE] = BL_PC; - StatusDisplayType[SC_SV_ROOTTWIST] = BL_PC; - StatusDisplayType[SC_HELLS_PLANT] = BL_PC; - StatusDisplayType[SC_MISTY_FROST] = BL_PC; - StatusDisplayType[SC_MAGIC_POISON] = BL_PC; - StatusDisplayType[SC_MADOGEAR] = BL_PC; - StatusDisplayType[SC_SOULATTACK] = BL_PC; - - // Costumes - StatusDisplayType[SC_MOONSTAR] = BL_PC; - StatusDisplayType[SC_SUPER_STAR] = BL_PC; - StatusDisplayType[SC_STRANGELIGHTS] = BL_PC; - StatusDisplayType[SC_DECORATION_OF_MUSIC] = BL_PC; - StatusDisplayType[SC_LJOSALFAR] = BL_PC; - StatusDisplayType[SC_MERMAID_LONGING] = BL_PC; - StatusDisplayType[SC_HAT_EFFECT] = BL_PC; - StatusDisplayType[SC_FLOWERSMOKE] = BL_PC; - StatusDisplayType[SC_FSTONE] = BL_PC; - StatusDisplayType[SC_HAPPINESS_STAR] = BL_PC; - StatusDisplayType[SC_MAPLE_FALLS] = BL_PC; - StatusDisplayType[SC_TIME_ACCESSORY] = BL_PC; - StatusDisplayType[SC_MAGICAL_FEATHER] = BL_PC; - - // Clans - StatusDisplayType[SC_CLAN_INFO] = BL_PC|BL_NPC; - StatusDisplayType[SC_DRESSUP] = BL_PC; - - // 4th Job Common Status - StatusDisplayType[SC_HANDICAPSTATE_DEEPBLIND] = BL_PC; - StatusDisplayType[SC_HANDICAPSTATE_DEEPSILENCE] = BL_PC; - StatusDisplayType[SC_HANDICAPSTATE_LASSITUDE] = BL_PC; - StatusDisplayType[SC_HANDICAPSTATE_FROSTBITE] = BL_PC; - StatusDisplayType[SC_HANDICAPSTATE_SWOONING] = BL_PC; - StatusDisplayType[SC_HANDICAPSTATE_LIGHTNINGSTRIKE] = BL_PC; - StatusDisplayType[SC_HANDICAPSTATE_CRYSTALLIZATION] = BL_PC; - StatusDisplayType[SC_HANDICAPSTATE_CONFLAGRATION] = BL_PC; - StatusDisplayType[SC_HANDICAPSTATE_MISFORTUNE] = BL_PC; - StatusDisplayType[SC_HANDICAPSTATE_DEADLYPOISON] = BL_PC; - StatusDisplayType[SC_HANDICAPSTATE_DEPRESSION] = BL_PC; - StatusDisplayType[SC_HANDICAPSTATE_HOLYFLAME] = BL_PC; - - // 4th Jobs - StatusDisplayType[SC_SERVANT_SIGN] = BL_PC; - StatusDisplayType[SC_CHARGINGPIERCE_COUNT] = BL_PC; - StatusDisplayType[SC_DRAGONIC_AURA] = BL_PC; - StatusDisplayType[SC_VIGOR] = BL_PC; - StatusDisplayType[SC_DEADLY_DEFEASANCE] = BL_PC; - StatusDisplayType[SC_CLIMAX] = BL_PC; - StatusDisplayType[SC_MEDIALE] = BL_PC; - StatusDisplayType[SC_PRE_ACIES] = BL_PC; - StatusDisplayType[SC_COMPETENTIA] = BL_PC; - StatusDisplayType[SC_RELIGIO] = BL_PC; - StatusDisplayType[SC_BENEDICTUM] = BL_PC; - StatusDisplayType[SC_WINDSIGN] = BL_PC; - StatusDisplayType[SC_CALAMITYGALE] = BL_PC; - StatusDisplayType[SC_A_MACHINE] = BL_PC; - StatusDisplayType[SC_D_MACHINE] = BL_PC; - StatusDisplayType[SC_SHADOW_EXCEED] = BL_PC; - StatusDisplayType[SC_DANCING_KNIFE] = BL_PC; - StatusDisplayType[SC_E_SLASH_COUNT] = BL_PC; - StatusDisplayType[SC_HOLY_S] = BL_PC; - StatusDisplayType[SC_SPEAR_SCAR] = BL_PC; - StatusDisplayType[SC_ELEMENTAL_VEIL] = BL_PC; - StatusDisplayType[SC_MYSTIC_SYMPHONY] = BL_PC; - StatusDisplayType[SC_SOUNDBLEND] = BL_PC; - StatusDisplayType[SC_HOLY_OIL] = BL_PC; - StatusDisplayType[SC_FIRST_BRAND] = BL_PC; - StatusDisplayType[SC_SECOND_BRAND] = BL_PC; - StatusDisplayType[SC_FIRST_FAITH_POWER] = BL_PC; - StatusDisplayType[SC_SECOND_JUDGE] = BL_PC; - StatusDisplayType[SC_THIRD_EXOR_FLAME] = BL_PC; - StatusDisplayType[SC_ABYSS_SLAYER] = BL_PC; - - /* StatusChangeState (SCS_) NOMOVE */ - StatusChangeStateTable[SC_ANKLE] |= SCS_NOMOVE; - StatusChangeStateTable[SC_AUTOCOUNTER] |= SCS_NOMOVE; - StatusChangeStateTable[SC_TRICKDEAD] |= SCS_NOMOVE; - StatusChangeStateTable[SC_BLADESTOP] |= SCS_NOMOVE; - StatusChangeStateTable[SC_BLADESTOP_WAIT] |= SCS_NOMOVE; - StatusChangeStateTable[SC_GOSPEL] |= SCS_NOMOVE|SCS_NOMOVECOND; -#ifndef RENEWAL - StatusChangeStateTable[SC_BASILICA] |= SCS_NOMOVE|SCS_NOMOVECOND; -#endif - StatusChangeStateTable[SC_WIDEWEB] |= SCS_NOMOVE; - StatusChangeStateTable[SC_STOP] |= SCS_NOMOVE; - StatusChangeStateTable[SC_CLOSECONFINE] |= SCS_NOMOVE; - StatusChangeStateTable[SC_CLOSECONFINE2] |= SCS_NOMOVE; - StatusChangeStateTable[SC_MADNESSCANCEL] |= SCS_NOMOVE; -#ifndef RENEWAL - StatusChangeStateTable[SC_GRAVITATION] |= SCS_NOMOVE|SCS_NOMOVECOND; -#endif - StatusChangeStateTable[SC_WHITEIMPRISON] |= SCS_NOMOVE; - StatusChangeStateTable[SC_DEEPSLEEP] |= SCS_NOMOVE; - StatusChangeStateTable[SC_ELECTRICSHOCKER] |= SCS_NOMOVE; - StatusChangeStateTable[SC_BITE] |= SCS_NOMOVE; - StatusChangeStateTable[SC_THORNSTRAP] |= SCS_NOMOVE; - StatusChangeStateTable[SC_MAGNETICFIELD] |= SCS_NOMOVE; - StatusChangeStateTable[SC__MANHOLE] |= SCS_NOMOVE; - StatusChangeStateTable[SC_CURSEDCIRCLE_ATKER] |= SCS_NOMOVE; - StatusChangeStateTable[SC_CURSEDCIRCLE_TARGET] |= SCS_NOMOVE; - StatusChangeStateTable[SC_CRYSTALIZE] |= SCS_NOMOVE; - StatusChangeStateTable[SC_NETHERWORLD] |= SCS_NOMOVE; - StatusChangeStateTable[SC_CAMOUFLAGE] |= SCS_NOMOVE|SCS_NOMOVECOND; - StatusChangeStateTable[SC_MEIKYOUSISUI] |= SCS_NOMOVE; - StatusChangeStateTable[SC_KAGEHUMI] |= SCS_NOMOVE; - StatusChangeStateTable[SC_PARALYSIS] |= SCS_NOMOVE; - StatusChangeStateTable[SC_KINGS_GRACE] |= SCS_NOMOVE; - StatusChangeStateTable[SC_VACUUM_EXTREME] |= SCS_NOMOVE; - StatusChangeStateTable[SC_SUHIDE] |= SCS_NOMOVE; - StatusChangeStateTable[SC_SV_ROOTTWIST] |= SCS_NOMOVE; - StatusChangeStateTable[SC_GRAVITYCONTROL] |= SCS_NOMOVE; - //StatusChangeStateTable[SC_HANDICAPSTATE_FROSTBITE] |= SCS_NOMOVE; - //StatusChangeStateTable[SC_HANDICAPSTATE_SWOONING] |= SCS_NOMOVE; - //StatusChangeStateTable[SC_HANDICAPSTATE_LIGHTNINGSTRIKE] |= SCS_NOMOVE; - //StatusChangeStateTable[SC_HANDICAPSTATE_CRYSTALLIZATION] |= SCS_NOMOVE; - - /* StatusChangeState (SCS_) NOPICKUPITEMS */ - StatusChangeStateTable[SC_HIDING] |= SCS_NOPICKITEM; - StatusChangeStateTable[SC_CLOAKING] |= SCS_NOPICKITEM; - StatusChangeStateTable[SC_TRICKDEAD] |= SCS_NOPICKITEM; - StatusChangeStateTable[SC_BLADESTOP] |= SCS_NOPICKITEM; - StatusChangeStateTable[SC_CLOAKINGEXCEED] |= SCS_NOPICKITEM; - StatusChangeStateTable[SC__FEINTBOMB] |= SCS_NOPICKITEM; - StatusChangeStateTable[SC_NOCHAT] |= SCS_NOPICKITEM|SCS_NOPICKITEMCOND; - StatusChangeStateTable[SC_SUHIDE] |= SCS_NOPICKITEM; - StatusChangeStateTable[SC_NEWMOON] |= SCS_NOPICKITEM; - - /* StatusChangeState (SCS_) NODROPITEMS */ - StatusChangeStateTable[SC_AUTOCOUNTER] |= SCS_NODROPITEM; - StatusChangeStateTable[SC_BLADESTOP] |= SCS_NODROPITEM; - StatusChangeStateTable[SC_NOCHAT] |= SCS_NODROPITEM|SCS_NODROPITEMCOND; - - /* StatusChangeState (SCS_) NOCAST (skills) */ - StatusChangeStateTable[SC_SILENCE] |= SCS_NOCAST; - StatusChangeStateTable[SC_STEELBODY] |= SCS_NOCAST; - StatusChangeStateTable[SC_BERSERK] |= SCS_NOCAST; -#ifdef RENEWAL - StatusChangeStateTable[SC_BASILICA_CELL] |= SCS_NOCAST; - StatusChangeStateTable[SC_ROKISWEIL] |= SCS_NOCAST; - StatusChangeStateTable[SC_ENSEMBLEFATIGUE] |= SCS_NOCAST; -#endif - StatusChangeStateTable[SC__BLOODYLUST] |= SCS_NOCAST; - StatusChangeStateTable[SC_DEATHBOUND] |= SCS_NOCAST; - StatusChangeStateTable[SC_OBLIVIONCURSE] |= SCS_NOCAST|SCS_NOCASTCOND; - StatusChangeStateTable[SC_WHITEIMPRISON] |= SCS_NOCAST; - StatusChangeStateTable[SC__SHADOWFORM] |= SCS_NOCAST; - StatusChangeStateTable[SC__INVISIBILITY] |= SCS_NOCAST; - StatusChangeStateTable[SC_CRYSTALIZE] |= SCS_NOCAST; - StatusChangeStateTable[SC__IGNORANCE] |= SCS_NOCAST; - StatusChangeStateTable[SC__MANHOLE] |= SCS_NOCAST; - StatusChangeStateTable[SC_DEEPSLEEP] |= SCS_NOCAST; - StatusChangeStateTable[SC_SATURDAYNIGHTFEVER] |= SCS_NOCAST; - StatusChangeStateTable[SC_CURSEDCIRCLE_TARGET] |= SCS_NOCAST; - StatusChangeStateTable[SC_KINGS_GRACE] |= SCS_NOCAST; - StatusChangeStateTable[SC_GRAVITYCONTROL] |= SCS_NOCAST; - //StatusChangeStateTable[SC_HANDICAPSTATE_DEEPSILENCE] |= SCS_NOCAST; - //StatusChangeStateTable[SC_HANDICAPSTATE_FROSTBITE] |= SCS_NOCAST; - //StatusChangeStateTable[SC_HANDICAPSTATE_SWOONING] |= SCS_NOCAST; - //StatusChangeStateTable[SC_HANDICAPSTATE_LIGHTNINGSTRIKE] |= SCS_NOCAST; - //StatusChangeStateTable[SC_HANDICAPSTATE_CRYSTALLIZATION] |= SCS_NOCAST; - - /* StatusChangeState (SCS_) NOCHAT (skills) */ - StatusChangeStateTable[SC_BERSERK] |= SCS_NOCHAT; - StatusChangeStateTable[SC_SATURDAYNIGHTFEVER] |= SCS_NOCHAT; - StatusChangeStateTable[SC_DEEPSLEEP] |= SCS_NOCHAT; - StatusChangeStateTable[SC_NOCHAT] |= SCS_NOCHAT|SCS_NOCHATCOND; -} - -static void initDummyData(void) -{ +/** Creates dummy status */ +static void initDummyData(void) { memset(&dummy_status, 0, sizeof(dummy_status)); dummy_status.hp = dummy_status.max_hp = @@ -2645,24 +978,15 @@ int status_damage(struct block_list *src,struct block_list *target,int64 dhp, in if( hp && !(flag&1) ) { if( sc ) { struct status_change_entry *sce; - if (sc->data[SC_STONE] && sc->opt1 == OPT1_STONE) - status_change_end(target, SC_STONE, INVALID_TIMER); - status_change_end(target, SC_FREEZE, INVALID_TIMER); - status_change_end(target, SC_SLEEP, INVALID_TIMER); - status_change_end(target, SC_WINKCHARM, INVALID_TIMER); - status_change_end(target, SC_CONFUSION, INVALID_TIMER); - status_change_end(target, SC_TRICKDEAD, INVALID_TIMER); - status_change_end(target, SC_HIDING, INVALID_TIMER); - status_change_end(target, SC_CLOAKING, INVALID_TIMER); - status_change_end(target, SC_CHASEWALK, INVALID_TIMER); - status_change_end(target, SC_CAMOUFLAGE, INVALID_TIMER); - status_change_end(target, SC_DEEPSLEEP, INVALID_TIMER); - status_change_end(target, SC_SUHIDE, INVALID_TIMER); - status_change_end(target, SC_NEWMOON, INVALID_TIMER); - status_change_end(target, SC_HANDICAPSTATE_FROSTBITE, INVALID_TIMER); - status_change_end(target, SC_HANDICAPSTATE_SWOONING, INVALID_TIMER); - status_change_end(target, SC_HANDICAPSTATE_LIGHTNINGSTRIKE, INVALID_TIMER); - status_change_end(target, SC_HANDICAPSTATE_CRYSTALLIZATION, INVALID_TIMER); + + for (const auto &it : status_db) { + sc_type type = static_cast(it.first); + + if (it.second->flag[SCF_REMOVEONDAMAGED]) { + if (type != SC_STONE || (sc->data[SC_STONE] && sc->opt1 == OPT1_STONE)) + status_change_end(target, type, INVALID_TIMER); + } + } if ((sce=sc->data[SC_ENDURE]) && !sce->val4) { /** [Skotlex] * Endure count is only reduced by non-players on non-gvg maps. @@ -2701,9 +1025,9 @@ int status_damage(struct block_list *src,struct block_list *target,int64 dhp, in if (sc && hp && status->hp) { if (sc->data[SC_AUTOBERSERK] && - (!sc->data[SC_PROVOKE] || !sc->data[SC_PROVOKE]->val2) && + (!sc->data[SC_PROVOKE] || !sc->data[SC_PROVOKE]->val4) && status->hp < status->max_hp>>2) - sc_start4(src,target,SC_PROVOKE,100,10,1,0,0,0); + sc_start4(src,target,SC_PROVOKE,100,10,0,0,1,0); if (sc->data[SC_BERSERK] && status->hp <= 100) status_change_end(target, SC_BERSERK, INVALID_TIMER); if( sc->data[SC_RAISINGDRAGON] && status->hp <= 1000 ) @@ -2777,7 +1101,7 @@ int status_damage(struct block_list *src,struct block_list *target,int64 dhp, in status_revive(target, sc->data[SC_KAIZEL]->val2, 0); status_change_clear(target,0); clif_skill_nodamage(target,target,ALL_RESURRECTION,1,1); - sc_start(src,target,status_skill2sc(PR_KYRIE),100,10,time); + sc_start(src,target,SC_KYRIE,100,10,time); if( target->type == BL_MOB ) ((TBL_MOB*)target)->state.rebirth = 1; @@ -2919,7 +1243,7 @@ int status_heal(struct block_list *bl,int64 hhp,int64 hsp, int64 hap, int flag) if(hp && sc && sc->data[SC_AUTOBERSERK] && sc->data[SC_PROVOKE] && - sc->data[SC_PROVOKE]->val2==1 && + sc->data[SC_PROVOKE]->val4==1 && status->hp>=status->max_hp>>2 ) // End auto berserk. status_change_end(bl, SC_PROVOKE, INVALID_TIMER); @@ -3099,6 +1423,8 @@ bool status_check_skilluse(struct block_list *src, struct block_list *target, ui return false; if (!skill_id) { // Normal attack checks. + if (sc && sc->cant.attack) + return false; // This mode is only needed for melee attacking. if (!status_has_mode(status,MD_CANATTACK)) return false; @@ -3155,7 +1481,7 @@ bool status_check_skilluse(struct block_list *src, struct block_list *target, ui return false; } - if (skill_id != RK_REFRESH && skill_id != SU_GROOMING && sc->opt1 && sc->opt1 != OPT1_BURNING && skill_id != SR_GENTLETOUCH_CURE) { // Stuned/Frozen/etc + if (sc->cant.cast && skill_id != RK_REFRESH && skill_id != SU_GROOMING && skill_id != SR_GENTLETOUCH_CURE) { // Stuned/Frozen/etc if (flag != 1) // Can't cast, casted stuff can't damage. return false; if (skill_get_casttype(skill_id) == CAST_DAMAGE) @@ -3813,7 +2139,7 @@ void status_calc_misc(struct block_list *bl, struct status_data *status, int lev * @return 1 for calculated special statuses or 0 for none * @author [Skotlex] */ -int status_calc_mob_(struct mob_data* md, enum e_status_calc_opt opt) +int status_calc_mob_(struct mob_data* md, uint8 opt) { struct status_data *status; struct block_list *mbl = NULL; @@ -4095,7 +2421,7 @@ int status_calc_mob_(struct mob_data* md, enum e_status_calc_opt opt) * @return 1 * @author [Skotlex] */ -void status_calc_pet_(struct pet_data *pd, enum e_status_calc_opt opt) +void status_calc_pet_(struct pet_data *pd, uint8 opt) { nullpo_retv(pd); @@ -4731,7 +3057,7 @@ bool status_calc_cart_weight(struct map_session_data *sd, enum e_status_calc_wei * @param opt: Whether it is first calc (login) or not * @return (-1) for too many recursive calls, (1) recursive call, (0) success */ -int status_calc_pc_sub(struct map_session_data* sd, enum e_status_calc_opt opt) +int status_calc_pc_sub(struct map_session_data* sd, uint8 opt) { static int calculating = 0; ///< Check for recursive call preemption. [Skotlex] struct status_data *base_status; ///< Pointer to the player's base status @@ -5915,7 +4241,7 @@ int status_calc_pc_sub(struct map_session_data* sd, enum e_status_calc_opt opt) } /// Intermediate function since C++ does not have a try-finally syntax -int status_calc_pc_( struct map_session_data* sd, enum e_status_calc_opt opt ){ +int status_calc_pc_( struct map_session_data* sd, uint8 opt ){ // Save the old script the player was attached to struct script_state* previous_st = sd->st; @@ -5938,7 +4264,7 @@ int status_calc_pc_( struct map_session_data* sd, enum e_status_calc_opt opt ){ * @param opt: Whether it is first calc or not (0 on level up or status) * @return 0 */ -int status_calc_mercenary_(s_mercenary_data *md, enum e_status_calc_opt opt) +int status_calc_mercenary_(s_mercenary_data *md, uint8 opt) { struct status_data *status = &md->base_status; s_mercenary *merc = &md->mercenary; @@ -5967,7 +4293,7 @@ int status_calc_mercenary_(s_mercenary_data *md, enum e_status_calc_opt opt) * @param opt: Whether it is first calc or not (0 on level up or status) * @return 1 */ -int status_calc_homunculus_(struct homun_data *hd, enum e_status_calc_opt opt) +int status_calc_homunculus_(struct homun_data *hd, uint8 opt) { struct status_data *status = &hd->base_status; struct s_homunculus *hom = &hd->homunculus; @@ -6062,7 +4388,7 @@ int status_calc_homunculus_(struct homun_data *hd, enum e_status_calc_opt opt) * @param opt: Whether it is first calc or not (0 on status change) * @return 0 */ -int status_calc_elemental_(s_elemental_data *ed, e_status_calc_opt opt) +int status_calc_elemental_(s_elemental_data *ed, uint8 opt) { struct status_data *status = &ed->base_status; s_elemental *ele = &ed->elemental; @@ -6111,7 +4437,7 @@ int status_calc_elemental_(s_elemental_data *ed, e_status_calc_opt opt) * @param opt: Whether it is first calc or not (what?) * @return 0 */ -int status_calc_npc_(struct npc_data *nd, enum e_status_calc_opt opt) +int status_calc_npc_(struct npc_data *nd, uint8 opt) { struct status_data *status = &nd->status; @@ -6419,19 +4745,19 @@ void status_calc_regen_rate(struct block_list *bl, struct regen_data *regen, str * @param flag: Which state to apply to bl * @param start: (1) start state, (0) remove state */ -void status_calc_state( struct block_list *bl, struct status_change *sc, enum scs_flag flag, bool start ) +void status_calc_state( struct block_list *bl, struct status_change *sc, std::bitset flag, bool start ) { /// No sc at all, we can zero without any extra weight over our conciousness if( !sc->count ) { - memset(&sc->cant, 0, sizeof (sc->cant)); + sc->cant = {}; return; } // Can't move - if( flag&SCS_NOMOVE ) { - if( !(flag&SCS_NOMOVECOND) ) - sc->cant.move += ( start ? 1 : ((sc->cant.move)? -1:0) ); + if( flag[SCS_NOMOVE] ) { + if( !flag[SCS_NOMOVECOND] ) + sc->cant.move += (start ? 1 : ((sc->cant.move) ? -1 : 0)); else if( (sc->data[SC_GOSPEL] && sc->data[SC_GOSPEL]->val4 == BCT_SELF) // cannot move while gospel is in effect #ifndef RENEWAL @@ -6439,42 +4765,112 @@ void status_calc_state( struct block_list *bl, struct status_change *sc, enum sc || (sc->data[SC_GRAVITATION] && sc->data[SC_GRAVITATION]->val3 == BCT_SELF) #endif || (sc->data[SC_CAMOUFLAGE] && sc->data[SC_CAMOUFLAGE]->val1 < 3) - ) - sc->cant.move += ( start ? 1 : ((sc->cant.move)? -1:0) ); + || (sc->data[SC_MAGNETICFIELD] && sc->data[SC_MAGNETICFIELD]->val2 != bl->id) + || (sc->data[SC_FEAR] && sc->data[SC_FEAR]->val2 > 0) + || (sc->data[SC_SPIDERWEB] && sc->data[SC_SPIDERWEB]->val1) + || (sc->data[SC_HIDING] && (bl->type != BL_PC || (pc_checkskill(BL_CAST(BL_PC,bl),RG_TUNNELDRIVE) <= 0))) + || (sc->data[SC_DANCING] && sc->data[SC_DANCING]->val4 && ( +#ifndef RENEWAL + !sc->data[SC_LONGING] || +#endif + (sc->data[SC_DANCING]->val1&0xFFFF) == CG_MOONLIT || + (sc->data[SC_DANCING]->val1&0xFFFF) == CG_HERMODE + )) + || (sc->data[SC_CRYSTALIZE] && bl->type != BL_MOB) + || (sc->data[SC_STONE] && sc->opt1 == OPT1_STONE) + ) + sc->cant.move += (start ? 1 : ((sc->cant.move) ? -1 : 0)); } // Can't use skills - if( flag&SCS_NOCAST ) { - if( !(flag&SCS_NOCASTCOND) ) - sc->cant.cast += ( start ? 1 : -1 ); + if( flag[SCS_NOCAST] ) { + if( !flag[SCS_NOCASTCOND] ) + sc->cant.cast += (start ? 1 : ((sc->cant.cast) ? -1 : 0)); else if (sc->data[SC_OBLIVIONCURSE] && sc->data[SC_OBLIVIONCURSE]->val3 == 1) - sc->cant.cast += (start ? 1 : -1); + sc->cant.cast += (start ? 1 : ((sc->cant.cast) ? -1 : 0)); } // Can't chat - if( flag&SCS_NOCHAT ) { - if( !(flag&SCS_NOCHATCOND) ) - sc->cant.chat += ( start ? 1 : -1 ); + if( flag[SCS_NOCHAT] ) { + if( !flag[SCS_NOCHATCOND] ) + sc->cant.chat += (start ? 1 : ((sc->cant.chat) ? -1 : 0)); else if(sc->data[SC_NOCHAT] && sc->data[SC_NOCHAT]->val1&MANNER_NOCHAT) - sc->cant.chat += ( start ? 1 : -1 ); + sc->cant.chat += (start ? 1 : ((sc->cant.chat) ? -1 : 0)); + } + + // Can't attack + if( flag[SCS_NOATTACK] ) { + if( !flag[SCS_NOATTACKCOND] ) + sc->cant.attack += (start ? 1 : ((sc->cant.attack) ? -1 : 0)); + /*else if( ) + sc->cant.attack += ( start ? 1 : ((sc->cant.attack)? -1:0) );*/ + } + + // Can't warp + if (flag[SCS_NOWARP]) { + if (!flag[SCS_NOWARPCOND]) + sc->cant.warp += (start ? 1 : ((sc->cant.warp) ? -1 : 0)); + /*else if (sc->data[]) + sc->cant.warp += ( start ? 1 : ((sc->cant.warp)? -1:0) );*/ } // Player-only states if( bl->type == BL_PC ) { // Can't pick-up items - if( flag&SCS_NOPICKITEM ) { - if( !(flag&SCS_NOPICKITEMCOND) ) - sc->cant.pickup += ( start ? 1 : -1 ); + if( flag[SCS_NOPICKITEM] ) { + if( !flag[SCS_NOPICKITEMCOND] ) + sc->cant.pickup += (start ? 1 : ((sc->cant.pickup) ? -1 : 0)); else if( (sc->data[SC_NOCHAT] && sc->data[SC_NOCHAT]->val1&MANNER_NOITEM) ) - sc->cant.pickup += ( start ? 1 : -1 ); + sc->cant.pickup += (start ? 1 : ((sc->cant.pickup) ? -1 : 0)); } // Can't drop items - if( flag&SCS_NODROPITEM ) { - if( !(flag&SCS_NODROPITEMCOND) ) - sc->cant.drop += ( start ? 1 : -1 ); + if( flag[SCS_NODROPITEM] ) { + if( !flag[SCS_NODROPITEMCOND] ) + sc->cant.drop += (start ? 1 : ((sc->cant.drop) ? -1 : 0)); else if( (sc->data[SC_NOCHAT] && sc->data[SC_NOCHAT]->val1&MANNER_NOITEM) ) - sc->cant.drop += ( start ? 1 : -1 ); + sc->cant.drop += (start ? 1 : ((sc->cant.drop) ? -1 : 0)); + } + + // Can't equip item + if( flag[SCS_NOEQUIPITEM] ) { + if( !flag[SCS_NOEQUIPITEMCOND] ) + sc->cant.equip += (start ? 1 : ((sc->cant.equip) ? -1 : 0)); + /*else if( ) + sc->cant.equip += ( start ? 1 : ((sc->cant.equip)? -1:0) );*/ + } + + // Can't unequip item + if( flag[SCS_NOUNEQUIPITEM]) { + if( !flag[SCS_NOUNEQUIPITEMCOND] ) + sc->cant.unequip += (start ? 1 : ((sc->cant.unequip) ? -1 : 0)); + /*else if( ) + sc->cant.unequip += ( start ? 1 : ((sc->cant.unequip)? -1:0) );*/ + } + + // Can't consume item + if( flag[SCS_NOCONSUMEITEM]) { + if( !flag[SCS_NOCONSUMEITEMCOND] ) + sc->cant.consume += (start ? 1 : ((sc->cant.consume) ? -1 : 0)); + else if( (sc->data[SC_GRAVITATION] && sc->data[SC_GRAVITATION]->val3 == BCT_SELF) || + (sc->data[SC_NOCHAT] && sc->data[SC_NOCHAT]->val1&MANNER_NOITEM) ) + sc->cant.consume += (start ? 1 : ((sc->cant.consume) ? -1 : 0)); + } + + // Can't lose exp + if (flag[SCS_NODEATHPENALTY]) { + if (!flag[SCS_NODEATHPENALTYCOND]) + sc->cant.deathpenalty += (start ? 1 : ((sc->cant.deathpenalty) ? -1 : 0)); + /*else if (sc->data[]) + sc->cant.deathpenalty += ( start ? 1 : ((sc->cant.deathpenalty)? -1:0) );*/ + } + + // Can't sit/stand/talk to NPC + if (flag[SCS_NOINTERACT]) { + if (!flag[SCS_NOINTERACTCOND]) + sc->cant.interact += (start ? 1 : ((sc->cant.interact) ? -1 : 0)); + /*else if (sc->data[]) + sc->cant.interact += ( start ? 1 : ((sc->cant.interact)? -1:0) );*/ } } @@ -7076,7 +5472,7 @@ void status_calc_bl_main(struct block_list *bl, uint64 flag) * @param flag: Which status has changed on bl * @param opt: If true, will cause status_calc_* functions to run their base status initialization code */ -void status_calc_bl_(struct block_list* bl, enum scb_flag flag, enum e_status_calc_opt opt) +void status_calc_bl_(struct block_list* bl, uint64 flag, uint8 opt) { struct status_data b_status; // Previous battle status struct status_data* status; // Pointer to current battle status @@ -7916,7 +6312,7 @@ static unsigned short status_calc_batk(struct block_list *bl, struct status_chan if(sc->data[SC_INCATKRATE]) batk += batk * sc->data[SC_INCATKRATE]->val1/100; if(sc->data[SC_PROVOKE]) - batk += batk * sc->data[SC_PROVOKE]->val3/100; + batk += batk * sc->data[SC_PROVOKE]->val2/100; #ifndef RENEWAL if(sc->data[SC_CONCENTRATION]) batk += batk * sc->data[SC_CONCENTRATION]->val2/100; @@ -8002,7 +6398,7 @@ static unsigned short status_calc_watk(struct block_list *bl, struct status_chan if(sc->data[SC_INCATKRATE]) watk += watk * sc->data[SC_INCATKRATE]->val1/100; if(sc->data[SC_PROVOKE]) - watk += watk * sc->data[SC_PROVOKE]->val3/100; + watk += watk * sc->data[SC_PROVOKE]->val2/100; if(sc->data[SC_SKE]) watk += watk * 3; if(sc->data[SC_FLEET]) @@ -8531,7 +6927,7 @@ static defType status_calc_def(struct block_list *bl, struct status_change *sc, if(sc->data[SC_SKE]) def >>=1; if(sc->data[SC_PROVOKE] && bl->type != BL_PC) // Provoke doesn't alter player defense-> - def -= def * sc->data[SC_PROVOKE]->val4/100; + def -= def * sc->data[SC_PROVOKE]->val3/100; if(sc->data[SC_STRIPSHIELD] && bl->type != BL_PC) // Player doesn't have def reduction only equip removed def -= def * sc->data[SC_STRIPSHIELD]->val2/100; if (sc->data[SC_FLING]) @@ -8624,7 +7020,7 @@ static signed short status_calc_def2(struct block_list *bl, struct status_change if(sc->data[SC_SKE]) def2 -= def2 * 50/100; if(sc->data[SC_PROVOKE]) - def2 -= def2 * sc->data[SC_PROVOKE]->val4/100; + def2 -= def2 * sc->data[SC_PROVOKE]->val3/100; if(sc->data[SC_JOINTBEAT]) def2 -= def2 * ( sc->data[SC_JOINTBEAT]->val2&BREAK_SHOULDER ? 50 : 0 ) / 100 + def2 * ( sc->data[SC_JOINTBEAT]->val2&BREAK_WAIST ? 25 : 0 ) / 100; @@ -10279,7 +8675,7 @@ t_tick status_get_sc_def(struct block_list *src, struct block_list *bl, enum sc_ std::shared_ptr skill = skill_db.find(battle_getcurrentskill(src)); if (skill == nullptr) // Check for ground-type skills using the status when a player moves through units - skill = skill_db.find(status_sc2skill(type)); + skill = skill_db.find(status_db.getSkill(type)); if (skill != nullptr && skill->skill_type == BF_MAGIC && // Basic magic skill !skill->inf2[INF2_IGNOREGTB] && // Specific skill to bypass @@ -10532,13 +8928,6 @@ t_tick status_get_sc_def(struct block_list *src, struct block_list *bl, enum sc_ rate -= rate*sc_def/10000; rate -= sc_def2; - // Minimum chances - switch (type) { - case SC_BITE: - rate = max(rate, 5000); // Minimum of 50% - break; - } - // Item resistance (only applies to rate%) if (sd) { for (const auto &it : sd->reseff) { @@ -10553,7 +8942,14 @@ t_tick status_get_sc_def(struct block_list *src, struct block_list *bl, enum sc_ if(rate > 0 && rate%10 != 0) rate += (10 - rate%10); } - if (!(rnd()%10000 < rate)) + std::shared_ptr scdb = status_db.find(type); + + // Cap minimum rate + rate = max(rate, scdb->min_rate); + // Cap minimum duration + tick = i64max(tick, scdb->min_duration); + + if (rate < 10000 && (rate <= 0 || !(rnd()%10000 < rate))) return 0; // Duration cannot be reduced @@ -10738,16 +9134,17 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty struct status_change_entry* sce; struct status_data *status; struct view_data *vd; - int undead_flag, val_flag = 0, tick_time = 0; + int undead_flag, tick_time = 0; uint64 calc_flag; bool sc_isnew = true; + std::shared_ptr scdb = status_db.find(type); nullpo_ret(bl); sc = status_get_sc(bl); status = status_get_status_data(bl); - if( type <= SC_NONE || type >= SC_MAX ) { - ShowError("status_change_start: invalid status change (%d)!\n", type); + if( !scdb ) { + ShowError("status_change_start: Invalid status change (%d)!\n", type); return 0; } @@ -10767,78 +9164,22 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty // if (bl->type == BL_MOB) // if (util::vector_exists(status_get_race2(bl), RC2_GVG) && status_sc2scb_flag(type)&SCB_MAXHP) return 0; - if( sc->data[SC_REFRESH] ) { - if( type >= SC_COMMON_MIN && type <= SC_COMMON_MAX) // Confirmed. - return 0; // Immune to status ailments - switch( type ) { - case SC_DEEPSLEEP: - case SC_BURNING: - case SC_FREEZING: - case SC_CRYSTALIZE: - case SC_TOXIN: - case SC_PARALYSE: - case SC_VENOMBLEED: - case SC_MAGICMUSHROOM: - case SC_DEATHHURT: - case SC_PYREXIA: - case SC_OBLIVIONCURSE: - case SC_MARSHOFABYSS: - case SC_MANDRAGORA: - return 0; - } - } - if( sc->data[SC_INSPIRATION] ) { - if( type >= SC_COMMON_MIN && type <= SC_COMMON_MAX ) - return 0; // Immune to status ailments - switch( type ) { - case SC_BURNING: - case SC_FREEZING: - case SC_CRYSTALIZE: - case SC_FEAR: - case SC_TOXIN: - case SC_PARALYSE: - case SC_VENOMBLEED: - case SC_MAGICMUSHROOM: - case SC_DEATHHURT: - case SC_PYREXIA: - case SC_OBLIVIONCURSE: - case SC_LEECHESEND: - case SC_DEEPSLEEP: - case SC_SATURDAYNIGHTFEVER: - case SC__BODYPAINT: - case SC__ENERVATION: - case SC__GROOMY: - case SC__IGNORANCE: - case SC__LAZINESS: - case SC__UNLUCKY: - case SC__WEAKNESS: - return 0; - } - } - if( sc->data[SC_KINGS_GRACE] ) { - if( type >= SC_COMMON_MIN && type <= SC_COMMON_MAX ) - return 0; // Immune to status ailments - switch( type ) { - case SC_HALLUCINATION: - case SC_BURNING: - case SC_CRYSTALIZE: - case SC_FREEZING: - case SC_DEEPSLEEP: - case SC_FEAR: - case SC_MANDRAGORA: - return 0; - } - } + // Fail if Madogear is active + if (sc->option&OPTION_MADOGEAR && flag&SCSTART_NOAVOID && scdb->flag[SCF_FAILEDMADO]) + return 0; - // Statuses from Merchant family skills that can be blocked while using Madogear; see pc.cpp::pc_setoption for cancellation - if (sc->option & OPTION_MADOGEAR) { - for (const auto &madosc : mado_statuses) { - if (type != madosc) - continue; + // Check for Boss resistances + if(status->mode&MD_STATUSIMMUNE && !(flag&SCSTART_NOAVOID) && scdb->flag[SCF_BOSSRESIST]) + return 0; - uint16 skill_id = status_sc2skill(type); + // Check for MVP resistance + if(status->mode&MD_MVP && !(flag&SCSTART_NOAVOID) && scdb->flag[SCF_MVPRESIST]) + return 0; - if (skill_id > 0 && !skill_get_inf2(skill_id, INF2_ALLOWONMADO)) + // Check failing SCs from list + if (!scdb->fail.empty()) { + for (const auto &it : scdb->fail) { + if (it && sc->data[it]) return 0; } } @@ -10858,909 +9199,348 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty undead_flag = battle_check_undead(status->race,status->def_ele); // Check for immunities / sc fails switch (type) { - case SC_DECREASEAGI: - case SC_QUAGMIRE: - case SC_DONTFORGETME: - case SC_CREATINGSTAR: - if(sc->data[SC_SPEEDUP1]) - return 0; - break; - case SC_ANGRIFFS_MODUS: - case SC_GOLDENE_FERSE: - if ((type==SC_GOLDENE_FERSE && sc->data[SC_ANGRIFFS_MODUS]) - || (type==SC_ANGRIFFS_MODUS && sc->data[SC_GOLDENE_FERSE]) - ) - return 0; - case SC_VACUUM_EXTREME: - if (sc && (sc->data[SC_HALLUCINATIONWALK] || sc->data[SC_NPC_HALLUCINATIONWALK] || sc->data[SC_HOVERING] || sc->data[SC_VACUUM_EXTREME] || - (sc->data[SC_VACUUM_EXTREME_POSTDELAY] && sc->data[SC_VACUUM_EXTREME_POSTDELAY]->val2 == val2))) // Ignore post delay from other vacuum (this will make stack effect enabled) - return 0; - break; - case SC_STONE: - // Undead are immune to Stone - if (undead_flag && !(flag&SCSTART_NOAVOID)) - return 0; - if (sc->data[SC_POWER_OF_GAIA] || sc->data[SC_GVG_STONE]) - return 0; - if (sc->opt1) - return 0; //Cannot override other OPT1 status changes [Skotlex] - break; - case SC_FREEZE: - // Undead are immune to Freeze - if (undead_flag && !(flag&SCSTART_NOAVOID)) - return 0; - if (sc->data[SC_GVG_FREEZ] || sc->data[SC_WARMER]) - return 0; - if (sc->opt1) - return 0; // Cannot override other opt1 status changes. [Skotlex] - break; - case SC_FREEZING: - case SC_CRYSTALIZE: - if (sc->data[SC_WARMER]) - return 0; // Immune to Frozen and Freezing status if under Warmer status. [Jobbie] - break; - case SC_SLEEP: - if (sc->data[SC_GVG_SLEEP]) - return 0; - if (sc->opt1) - return 0; // Cannot override other opt1 status changes. [Skotlex] - break; - case SC_STUN: - if (sc->opt1) - return 0; // Cannot override other opt1 status changes. [Skotlex] - if (sc->data[SC_GVG_STUN]) - return 0; - break; - case SC_BLIND: - if (sc->data[SC_FEAR]) - return 0; - if (sc->data[SC_GVG_BLIND]) - return 0; - break; - case SC_CURSE: - if (sc->data[SC_GVG_CURSE]) - return 0; - break; - case SC_SILENCE: - if (sc->data[SC_GVG_SILENCE]) - return 0; - break; - case SC_ALL_RIDING: - if( !sd || sc->option&(OPTION_RIDING|OPTION_DRAGON|OPTION_WUGRIDER|OPTION_MADOGEAR) ) - return 0; - if( sc->data[type] ) - { // Already mounted, just dismount. - status_change_end(bl, SC_ALL_RIDING, INVALID_TIMER); - return 0; - } - break; - // They're all like berserk, do not everlap each other - case SC_BERSERK: - if(sc->data[SC_SATURDAYNIGHTFEVER]) - return 0; - break; - // Fall through - case SC_WHITEIMPRISON: - if (sc->opt1) - return 0; //Cannot override other OPT1 status changes [Skotlex] - break; - case SC_SIGNUMCRUCIS: - // Only affects demons and undead element (but not players) - if((!undead_flag && status->race!=RC_DEMON) || bl->type == BL_PC) - return 0; - break; - case SC_AETERNA: - if( (sc->data[SC_STONE] && sc->opt1 == OPT1_STONE) || sc->data[SC_FREEZE] ) - return 0; - break; - case SC_KYRIE: - case SC_TUNAPARTY: - case SC_GUARDIAN_S: - if (bl->type == BL_MOB) - return 0; - break; - case SC_OVERTHRUST: - if (sc->data[SC_MAXOVERTHRUST]) - return 0; // Overthrust can't take effect if under Max Overthrust. [Skotlex] - break; - case SC_ADRENALINE: - case SC_ADRENALINE2: - if (sc->data[SC_QUAGMIRE] || sc->data[SC_DECREASEAGI]) - return 0; - break; - case SC_MAGNIFICAT: - if( sc->option&OPTION_MADOGEAR ) // Mado is immune to magnificat - return 0; - break; - case SC_ONEHAND: - case SC_MERC_QUICKEN: - case SC_TWOHANDQUICKEN: - if(sc->data[SC_DECREASEAGI]) - return 0; - case SC_INCREASEAGI: - case SC_CONCENTRATE: - case SC_SPEARQUICKEN: - case SC_TRUESIGHT: - case SC_WINDWALK: - case SC_ASSNCROS: - if (sc->option&OPTION_MADOGEAR) - return 0; // Mado is immune to the above [Ind] - case SC_CARTBOOST: - if (sc->data[SC_QUAGMIRE]) - return 0; - break; - case SC_CLOAKING: - // Avoid cloaking with no wall and low skill level. [Skotlex] - // Due to the cloaking card, we have to check the wall versus to known - // skill level rather than the used one. [Skotlex] - // if (sd && val1 < 3 && skill_check_cloaking(bl,NULL)) - if( sd && pc_checkskill(sd, AS_CLOAKING) < 3 && !skill_check_cloaking(bl,NULL) ) - return 0; - break; - case SC_NEWMOON: - if (sc->data[SC_BITE]) - return 0; - break; - case SC_MODECHANGE: - { - int mode; - struct status_data *bstatus = status_get_base_status(bl); - if (!bstatus) return 0; - if (sc->data[type]) { // Pile up with previous values. - if(!val2) val2 = sc->data[type]->val2; - val3 |= sc->data[type]->val3; - val4 |= sc->data[type]->val4; - } - mode = val2 ? ((val2&~MD_MASK)|val2) : bstatus->mode; // Base mode - if (val4) mode = (mode&~val4); // Del mode - if (val3) mode = (mode|val3); // Add mode - if (mode == bstatus->mode) { // No change. - if (sc->data[type]) // Abort previous status - return status_change_end(bl, type, INVALID_TIMER); - return 0; - } - } - break; - // Strip skills, need to divest something or it fails. - case SC_STRIPWEAPON: - if (val2 == 1) - val2 = 0; // Brandish Spear/Bowling Bash effet. Do not take weapon off. - else if (sd && !(flag&SCSTART_LOADED)) { // Apply sc anyway if loading saved sc_data - short i; - uint8 successFlag = 0; - if(sd->bonus.unstripable_equip&EQP_WEAPON) + case SC_VACUUM_EXTREME: + if (sc && sc->data[SC_VACUUM_EXTREME_POSTDELAY] && sc->data[SC_VACUUM_EXTREME_POSTDELAY]->val2 == val2) // Ignore post delay from other vacuum (this will make stack effect enabled) return 0; - i = sd->equip_index[EQI_HAND_L]; - if (i>=0 && sd->inventory_data[i] && sd->inventory_data[i]->type == IT_WEAPON) { - successFlag|=1; - pc_unequipitem(sd,i,3); // Left-hand weapon - } - - i = sd->equip_index[EQI_HAND_R]; - if (i>=0 && sd->inventory_data[i] && sd->inventory_data[i]->type == IT_WEAPON) { - successFlag|=2; - pc_unequipitem(sd,i,3); - } - if (!successFlag) return 0; - } - if (tick == 1) return 1; // Minimal duration: Only strip without causing the SC - break; - case SC_STRIPSHIELD: - if( val2 == 1 ) val2 = 0; // GX effect. Do not take shield off.. - else - if (sd && !(flag&SCSTART_LOADED)) { - short i; - if(sd->bonus.unstripable_equip&EQP_SHIELD) + break; + case SC_STONE: + case SC_FREEZE: + // Undead are immune to Freeze/Stone + if (undead_flag && !(flag&SCSTART_NOAVOID)) return 0; - i = sd->equip_index[EQI_HAND_L]; - if ( i < 0 || !sd->inventory_data[i] || sd->inventory_data[i]->type != IT_ARMOR ) + case SC_ALL_RIDING: + if( !sd || sc->option&(OPTION_RIDING|OPTION_DRAGON|OPTION_WUG|OPTION_MADOGEAR) ) return 0; - pc_unequipitem(sd,i,3); - } - if (tick == 1) return 1; // Minimal duration: Only strip without causing the SC - break; - case SC_STRIPARMOR: - if (sd && !(flag&SCSTART_LOADED)) { - short i; - if(sd->bonus.unstripable_equip&EQP_ARMOR) + break; + case SC_SIGNUMCRUCIS: + // Only affects demons and undead element (but not players) + if((!undead_flag && status->race!=RC_DEMON) || bl->type == BL_PC) return 0; - i = sd->equip_index[EQI_ARMOR]; - if ( i < 0 || !sd->inventory_data[i] ) + break; + case SC_AETERNA: + if( sc->data[SC_STONE] && sc->opt1 == OPT1_STONE ) return 0; - pc_unequipitem(sd,i,3); - } - if (tick == 1) return 1; // Minimal duration: Only strip without causing the SC - break; - case SC_STRIPHELM: - if (sd && !(flag&SCSTART_LOADED)) { - short i; - if(sd->bonus.unstripable_equip&EQP_HELM) + break; + case SC_KYRIE: + case SC_TUNAPARTY: + if (bl->type == BL_MOB) return 0; - i = sd->equip_index[EQI_HEAD_TOP]; - if ( i < 0 || !sd->inventory_data[i] ) + break; + case SC_ADRENALINE: + if(sd && !pc_check_weapontype(sd,skill_get_weapontype(BS_ADRENALINE))) return 0; - pc_unequipitem(sd,i,3); - } - if (tick == 1) return 1; // Minimal duration: Only strip without causing the SC - break; - case SC_SHADOW_STRIP: - if (sd && !(flag&SCSTART_LOADED)) { - if (sd->bonus.unstripable_equip&EQP_SHADOW_GEAR) + break; + case SC_ADRENALINE2: + if(sd && !pc_check_weapontype(sd,skill_get_weapontype(BS_ADRENALINE2))) return 0; - - bool successFlag = false; - - for( int i = EQI_SHADOW_ARMOR; i <= EQI_SHADOW_ACC_L; i++ ){ - int index = sd->equip_index[i]; - - if( index >= 0 && sd->inventory_data[index] != nullptr ){ - pc_unequipitem( sd, index, 3 ); - successFlag = true; + break; + case SC_CLOAKING: + // Avoid cloaking with no wall and low skill level. [Skotlex] + // Due to the cloaking card, we have to check the wall versus to known + // skill level rather than the used one. [Skotlex] + // if (sd && val1 < 3 && skill_check_cloaking(bl,NULL)) + if( sd && pc_checkskill(sd, AS_CLOAKING) < 3 && !skill_check_cloaking(bl,NULL) ) + return 0; + break; + case SC_MODECHANGE: { + int32 mode; + struct status_data *bstatus = status_get_base_status(bl); + if (!bstatus) return 0; + if (sc->data[type]) { // Pile up with previous values. + if (!val2) val2 = sc->data[type]->val2; + val3 |= sc->data[type]->val3; + val4 |= sc->data[type]->val4; + } + mode = val2 ? ((val2&~MD_MASK) | val2) : bstatus->mode; // Base mode + if (val4) mode = static_cast(mode&~val4); // Del mode + if (val3) mode = static_cast(mode | val3); // Add mode + if (mode == bstatus->mode) { // No change. + if (sc->data[type]) // Abort previous status + return status_change_end(bl, type, INVALID_TIMER); + return 0; } } - - if (!successFlag) - return 0; - } - if (tick == 1) - return 1; - break; - case SC_MERC_FLEEUP: - case SC_MERC_ATKUP: - case SC_MERC_HPUP: - case SC_MERC_SPUP: - case SC_MERC_HITUP: - if( bl->type != BL_MER ) - return 0; // Stats only for Mercenaries - break; - case SC_STRFOOD: - if (sc->data[SC_FOOD_STR_CASH] && sc->data[SC_FOOD_STR_CASH]->val1 > val1) - return 0; - break; - case SC_AGIFOOD: - if (sc->data[SC_FOOD_AGI_CASH] && sc->data[SC_FOOD_AGI_CASH]->val1 > val1) - return 0; - break; - case SC_VITFOOD: - if (sc->data[SC_FOOD_VIT_CASH] && sc->data[SC_FOOD_VIT_CASH]->val1 > val1) - return 0; - break; - case SC_INTFOOD: - if (sc->data[SC_FOOD_INT_CASH] && sc->data[SC_FOOD_INT_CASH]->val1 > val1) - return 0; - break; - case SC_DEXFOOD: - if (sc->data[SC_FOOD_DEX_CASH] && sc->data[SC_FOOD_DEX_CASH]->val1 > val1) - return 0; - break; - case SC_LUKFOOD: - if (sc->data[SC_FOOD_LUK_CASH] && sc->data[SC_FOOD_LUK_CASH]->val1 > val1) - return 0; - break; - case SC_FOOD_STR_CASH: - if ((sc->data[SC_STRFOOD] && sc->data[SC_STRFOOD]->val1 > val1) || sc->data[SC_2011RWC_SCROLL]) - return 0; - break; - case SC_FOOD_AGI_CASH: - if ((sc->data[SC_AGIFOOD] && sc->data[SC_AGIFOOD]->val1 > val1) || sc->data[SC_2011RWC_SCROLL]) - return 0; - break; - case SC_FOOD_VIT_CASH: - if ((sc->data[SC_VITFOOD] && sc->data[SC_VITFOOD]->val1 > val1) || sc->data[SC_2011RWC_SCROLL]) - return 0; - break; - case SC_FOOD_INT_CASH: - if ((sc->data[SC_INTFOOD] && sc->data[SC_INTFOOD]->val1 > val1) || sc->data[SC_2011RWC_SCROLL]) - return 0; - break; - case SC_FOOD_DEX_CASH: - if ((sc->data[SC_DEXFOOD] && sc->data[SC_DEXFOOD]->val1 > val1) || sc->data[SC_2011RWC_SCROLL]) - return 0; - break; - case SC_FOOD_LUK_CASH: - if ((sc->data[SC_LUKFOOD] && sc->data[SC_LUKFOOD]->val1 > val1) || sc->data[SC_2011RWC_SCROLL]) - return 0; - break; - case SC_CAMOUFLAGE: - if( sd && pc_checkskill(sd, RA_CAMOUFLAGE) < 3 && !skill_check_camouflage(bl,NULL) ) - return 0; - break; - case SC__STRIPACCESSORY: - if( sd ) { - short i = -1; - if( !(sd->bonus.unstripable_equip&EQP_ACC_L) ) { - i = sd->equip_index[EQI_ACC_L]; - if( i >= 0 && sd->inventory_data[i] && sd->inventory_data[i]->type == IT_ARMOR ) - pc_unequipitem(sd,i,3); // Left-Accessory + break; + // Strip skills, need to divest something or it fails. + case SC_STRIPWEAPON: + if (val2 == 1) + val2 = 0; // Brandish Spear/Bowling Bash effet. Do not take weapon off. + else if (sd && !(flag&SCSTART_LOADED)) { // Apply sc anyway if loading saved sc_data + short i; + uint8 successFlag = 0; + if(sd->bonus.unstripable_equip&EQP_WEAPON) + return 0; + i = sd->equip_index[EQI_HAND_L]; + if (i>=0 && sd->inventory_data[i] && sd->inventory_data[i]->type == IT_WEAPON) { + successFlag|=1; + pc_unequipitem(sd,i,3); // Left-hand weapon + } + + i = sd->equip_index[EQI_HAND_R]; + if (i>=0 && sd->inventory_data[i] && sd->inventory_data[i]->type == IT_WEAPON) { + successFlag|=2; + pc_unequipitem(sd,i,3); + } + if (!successFlag) return 0; } - if( !(sd->bonus.unstripable_equip&EQP_ACC_R) ) { - i = sd->equip_index[EQI_ACC_R]; - if( i >= 0 && sd->inventory_data[i] && sd->inventory_data[i]->type == IT_ARMOR ) - pc_unequipitem(sd,i,3); // Right-Accessory + if (tick == 1) return 1; // Minimal duration: Only strip without causing the SC + break; + case SC_STRIPSHIELD: + if( val2 == 1 ) val2 = 0; // GX effect. Do not take shield off.. + else + if (sd && !(flag&SCSTART_LOADED)) { + short i; + if(sd->bonus.unstripable_equip&EQP_SHIELD) + return 0; + i = sd->equip_index[EQI_HAND_L]; + if ( i < 0 || !sd->inventory_data[i] || sd->inventory_data[i]->type != IT_ARMOR ) + return 0; + pc_unequipitem(sd,i,3); } - if( i < 0 ) - return 0; - } - if (tick == 1) return 1; // Minimal duration: Only strip without causing the SC - break; - case SC_TOXIN: - case SC_PARALYSE: - case SC_VENOMBLEED: - case SC_MAGICMUSHROOM: - case SC_DEATHHURT: - case SC_PYREXIA: - case SC_OBLIVIONCURSE: - case SC_LEECHESEND: - if (val3 == 0) // Don't display icon on self - flag |= SCSTART_NOICON; - for (int32 i = SC_TOXIN; i <= SC_LEECHESEND; i++) { - if (sc->data[i] && sc->data[i]->val3 == 1) // It doesn't stack or even renew on the target - return 0; - else if (sc->data[i] && sc->data[i]->val3 == 0) - status_change_end(bl, static_cast(i), INVALID_TIMER); // End the bonus part on the caster - } - break; - case SC_SATURDAYNIGHTFEVER: - if (sc->data[SC_BERSERK] || sc->data[SC_INSPIRATION]) - return 0; - break; - case SC_MAGNETICFIELD: // This skill does not affect players using Hover. [Lighta] - if(sc->data[SC_HOVERING]) - return 0; - break; - case SC_HEAT_BARREL: - //kRO Update 2014-02-12 - //- Cannot be stacked with Platinum Alter and Madness Canceler [Cydh] - if (sc->data[SC_P_ALTER] || sc->data[SC_MADNESSCANCEL]) - return 0; - break; - case SC_P_ALTER: - if (sc->data[SC_HEAT_BARREL] || sc->data[SC_MADNESSCANCEL]) - return 0; - break; - case SC_MADNESSCANCEL: - if (sc->data[type]) { // Toggle the status but still consume requirements. - status_change_end(bl, type, INVALID_TIMER); - return 0; - } - if (sc->data[SC_P_ALTER] || sc->data[SC_HEAT_BARREL]) - return 0; - break; - case SC_KINGS_GRACE: - if (sc->data[SC_DEVOTION] || sc->data[SC_WHITEIMPRISON]) - return 0; - break; - case SC_GROOMING: - case SC_CHATTERING: - if (sc->data[type]) - return 0; + if (tick == 1) return 1; // Minimal duration: Only strip without causing the SC + break; + case SC_STRIPARMOR: + if (sd && !(flag&SCSTART_LOADED)) { + short i; + if(sd->bonus.unstripable_equip&EQP_ARMOR) + return 0; + i = sd->equip_index[EQI_ARMOR]; + if ( i < 0 || !sd->inventory_data[i] ) + return 0; + pc_unequipitem(sd,i,3); + } + if (tick == 1) return 1; // Minimal duration: Only strip without causing the SC + break; + case SC_STRIPHELM: + if (sd && !(flag&SCSTART_LOADED)) { + short i; + if(sd->bonus.unstripable_equip&EQP_HELM) + return 0; + i = sd->equip_index[EQI_HEAD_TOP]; + if ( i < 0 || !sd->inventory_data[i] ) + return 0; + pc_unequipitem(sd,i,3); + } + if (tick == 1) return 1; // Minimal duration: Only strip without causing the SC + break; + case SC_SHADOW_STRIP: + if (sd && !(flag&SCSTART_LOADED)) { + if (sd->bonus.unstripable_equip&EQP_SHADOW_GEAR) + return 0; - case SC_BURNT: - if( sc->data[SC_CHILL] ) - return 0; - break; + bool successFlag = false; - case SC_WEDDING: - case SC_XMAS: - case SC_SUMMER: - case SC_HANBOK: - case SC_OKTOBERFEST: - case SC_DRESSUP: - if (!vd) - return 0; - break; - } + for( int i = EQI_SHADOW_ARMOR; i <= EQI_SHADOW_ACC_L; i++ ){ + int index = sd->equip_index[i]; - // Check for resistances - if(status_has_mode(status,MD_STATUSIMMUNE) && !(flag&SCSTART_NOAVOID)) { - if (type>=SC_COMMON_MIN && type <= SC_COMMON_MAX) - return 0; - switch (type) { - case SC_BLESSING: - case SC_DECREASEAGI: - case SC_PROVOKE: - case SC_COMA: -#ifndef RENEWAL - case SC_GRAVITATION: -#endif - case SC_SUITON: - case SC_STRIPWEAPON: - case SC_STRIPARMOR: - case SC_STRIPSHIELD: - case SC_STRIPHELM: - case SC_RICHMANKIM: - case SC_ROKISWEIL: - case SC_FOGWALL: - case SC_WHITEIMPRISON: - case SC_FEAR: - case SC_FREEZING: - case SC_BURNING: - case SC_MARSHOFABYSS: - case SC_ADORAMUS: - case SC_PARALYSIS: - case SC_DEEPSLEEP: - case SC_CRYSTALIZE: - case SC_TEARGAS: - case SC_TEARGAS_SOB: - case SC_PYREXIA: - case SC_DEATHHURT: - case SC_TOXIN: - case SC_PARALYSE: - case SC_VENOMBLEED: - case SC_MAGICMUSHROOM: - case SC_OBLIVIONCURSE: - case SC_LEECHESEND: - case SC_BANDING_DEFENCE: - case SC__ENERVATION: - case SC__GROOMY: - case SC__IGNORANCE: - case SC__LAZINESS: - case SC__UNLUCKY: - case SC__WEAKNESS: - case SC_BITE: - case SC_MAGNETICFIELD: - case SC_NETHERWORLD: - case SC_CRESCENTELBOW: - case SC_VACUUM_EXTREME: - case SC_CATNIPPOWDER: - case SC_SV_ROOTTWIST: - case SC_BITESCAR: - case SC_SP_SHA: - case SC_FRESHSHRIMP: - case SC_SHADOW_STRIP: + if( index >= 0 && sd->inventory_data[index] != nullptr ){ + pc_unequipitem( sd, index, 3 ); + successFlag = true; + } + } + + if (!successFlag) + return 0; + } + if (tick == 1) + return 1; + break; + case SC_MERC_FLEEUP: + case SC_MERC_ATKUP: + case SC_MERC_HPUP: + case SC_MERC_SPUP: + case SC_MERC_HITUP: + if( bl->type != BL_MER ) + return 0; // Stats only for Mercenaries + break; + case SC_STRFOOD: + if (sc->data[SC_FOOD_STR_CASH] && sc->data[SC_FOOD_STR_CASH]->val1 > val1) return 0; - } - } - // Check for mvp resistance // atm only those who OS - if(status_has_mode(status,MD_MVP) && !(flag&SCSTART_NOAVOID)) { - switch (type) { - case SC_COMA: - // continue list... - return 0; - } + break; + case SC_AGIFOOD: + if (sc->data[SC_FOOD_AGI_CASH] && sc->data[SC_FOOD_AGI_CASH]->val1 > val1) + return 0; + break; + case SC_VITFOOD: + if (sc->data[SC_FOOD_VIT_CASH] && sc->data[SC_FOOD_VIT_CASH]->val1 > val1) + return 0; + break; + case SC_INTFOOD: + if (sc->data[SC_FOOD_INT_CASH] && sc->data[SC_FOOD_INT_CASH]->val1 > val1) + return 0; + break; + case SC_DEXFOOD: + if (sc->data[SC_FOOD_DEX_CASH] && sc->data[SC_FOOD_DEX_CASH]->val1 > val1) + return 0; + break; + case SC_LUKFOOD: + if (sc->data[SC_FOOD_LUK_CASH] && sc->data[SC_FOOD_LUK_CASH]->val1 > val1) + return 0; + break; + case SC_FOOD_STR_CASH: + if (sc->data[SC_STRFOOD] && sc->data[SC_STRFOOD]->val1 > val1) + return 0; + break; + case SC_FOOD_AGI_CASH: + if (sc->data[SC_AGIFOOD] && sc->data[SC_AGIFOOD]->val1 > val1) + return 0; + break; + case SC_FOOD_VIT_CASH: + if (sc->data[SC_VITFOOD] && sc->data[SC_VITFOOD]->val1 > val1) + return 0; + break; + case SC_FOOD_INT_CASH: + if (sc->data[SC_INTFOOD] && sc->data[SC_INTFOOD]->val1 > val1) + return 0; + break; + case SC_FOOD_DEX_CASH: + if (sc->data[SC_DEXFOOD] && sc->data[SC_DEXFOOD]->val1 > val1) + return 0; + break; + case SC_FOOD_LUK_CASH: + if (sc->data[SC_LUKFOOD] && sc->data[SC_LUKFOOD]->val1 > val1) + return 0; + break; + case SC_CAMOUFLAGE: + if( sd && pc_checkskill(sd, RA_CAMOUFLAGE) < 3 && !skill_check_camouflage(bl,NULL) ) + return 0; + break; + case SC__STRIPACCESSORY: + if( sd ) { + short i = -1; + if( !(sd->bonus.unstripable_equip&EQP_ACC_L) ) { + i = sd->equip_index[EQI_ACC_L]; + if( i >= 0 && sd->inventory_data[i] && sd->inventory_data[i]->type == IT_ARMOR ) + pc_unequipitem(sd,i,3); // Left-Accessory + } + if( !(sd->bonus.unstripable_equip&EQP_ACC_R) ) { + i = sd->equip_index[EQI_ACC_R]; + if( i >= 0 && sd->inventory_data[i] && sd->inventory_data[i]->type == IT_ARMOR ) + pc_unequipitem(sd,i,3); // Right-Accessory + } + if( i < 0 ) + return 0; + } + if (tick == 1) return 1; // Minimal duration: Only strip without causing the SC + break; + case SC_C_MARKER: + if (src == bl) + return 0; + else { + struct status_change *tsc = status_get_sc(bl); + // Failed if the target is already marked and the new marker that isn't same marker + if (tsc && tsc->data[type] && tsc->data[type]->val2 != src->id) + return 0; + } + break; + case SC_MADNESSCANCEL: + if (sc->data[type]) { // Toggle the status but still consume requirements. + status_change_end(bl, type, INVALID_TIMER); + return 0; + } + break; + case SC_TOXIN: + case SC_PARALYSE: + case SC_VENOMBLEED: + case SC_MAGICMUSHROOM: + case SC_DEATHHURT: + case SC_PYREXIA: + case SC_OBLIVIONCURSE: + case SC_LEECHESEND: + if (val3 == 0) // Don't display icon on self + flag |= SCSTART_NOICON; + for (int32 i = SC_TOXIN; i <= SC_LEECHESEND; i++) { + if (sc->data[i] && sc->data[i]->val3 == 1) // It doesn't stack or even renew on the target + return 0; + else if (sc->data[i] && sc->data[i]->val3 == 0) + status_change_end(bl, static_cast(i), INVALID_TIMER); // End the bonus part on the caster + } + break; } // Before overlapping fail, one must check for status cured. switch (type) { - case SC_BLESSING: - // !TODO: Blessing and Agi up should do 1 damage against players on Undead Status, even on PvM - // !but cannot be plagiarized (this requires aegis investigation on packets and official behavior) [Brainstorm] - if ((!undead_flag && status->race != RC_DEMON) || bl->type == BL_PC) { - if (sc->data[SC_STONE] && sc->opt1 == OPT1_STONE) - status_change_end(bl, SC_STONE, INVALID_TIMER); - if (sc->data[SC_CURSE]) { - status_change_end(bl, SC_CURSE, INVALID_TIMER); - return 1; // End Curse and do not give stat boost + case SC_BLESSING: + // !TODO: Blessing and Agi up should do 1 damage against players on Undead Status, even on PvM + // !but cannot be plagiarized (this requires aegis investigation on packets and official behavior) [Brainstorm] + if ((!undead_flag && status->race!=RC_DEMON) || bl->type == BL_PC) { + status_change_end(bl, SC_CURSE, INVALID_TIMER); + if (sc->data[SC_STONE] && sc->opt1 == OPT1_STONE) + status_change_end(bl, SC_STONE, INVALID_TIMER); + if (sc->data[SC_CURSE]) { + status_change_end(bl, SC_CURSE, INVALID_TIMER); + return 1; // End Curse and do not give stat boost + } } - } - if(sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_HIGH) - status_change_end(bl, SC_SPIRIT, INVALID_TIMER); - break; - case SC_INCREASEAGI: - status_change_end(bl, SC_DECREASEAGI, INVALID_TIMER); - if(sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_HIGH) - status_change_end(bl, SC_SPIRIT, INVALID_TIMER); - break; - case SC_QUAGMIRE: - status_change_end(bl, SC_LOUD, INVALID_TIMER); - status_change_end(bl, SC_CONCENTRATE, INVALID_TIMER); - status_change_end(bl, SC_TRUESIGHT, INVALID_TIMER); - status_change_end(bl, SC_WINDWALK, INVALID_TIMER); - status_change_end(bl, SC_MAGNETICFIELD, INVALID_TIMER); - // Also blocks the ones below... - case SC_DECREASEAGI: - if (type == SC_DECREASEAGI) { - status_change_end(bl, SC_DECREASEAGI, INVALID_TIMER); - status_change_end(bl, SC_ADORAMUS, INVALID_TIMER); - } - status_change_end(bl, SC_CARTBOOST, INVALID_TIMER); - status_change_end(bl, SC_GN_CARTBOOST, INVALID_TIMER); - // Also blocks the ones below... -#ifndef RENEWAL - case SC_DONTFORGETME: -#endif - status_change_end(bl, SC_INCREASEAGI, INVALID_TIMER); - status_change_end(bl, SC_ADRENALINE, INVALID_TIMER); - status_change_end(bl, SC_ADRENALINE2, INVALID_TIMER); - status_change_end(bl, SC_SPEARQUICKEN, INVALID_TIMER); - status_change_end(bl, SC_TWOHANDQUICKEN, INVALID_TIMER); - status_change_end(bl, SC_ONEHAND, INVALID_TIMER); - status_change_end(bl, SC_MERC_QUICKEN, INVALID_TIMER); - status_change_end(bl, SC_ACCELERATION, INVALID_TIMER); - break; -#ifdef RENEWAL - case SC_RICHMANKIM: - case SC_ETERNALCHAOS: - case SC_DRUMBATTLE: - case SC_NIBELUNGEN: - case SC_ROKISWEIL: - case SC_INTOABYSS: - case SC_SIEGFRIED: - status_change_end(bl, SC_RICHMANKIM, INVALID_TIMER); - status_change_end(bl, SC_ETERNALCHAOS, INVALID_TIMER); - status_change_end(bl, SC_DRUMBATTLE, INVALID_TIMER); - status_change_end(bl, SC_NIBELUNGEN, INVALID_TIMER); - status_change_end(bl, SC_ROKISWEIL, INVALID_TIMER); - status_change_end(bl, SC_INTOABYSS, INVALID_TIMER); - status_change_end(bl, SC_SIEGFRIED, INVALID_TIMER); - break; - case SC_WHISTLE: - case SC_ASSNCROS: - case SC_POEMBRAGI: - case SC_APPLEIDUN: - status_change_end(bl, SC_WHISTLE, INVALID_TIMER); - status_change_end(bl, SC_ASSNCROS, INVALID_TIMER); - status_change_end(bl, SC_POEMBRAGI, INVALID_TIMER); - status_change_end(bl, SC_APPLEIDUN, INVALID_TIMER); - break; - case SC_DONTFORGETME: - status_change_end(bl, SC_INCREASEAGI, INVALID_TIMER); - status_change_end(bl, SC_ADRENALINE, INVALID_TIMER); - status_change_end(bl, SC_ADRENALINE2, INVALID_TIMER); - status_change_end(bl, SC_SPEARQUICKEN, INVALID_TIMER); - status_change_end(bl, SC_TWOHANDQUICKEN, INVALID_TIMER); - status_change_end(bl, SC_ONEHAND, INVALID_TIMER); - status_change_end(bl, SC_MERC_QUICKEN, INVALID_TIMER); - status_change_end(bl, SC_ACCELERATION, INVALID_TIMER); - case SC_HUMMING: - case SC_FORTUNE: - case SC_SERVICE4U: - status_change_end(bl, SC_DONTFORGETME, INVALID_TIMER); - status_change_end(bl, SC_HUMMING, INVALID_TIMER); - status_change_end(bl, SC_FORTUNE, INVALID_TIMER); - status_change_end(bl, SC_SERVICE4U, INVALID_TIMER); - break; -#endif - case SC_ADORAMUS: - status_change_end(bl, SC_DECREASEAGI, INVALID_TIMER); - break; - case SC_ONEHAND: - // Removes the Aspd potion effect, as reported by Vicious. [Skotlex] - status_change_end(bl, SC_ASPDPOTION0, INVALID_TIMER); - status_change_end(bl, SC_ASPDPOTION1, INVALID_TIMER); - status_change_end(bl, SC_ASPDPOTION2, INVALID_TIMER); - status_change_end(bl, SC_ASPDPOTION3, INVALID_TIMER); - break; - case SC_MAXOVERTHRUST: - // Cancels Normal Overthrust. [Skotlex] - status_change_end(bl, SC_OVERTHRUST, INVALID_TIMER); - break; - case SC_SUNSTANCE: - case SC_LUNARSTANCE: - case SC_STARSTANCE: - case SC_UNIVERSESTANCE: - if (sc->data[type]) + if(sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_HIGH) + status_change_end(bl, SC_SPIRIT, INVALID_TIMER); break; - status_change_end(bl, SC_SUNSTANCE, INVALID_TIMER); - status_change_end(bl, SC_LUNARSTANCE, INVALID_TIMER); - status_change_end(bl, SC_STARSTANCE, INVALID_TIMER); - status_change_end(bl, SC_UNIVERSESTANCE, INVALID_TIMER); - break; - case SC_SPIRIT: - case SC_SOULGOLEM: - case SC_SOULSHADOW: - case SC_SOULFALCON: - case SC_SOULFAIRY: - if (sc->data[type]) + case SC_INCREASEAGI: + if(sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_HIGH) + status_change_end(bl, SC_SPIRIT, INVALID_TIMER); break; - status_change_end(bl, SC_SPIRIT, INVALID_TIMER); - status_change_end(bl, SC_SOULGOLEM, INVALID_TIMER); - status_change_end(bl, SC_SOULSHADOW, INVALID_TIMER); - status_change_end(bl, SC_SOULFALCON, INVALID_TIMER); - status_change_end(bl, SC_SOULFAIRY, INVALID_TIMER); - break; - case SC_MAGNIFICAT: - status_change_end(bl,SC_OFFERTORIUM,INVALID_TIMER); - break; - case SC_OFFERTORIUM: - status_change_end(bl, SC_MAGNIFICAT, INVALID_TIMER); - status_change_end(bl, SC_BLIND, INVALID_TIMER); - status_change_end(bl, SC_CURSE, INVALID_TIMER); - status_change_end(bl, SC_POISON, INVALID_TIMER); - status_change_end(bl, SC_HALLUCINATION, INVALID_TIMER); - status_change_end(bl, SC_CONFUSION, INVALID_TIMER); - status_change_end(bl, SC_BLEEDING, INVALID_TIMER); - status_change_end(bl, SC_BURNING, INVALID_TIMER); - status_change_end(bl, SC_FREEZING, INVALID_TIMER); - status_change_end(bl, SC_MANDRAGORA, INVALID_TIMER); - status_change_end(bl, SC_PARALYSE, INVALID_TIMER); - status_change_end(bl, SC_PYREXIA, INVALID_TIMER); - status_change_end(bl, SC_DEATHHURT, INVALID_TIMER); - status_change_end(bl, SC_LEECHESEND, INVALID_TIMER); - status_change_end(bl, SC_VENOMBLEED, INVALID_TIMER); - status_change_end(bl, SC_TOXIN, INVALID_TIMER); - status_change_end(bl, SC_MAGICMUSHROOM, INVALID_TIMER); - break; -#ifndef RENEWAL - case SC_KYRIE: - // Cancels Assumptio - status_change_end(bl, SC_ASSUMPTIO, INVALID_TIMER); - break; -#endif - case SC_DELUGE: - if (sc->data[SC_FOGWALL] && sc->data[SC_BLIND]) - status_change_end(bl, SC_BLIND, INVALID_TIMER); - break; - case SC_SILENCE: - if (sc->data[SC_GOSPEL] && sc->data[SC_GOSPEL]->val4 == BCT_SELF) - status_change_end(bl, SC_GOSPEL, INVALID_TIMER); - break; - case SC_FREEZE: - status_change_end(bl, SC_AETERNA, INVALID_TIMER); - break; - case SC_HIDING: - status_change_end(bl, SC_CLOSECONFINE, INVALID_TIMER); - status_change_end(bl, SC_CLOSECONFINE2, INVALID_TIMER); - break; - case SC_BERSERK: - if( val3 == SC__BLOODYLUST ) + case SC_DELUGE: + if (sc->data[SC_FOGWALL] && sc->data[SC_BLIND]) + status_change_end(bl, SC_BLIND, INVALID_TIMER); break; - if(battle_config.berserk_cancels_buffs) { - status_change_end(bl, SC_ONEHAND, INVALID_TIMER); - status_change_end(bl, SC_TWOHANDQUICKEN, INVALID_TIMER); - status_change_end(bl, SC_CONCENTRATION, INVALID_TIMER); - status_change_end(bl, SC_PARRYING, INVALID_TIMER); - status_change_end(bl, SC_AURABLADE, INVALID_TIMER); - status_change_end(bl, SC_MERC_QUICKEN, INVALID_TIMER); - } -#ifdef RENEWAL - else { - status_change_end(bl, SC_TWOHANDQUICKEN, INVALID_TIMER); - } -#endif - break; - case SC_ASSUMPTIO: -#ifndef RENEWAL - status_change_end(bl, SC_KYRIE, INVALID_TIMER); -#endif - status_change_end(bl, SC_KAITE, INVALID_TIMER); - break; - case SC_KAITE: - status_change_end(bl, SC_ASSUMPTIO, INVALID_TIMER); - break; - case SC_GN_CARTBOOST: - case SC_CARTBOOST: - if(sc->data[SC_DECREASEAGI]) { // Cancel Decrease Agi, but take no further effect [Skotlex] - status_change_end(bl, SC_DECREASEAGI, INVALID_TIMER); - return 0; - } - //Cart Boost cannot be affected by Slow grace. Assumed if player got Slow Grace first, Cart Boost is failed - //since Cart Boost don't cancel Slow Grace effect - //http://irowiki.org/wiki/Cart_Boost_%28Genetic%29 (view date: 2014-01-26) - //http://irowiki.org/wiki/Cart_Boost (view date: 2014-01-26) - if(sc->data[SC_DONTFORGETME]) - return 0; - break; - case SC_FUSION: - status_change_end(bl, SC_SPIRIT, INVALID_TIMER); - break; - case SC_ADJUSTMENT: - status_change_end(bl, SC_MADNESSCANCEL, INVALID_TIMER); - break; - case SC_MADNESSCANCEL: - status_change_end(bl, SC_ADJUSTMENT, INVALID_TIMER); - break; - // NPC_CHANGEUNDEAD will debuff Blessing and Agi Up - case SC_CHANGEUNDEAD: - status_change_end(bl, SC_BLESSING, INVALID_TIMER); - status_change_end(bl, SC_INCREASEAGI, INVALID_TIMER); - break; - case SC_STRFOOD: - status_change_end(bl, SC_FOOD_STR_CASH, INVALID_TIMER); - break; - case SC_AGIFOOD: - status_change_end(bl, SC_FOOD_AGI_CASH, INVALID_TIMER); - break; - case SC_VITFOOD: - status_change_end(bl, SC_FOOD_VIT_CASH, INVALID_TIMER); - break; - case SC_INTFOOD: - status_change_end(bl, SC_FOOD_INT_CASH, INVALID_TIMER); - break; - case SC_DEXFOOD: - status_change_end(bl, SC_FOOD_DEX_CASH, INVALID_TIMER); - break; - case SC_LUKFOOD: - status_change_end(bl, SC_FOOD_LUK_CASH, INVALID_TIMER); - break; - case SC_FOOD_STR_CASH: - status_change_end(bl, SC_STRFOOD, INVALID_TIMER); - break; - case SC_FOOD_AGI_CASH: - status_change_end(bl, SC_AGIFOOD, INVALID_TIMER); - break; - case SC_FOOD_VIT_CASH: - status_change_end(bl, SC_VITFOOD, INVALID_TIMER); - break; - case SC_FOOD_INT_CASH: - status_change_end(bl, SC_INTFOOD, INVALID_TIMER); - break; - case SC_FOOD_DEX_CASH: - status_change_end(bl, SC_DEXFOOD, INVALID_TIMER); - break; - case SC_FOOD_LUK_CASH: - status_change_end(bl, SC_LUKFOOD, INVALID_TIMER); - break; - case SC_MARSHOFABYSS: - status_change_end(bl, SC_INCREASEAGI, INVALID_TIMER); - status_change_end(bl, SC_WINDWALK, INVALID_TIMER); - status_change_end(bl, SC_ASPDPOTION0, INVALID_TIMER); - status_change_end(bl, SC_ASPDPOTION1, INVALID_TIMER); - status_change_end(bl, SC_ASPDPOTION2, INVALID_TIMER); - status_change_end(bl, SC_ASPDPOTION3, INVALID_TIMER); - break; - case SC_SWINGDANCE: - case SC_SYMPHONYOFLOVER: - case SC_MOONLITSERENADE: - case SC_RUSHWINDMILL: - case SC_ECHOSONG: - case SC_HARMONIZE: // Group A doesn't overlap - if (type != SC_SWINGDANCE) status_change_end(bl, SC_SWINGDANCE, INVALID_TIMER); - if (type != SC_SYMPHONYOFLOVER) status_change_end(bl, SC_SYMPHONYOFLOVER, INVALID_TIMER); - if (type != SC_MOONLITSERENADE) status_change_end(bl, SC_MOONLITSERENADE, INVALID_TIMER); - if (type != SC_RUSHWINDMILL) status_change_end(bl, SC_RUSHWINDMILL, INVALID_TIMER); - if (type != SC_ECHOSONG) status_change_end(bl, SC_ECHOSONG, INVALID_TIMER); - if (type != SC_HARMONIZE) status_change_end(bl, SC_HARMONIZE, INVALID_TIMER); - break; - case SC_VOICEOFSIREN: - case SC_DEEPSLEEP: - case SC_GLOOMYDAY: - case SC_SONGOFMANA: - case SC_DANCEWITHWUG: - case SC_SATURDAYNIGHTFEVER: - case SC_LERADSDEW: - case SC_MELODYOFSINK: - case SC_BEYONDOFWARCRY: - case SC_UNLIMITEDHUMMINGVOICE: - case SC_SIRCLEOFNATURE: // Group B - if (type != SC_VOICEOFSIREN) status_change_end(bl, SC_VOICEOFSIREN, INVALID_TIMER); - if (type != SC_DEEPSLEEP) status_change_end(bl, SC_DEEPSLEEP, INVALID_TIMER); - if (type != SC_LERADSDEW) status_change_end(bl, SC_LERADSDEW, INVALID_TIMER); - if (type != SC_MELODYOFSINK) status_change_end(bl, SC_MELODYOFSINK, INVALID_TIMER); - if (type != SC_BEYONDOFWARCRY) status_change_end(bl, SC_BEYONDOFWARCRY, INVALID_TIMER); - if (type != SC_UNLIMITEDHUMMINGVOICE) status_change_end(bl, SC_UNLIMITEDHUMMINGVOICE, INVALID_TIMER); - if (type != SC_SIRCLEOFNATURE) status_change_end(bl, SC_SIRCLEOFNATURE, INVALID_TIMER); - if (type != SC_GLOOMYDAY) { - status_change_end(bl, SC_GLOOMYDAY, INVALID_TIMER); - status_change_end(bl, SC_GLOOMYDAY_SK, INVALID_TIMER); - } - if (type != SC_SONGOFMANA) status_change_end(bl, SC_SONGOFMANA, INVALID_TIMER); - if (type != SC_DANCEWITHWUG) status_change_end(bl, SC_DANCEWITHWUG, INVALID_TIMER); - if (type != SC_SATURDAYNIGHTFEVER) { - if (sc->data[SC_SATURDAYNIGHTFEVER]) { - sc->data[SC_SATURDAYNIGHTFEVER]->val2 = 0; // Mark to not lose hp - status_change_end(bl, SC_SATURDAYNIGHTFEVER, INVALID_TIMER); - } - } - break; - case SC_REFLECTSHIELD: - status_change_end(bl, SC_REFLECTDAMAGE, INVALID_TIMER); - break; - case SC_REFLECTDAMAGE: - status_change_end(bl, SC_REFLECTSHIELD, INVALID_TIMER); - break; - case SC_SHIELDSPELL_HP: - case SC_SHIELDSPELL_SP: - case SC_SHIELDSPELL_ATK: - if( type != SC_SHIELDSPELL_HP ) - status_change_end(bl, SC_SHIELDSPELL_HP, INVALID_TIMER); - if( type != SC_SHIELDSPELL_SP ) - status_change_end(bl, SC_SHIELDSPELL_SP, INVALID_TIMER); - if( type != SC_SHIELDSPELL_ATK ) - status_change_end(bl, SC_SHIELDSPELL_ATK, INVALID_TIMER); - break; - case SC_BANDING: - status_change_end(bl, SC_PRESTIGE, INVALID_TIMER); - break; - case SC_GT_CHANGE: - status_change_end(bl, SC_GT_REVITALIZE, INVALID_TIMER); - break; - case SC_GT_REVITALIZE: - status_change_end(bl, SC_GT_CHANGE, INVALID_TIMER); - break; - case SC_WARMER: - status_change_end(bl, SC_CRYSTALIZE, INVALID_TIMER); - status_change_end(bl, SC_FREEZING, INVALID_TIMER); - status_change_end(bl, SC_FREEZE, INVALID_TIMER); - break; - case SC_INVINCIBLE: - status_change_end(bl, SC_INVINCIBLEOFF, INVALID_TIMER); - break; - case SC_INVINCIBLEOFF: - status_change_end(bl, SC_INVINCIBLE, INVALID_TIMER); - break; - case SC_WHITEIMPRISON: - status_change_end(bl, SC_BURNING, INVALID_TIMER); - status_change_end(bl, SC_FREEZING, INVALID_TIMER); - status_change_end(bl, SC_FREEZE, INVALID_TIMER); - status_change_end(bl, SC_STONE, INVALID_TIMER); - break; - case SC_FEAR: - status_change_end(bl, SC_BLIND, INVALID_TIMER); - break; - case SC_KINGS_GRACE: - status_change_end(bl,SC_BLIND,INVALID_TIMER); - status_change_end(bl,SC_CURSE,INVALID_TIMER); - status_change_end(bl,SC_CONFUSION,INVALID_TIMER); - status_change_end(bl,SC_HALLUCINATION,INVALID_TIMER); - status_change_end(bl,SC_BURNING,INVALID_TIMER); - status_change_end(bl,SC_DEEPSLEEP,INVALID_TIMER); - // Fall through - case SC_GROOMING: - status_change_end(bl,SC_STUN,INVALID_TIMER); - status_change_end(bl,SC_FREEZE,INVALID_TIMER); - status_change_end(bl,SC_STONE,INVALID_TIMER); - status_change_end(bl,SC_SLEEP,INVALID_TIMER); - status_change_end(bl,SC_SILENCE,INVALID_TIMER); - status_change_end(bl,SC_BLEEDING,INVALID_TIMER); - status_change_end(bl,SC_POISON,INVALID_TIMER); - status_change_end(bl,SC_FEAR,INVALID_TIMER); - status_change_end(bl,SC_MANDRAGORA,INVALID_TIMER); - status_change_end(bl,SC_CRYSTALIZE,INVALID_TIMER); - status_change_end(bl,SC_FREEZING,INVALID_TIMER); - break; - case SC_2011RWC_SCROLL: - status_change_end(bl,SC_FOOD_STR_CASH,INVALID_TIMER); - status_change_end(bl,SC_FOOD_AGI_CASH,INVALID_TIMER); - status_change_end(bl,SC_FOOD_VIT_CASH,INVALID_TIMER); - status_change_end(bl,SC_FOOD_INT_CASH,INVALID_TIMER); - status_change_end(bl,SC_FOOD_DEX_CASH,INVALID_TIMER); - status_change_end(bl,SC_FOOD_LUK_CASH,INVALID_TIMER); - break; - case SC_POWERFUL_FAITH: - case SC_FIRM_FAITH: - case SC_SINCERE_FAITH: - status_change_end(bl, SC_POWERFUL_FAITH, INVALID_TIMER); - status_change_end(bl, SC_FIRM_FAITH, INVALID_TIMER); - status_change_end(bl, SC_SINCERE_FAITH, INVALID_TIMER); - break; - case SC_FIRST_FAITH_POWER: - case SC_SECOND_JUDGE: - case SC_THIRD_EXOR_FLAME: - status_change_end(bl, SC_FIRST_FAITH_POWER, INVALID_TIMER); - status_change_end(bl, SC_SECOND_JUDGE, INVALID_TIMER); - status_change_end(bl, SC_THIRD_EXOR_FLAME, INVALID_TIMER); - break; - case SC_FIRST_BRAND: - case SC_SECOND_BRAND: - status_change_end(bl, SC_FIRST_BRAND, INVALID_TIMER); - status_change_end(bl, SC_SECOND_BRAND, INVALID_TIMER); - break; - case SC_GUARD_STANCE: - status_change_end(bl, SC_ATTACK_STANCE, INVALID_TIMER); - break; - case SC_ATTACK_STANCE: - status_change_end(bl, SC_GUARD_STANCE, INVALID_TIMER); - break; - case SC_FIGHTINGSPIRIT: - case SC_OVERED_BOOST: - case SC_MAGICPOWER: - case SC_IMPOSITIO: - case SC_KAAHI: - //These status changes always overwrite themselves even when a lower level is cast - status_change_end(bl, type, INVALID_TIMER); - break; - case SC_ENDURE: - if (sd && sd->special_state.no_walk_delay) - return 1; - break; - case SC_MADOGEAR: - for (const auto &sc : mado_statuses) { - uint16 skill_id = status_sc2skill(sc); + case SC_SILENCE: + if (sc->data[SC_GOSPEL] && sc->data[SC_GOSPEL]->val4 == BCT_SELF) + status_change_end(bl, SC_GOSPEL, INVALID_TIMER); + break; + case SC_IMPOSITIO: + if (sc->data[SC_IMPOSITIO] && sc->data[SC_IMPOSITIO]->val1 > val1) //Replace higher level effect for lower. + status_change_end(bl,SC_IMPOSITIO,INVALID_TIMER); + break; + case SC_ENDURE: + if (sd && sd->special_state.no_walk_delay) + return 1; + break; + case SC_MADOGEAR: + status_db.removeByStatusFlag(bl, { SCF_MADOCANCEL }); + if (sd) + pc_bonus_script_clear(sd, BSF_REM_ON_MADOGEAR); + break; + default: + // If new SC has OPT1 while unit has OPT1, fail it! + if (sc->opt1 && scdb->opt1) + return 0; + break; + } - if (skill_id > 0 && !skill_get_inf2(skill_id, INF2_ALLOWONMADO)) - status_change_end(bl, sc, INVALID_TIMER); + std::vector list; + + if (type == SC_BERSERK && val3 == SC__BLOODYLUST) //There is some reasons that using SC_BERSERK first before SC__BLOODYLUST itself on Akinari's fix + list = status_db.getEnd(SC__BLOODYLUST); + else + list = scdb->end; + + // End the SCs from the list + if (!list.empty()) { + bool isRemoving = false; + + for (const auto &it : list) { + sc_type rem_sc = it; + + if (sc->data[rem_sc]) { + switch (rem_sc) { + case SC_BERSERK: + case SC_SATURDAYNIGHTFEVER: + sc->data[rem_sc]->val2 = 0; // Mark to not lose hp + default: + status_change_end(bl, rem_sc, INVALID_TIMER); + isRemoving = true; + break; + } + } } - if (sd) - pc_bonus_script_clear(sd, BSF_REM_ON_MADOGEAR); - break; - case SC_CHILL: - status_change_end(bl,SC_BURNT,INVALID_TIMER); - break; + if (isRemoving && scdb->end_return) + return 0; } // Check for overlapping fails if( (sce = sc->data[type]) ) { + if (scdb->flag[SCF_OVERLAPFAIL]) + return 0; switch( type ) { case SC_MERC_FLEEUP: case SC_MERC_ATKUP: @@ -11777,98 +9557,6 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty if (sce->val2 > val2) return 0; break; - case SC_S_LIFEPOTION: - case SC_L_LIFEPOTION: - case SC_BOSSMAPINFO: - case SC_STUN: - case SC_SLEEP: - case SC_POISON: - case SC_CURSE: - case SC_SILENCE: - case SC_CONFUSION: - case SC_BLIND: - case SC_BLEEDING: - case SC_DPOISON: - case SC_CLOSECONFINE2: // Can't be re-closed in. - case SC_TINDER_BREAKER2: - case SC_MARIONETTE: - case SC_MARIONETTE2: - case SC_NOCHAT: - case SC_ABUNDANCE: - case SC_FEAR: - case SC_BURNING: - case SC_FREEZING: - case SC_WHITEIMPRISON: - case SC_TOXIN: - case SC_PARALYSE: - case SC_VENOMBLEED: - case SC_MAGICMUSHROOM: - case SC_DEATHHURT: - case SC_PYREXIA: - case SC_OBLIVIONCURSE: - case SC_LEECHESEND: - case SC_CURSEDCIRCLE_TARGET: - case SC_ELECTRICSHOCKER: - case SC_BANDING_DEFENCE: - case SC__ENERVATION: - case SC__GROOMY: - case SC__IGNORANCE: - case SC__LAZINESS: - case SC__UNLUCKY: - case SC__WEAKNESS: - case SC_DEEPSLEEP: - case SC_NETHERWORLD: - case SC_CRYSTALIZE: - case SC_MANDRAGORA: - case SC_DEFSET: - case SC_MDEFSET: - case SC_NORECOVER_STATE: - case SC_REUSE_LIMIT_A: - case SC_REUSE_LIMIT_B: - case SC_REUSE_LIMIT_C: - case SC_REUSE_LIMIT_D: - case SC_REUSE_LIMIT_E: - case SC_REUSE_LIMIT_F: - case SC_REUSE_LIMIT_G: - case SC_REUSE_LIMIT_H: - case SC_REUSE_MILLENNIUMSHIELD: - case SC_REUSE_CRUSHSTRIKE: - case SC_REUSE_REFRESH: - case SC_REUSE_STORMBLAST: - case SC_ALL_RIDING_REUSE_LIMIT: - case SC_REUSE_LIMIT_MTF: - case SC_REUSE_LIMIT_ECL: - case SC_REUSE_LIMIT_RECALL: - case SC_REUSE_LIMIT_ASPD_POTION: - case SC_DORAM_BUF_01: - case SC_DORAM_BUF_02: - case SC_REUSE_LIMIT_LUXANIMA: - return 0; - case SC_PUSH_CART: - case SC_COMBO: - case SC_DANCING: - case SC_DEVOTION: - case SC_ASPDPOTION0: - case SC_ASPDPOTION1: - case SC_ASPDPOTION2: - case SC_ASPDPOTION3: - case SC_ATKPOTION: - case SC_MATKPOTION: - case SC_ENCHANTARMS: - case SC_ARMOR_ELEMENT_WATER: - case SC_ARMOR_ELEMENT_EARTH: - case SC_ARMOR_ELEMENT_FIRE: - case SC_ARMOR_ELEMENT_WIND: - case SC_ARMOR_RESIST: - case SC_ATTHASTE_CASH: - case SC_LHZ_DUN_N1: - case SC_LHZ_DUN_N2: - case SC_LHZ_DUN_N3: - case SC_LHZ_DUN_N4: - case SC_FLASHKICK: - case SC_SOULUNITY: - case SC_SERVANT_SIGN: - break; case SC_GOSPEL: // Must not override a casting gospel char. if(sce->val4 == BCT_SELF) @@ -11906,12 +9594,15 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty return 0; // BREAK_NECK cannot be stacked with new breaks until the status is over. val2 |= sce->val2; // Stackable ailments default: + if (scdb->flag[SCF_OVERLAPIGNORELEVEL]) + break; if(sce->val1 > val1) return 1; // Return true to not mess up skill animations. [Skotlex] } } - calc_flag = StatusChangeFlagTable[type]; + vd = status_get_viewdata(bl); + calc_flag = scdb->calc_flag; if(!(flag&SCSTART_LOADED)) // &4 - Do not parse val settings when loading SCs switch(type) { @@ -11948,7 +9639,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty case SC_ADORAMUS: if (type == SC_ADORAMUS) { // 1000% base chance to blind, but still can be resisted - sc_start(src, bl, SC_BLIND, 1000, val1, skill_get_time(status_sc2skill(type), val1)); + sc_start(src, bl, SC_BLIND, 1000, val1, skill_get_time(scdb->skill_id, val1)); if (sc->data[SC_ADORAMUS]) return 0; //Adoramus can't refresh itself, but it can cause blind again } @@ -11973,8 +9664,8 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty break; case SC_AUTOBERSERK: if (status->hp < status->max_hp>>2 && - (!sc->data[SC_PROVOKE] || sc->data[SC_PROVOKE]->val2==0)) - sc_start4(src,bl,SC_PROVOKE,100,10,1,0,0,60000); + (!sc->data[SC_PROVOKE] || sc->data[SC_PROVOKE]->val4==0)) + sc_start4(src,bl,SC_PROVOKE,100,10,0,0,1,60000); tick = INFINITE_TICK; break; case SC_SIGNUMCRUCIS: @@ -12266,7 +9957,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty val3 = max(val3, 100); // Incubation time val4 = max(tick-val3, 100); // Petrify time tick = val3; - calc_flag = 0; // Actual status changes take effect on petrified state. + calc_flag = SCB_NONE; // Actual status changes take effect on petrified state. break; case SC_DPOISON: @@ -12447,7 +10138,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty case SC_JOINTBEAT: if( val2&BREAK_NECK ) - sc_start2(src,bl,SC_BLEEDING,100,val1,val3,skill_get_time2(status_sc2skill(type),val1)); + sc_start2(src,bl,SC_BLEEDING,100,val1,val3,skill_get_time2(scdb->skill_id,val1)); break; case SC_BERSERK: @@ -12457,7 +10148,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty sc_start4(src,bl, SC_ENDURE, 100,10,0,0,1, tick); // HP healing is performing after the calc_status call. // Val2 holds HP penalty - if (!val4) val4 = skill_get_time2(status_sc2skill(type),val1); + if (!val4) val4 = skill_get_time2(scdb->skill_id,val1); if (!val4) val4 = 10000; // Val4 holds damage interval val3 = tick/val4; // val3 holds skill duration tick_time = val4; // [GodLesZ] tick time @@ -12564,7 +10255,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty while( i >= 0 ) { enum sc_type type2 = types[i]; if( d_sc->data[type2] ) - status_change_start(d_bl, bl, type2, 10000, d_sc->data[type2]->val1, 0, 0, (type2 == SC_REFLECTSHIELD ? 1 : 0), skill_get_time(status_sc2skill(type2),d_sc->data[type2]->val1), (type2 == SC_DEFENDER) ? SCSTART_NOAVOID : SCSTART_NOAVOID|SCSTART_NOICON); + status_change_start(d_bl, bl, type2, 10000, d_sc->data[type2]->val1, 0, 0, (type2 == SC_REFLECTSHIELD ? 1 : 0), skill_get_time(status_db.getSkill(type2),d_sc->data[type2]->val1), (type2 == SC_DEFENDER) ? SCSTART_NOAVOID : SCSTART_NOAVOID|SCSTART_NOICON); i--; } } @@ -12743,9 +10434,9 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty val3 = 5*val1; // Def2 reduction break; case SC_PROVOKE: - // val2 signals autoprovoke. - val3 = 2+3*val1; // Atk increase - val4 = 5+5*val1; // Def reduction. + val2 = 2+3*val1; // Atk increase + val3 = 5+5*val1; // Def reduction. + // val4 signals autoprovoke. break; case SC_AVOID: // val2 = 10*val1; // Speed change rate. @@ -13166,7 +10857,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty val3 = 50 * val1; break; case SC_SATURDAYNIGHTFEVER: - if (!val4) val4 = skill_get_time2(status_sc2skill(type),val1); + if (!val4) val4 = skill_get_time2(scdb->skill_id,val1); if (!val4) val4 = 3000; val3 = tick/val4; tick_time = val4; // [GodLesZ] tick time @@ -14047,9 +11738,9 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty break; default: - if( calc_flag == SCB_NONE && StatusSkillChangeTable[type] == -1 && StatusIconChangeTable[type] == EFST_BLANK ) { + if (calc_flag == SCB_NONE && scdb->skill_id == 0 && scdb->icon == EFST_BLANK) { // Status change with no calc, no icon, and no skill associated...? - ShowError("UnknownStatusChange [%d]\n", type); + ShowError("status_change_start: Unknown SC %d\n", type); return 0; } } else // Special considerations when loading SC data. @@ -14111,89 +11802,13 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty break; } - // Values that must be set regardless of flag&4 e.g. val_flag [Ind] - switch(type) { - // Start |1 val_flag setting - case SC_ENCHANTARMS: - case SC_ROLLINGCUTTER: - case SC_BANDING: - case SC_SPHERE_1: - case SC_SPHERE_2: - case SC_SPHERE_3: - case SC_SPHERE_4: - case SC_SPHERE_5: - case SC_OVERHEAT: - case SC_LIGHTNINGWALK: - case SC_MONSTER_TRANSFORM: - case SC_ACTIVE_MONSTER_TRANSFORM: - case SC_EXPBOOST: - case SC_JEXPBOOST: - case SC_ITEMBOOST: - case SC_JP_EVENT04: - case SC_PUSH_CART: - case SC_SWORDCLAN: - case SC_ARCWANDCLAN: - case SC_GOLDENMACECLAN: - case SC_CROSSBOWCLAN: - case SC_JUMPINGCLAN: - case SC_DRESSUP: - case SC_MISTY_FROST: - case SC_MADOGEAR: - case SC_CHARGINGPIERCE_COUNT: - case SC_CLIMAX: - case SC_E_SLASH_COUNT: - val_flag |= 1; - break; - // Start |1|2 val_flag setting - case SC_FIGHTINGSPIRIT: - case SC_VENOMIMPRESS: - case SC_WEAPONBLOCKING: - case SC__INVISIBILITY: - case SC__ENERVATION: - case SC__WEAKNESS: - case SC_PROPERTYWALK: - case SC_PRESTIGE: - case SC_CRESCENTELBOW: - case SC_CHILLY_AIR_OPTION: - case SC_GUST_OPTION: - case SC_WILD_STORM_OPTION: - case SC_UPHEAVAL_OPTION: - case SC_CIRCLE_OF_FIRE_OPTION: - case SC_CLAN_INFO: - case SC_DAILYSENDMAILCNT: - val_flag |= 1|2; - break; - // Start |1|2|4 val_flag setting - case SC_POISONINGWEAPON: - case SC_CLOAKINGEXCEED: - case SC_NPC_HALLUCINATIONWALK: - case SC_HALLUCINATIONWALK: - case SC__SHADOWFORM: - case SC__GROOMY: - case SC__LAZINESS: - case SC__UNLUCKY: - case SC_FORCEOFVANGUARD: - case SC_SPELLFIST: - case SC_CURSEDCIRCLE_ATKER: - case SC_PYROTECHNIC_OPTION: - case SC_HEATER_OPTION: - case SC_AQUAPLAY_OPTION: - case SC_COOLER_OPTION: - case SC_BLAST_OPTION: - case SC_PETROLOGY_OPTION: - case SC_CURSED_SOIL_OPTION: - case SC_WATER_BARRIER: - val_flag |= 1|2|4; - break; - } - if (sd && current_equip_combo_pos > 0 && tick == INFINITE_TICK) { ShowWarning("sc_start: Item combo of item #%u contains an INFINITE_TICK duration. Skipping bonus.\n", sd->inventory_data[pc_checkequip(sd, current_equip_combo_pos)]->nameid); return 0; } /* [Ind] */ - if (StatusDisplayType[type]&bl->type) { + if (scdb->flag[SCF_DISPLAYPC] || scdb->flag[SCF_DISPLAYNPC]) { int dval1 = 0, dval2 = 0, dval3 = 0; switch (type) { @@ -14212,284 +11827,90 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty status_display_add(bl,type,dval1,dval2,dval3); } - // Those that make you stop attacking/walking.... - switch (type) { - case SC_WHITEIMPRISON: - case SC_DEEPSLEEP: - case SC_CRYSTALIZE: - if (sd && pc_issit(sd)) // Avoid sprite sync problems. - pc_setstand(sd, true); - case SC_FREEZE: - case SC_STUN: - case SC_GRAVITYCONTROL: - if (sc->data[SC_DANCING]) - unit_stop_walking(bl, 1); - case SC_TRICKDEAD: - status_change_end(bl, SC_DANCING, INVALID_TIMER); - case SC_SLEEP: - case SC_STONE: - // Cancel cast when get status [LuzZza] - if (battle_config.sc_castcancel&bl->type) - unit_skillcastcancel(bl, 0); - // Fall through - case SC_CURSEDCIRCLE_ATKER: - case SC_KINGS_GRACE: - unit_stop_attack(bl); - if (type == SC_FREEZE || type == SC_STUN || type == SC_SLEEP || type == SC_STONE) + //SC that force player to stand if is sitting + if (scdb->flag[SCF_SETSTAND] && sd && pc_issit(sd)) + pc_setstand(sd, true); + + //SC that make stop attacking [LuzZza] + if (scdb->flag[SCF_STOPATTACKING]) + unit_stop_attack(bl); + + //SC that make stop walking + if (scdb->flag[SCF_STOPWALKING]) { + switch (type) { + case SC_ANKLE: + if (battle_config.skill_trap_type || !map_flag_gvg(bl->m)) + unit_stop_walking(bl, 1); break; - // Fall through - case SC_STOP: - case SC_CONFUSION: - case SC_CLOSECONFINE: - case SC_CLOSECONFINE2: - case SC_BITE: - case SC_THORNSTRAP: - case SC_MEIKYOUSISUI: - case SC_KYOUGAKU: - case SC_PARALYSIS: - //case SC__CHAOS: - case SC_SV_ROOTTWIST: - unit_stop_walking(bl,1); - break; - case SC_CURSEDCIRCLE_TARGET: - unit_stop_attack(bl); - // Fall through - case SC_ANKLE: - case SC_SPIDERWEB: - case SC_ELECTRICSHOCKER: - case SC_MAGNETICFIELD: - case SC_NETHERWORLD: - case SC_WIDEWEB: - if (!unit_blown_immune(bl,0x1)) - unit_stop_walking(bl,1); - break; - case SC__MANHOLE: - // Manhole ignores blow_immune, when the enemy is BL_PC - if (bl->type == BL_PC || !unit_blown_immune(bl,0x1)) - unit_stop_walking(bl,1); - unit_stop_attack(bl); - break; - case SC_VACUUM_EXTREME: - if (bl->type != BL_PC && unit_blown_immune(bl, 0x1) == UB_KNOCKABLE) { - unit_stop_walking(bl,1); - unit_stop_attack(bl); - } - break; - case SC_HIDING: - case SC_CLOAKING: - case SC_CLOAKINGEXCEED: - case SC__FEINTBOMB: - case SC_CHASEWALK: - case SC_WEIGHT90: - case SC_CAMOUFLAGE: - case SC_STEALTHFIELD: - case SC_VOICEOFSIREN: - case SC_WEDDING: - case SC_XMAS: - case SC_SUMMER: - case SC_HANBOK: - case SC_OKTOBERFEST: - case SC_DRESSUP: - case SC_NEWMOON: - case SC_SUHIDE: - unit_stop_attack(bl); - break; - case SC_SILENCE: - if (battle_config.sc_castcancel&bl->type) - unit_skillcastcancel(bl, 0); - break; - case SC_ITEMSCRIPT: // Shows Buff Icons - if (sd && val2 != EFST_BLANK) - clif_status_change(bl, (enum efst_types)val2, 1, tick, 0, 0, 0); - break; + case SC__MANHOLE: + if (bl->type == BL_PC || !unit_blown_immune(bl,0x1)) + unit_stop_walking(bl,1); + break; + case SC_VACUUM_EXTREME: + if (bl->type != BL_PC && unit_blown_immune(bl, 0x1) == UB_KNOCKABLE) { + unit_stop_walking(bl,1); + unit_stop_attack(bl); + } + break; + case SC_WHITEIMPRISON: + case SC_DEEPSLEEP: + case SC_CRYSTALIZE: + case SC_FREEZE: + case SC_STUN: + case SC_GRAVITYCONTROL: + if (sc->data[SC_DANCING]) + unit_stop_walking(bl, 1); + break; + default: + if (!unit_blown_immune(bl,0x1)) + unit_stop_walking(bl,1); + break; + } } - // Set option as needed. - uint16 opt_flag = OCF_SEND_OPTION; + //SC that make stop casting + if (battle_config.sc_castcancel&bl->type && scdb->flag[SCF_STOPCASTING]) + unit_skillcastcancel(bl,0); + + sc->opt1 = scdb->opt1; + sc->opt2 |= scdb->opt2; + sc->opt3 |= scdb->opt3; + sc->option |= scdb->look; + + std::bitset opt_flag = scdb->flag; + uint16 disable_opt_flag = false; + switch(type) { - // OPT1 case SC_STONE: if (val3 > 0) sc->opt1 = OPT1_STONEWAIT; else sc->opt1 = OPT1_STONE; break; - case SC_FREEZE: sc->opt1 = OPT1_FREEZE; break; - case SC_STUN: sc->opt1 = OPT1_STUN; break; - case SC_SLEEP: sc->opt1 = OPT1_SLEEP; break; - case SC_BURNING: sc->opt1 = OPT1_BURNING; break; // Burning need this to be showed correctly. [pakpil] - case SC_WHITEIMPRISON: sc->opt1 = OPT1_IMPRISON; break; - // OPT2 - case SC_POISON: sc->opt2 |= OPT2_POISON; break; - case SC_CURSE: sc->opt2 |= OPT2_CURSE; break; - case SC_SILENCE: sc->opt2 |= OPT2_SILENCE; break; - case SC_SIGNUMCRUCIS: sc->opt2 |= OPT2_SIGNUMCRUCIS; break; - case SC_BLIND: sc->opt2 |= OPT2_BLIND; break; - case SC_ANGELUS: sc->opt2 |= OPT2_ANGELUS; break; - case SC_BLEEDING: sc->opt2 |= OPT2_BLEEDING; break; - case SC_DPOISON: sc->opt2 |= OPT2_DPOISON; break; - // OPT3 - case SC_TWOHANDQUICKEN: - case SC_ONEHAND: - case SC_SPEARQUICKEN: - case SC_CONCENTRATION: - case SC_MERC_QUICKEN: - sc->opt3 |= OPT3_QUICKEN; - opt_flag = OCF_NONE; - break; - case SC_MAXOVERTHRUST: - case SC_OVERTHRUST: - case SC_SWOO: // Why does it shares the same opt as Overthrust? Perhaps we'll never know... - sc->opt3 |= OPT3_OVERTHRUST; - opt_flag = OCF_NONE; - break; - case SC_ENERGYCOAT: - case SC_SKE: - sc->opt3 |= OPT3_ENERGYCOAT; - opt_flag = OCF_NONE; + case SC_DANCING: + if ((val1&0xFFFF) != CG_MOONLIT) + sc->opt3 |= OPT3_MOONLIT; break; case SC_INCATKRATE: // Simulate Explosion Spirits effect for NPC_POWERUP [Skotlex] if (bl->type != BL_MOB) { - opt_flag = OCF_NONE; + disable_opt_flag = true; break; } - case SC_EXPLOSIONSPIRITS: - sc->opt3 |= OPT3_EXPLOSIONSPIRITS; - opt_flag = OCF_NONE; break; - case SC_STEELBODY: - case SC_SKA: - sc->opt3 |= OPT3_STEELBODY; - opt_flag = OCF_NONE; - break; - case SC_BLADESTOP: - sc->opt3 |= OPT3_BLADESTOP; - opt_flag = OCF_NONE; - break; - case SC_AURABLADE: - sc->opt3 |= OPT3_AURABLADE; - opt_flag = OCF_NONE; - break; - case SC_BERSERK: - opt_flag = OCF_NONE; - sc->opt3 |= OPT3_BERSERK; - break; -// case ???: // doesn't seem to do anything -// sc->opt3 |= OPT3_LIGHTBLADE; -// opt_flag = OCF_NONE; -// break; - case SC_DANCING: - if ((val1&0xFFFF) == CG_MOONLIT) - sc->opt3 |= OPT3_MOONLIT; - opt_flag = OCF_NONE; - break; - case SC_MARIONETTE: - case SC_MARIONETTE2: - sc->opt3 |= OPT3_MARIONETTE; - opt_flag = OCF_NONE; - break; - case SC_ASSUMPTIO: - sc->opt3 |= OPT3_ASSUMPTIO; - opt_flag = OCF_NONE; - break; - case SC_WARM: // SG skills [Komurka] - sc->opt3 |= OPT3_WARM; - opt_flag = OCF_NONE; - break; - case SC_KAITE: - sc->opt3 |= OPT3_KAITE; - opt_flag = OCF_NONE; - break; - case SC_BUNSINJYUTSU: - sc->opt3 |= OPT3_BUNSIN; - opt_flag = OCF_NONE; - break; - case SC_SPIRIT: - sc->opt3 |= OPT3_SOULLINK; - opt_flag = OCF_NONE; - break; - case SC_CHANGEUNDEAD: - sc->opt3 |= OPT3_UNDEAD; - opt_flag = OCF_NONE; - break; -// case ???: // from DA_CONTRACT (looks like biolab mobs aura) -// sc->opt3 |= OPT3_CONTRACT; -// opt_flag = OCF_NONE; -// break; - // OPTION - case SC_HIDING: - sc->option |= OPTION_HIDE; - opt_flag = OCF_ONTOUCH; - break; - case SC_CLOAKING: - case SC_CLOAKINGEXCEED: - case SC__INVISIBILITY: - case SC_NEWMOON: - sc->option |= OPTION_CLOAK; - case SC_CAMOUFLAGE: - case SC_STEALTHFIELD: - case SC__SHADOWFORM: - opt_flag = OCF_ONTOUCH; - break; - case SC_CHASEWALK: - sc->option |= OPTION_CHASEWALK|OPTION_CLOAK; - opt_flag = OCF_ONTOUCH; - break; - case SC__FEINTBOMB: - sc->option |= OPTION_INVISIBLE; - opt_flag |= OCF_ONTOUCH|OCF_UNIT_MOVE; - break; - case SC_SIGHT: - sc->option |= OPTION_SIGHT; - break; - case SC_RUWACH: - sc->option |= OPTION_RUWACH; - break; - case SC_WEDDING: - sc->option |= OPTION_WEDDING; - opt_flag |= OCF_SEND_LOOK; - break; - case SC_XMAS: - sc->option |= OPTION_XMAS; - opt_flag |= OCF_SEND_LOOK; - break; - case SC_SUMMER: - sc->option |= OPTION_SUMMER; - opt_flag |= OCF_SEND_LOOK; - break; - case SC_HANBOK: - sc->option |= OPTION_HANBOK; - opt_flag |= OCF_SEND_LOOK; - break; - case SC_OKTOBERFEST: - sc->option |= OPTION_OKTOBERFEST; - opt_flag |= OCF_SEND_LOOK; - break; - case SC_DRESSUP: - sc->option |= OPTION_SUMMER2; - opt_flag |= OCF_SEND_LOOK; - break; - case SC_ORCISH: - sc->option |= OPTION_ORCISH; - break; - case SC_FUSION: - sc->option |= OPTION_FLYING; - break; - default: - opt_flag = OCF_NONE; } // On Aegis, when turning on a status change, first goes the option packet, then the sc packet. - if(opt_flag) { + if (!disable_opt_flag && (opt_flag[SCF_SENDOPTION] || opt_flag[SCF_ONTOUCH] || opt_flag[SCF_UNITMOVE] || opt_flag[SCF_NONPLAYER] || opt_flag[SCF_SENDLOOK])) { clif_changeoption(bl); - if(sd && (opt_flag&OCF_SEND_LOOK)) { + if(sd && opt_flag[SCF_SENDLOOK]) { clif_changelook(bl,LOOK_BASE,vd->class_); clif_changelook(bl,LOOK_WEAPON,0); clif_changelook(bl,LOOK_SHIELD,0); clif_changelook(bl,LOOK_CLOTHES_COLOR,vd->cloth_color); } } + if (calc_flag&SCB_DYE) { // Reset DYE color if (vd && vd->cloth_color) { val4 = vd->cloth_color; @@ -14508,15 +11929,15 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty calc_flag&=~SCB_BODY; }*/ - if (!(flag&SCSTART_NOICON) && !(flag&SCSTART_LOADED && StatusDisplayType[type])) { - int status_icon = StatusIconChangeTable[type]; + if (!(flag&SCSTART_NOICON) && !(flag&SCSTART_LOADED && scdb->flag[SCF_DISPLAYPC] || scdb->flag[SCF_DISPLAYNPC])) { + int status_icon = scdb->icon; #if PACKETVER < 20151104 if (status_icon == EFST_WEAPONPROPERTY) status_icon = EFST_ATTACK_PROPERTY_NOTHING + val1; // Assign status icon for older clients #endif - clif_status_change(bl, status_icon, 1, tick, (val_flag & 1) ? val1 : 1, (val_flag & 2) ? val2 : 0, (val_flag & 4) ? val3 : 0); + clif_status_change(bl, status_icon, 1, tick, scdb->flag[SCF_SENDVAL1] ? val1 : 1, scdb->flag[SCF_SENDVAL2] ? val2 : 0, scdb->flag[SCF_SENDVAL3] ? val3 : 0); } // Used as temporary storage for scs with interval ticks, so that the actual duration is sent to the client first. @@ -14548,7 +11969,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty case SC_BERSERK: case SC_MERC_HPUP: case SC_MERC_SPUP: - status_calc_bl_(bl, static_cast(calc_flag), SCO_FORCE); + status_calc_bl_(bl, static_cast(calc_flag), SCO_FORCE); break; default: status_calc_bl(bl, calc_flag); @@ -14558,8 +11979,10 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty status_calc_bl(bl, calc_flag); } - if ( sc_isnew && StatusChangeStateTable[type] ) // Non-zero - status_calc_state(bl,sc,( enum scs_flag ) StatusChangeStateTable[type],true); + // Non-zero + // Calc state for SC_STONE when OPT1_STONE in the timer + if (sc_isnew && scdb->state.any() && type != SC_STONE) + status_calc_state(bl, sc, scdb->state, true); if (sd && sd->pd) pet_sc_check(sd, type); // Skotlex: Pet Status Effect Healing @@ -14628,6 +12051,10 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty if (src->type == BL_PC && (sd = map_id2sd(src->id))) clif_crimson_marker(sd, bl, false); break; + case SC_ITEMSCRIPT: // Shows Buff Icons + if (sd) + clif_status_change(bl, (efst_type)val2, 1, tick, 0, 0, 0); + break; case SC_GVG_GIANT: case SC_GVG_GOLEM: case SC_GVG_STUN: @@ -14642,7 +12069,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty break; } - if( opt_flag&OCF_ONTOUCH && sd && !sd->npc_ontouch_.empty() ) + if( opt_flag[SCF_ONTOUCH] && sd && !sd->npc_ontouch_.empty() ) npc_touchnext_areanpc(sd,false); // Run OnTouch_ on next char in range return 1; @@ -14662,7 +12089,6 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty int status_change_clear(struct block_list* bl, int type) { struct status_change* sc; - int i; sc = status_get_sc(bl); @@ -14679,196 +12105,33 @@ int status_change_clear(struct block_list* bl, int type) if (!sc->count) return 0; - for(i = 0; i < SC_MAX; i++) { - if(!sc->data[i]) + for (const auto &it : status_db) { + sc_type status = static_cast(it.first); + + if (!sc->data[status]) + continue; + if (type == 0) { // Type 0: PC killed + if (it.second->flag[SCF_NOREMOVEONDEAD]) { + switch (status) { + case SC_ELEMENTALCHANGE: // Only when its Holy or Dark that it doesn't dispell on death + if (sc->data[status]->val2 != ELE_HOLY && sc->data[status]->val2 != ELE_DARK) + break; + default: + continue; + } + } + } + + if (type == 3 && it.second->flag[SCF_NOCLEARBUFF]) continue; - if(type == 0) { - switch (i) { // Type 0: PC killed -> Place here statuses that do not dispel on death. - case SC_ELEMENTALCHANGE: // Only when its Holy or Dark that it doesn't dispell on death - if( sc->data[i]->val2 != ELE_HOLY && sc->data[i]->val2 != ELE_DARK ) - break; - case SC_WEIGHT50: - case SC_WEIGHT90: - case SC_EDP: - case SC_MELTDOWN: - case SC_WEDDING: - case SC_XMAS: - case SC_SUMMER: - case SC_HANBOK: - case SC_OKTOBERFEST: - case SC_DRESSUP: - case SC_NOCHAT: - case SC_FUSION: - case SC_EARTHSCROLL: - case SC_READYSTORM: - case SC_READYDOWN: - case SC_READYCOUNTER: - case SC_READYTURN: - case SC_DODGE: - case SC_MIRACLE: - case SC_JAILED: - case SC_EXPBOOST: - case SC_ITEMBOOST: - case SC_HELLPOWER: - case SC_JEXPBOOST: - case SC_AUTOTRADE: - case SC_WHISTLE: - case SC_ASSNCROS: - case SC_POEMBRAGI: - case SC_APPLEIDUN: - case SC_HUMMING: - case SC_DONTFORGETME: - case SC_FORTUNE: - case SC_SERVICE4U: - case SC_FOOD_STR_CASH: - case SC_FOOD_AGI_CASH: - case SC_FOOD_VIT_CASH: - case SC_FOOD_DEX_CASH: - case SC_FOOD_INT_CASH: - case SC_FOOD_LUK_CASH: - case SC_SAVAGE_STEAK: - case SC_COCKTAIL_WARG_BLOOD: - case SC_MINOR_BBQ: - case SC_SIROMA_ICE_TEA: - case SC_DROCERA_HERB_STEAMED: - case SC_PUTTI_TAILS_NOODLES: - case SC_DEF_RATE: - case SC_MDEF_RATE: - case SC_INCHEALRATE: - case SC_INCFLEE2: - case SC_INCHIT: - case SC_ATKPOTION: - case SC_MATKPOTION: - case SC_S_LIFEPOTION: - case SC_L_LIFEPOTION: - case SC_PUSH_CART: - case SC_LIGHT_OF_REGENE: - case SC_STYLE_CHANGE: - case SC_QUEST_BUFF1: - case SC_QUEST_BUFF2: - case SC_QUEST_BUFF3: - case SC_2011RWC_SCROLL: - case SC_JP_EVENT04: - case SC_ATTHASTE_CASH: - case SC_REUSE_REFRESH: - case SC_REUSE_LIMIT_A: - case SC_REUSE_LIMIT_B: - case SC_REUSE_LIMIT_C: - case SC_REUSE_LIMIT_D: - case SC_REUSE_LIMIT_E: - case SC_REUSE_LIMIT_F: - case SC_REUSE_LIMIT_G: - case SC_REUSE_LIMIT_H: - case SC_REUSE_LIMIT_MTF: - case SC_REUSE_LIMIT_ECL: - case SC_REUSE_LIMIT_RECALL: - case SC_REUSE_LIMIT_ASPD_POTION: - case SC_REUSE_MILLENNIUMSHIELD: - case SC_REUSE_CRUSHSTRIKE: - case SC_REUSE_STORMBLAST: - case SC_ALL_RIDING_REUSE_LIMIT: - case SC_SPRITEMABLE: - case SC_DORAM_BUF_01: - case SC_DORAM_BUF_02: - case SC_GEFFEN_MAGIC1: - case SC_GEFFEN_MAGIC2: - case SC_GEFFEN_MAGIC3: - case SC_LHZ_DUN_N1: - case SC_LHZ_DUN_N2: - case SC_LHZ_DUN_N3: - case SC_LHZ_DUN_N4: - case SC_ENTRY_QUEUE_APPLY_DELAY: - case SC_ENTRY_QUEUE_NOTIFY_ADMISSION_TIME_OUT: - case SC_REUSE_LIMIT_LUXANIMA: - case SC_SOULENERGY: - case SC_MADOGEAR: - case SC_HOMUN_TIME: - case SC_PACKING_ENVELOPE1: - case SC_PACKING_ENVELOPE2: - case SC_PACKING_ENVELOPE3: - case SC_PACKING_ENVELOPE4: - case SC_PACKING_ENVELOPE5: - case SC_PACKING_ENVELOPE6: - case SC_PACKING_ENVELOPE7: - case SC_PACKING_ENVELOPE8: - case SC_PACKING_ENVELOPE9: - case SC_PACKING_ENVELOPE10: - case SC_SOULATTACK: - case SC_GUARD_STANCE: - case SC_ATTACK_STANCE: - // Costumes - case SC_MOONSTAR: - case SC_SUPER_STAR: - case SC_STRANGELIGHTS: - case SC_DECORATION_OF_MUSIC: - case SC_LJOSALFAR: - case SC_MERMAID_LONGING: - case SC_HAT_EFFECT: - case SC_FLOWERSMOKE: - case SC_FSTONE: - case SC_HAPPINESS_STAR: - case SC_MAPLE_FALLS: - case SC_TIME_ACCESSORY: - case SC_MAGICAL_FEATHER: - // Clans - case SC_CLAN_INFO: - case SC_SWORDCLAN: - case SC_ARCWANDCLAN: - case SC_GOLDENMACECLAN: - case SC_CROSSBOWCLAN: - case SC_JUMPINGCLAN: - case SC_DAILYSENDMAILCNT: - continue; - } - } - - if( type == 3 ) { - switch (i) { // !TODO: This list may be incomplete - case SC_WEIGHT50: - case SC_WEIGHT90: - case SC_NOCHAT: - case SC_PUSH_CART: - case SC_ALL_RIDING: - case SC_STYLE_CHANGE: - case SC_ENTRY_QUEUE_APPLY_DELAY: - case SC_ENTRY_QUEUE_NOTIFY_ADMISSION_TIME_OUT: - case SC_MADOGEAR: - case SC_HOMUN_TIME: - // Costumes - case SC_MOONSTAR: - case SC_SUPER_STAR: - case SC_STRANGELIGHTS: - case SC_DECORATION_OF_MUSIC: - case SC_LJOSALFAR: - case SC_MERMAID_LONGING: - case SC_HAT_EFFECT: - case SC_FLOWERSMOKE: - case SC_FSTONE: - case SC_HAPPINESS_STAR: - case SC_MAPLE_FALLS: - case SC_TIME_ACCESSORY: - case SC_MAGICAL_FEATHER: - // Clans - case SC_CLAN_INFO: - case SC_SWORDCLAN: - case SC_ARCWANDCLAN: - case SC_GOLDENMACECLAN: - case SC_CROSSBOWCLAN: - case SC_JUMPINGCLAN: - case SC_DAILYSENDMAILCNT: - continue; - } - } - - status_change_end(bl, (sc_type)i, INVALID_TIMER); - - if( type == 1 && sc->data[i] ) { // If for some reason status_change_end decides to still keep the status when quitting. [Skotlex] + status_change_end(bl, status, INVALID_TIMER); + if( type == 1 && sc->data[status] ) { // If for some reason status_change_end decides to still keep the status when quitting. [Skotlex] (sc->count)--; - if (sc->data[i]->timer != INVALID_TIMER) - delete_timer(sc->data[i]->timer, status_change_timer); - ers_free(sc_data_ers, sc->data[i]); - sc->data[i] = NULL; + if (sc->data[status]->timer != INVALID_TIMER) + delete_timer(sc->data[status]->timer, status_change_timer); + ers_free(sc_data_ers, sc->data[status]); + sc->data[status] = NULL; } } @@ -14898,14 +12161,15 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const struct status_change_entry *sce; struct status_data *status; struct view_data *vd; - enum scb_flag calc_flag = SCB_NONE; + e_scb_flag calc_flag = SCB_NONE; + std::shared_ptr scdb = status_db.find(type); nullpo_ret(bl); sc = status_get_sc(bl); status = status_get_status_data(bl); - if(type < 0 || type >= SC_MAX || !sc || !(sce = sc->data[type])) + if(!sc || !(sce = sc->data[type]) || !scdb) return 0; sd = BL_CAST(BL_PC,bl); @@ -14977,16 +12241,17 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const (sc->count)--; - if ( StatusChangeStateTable[type] ) - status_calc_state(bl,sc,( enum scs_flag ) StatusChangeStateTable[type],false); + if (scdb->state.any()) + status_calc_state(bl,sc,scdb->state,false); sc->data[type] = NULL; - if (StatusDisplayType[type]&bl->type) + if (scdb->flag[SCF_DISPLAYPC] || scdb->flag[SCF_DISPLAYNPC]) status_display_remove(bl,type); vd = status_get_viewdata(bl); - calc_flag = static_cast(StatusChangeFlagTable[type]); + calc_flag = static_cast(scdb->calc_flag); + switch(type) { case SC_KEEPING: case SC_BARRIER: { @@ -15023,11 +12288,11 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const DIFF_TICK(gettick(), starttick) <= 1000 && (!sd || (sd->weapontype1 == W_FIST && sd->weapontype2 == W_FIST)) ) - sc_start(bl,bl,SC_SPURT,100,sce->val1,skill_get_time2(status_sc2skill(type), sce->val1)); + sc_start(bl,bl,SC_SPURT,100,sce->val1,skill_get_time2(scdb->skill_id, sce->val1)); } break; case SC_AUTOBERSERK: - if (sc->data[SC_PROVOKE] && sc->data[SC_PROVOKE]->val2 == 1) + if (sc->data[SC_PROVOKE] && sc->data[SC_PROVOKE]->val4 == 1) status_change_end(bl, SC_PROVOKE, INVALID_TIMER); break; @@ -15165,7 +12430,7 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const if (sce->val2 > 0) { // Caster has been unlocked... nearby chars need to be unlocked. int range = 1 - + skill_get_range2(bl, status_sc2skill(type), sce->val1, true) + + skill_get_range2(bl, scdb->skill_id, sce->val1, true) + skill_get_range2(bl, TF_BACKSLIDING, 1, true); // Since most people use this to escape the hold.... map_foreachinallarea(status_change_timer_sub, bl->m, bl->x-range, bl->y-range, bl->x+range,bl->y+range,BL_CHAR,bl,sce,type,gettick()); @@ -15234,6 +12499,10 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const case SC_WARM: case SC__MANHOLE: case SC_BANDING: + case SC_LEADERSHIP: + case SC_GLORYWOUNDS: + case SC_SOULCOLD: + case SC_HAWKEYES: if (sce->val4) { // Clear the group. std::shared_ptr group = skill_id2group(sce->val4); @@ -15411,7 +12680,7 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const } break; case SC_FULL_THROTTLE: { - int sec = skill_get_time2(status_sc2skill(type), sce->val1); + int sec = skill_get_time2(scdb->skill_id, sce->val1); clif_status_change(bl, EFST_DEC_AGI, 1, sec, 0, 0, 0); sc_start(bl, bl, SC_REBOUND, 100, sce->val1, sec); @@ -15421,8 +12690,8 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const clif_status_load(bl, EFST_DEC_AGI, 0); break; case SC_ITEMSCRIPT: // Removes Buff Icons - if (sd && sce->val2 != EFST_BLANK) - clif_status_load(bl, (enum efst_types)sce->val2, 0); + if (sd) + clif_status_load(bl, (enum efst_type)sce->val2, 0); break; case SC_C_MARKER: { @@ -15480,14 +12749,7 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const pc_delsoulball(sd, sd->soulball, false); break; case SC_MADOGEAR: - status_change_end(bl, SC_SHAPESHIFT, INVALID_TIMER); - status_change_end(bl, SC_HOVERING, INVALID_TIMER); - status_change_end(bl, SC_ACCELERATION, INVALID_TIMER); - status_change_end(bl, SC_OVERHEAT_LIMITPOINT, INVALID_TIMER); - status_change_end(bl, SC_OVERHEAT, INVALID_TIMER); - status_change_end(bl, SC_MAGNETICFIELD, INVALID_TIMER); - status_change_end(bl, SC_NEUTRALBARRIER_MASTER, INVALID_TIMER); - status_change_end(bl, SC_STEALTHFIELD_MASTER, INVALID_TIMER); + status_db.removeByStatusFlag(bl, { SCF_MADOENDCANCEL }); if (sd) pc_bonus_script_clear(sd, BSF_REM_ON_MADOGEAR); break; @@ -15524,190 +12786,39 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const break; } - uint16 opt_flag = OCF_SEND_OPTION; - switch(type) { - case SC_STONE: - case SC_FREEZE: - case SC_STUN: - case SC_SLEEP: - case SC_BURNING: - case SC_WHITEIMPRISON: - sc->opt1 = OCF_NONE; - break; + // Reset the options as needed + std::bitset opt_flag = scdb->flag; + bool disable_opt_flag = false; - case SC_POISON: - case SC_CURSE: - case SC_SILENCE: - case SC_BLIND: - sc->opt2 &= ~(1<<(type-SC_POISON)); - break; - case SC_DPOISON: - sc->opt2 &= ~OPT2_DPOISON; - break; - case SC_SIGNUMCRUCIS: - sc->opt2 &= ~OPT2_SIGNUMCRUCIS; - break; - - case SC_HIDING: - sc->option &= ~OPTION_HIDE; - opt_flag |= OCF_ONTOUCH|OCF_UNIT_MOVE; // Check for warp trigger + AoE trigger - break; - case SC_CLOAKING: - case SC_CLOAKINGEXCEED: - case SC__INVISIBILITY: - case SC_NEWMOON: - sc->option &= ~OPTION_CLOAK; - case SC_CAMOUFLAGE: - case SC_STEALTHFIELD: - case SC__SHADOWFORM: - opt_flag |= OCF_ONTOUCH; - break; - case SC_CHASEWALK: - sc->option &= ~(OPTION_CHASEWALK|OPTION_CLOAK); - opt_flag |= OCF_ONTOUCH; - break; - case SC__FEINTBOMB: - sc->option &= ~OPTION_INVISIBLE; - opt_flag |= OCF_ONTOUCH|OCF_UNIT_MOVE; - break; - case SC_SIGHT: - sc->option &= ~OPTION_SIGHT; - break; - case SC_WEDDING: - sc->option &= ~OPTION_WEDDING; - opt_flag |= OCF_SEND_LOOK; - break; - case SC_XMAS: - sc->option &= ~OPTION_XMAS; - opt_flag |= OCF_SEND_LOOK; - break; - case SC_SUMMER: - sc->option &= ~OPTION_SUMMER; - opt_flag |= OCF_SEND_LOOK; - break; - case SC_HANBOK: - sc->option &= ~OPTION_HANBOK; - opt_flag |= OCF_SEND_LOOK; - break; - case SC_OKTOBERFEST: - sc->option &= ~OPTION_OKTOBERFEST; - opt_flag |= OCF_SEND_LOOK; - break; - case SC_DRESSUP: - sc->option &= ~OPTION_SUMMER2; - opt_flag |= OCF_SEND_LOOK; - break; - case SC_ORCISH: - sc->option &= ~OPTION_ORCISH; - break; - case SC_RUWACH: - sc->option &= ~OPTION_RUWACH; - break; - case SC_FUSION: - sc->option &= ~OPTION_FLYING; - break; - // opt3 - case SC_TWOHANDQUICKEN: - case SC_ONEHAND: - case SC_SPEARQUICKEN: - case SC_CONCENTRATION: - case SC_MERC_QUICKEN: - sc->opt3 &= ~OPT3_QUICKEN; - opt_flag = OCF_NONE; - break; - case SC_OVERTHRUST: - case SC_MAXOVERTHRUST: - case SC_SWOO: - sc->opt3 &= ~OPT3_OVERTHRUST; - if( type == SC_SWOO ) - opt_flag = OCF_NON_PLAYER; - else - opt_flag = OCF_NONE; - break; - case SC_ENERGYCOAT: - case SC_SKE: - sc->opt3 &= ~OPT3_ENERGYCOAT; - opt_flag = OCF_NONE; - break; - case SC_INCATKRATE: // Simulated Explosion spirits effect. - if (bl->type != BL_MOB) { - opt_flag = OCF_NONE; + switch (type) { + case SC_DANCING: + if ((sce->val1&0xFFFF) == CG_MOONLIT) + sc->opt3 &= ~OPT3_MOONLIT; + break; + case SC_INCATKRATE: // Simulated Explosion spirits effect. + if (bl->type != BL_MOB) { + disable_opt_flag = true; + break; + } break; - } - case SC_EXPLOSIONSPIRITS: - sc->opt3 &= ~OPT3_EXPLOSIONSPIRITS; - opt_flag = OCF_NONE; - break; - case SC_STEELBODY: - case SC_SKA: - sc->opt3 &= ~OPT3_STEELBODY; - if (type == SC_SKA) - opt_flag = OCF_NON_PLAYER; - else - opt_flag = OCF_NONE; - break; - case SC_BLADESTOP: - sc->opt3 &= ~OPT3_BLADESTOP; - opt_flag = OCF_NONE; - break; - case SC_AURABLADE: - sc->opt3 &= ~OPT3_AURABLADE; - opt_flag = OCF_NONE; - break; - case SC_BERSERK: - opt_flag = OCF_NONE; - sc->opt3 &= ~OPT3_BERSERK; - break; -// case ???: // doesn't seem to do anything -// sc->opt3 &= ~OPT3_LIGHTBLADE; -// opt_flag = OCF_NONE; -// break; - case SC_DANCING: - if ((sce->val1&0xFFFF) == CG_MOONLIT) - sc->opt3 &= ~OPT3_MOONLIT; - opt_flag = OCF_NONE; - break; - case SC_MARIONETTE: - case SC_MARIONETTE2: - sc->opt3 &= ~OPT3_MARIONETTE; - opt_flag = OCF_NONE; - break; - case SC_ASSUMPTIO: - sc->opt3 &= ~OPT3_ASSUMPTIO; - opt_flag = OCF_NONE; - break; - case SC_WARM: // SG skills [Komurka] - sc->opt3 &= ~OPT3_WARM; - opt_flag = OCF_NONE; - break; - case SC_KAITE: - sc->opt3 &= ~OPT3_KAITE; - opt_flag = OCF_NONE; - break; - case SC_BUNSINJYUTSU: - sc->opt3 &= ~OPT3_BUNSIN; - opt_flag = OCF_NONE; - break; - case SC_SPIRIT: - sc->opt3 &= ~OPT3_SOULLINK; - opt_flag = OCF_NONE; - break; - case SC_CHANGEUNDEAD: - sc->opt3 &= ~OPT3_UNDEAD; - opt_flag = OCF_NONE; - break; -// case ???: // from DA_CONTRACT (looks like biolab mobs aura) -// sc->opt3 &= ~OPT3_CONTRACT; -// opt_flag = OCF_NONE; -// break; - default: - opt_flag = OCF_NONE; } + if (scdb->opt1) + sc->opt1 = OPT1_NONE; + + if (scdb->opt2) + sc->opt2 &= ~scdb->opt2; + + if (scdb->opt3) + sc->opt3 &= ~scdb->opt3; + + if (scdb->look) + sc->option &= ~scdb->look; + if (calc_flag&SCB_DYE) { // Restore DYE color if (vd && !vd->cloth_color && sce->val4) clif_changelook(bl,LOOK_CLOTHES_COLOR,sce->val4); - calc_flag = static_cast(calc_flag&~SCB_DYE); + calc_flag = static_cast(calc_flag&~SCB_DYE); } /*if (calc_flag&SCB_BODY)// Might be needed in the future. [Rytech] @@ -15718,7 +12829,7 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const }*/ // On Aegis, when turning off a status change, first goes the sc packet, then the option packet. - int status_icon = StatusIconChangeTable[type]; + int status_icon = scdb->icon; #if PACKETVER < 20151104 if (status_icon == EFST_WEAPONPROPERTY) @@ -15727,11 +12838,11 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const clif_status_change(bl,status_icon,0,0,0,0,0); - if( opt_flag&OCF_NON_PLAYER ) // bugreport:681 + if( opt_flag[SCF_NONPLAYER] ) // bugreport:681 clif_changeoption2(bl); - else if(opt_flag) { + else if (!disable_opt_flag && (opt_flag[SCF_SENDOPTION] || opt_flag[SCF_ONTOUCH] || opt_flag[SCF_UNITMOVE] || opt_flag[SCF_NONPLAYER] || opt_flag[SCF_SENDLOOK])) { clif_changeoption(bl); - if (sd && (opt_flag&OCF_SEND_LOOK)) { + if (sd && opt_flag[SCF_SENDLOOK]) { clif_changelook(bl,LOOK_BASE,sd->vd.class_); clif_get_weapon_view(sd,&sd->vd.weapon,&sd->vd.shield); clif_changelook(bl,LOOK_WEAPON,sd->vd.weapon); @@ -15750,10 +12861,10 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const status_calc_bl(bl, calc_flag); } - if(opt_flag&OCF_UNIT_MOVE) // Out of hiding, invoke on place. + if(opt_flag[SCF_UNITMOVE]) // Out of hiding, invoke on place. skill_unit_move(bl,gettick(),1); - if(opt_flag&OCF_ONTOUCH && sd && !sd->state.warping && map_getcell(bl->m,bl->x,bl->y,CELL_CHKNPC)) + if(opt_flag[SCF_ONTOUCH] && sd && !sd->state.warping && map_getcell(bl->m,bl->x,bl->y,CELL_CHKNPC)) npc_touch_area_allnpc(sd,bl->m,bl->x,bl->y); // Trigger on-touch event. ers_free(sc_data_ers, sce); @@ -15820,7 +12931,7 @@ TIMER_FUNC(status_change_timer){ if (!sc->data[SC_CHASEWALK2]) { sc_start(bl,bl, SC_CHASEWALK2,100,1<<(sce->val1-1), (t_tick)(sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_ROGUE?10:1) // SL bonus -> x10 duration - *skill_get_time2(status_sc2skill(type),sce->val1)); + *skill_get_time2(status_db.getSkill(type),sce->val1)); } sc_timer_next(sce->val2+tick); return 0; @@ -15858,7 +12969,7 @@ TIMER_FUNC(status_change_timer){ break; case SC_PROVOKE: - if(sce->val2) { // Auto-provoke (it is ended in status_heal) + if(sce->val4) { // Auto-provoke (it is ended in status_heal) sc_timer_next(1000*60+tick); return 0; } @@ -15874,10 +12985,14 @@ TIMER_FUNC(status_change_timer){ } status_change_end(bl, SC_AETERNA, INVALID_TIMER); sc->opt1 = OPT1_STONE; + + std::shared_ptr scdb = status_db.find(type); + + status_calc_state(bl,sc,scdb->state,1); clif_changeoption(bl); sc_timer_next(min(sce->val4, interval) + tick); sce->val4 -= interval; //Remaining time - status_calc_bl(bl, StatusChangeFlagTable[type]); + status_calc_bl(bl, scdb->calc_flag); return 0; } if (sce->val4 >= 0 && !(sce->val3) && status->hp > status->max_hp / 4) { @@ -16608,7 +13723,7 @@ TIMER_FUNC(status_change_timer){ if (unit_bl2ud(bl)->walktimer == INVALID_TIMER) { uint16 x = sce->val3 >> 16, y = sce->val3 & 0xFFFF; - if (distance_xy(x, y, bl->x, bl->y) <= skill_get_unit_range(status_sc2skill(type), sce->val1) && unit_movepos(bl, x, y, 0, false)) { + if (distance_xy(x, y, bl->x, bl->y) <= skill_get_unit_range(SO_VACUUM_EXTREME, sce->val1) && unit_movepos(bl, x, y, 0, false)) { clif_slide(bl, x, y); clif_fixpos(bl); } @@ -16862,7 +13977,7 @@ int status_change_timer_sub(struct block_list* bl, va_list ap) rnd()%100 < 100 - tsc->data[SC__SHADOWFORM]->val1 * 10 ) { // [100 - (Skill Level x 10)] % status_change_end(bl, SC__SHADOWFORM, INVALID_TIMER); if (battle_check_target(src, bl, BCT_ENEMY) > 0) - skill_attack(BF_MAGIC, src, src, bl, status_sc2skill(type), 1, tick, 0); + skill_attack(BF_MAGIC, src, src, bl, status_db.getSkill(type), 1, tick, 0); } break; case SC_SIGHTBLASTER: @@ -16913,228 +14028,42 @@ int status_change_timer_sub(struct block_list* bl, va_list ap) */ void status_change_clear_buffs(struct block_list* bl, uint8 type) { - int i; struct status_change *sc= status_get_sc(bl); if (!sc || !sc->count) return; - if (type&(SCCB_DEBUFFS|SCCB_REFRESH)) // Debuffs - for (i = SC_COMMON_MIN; i <= SC_COMMON_MAX; i++) - status_change_end(bl, (sc_type)i, INVALID_TIMER); + //Clears buffs with specified flag and type + for (const auto &it : status_db) { + sc_type status = static_cast(it.first); + e_scb_flag flag = static_cast(it.second->calc_flag); - for( i = SC_COMMON_MAX+1; i < SC_MAX; i++ ) { - if(!sc->data[i]) + if (!sc->data[status] || flag&SCF_NOCLEARBUFF) //Skip status with SCF_NOCLEARBUFF, no matter what continue; - - switch (i) { - // Stuff that cannot be removed - case SC_WEIGHT50: - case SC_WEIGHT90: - case SC_COMBO: - case SC_SMA: - case SC_DANCING: - case SC_LEADERSHIP: - case SC_GLORYWOUNDS: - case SC_SOULCOLD: - case SC_HAWKEYES: - case SC_EMERGENCY_MOVE: - case SC_SAFETYWALL: - case SC_PNEUMA: - case SC_NOCHAT: - case SC_JAILED: - case SC_ANKLE: - case SC_BLADESTOP: - case SC_STRFOOD: - case SC_AGIFOOD: - case SC_VITFOOD: - case SC_INTFOOD: - case SC_DEXFOOD: - case SC_LUKFOOD: - case SC_FLEEFOOD: - case SC_HITFOOD: - case SC_CRIFOOD: - case SC_BATKFOOD: - case SC_WATKFOOD: - case SC_MATKFOOD: - case SC_FOOD_STR_CASH: - case SC_FOOD_AGI_CASH: - case SC_FOOD_VIT_CASH: - case SC_FOOD_DEX_CASH: - case SC_FOOD_INT_CASH: - case SC_FOOD_LUK_CASH: - case SC_EXPBOOST: - case SC_JEXPBOOST: - case SC_ITEMBOOST: - case SC__MANHOLE: - case SC_GIANTGROWTH: - case SC_MILLENNIUMSHIELD: - case SC_REFRESH: - case SC_STONEHARDSKIN: - case SC_VITALITYACTIVATION: - case SC_FIGHTINGSPIRIT: - case SC_ABUNDANCE: - case SC_CRUSHSTRIKE: - case SC_SAVAGE_STEAK: - case SC_COCKTAIL_WARG_BLOOD: - case SC_MINOR_BBQ: - case SC_SIROMA_ICE_TEA: - case SC_DROCERA_HERB_STEAMED: - case SC_PUTTI_TAILS_NOODLES: - case SC_CURSEDCIRCLE_ATKER: - case SC_CURSEDCIRCLE_TARGET: - case SC_PUSH_CART: - case SC_ALL_RIDING: - case SC_STYLE_CHANGE: - case SC_MONSTER_TRANSFORM: - case SC_ACTIVE_MONSTER_TRANSFORM: - case SC_MTF_ASPD: - case SC_MTF_RANGEATK: - case SC_MTF_MATK: - case SC_MTF_MLEATKED: - case SC_MTF_CRIDAMAGE: - case SC_QUEST_BUFF1: - case SC_QUEST_BUFF2: - case SC_QUEST_BUFF3: - case SC_MTF_ASPD2: - case SC_MTF_RANGEATK2: - case SC_MTF_MATK2: - case SC_2011RWC_SCROLL: - case SC_JP_EVENT04: - case SC_MTF_MHP: - case SC_MTF_MSP: - case SC_MTF_PUMPKIN: - case SC_MTF_HITFLEE: - case SC_ATTHASTE_CASH: - case SC_REUSE_REFRESH: - case SC_REUSE_LIMIT_A: - case SC_REUSE_LIMIT_B: - case SC_REUSE_LIMIT_C: - case SC_REUSE_LIMIT_D: - case SC_REUSE_LIMIT_E: - case SC_REUSE_LIMIT_F: - case SC_REUSE_LIMIT_G: - case SC_REUSE_LIMIT_H: - case SC_REUSE_LIMIT_MTF: - case SC_REUSE_LIMIT_ECL: - case SC_REUSE_LIMIT_RECALL: - case SC_REUSE_LIMIT_ASPD_POTION: - case SC_REUSE_MILLENNIUMSHIELD: - case SC_REUSE_CRUSHSTRIKE: - case SC_REUSE_STORMBLAST: - case SC_ALL_RIDING_REUSE_LIMIT: - case SC_SPRITEMABLE: - case SC_BITESCAR: - case SC_DORAM_BUF_01: - case SC_DORAM_BUF_02: - case SC_GEFFEN_MAGIC1: - case SC_GEFFEN_MAGIC2: - case SC_GEFFEN_MAGIC3: - case SC_LHZ_DUN_N1: - case SC_LHZ_DUN_N2: - case SC_LHZ_DUN_N3: - case SC_LHZ_DUN_N4: - case SC_REUSE_LIMIT_LUXANIMA: - case SC_LUXANIMA: - case SC_SOULENERGY: - case SC_EP16_2_BUFF_SS: - case SC_EP16_2_BUFF_SC: - case SC_EP16_2_BUFF_AC: - case SC_HOMUN_TIME: - case SC_SOULATTACK: - // Clans - case SC_CLAN_INFO: - case SC_SWORDCLAN: - case SC_ARCWANDCLAN: - case SC_GOLDENMACECLAN: - case SC_CROSSBOWCLAN: - case SC_JUMPINGCLAN: - // RODEX - case SC_DAILYSENDMAILCNT: - // Costumes - case SC_MOONSTAR: - case SC_SUPER_STAR: - case SC_STRANGELIGHTS: - case SC_DECORATION_OF_MUSIC: - case SC_LJOSALFAR: - case SC_MERMAID_LONGING: - case SC_HAT_EFFECT: - case SC_FLOWERSMOKE: - case SC_FSTONE: - case SC_HAPPINESS_STAR: - case SC_MAPLE_FALLS: - case SC_TIME_ACCESSORY: - case SC_MAGICAL_FEATHER: - continue; - // Chemical Protection is only removed by some skills - case SC_CP_WEAPON: - case SC_CP_SHIELD: - case SC_CP_ARMOR: - case SC_CP_HELM: - case SC_PROTECTSHADOWEQUIP: - if(!(type&SCCB_CHEM_PROTECT)) - continue; - break; - // Debuffs that can be removed. - case SC_DEEPSLEEP: - case SC_BURNING: - case SC_FREEZING: - case SC_CRYSTALIZE: - case SC_TOXIN: - case SC_PARALYSE: - case SC_VENOMBLEED: - case SC_MAGICMUSHROOM: - case SC_DEATHHURT: - case SC_PYREXIA: - case SC_OBLIVIONCURSE: - case SC_LEECHESEND: - case SC_MARSHOFABYSS: - case SC_MANDRAGORA: - if(!(type&SCCB_REFRESH)) - continue; - break; - case SC_HALLUCINATION: - case SC_QUAGMIRE: - case SC_SIGNUMCRUCIS: - case SC_DECREASEAGI: - case SC_SLOWDOWN: - case SC_MINDBREAKER: - case SC_WINKCHARM: - case SC_STOP: - case SC_ORCISH: - case SC_STRIPWEAPON: - case SC_STRIPSHIELD: - case SC_STRIPARMOR: - case SC_STRIPHELM: - case SC_BITE: - case SC_ADORAMUS: - case SC_VACUUM_EXTREME: - case SC_FEAR: - case SC_MAGNETICFIELD: - case SC_NETHERWORLD: - case SC_CREATINGSTAR: - case SC_SHADOW_STRIP: - if (!(type&SCCB_DEBUFFS)) - continue; - break; - // The rest are buffs that can be removed. - case SC_BERSERK: - case SC_SATURDAYNIGHTFEVER: - if (!(type&SCCB_BUFFS)) - continue; - sc->data[i]->val2 = 0; - break; - default: - if (!(type&SCCB_BUFFS)) - continue; - break; - } - status_change_end(bl, (sc_type)i, INVALID_TIMER); + // &SCCB_LUXANIMA : Cleared by RK_LUXANIMA + if (!(type&SCCB_LUXANIMA) && flag&SCF_REMOVEONLUXANIMA) + continue; + // &SCCB_CHEM_PROTECT : Clears AM_CP_ARMOR/HELP/SHIELD/WEAPON + if (!(type&SCCB_CHEM_PROTECT) && flag&SCF_REMOVECHEMICALPROTECT) + continue; + // &SCCB_REFRESH : Cleared by RK_REFRESH + if (!(type&SCCB_REFRESH) && flag&SCF_REMOVEONREFRESH) + continue; + // &SCCB_DEBUFFS : Clears debuffs + if (!(type&SCCB_DEBUFFS) && flag&SCF_DEBUFF) + continue; + // &SCCB_BUFFS : Clears buffs + if (!(type&SCCB_BUFFS) && !(flag&SCF_DEBUFF)) + continue; + if (status == SC_SATURDAYNIGHTFEVER || status == SC_BERSERK) // Mark to not lose HP + sc->data[status]->val2 = 0; + status_change_end(bl, status, INVALID_TIMER); } //Removes bonus_script if (bl->type == BL_PC) { - i = 0; + uint32 i = 0; + if (type&SCCB_BUFFS) i |= BSF_REM_BUFF; if (type&SCCB_DEBUFFS) i |= BSF_REM_DEBUFF; if (type&SCCB_REFRESH) i |= BSF_REM_ON_REFRESH; @@ -17156,98 +14085,50 @@ void status_change_clear_buffs(struct block_list* bl, uint8 type) * Infect a user with status effects (SC_DEADLYINFECT) * @param src: Object initiating change on bl [PC|MOB|HOM|MER|ELEM] * @param bl: Object to change - * @param type: 0 - Shadow Chaser attacking, 1 - Shadow Chaser being attacked * @return 1: Success 0: Fail */ -int status_change_spread(struct block_list *src, struct block_list *bl, bool type) +int status_change_spread(block_list *src, block_list *bl) { - int i, flag = 0; - struct status_change *sc = status_get_sc(src); - const struct TimerData *timer = NULL; - t_tick tick; - struct status_change_data data; - - if( !sc || !sc->count ) + if (src == nullptr || bl == nullptr) return 0; - tick = gettick(); - // Status Immunity resistance - if (status_bl_has_mode(src,MD_STATUSIMMUNE) || status_bl_has_mode(bl,MD_STATUSIMMUNE)) + if (status_bl_has_mode(src, MD_STATUSIMMUNE) || status_bl_has_mode(bl, MD_STATUSIMMUNE)) return 0; - for( i = SC_COMMON_MIN; i < SC_MAX; i++ ) { - if( !sc->data[i] || i == SC_COMMON_MAX ) - continue; - if (sc->data[i]->timer != INVALID_TIMER) { - timer = get_timer(sc->data[i]->timer); - if (timer == NULL || timer->func != status_change_timer || DIFF_TICK(timer->tick, tick) < 0) - continue; - } + status_change *sc = status_get_sc(src); - switch( i ) { - // Debuffs that can be spread. - // NOTE: We'll add/delete SCs when we are able to confirm it. - case SC_DEATHHURT: - case SC_PARALYSE: - if (type) + if (sc == nullptr || sc->count == 0) + return 0; + + bool hasSpread = false; + t_tick tick = gettick(), sc_tick; + + for (const auto &it : status_db) { + sc_type type = static_cast(it.first); + const TimerData *timer; + + if (sc->data[type] && it.second->flag[SCF_SPREADEFFECT]) { + if (sc->data[type]->timer != INVALID_TIMER) { + timer = get_timer(sc->data[type]->timer); + + if (timer == nullptr || timer->func != status_change_timer || DIFF_TICK(timer->tick, tick) < 0) continue; - case SC_CURSE: - case SC_SILENCE: - case SC_CONFUSION: - case SC_BLIND: - case SC_HALLUCINATION: - case SC_SIGNUMCRUCIS: - case SC_DECREASEAGI: - //case SC_SLOWDOWN: - //case SC_MINDBREAKER: - //case SC_WINKCHARM: - //case SC_STOP: - case SC_ORCISH: - //case SC_STRIPWEAPON: // Omg I got infected and had the urge to strip myself physically. - //case SC_STRIPSHIELD: // No this is stupid and shouldnt be spreadable at all. - //case SC_STRIPARMOR: // Disabled until I can confirm if it does or not. [Rytech] - //case SC_STRIPHELM: - //case SC__STRIPACCESSORY: - //case SC_BITE: - case SC_FEAR: - case SC_FREEZING: - case SC_VENOMBLEED: - if (sc->data[i]->timer != INVALID_TIMER) - data.tick = DIFF_TICK(timer->tick, tick); - else - data.tick = INFINITE_TICK; - break; - // Special cases - case SC_TOXIN: - case SC_MAGICMUSHROOM: - case SC_PYREXIA: - case SC_LEECHESEND: - if (type) - continue; - case SC_POISON: - case SC_DPOISON: - case SC_BLEEDING: - case SC_BURNING: - if (sc->data[i]->timer != INVALID_TIMER) - data.tick = DIFF_TICK(timer->tick, tick) + sc->data[i]->val4; - else - data.tick = INFINITE_TICK; - break; - default: - continue; - } - if( i ) { - data.val1 = sc->data[i]->val1; - data.val2 = sc->data[i]->val2; - data.val3 = sc->data[i]->val3; - data.val4 = sc->data[i]->val4; - status_change_start(src,bl,(sc_type)i,10000,data.val1,data.val2,data.val3,data.val4,data.tick,SCSTART_NOAVOID|SCSTART_NOTICKDEF|SCSTART_NORATEDEF); - flag = 1; + + int32 val4 = sc->data[type]->val4; + + sc_tick = DIFF_TICK(timer->tick, tick) + (val4 > 0 ? val4 : 0); + } else + sc_tick = INFINITE_TICK; + + status_change_start(src, bl, type, 10000, sc->data[type]->val1, sc->data[type]->val2, sc->data[type]->val3, sc->data[type]->val4, sc_tick, SCSTART_NOAVOID | SCSTART_NOTICKDEF | SCSTART_NORATEDEF); + + if (!hasSpread) + hasSpread = true; } } - return flag; + return hasSpread; } /** @@ -17421,7 +14302,7 @@ static int status_natural_heal(struct block_list* bl, va_list args) val *= 2; sd->state.doridori = 0; if ((rate = pc_checkskill(sd,TK_SPTIME))) - sc_start(bl,bl,status_skill2sc(TK_SPTIME), + sc_start(bl,bl,skill_get_sc(TK_SPTIME), 100,rate,skill_get_time(TK_SPTIME, rate)); if ( (sd->class_&MAPID_UPPERMASK) == MAPID_STAR_GLADIATOR && @@ -17468,7 +14349,7 @@ static TIMER_FUNC(status_natural_heal_timer){ */ static bool status_change_isDisabledOnMap_(sc_type type, bool mapIsVS, bool mapIsPVP, bool mapIsGVG, bool mapIsBG, unsigned int mapZone, bool mapIsTE) { - if (type <= SC_NONE || type >= SC_MAX) + if (!status_db.validateStatus(type)) return false; if ((!mapIsVS && SCDisabled[type]&1) || @@ -17495,19 +14376,20 @@ void status_change_clear_onChangeMap(struct block_list *bl, struct status_change if (sc && sc->count) { struct map_data *mapdata = map_getmapdata(bl->m); - unsigned short i; bool mapIsVS = mapdata_flag_vs2(mapdata); bool mapIsPVP = mapdata->flag[MF_PVP] != 0; bool mapIsGVG = mapdata_flag_gvg2_no_te(mapdata); bool mapIsBG = mapdata->flag[MF_BATTLEGROUND] != 0; bool mapIsTE = mapdata_flag_gvg2_te(mapdata); - for (i = 0; i < SC_MAX; i++) { - if (!sc->data[i] || !SCDisabled[i]) + for (const auto &it : status_db) { + sc_type type = static_cast(it.first); + + if (!sc->data[type] || !SCDisabled[type]) continue; - if (status_change_isDisabledOnMap_((sc_type)i, mapIsVS, mapIsPVP, mapIsGVG, mapIsBG, mapdata->zone, mapIsTE)) - status_change_end(bl, (sc_type)i, INVALID_TIMER); + if (status_change_isDisabledOnMap_(type, mapIsVS, mapIsPVP, mapIsGVG, mapIsBG, mapdata->zone, mapIsTE)) + status_change_end(bl, type, INVALID_TIMER); } } } @@ -17605,6 +14487,418 @@ int16 AttributeDatabase::getAttribute(uint16 level, uint16 atk_ele, uint16 def_e return this->attr_fix_table[level][atk_ele][def_ele]; } +const std::string StatusDatabase::getDefaultLocation() { + return std::string(db_path) + "/status.yml"; +} + +/** + * Reads and parses an entry from status_db. + * @param node: YAML node containing the entry. + * @return count of successfully parsed rows + */ +uint64 StatusDatabase::parseBodyNode(const YAML::Node &node) { + std::string status_name; + + if (!this->asString(node, "Status", status_name)) + return 0; + + std::string status_constant = "SC_" + status_name; + int64 constant; + + if (!script_get_constant(status_constant.c_str(), &constant)) { + this->invalidWarning(node["Status"], "Invalid Status %s.\n", status_name.c_str()); + return 0; + } + + if (!this->validateStatus(static_cast(constant))) { + this->invalidWarning(node["Status"], "Status %s is out of bounds.\n", status_name.c_str()); + return 0; + } + + int status_id = static_cast(constant); + std::shared_ptr status = this->find(status_id); + bool exists = status != nullptr; + + if (!exists) { + status = std::make_shared(); + status->type = static_cast(status_id); + } + + if (this->nodeExists(node, "Icon")) { + std::string icon_name; + + if (!this->asString(node, "Icon", icon_name)) + return 0; + + int64 constant; + + if (!script_get_constant(icon_name.c_str(), &constant)) { + this->invalidWarning(node["Icon"], "Icon %s is invalid, defaulting to EFST_BLANK.\n", icon_name.c_str()); + constant = EFST_BLANK; + } + + if (constant < EFST_BLANK || constant >= EFST_MAX) { + this->invalidWarning(node["Icon"], "Icon %s is out of bounds, defaulting to EFST_BLANK.\n", icon_name.c_str()); + constant = EFST_BLANK; + } + + status->icon = static_cast(constant); + } else { + if (!exists) + status->icon = EFST_BLANK; + } + + if (this->nodeExists(node, "DurationLookup")) { + std::string skill_name; + + if (!this->asString(node, "DurationLookup", skill_name)) + return 0; + + uint16 skill_id = skill_name2id(skill_name.c_str()); + + if (skill_id == 0) + this->invalidWarning(node["DurationLookup"], "DurationLookup skill %s is invalid, defaulting to none.\n", skill_name.c_str()); + + status->skill_id = skill_id; + } else { + if (!exists) + status->skill_id = 0; + } + + if (this->nodeExists(node, "States")) { + const YAML::Node &stateNode = node["States"]; + + for (const auto &it : stateNode) { + std::string state = it.first.as(), state_constant = "SCS_" + state; + int64 constant; + + if (!script_get_constant(state_constant.c_str(), &constant)) { + this->invalidWarning(stateNode, "State %s is invalid.\n", state.c_str()); + return 0; + } + + if (constant < SCS_NONE || constant >= SCS_MAX) { + this->invalidWarning(stateNode, "State %s is out of bounds.\n", state.c_str()); + return 0; + } + + bool active; + + if (!this->asBool(stateNode, state, active)) + return 0; + + if (active) + status->state.set(static_cast(constant)); + else + status->state.reset(static_cast(constant)); + } + } else { + if (!exists) + status->state = SCS_NONE; + } + + if (this->nodeExists(node, "CalcFlags")) { + const YAML::Node &flagNode = node["CalcFlags"]; + + for (const auto &it : flagNode) { + std::string flag = it.first.as(), flag_constant = "SCB_" + flag; + int64 constant; + + if (!script_get_constant(flag_constant.c_str(), &constant)) { + this->invalidWarning(flagNode, "CalcFlag %s is invalid.\n", flag.c_str()); + return 0; + } + + if (constant < SCB_NONE || constant >= SCB_MAX) { + this->invalidWarning(flagNode, "CalcFlag %s is out of bounds.\n", flag.c_str()); + return 0; + } + + bool active; + + if (!this->asBool(flagNode, flag, active)) + return 0; + + if (active) + status->calc_flag |= static_cast(constant); + else + status->calc_flag &= ~static_cast(constant); + } + } else { + if (!exists) + status->calc_flag = SCB_NONE; + } + + if (this->nodeExists(node, "Opt1")) { + std::string opt; + + if (!this->asString(node, "Opt1", opt)) + return 0; + + std::string opt_constant = "OPT1_" + opt; + int64 constant; + + if (!script_get_constant(opt_constant.c_str(), &constant)) { + this->invalidWarning(node["Opt1"], "Opt1 %s is invalid.\n", opt.c_str()); + return 0; + } + + if (constant < OPT1_NONE || constant >= OPT1_MAX) { + this->invalidWarning(node["Opt1"], "Opt2 %s is out of bounds.\n", opt.c_str()); + return 0; + } + + status->opt1 = static_cast(constant); + } else { + if (!exists) + status->opt1 = OPT1_NONE; + } + + if (this->nodeExists(node, "Opt2")) { + const YAML::Node &optNode = node["Opt2"]; + + for (const auto &it : optNode) { + std::string opt = it.first.as(), opt_constant = "OPT2_" + opt; + int64 constant; + + if (!script_get_constant(opt_constant.c_str(), &constant)) { + this->invalidWarning(optNode, "Opt2 %s is invalid.\n", opt.c_str()); + return 0; + } + + if (constant < OPT2_NONE || constant >= OPT2_MAX) { + this->invalidWarning(optNode, "Opt2 %s is out of bounds.\n", opt.c_str()); + return 0; + } + + bool active; + + if (!this->asBool(optNode, opt, active)) + return 0; + + if (active) + status->opt2 |= static_cast(constant); + else + status->opt2 &= ~static_cast(constant); + } + } else { + if (!exists) + status->opt2 = OPT2_NONE; + } + + if (this->nodeExists(node, "Opt3")) { + const YAML::Node &optNode = node["Opt3"]; + + for (const auto &it : optNode) { + std::string opt = it.first.as(), opt_constant = "OPT3_" + opt; + int64 constant; + + if (!script_get_constant(opt_constant.c_str(), &constant)) { + this->invalidWarning(optNode, "Opt3 %s is invalid.\n", opt.c_str()); + return 0; + } + + if (constant < OPT3_NORMAL || constant >= OPT3_MAX) { + this->invalidWarning(optNode, "Opt3 %s is out of bounds.\n", opt.c_str()); + return 0; + } + + bool active; + + if (!this->asBool(optNode, opt, active)) + return 0; + + if (active) + status->opt3 |= static_cast(constant); + else + status->opt3 &= ~static_cast(constant); + } + } else { + if (!exists) + status->opt3 = OPT3_NORMAL; + } + + if (this->nodeExists(node, "Options")) { + const YAML::Node &optionNode = node["Options"]; + + for (const auto &it : optionNode) { + std::string option = it.first.as(), option_constant = "OPTION_" + option; + int64 constant; + + if (!script_get_constant(option_constant.c_str(), &constant)) { + this->invalidWarning(optionNode, "Option %s is invalid.\n", option.c_str()); + return 0; + } + + if (constant < OPTION_NOTHING || constant >= OPTION_MAX) { + this->invalidWarning(optionNode, "Option %s is out of bounds.\n", option.c_str()); + return 0; + } + + bool active; + + if (!this->asBool(optionNode, option, active)) + return 0; + + if (active) + status->look |= static_cast(constant); + else + status->look &= ~static_cast(constant); + } + } else { + if (!exists) + status->look = OPTION_NOTHING; + } + + if (this->nodeExists(node, "Flags")) { + const YAML::Node &flagNode = node["Flags"]; + + for (const auto &it : flagNode) { + std::string flag = it.first.as(), flag_constant = "SCF_" + flag; + int64 constant; + + if (!script_get_constant(flag_constant.c_str(), &constant)) { + this->invalidWarning(flagNode, "Flag %s is invalid.\n", flag.c_str()); + return 0; + } + + if (constant < SCF_NONE || constant >= SCF_MAX) { + this->invalidWarning(flagNode, "Flag %s is out of bounds.\n", flag.c_str()); + return 0; + } + + bool active; + + if (!this->asBool(flagNode, flag, active)) + return 0; + + if (active) + status->flag.set(static_cast(constant)); + else + status->flag.reset(static_cast(constant)); + } + } + + if (this->nodeExists(node, "MinRate")) { + uint16 rate; + + if (!this->asUInt16(node, "MinRate", rate)) + return 0; + + status->min_rate = rate; + } else { + if (!exists) + status->min_rate = 0; + } + + if (this->nodeExists(node, "MinDuration")) { + int64 duration; + + if (!this->asInt64(node, "MinDuration", duration)) + return 0; + + status->min_duration = static_cast(duration); + } else { + if (!exists) + status->min_duration = 1; + } + + if (this->nodeExists(node, "Fail")) { + const YAML::Node &failNode = node["Fail"]; + + for (const auto &it : failNode) { + std::string fail = it.first.as(), fail_constant = "SC_" + fail; + int64 constant; + + if (!script_get_constant(fail_constant.c_str(), &constant)) { + this->invalidWarning(failNode, "Fail status %s is invalid.\n", fail.c_str()); + return 0; + } + + if (!this->validateStatus(static_cast(constant))) { + this->invalidWarning(failNode, "Fail status %s is out of bounds.\n", fail.c_str()); + return 0; + } + + bool active; + + if (!this->asBool(failNode, fail, active)) + return 0; + + if (active) + status->fail.push_back(static_cast(constant)); + else + util::vector_erase_if_exists(status->fail, static_cast(constant)); + } + } + + if (this->nodeExists(node, "End")) { + const YAML::Node &endNode = node["End"]; + + for (const auto &it : endNode) { + std::string end = it.first.as(), end_constant = "SC_" + end; + int64 constant; + + if (!script_get_constant(end_constant.c_str(), &constant)) { + this->invalidWarning(endNode, "End status %s is invalid.\n", end.c_str()); + return 0; + } + + if (!this->validateStatus(static_cast(constant))) { + this->invalidWarning(endNode, "End 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->end.push_back(static_cast(constant)); + else + util::vector_erase_if_exists(status->end, static_cast(constant)); + } + } + + if (this->nodeExists(node, "EndReturn")) { + bool end; + + if (!this->asBool(node, "EndReturn", end)) + return 0; + + status->end_return = end; + } else { + if (!exists) + status->end_return = false; + } + + if (!exists) { + this->put(status_id, status); + } + + return 1; +} + +void StatusDatabase::loadingFinished(){ + for( auto& entry : *this ){ + auto& status = entry.second; + + if (status->type == SC_HALLUCINATION && !battle_config.display_hallucination) // Disable Hallucination. + status->icon = EFST_BLANK; + + if( status->icon == EFST_BLANK ){ + continue; + }else if( status->flag[SCF_BLEFFECT] ){ + this->StatusRelevantBLTypes[status->icon] |= BL_SCEFFECT; + }else{ + this->StatusRelevantBLTypes[status->icon] = BL_PC; + } + } +} + +StatusDatabase status_db; + /** * Sets defaults in tables and starts read db functions * sv_readdb reads the file, outputting the information line-by-line to @@ -17615,7 +14909,7 @@ int16 AttributeDatabase::getAttribute(uint16 level, uint16 atk_ele, uint16 def_e * refine.yml: Refining data table * @return 0 */ -int status_readdb( bool reload ){ +void status_readdb( bool reload ){ int i; const char* dbsubpath[] = { "", @@ -17623,9 +14917,6 @@ int status_readdb( bool reload ){ //add other path here }; - // Initialize databases to default - memset(SCDisabled, 0, sizeof(SCDisabled)); - // read databases // path,filename,separator,mincol,maxcol,maxrow,func_parsor for(i=0; i +#include +#include +#include #include #include "../common/database.hpp" @@ -11,6 +15,7 @@ #include "../common/timer.hpp" #include "map.hpp" +#include "script.hpp" enum e_race2 : uint8; struct block_list; @@ -246,7 +251,7 @@ enum sc_type : int16 { SC_ARMOR, SC_ARMOR_ELEMENT_WATER, SC_NOCHAT, - SC_BABY, + SC_PROTECTEXP, SC_AURABLADE, SC_PARRYING, SC_CONCENTRATION, //110 @@ -1175,7 +1180,7 @@ enum sc_type : int16 { }; /// Official status change ids, used to display status icons on the client. -enum efst_types : short{ +enum efst_type : short{ /// Do not modify code below this, until the end of the API hook, since it will be automatically generated again /// @APIHOOK_START(EFST_ENUM) EFST_BLANK = -1, @@ -2552,7 +2557,8 @@ extern short current_equip_opt_index; //who were not on your field of sight when it happened) ///opt1: (BODYSTATE_*) Non stackable status changes. -enum sc_opt1 { +enum e_sc_opt1 : uint16 { + OPT1_NONE = 0, OPT1_STONE = 1, //Petrified OPT1_FREEZE, OPT1_STUN, @@ -2561,10 +2567,12 @@ enum sc_opt1 { OPT1_STONEWAIT = 6, //Petrifying OPT1_BURNING, OPT1_IMPRISON, + OPT1_MAX }; ///opt2: (HEALTHSTATE_*) Stackable status changes. -enum sc_opt2 { +enum e_sc_opt2 : uint16 { + OPT2_NONE = 0x0, OPT2_POISON = 0x0001, OPT2_CURSE = 0x0002, OPT2_SILENCE = 0x0004, @@ -2574,11 +2582,12 @@ enum sc_opt2 { OPT2_BLEEDING = 0x0040, OPT2_DPOISON = 0x0080, OPT2_FEAR = 0x0100, + OPT2_MAX }; ///opt3: (SHOW_EFST_*) -enum sc_opt3 { - OPT3_NORMAL = 0x00000000, +enum e_sc_opt3 : uint32 { + OPT3_NORMAL = 0x0, OPT3_QUICKEN = 0x00000001, OPT3_OVERTHRUST = 0x00000002, OPT3_ENERGYCOAT = 0x00000004, @@ -2597,11 +2606,12 @@ enum sc_opt3 { OPT3_SOULLINK = 0x00008000, OPT3_UNDEAD = 0x00010000, OPT3_CONTRACT = 0x00020000, + OPT3_MAX }; ///Option (EFFECTSTATE_*) -enum e_option { - OPTION_NOTHING = 0x00000000, +enum e_option : uint32 { + OPTION_NOTHING = 0x0, OPTION_SIGHT = 0x00000001, OPTION_HIDE = 0x00000002, OPTION_CLOAK = 0x00000004, @@ -2632,6 +2642,7 @@ enum e_option { OPTION_HANBOK = 0x08000000, OPTION_OKTOBERFEST = 0x10000000, OPTION_SUMMER2 = 0x20000000, + OPTION_MAX, // compound constant for older carts OPTION_CART = OPTION_CART1|OPTION_CART2|OPTION_CART3|OPTION_CART4|OPTION_CART5, @@ -2641,15 +2652,6 @@ enum e_option { OPTION_COSTUME = OPTION_WEDDING|OPTION_XMAS|OPTION_SUMMER|OPTION_HANBOK|OPTION_OKTOBERFEST|OPTION_SUMMER2, }; -enum e_option_change_flag : uint16 { - OCF_NONE = 0x0, - OCF_SEND_OPTION = 0x1, - OCF_ONTOUCH = 0x2, - OCF_UNIT_MOVE = 0x4, - OCF_NON_PLAYER = 0x8, - OCF_SEND_LOOK = 0x10, -}; - ///Defines for the manner system [Skotlex] enum manner_flags { @@ -2661,23 +2663,38 @@ enum manner_flags }; /// Status Change State Flags -enum scs_flag { - SCS_NOMOVECOND = 0x00000001, ///< cond flag for nomove - SCS_NOMOVE = 0x00000002, ///< unit unable to move - SCS_NOPICKITEMCOND = 0x00000004, ///< cond flag for nopickitem - SCS_NOPICKITEM = 0x00000008, ///< player unable to pick up items - SCS_NODROPITEMCOND = 0x00000010, ///< cond flag for nodropitem - SCS_NODROPITEM = 0x00000020, ///< player unable to drop items - SCS_NOCASTCOND = 0x00000040, ///< cond flag for nocast - SCS_NOCAST = 0x00000080, ///< unit unable to cast skills - SCS_NOCHAT = 0x00000100, ///< unit can't talk - SCS_NOCHATCOND = 0x00000200, ///< cond flag for notalk +enum e_scs_flag : uint8 { + SCS_NONE = 0, + SCS_NOMOVECOND, ///< cond flag for SCS_NOMOVE + SCS_NOMOVE, ///< unit unable to move + SCS_NOPICKITEMCOND, ///< cond flag for SCS_NOPICKITEM + SCS_NOPICKITEM, ///< player unable to pick up items + SCS_NODROPITEMCOND, ///< cond flag for SCS_NODROPITEM + SCS_NODROPITEM, ///< player unable to drop items + SCS_NOCASTCOND, ///< cond flag for SCS_NOCAST + SCS_NOCAST, ///< unit unable to cast skills + SCS_NOCHAT, ///< unit can't talk + SCS_NOCHATCOND, ///< cond flag for SCS_NOCHAT + SCS_NOEQUIPITEM, ///< player can't puts on equip + SCS_NOEQUIPITEMCOND, ///< cond flag for SCS_NOEQUIPITEM + SCS_NOUNEQUIPITEM, ///< player can't puts off equip + SCS_NOUNEQUIPITEMCOND, ///< cond flag for SCS_NOUNEQUIPITEM + SCS_NOCONSUMEITEM, ///< player can't consumes equip + SCS_NOCONSUMEITEMCOND, ///< cond flag for SCS_NOCONSUMEITEM + SCS_NOATTACK, ///< unit can't attack + SCS_NOATTACKCOND, ///< cond flag for SCS_NOATTACK + SCS_NOWARP, ///< unit can't warp + SCS_NOWARPCOND, ///< cond flag for SCS_NOWARP + SCS_NODEATHPENALTY, ///< player doesn't experience EXP loss + SCS_NODEATHPENALTYCOND, ///< cond flag for SCS_NODEATHPENALTYCOND + SCS_NOINTERACT, ///< player can't sit/stand/talk to NPC + SCS_NOINTERACTCOND, ///< cond flag for SCS_NOINTERACT + SCS_MAX }; ///Define flags for the status_calc_bl function. [Skotlex] -enum scb_flag : uint64 -{ // Main Flags - SCB_NONE = 0x00000000, +enum e_scb_flag : uint64 { + SCB_NONE = 0x0, SCB_BASE = 0x00000001, SCB_MAXHP = 0x00000002, SCB_MAXSP = 0x00000004, @@ -2729,19 +2746,20 @@ enum scb_flag : uint64 SCB_DYE = 0x080000000000, // force cloth-dye change to 0 to avoid client crashes. // Special flags for updating all stat/sub-stat stuff on request. - SCB_BATTLE = 0x07FFFFFFFFFE,// All except BASE and extra flags. - SCB_ALL = 0x07FFFFFFFFFF// All except extra flags. + SCB_BATTLE = 0x07FFFFFFFFFE, // All except BASE and extra flags. + SCB_ALL = 0x07FFFFFFFFFF, // All except extra flags. + SCB_MAX = 0x0FFFFFFFFFFF, }; -enum e_status_calc_opt { +enum e_status_calc_opt : uint8 { SCO_NONE = 0x0, SCO_FIRST = 0x1, ///< Trigger the calculations that should take place only onspawn/once, process base status initialization code SCO_FORCE = 0x2, ///< Only relevant to BL_PC types, ensures call bypasses the queue caused by delayed damage }; /// Flags for status_change_start and status_get_sc_def -enum e_status_change_start_flags { - SCSTART_NONE = 0x00, +enum e_status_change_start_flags : int64 { + SCSTART_NONE = 0x0, SCSTART_NOAVOID = 0x01, /// Cannot be avoided (it has to start) SCSTART_NOTICKDEF = 0x02, /// Tick should not be reduced (by statuses or bonuses) SCSTART_LOADED = 0x04, /// When sc_data loaded (fetched from table), no values (val1 ~ val4) have to be altered/recalculate @@ -2750,7 +2768,7 @@ enum e_status_change_start_flags { }; /// Enum for status_change_clear_buffs -enum e_status_change_clear_buffs_flags { +enum e_status_change_clear_buffs_flags : int64 { SCCB_BUFFS = 0x01, SCCB_DEBUFFS = 0x02, SCCB_REFRESH = 0x04, @@ -2759,7 +2777,7 @@ enum e_status_change_clear_buffs_flags { }; ///Enum for bonus_script's flag [Cydh] -enum e_bonus_script_flags { +enum e_bonus_script_flags : uint32 { BSF_REM_ON_DEAD = 0x001, ///< Removed when dead BSF_REM_ON_DISPELL = 0x002, ///< Removed by Dispell BSF_REM_ON_CLEARANCE = 0x004, ///< Removed by Clearance @@ -2787,6 +2805,102 @@ enum e_status_bonus { STATUS_BONUS_RATE = 1, }; +///Enum of Status Change Flags [Cydh] +enum e_status_change_flag : uint16 { + SCF_NONE = 0, + SCF_BLEFFECT, + SCF_DISPLAYPC, + SCF_NOCLEARBUFF, + SCF_NOREMOVEONDEAD, + SCF_NODISPELL, + SCF_NOCLEARANCE, + SCF_NOBANISHINGBUSTER, + SCF_NOSAVE, + SCF_NOSAVEINFINITE, + SCF_REMOVEONDAMAGED, + SCF_REMOVEONREFRESH, + SCF_REMOVEONLUXANIMA, + SCF_STOPATTACKING, + SCF_STOPCASTING, + SCF_STOPWALKING, + SCF_BOSSRESIST, + SCF_MVPRESIST, + SCF_SETSTAND, + SCF_FAILEDMADO, + SCF_DEBUFF, + SCF_REMOVEONCHANGEMAP, + SCF_REMOVEONMAPWARP, + SCF_REMOVECHEMICALPROTECT, + SCF_OVERLAPFAIL, + SCF_OVERLAPIGNORELEVEL, + SCF_SENDOPTION, + SCF_ONTOUCH, + SCF_UNITMOVE, + SCF_NONPLAYER, + SCF_SENDLOOK, + SCF_DISPLAYNPC, + SCF_REQUIREWEAPON, + SCF_REQUIRESHIELD, + SCF_MOBLOSETARGET, + SCF_REMOVEELEMENTALOPTION, + SCF_SUPERNOVICEANGEL, + SCF_TAEKWONANGEL, + SCF_MADOCANCEL, + SCF_MADOENDCANCEL, + SCF_RESTARTONMAPWARP, + SCF_SPREADEFFECT, + SCF_SENDVAL1, + SCF_SENDVAL2, + SCF_SENDVAL3, + SCF_MAX +}; + +/// Struct of SC configs [Cydh] +struct s_status_change_db { + sc_type type; ///< SC_ + efst_type icon; ///< EFST_ + std::bitset state; ///< SCS_ + uint64 calc_flag; ///< SCB_ flags + uint16 opt1; ///< OPT1_ + uint16 opt2; ///< OPT2_ + uint32 opt3; ///< OPT3_ + uint32 look; ///, OPTION_ Changelook + std::bitset 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 end; ///< List of SC that will be ended when this SC is activated + std::vector fail; ///< List of SC that causing this SC cannot be activated + bool end_return; ///< After SC ends the SC from end list, it does nothing + 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 { +public: + StatusDatabase() : TypesafeCachedYamlDatabase("STATUS_DB", 1) { + + } + + const std::string getDefaultLocation() override; + uint64 parseBodyNode(const YAML::Node &node) override; + void loadingFinished() override; + + // Determine who will receive a clif_status_change packet for effects that require one to display correctly + uint16 StatusRelevantBLTypes[EFST_MAX]; + + // Extras + efst_type getIcon(sc_type type); + uint64 getCalcFlag(sc_type type); + std::vector getEnd(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 flag); + void changeSkillTree(map_session_data *sd, int32 class_ = 0); + bool validateStatus(sc_type type); +}; + +extern StatusDatabase status_db; + /// Enum for status_calc_weight and status_calc_cart_weight enum e_status_calc_weight_opt { CALCWT_NONE = 0x0, @@ -2824,14 +2938,6 @@ struct weapon_atk { #endif }; -extern sc_type SkillStatusChangeTable[MAX_SKILL]; /// skill -> status -extern int StatusIconChangeTable[SC_MAX]; /// status -> "icon" (icon is a bit of a misnomer, since there exist values with no icon associated) -extern uint64 StatusChangeFlagTable[SC_MAX]; /// status -> flags -extern int StatusSkillChangeTable[SC_MAX]; /// status -> skill -extern int StatusRelevantBLTypes[EFST_MAX]; /// "icon" -> enum bl_type (for clif->status_change to identify for which bl types to send packets) -extern unsigned int StatusChangeStateTable[SC_MAX]; /// status -> flags -extern unsigned int StatusDisplayType[SC_MAX]; - ///For holding basic status (which can be modified by status changes) struct status_data { unsigned int @@ -2938,11 +3044,18 @@ struct status_change { unsigned char count; //! TODO: See if it is possible to implement the following SC's without requiring extra parameters while the SC is inactive. struct { - unsigned char move; - unsigned char pickup; - unsigned char drop; - unsigned char cast; - unsigned char chat; + uint8 move; + uint8 pickup; + uint8 drop; + uint8 cast; + uint8 chat; + uint8 equip; + uint8 unequip; + uint8 consume; + uint8 attack; + uint8 warp; + uint8 deathpenalty; + uint8 interact; } cant;/* status change state flags */ //int sg_id; //ID of the previous Storm gust that hit you short comet_x, comet_y; // Point where src casted Comet - required to calculate damage from this point @@ -2955,25 +3068,6 @@ struct status_change { struct status_change_entry *data[SC_MAX]; }; -/// Statuses that are cancelled/disabled while on Madogear -static const std::vector mado_statuses = { - SC_LOUD, - SC_CARTBOOST, - SC_MELTDOWN, - SC_ADRENALINE, - SC_ADRENALINE2, - SC_WEAPONPERFECTION, - SC_MAXIMIZEPOWER, - SC_OVERTHRUST, - SC_MAXOVERTHRUST -}; - -// for looking up associated data -sc_type status_skill2sc(int skill); -int status_sc2skill(sc_type sc); -uint64 status_sc2scb_flag(sc_type sc); -int status_type2relevant_bl_types(int type); - int status_damage( struct block_list *src, struct block_list *target, int64 dhp, int64 dsp, int64 dap, t_tick walkdelay, int flag, uint16 skill_id ); static int status_damage( struct block_list *src, struct block_list *target, int64 dhp, int64 dsp, t_tick walkdelay, int flag, uint16 skill_id ){ return status_damage( src, target, dhp, dsp, 0, walkdelay, flag, skill_id ); @@ -3123,7 +3217,7 @@ int status_change_clear(struct block_list* bl, int type); void status_change_clear_buffs(struct block_list* bl, uint8 type); void status_change_clear_onChangeMap(struct block_list *bl, struct status_change *sc); -#define status_calc_bl(bl, flag) status_calc_bl_(bl, (enum scb_flag)(flag), SCO_NONE) +#define status_calc_bl(bl, flag) status_calc_bl_(bl, flag, SCO_NONE) #define status_calc_mob(md, opt) status_calc_bl_(&(md)->bl, SCB_ALL, opt) #define status_calc_pet(pd, opt) status_calc_bl_(&(pd)->bl, SCB_ALL, opt) #define status_calc_pc(sd, opt) status_calc_bl_(&(sd)->bl, SCB_ALL, opt) @@ -3134,25 +3228,26 @@ void status_change_clear_onChangeMap(struct block_list *bl, struct status_change bool status_calc_weight(struct map_session_data *sd, enum e_status_calc_weight_opt flag); bool status_calc_cart_weight(struct map_session_data *sd, enum e_status_calc_weight_opt flag); -void status_calc_bl_(struct block_list *bl, enum scb_flag flag, enum e_status_calc_opt opt); -int status_calc_mob_(struct mob_data* md, enum e_status_calc_opt opt); -void status_calc_pet_(struct pet_data* pd, enum e_status_calc_opt opt); -int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt); -int status_calc_homunculus_(struct homun_data *hd, enum e_status_calc_opt opt); -int status_calc_mercenary_(s_mercenary_data *md, e_status_calc_opt opt); -int status_calc_elemental_(s_elemental_data *ed, e_status_calc_opt opt); -int status_calc_npc_(struct npc_data *nd, enum e_status_calc_opt opt); +void status_calc_bl_(struct block_list *bl, uint64 flag, uint8 opt); +int status_calc_mob_(struct mob_data* md, uint8 opt); +void status_calc_pet_(struct pet_data* pd, uint8 opt); +int status_calc_pc_(struct map_session_data* sd, uint8 opt); +int status_calc_homunculus_(struct homun_data *hd, uint8 opt); +int status_calc_mercenary_(s_mercenary_data *md, uint8 opt); +int status_calc_elemental_(s_elemental_data *ed, uint8 opt); +int status_calc_npc_(struct npc_data *nd, uint8 opt); void status_calc_misc(struct block_list *bl, struct status_data *status, int level); void status_calc_regen(struct block_list *bl, struct status_data *status, struct regen_data *regen); void status_calc_regen_rate(struct block_list *bl, struct regen_data *regen, struct status_change *sc); +void status_calc_state(struct block_list *bl, struct status_change *sc, std::bitset flag, bool start); void status_calc_slave_mode(struct mob_data *md, struct mob_data *mmd); bool status_check_skilluse(struct block_list *src, struct block_list *target, uint16 skill_id, int flag); int status_check_visibility(struct block_list *src, struct block_list *target); -int status_change_spread(struct block_list *src, struct block_list *bl, bool type); +int status_change_spread(block_list *src, block_list *bl); #ifndef RENEWAL unsigned short status_base_matk_min(const struct status_data* status); @@ -3167,9 +3262,11 @@ unsigned short status_base_matk_max(struct block_list *bl, const struct status_d unsigned short status_base_atk(const struct block_list *bl, const struct status_data *status, int level); -void initChangeTables(void); -int status_readdb( bool reload = false ); -int do_init_status(void); +// Status changes accessors for StatusChange database +uint16 status_efst_get_bl_type(enum efst_type efst); + +void status_readdb( bool reload = false ); +void do_init_status(void); void do_final_status(void); #endif /* STATUS_HPP */ diff --git a/src/map/unit.cpp b/src/map/unit.cpp index 74c46c602c..56e7cd4caf 100644 --- a/src/map/unit.cpp +++ b/src/map/unit.cpp @@ -1449,9 +1449,9 @@ int unit_is_walking(struct block_list *bl) * Some statuses are still checked here due too specific variables * @author [Skotlex] * @param bl: Object to check - * @return Can move(1); Can't move(0) + * @return True - can move; False - can't move */ -int unit_can_move(struct block_list *bl) { +bool unit_can_move(struct block_list *bl) { struct map_session_data *sd; struct unit_data *ud; struct status_change *sc; @@ -1463,37 +1463,20 @@ int unit_can_move(struct block_list *bl) { sd = BL_CAST(BL_PC, bl); if (!ud) - return 0; + return false; if (ud->skilltimer != INVALID_TIMER && ud->skill_id != LG_EXEEDBREAK && (!sd || !pc_checkskill(sd, SA_FREECAST) || skill_get_inf2(ud->skill_id, INF2_ISGUILD))) - return 0; // Prevent moving while casting + return false; // Prevent moving while casting if (DIFF_TICK(ud->canmove_tick, gettick()) > 0) - return 0; + return false; if ((sd && (pc_issit(sd) || sd->state.vending || sd->state.buyingstore || (sd->state.block_action & PCBLOCK_MOVE) || sd->state.mail_writing)) || ud->state.blockedmove) - return 0; // Can't move + return false; // Can't move // Status changes that block movement - if (sc) { - if( sc->cant.move // status placed here are ones that cannot be cached by sc->cant.move for they depend on other conditions other than their availability - || sc->data[SC_SPIDERWEB] - || (sc->data[SC_DANCING] && sc->data[SC_DANCING]->val4 && ( -#ifndef RENEWAL - !sc->data[SC_LONGING] || -#endif - (sc->data[SC_DANCING]->val1&0xFFFF) == CG_MOONLIT || - (sc->data[SC_DANCING]->val1&0xFFFF) == CG_HERMODE - ) ) - ) - return 0; - - if (sc->opt1 > 0 && sc->opt1 != OPT1_STONEWAIT && sc->opt1 != OPT1_BURNING) - return 0; - - if ((sc->option & OPTION_HIDE) && (!sd || pc_checkskill(sd, RG_TUNNELDRIVE) <= 0)) - return 0; - } + if (sc && sc->cant.move) + return false; // Icewall walk block special trapped monster mode if(bl->type == BL_MOB) { @@ -1501,11 +1484,11 @@ int unit_can_move(struct block_list *bl) { if(md && ((status_has_mode(&md->status,MD_STATUSIMMUNE) && battle_config.boss_icewall_walk_block == 1 && map_getcell(bl->m,bl->x,bl->y,CELL_CHKICEWALL)) || (!status_has_mode(&md->status,MD_STATUSIMMUNE) && battle_config.mob_icewall_walk_block == 1 && map_getcell(bl->m,bl->x,bl->y,CELL_CHKICEWALL)))) { md->walktoxy_fail_count = 1; //Make sure rudeattacked skills are invoked - return 0; + return false; } } - return 1; + return true; } /** @@ -1520,11 +1503,9 @@ TIMER_FUNC(unit_resume_running){ TBL_PC *sd = map_id2sd(id); if (sd && pc_isridingwug(sd)) - clif_skill_nodamage(ud->bl,ud->bl,RA_WUGDASH,ud->skill_lv, - sc_start4(ud->bl,ud->bl,status_skill2sc(RA_WUGDASH),100,ud->skill_lv,unit_getdir(ud->bl),0,0,0)); + clif_skill_nodamage(ud->bl,ud->bl,RA_WUGDASH,ud->skill_lv,sc_start4(ud->bl,ud->bl,SC_WUGDASH,100,ud->skill_lv,unit_getdir(ud->bl),0,0,0)); else - clif_skill_nodamage(ud->bl,ud->bl,TK_RUN,ud->skill_lv, - sc_start4(ud->bl,ud->bl,status_skill2sc(TK_RUN),100,ud->skill_lv,unit_getdir(ud->bl),0,0,0)); + clif_skill_nodamage(ud->bl,ud->bl,TK_RUN,ud->skill_lv,sc_start4(ud->bl,ud->bl,SC_RUN,100,ud->skill_lv,unit_getdir(ud->bl),0,0,0)); if (sd) clif_walkok(sd); @@ -2404,23 +2385,6 @@ int unit_unattackable(struct block_list *bl) return 0; } -/** - * Checks if the unit can attack, returns yes if so. -*/ -bool unit_can_attack(struct block_list *src, int target_id) -{ - struct status_change *sc = status_get_sc(src); - - if( sc != NULL ) { - if( sc->data[SC__MANHOLE] ) - return false; - } - - if( src->type == BL_PC ) - return pc_can_attack(BL_CAST(BL_PC, src), target_id); - return true; -} - /** * Requests a unit to attack a target * @param src: Object initiating attack @@ -2723,7 +2687,7 @@ static int unit_attack_timer_sub(struct block_list* src, int tid, t_tick tick) #ifdef OFFICIAL_WALKPATH || !path_search_long(NULL, src->m, src->x, src->y, target->x, target->y, CELL_CHKWALL) #endif - || (sd && !pc_can_attack(sd, target->id)) ) + || !unit_can_attack(src, target->id) ) return 0; // Can't attack under these conditions if( src->m != target->m ) { @@ -2870,6 +2834,35 @@ static TIMER_FUNC(unit_attack_timer){ return 0; } +/** + * Determines whether a player can attack based on status changes + * Why not use status_check_skilluse? + * "src MAY be null to indicate we shouldn't check it, this is a ground-based skill attack." + * Even ground-based attacks should be blocked by these statuses + * Called from unit_attack and unit_attack_timer_sub + * @retval true Can attack + **/ +bool unit_can_attack(struct block_list *bl, int target_id) { + nullpo_retr(false, bl); + + if (bl->type == BL_PC) { + map_session_data *sd = ((TBL_PC *)bl); + + if (sd && (sd->state.block_action & PCBLOCK_ATTACK)) + return false; + } + + struct status_change *sc; + + if (!(sc = status_get_sc(bl))) + return true; + + if (sc->cant.attack || (sc->data[SC_VOICEOFSIREN] && sc->data[SC_VOICEOFSIREN]->val2 == target_id)) + return false; + + return true; +} + /** * Cancels a skill's cast * @param bl: Object to cancel cast @@ -3059,50 +3052,20 @@ int unit_remove_map_(struct block_list *bl, clr_type clrtype, const char* file, ud->attackabletime = ud->canmove_tick /*= ud->canact_tick*/ = gettick(); if(sc && sc->count ) { // map-change/warp dispells. - status_change_end(bl, SC_BLADESTOP, INVALID_TIMER); -#ifdef RENEWAL - status_change_end(bl, SC_BASILICA_CELL, INVALID_TIMER); -#else - status_change_end(bl, SC_BASILICA, INVALID_TIMER); -#endif - status_change_end(bl, SC_ANKLE, INVALID_TIMER); - status_change_end(bl, SC_TRICKDEAD, INVALID_TIMER); - status_change_end(bl, SC_BLADESTOP_WAIT, INVALID_TIMER); - status_change_end(bl, SC_RUN, INVALID_TIMER); - status_change_end(bl, SC_DANCING, INVALID_TIMER); - status_change_end(bl, SC_WARM, INVALID_TIMER); - status_change_end(bl, SC_DEVOTION, INVALID_TIMER); - status_change_end(bl, SC_MARIONETTE, INVALID_TIMER); - status_change_end(bl, SC_MARIONETTE2, INVALID_TIMER); - status_change_end(bl, SC_CLOSECONFINE, INVALID_TIMER); - status_change_end(bl, SC_CLOSECONFINE2, INVALID_TIMER); - status_change_end(bl, SC_TINDER_BREAKER, INVALID_TIMER); - status_change_end(bl, SC_TINDER_BREAKER2, INVALID_TIMER); - status_change_end(bl, SC_FLASHKICK, INVALID_TIMER); - status_change_end(bl, SC_SERVANT_SIGN, INVALID_TIMER); - status_change_end(bl, SC_HIDING, INVALID_TIMER); + if (sc->cant.warp) + return 0; + + status_db.removeByStatusFlag(bl, { SCF_REMOVEONCHANGEMAP }); + // Ensure the bl is a PC; if so, we'll handle the removal of cloaking and cloaking exceed later if ( bl->type != BL_PC ) { status_change_end(bl, SC_CLOAKING, INVALID_TIMER); status_change_end(bl, SC_CLOAKINGEXCEED, INVALID_TIMER); } - status_change_end(bl, SC_CHASEWALK, INVALID_TIMER); if (sc->data[SC_GOSPEL] && sc->data[SC_GOSPEL]->val4 == BCT_SELF) status_change_end(bl, SC_GOSPEL, INVALID_TIMER); - if (sc->data[SC_PROVOKE] && sc->data[SC_PROVOKE]->timer == INVALID_TIMER) + if (sc->data[SC_PROVOKE] && sc->data[SC_PROVOKE]->val4 == 1) status_change_end(bl, SC_PROVOKE, INVALID_TIMER); //End infinite provoke to prevent exploit - status_change_end(bl, SC_CHANGE, INVALID_TIMER); - status_change_end(bl, SC_STOP, INVALID_TIMER); - status_change_end(bl, SC_WUGDASH, INVALID_TIMER); - status_change_end(bl, SC_CAMOUFLAGE, INVALID_TIMER); - status_change_end(bl, SC_NEUTRALBARRIER_MASTER, INVALID_TIMER); - status_change_end(bl, SC_STEALTHFIELD_MASTER, INVALID_TIMER); - status_change_end(bl, SC__SHADOWFORM, INVALID_TIMER); - status_change_end(bl, SC__MANHOLE, INVALID_TIMER); - status_change_end(bl, SC_VACUUM_EXTREME, INVALID_TIMER); - status_change_end(bl, SC_NEWMOON, INVALID_TIMER); - status_change_end(bl, SC_CURSEDCIRCLE_ATKER, INVALID_TIMER); // callme before warp - status_change_end(bl, SC_SUHIDE, INVALID_TIMER); } switch( bl->type ) { @@ -3583,7 +3546,7 @@ int unit_free(struct block_list *bl, clr_type clrtype) sd->status.hom_id = 0; #ifdef RENEWAL - status_change_end(&sd->bl, status_skill2sc(AM_CALLHOMUN), INVALID_TIMER); + status_change_end(&sd->bl, SC_HOMUN_TIME, INVALID_TIMER); #endif } diff --git a/src/map/unit.hpp b/src/map/unit.hpp index 10aa46b9af..19228475ab 100644 --- a/src/map/unit.hpp +++ b/src/map/unit.hpp @@ -115,7 +115,7 @@ TIMER_FUNC(unit_delay_walktobl_timer); // Causes the target object to stop moving. int unit_stop_walking(struct block_list *bl,int type); -int unit_can_move(struct block_list *bl); +bool unit_can_move(struct block_list *bl); int unit_is_walking(struct block_list *bl); int unit_set_walkdelay(struct block_list *bl, t_tick tick, t_tick delay, int type); @@ -138,6 +138,7 @@ int unit_stopattack(struct block_list *bl, va_list ap); void unit_stop_attack(struct block_list *bl); int unit_attack(struct block_list *src,int target_id,int continuous); int unit_cancel_combo(struct block_list *bl); +bool unit_can_attack(struct block_list *bl, int target_id); // Cast on a unit int unit_skilluse_id(struct block_list *src, int target_id, uint16 skill_id, uint16 skill_lv);