Explorar o código

It kinda works!

vstumpf hai 10 meses
pai
achega
fd1e582156

+ 2 - 1
src/map/CMakeLists.txt

@@ -43,7 +43,8 @@ set(MAP_SOURCES
 	"vending.cpp"
 
 	"skills/skill.cpp"
-	"skills/swordsman/bash.cpp"
+	"skills/skillrepository.cpp"
+	"skills/swordsman.cpp"
 )
 
 set(MAP_HEADERS

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1806 - 1794
src/map/skill.cpp


+ 0 - 41
src/map/skills/main.cpp

@@ -1,41 +0,0 @@
-
-#include "skill.hpp"
-#include "skills.hpp"
-// #include "swordsman/bash.hpp"
-// #include "swordsman/provoke.hpp"
-
-#include "skilllist.hpp"
-
-
-
-int main() {
-
-	constexpr int skill_id = SM_BASH;
-
-	const auto &sk = skill_db.at(static_cast<e_skill>(skill_id));
-
-	const SkillImpl sk2 = Bash{};
-
-	std::visit([](auto &skill) {
-		skill.getSkillID();
-
-		skill.castend_damage_id(); // error
-		// skill.hpp:19:26: error: ‘const class Provoke’ has no member named ‘castendDamageId’; did you mean ‘castendNoDamageId’?
-		//    19 |   return as_underlying().castendDamageId();
-		//       |          ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~
-		//       |          castendNoDamageId
-
-	}, sk2);
-
-
-	
-	for (auto &it : skill_db) {
-		std::visit([](auto &skill) {
-			skill.getSkillID();
-
-			// skill.castend_damage_id();
-		}, it.second);
-	}
-
-	return 0;
-}

+ 53 - 0
src/map/skills/skill.cpp

@@ -0,0 +1,53 @@
+// Copyright (c) rAthena Dev Teams - Licensed under GNU GPL
+// For more information, see LICENCE in the main folder
+#include <common/showmsg.hpp>
+
+#include "skill.hpp"
+#include "map/battle.hpp"
+#include "map/skill.hpp"
+#include "map/clif.hpp"
+#include "map/map.hpp"
+#include "map/status.hpp"
+
+uint16_t Skill::getSkillId() const {
+    return skill_id_;
+}
+
+int Skill::castendDamageImpl(block_list *src, block_list *target, uint16 skill_lv, t_tick tick, int flag) const {
+    throw SkillNotImplementedException(skill_id_);
+}
+
+int Skill::castendNoDamageImpl(block_list *src, block_list *target, uint16 skill_lv, t_tick tick, int flag) const {
+    throw SkillNotImplementedException(skill_id_);
+}
+
+int Skill::castendPositionImpl() const {
+    throw SkillNotImplementedException(skill_id_);
+}
+
+int Skill::castendDamage(block_list *src, block_list *target, uint16 skill_lv, t_tick tick, int flag) const {
+    try {
+        return castendDamageImpl(src, target, skill_lv, tick, flag);
+    } catch (SkillNotImplementedException e) {
+        ShowWarning("castendDamage: %s\n", e.what());
+        clif_skill_damage(src, target, tick, status_get_amotion(src), status_get_status_data(target)->dmotion, 0, abs(skill_get_num(skill_id_, skill_lv)), skill_id_, skill_lv, skill_get_hit(skill_id_));
+        return 1;
+    }
+}
+
+int Skill::castendNoDamage(block_list *src, block_list *target, uint16 skill_lv, t_tick tick, int flag) const {
+    try {
+        return castendNoDamageImpl(src, target, skill_lv, tick, flag);
+    } catch (SkillNotImplementedException e) {
+        ShowWarning("castendNoDamage: %s\n", e.what());
+        clif_skill_damage(src, target, tick, status_get_amotion(src), status_get_status_data(target)->dmotion, 0, abs(skill_get_num(skill_id_, skill_lv)), skill_id_, skill_lv, skill_get_hit(skill_id_));
+        return 1;
+    }
+}
+
+int WeaponSkill::castendDamageImpl(block_list *src, block_list *target, uint16 skill_lv, t_tick tick, int flag) const {
+    skill_attack(BF_WEAPON, src, src, target, skill_id_, skill_lv, tick, flag);
+    return 0;
+};
+
+

+ 23 - 16
src/map/skills/skill.hpp

@@ -7,30 +7,37 @@
 #include <array>
 #include <string>
 
-#include "skills.hpp"
-
-constexpr int MAX_SKILL_LEVEL = 13;
+#include "map/skill.hpp"
 
+class SkillNotImplementedException : public std::logic_error {
+public:
+	explicit SkillNotImplementedException(const std::string &what_arg) : std::logic_error(what_arg) {};
+	explicit SkillNotImplementedException(uint16_t skill_id) : std::logic_error("Skill " + std::to_string(skill_id) + " not implemented") {};
+};
 
 class Skill {
 public:
-	virtual int castendDamageId() const;
-	virtual int castendNodamageId() const;
-	virtual int castendPos2() const;
+	uint16_t getSkillId() const;
 
-	uint16_t getSkillID() const {
-		return nameid;
-	}
+	virtual ~Skill() = default;
 
-protected:
-	explicit Skill(e_skill skillid) : nameid(static_cast<uint16_t>(skillid)) {};
-private:
+	explicit Skill(e_skill skillid) : skill_id_(static_cast<uint16_t>(skillid)) {};
+
+	int castendDamage(block_list *src, block_list *target, uint16 skill_lv, t_tick tick, int flag) const;
+	int castendNoDamage(block_list *src, block_list *target, uint16 skill_lv, t_tick tick, int flag) const;
 
-	uint16_t nameid;
-	std::string name;
-	std::string desc;
-	std::array<int32_t, MAX_SKILL_LEVEL> range;
+protected:
+	virtual int castendDamageImpl(block_list *src, block_list *target, uint16 skill_lv, t_tick tick, int flag) const;
+	virtual int castendNoDamageImpl(block_list *src, block_list *target, uint16 skill_lv, t_tick tick, int flag) const;
+	virtual int castendPositionImpl() const;
+	uint16_t skill_id_;
 };
 
+class WeaponSkill : public Skill {
+public:
+	explicit WeaponSkill(e_skill skill_id) : Skill(skill_id) {};
+protected:
+    virtual int castendDamageImpl(block_list *src, block_list *target, uint16 skill_lv, t_tick tick, int flag) const override;
+};
 
 #endif // MAP_SKILL_HPP

+ 0 - 15
src/map/skills/skilllist.hpp

@@ -1,15 +0,0 @@
-#include <variant>
-
-#include "skill.hpp"
-#include "skills.hpp"
-
-#include "swordsman/bash.hpp"
-#include "swordsman/provoke.hpp"
-
-
-using SkillImpl = std::variant<Bash, Provoke>;
-
-std::unordered_map<e_skill, SkillImpl> skill_db = {
-	{ e_skill::SM_BASH, Bash{} },
-	{ e_skill::SM_PROVOKE, Provoke{} }
-};

+ 25 - 0
src/map/skills/skillrepository.cpp

@@ -0,0 +1,25 @@
+// Copyright (c) rAthena Dev Teams - Licensed under GNU GPL
+// For more information, see LICENCE in the main folder
+
+#include "skillrepository.hpp"
+#include "swordsman.hpp"
+
+#include <memory>
+
+SkillRepository skillRepository;
+
+const Skill& SkillRepository::getSkill(e_skill skill_id) {
+    auto skill = skill_db_.find(skill_id);
+    if (skill == skill_db_.end()) {
+        throw SkillNotFoundException{};
+    }
+    return *skill->second;
+}
+
+void SkillRepository::addSkill(e_skill skill_id, std::unique_ptr<Skill> skill) {
+    skill_db_.emplace(skill_id, std::move(skill));
+}
+
+void init_skill_repository() {
+    init_swordsman_skills(skillRepository);
+}

+ 25 - 0
src/map/skills/skillrepository.hpp

@@ -0,0 +1,25 @@
+// Copyright (c) rAthena Dev Teams - Licensed under GNU GPL
+// For more information, see LICENCE in the main folder
+
+#pragma once
+
+#include <memory>
+
+#include "skill.hpp"
+#include "map/skill.hpp"
+
+class SkillRepository {
+public:
+	class SkillNotFoundException : public std::exception {};
+
+	const Skill& getSkill(e_skill skill_id);
+
+	void addSkill(e_skill skill_id, std::unique_ptr<Skill> skill);
+
+private:
+	std::unordered_map<e_skill, std::unique_ptr<Skill>> skill_db_;
+};
+
+extern SkillRepository skillRepository;
+
+void init_skill_repository();

+ 0 - 1833
src/map/skills/skills.hpp

@@ -1,1833 +0,0 @@
-// Copyright (c) rAthena Dev Teams - Licensed under GNU GPL
-// For more information, see LICENCE in the main folder
-
-#ifndef MAP_SKILLS_HPP
-#define MAP_SKILLS_HPP
-
-#include <unordered_map>
-#include "skill.hpp"
-
-/// List of Skills
-enum e_skill {
-	NV_BASIC = 1,
-
-	SM_SWORD,
-	SM_TWOHAND,
-	SM_RECOVERY,
-	SM_BASH,
-	SM_PROVOKE,
-	SM_MAGNUM,
-	SM_ENDURE,
-
-	MG_SRECOVERY,
-	MG_SIGHT,
-	MG_NAPALMBEAT,
-	MG_SAFETYWALL,
-	MG_SOULSTRIKE,
-	MG_COLDBOLT,
-	MG_FROSTDIVER,
-	MG_STONECURSE,
-	MG_FIREBALL,
-	MG_FIREWALL,
-	MG_FIREBOLT,
-	MG_LIGHTNINGBOLT,
-	MG_THUNDERSTORM,
-
-	AL_DP,
-	AL_DEMONBANE,
-	AL_RUWACH,
-	AL_PNEUMA,
-	AL_TELEPORT,
-	AL_WARP,
-	AL_HEAL,
-	AL_INCAGI,
-	AL_DECAGI,
-	AL_HOLYWATER,
-	AL_CRUCIS,
-	AL_ANGELUS,
-	AL_BLESSING,
-	AL_CURE,
-
-	MC_INCCARRY,
-	MC_DISCOUNT,
-	MC_OVERCHARGE,
-	MC_PUSHCART,
-	MC_IDENTIFY,
-	MC_VENDING,
-	MC_MAMMONITE,
-
-	AC_OWL,
-	AC_VULTURE,
-	AC_CONCENTRATION,
-	AC_DOUBLE,
-	AC_SHOWER,
-
-	TF_DOUBLE,
-	TF_MISS,
-	TF_STEAL,
-	TF_HIDING,
-	TF_POISON,
-	TF_DETOXIFY,
-
-	ALL_RESURRECTION,
-
-	KN_SPEARMASTERY,
-	KN_PIERCE,
-	KN_BRANDISHSPEAR,
-	KN_SPEARSTAB,
-	KN_SPEARBOOMERANG,
-	KN_TWOHANDQUICKEN,
-	KN_AUTOCOUNTER,
-	KN_BOWLINGBASH,
-	KN_RIDING,
-	KN_CAVALIERMASTERY,
-
-	PR_MACEMASTERY,
-	PR_IMPOSITIO,
-	PR_SUFFRAGIUM,
-	PR_ASPERSIO,
-	PR_BENEDICTIO,
-	PR_SANCTUARY,
-	PR_SLOWPOISON,
-	PR_STRECOVERY,
-	PR_KYRIE,
-	PR_MAGNIFICAT,
-	PR_GLORIA,
-	PR_LEXDIVINA,
-	PR_TURNUNDEAD,
-	PR_LEXAETERNA,
-	PR_MAGNUS,
-
-	WZ_FIREPILLAR,
-	WZ_SIGHTRASHER,
-	WZ_FIREIVY,
-	WZ_METEOR,
-	WZ_JUPITEL,
-	WZ_VERMILION,
-	WZ_WATERBALL,
-	WZ_ICEWALL,
-	WZ_FROSTNOVA,
-	WZ_STORMGUST,
-	WZ_EARTHSPIKE,
-	WZ_HEAVENDRIVE,
-	WZ_QUAGMIRE,
-	WZ_ESTIMATION,
-
-	BS_IRON,
-	BS_STEEL,
-	BS_ENCHANTEDSTONE,
-	BS_ORIDEOCON,
-	BS_DAGGER,
-	BS_SWORD,
-	BS_TWOHANDSWORD,
-	BS_AXE,
-	BS_MACE,
-	BS_KNUCKLE,
-	BS_SPEAR,
-	BS_HILTBINDING,
-	BS_FINDINGORE,
-	BS_WEAPONRESEARCH,
-	BS_REPAIRWEAPON,
-	BS_SKINTEMPER,
-	BS_HAMMERFALL,
-	BS_ADRENALINE,
-	BS_WEAPONPERFECT,
-	BS_OVERTHRUST,
-	BS_MAXIMIZE,
-
-	HT_SKIDTRAP,
-	HT_LANDMINE,
-	HT_ANKLESNARE,
-	HT_SHOCKWAVE,
-	HT_SANDMAN,
-	HT_FLASHER,
-	HT_FREEZINGTRAP,
-	HT_BLASTMINE,
-	HT_CLAYMORETRAP,
-	HT_REMOVETRAP,
-	HT_TALKIEBOX,
-	HT_BEASTBANE,
-	HT_FALCON,
-	HT_STEELCROW,
-	HT_BLITZBEAT,
-	HT_DETECTING,
-	HT_SPRINGTRAP,
-
-	AS_RIGHT,
-	AS_LEFT,
-	AS_KATAR,
-	AS_CLOAKING,
-	AS_SONICBLOW,
-	AS_GRIMTOOTH,
-	AS_ENCHANTPOISON,
-	AS_POISONREACT,
-	AS_VENOMDUST,
-	AS_SPLASHER,
-
-	NV_FIRSTAID,
-	NV_TRICKDEAD,
-	SM_MOVINGRECOVERY,
-	SM_FATALBLOW,
-	SM_AUTOBERSERK,
-	AC_MAKINGARROW,
-	AC_CHARGEARROW,
-	TF_SPRINKLESAND,
-	TF_BACKSLIDING,
-	TF_PICKSTONE,
-	TF_THROWSTONE,
-	MC_CARTREVOLUTION,
-	MC_CHANGECART,
-	MC_LOUD,
-	AL_HOLYLIGHT,
-	MG_ENERGYCOAT,
-
-	NPC_PIERCINGATT,
-	NPC_MENTALBREAKER,
-	NPC_RANGEATTACK,
-	NPC_ATTRICHANGE,
-	NPC_CHANGEWATER,
-	NPC_CHANGEGROUND,
-	NPC_CHANGEFIRE,
-	NPC_CHANGEWIND,
-	NPC_CHANGEPOISON,
-	NPC_CHANGEHOLY,
-	NPC_CHANGEDARKNESS,
-	NPC_CHANGETELEKINESIS,
-	NPC_CRITICALSLASH,
-	NPC_COMBOATTACK,
-	NPC_GUIDEDATTACK,
-	NPC_SELFDESTRUCTION,
-	NPC_SPLASHATTACK,
-	NPC_SUICIDE,
-	NPC_POISON,
-	NPC_BLINDATTACK,
-	NPC_SILENCEATTACK,
-	NPC_STUNATTACK,
-	NPC_PETRIFYATTACK,
-	NPC_CURSEATTACK,
-	NPC_SLEEPATTACK,
-	NPC_RANDOMATTACK,
-	NPC_WATERATTACK,
-	NPC_GROUNDATTACK,
-	NPC_FIREATTACK,
-	NPC_WINDATTACK,
-	NPC_POISONATTACK,
-	NPC_HOLYATTACK,
-	NPC_DARKNESSATTACK,
-	NPC_TELEKINESISATTACK,
-	NPC_MAGICALATTACK,
-	NPC_METAMORPHOSIS,
-	NPC_PROVOCATION,
-	NPC_SMOKING,
-	NPC_SUMMONSLAVE,
-	NPC_EMOTION,
-	NPC_TRANSFORMATION,
-	NPC_BLOODDRAIN,
-	NPC_ENERGYDRAIN,
-	NPC_KEEPING,
-	NPC_DARKBREATH,
-	NPC_DARKBLESSING,
-	NPC_BARRIER,
-	NPC_DEFENDER,
-	NPC_LICK,
-	NPC_HALLUCINATION,
-	NPC_REBIRTH,
-	NPC_SUMMONMONSTER,
-
-	RG_SNATCHER,
-	RG_STEALCOIN,
-	RG_BACKSTAP,
-	RG_TUNNELDRIVE,
-	RG_RAID,
-	RG_STRIPWEAPON,
-	RG_STRIPSHIELD,
-	RG_STRIPARMOR,
-	RG_STRIPHELM,
-	RG_INTIMIDATE,
-	RG_GRAFFITI,
-	RG_FLAGGRAFFITI,
-	RG_CLEANER,
-	RG_GANGSTER,
-	RG_COMPULSION,
-	RG_PLAGIARISM,
-
-	AM_AXEMASTERY,
-	AM_LEARNINGPOTION,
-	AM_PHARMACY,
-	AM_DEMONSTRATION,
-	AM_ACIDTERROR,
-	AM_POTIONPITCHER,
-	AM_CANNIBALIZE,
-	AM_SPHEREMINE,
-	AM_CP_WEAPON,
-	AM_CP_SHIELD,
-	AM_CP_ARMOR,
-	AM_CP_HELM,
-	AM_BIOETHICS,
-	AM_BIOTECHNOLOGY,
-	AM_CREATECREATURE,
-	AM_CULTIVATION,
-	AM_FLAMECONTROL,
-	AM_CALLHOMUN,
-	AM_REST,
-	AM_DRILLMASTER,
-	AM_HEALHOMUN,
-	AM_RESURRECTHOMUN,
-
-	CR_TRUST,
-	CR_AUTOGUARD,
-	CR_SHIELDCHARGE,
-	CR_SHIELDBOOMERANG,
-	CR_REFLECTSHIELD,
-	CR_HOLYCROSS,
-	CR_GRANDCROSS,
-	CR_DEVOTION,
-	CR_PROVIDENCE,
-	CR_DEFENDER,
-	CR_SPEARQUICKEN,
-
-	MO_IRONHAND,
-	MO_SPIRITSRECOVERY,
-	MO_CALLSPIRITS,
-	MO_ABSORBSPIRITS,
-	MO_TRIPLEATTACK,
-	MO_BODYRELOCATION,
-	MO_DODGE,
-	MO_INVESTIGATE,
-	MO_FINGEROFFENSIVE,
-	MO_STEELBODY,
-	MO_BLADESTOP,
-	MO_EXPLOSIONSPIRITS,
-	MO_EXTREMITYFIST,
-	MO_CHAINCOMBO,
-	MO_COMBOFINISH,
-
-	SA_ADVANCEDBOOK,
-	SA_CASTCANCEL,
-	SA_MAGICROD,
-	SA_SPELLBREAKER,
-	SA_FREECAST,
-	SA_AUTOSPELL,
-	SA_FLAMELAUNCHER,
-	SA_FROSTWEAPON,
-	SA_LIGHTNINGLOADER,
-	SA_SEISMICWEAPON,
-	SA_DRAGONOLOGY,
-	SA_VOLCANO,
-	SA_DELUGE,
-	SA_VIOLENTGALE,
-	SA_LANDPROTECTOR,
-	SA_DISPELL,
-	SA_ABRACADABRA,
-	SA_MONOCELL,
-	SA_CLASSCHANGE,
-	SA_SUMMONMONSTER,
-	SA_REVERSEORCISH,
-	SA_DEATH,
-	SA_FORTUNE,
-	SA_TAMINGMONSTER,
-	SA_QUESTION,
-	SA_GRAVITY,
-	SA_LEVELUP,
-	SA_INSTANTDEATH,
-	SA_FULLRECOVERY,
-	SA_COMA,
-
-	BD_ADAPTATION,
-	BD_ENCORE,
-	BD_LULLABY,
-	BD_RICHMANKIM,
-	BD_ETERNALCHAOS,
-	BD_DRUMBATTLEFIELD,
-	BD_RINGNIBELUNGEN,
-	BD_ROKISWEIL,
-	BD_INTOABYSS,
-	BD_SIEGFRIED,
-	BD_RAGNAROK,
-
-	BA_MUSICALLESSON,
-	BA_MUSICALSTRIKE,
-	BA_DISSONANCE,
-	BA_FROSTJOKER,
-	BA_WHISTLE,
-	BA_ASSASSINCROSS,
-	BA_POEMBRAGI,
-	BA_APPLEIDUN,
-
-	DC_DANCINGLESSON,
-	DC_THROWARROW,
-	DC_UGLYDANCE,
-	DC_SCREAM,
-	DC_HUMMING,
-	DC_DONTFORGETME,
-	DC_FORTUNEKISS,
-	DC_SERVICEFORYOU,
-
-	NPC_RANDOMMOVE,
-	NPC_SPEEDUP,
-	NPC_REVENGE,
-
-	WE_MALE,
-	WE_FEMALE,
-	WE_CALLPARTNER,
-
-	ITM_TOMAHAWK,
-
-	NPC_DARKCROSS,
-	NPC_GRANDDARKNESS,
-	NPC_DARKSTRIKE,
-	NPC_DARKTHUNDER,
-	NPC_STOP,
-	NPC_WEAPONBRAKER,
-	NPC_ARMORBRAKE,
-	NPC_HELMBRAKE,
-	NPC_SHIELDBRAKE,
-	NPC_UNDEADATTACK,
-	NPC_CHANGEUNDEAD,
-	NPC_POWERUP,
-	NPC_AGIUP,
-	NPC_SIEGEMODE,
-	NPC_CALLSLAVE,
-	NPC_INVISIBLE,
-	NPC_RUN,
-
-	LK_AURABLADE,
-	LK_PARRYING,
-	LK_CONCENTRATION,
-	LK_TENSIONRELAX,
-	LK_BERSERK,
-	LK_FURY,
-	HP_ASSUMPTIO,
-	HP_BASILICA,
-	HP_MEDITATIO,
-	HW_SOULDRAIN,
-	HW_MAGICCRASHER,
-	HW_MAGICPOWER,
-	PA_PRESSURE,
-	PA_SACRIFICE,
-	PA_GOSPEL,
-	CH_PALMSTRIKE,
-	CH_TIGERFIST,
-	CH_CHAINCRUSH,
-	PF_HPCONVERSION,
-	PF_SOULCHANGE,
-	PF_SOULBURN,
-	ASC_KATAR,
-	ASC_HALLUCINATION,
-	ASC_EDP,
-	ASC_BREAKER,
-	SN_SIGHT,
-	SN_FALCONASSAULT,
-	SN_SHARPSHOOTING,
-	SN_WINDWALK,
-	WS_MELTDOWN,
-	WS_CREATECOIN,
-	WS_CREATENUGGET,
-	WS_CARTBOOST,
-	WS_SYSTEMCREATE,
-	ST_CHASEWALK,
-	ST_REJECTSWORD,
-	ST_STEALBACKPACK,
-	CR_ALCHEMY,
-	CR_SYNTHESISPOTION,
-	CG_ARROWVULCAN,
-	CG_MOONLIT,
-	CG_MARIONETTE,
-	LK_SPIRALPIERCE,
-	LK_HEADCRUSH,
-	LK_JOINTBEAT,
-	HW_NAPALMVULCAN,
-	CH_SOULCOLLECT,
-	PF_MINDBREAKER,
-	PF_MEMORIZE,
-	PF_FOGWALL,
-	PF_SPIDERWEB,
-	ASC_METEORASSAULT,
-	ASC_CDP,
-	WE_BABY,
-	WE_CALLPARENT,
-	WE_CALLBABY,
-
-	TK_RUN,
-	TK_READYSTORM,
-	TK_STORMKICK,
-	TK_READYDOWN,
-	TK_DOWNKICK,
-	TK_READYTURN,
-	TK_TURNKICK,
-	TK_READYCOUNTER,
-	TK_COUNTER,
-	TK_DODGE,
-	TK_JUMPKICK,
-	TK_HPTIME,
-	TK_SPTIME,
-	TK_POWER,
-	TK_SEVENWIND,
-	TK_HIGHJUMP,
-
-	SG_FEEL,
-	SG_SUN_WARM,
-	SG_MOON_WARM,
-	SG_STAR_WARM,
-	SG_SUN_COMFORT,
-	SG_MOON_COMFORT,
-	SG_STAR_COMFORT,
-	SG_HATE,
-	SG_SUN_ANGER,
-	SG_MOON_ANGER,
-	SG_STAR_ANGER,
-	SG_SUN_BLESS,
-	SG_MOON_BLESS,
-	SG_STAR_BLESS,
-	SG_DEVIL,
-	SG_FRIEND,
-	SG_KNOWLEDGE,
-	SG_FUSION,
-
-	SL_ALCHEMIST,
-	AM_BERSERKPITCHER,
-	SL_MONK,
-	SL_STAR,
-	SL_SAGE,
-	SL_CRUSADER,
-	SL_SUPERNOVICE,
-	SL_KNIGHT,
-	SL_WIZARD,
-	SL_PRIEST,
-	SL_BARDDANCER,
-	SL_ROGUE,
-	SL_ASSASIN,
-	SL_BLACKSMITH,
-	BS_ADRENALINE2,
-	SL_HUNTER,
-	SL_SOULLINKER,
-	SL_KAIZEL,
-	SL_KAAHI,
-	SL_KAUPE,
-	SL_KAITE,
-	SL_KAINA,
-	SL_STIN,
-	SL_STUN,
-	SL_SMA,
-	SL_SWOO,
-	SL_SKE,
-	SL_SKA,
-
-	SM_SELFPROVOKE,
-	NPC_EMOTION_ON,
-	ST_PRESERVE,
-	ST_FULLSTRIP,
-	WS_WEAPONREFINE,
-	CR_SLIMPITCHER,
-	CR_FULLPROTECTION,
-	PA_SHIELDCHAIN,
-	HP_MANARECHARGE,
-	PF_DOUBLECASTING,
-	HW_GANBANTEIN,
-	HW_GRAVITATION,
-	WS_CARTTERMINATION,
-	WS_OVERTHRUSTMAX,
-	CG_LONGINGFREEDOM,
-	CG_HERMODE,
-	CG_TAROTCARD,
-	CR_ACIDDEMONSTRATION,
-	CR_CULTIVATION, // Removed on kRO (renewal)
-	ITEM_ENCHANTARMS,
-	TK_MISSION,
-	SL_HIGH,
-	KN_ONEHAND,
-	AM_TWILIGHT1,
-	AM_TWILIGHT2,
-	AM_TWILIGHT3,
-	HT_POWER,
-
-	GS_GLITTERING,
-	GS_FLING,
-	GS_TRIPLEACTION,
-	GS_BULLSEYE,
-	GS_MADNESSCANCEL,
-	GS_ADJUSTMENT,
-	GS_INCREASING,
-	GS_MAGICALBULLET,
-	GS_CRACKER,
-	GS_SINGLEACTION,
-	GS_SNAKEEYE,
-	GS_CHAINACTION,
-	GS_TRACKING,
-	GS_DISARM,
-	GS_PIERCINGSHOT,
-	GS_RAPIDSHOWER,
-	GS_DESPERADO,
-	GS_GATLINGFEVER,
-	GS_DUST,
-	GS_FULLBUSTER,
-	GS_SPREADATTACK,
-	GS_GROUNDDRIFT,
-
-	NJ_TOBIDOUGU,
-	NJ_SYURIKEN,
-	NJ_KUNAI,
-	NJ_HUUMA,
-	NJ_ZENYNAGE,
-	NJ_TATAMIGAESHI,
-	NJ_KASUMIKIRI,
-	NJ_SHADOWJUMP,
-	NJ_KIRIKAGE,
-	NJ_UTSUSEMI,
-	NJ_BUNSINJYUTSU,
-	NJ_NINPOU,
-	NJ_KOUENKA,
-	NJ_KAENSIN,
-	NJ_BAKUENRYU,
-	NJ_HYOUSENSOU,
-	NJ_SUITON,
-	NJ_HYOUSYOURAKU,
-	NJ_HUUJIN,
-	NJ_RAIGEKISAI,
-	NJ_KAMAITACHI,
-	NJ_NEN,
-	NJ_ISSEN,
-
-	MB_FIGHTING,
-	MB_NEUTRAL,
-	MB_TAIMING_PUTI,
-	MB_WHITEPOTION,
-	MB_MENTAL,
-	MB_CARDPITCHER,
-	MB_PETPITCHER,
-	MB_BODYSTUDY,
-	MB_BODYALTER,
-	MB_PETMEMORY,
-	MB_M_TELEPORT,
-	MB_B_GAIN,
-	MB_M_GAIN,
-	MB_MISSION,
-	MB_MUNAKKNOWLEDGE,
-	MB_MUNAKBALL,
-	MB_SCROLL,
-	MB_B_GATHERING,
-	MB_M_GATHERING,
-	MB_B_EXCLUDE,
-	MB_B_DRIFT,
-	MB_B_WALLRUSH,
-	MB_M_WALLRUSH,
-	MB_B_WALLSHIFT,
-	MB_M_WALLCRASH,
-	MB_M_REINCARNATION,
-	MB_B_EQUIP,
-
-	SL_DEATHKNIGHT,
-	SL_COLLECTOR,
-	SL_NINJA,
-	SL_GUNNER,
-	AM_TWILIGHT4,
-	DA_RESET,
-	DE_BERSERKAIZER,
-	DA_DARKPOWER,
-
-	DE_PASSIVE,
-	DE_PATTACK,
-	DE_PSPEED,
-	DE_PDEFENSE,
-	DE_PCRITICAL,
-	DE_PHP,
-	DE_PSP,
-	DE_RESET,
-	DE_RANKING,
-	DE_PTRIPLE,
-	DE_ENERGY,
-	DE_NIGHTMARE,
-	DE_SLASH,
-	DE_COIL,
-	DE_WAVE,
-	DE_REBIRTH,
-	DE_AURA,
-	DE_FREEZER,
-	DE_CHANGEATTACK,
-	DE_PUNISH,
-	DE_POISON,
-	DE_INSTANT,
-	DE_WARNING,
-	DE_RANKEDKNIFE,
-	DE_RANKEDGRADIUS,
-	DE_GAUGE,
-	DE_GTIME,
-	DE_GPAIN,
-	DE_GSKILL,
-	DE_GKILL,
-	DE_ACCEL,
-	DE_BLOCKDOUBLE,
-	DE_BLOCKMELEE,
-	DE_BLOCKFAR,
-	DE_FRONTATTACK,
-	DE_DANGERATTACK,
-	DE_TWINATTACK,
-	DE_WINDATTACK,
-	DE_WATERATTACK,
-
-	DA_ENERGY,
-	DA_CLOUD,
-	DA_FIRSTSLOT,
-	DA_HEADDEF,
-	DA_SPACE,
-	DA_TRANSFORM,
-	DA_EXPLOSION,
-	DA_REWARD,
-	DA_CRUSH,
-	DA_ITEMREBUILD,
-	DA_ILLUSION,
-	DA_NUETRALIZE,
-	DA_RUNNER,
-	DA_TRANSFER,
-	DA_WALL,
-	DA_ZENY,
-	DA_REVENGE,
-	DA_EARPLUG,
-	DA_CONTRACT,
-	DA_BLACK,
-	DA_DREAM,
-	DA_MAGICCART,
-	DA_COPY,
-	DA_CRYSTAL,
-	DA_EXP,
-	DA_CARTSWING,
-	DA_REBUILD,
-	DA_JOBCHANGE,
-	DA_EDARKNESS,
-	DA_EGUARDIAN,
-	DA_TIMEOUT,
-	ALL_TIMEIN,
-	DA_ZENYRANK,
-	DA_ACCESSORYMIX,
-
-	NPC_EARTHQUAKE,
-	NPC_FIREBREATH,
-	NPC_ICEBREATH,
-	NPC_THUNDERBREATH,
-	NPC_ACIDBREATH,
-	NPC_DARKNESSBREATH,
-	NPC_DRAGONFEAR,
-	NPC_BLEEDING,
-	NPC_PULSESTRIKE,
-	NPC_HELLJUDGEMENT,
-	NPC_WIDESILENCE,
-	NPC_WIDEFREEZE,
-	NPC_WIDEBLEEDING,
-	NPC_WIDESTONE,
-	NPC_WIDECONFUSE,
-	NPC_WIDESLEEP,
-	NPC_WIDESIGHT,
-	NPC_EVILLAND,
-	NPC_MAGICMIRROR,
-	NPC_SLOWCAST,
-	NPC_CRITICALWOUND,
-	NPC_EXPULSION,
-	NPC_STONESKIN,
-	NPC_ANTIMAGIC,
-	NPC_WIDECURSE,
-	NPC_WIDESTUN,
-	NPC_VAMPIRE_GIFT,
-	NPC_WIDESOULDRAIN,
-
-	ALL_INCCARRY,
-	NPC_TALK,
-	NPC_HELLPOWER,
-	NPC_WIDEHELLDIGNITY,
-	NPC_INVINCIBLE,
-	NPC_INVINCIBLEOFF,
-	NPC_ALLHEAL,
-	GM_SANDMAN,
-	CASH_BLESSING,
-	CASH_INCAGI,
-	CASH_ASSUMPTIO,
-	ALL_CATCRY,
-	ALL_PARTYFLEE,
-	ALL_ANGEL_PROTECT,
-	ALL_DREAM_SUMMERNIGHT,
-	NPC_CHANGEUNDEAD2,
-	ALL_REVERSEORCISH,
-	ALL_WEWISH,
-	ALL_SONKRAN,
-	NPC_WIDEHEALTHFEAR,
-	NPC_WIDEBODYBURNNING,
-	NPC_WIDEFROSTMISTY,
-	NPC_WIDECOLD,
-	NPC_WIDE_DEEP_SLEEP,
-	NPC_WIDESIREN,
-	NPC_VENOMFOG,
-	NPC_MILLENNIUMSHIELD,
-	NPC_COMET,
-	NPC_ICEMINE,
-	NPC_ICEEXPLO,
-	NPC_FLAMECROSS,
-	NPC_PULSESTRIKE2,
-	NPC_DANCINGBLADE,
-	NPC_DANCINGBLADE_ATK,
-	NPC_DARKPIERCING,
-	NPC_MAXPAIN,
-	NPC_MAXPAIN_ATK,
-	NPC_DEATHSUMMON,
-	NPC_HELLBURNING,
-	NPC_JACKFROST,
-	NPC_WIDEWEB,
-	NPC_WIDESUCK,
-	NPC_STORMGUST2,
-	NPC_FIRESTORM,
-	NPC_REVERBERATION,
-	NPC_REVERBERATION_ATK,
-	NPC_LEX_AETERNA,
-	NPC_ARROWSTORM,
-	NPC_CHEAL,
-	NPC_SR_CURSEDCIRCLE,
-	NPC_DRAGONBREATH,
-	NPC_FATALMENACE,
-	NPC_MAGMA_ERUPTION,
-	NPC_MAGMA_ERUPTION_DOTDAMAGE,
-	NPC_MANDRAGORA,
-	NPC_PSYCHIC_WAVE,
-	NPC_RAYOFGENESIS,
-	NPC_VENOMIMPRESS,
-	NPC_CLOUD_KILL,
-	NPC_IGNITIONBREAK,
-	NPC_PHANTOMTHRUST,
-	NPC_POISON_BUSTER,
-	NPC_HALLUCINATIONWALK,
-	NPC_ELECTRICWALK,
-	NPC_FIREWALK,
-	NPC_WIDEDISPEL,
-	NPC_LEASH,
-	NPC_WIDELEASH,
-	NPC_WIDECRITICALWOUND,
-	NPC_EARTHQUAKE_K,
-	NPC_ALL_STAT_DOWN,
-	NPC_GRADUAL_GRAVITY,
-	NPC_DAMAGE_HEAL,
-	NPC_IMMUNE_PROPERTY,
-	NPC_MOVE_COORDINATE,
-	NPC_WIDEBLEEDING2,
-	NPC_WIDESILENCE2,
-	NPC_WIDESTUN2,
-	NPC_WIDESTONE2,
-	NPC_WIDESLEEP2,
-	NPC_WIDECURSE2,
-	NPC_WIDECONFUSE2,
-	NPC_WIDEFREEZE2,
-	NPC_BLEEDING2,
-	NPC_ICEBREATH2,
-	NPC_ACIDBREATH2,
-	NPC_EVILLAND2,
-	NPC_HELLJUDGEMENT2,
-	NPC_RAINOFMETEOR,
-	NPC_GROUNDDRIVE,
-	NPC_RELIEVE_ON,
-	NPC_RELIEVE_OFF,
-	NPC_LOCKON_LASER,
-	NPC_LOCKON_LASER_ATK,
-	NPC_SEEDTRAP,
-	NPC_DEADLYCURSE,
-	NPC_RANDOMBREAK,
-	NPC_STRIP_SHADOW,
-	NPC_DEADLYCURSE2,
-	NPC_CANE_OF_EVIL_EYE,
-	NPC_CURSE_OF_RED_CUBE,
-	NPC_CURSE_OF_BLUE_CUBE,
-	NPC_KILLING_AURA,	// 783
-
-	KN_CHARGEATK = 1001,
-	CR_SHRINK,
-	AS_SONICACCEL,
-	AS_VENOMKNIFE,
-	RG_CLOSECONFINE,
-	WZ_SIGHTBLASTER,
-	SA_CREATECON,
-	SA_ELEMENTWATER,
-	HT_PHANTASMIC,
-	BA_PANGVOICE,
-	DC_WINKCHARM,
-	BS_UNFAIRLYTRICK,
-	BS_GREED,
-	PR_REDEMPTIO,
-	MO_KITRANSLATION,
-	MO_BALKYOUNG,
-	SA_ELEMENTGROUND,
-	SA_ELEMENTFIRE,
-	SA_ELEMENTWIND,
-
-	RK_ENCHANTBLADE = 2001,
-	RK_SONICWAVE,
-	RK_DEATHBOUND,
-	RK_HUNDREDSPEAR,
-	RK_WINDCUTTER,
-	RK_IGNITIONBREAK,
-	RK_DRAGONTRAINING,
-	RK_DRAGONBREATH,
-	RK_DRAGONHOWLING,
-	RK_RUNEMASTERY,
-	RK_MILLENNIUMSHIELD,
-	RK_CRUSHSTRIKE,
-	RK_REFRESH,
-	RK_GIANTGROWTH,
-	RK_STONEHARDSKIN,
-	RK_VITALITYACTIVATION,
-	RK_STORMBLAST,
-	RK_FIGHTINGSPIRIT,
-	RK_ABUNDANCE,
-	RK_PHANTOMTHRUST,
-
-	GC_VENOMIMPRESS,
-	GC_CROSSIMPACT,
-	GC_DARKILLUSION,
-	GC_RESEARCHNEWPOISON,
-	GC_CREATENEWPOISON,
-	GC_ANTIDOTE,
-	GC_POISONINGWEAPON,
-	GC_WEAPONBLOCKING,
-	GC_COUNTERSLASH,
-	GC_WEAPONCRUSH,
-	GC_VENOMPRESSURE,
-	GC_POISONSMOKE,
-	GC_CLOAKINGEXCEED,
-	GC_PHANTOMMENACE,
-	GC_HALLUCINATIONWALK,
-	GC_ROLLINGCUTTER,
-	GC_CROSSRIPPERSLASHER,
-
-	AB_JUDEX,
-	AB_ANCILLA,
-	AB_ADORAMUS,
-	AB_CLEMENTIA,
-	AB_CANTO,
-	AB_CHEAL,
-	AB_EPICLESIS,
-	AB_PRAEFATIO,
-	AB_ORATIO,
-	AB_LAUDAAGNUS,
-	AB_LAUDARAMUS,
-	AB_EUCHARISTICA, // Removed on kRO
-	AB_RENOVATIO,
-	AB_HIGHNESSHEAL,
-	AB_CLEARANCE,
-	AB_EXPIATIO,
-	AB_DUPLELIGHT,
-	AB_DUPLELIGHT_MELEE,
-	AB_DUPLELIGHT_MAGIC,
-	AB_SILENTIUM,
-
-	WL_WHITEIMPRISON = 2201,
-	WL_SOULEXPANSION,
-	WL_FROSTMISTY,
-	WL_JACKFROST,
-	WL_MARSHOFABYSS,
-	WL_RECOGNIZEDSPELL,
-	WL_SIENNAEXECRATE,
-	WL_RADIUS,
-	WL_STASIS,
-	WL_DRAINLIFE,
-	WL_CRIMSONROCK,
-	WL_HELLINFERNO,
-	WL_COMET,
-	WL_CHAINLIGHTNING,
-	WL_CHAINLIGHTNING_ATK,
-	WL_EARTHSTRAIN,
-	WL_TETRAVORTEX,
-	WL_TETRAVORTEX_FIRE,
-	WL_TETRAVORTEX_WATER,
-	WL_TETRAVORTEX_WIND,
-	WL_TETRAVORTEX_GROUND,
-	WL_SUMMONFB,
-	WL_SUMMONBL,
-	WL_SUMMONWB,
-	WL_SUMMON_ATK_FIRE,
-	WL_SUMMON_ATK_WIND,
-	WL_SUMMON_ATK_WATER,
-	WL_SUMMON_ATK_GROUND,
-	WL_SUMMONSTONE,
-	WL_RELEASE,
-	WL_READING_SB,
-	WL_FREEZE_SP,
-
-	RA_ARROWSTORM,
-	RA_FEARBREEZE,
-	RA_RANGERMAIN,
-	RA_AIMEDBOLT,
-	RA_DETONATOR,
-	RA_ELECTRICSHOCKER,
-	RA_CLUSTERBOMB,
-	RA_WUGMASTERY,
-	RA_WUGRIDER,
-	RA_WUGDASH,
-	RA_WUGSTRIKE,
-	RA_WUGBITE,
-	RA_TOOTHOFWUG,
-	RA_SENSITIVEKEEN,
-	RA_CAMOUFLAGE,
-	RA_RESEARCHTRAP,
-	RA_MAGENTATRAP,
-	RA_COBALTTRAP,
-	RA_MAIZETRAP,
-	RA_VERDURETRAP,
-	RA_FIRINGTRAP,
-	RA_ICEBOUNDTRAP,
-
-	NC_MADOLICENCE,
-	NC_BOOSTKNUCKLE,
-	NC_PILEBUNKER,
-	NC_VULCANARM,
-	NC_FLAMELAUNCHER,
-	NC_COLDSLOWER,
-	NC_ARMSCANNON,
-	NC_ACCELERATION,
-	NC_HOVERING,
-	NC_F_SIDESLIDE,
-	NC_B_SIDESLIDE,
-	NC_MAINFRAME,
-	NC_SELFDESTRUCTION,
-	NC_SHAPESHIFT,
-	NC_EMERGENCYCOOL,
-	NC_INFRAREDSCAN,
-	NC_ANALYZE,
-	NC_MAGNETICFIELD,
-	NC_NEUTRALBARRIER,
-	NC_STEALTHFIELD,
-	NC_REPAIR,
-	NC_TRAININGAXE,
-	NC_RESEARCHFE,
-	NC_AXEBOOMERANG,
-	NC_POWERSWING,
-	NC_AXETORNADO,
-	NC_SILVERSNIPER,
-	NC_MAGICDECOY,
-	NC_DISJOINT,
-
-	SC_FATALMENACE,
-	SC_REPRODUCE,
-	SC_AUTOSHADOWSPELL,
-	SC_SHADOWFORM,
-	SC_TRIANGLESHOT,
-	SC_BODYPAINT,
-	SC_INVISIBILITY,
-	SC_DEADLYINFECT,
-	SC_ENERVATION,
-	SC_GROOMY,
-	SC_IGNORANCE,
-	SC_LAZINESS,
-	SC_UNLUCKY,
-	SC_WEAKNESS,
-	SC_STRIPACCESSARY,
-	SC_MANHOLE,
-	SC_DIMENSIONDOOR,
-	SC_CHAOSPANIC,
-	SC_MAELSTROM,
-	SC_BLOODYLUST,
-	SC_FEINTBOMB,
-
-	LG_CANNONSPEAR = 2307,
-	LG_BANISHINGPOINT,
-	LG_TRAMPLE,
-	LG_SHIELDPRESS,
-	LG_REFLECTDAMAGE,
-	LG_PINPOINTATTACK,
-	LG_FORCEOFVANGUARD,
-	LG_RAGEBURST,
-	LG_SHIELDSPELL,
-	LG_EXEEDBREAK,
-	LG_OVERBRAND,
-	LG_PRESTIGE,
-	LG_BANDING,
-	LG_MOONSLASHER,
-	LG_RAYOFGENESIS,
-	LG_PIETY,
-	LG_EARTHDRIVE,
-	LG_HESPERUSLIT,
-	LG_INSPIRATION,
-
-	SR_DRAGONCOMBO,
-	SR_SKYNETBLOW,
-	SR_EARTHSHAKER,
-	SR_FALLENEMPIRE,
-	SR_TIGERCANNON,
-	SR_HELLGATE,
-	SR_RAMPAGEBLASTER,
-	SR_CRESCENTELBOW,
-	SR_CURSEDCIRCLE,
-	SR_LIGHTNINGWALK,
-	SR_KNUCKLEARROW,
-	SR_WINDMILL,
-	SR_RAISINGDRAGON,
-	SR_GENTLETOUCH,
-	SR_ASSIMILATEPOWER,
-	SR_POWERVELOCITY,
-	SR_CRESCENTELBOW_AUTOSPELL,
-	SR_GATEOFHELL,
-	SR_GENTLETOUCH_QUIET,
-	SR_GENTLETOUCH_CURE,
-	SR_GENTLETOUCH_ENERGYGAIN,
-	SR_GENTLETOUCH_CHANGE,
-	SR_GENTLETOUCH_REVITALIZE,
-
-	WA_SWING_DANCE = 2350,
-	WA_SYMPHONY_OF_LOVER,
-	WA_MOONLIT_SERENADE,
-
-	MI_RUSH_WINDMILL = 2381,
-	MI_ECHOSONG,
-	MI_HARMONIZE,
-
-	WM_LESSON = 2412,
-	WM_METALICSOUND,
-	WM_REVERBERATION,
-	WM_REVERBERATION_MELEE, // Removed on kRO
-	WM_REVERBERATION_MAGIC, // Removed on kRO
-	WM_DOMINION_IMPULSE, // Removed on kRO
-	WM_SEVERE_RAINSTORM,
-	WM_POEMOFNETHERWORLD,
-	WM_VOICEOFSIREN,
-	WM_DEADHILLHERE,
-	WM_LULLABY_DEEPSLEEP,
-	WM_SIRCLEOFNATURE,
-	WM_RANDOMIZESPELL,
-	WM_GLOOMYDAY,
-	WM_GREAT_ECHO,
-	WM_SONG_OF_MANA,
-	WM_DANCE_WITH_WUG,
-	WM_SOUND_OF_DESTRUCTION,
-	WM_SATURDAY_NIGHT_FEVER,
-	WM_LERADS_DEW,
-	WM_MELODYOFSINK,
-	WM_BEYOND_OF_WARCRY,
-	WM_UNLIMITED_HUMMING_VOICE,
-
-	SO_FIREWALK = 2443,
-	SO_ELECTRICWALK,
-	SO_SPELLFIST,
-	SO_EARTHGRAVE,
-	SO_DIAMONDDUST,
-	SO_POISON_BUSTER,
-	SO_PSYCHIC_WAVE,
-	SO_CLOUD_KILL,
-	SO_STRIKING,
-	SO_WARMER,
-	SO_VACUUM_EXTREME,
-	SO_VARETYR_SPEAR,
-	SO_ARRULLO,
-	SO_EL_CONTROL,
-	SO_SUMMON_AGNI,
-	SO_SUMMON_AQUA,
-	SO_SUMMON_VENTUS,
-	SO_SUMMON_TERA,
-	SO_EL_ACTION,
-	SO_EL_ANALYSIS,
-	SO_EL_SYMPATHY,
-	SO_EL_CURE,
-	SO_FIRE_INSIGNIA,
-	SO_WATER_INSIGNIA,
-	SO_WIND_INSIGNIA,
-	SO_EARTH_INSIGNIA,
-
-	GN_TRAINING_SWORD = 2474,
-	GN_REMODELING_CART,
-	GN_CART_TORNADO,
-	GN_CARTCANNON,
-	GN_CARTBOOST,
-	GN_THORNS_TRAP,
-	GN_BLOOD_SUCKER,
-	GN_SPORE_EXPLOSION,
-	GN_WALLOFTHORN,
-	GN_CRAZYWEED,
-	GN_CRAZYWEED_ATK,
-	GN_DEMONIC_FIRE,
-	GN_FIRE_EXPANSION,
-	GN_FIRE_EXPANSION_SMOKE_POWDER,
-	GN_FIRE_EXPANSION_TEAR_GAS,
-	GN_FIRE_EXPANSION_ACID,
-	GN_HELLS_PLANT,
-	GN_HELLS_PLANT_ATK,
-	GN_MANDRAGORA,
-	GN_SLINGITEM, // Removed on kRO
-	GN_CHANGEMATERIAL,
-	GN_MIX_COOKING,
-	GN_MAKEBOMB, // Removed on kRO
-	GN_S_PHARMACY,
-	GN_SLINGITEM_RANGEMELEEATK, // Removed on kRO
-
-	AB_SECRAMENT = 2515,
-	WM_SEVERE_RAINSTORM_MELEE,
-	SR_HOWLINGOFLION,
-	SR_RIDEINLIGHTNING,
-	LG_OVERBRAND_BRANDISH,
-	LG_OVERBRAND_PLUSATK,
-
-	ALL_ODINS_RECALL = 2533,
-	RETURN_TO_ELDICASTES,
-	ALL_BUYING_STORE,
-	ALL_GUARDIAN_RECALL,
-	ALL_ODINS_POWER,
-	ALL_BEER_BOTTLE_CAP,
-	NPC_ASSASSINCROSS,
-	NPC_DISSONANCE,
-	NPC_UGLYDANCE,
-	ALL_TETANY,
-	ALL_RAY_OF_PROTECTION,
-	MC_CARTDECORATE,
-	GM_ITEM_ATKMAX,
-	GM_ITEM_ATKMIN,
-	GM_ITEM_MATKMAX,
-	GM_ITEM_MATKMIN,
-
-	RL_GLITTERING_GREED = 2551,
-	RL_RICHS_COIN,
-	RL_MASS_SPIRAL,
-	RL_BANISHING_BUSTER,
-	RL_B_TRAP,
-	RL_FLICKER,
-	RL_S_STORM,
-	RL_E_CHAIN,
-	RL_QD_SHOT,
-	RL_C_MARKER,
-	RL_FIREDANCE,
-	RL_H_MINE,
-	RL_P_ALTER,
-	RL_FALLEN_ANGEL,
-	RL_R_TRIP,
-	RL_D_TAIL,
-	RL_FIRE_RAIN,
-	RL_HEAT_BARREL,
-	RL_AM_BLAST,
-	RL_SLUGSHOT,
-	RL_HAMMER_OF_GOD,
-	RL_R_TRIP_PLUSATK,
-	RL_B_FLICKER_ATK,
-//	RL_GLITTERING_GREED_ATK,
-	SJ_LIGHTOFMOON,
-	SJ_LUNARSTANCE,
-	SJ_FULLMOONKICK,
-	SJ_LIGHTOFSTAR,
-	SJ_STARSTANCE,
-	SJ_NEWMOONKICK,
-	SJ_FLASHKICK,
-	SJ_STAREMPEROR,
-	SJ_NOVAEXPLOSING,
-	SJ_UNIVERSESTANCE,
-	SJ_FALLINGSTAR,
-	SJ_GRAVITYCONTROL,
-	SJ_BOOKOFDIMENSION,
-	SJ_BOOKOFCREATINGSTAR,
-	SJ_DOCUMENT,
-	SJ_PURIFY,
-	SJ_LIGHTOFSUN,
-	SJ_SUNSTANCE,
-	SJ_SOLARBURST,
-	SJ_PROMINENCEKICK,
-	SJ_FALLINGSTAR_ATK,
-	SJ_FALLINGSTAR_ATK2,
-	SP_SOULGOLEM,
-	SP_SOULSHADOW,
-	SP_SOULFALCON,
-	SP_SOULFAIRY,
-	SP_CURSEEXPLOSION,
-	SP_SOULCURSE,
-	SP_SPA,
-	SP_SHA,
-	SP_SWHOO,
-	SP_SOULUNITY,
-	SP_SOULDIVISION,
-	SP_SOULREAPER,
-	SP_SOULREVOLVE,
-	SP_SOULCOLLECT,
-	SP_SOULEXPLOSION,
-	SP_SOULENERGY,
-	SP_KAUTE,
-
-	KO_YAMIKUMO = 3001,
-	KO_RIGHT,
-	KO_LEFT,
-	KO_JYUMONJIKIRI,
-	KO_SETSUDAN,
-	KO_BAKURETSU,
-	KO_HAPPOKUNAI,
-	KO_MUCHANAGE,
-	KO_HUUMARANKA,
-	KO_MAKIBISHI,
-	KO_MEIKYOUSISUI,
-	KO_ZANZOU,
-	KO_KYOUGAKU,
-	KO_JYUSATSU,
-	KO_KAHU_ENTEN,
-	KO_HYOUHU_HUBUKI,
-	KO_KAZEHU_SEIRAN,
-	KO_DOHU_KOUKAI,
-	KO_KAIHOU,
-	KO_ZENKAI,
-	KO_GENWAKU,
-	KO_IZAYOI,
-	KG_KAGEHUMI,
-	KG_KYOMU,
-	KG_KAGEMUSYA,
-	OB_ZANGETSU,
-	OB_OBOROGENSOU,
-	OB_OBOROGENSOU_TRANSITION_ATK,
-	OB_AKAITSUKI,
-
-	ECL_SNOWFLIP = 3031,
-	ECL_PEONYMAMY,
-	ECL_SADAGUI,
-	ECL_SEQUOIADUST,
-	ECLAGE_RECALL,
-
-	ALL_PRONTERA_RECALL = 3042,
-
-	GC_DARKCROW = 5001,
-	RA_UNLIMIT,
-	GN_ILLUSIONDOPING,
-	RK_DRAGONBREATH_WATER,
-	RK_LUXANIMA,
-	NC_MAGMA_ERUPTION,
-	WM_FRIGG_SONG,
-	SO_ELEMENTAL_SHIELD,
-	SR_FLASHCOMBO,
-	SC_ESCAPE,
-	AB_OFFERTORIUM,
-	WL_TELEKINESIS_INTENSE,
-	LG_KINGS_GRACE,
-	ALL_FULL_THROTTLE,
-	NC_MAGMA_ERUPTION_DOTDAMAGE,
-
-	SU_BASIC_SKILL = 5018,
-	SU_BITE,
-	SU_HIDE,
-	SU_SCRATCH,
-	SU_STOOP,
-	SU_LOPE,
-	SU_SPRITEMABLE,
-	SU_POWEROFLAND,
-	SU_SV_STEMSPEAR,
-	SU_CN_POWDERING,
-	SU_CN_METEOR,
-	SU_SV_ROOTTWIST,
-	SU_SV_ROOTTWIST_ATK,
-	SU_POWEROFLIFE,
-	SU_SCAROFTAROU,
-	SU_PICKYPECK,
-	SU_PICKYPECK_DOUBLE_ATK,
-	SU_ARCLOUSEDASH,
-	SU_LUNATICCARROTBEAT,
-	SU_POWEROFSEA,
-	SU_TUNABELLY,
-	SU_TUNAPARTY,
-	SU_BUNCHOFSHRIMP,
-	SU_FRESHSHRIMP,
-	SU_CN_METEOR2,
-	SU_LUNATICCARROTBEAT2,
-	SU_SOULATTACK,
-	SU_POWEROFFLOCK,
-	SU_SVG_SPIRIT,
-	SU_HISS,
-	SU_NYANGGRASS,
-	SU_GROOMING,
-	SU_PURRING,
-	SU_SHRIMPARTY,
-	SU_SPIRITOFLIFE,
-	SU_MEOWMEOW,
-	SU_SPIRITOFLAND,
-	SU_CHATTERING,
-	SU_SPIRITOFSEA,
-
-	WE_CALLALLFAMILY = 5063,
-	WE_ONEFOREVER,
-	WE_CHEERUP,
-
-	ALL_EQSWITCH = 5067,
-
-	CG_SPECIALSINGER,
-
-	AB_VITUPERATUM = 5072,
-	AB_CONVENIO,
-	ALL_LIGHTNING_STORM,
-	NV_BREAKTHROUGH,
-	NV_HELPANGEL,
-	NV_TRANSCENDENCE,
-	WL_READING_SB_READING,
-
-	DK_SERVANTWEAPON = 5201,
-	DK_SERVANTWEAPON_ATK,
-	DK_SERVANT_W_SIGN,
-	DK_SERVANT_W_PHANTOM,
-	DK_SERVANT_W_DEMOL,
-	DK_CHARGINGPIERCE,
-	DK_TWOHANDDEF,
-	DK_HACKANDSLASHER,
-	DK_HACKANDSLASHER_ATK,
-	DK_DRAGONIC_AURA,
-	DK_MADNESS_CRUSHER,
-	DK_VIGOR,
-	DK_STORMSLASH,
-
-	AG_DEADLY_PROJECTION,
-	AG_DESTRUCTIVE_HURRICANE,
-	AG_RAIN_OF_CRYSTAL,
-	AG_MYSTERY_ILLUSION,
-	AG_VIOLENT_QUAKE,
-	AG_VIOLENT_QUAKE_ATK,
-	AG_SOUL_VC_STRIKE,
-	AG_STRANTUM_TREMOR,
-	AG_ALL_BLOOM,
-	AG_ALL_BLOOM_ATK,
-	AG_ALL_BLOOM_ATK2,
-	AG_CRYSTAL_IMPACT,
-	AG_CRYSTAL_IMPACT_ATK,
-	AG_TORNADO_STORM,
-	AG_TWOHANDSTAFF,
-	AG_FLORAL_FLARE_ROAD,
-	AG_ASTRAL_STRIKE,
-	AG_ASTRAL_STRIKE_ATK,
-	AG_CLIMAX,
-	AG_ROCK_DOWN,
-	AG_STORM_CANNON,
-	AG_CRIMSON_ARROW,
-	AG_CRIMSON_ARROW_ATK,
-	AG_FROZEN_SLASH,
-
-	IQ_POWERFUL_FAITH,
-	IQ_FIRM_FAITH,
-	IQ_WILL_OF_FAITH,
-	IQ_OLEUM_SANCTUM,
-	IQ_SINCERE_FAITH,
-	IQ_MASSIVE_F_BLASTER,
-	IQ_EXPOSION_BLASTER,
-	IQ_FIRST_BRAND,
-	IQ_FIRST_FAITH_POWER,
-	IQ_JUDGE,
-	IQ_SECOND_FLAME,
-	IQ_SECOND_FAITH,
-	IQ_SECOND_JUDGEMENT,
-	IQ_THIRD_PUNISH,
-	IQ_THIRD_FLAME_BOMB,
-	IQ_THIRD_CONSECRATION,
-	IQ_THIRD_EXOR_FLAME,
-
-	IG_GUARD_STANCE,
-	IG_GUARDIAN_SHIELD,
-	IG_REBOUND_SHIELD,
-	IG_SHIELD_MASTERY,
-	IG_SPEAR_SWORD_M,
-	IG_ATTACK_STANCE,
-	IG_ULTIMATE_SACRIFICE,
-	IG_HOLY_SHIELD,
-	IG_GRAND_JUDGEMENT,
-	IG_JUDGEMENT_CROSS,
-	IG_SHIELD_SHOOTING,
-	IG_OVERSLASH,
-	IG_CROSS_RAIN,
-
-	CD_REPARATIO,
-	CD_MEDIALE_VOTUM,
-	CD_MACE_BOOK_M,
-	CD_ARGUTUS_VITA,
-	CD_ARGUTUS_TELUM,
-	CD_ARBITRIUM,
-	CD_ARBITRIUM_ATK,
-	CD_PRESENS_ACIES,
-	CD_FIDUS_ANIMUS,
-	CD_EFFLIGO,
-	CD_COMPETENTIA,
-	CD_PNEUMATICUS_PROCELLA,
-	CD_DILECTIO_HEAL,
-	CD_RELIGIO,
-	CD_BENEDICTUM,
-	CD_PETITIO,
-	CD_FRAMEN,
-
-	SHC_SHADOW_EXCEED,
-	SHC_DANCING_KNIFE,
-	SHC_SAVAGE_IMPACT,
-	SHC_SHADOW_SENSE,
-	SHC_ETERNAL_SLASH,
-	SHC_POTENT_VENOM,
-	SHC_SHADOW_STAB,
-	SHC_IMPACT_CRATER,
-	SHC_ENCHANTING_SHADOW,
-	SHC_FATAL_SHADOW_CROW,
-
-	MT_AXE_STOMP,
-	MT_RUSH_QUAKE,
-	MT_M_MACHINE,
-	MT_A_MACHINE,
-	MT_D_MACHINE,
-	MT_TWOAXEDEF,
-	MT_ABR_M,
-	MT_SUMMON_ABR_BATTLE_WARIOR,
-	MT_SUMMON_ABR_DUAL_CANNON,
-	MT_SUMMON_ABR_MOTHER_NET,
-	MT_SUMMON_ABR_INFINITY,
-
-	AG_DESTRUCTIVE_HURRICANE_CLIMAX,
-	BO_ACIDIFIED_ZONE_WATER_ATK,
-	BO_ACIDIFIED_ZONE_GROUND_ATK,
-	BO_ACIDIFIED_ZONE_WIND_ATK,
-	BO_ACIDIFIED_ZONE_FIRE_ATK,
-
-	ABC_DAGGER_AND_BOW_M,
-	ABC_MAGIC_SWORD_M,
-	ABC_STRIP_SHADOW,
-	ABC_ABYSS_DAGGER,
-	ABC_UNLUCKY_RUSH,
-	ABC_CHAIN_REACTION_SHOT,
-	ABC_FROM_THE_ABYSS,
-	ABC_ABYSS_SLAYER,
-	ABC_ABYSS_STRIKE,
-	ABC_DEFT_STAB,
-	ABC_ABYSS_SQUARE,
-	ABC_FRENZY_SHOT,
-
-	WH_ADVANCED_TRAP,
-	WH_WIND_SIGN,
-	WH_NATUREFRIENDLY,
-	WH_HAWKRUSH,
-	WH_HAWK_M,
-	WH_CALAMITYGALE,
-	WH_HAWKBOOMERANG,
-	WH_GALESTORM,
-	WH_DEEPBLINDTRAP,
-	WH_SOLIDTRAP,
-	WH_SWIFTTRAP,
-	WH_CRESCIVE_BOLT,
-	WH_FLAMETRAP,
-
-	BO_BIONIC_PHARMACY,
-	BO_BIONICS_M,
-	BO_THE_WHOLE_PROTECTION,
-	BO_ADVANCE_PROTECTION,
-	BO_ACIDIFIED_ZONE_WATER,
-	BO_ACIDIFIED_ZONE_GROUND,
-	BO_ACIDIFIED_ZONE_WIND,
-	BO_ACIDIFIED_ZONE_FIRE,
-	BO_WOODENWARRIOR,
-	BO_WOODEN_FAIRY,
-	BO_CREEPER,
-	BO_RESEARCHREPORT,
-	BO_HELLTREE,
-
-	TR_STAGE_MANNER,
-	TR_RETROSPECTION,
-	TR_MYSTIC_SYMPHONY,
-	TR_KVASIR_SONATA,
-	TR_ROSEBLOSSOM,
-	TR_ROSEBLOSSOM_ATK,
-	TR_RHYTHMSHOOTING,
-	TR_METALIC_FURY,
-	TR_SOUNDBLEND,
-	TR_GEF_NOCTURN,
-	TR_ROKI_CAPRICCIO,
-	TR_AIN_RHAPSODY,
-	TR_MUSICAL_INTERLUDE,
-	TR_JAWAII_SERENADE,
-	TR_NIPELHEIM_REQUIEM,
-	TR_PRON_MARCH,
-
-	EM_MAGIC_BOOK_M,
-	EM_SPELL_ENCHANTING,
-	EM_ACTIVITY_BURN,
-	EM_INCREASING_ACTIVITY,
-	EM_DIAMOND_STORM,
-	EM_LIGHTNING_LAND,
-	EM_VENOM_SWAMP,
-	EM_CONFLAGRATION,
-	EM_TERRA_DRIVE,
-	EM_ELEMENTAL_SPIRIT_M,
-	EM_SUMMON_ELEMENTAL_ARDOR,
-	EM_SUMMON_ELEMENTAL_DILUVIO,
-	EM_SUMMON_ELEMENTAL_PROCELLA,
-	EM_SUMMON_ELEMENTAL_TERREMOTUS,
-	EM_SUMMON_ELEMENTAL_SERPENS,
-	EM_ELEMENTAL_BUSTER,
-	EM_ELEMENTAL_VEIL,
-
-	ABC_CHAIN_REACTION_SHOT_ATK,
-	ABC_FROM_THE_ABYSS_ATK,
-	BO_WOODEN_THROWROCK,
-	BO_WOODEN_ATTACK,
-	BO_HELL_HOWLING,
-	BO_HELL_DUSTY,
-	BO_FAIRY_DUSTY,
-	EM_ELEMENTAL_BUSTER_FIRE,
-	EM_ELEMENTAL_BUSTER_WATER,
-	EM_ELEMENTAL_BUSTER_WIND,
-	EM_ELEMENTAL_BUSTER_GROUND,
-	EM_ELEMENTAL_BUSTER_POISON,
-
-	NW_P_F_I = 5401,
-	NW_GRENADE_MASTERY,
-	NW_INTENSIVE_AIM,
-	NW_GRENADE_FRAGMENT,
-	NW_THE_VIGILANTE_AT_NIGHT,
-	NW_ONLY_ONE_BULLET,
-	NW_SPIRAL_SHOOTING,
-	NW_MAGAZINE_FOR_ONE,
-	NW_WILD_FIRE,
-	NW_BASIC_GRENADE,
-	NW_HASTY_FIRE_IN_THE_HOLE,
-	NW_GRENADES_DROPPING,
-	NW_AUTO_FIRING_LAUNCHER,
-	NW_HIDDEN_CARD,
-	NW_MISSION_BOMBARD,
-
-	SOA_TALISMAN_MASTERY,
-	SOA_SOUL_MASTERY,
-	SOA_TALISMAN_OF_PROTECTION,
-	SOA_TALISMAN_OF_WARRIOR,
-	SOA_TALISMAN_OF_MAGICIAN,
-	SOA_SOUL_GATHERING,
-	SOA_TOTEM_OF_TUTELARY,
-	SOA_TALISMAN_OF_FIVE_ELEMENTS,
-	SOA_TALISMAN_OF_SOUL_STEALING,
-	SOA_EXORCISM_OF_MALICIOUS_SOUL,
-	SOA_TALISMAN_OF_BLUE_DRAGON,
-	SOA_TALISMAN_OF_WHITE_TIGER,
-	SOA_TALISMAN_OF_RED_PHOENIX,
-	SOA_TALISMAN_OF_BLACK_TORTOISE,
-	SOA_TALISMAN_OF_FOUR_BEARING_GOD,
-	SOA_CIRCLE_OF_DIRECTIONS_AND_ELEMENTALS,
-	SOA_SOUL_OF_HEAVEN_AND_EARTH,
-
-	SH_MYSTICAL_CREATURE_MASTERY,
-	SH_COMMUNE_WITH_CHUL_HO,
-	SH_CHUL_HO_SONIC_CLAW,
-	SH_HOWLING_OF_CHUL_HO,
-	SH_HOGOGONG_STRIKE,
-	SH_COMMUNE_WITH_KI_SUL,
-	SH_KI_SUL_WATER_SPRAYING,
-	SH_MARINE_FESTIVAL_OF_KI_SUL,
-	SH_SANDY_FESTIVAL_OF_KI_SUL,
-	SH_KI_SUL_RAMPAGE,
-	SH_COMMUNE_WITH_HYUN_ROK,
-	SH_COLORS_OF_HYUN_ROK,
-	SH_HYUN_ROKS_BREEZE,
-	SH_HYUN_ROK_CANNON,
-	SH_TEMPORARY_COMMUNION,
-	SH_BLESSING_OF_MYSTICAL_CREATURES,
-
-	HN_SELFSTUDY_TATICS,
-	HN_SELFSTUDY_SOCERY,
-	HN_DOUBLEBOWLINGBASH,
-	HN_MEGA_SONIC_BLOW,
-	HN_SHIELD_CHAIN_RUSH,
-	HN_SPIRAL_PIERCE_MAX,
-	HN_METEOR_STORM_BUSTER,
-	HN_JUPITEL_THUNDER_STORM,
-	HN_JACK_FROST_NOVA,
-	HN_HELLS_DRIVE,
-	HN_GROUND_GRAVITATION,
-	HN_NAPALM_VULCAN_STRIKE,
-	HN_BREAKINGLIMIT,
-	HN_RULEBREAK,
-
-	SKE_SKY_MASTERY,
-	SKE_WAR_BOOK_MASTERY,
-	SKE_RISING_SUN,
-	SKE_NOON_BLAST,
-	SKE_SUNSET_BLAST,
-	SKE_RISING_MOON,
-	SKE_MIDNIGHT_KICK,
-	SKE_DAWN_BREAK,
-	SKE_TWINKLING_GALAXY,
-	SKE_STAR_BURST,
-	SKE_STAR_CANNON,
-	SKE_ALL_IN_THE_SKY,
-	SKE_ENCHANTING_SKY,
-
-	SS_TOKEDASU,
-	SS_SHIMIRU,
-	SS_AKUMUKESU,
-	SS_SHINKIROU,
-	SS_KAGEGARI,
-	SS_KAGENOMAI,
-	SS_KAGEGISSEN,
-	SS_FUUMASHOUAKU,
-	SS_FUUMAKOUCHIKU,
-	SS_KUNAIWAIKYOKU,
-	SS_KUNAIKAITEN,
-	SS_KUNAIKUSSETSU,
-	SS_SEKIENHOU,
-	SS_REIKETSUHOU,
-	SS_RAIDENPOU,
-	SS_KINRYUUHOU,
-	SS_ANTENPOU,
-	SS_KAGEAKUMU,
-	SS_HITOUAKUMU,
-	SS_ANKOKURYUUAKUMU,
-
-	NW_THE_VIGILANTE_AT_NIGHT_GUN_GATLING,
-	NW_THE_VIGILANTE_AT_NIGHT_GUN_SHOTGUN,
-	SS_FUUMAKOUCHIKU_BLASTING,
-
-	HLIF_HEAL = 8001,
-	HLIF_AVOID,
-	HLIF_BRAIN,
-	HLIF_CHANGE,
-	HAMI_CASTLE,
-	HAMI_DEFENCE,
-	HAMI_SKIN,
-	HAMI_BLOODLUST,
-	HFLI_MOON,
-	HFLI_FLEET,
-	HFLI_SPEED,
-	HFLI_SBR44,
-	HVAN_CAPRICE,
-	HVAN_CHAOTIC,
-	HVAN_INSTRUCT,
-	HVAN_EXPLOSION,
-	MUTATION_BASEJOB,
-	MH_SUMMON_LEGION,
-	MH_NEEDLE_OF_PARALYZE,
-	MH_POISON_MIST,
-	MH_PAIN_KILLER,
-	MH_LIGHT_OF_REGENE,
-	MH_OVERED_BOOST,
-	MH_ERASER_CUTTER,
-	MH_XENO_SLASHER,
-	MH_SILENT_BREEZE,
-	MH_STYLE_CHANGE,
-	MH_SONIC_CRAW,
-	MH_SILVERVEIN_RUSH,
-	MH_MIDNIGHT_FRENZY,
-	MH_STAHL_HORN,
-	MH_GOLDENE_FERSE,
-	MH_STEINWAND,
-	MH_HEILIGE_STANGE,
-	MH_ANGRIFFS_MODUS,
-	MH_TINDER_BREAKER,
-	MH_CBC,
-	MH_EQC,
-	MH_MAGMA_FLOW,
-	MH_GRANITIC_ARMOR,
-	MH_LAVA_SLIDE,
-	MH_PYROCLASTIC,
-	MH_VOLCANIC_ASH,
-	MH_BLAST_FORGE,
-	MH_TEMPERING,
-	MH_CLASSY_FLUTTER,
-	MH_TWISTER_CUTTER,
-	MH_ABSOLUTE_ZEPHYR,
-	MH_BRUSHUP_CLAW,
-	MH_BLAZING_AND_FURIOUS,
-	MH_THE_ONE_FIGHTER_RISES,
-	MH_POLISHING_NEEDLE,
-	MH_TOXIN_OF_MANDARA,
-	MH_NEEDLE_STINGER,
-	MH_LICHT_GEHORN,
-	MH_GLANZEN_SPIES,
-	MH_HEILIGE_PFERD,
-	MH_GOLDENE_TONE,
-	MH_BLAZING_LAVA,
-
-	MS_BASH = 8201,
-	MS_MAGNUM,
-	MS_BOWLINGBASH,
-	MS_PARRYING,
-	MS_REFLECTSHIELD,
-	MS_BERSERK,
-	MA_DOUBLE,
-	MA_SHOWER,
-	MA_SKIDTRAP,
-	MA_LANDMINE,
-	MA_SANDMAN,
-	MA_FREEZINGTRAP,
-	MA_REMOVETRAP,
-	MA_CHARGEARROW,
-	MA_SHARPSHOOTING,
-	ML_PIERCE,
-	ML_BRANDISH,
-	ML_SPIRALPIERCE,
-	ML_DEFENDER,
-	ML_AUTOGUARD,
-	ML_DEVOTION,
-	MER_MAGNIFICAT,
-	MER_QUICKEN,
-	MER_SIGHT,
-	MER_CRASH,
-	MER_REGAIN,
-	MER_TENDER,
-	MER_BENEDICTION,
-	MER_RECUPERATE,
-	MER_MENTALCURE,
-	MER_COMPRESS,
-	MER_PROVOKE,
-	MER_AUTOBERSERK,
-	MER_DECAGI,
-	MER_SCAPEGOAT,
-	MER_LEXDIVINA,
-	MER_ESTIMATION,
-	MER_KYRIE,
-	MER_BLESSING,
-	MER_INCAGI,
-	MER_INVINCIBLEOFF2,
-
-	EL_CIRCLE_OF_FIRE = 8401,
-	EL_FIRE_CLOAK,
-	EL_FIRE_MANTLE,
-	EL_WATER_SCREEN,
-	EL_WATER_DROP,
-	EL_WATER_BARRIER,
-	EL_WIND_STEP,
-	EL_WIND_CURTAIN,
-	EL_ZEPHYR,
-	EL_SOLID_SKIN,
-	EL_STONE_SHIELD,
-	EL_POWER_OF_GAIA,
-	EL_PYROTECHNIC,
-	EL_HEATER,
-	EL_TROPIC,
-	EL_AQUAPLAY,
-	EL_COOLER,
-	EL_CHILLY_AIR,
-	EL_GUST,
-	EL_BLAST,
-	EL_WILD_STORM,
-	EL_PETROLOGY,
-	EL_CURSED_SOIL,
-	EL_UPHEAVAL,
-	EL_FIRE_ARROW,
-	EL_FIRE_BOMB,
-	EL_FIRE_BOMB_ATK,
-	EL_FIRE_WAVE,
-	EL_FIRE_WAVE_ATK,
-	EL_ICE_NEEDLE,
-	EL_WATER_SCREW,
-	EL_WATER_SCREW_ATK,
-	EL_TIDAL_WEAPON,
-	EL_WIND_SLASH,
-	EL_HURRICANE,
-	EL_HURRICANE_ATK,
-	EL_TYPOON_MIS,
-	EL_TYPOON_MIS_ATK,
-	EL_STONE_HAMMER,
-	EL_ROCK_CRUSHER,
-	EL_ROCK_CRUSHER_ATK,
-	EL_STONE_RAIN,
-	EM_EL_FLAMETECHNIC,
-	EM_EL_FLAMEARMOR,
-	EM_EL_FLAMEROCK,
-	EM_EL_COLD_FORCE,
-	EM_EL_CRYSTAL_ARMOR,
-	EM_EL_AGE_OF_ICE,
-	EM_EL_GRACE_BREEZE,
-	EM_EL_EYES_OF_STORM,
-	EM_EL_STORM_WIND,
-	EM_EL_EARTH_CARE,
-	EM_EL_STRONG_PROTECTION,
-	EM_EL_AVALANCHE,
-	EM_EL_DEEP_POISONING,
-	EM_EL_POISON_SHIELD,
-	EM_EL_DEADLY_POISON,
-
-	ABR_BATTLE_BUSTER = 8601,
-	ABR_DUAL_CANNON_FIRE,
-	ABR_NET_REPAIR,
-	ABR_NET_SUPPORT,
-	ABR_INFINITY_BUSTER,
-};
-
-
-
-
-#endif // MAP_SKILLS_HPP

+ 56 - 0
src/map/skills/swordsman.cpp

@@ -0,0 +1,56 @@
+
+#include "swordsman.hpp"
+
+#include "skillrepository.hpp"
+
+
+#include "map/battle.hpp"
+#include "map/clif.hpp"
+#include "map/mob.hpp"
+#include "map/skill.hpp"
+#include "map/status.hpp"
+#include "map/unit.hpp"
+
+
+Provoke::Provoke() : Skill(e_skill::SM_PROVOKE) {};
+
+int Provoke::castendNoDamageImpl(block_list *src, block_list *target, uint16 skill_lv, t_tick tick, int flag) const {
+    status_data *target_status = status_get_status_data(target);
+    if (status_has_mode(target_status, MD_STATUSIMMUNE) || battle_check_undead(target_status->race, target_status->def_ele)) {
+        return 1;
+    }
+
+    map_session_data *sd = BL_CAST(BL_PC, src);
+    mob_data *target_md = BL_CAST(BL_MOB, target);
+
+    sc_type type = skill_get_sc(skill_id_);
+    // official chance is 70% + 3% per skill level + srcBaseLevel% - targetBaseLevel%
+    int chance = 70 + 3 * skill_lv + status_get_lv(src) - status_get_lv(target);
+    int i = sc_start(src, target, type, skill_id_ == SM_SELFPROVOKE ? 100 : chance, skill_lv, skill_get_time(skill_id_, skill_lv));
+    if (!i) {
+        if (sd) {
+            clif_skill_fail(*sd, skill_id_);
+        }
+        return 0;
+    }
+    clif_skill_nodamage(src, target, skill_id_ == SM_SELFPROVOKE ? SM_PROVOKE : skill_id_, skill_lv, i);
+    unit_skillcastcancel(target, 2);
+    
+    if (target_md) {
+        target_md->state.provoke_flag = src->id;
+        mob_target(target_md, src, skill_get_range2(src, skill_id_, skill_lv, true));
+    }
+
+    // Provoke can cause Coma even though it's a nodamage skill
+    if (sd && battle_check_coma(*sd, *target, BF_MISC)) {
+        status_change_start(src, target, SC_COMA, 10000, skill_lv, 0, src->id, 0, 0, SCSTART_NONE);
+    }
+    return 0;
+}
+
+
+void init_swordsman_skills(SkillRepository& repo) {
+    repo.addSkill(e_skill::SM_BASH, std::make_unique<WeaponSkill>(e_skill::SM_BASH));
+    repo.addSkill(e_skill::SM_PROVOKE, std::make_unique<Provoke>());
+}
+

+ 12 - 0
src/map/skills/swordsman.hpp

@@ -0,0 +1,12 @@
+#pragma once
+
+#include "skillrepository.hpp"
+
+class Provoke : public Skill {
+public:
+    Provoke();
+
+    virtual int castendNoDamageImpl(block_list *src, block_list *target, uint16 skill_lv, t_tick tick, int flag) const override;
+};
+
+void init_swordsman_skills(SkillRepository& repo);

+ 0 - 18
src/map/skills/swordsman/bash.hpp

@@ -1,18 +0,0 @@
-#ifndef SKILLS_SWORDSMAN_BASH_HPP
-#define SKILLS_SWORDSMAN_BASH_HPP
-
-#include "../skill.hpp"
-#include "../skills.hpp"
-
-
-class Bash : public Skill {
-public:
-	int castendDamageId() const {
-		skill_attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag);
-	};
-
-	Bash() : Skill(e_skill::SM_BASH) {};
-
-};
-
-#endif // SKILLS_SWORDSMAN_BASH_HPP

+ 0 - 18
src/map/skills/swordsman/provoke.hpp

@@ -1,18 +0,0 @@
-#ifndef SKILLS_SWORDSMAN_PROVOKE_HPP
-#define SKILLS_SWORDSMAN_PROVOKE_HPP
-
-#include "../skill.hpp"
-
-
-class Provoke : public Skill {
-public:
-	int castendNoDamageId() const {
-		return 0;
-	};
-
-	Provoke() : Skill(e_skill::SM_PROVOKE) {};
-
-private:
-};
-
-#endif // SKILLS_SWORDSMAN_PROVOKE_HPP

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio