skill.h 50 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108
  1. // Copyright (c) Athena Dev Teams - Licensed under GNU GPL
  2. // For more information, see LICENCE in the main folder
  3. #ifndef _SKILL_H_
  4. #define _SKILL_H_
  5. #include "../common/mmo.h" // MAX_SKILL, struct square
  6. #include "../common/db.h"
  7. #include "map.h" // struct block_list
  8. #include "battle.h" // enum damage_lv
  9. struct map_session_data;
  10. struct homun_data;
  11. struct skill_unit;
  12. struct skill_unit_group;
  13. struct status_change_entry;
  14. #define MAX_SKILL_PRODUCE_DB 270 /// Max Produce DB
  15. #define MAX_PRODUCE_RESOURCE 12 /// Max Produce requirements
  16. #define MAX_SKILL_ARROW_DB 150 /// Max Arrow Creation DB
  17. #define MAX_ARROW_RESULT 5 /// Max Arrow results/created
  18. #define MAX_SKILL_ABRA_DB 160 /// Max Skill list of Abracadabra DB
  19. #define MAX_SKILL_IMPROVISE_DB 30 /// Max Skill for Improvise
  20. #define MAX_SKILL_LEVEL 10 /// Max Skill Level (for skill_db storage)
  21. #define MAX_MOBSKILL_LEVEL 100 /// Max monster skill level (on skill usage)
  22. #define MAX_SKILL_CRIMSON_MARKER 3 /// Max Crimson Marker targets (RL_C_MARKER)
  23. #define SKILL_NAME_LENGTH 31 /// Max Skill Name length
  24. #define SKILL_DESC_LENGTH 31 /// Max Skill Desc length
  25. DBMap* skilldb_name2id;
  26. /// Constants to identify a skill's nk value (damage properties)
  27. /// The NK value applies only to non INF_GROUND_SKILL skills
  28. /// when determining skill castend function to invoke.
  29. enum e_skill_nk {
  30. NK_NO_DAMAGE = 0x01,
  31. NK_SPLASH = 0x02|0x04, // 0x4 = splash & split
  32. NK_SPLASHSPLIT = 0x04,
  33. NK_NO_CARDFIX_ATK = 0x08,
  34. NK_NO_ELEFIX = 0x10,
  35. NK_IGNORE_DEF = 0x20,
  36. NK_IGNORE_FLEE = 0x40,
  37. NK_NO_CARDFIX_DEF = 0x80,
  38. };
  39. /// Constants to identify the skill's inf value:
  40. enum e_skill_inf {
  41. INF_ATTACK_SKILL = 0x01,
  42. INF_GROUND_SKILL = 0x02,
  43. INF_SELF_SKILL = 0x04, // Skills casted on self where target is automatically chosen
  44. // 0x08 not assigned
  45. INF_SUPPORT_SKILL = 0x10,
  46. INF_TARGET_TRAP = 0x20,
  47. };
  48. /// A skill with 3 would be no damage + splash: area of effect.
  49. /// Constants to identify a skill's inf2 value.
  50. enum e_skill_inf2 {
  51. INF2_QUEST_SKILL = 0x00001,
  52. INF2_NPC_SKILL = 0x00002, //NPC skills are those that players can't have in their skill tree.
  53. INF2_WEDDING_SKILL = 0x00004,
  54. INF2_SPIRIT_SKILL = 0x00008,
  55. INF2_GUILD_SKILL = 0x00010,
  56. INF2_SONG_DANCE = 0x00020,
  57. INF2_ENSEMBLE_SKILL = 0x00040,
  58. INF2_TRAP = 0x00080,
  59. INF2_TARGET_SELF = 0x00100, //Refers to ground placed skills that will target the caster as well (like Grandcross)
  60. INF2_NO_TARGET_SELF = 0x00200,
  61. INF2_PARTY_ONLY = 0x00400,
  62. INF2_GUILD_ONLY = 0x00800,
  63. INF2_NO_ENEMY = 0x01000,
  64. INF2_AUTOSHADOWSPELL = 0x02000, // Skill that available for SC_AUTOSHADOWSPELL
  65. INF2_CHORUS_SKILL = 0x04000, // Chorus skill
  66. INF2_NO_BG_DMG = 0x08000, // Skill that ignore bg reduction
  67. INF2_NO_GVG_DMG = 0x10000, // Skill that ignore gvg reduction
  68. INF2_NO_NEARNPC = 0x20000, // disable to cast skill if near with NPC [Cydh]
  69. INF2_HIT_TRAP = 0x40000, // can hit trap-type skill (INF2_TRAP) [Cydh]
  70. };
  71. /// Skill info type 3
  72. enum e_skill_inf3 {
  73. INF3_NOLP = 0x00001, // Skill that can ignore Land Protector
  74. INF3_NOENDCAMOUFLAGE = 0x00002, // Skill that doesn't end camouflage
  75. INF3_USABLE_HIDING = 0x00004, // Skill that can be use in hiding
  76. INF3_USABLE_DANCE = 0x00008, // Skill that can be use while in dancing state
  77. INF3_HIT_EMP = 0x00010, // Skill that could hit emperium
  78. INF3_STASIS_BL = 0x00020, // Skill that can ignore SC_STASIS
  79. INF3_KAGEHUMI_BL = 0x00040, // Skill blocked by kagehumi
  80. INF3_EFF_VULTURE = 0x00080, // Skill range affected by AC_VULTURE
  81. INF3_EFF_SNAKEEYE = 0x00100, // Skill range affected by GS_SNAKEEYE
  82. INF3_EFF_SHADOWJUMP = 0x00200, // Skill range affected by NJ_SHADOWJUMP
  83. INF3_EFF_RADIUS = 0x00400, // Skill range affected by WL_RADIUS
  84. INF3_EFF_RESEARCHTRAP = 0x00800, // Skill range affected by RA_RESEARCHTRAP
  85. INF3_NO_EFF_HOVERING = 0x01000, // Skill that does not affect user that has SC_HOVERING active
  86. INF3_USABLE_WARG = 0x02000, // Skill that can be use while riding warg
  87. INF3_DIS_MADO = 0x04000, // Skill that can't be used while in mado
  88. INF3_USABLE_MANHOLE = 0x08000, // Skill that can be used to target while under SC__MANHOLE effect
  89. INF3_HIT_HIDING = 0x10000, // Skill that affects hidden targets
  90. INF3_SC_GLOOMYDAY_SK = 0x20000, // Skill that affects SC_GLOOMYDAY_SK
  91. INF3_SC_DANCEWITHWUG = 0x40000, // Skill that is affected by SC_DANCEWITHWUG
  92. INF3_BITE_BLOCK = 0x80000, // Skill blocked by RA_WUGBITE
  93. };
  94. /// Walk intervals at which chase-skills are attempted to be triggered.
  95. /// If you change this, make sure it's an odd value (for icewall block behavior).
  96. #define WALK_SKILL_INTERVAL 5
  97. /// Flags passed to skill_attack/skill_area_sub
  98. enum e_skill_display {
  99. SD_LEVEL = 0x1000, // skill_attack will send -1 instead of skill level (affects display of some skills)
  100. SD_ANIMATION = 0x2000, // skill_attack will use '5' instead of the skill's 'type' (this makes skills show an animation). Also being used in skill_attack for splash skill (NK_SPLASH) to check status_check_skilluse
  101. SD_SPLASH = 0x4000, // skill_area_sub will count targets in skill_area_temp[2]
  102. SD_PREAMBLE = 0x8000, // skill_area_sub will transmit a 'magic' damage packet (-30000 dmg) for the first target selected
  103. };
  104. #define MAX_SKILL_ITEM_REQUIRE 10 /// Maximum required items
  105. #define MAX_SKILL_STATUS_REQUIRE 3 /// Maximum required statuses
  106. #define MAX_SKILL_EQUIP_REQUIRE 10 /// Maximum required equipped item
  107. /// Single skill requirement. !TODO: Cleanup the variable types
  108. struct skill_condition {
  109. int32 hp; ///< HP cost
  110. int32 mhp; ///< Max HP to trigger
  111. int32 sp; /// SP cost
  112. int16 hp_rate; /// HP cost (%)
  113. int16 sp_rate; /// SP cost (%)
  114. uint32 zeny; /// Zeny cost
  115. uint32 weapon; /// Weapon type. Combined bitmask of enum weapon_type (1<<weapon)
  116. uint16 ammo; /// Ammo type. Combine bitmask of enum ammo_type (1<<ammo)
  117. int8 ammo_qty; /// Amount of ammo
  118. uint8 state; /// State/condition. @see enum e_require_state
  119. int8 spiritball; /// Spiritball cost
  120. uint16 itemid[MAX_SKILL_ITEM_REQUIRE]; /// Required item
  121. uint16 amount[MAX_SKILL_ITEM_REQUIRE]; /// Amount of item
  122. uint16 *eqItem; /// List of equipped item
  123. enum sc_type *status; /// List of Status required (SC)
  124. uint8 status_count, /// Count of SC
  125. eqItem_count; /// Count of equipped item
  126. };
  127. /// Skill requirement structure. !TODO: Cleanup the variable types that use array [MAX_SKILL_LEVEL]
  128. struct s_skill_require {
  129. int hp[MAX_SKILL_LEVEL]; ///< HP cost
  130. int mhp[MAX_SKILL_LEVEL]; ///< Max HP to trigger
  131. int sp[MAX_SKILL_LEVEL]; /// SP cost
  132. int hp_rate[MAX_SKILL_LEVEL]; /// HP cost (%)
  133. int sp_rate[MAX_SKILL_LEVEL]; /// SP cost (%)
  134. int zeny[MAX_SKILL_LEVEL]; /// Zeny cost
  135. uint32 weapon; /// Weapon type. Combined bitmask of enum weapon_type (1<<weapon)
  136. uint16 ammo; /// Ammo type. Combine bitmask of enum ammo_type (1<<ammo)
  137. int ammo_qty[MAX_SKILL_LEVEL]; /// Amount of ammo
  138. uint8 state; /// State/condition. @see enum e_require_state
  139. int spiritball[MAX_SKILL_LEVEL]; /// Spiritball cost
  140. uint16 itemid[MAX_SKILL_ITEM_REQUIRE]; /// Required item
  141. uint16 amount[MAX_SKILL_ITEM_REQUIRE]; /// Amount of item
  142. uint16 *eqItem; /// List of equipped item
  143. enum sc_type *status; /// List of Status required (SC)
  144. uint8 status_count, /// Count of SC
  145. eqItem_count; /// Count of equipped item
  146. };
  147. /// Database skills. !TODO: Cleanup the variable types that use array [MAX_SKILL_LEVEL]
  148. struct s_skill_db {
  149. // skill_db.txt
  150. uint16 nameid; ///< Skill ID
  151. char name[SKILL_NAME_LENGTH]; ///< AEGIS_Name
  152. char desc[SKILL_DESC_LENGTH]; ///< English Name
  153. int range[MAX_SKILL_LEVEL]; ///< Range
  154. int8 hit; ///< Hit type
  155. uint8 inf; ///< Inf: 0- passive, 1- enemy, 2- place, 4- self, 16- friend, 32- trap
  156. int element[MAX_SKILL_LEVEL]; ///< Element
  157. uint8 nk; ///< Damage properties
  158. int splash[MAX_SKILL_LEVEL]; ///< Splash effect
  159. uint8 max; ///< Max level
  160. int num[MAX_SKILL_LEVEL]; ///< Number of hit
  161. bool castcancel; ///< Cancel cast when being hit
  162. int16 cast_def_rate; ///< Def rate during cast a skill
  163. uint16 skill_type; ///< Skill type
  164. int blewcount[MAX_SKILL_LEVEL]; ///< Blew count
  165. uint32 inf2; ///< Skill flags @see enum e_skill_inf2
  166. uint32 inf3; ///< Skill flags @see enum e_skill_inf3
  167. int maxcount[MAX_SKILL_LEVEL]; ///< Max number skill can be casted in same map
  168. // skill_castnodex_db.txt
  169. uint8 castnodex; ///< 1 - Not affected by dex, 2 - Not affected by SC, 4 - Not affected by item
  170. uint8 delaynodex; ///< 1 - Not affected by dex, 2 - Not affected by SC, 4 - Not affected by item
  171. // skill_nocast_db.txt
  172. uint32 nocast; ///< Skill cannot be casted at this zone
  173. // skill_unit_db.txt
  174. uint16 unit_id[2]; ///< Unit ID. @see enum s_skill_unit_id
  175. int unit_layout_type[MAX_SKILL_LEVEL]; ///< Layout type. -1 is special layout, others are square with lenght*width: (val*2+1)^2
  176. int unit_range[MAX_SKILL_LEVEL]; ///< Unit cell effect range
  177. int16 unit_interval; ///< Interval
  178. uint32 unit_target; ///< Unit target. @see enum e_battle_check_target
  179. uint32 unit_flag; ///< Unit flags. @see enum e_skill_unit_flag
  180. // skill_cast_db.txt
  181. int cast[MAX_SKILL_LEVEL]; ///< Variable casttime
  182. #ifdef RENEWAL_CAST
  183. int fixed_cast[MAX_SKILL_LEVEL]; ///< If -1 means 20% than 'cast'
  184. #endif
  185. int walkdelay[MAX_SKILL_LEVEL]; ///< Delay to walk after casting
  186. int delay[MAX_SKILL_LEVEL]; ///< Global delay (delay before reusing all skills)
  187. int cooldown[MAX_SKILL_LEVEL]; ///< Cooldown (delay before reusing same skill)
  188. int upkeep_time[MAX_SKILL_LEVEL]; ///< Duration
  189. int upkeep_time2[MAX_SKILL_LEVEL]; ///< Duration2
  190. // skill_require_db.txt
  191. struct s_skill_require require; ///< Skill requirement
  192. // skill_nonearnpc_db.txt
  193. uint8 unit_nonearnpc_range; //additional range for UF_NONEARNPC or INF2_NO_NEARNPC [Cydh]
  194. uint8 unit_nonearnpc_type; //type of NPC [Cydh]
  195. // skill_damage_db.txt
  196. #ifdef ADJUST_SKILL_DAMAGE
  197. struct s_skill_damage damage;
  198. #endif
  199. // skill_copyable_db.txt
  200. struct s_copyable { // [Cydh]
  201. uint8 option;
  202. uint16 joballowed, req_opt;
  203. } copyable;
  204. };
  205. extern struct s_skill_db **skill_db;
  206. #define MAX_SKILL_UNIT_LAYOUT 52
  207. #define MAX_SKILL_UNIT_LAYOUT2 17
  208. #define MAX_SQUARE_LAYOUT 5 // 11*11 Placement of a maximum unit
  209. #define MAX_SKILL_UNIT_COUNT ((MAX_SQUARE_LAYOUT*2+1)*(MAX_SQUARE_LAYOUT*2+1))
  210. struct s_skill_unit_layout {
  211. int count;
  212. int dx[MAX_SKILL_UNIT_COUNT];
  213. int dy[MAX_SKILL_UNIT_COUNT];
  214. };
  215. struct s_skill_nounit_layout {
  216. int count;
  217. int dx[MAX_SKILL_UNIT_COUNT];
  218. int dy[MAX_SKILL_UNIT_COUNT];
  219. };
  220. #define MAX_SKILLTIMERSKILL 15
  221. struct skill_timerskill {
  222. int timer;
  223. int src_id;
  224. int target_id;
  225. int map;
  226. short x,y;
  227. uint16 skill_id,skill_lv;
  228. int type; // a BF_ type (NOTE: some places use this as general-purpose storage...)
  229. int flag;
  230. };
  231. #define MAX_SKILLUNITGROUP 25 /// Maximum skill unit group (for same skill each source)
  232. /// Skill unit group
  233. struct skill_unit_group {
  234. int src_id; /// Caster ID/RID, if player is account_id
  235. int party_id; /// Party ID
  236. int guild_id; /// Guild ID
  237. int bg_id; /// Battleground ID
  238. int map; /// Map
  239. int target_flag; /// Holds BCT_* flag for battle_check_target
  240. int bl_flag; /// Holds BL_* flag for map_foreachin* functions
  241. unsigned int tick; /// Tick when skill unit initialized
  242. int limit, /// Life time
  243. interval; /// Timer interval
  244. uint16 skill_id, /// Skill ID
  245. skill_lv; /// Skill level
  246. int val1, val2, val3; /// Values
  247. char *valstr; /// String value, used for HT_TALKIEBOX & RG_GRAFFITI
  248. int unit_id; /// Unit ID (for client effect)
  249. int group_id; /// Skill Group ID
  250. int link_group_id; /// Linked group that should be deleted if this one is deleted
  251. int unit_count, /// Number of unit at this group
  252. alive_count; /// Number of alive unit
  253. int item_id; /// Store item used.
  254. struct skill_unit *unit; /// Skill Unit
  255. struct {
  256. unsigned ammo_consume : 1; // Need to consume ammo
  257. unsigned song_dance : 2; //0x1 Song/Dance, 0x2 Ensemble
  258. unsigned guildaura : 1; // Guild Aura
  259. } state;
  260. };
  261. /// Skill unit
  262. struct skill_unit {
  263. struct block_list bl;
  264. struct skill_unit_group *group; /// Skill group reference
  265. int limit;
  266. int val1, val2;
  267. short alive, range;
  268. };
  269. #define MAX_SKILLUNITGROUPTICKSET 25
  270. struct skill_unit_group_tickset {
  271. unsigned int tick;
  272. int id;
  273. };
  274. enum e_skill_unit_flag {
  275. UF_DEFNOTENEMY = 0x00001, // If 'defunit_not_enemy' is set, the target is changed to 'friend'
  276. UF_NOREITERATION = 0x00002, // Spell cannot be stacked
  277. UF_NOFOOTSET = 0x00004, // Spell cannot be cast near/on targets
  278. UF_NOOVERLAP = 0x00008, // Spell effects do not overlap
  279. UF_PATHCHECK = 0x00010, // Only cells with a shootable path will be placed
  280. UF_NOPC = 0x00020, // May not target players
  281. UF_NOMOB = 0x00040, // May not target mobs
  282. UF_SKILL = 0x00080, // May target skills
  283. UF_DANCE = 0x00100, // Dance
  284. UF_ENSEMBLE = 0x00200, // Duet
  285. UF_SONG = 0x00400, // Song
  286. UF_DUALMODE = 0x00800, // Spells should trigger both ontimer and onplace/onout/onleft effects.
  287. UF_NOKNOCKBACK = 0x01000, // Skill unit cannot be knocked back
  288. UF_RANGEDSINGLEUNIT = 0x02000, // hack for ranged layout, only display center
  289. UF_REM_CRAZYWEED = 0x04000, // removed by Crazyweed
  290. UF_REM_FIRERAIN = 0x08000, // removed by Fire Rain
  291. UF_KNOCKBACK_GROUP = 0x10000, // knockback skill unit with its group instead of single unit
  292. };
  293. /// Create Database item
  294. struct s_skill_produce_db {
  295. unsigned short nameid; /// Product ID
  296. unsigned short req_skill; /// Required Skill
  297. unsigned char req_skill_lv, /// Required Skill Level
  298. itemlv; /// Item Level
  299. unsigned short mat_id[MAX_PRODUCE_RESOURCE], /// Materials needed
  300. mat_amount[MAX_PRODUCE_RESOURCE]; /// Amount of each materials
  301. };
  302. extern struct s_skill_produce_db skill_produce_db[MAX_SKILL_PRODUCE_DB];
  303. /// Creating database arrow
  304. struct s_skill_arrow_db {
  305. unsigned short nameid, /// Material ID
  306. cre_id[MAX_ARROW_RESULT], /// Arrow created
  307. cre_amount[MAX_ARROW_RESULT]; /// Amount of each arrow created
  308. };
  309. extern struct s_skill_arrow_db skill_arrow_db[MAX_SKILL_ARROW_DB];
  310. /// Abracadabra database
  311. struct s_skill_abra_db {
  312. uint16 skill_id; /// Skill ID
  313. char name[SKILL_NAME_LENGTH]; /// Shouted skill name
  314. int per[MAX_SKILL_LEVEL]; /// Probability summoned
  315. };
  316. extern struct s_skill_abra_db skill_abra_db[MAX_SKILL_ABRA_DB];
  317. extern unsigned short skill_abra_count;
  318. void do_init_skill(void);
  319. void do_final_skill(void);
  320. /// Cast type
  321. enum { CAST_GROUND, CAST_DAMAGE, CAST_NODAMAGE };
  322. /// Returns the cast type of the skill: ground cast, castend damage, castend no damage
  323. int skill_get_casttype(uint16 skill_id); //[Skotlex]
  324. const char* skill_get_name( uint16 skill_id ); // [Skotlex]
  325. const char* skill_get_desc( uint16 skill_id ); // [Skotlex]
  326. int skill_tree_get_max( uint16 skill_id, int b_class ); // Celest
  327. // Accessor to the skills database
  328. int skill_get_index_( uint16 skill_id, bool silent, const char *func, const char *file, int line );
  329. #define skill_get_index(skill_id) skill_get_index_((skill_id), false, __FUNCTION__, __FILE__, __LINE__) /// Get skill index from skill_id (common usage on source)
  330. #define skill_get_index2(skill_id) skill_get_index_((skill_id), true, __FUNCTION__, __FILE__, __LINE__) /// Get skill index from skill_id (used when reading skill_db files)
  331. int skill_get_type( uint16 skill_id );
  332. int skill_get_hit( uint16 skill_id );
  333. int skill_get_inf( uint16 skill_id );
  334. int skill_get_ele( uint16 skill_id , uint16 skill_lv );
  335. int skill_get_nk( uint16 skill_id );
  336. int skill_get_max( uint16 skill_id );
  337. int skill_get_range( uint16 skill_id , uint16 skill_lv );
  338. int skill_get_range2(struct block_list *bl, uint16 skill_id, uint16 skill_lv);
  339. int skill_get_splash( uint16 skill_id , uint16 skill_lv );
  340. int skill_get_num( uint16 skill_id ,uint16 skill_lv );
  341. int skill_get_cast( uint16 skill_id ,uint16 skill_lv );
  342. int skill_get_delay( uint16 skill_id ,uint16 skill_lv );
  343. int skill_get_walkdelay( uint16 skill_id ,uint16 skill_lv );
  344. int skill_get_time( uint16 skill_id ,uint16 skill_lv );
  345. int skill_get_time2( uint16 skill_id ,uint16 skill_lv );
  346. int skill_get_castnodex( uint16 skill_id );
  347. int skill_get_castdef( uint16 skill_id );
  348. int skill_get_nocast( uint16 skill_id );
  349. int skill_get_unit_id(uint16 skill_id,int flag);
  350. int skill_get_inf2( uint16 skill_id );
  351. int skill_get_castcancel( uint16 skill_id );
  352. int skill_get_maxcount( uint16 skill_id ,uint16 skill_lv );
  353. int skill_get_blewcount( uint16 skill_id ,uint16 skill_lv );
  354. int skill_get_unit_flag( uint16 skill_id );
  355. int skill_get_unit_target( uint16 skill_id );
  356. int skill_get_inf3( uint16 skill_id );
  357. // Accessor for skill requirements
  358. int skill_get_hp( uint16 skill_id ,uint16 skill_lv );
  359. int skill_get_mhp( uint16 skill_id ,uint16 skill_lv );
  360. int skill_get_sp( uint16 skill_id ,uint16 skill_lv );
  361. int skill_get_status_count( uint16 skill_id );
  362. int skill_get_hp_rate( uint16 skill_id, uint16 skill_lv );
  363. int skill_get_sp_rate( uint16 skill_id, uint16 skill_lv );
  364. int skill_get_zeny( uint16 skill_id ,uint16 skill_lv );
  365. int skill_get_weapontype( uint16 skill_id );
  366. int skill_get_ammotype( uint16 skill_id );
  367. int skill_get_ammo_qty( uint16 skill_id, uint16 skill_lv );
  368. int skill_get_state(uint16 skill_id);
  369. //int skill_get_status( uint16 skill_id, int idx );
  370. int skill_get_status_count( uint16 skill_id );
  371. int skill_get_spiritball( uint16 skill_id, uint16 skill_lv );
  372. int skill_get_itemid( uint16 skill_id, int idx );
  373. int skill_get_itemqty( uint16 skill_id, int idx );
  374. unsigned short skill_dummy2skill_id(unsigned short skill_id);
  375. int skill_name2id(const char* name);
  376. uint16 skill_idx2id(uint16 idx);
  377. uint16 SKILL_MAX_DB(void);
  378. int skill_isammotype(struct map_session_data *sd, unsigned short skill_id);
  379. int skill_castend_id(int tid, unsigned int tick, int id, intptr_t data);
  380. int skill_castend_pos(int tid, unsigned int tick, int id, intptr_t data);
  381. int skill_castend_map( struct map_session_data *sd,uint16 skill_id, const char *map);
  382. int skill_cleartimerskill(struct block_list *src);
  383. int skill_addtimerskill(struct block_list *src,unsigned int tick,int target,int x,int y,uint16 skill_id,uint16 skill_lv,int type,int flag);
  384. // Results? Added
  385. int skill_additional_effect( struct block_list* src, struct block_list *bl,uint16 skill_id,uint16 skill_lv,int attack_type,enum damage_lv dmg_lv,unsigned int tick);
  386. int skill_counter_additional_effect( struct block_list* src, struct block_list *bl,uint16 skill_id,uint16 skill_lv,int attack_type,unsigned int tick);
  387. short skill_blown(struct block_list* src, struct block_list* target, char count, int8 dir, unsigned char flag);
  388. int skill_break_equip(struct block_list *src,struct block_list *bl, unsigned short where, int rate, int flag);
  389. int skill_strip_equip(struct block_list *src,struct block_list *bl, unsigned short where, int rate, int lv, int time);
  390. // Skills unit
  391. struct skill_unit_group *skill_id2group(int group_id);
  392. struct skill_unit_group *skill_unitsetting(struct block_list* src, uint16 skill_id, uint16 skill_lv, short x, short y, int flag);
  393. struct skill_unit *skill_initunit (struct skill_unit_group *group, int idx, int x, int y, int val1, int val2);
  394. int skill_delunit(struct skill_unit *unit);
  395. struct skill_unit_group *skill_initunitgroup(struct block_list* src, int count, uint16 skill_id, uint16 skill_lv, int unit_id, int limit, int interval);
  396. int skill_delunitgroup_(struct skill_unit_group *group, const char* file, int line, const char* func);
  397. #define skill_delunitgroup(group) skill_delunitgroup_(group,__FILE__,__LINE__,__func__)
  398. void skill_clear_unitgroup(struct block_list *src);
  399. int skill_clear_group(struct block_list *bl, int flag);
  400. void ext_skill_unit_onplace(struct skill_unit *unit, struct block_list *bl, unsigned int tick);
  401. int64 skill_unit_ondamaged(struct skill_unit *unit,int64 damage);
  402. int skill_castfix(struct block_list *bl, uint16 skill_id, uint16 skill_lv);
  403. int skill_castfix_sc(struct block_list *bl, double time, uint8 flag);
  404. #ifdef RENEWAL_CAST
  405. int skill_vfcastfix(struct block_list *bl, double time, uint16 skill_id, uint16 skill_lv);
  406. #endif
  407. int skill_delayfix(struct block_list *bl, uint16 skill_id, uint16 skill_lv);
  408. void skill_toggle_magicpower(struct block_list *bl, uint16 skill_id);
  409. // Skill conditions check and remove [Inkfish]
  410. bool skill_check_condition_castbegin(struct map_session_data *sd, uint16 skill_id, uint16 skill_lv);
  411. bool skill_check_condition_castend(struct map_session_data *sd, uint16 skill_id, uint16 skill_lv);
  412. int skill_check_condition_char_sub (struct block_list *bl, va_list ap);
  413. void skill_consume_requirement(struct map_session_data *sd, uint16 skill_id, uint16 skill_lv, short type);
  414. struct skill_condition skill_get_requirement(struct map_session_data *sd, uint16 skill_id, uint16 skill_lv);
  415. int skill_disable_check(struct status_change *sc, uint16 skill_id);
  416. int skill_check_pc_partner(struct map_session_data *sd, uint16 skill_id, uint16 *skill_lv, int range, int cast_flag);
  417. // -- moonsoul (added skill_check_unit_cell)
  418. int skill_check_unit_cell(uint16 skill_id,int16 m,int16 x,int16 y,int unit_id);
  419. int skill_unit_out_all( struct block_list *bl,unsigned int tick,int range);
  420. int skill_unit_move(struct block_list *bl,unsigned int tick,int flag);
  421. void skill_unit_move_unit_group( struct skill_unit_group *group, int16 m,int16 dx,int16 dy);
  422. void skill_unit_move_unit(struct block_list *bl, int dx, int dy);
  423. struct skill_unit_group *skill_check_dancing( struct block_list *src );
  424. // Chant canceled
  425. int skill_castcancel(struct block_list *bl,int type);
  426. int skill_sit (struct map_session_data *sd, int type);
  427. void skill_overbrand(struct block_list* src, uint16 skill_id, uint16 skill_lv, uint16 x, uint16 y, unsigned int tick, int flag);
  428. void skill_repairweapon(struct map_session_data *sd, int idx);
  429. void skill_identify(struct map_session_data *sd,int idx);
  430. void skill_weaponrefine(struct map_session_data *sd,int idx); // [Celest]
  431. int skill_autospell(struct map_session_data *md,uint16 skill_id);
  432. int skill_calc_heal(struct block_list *src, struct block_list *target, uint16 skill_id, uint16 skill_lv, bool heal);
  433. bool skill_check_cloaking(struct block_list *bl, struct status_change_entry *sce);
  434. // Abnormal status
  435. void skill_enchant_elemental_end(struct block_list *bl, int type);
  436. bool skill_isNotOk(uint16 skill_id, struct map_session_data *sd);
  437. bool skill_isNotOk_hom(uint16 skill_id, struct homun_data *hd);
  438. bool skill_isNotOk_mercenary(uint16 skill_id, struct mercenary_data *md);
  439. bool skill_isNotOk_npcRange(struct block_list *src, uint16 skill_id, uint16 skill_lv, int pos_x, int pos_y);
  440. // Item creation
  441. short skill_can_produce_mix( struct map_session_data *sd, unsigned short nameid, int trigger, int qty);
  442. bool skill_produce_mix( struct map_session_data *sd, uint16 skill_id, unsigned short nameid, int slot1, int slot2, int slot3, int qty, short produce_idx );
  443. bool skill_arrow_create( struct map_session_data *sd, unsigned short nameid);
  444. // skills for the mob
  445. int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,uint16 skill_id,uint16 skill_lv,unsigned int tick,int flag );
  446. int skill_castend_damage_id( struct block_list* src, struct block_list *bl,uint16 skill_id,uint16 skill_lv,unsigned int tick,int flag );
  447. int skill_castend_pos2( struct block_list *src, int x,int y,uint16 skill_id,uint16 skill_lv,unsigned int tick,int flag);
  448. int skill_blockpc_start(struct map_session_data*, int, int);
  449. int skill_blockpc_get(struct map_session_data *sd, int skillid);
  450. int skill_blockpc_clear(struct map_session_data *sd);
  451. int skill_blockpc_end(int tid, unsigned int tick, int id, intptr_t data);
  452. int skill_blockhomun_start (struct homun_data*,uint16 skill_id,int);
  453. int skill_blockmerc_start (struct mercenary_data*,uint16 skill_id,int);
  454. // (Epoque:) To-do: replace this macro with some sort of skill tree check (rather than hard-coded skill names)
  455. #define skill_ischangesex(id) ( \
  456. ((id) >= BD_ADAPTATION && (id) <= DC_SERVICEFORYOU) || ((id) >= CG_ARROWVULCAN && (id) <= CG_MARIONETTE) || \
  457. ((id) >= CG_LONGINGFREEDOM && (id) <= CG_TAROTCARD) || ((id) >= WA_SWING_DANCE && (id) <= WM_UNLIMITED_HUMMING_VOICE))
  458. // Skill action, (return dmg,heal)
  459. int64 skill_attack( int attack_type, struct block_list* src, struct block_list *dsrc,struct block_list *bl,uint16 skill_id,uint16 skill_lv,unsigned int tick,int flag );
  460. void skill_reload(void);
  461. /// List of State Requirements
  462. enum e_require_state {
  463. ST_NONE,
  464. ST_HIDDEN,
  465. ST_RIDING,
  466. ST_FALCON,
  467. ST_CART,
  468. ST_SHIELD,
  469. ST_RECOV_WEIGHT_RATE,
  470. ST_MOVE_ENABLE,
  471. ST_WATER,
  472. ST_RIDINGDRAGON,
  473. ST_WUG,
  474. ST_RIDINGWUG,
  475. ST_MADO,
  476. ST_ELEMENTALSPIRIT,
  477. ST_ELEMENTALSPIRIT2,
  478. ST_PECO,
  479. };
  480. /// List of Skills
  481. enum e_skill {
  482. NV_BASIC = 1,
  483. SM_SWORD,
  484. SM_TWOHAND,
  485. SM_RECOVERY,
  486. SM_BASH,
  487. SM_PROVOKE,
  488. SM_MAGNUM,
  489. SM_ENDURE,
  490. MG_SRECOVERY,
  491. MG_SIGHT,
  492. MG_NAPALMBEAT,
  493. MG_SAFETYWALL,
  494. MG_SOULSTRIKE,
  495. MG_COLDBOLT,
  496. MG_FROSTDIVER,
  497. MG_STONECURSE,
  498. MG_FIREBALL,
  499. MG_FIREWALL,
  500. MG_FIREBOLT,
  501. MG_LIGHTNINGBOLT,
  502. MG_THUNDERSTORM,
  503. AL_DP,
  504. AL_DEMONBANE,
  505. AL_RUWACH,
  506. AL_PNEUMA,
  507. AL_TELEPORT,
  508. AL_WARP,
  509. AL_HEAL,
  510. AL_INCAGI,
  511. AL_DECAGI,
  512. AL_HOLYWATER,
  513. AL_CRUCIS,
  514. AL_ANGELUS,
  515. AL_BLESSING,
  516. AL_CURE,
  517. MC_INCCARRY,
  518. MC_DISCOUNT,
  519. MC_OVERCHARGE,
  520. MC_PUSHCART,
  521. MC_IDENTIFY,
  522. MC_VENDING,
  523. MC_MAMMONITE,
  524. AC_OWL,
  525. AC_VULTURE,
  526. AC_CONCENTRATION,
  527. AC_DOUBLE,
  528. AC_SHOWER,
  529. TF_DOUBLE,
  530. TF_MISS,
  531. TF_STEAL,
  532. TF_HIDING,
  533. TF_POISON,
  534. TF_DETOXIFY,
  535. ALL_RESURRECTION,
  536. KN_SPEARMASTERY,
  537. KN_PIERCE,
  538. KN_BRANDISHSPEAR,
  539. KN_SPEARSTAB,
  540. KN_SPEARBOOMERANG,
  541. KN_TWOHANDQUICKEN,
  542. KN_AUTOCOUNTER,
  543. KN_BOWLINGBASH,
  544. KN_RIDING,
  545. KN_CAVALIERMASTERY,
  546. PR_MACEMASTERY,
  547. PR_IMPOSITIO,
  548. PR_SUFFRAGIUM,
  549. PR_ASPERSIO,
  550. PR_BENEDICTIO,
  551. PR_SANCTUARY,
  552. PR_SLOWPOISON,
  553. PR_STRECOVERY,
  554. PR_KYRIE,
  555. PR_MAGNIFICAT,
  556. PR_GLORIA,
  557. PR_LEXDIVINA,
  558. PR_TURNUNDEAD,
  559. PR_LEXAETERNA,
  560. PR_MAGNUS,
  561. WZ_FIREPILLAR,
  562. WZ_SIGHTRASHER,
  563. WZ_FIREIVY,
  564. WZ_METEOR,
  565. WZ_JUPITEL,
  566. WZ_VERMILION,
  567. WZ_WATERBALL,
  568. WZ_ICEWALL,
  569. WZ_FROSTNOVA,
  570. WZ_STORMGUST,
  571. WZ_EARTHSPIKE,
  572. WZ_HEAVENDRIVE,
  573. WZ_QUAGMIRE,
  574. WZ_ESTIMATION,
  575. BS_IRON,
  576. BS_STEEL,
  577. BS_ENCHANTEDSTONE,
  578. BS_ORIDEOCON,
  579. BS_DAGGER,
  580. BS_SWORD,
  581. BS_TWOHANDSWORD,
  582. BS_AXE,
  583. BS_MACE,
  584. BS_KNUCKLE,
  585. BS_SPEAR,
  586. BS_HILTBINDING,
  587. BS_FINDINGORE,
  588. BS_WEAPONRESEARCH,
  589. BS_REPAIRWEAPON,
  590. BS_SKINTEMPER,
  591. BS_HAMMERFALL,
  592. BS_ADRENALINE,
  593. BS_WEAPONPERFECT,
  594. BS_OVERTHRUST,
  595. BS_MAXIMIZE,
  596. HT_SKIDTRAP,
  597. HT_LANDMINE,
  598. HT_ANKLESNARE,
  599. HT_SHOCKWAVE,
  600. HT_SANDMAN,
  601. HT_FLASHER,
  602. HT_FREEZINGTRAP,
  603. HT_BLASTMINE,
  604. HT_CLAYMORETRAP,
  605. HT_REMOVETRAP,
  606. HT_TALKIEBOX,
  607. HT_BEASTBANE,
  608. HT_FALCON,
  609. HT_STEELCROW,
  610. HT_BLITZBEAT,
  611. HT_DETECTING,
  612. HT_SPRINGTRAP,
  613. AS_RIGHT,
  614. AS_LEFT,
  615. AS_KATAR,
  616. AS_CLOAKING,
  617. AS_SONICBLOW,
  618. AS_GRIMTOOTH,
  619. AS_ENCHANTPOISON,
  620. AS_POISONREACT,
  621. AS_VENOMDUST,
  622. AS_SPLASHER,
  623. NV_FIRSTAID,
  624. NV_TRICKDEAD,
  625. SM_MOVINGRECOVERY,
  626. SM_FATALBLOW,
  627. SM_AUTOBERSERK,
  628. AC_MAKINGARROW,
  629. AC_CHARGEARROW,
  630. TF_SPRINKLESAND,
  631. TF_BACKSLIDING,
  632. TF_PICKSTONE,
  633. TF_THROWSTONE,
  634. MC_CARTREVOLUTION,
  635. MC_CHANGECART,
  636. MC_LOUD,
  637. AL_HOLYLIGHT,
  638. MG_ENERGYCOAT,
  639. NPC_PIERCINGATT,
  640. NPC_MENTALBREAKER,
  641. NPC_RANGEATTACK,
  642. NPC_ATTRICHANGE,
  643. NPC_CHANGEWATER,
  644. NPC_CHANGEGROUND,
  645. NPC_CHANGEFIRE,
  646. NPC_CHANGEWIND,
  647. NPC_CHANGEPOISON,
  648. NPC_CHANGEHOLY,
  649. NPC_CHANGEDARKNESS,
  650. NPC_CHANGETELEKINESIS,
  651. NPC_CRITICALSLASH,
  652. NPC_COMBOATTACK,
  653. NPC_GUIDEDATTACK,
  654. NPC_SELFDESTRUCTION,
  655. NPC_SPLASHATTACK,
  656. NPC_SUICIDE,
  657. NPC_POISON,
  658. NPC_BLINDATTACK,
  659. NPC_SILENCEATTACK,
  660. NPC_STUNATTACK,
  661. NPC_PETRIFYATTACK,
  662. NPC_CURSEATTACK,
  663. NPC_SLEEPATTACK,
  664. NPC_RANDOMATTACK,
  665. NPC_WATERATTACK,
  666. NPC_GROUNDATTACK,
  667. NPC_FIREATTACK,
  668. NPC_WINDATTACK,
  669. NPC_POISONATTACK,
  670. NPC_HOLYATTACK,
  671. NPC_DARKNESSATTACK,
  672. NPC_TELEKINESISATTACK,
  673. NPC_MAGICALATTACK,
  674. NPC_METAMORPHOSIS,
  675. NPC_PROVOCATION,
  676. NPC_SMOKING,
  677. NPC_SUMMONSLAVE,
  678. NPC_EMOTION,
  679. NPC_TRANSFORMATION,
  680. NPC_BLOODDRAIN,
  681. NPC_ENERGYDRAIN,
  682. NPC_KEEPING,
  683. NPC_DARKBREATH,
  684. NPC_DARKBLESSING,
  685. NPC_BARRIER,
  686. NPC_DEFENDER,
  687. NPC_LICK,
  688. NPC_HALLUCINATION,
  689. NPC_REBIRTH,
  690. NPC_SUMMONMONSTER,
  691. RG_SNATCHER,
  692. RG_STEALCOIN,
  693. RG_BACKSTAP,
  694. RG_TUNNELDRIVE,
  695. RG_RAID,
  696. RG_STRIPWEAPON,
  697. RG_STRIPSHIELD,
  698. RG_STRIPARMOR,
  699. RG_STRIPHELM,
  700. RG_INTIMIDATE,
  701. RG_GRAFFITI,
  702. RG_FLAGGRAFFITI,
  703. RG_CLEANER,
  704. RG_GANGSTER,
  705. RG_COMPULSION,
  706. RG_PLAGIARISM,
  707. AM_AXEMASTERY,
  708. AM_LEARNINGPOTION,
  709. AM_PHARMACY,
  710. AM_DEMONSTRATION,
  711. AM_ACIDTERROR,
  712. AM_POTIONPITCHER,
  713. AM_CANNIBALIZE,
  714. AM_SPHEREMINE,
  715. AM_CP_WEAPON,
  716. AM_CP_SHIELD,
  717. AM_CP_ARMOR,
  718. AM_CP_HELM,
  719. AM_BIOETHICS,
  720. AM_BIOTECHNOLOGY,
  721. AM_CREATECREATURE,
  722. AM_CULTIVATION,
  723. AM_FLAMECONTROL,
  724. AM_CALLHOMUN,
  725. AM_REST,
  726. AM_DRILLMASTER,
  727. AM_HEALHOMUN,
  728. AM_RESURRECTHOMUN,
  729. CR_TRUST,
  730. CR_AUTOGUARD,
  731. CR_SHIELDCHARGE,
  732. CR_SHIELDBOOMERANG,
  733. CR_REFLECTSHIELD,
  734. CR_HOLYCROSS,
  735. CR_GRANDCROSS,
  736. CR_DEVOTION,
  737. CR_PROVIDENCE,
  738. CR_DEFENDER,
  739. CR_SPEARQUICKEN,
  740. MO_IRONHAND,
  741. MO_SPIRITSRECOVERY,
  742. MO_CALLSPIRITS,
  743. MO_ABSORBSPIRITS,
  744. MO_TRIPLEATTACK,
  745. MO_BODYRELOCATION,
  746. MO_DODGE,
  747. MO_INVESTIGATE,
  748. MO_FINGEROFFENSIVE,
  749. MO_STEELBODY,
  750. MO_BLADESTOP,
  751. MO_EXPLOSIONSPIRITS,
  752. MO_EXTREMITYFIST,
  753. MO_CHAINCOMBO,
  754. MO_COMBOFINISH,
  755. SA_ADVANCEDBOOK,
  756. SA_CASTCANCEL,
  757. SA_MAGICROD,
  758. SA_SPELLBREAKER,
  759. SA_FREECAST,
  760. SA_AUTOSPELL,
  761. SA_FLAMELAUNCHER,
  762. SA_FROSTWEAPON,
  763. SA_LIGHTNINGLOADER,
  764. SA_SEISMICWEAPON,
  765. SA_DRAGONOLOGY,
  766. SA_VOLCANO,
  767. SA_DELUGE,
  768. SA_VIOLENTGALE,
  769. SA_LANDPROTECTOR,
  770. SA_DISPELL,
  771. SA_ABRACADABRA,
  772. SA_MONOCELL,
  773. SA_CLASSCHANGE,
  774. SA_SUMMONMONSTER,
  775. SA_REVERSEORCISH,
  776. SA_DEATH,
  777. SA_FORTUNE,
  778. SA_TAMINGMONSTER,
  779. SA_QUESTION,
  780. SA_GRAVITY,
  781. SA_LEVELUP,
  782. SA_INSTANTDEATH,
  783. SA_FULLRECOVERY,
  784. SA_COMA,
  785. BD_ADAPTATION,
  786. BD_ENCORE,
  787. BD_LULLABY,
  788. BD_RICHMANKIM,
  789. BD_ETERNALCHAOS,
  790. BD_DRUMBATTLEFIELD,
  791. BD_RINGNIBELUNGEN,
  792. BD_ROKISWEIL,
  793. BD_INTOABYSS,
  794. BD_SIEGFRIED,
  795. BD_RAGNAROK,
  796. BA_MUSICALLESSON,
  797. BA_MUSICALSTRIKE,
  798. BA_DISSONANCE,
  799. BA_FROSTJOKER,
  800. BA_WHISTLE,
  801. BA_ASSASSINCROSS,
  802. BA_POEMBRAGI,
  803. BA_APPLEIDUN,
  804. DC_DANCINGLESSON,
  805. DC_THROWARROW,
  806. DC_UGLYDANCE,
  807. DC_SCREAM,
  808. DC_HUMMING,
  809. DC_DONTFORGETME,
  810. DC_FORTUNEKISS,
  811. DC_SERVICEFORYOU,
  812. NPC_RANDOMMOVE,
  813. NPC_SPEEDUP,
  814. NPC_REVENGE,
  815. WE_MALE,
  816. WE_FEMALE,
  817. WE_CALLPARTNER,
  818. ITM_TOMAHAWK,
  819. NPC_DARKCROSS,
  820. NPC_GRANDDARKNESS,
  821. NPC_DARKSTRIKE,
  822. NPC_DARKTHUNDER,
  823. NPC_STOP,
  824. NPC_WEAPONBRAKER,
  825. NPC_ARMORBRAKE,
  826. NPC_HELMBRAKE,
  827. NPC_SHIELDBRAKE,
  828. NPC_UNDEADATTACK,
  829. NPC_CHANGEUNDEAD,
  830. NPC_POWERUP,
  831. NPC_AGIUP,
  832. NPC_SIEGEMODE,
  833. NPC_CALLSLAVE,
  834. NPC_INVISIBLE,
  835. NPC_RUN,
  836. LK_AURABLADE,
  837. LK_PARRYING,
  838. LK_CONCENTRATION,
  839. LK_TENSIONRELAX,
  840. LK_BERSERK,
  841. LK_FURY,
  842. HP_ASSUMPTIO,
  843. HP_BASILICA,
  844. HP_MEDITATIO,
  845. HW_SOULDRAIN,
  846. HW_MAGICCRASHER,
  847. HW_MAGICPOWER,
  848. PA_PRESSURE,
  849. PA_SACRIFICE,
  850. PA_GOSPEL,
  851. CH_PALMSTRIKE,
  852. CH_TIGERFIST,
  853. CH_CHAINCRUSH,
  854. PF_HPCONVERSION,
  855. PF_SOULCHANGE,
  856. PF_SOULBURN,
  857. ASC_KATAR,
  858. ASC_HALLUCINATION,
  859. ASC_EDP,
  860. ASC_BREAKER,
  861. SN_SIGHT,
  862. SN_FALCONASSAULT,
  863. SN_SHARPSHOOTING,
  864. SN_WINDWALK,
  865. WS_MELTDOWN,
  866. WS_CREATECOIN,
  867. WS_CREATENUGGET,
  868. WS_CARTBOOST,
  869. WS_SYSTEMCREATE,
  870. ST_CHASEWALK,
  871. ST_REJECTSWORD,
  872. ST_STEALBACKPACK,
  873. CR_ALCHEMY,
  874. CR_SYNTHESISPOTION,
  875. CG_ARROWVULCAN,
  876. CG_MOONLIT,
  877. CG_MARIONETTE,
  878. LK_SPIRALPIERCE,
  879. LK_HEADCRUSH,
  880. LK_JOINTBEAT,
  881. HW_NAPALMVULCAN,
  882. CH_SOULCOLLECT,
  883. PF_MINDBREAKER,
  884. PF_MEMORIZE,
  885. PF_FOGWALL,
  886. PF_SPIDERWEB,
  887. ASC_METEORASSAULT,
  888. ASC_CDP,
  889. WE_BABY,
  890. WE_CALLPARENT,
  891. WE_CALLBABY,
  892. TK_RUN,
  893. TK_READYSTORM,
  894. TK_STORMKICK,
  895. TK_READYDOWN,
  896. TK_DOWNKICK,
  897. TK_READYTURN,
  898. TK_TURNKICK,
  899. TK_READYCOUNTER,
  900. TK_COUNTER,
  901. TK_DODGE,
  902. TK_JUMPKICK,
  903. TK_HPTIME,
  904. TK_SPTIME,
  905. TK_POWER,
  906. TK_SEVENWIND,
  907. TK_HIGHJUMP,
  908. SG_FEEL,
  909. SG_SUN_WARM,
  910. SG_MOON_WARM,
  911. SG_STAR_WARM,
  912. SG_SUN_COMFORT,
  913. SG_MOON_COMFORT,
  914. SG_STAR_COMFORT,
  915. SG_HATE,
  916. SG_SUN_ANGER,
  917. SG_MOON_ANGER,
  918. SG_STAR_ANGER,
  919. SG_SUN_BLESS,
  920. SG_MOON_BLESS,
  921. SG_STAR_BLESS,
  922. SG_DEVIL,
  923. SG_FRIEND,
  924. SG_KNOWLEDGE,
  925. SG_FUSION,
  926. SL_ALCHEMIST,
  927. AM_BERSERKPITCHER,
  928. SL_MONK,
  929. SL_STAR,
  930. SL_SAGE,
  931. SL_CRUSADER,
  932. SL_SUPERNOVICE,
  933. SL_KNIGHT,
  934. SL_WIZARD,
  935. SL_PRIEST,
  936. SL_BARDDANCER,
  937. SL_ROGUE,
  938. SL_ASSASIN,
  939. SL_BLACKSMITH,
  940. BS_ADRENALINE2,
  941. SL_HUNTER,
  942. SL_SOULLINKER,
  943. SL_KAIZEL,
  944. SL_KAAHI,
  945. SL_KAUPE,
  946. SL_KAITE,
  947. SL_KAINA,
  948. SL_STIN,
  949. SL_STUN,
  950. SL_SMA,
  951. SL_SWOO,
  952. SL_SKE,
  953. SL_SKA,
  954. SM_SELFPROVOKE,
  955. NPC_EMOTION_ON,
  956. ST_PRESERVE,
  957. ST_FULLSTRIP,
  958. WS_WEAPONREFINE,
  959. CR_SLIMPITCHER,
  960. CR_FULLPROTECTION,
  961. PA_SHIELDCHAIN,
  962. HP_MANARECHARGE,
  963. PF_DOUBLECASTING,
  964. HW_GANBANTEIN,
  965. HW_GRAVITATION,
  966. WS_CARTTERMINATION,
  967. WS_OVERTHRUSTMAX,
  968. CG_LONGINGFREEDOM,
  969. CG_HERMODE,
  970. CG_TAROTCARD,
  971. CR_ACIDDEMONSTRATION,
  972. CR_CULTIVATION,
  973. ITEM_ENCHANTARMS,
  974. TK_MISSION,
  975. SL_HIGH,
  976. KN_ONEHAND,
  977. AM_TWILIGHT1,
  978. AM_TWILIGHT2,
  979. AM_TWILIGHT3,
  980. HT_POWER,
  981. GS_GLITTERING,
  982. GS_FLING,
  983. GS_TRIPLEACTION,
  984. GS_BULLSEYE,
  985. GS_MADNESSCANCEL,
  986. GS_ADJUSTMENT,
  987. GS_INCREASING,
  988. GS_MAGICALBULLET,
  989. GS_CRACKER,
  990. GS_SINGLEACTION,
  991. GS_SNAKEEYE,
  992. GS_CHAINACTION,
  993. GS_TRACKING,
  994. GS_DISARM,
  995. GS_PIERCINGSHOT,
  996. GS_RAPIDSHOWER,
  997. GS_DESPERADO,
  998. GS_GATLINGFEVER,
  999. GS_DUST,
  1000. GS_FULLBUSTER,
  1001. GS_SPREADATTACK,
  1002. GS_GROUNDDRIFT,
  1003. NJ_TOBIDOUGU,
  1004. NJ_SYURIKEN,
  1005. NJ_KUNAI,
  1006. NJ_HUUMA,
  1007. NJ_ZENYNAGE,
  1008. NJ_TATAMIGAESHI,
  1009. NJ_KASUMIKIRI,
  1010. NJ_SHADOWJUMP,
  1011. NJ_KIRIKAGE,
  1012. NJ_UTSUSEMI,
  1013. NJ_BUNSINJYUTSU,
  1014. NJ_NINPOU,
  1015. NJ_KOUENKA,
  1016. NJ_KAENSIN,
  1017. NJ_BAKUENRYU,
  1018. NJ_HYOUSENSOU,
  1019. NJ_SUITON,
  1020. NJ_HYOUSYOURAKU,
  1021. NJ_HUUJIN,
  1022. NJ_RAIGEKISAI,
  1023. NJ_KAMAITACHI,
  1024. NJ_NEN,
  1025. NJ_ISSEN,
  1026. MB_FIGHTING,
  1027. MB_NEUTRAL,
  1028. MB_TAIMING_PUTI,
  1029. MB_WHITEPOTION,
  1030. MB_MENTAL,
  1031. MB_CARDPITCHER,
  1032. MB_PETPITCHER,
  1033. MB_BODYSTUDY,
  1034. MB_BODYALTER,
  1035. MB_PETMEMORY,
  1036. MB_M_TELEPORT,
  1037. MB_B_GAIN,
  1038. MB_M_GAIN,
  1039. MB_MISSION,
  1040. MB_MUNAKKNOWLEDGE,
  1041. MB_MUNAKBALL,
  1042. MB_SCROLL,
  1043. MB_B_GATHERING,
  1044. MB_M_GATHERING,
  1045. MB_B_EXCLUDE,
  1046. MB_B_DRIFT,
  1047. MB_B_WALLRUSH,
  1048. MB_M_WALLRUSH,
  1049. MB_B_WALLSHIFT,
  1050. MB_M_WALLCRASH,
  1051. MB_M_REINCARNATION,
  1052. MB_B_EQUIP,
  1053. SL_DEATHKNIGHT,
  1054. SL_COLLECTOR,
  1055. SL_NINJA,
  1056. SL_GUNNER,
  1057. AM_TWILIGHT4,
  1058. DA_RESET,
  1059. DE_BERSERKAIZER,
  1060. DA_DARKPOWER,
  1061. DE_PASSIVE,
  1062. DE_PATTACK,
  1063. DE_PSPEED,
  1064. DE_PDEFENSE,
  1065. DE_PCRITICAL,
  1066. DE_PHP,
  1067. DE_PSP,
  1068. DE_RESET,
  1069. DE_RANKING,
  1070. DE_PTRIPLE,
  1071. DE_ENERGY,
  1072. DE_NIGHTMARE,
  1073. DE_SLASH,
  1074. DE_COIL,
  1075. DE_WAVE,
  1076. DE_REBIRTH,
  1077. DE_AURA,
  1078. DE_FREEZER,
  1079. DE_CHANGEATTACK,
  1080. DE_PUNISH,
  1081. DE_POISON,
  1082. DE_INSTANT,
  1083. DE_WARNING,
  1084. DE_RANKEDKNIFE,
  1085. DE_RANKEDGRADIUS,
  1086. DE_GAUGE,
  1087. DE_GTIME,
  1088. DE_GPAIN,
  1089. DE_GSKILL,
  1090. DE_GKILL,
  1091. DE_ACCEL,
  1092. DE_BLOCKDOUBLE,
  1093. DE_BLOCKMELEE,
  1094. DE_BLOCKFAR,
  1095. DE_FRONTATTACK,
  1096. DE_DANGERATTACK,
  1097. DE_TWINATTACK,
  1098. DE_WINDATTACK,
  1099. DE_WATERATTACK,
  1100. DA_ENERGY,
  1101. DA_CLOUD,
  1102. DA_FIRSTSLOT,
  1103. DA_HEADDEF,
  1104. DA_SPACE,
  1105. DA_TRANSFORM,
  1106. DA_EXPLOSION,
  1107. DA_REWARD,
  1108. DA_CRUSH,
  1109. DA_ITEMREBUILD,
  1110. DA_ILLUSION,
  1111. DA_NUETRALIZE,
  1112. DA_RUNNER,
  1113. DA_TRANSFER,
  1114. DA_WALL,
  1115. DA_ZENY,
  1116. DA_REVENGE,
  1117. DA_EARPLUG,
  1118. DA_CONTRACT,
  1119. DA_BLACK,
  1120. DA_DREAM,
  1121. DA_MAGICCART,
  1122. DA_COPY,
  1123. DA_CRYSTAL,
  1124. DA_EXP,
  1125. DA_CARTSWING,
  1126. DA_REBUILD,
  1127. DA_JOBCHANGE,
  1128. DA_EDARKNESS,
  1129. DA_EGUARDIAN,
  1130. DA_TIMEOUT,
  1131. ALL_TIMEIN,
  1132. DA_ZENYRANK,
  1133. DA_ACCESSORYMIX,
  1134. NPC_EARTHQUAKE,
  1135. NPC_FIREBREATH,
  1136. NPC_ICEBREATH,
  1137. NPC_THUNDERBREATH,
  1138. NPC_ACIDBREATH,
  1139. NPC_DARKNESSBREATH,
  1140. NPC_DRAGONFEAR,
  1141. NPC_BLEEDING,
  1142. NPC_PULSESTRIKE,
  1143. NPC_HELLJUDGEMENT,
  1144. NPC_WIDESILENCE,
  1145. NPC_WIDEFREEZE,
  1146. NPC_WIDEBLEEDING,
  1147. NPC_WIDESTONE,
  1148. NPC_WIDECONFUSE,
  1149. NPC_WIDESLEEP,
  1150. NPC_WIDESIGHT,
  1151. NPC_EVILLAND,
  1152. NPC_MAGICMIRROR,
  1153. NPC_SLOWCAST,
  1154. NPC_CRITICALWOUND,
  1155. NPC_EXPULSION,
  1156. NPC_STONESKIN,
  1157. NPC_ANTIMAGIC,
  1158. NPC_WIDECURSE,
  1159. NPC_WIDESTUN,
  1160. NPC_VAMPIRE_GIFT,
  1161. NPC_WIDESOULDRAIN,
  1162. ALL_INCCARRY,
  1163. NPC_TALK,
  1164. NPC_HELLPOWER,
  1165. NPC_WIDEHELLDIGNITY,
  1166. NPC_INVINCIBLE,
  1167. NPC_INVINCIBLEOFF,
  1168. NPC_ALLHEAL,
  1169. GM_SANDMAN,
  1170. CASH_BLESSING,
  1171. CASH_INCAGI,
  1172. CASH_ASSUMPTIO,
  1173. ALL_CATCRY,
  1174. ALL_PARTYFLEE,
  1175. ALL_ANGEL_PROTECT,
  1176. ALL_DREAM_SUMMERNIGHT,
  1177. NPC_CHANGEUNDEAD2,
  1178. ALL_REVERSEORCISH,
  1179. ALL_WEWISH,
  1180. ALL_SONKRAN,
  1181. NPC_WIDEHEALTHFEAR,
  1182. NPC_WIDEBODYBURNNING,
  1183. NPC_WIDEFROSTMISTY,
  1184. NPC_WIDECOLD,
  1185. NPC_WIDE_DEEP_SLEEP,
  1186. NPC_WIDESIREN,
  1187. NPC_VENOMFOG,
  1188. NPC_MILLENNIUMSHIELD,
  1189. NPC_COMET,
  1190. NPC_ICEMINE,
  1191. NPC_ICEEXPLO,
  1192. NPC_FLAMECROSS,
  1193. NPC_PULSESTRIKE2,
  1194. NPC_DANCINGBLADE,
  1195. NPC_DANCINGBLADE_ATK,
  1196. NPC_DARKPIERCING,
  1197. NPC_MAXPAIN,
  1198. NPC_MAXPAIN_ATK,
  1199. NPC_DEATHSUMMON,
  1200. NPC_HELLBURNING,
  1201. NPC_JACKFROST,
  1202. NPC_WIDEWEB,
  1203. NPC_WIDESUCK,
  1204. NPC_STORMGUST2,
  1205. NPC_FIRESTORM,
  1206. NPC_REVERBERATION,
  1207. NPC_REVERBERATION_ATK,
  1208. NPC_LEX_AETERNA,
  1209. KN_CHARGEATK = 1001,
  1210. CR_SHRINK,
  1211. AS_SONICACCEL,
  1212. AS_VENOMKNIFE,
  1213. RG_CLOSECONFINE,
  1214. WZ_SIGHTBLASTER,
  1215. SA_CREATECON,
  1216. SA_ELEMENTWATER,
  1217. HT_PHANTASMIC,
  1218. BA_PANGVOICE,
  1219. DC_WINKCHARM,
  1220. BS_UNFAIRLYTRICK,
  1221. BS_GREED,
  1222. PR_REDEMPTIO,
  1223. MO_KITRANSLATION,
  1224. MO_BALKYOUNG,
  1225. SA_ELEMENTGROUND,
  1226. SA_ELEMENTFIRE,
  1227. SA_ELEMENTWIND,
  1228. RK_ENCHANTBLADE = 2001,
  1229. RK_SONICWAVE,
  1230. RK_DEATHBOUND,
  1231. RK_HUNDREDSPEAR,
  1232. RK_WINDCUTTER,
  1233. RK_IGNITIONBREAK,
  1234. RK_DRAGONTRAINING,
  1235. RK_DRAGONBREATH,
  1236. RK_DRAGONHOWLING,
  1237. RK_RUNEMASTERY,
  1238. RK_MILLENNIUMSHIELD,
  1239. RK_CRUSHSTRIKE,
  1240. RK_REFRESH,
  1241. RK_GIANTGROWTH,
  1242. RK_STONEHARDSKIN,
  1243. RK_VITALITYACTIVATION,
  1244. RK_STORMBLAST,
  1245. RK_FIGHTINGSPIRIT,
  1246. RK_ABUNDANCE,
  1247. RK_PHANTOMTHRUST,
  1248. GC_VENOMIMPRESS,
  1249. GC_CROSSIMPACT,
  1250. GC_DARKILLUSION,
  1251. GC_RESEARCHNEWPOISON,
  1252. GC_CREATENEWPOISON,
  1253. GC_ANTIDOTE,
  1254. GC_POISONINGWEAPON,
  1255. GC_WEAPONBLOCKING,
  1256. GC_COUNTERSLASH,
  1257. GC_WEAPONCRUSH,
  1258. GC_VENOMPRESSURE,
  1259. GC_POISONSMOKE,
  1260. GC_CLOAKINGEXCEED,
  1261. GC_PHANTOMMENACE,
  1262. GC_HALLUCINATIONWALK,
  1263. GC_ROLLINGCUTTER,
  1264. GC_CROSSRIPPERSLASHER,
  1265. AB_JUDEX,
  1266. AB_ANCILLA,
  1267. AB_ADORAMUS,
  1268. AB_CLEMENTIA,
  1269. AB_CANTO,
  1270. AB_CHEAL,
  1271. AB_EPICLESIS,
  1272. AB_PRAEFATIO,
  1273. AB_ORATIO,
  1274. AB_LAUDAAGNUS,
  1275. AB_LAUDARAMUS,
  1276. AB_EUCHARISTICA,
  1277. AB_RENOVATIO,
  1278. AB_HIGHNESSHEAL,
  1279. AB_CLEARANCE,
  1280. AB_EXPIATIO,
  1281. AB_DUPLELIGHT,
  1282. AB_DUPLELIGHT_MELEE,
  1283. AB_DUPLELIGHT_MAGIC,
  1284. AB_SILENTIUM,
  1285. WL_WHITEIMPRISON = 2201,
  1286. WL_SOULEXPANSION,
  1287. WL_FROSTMISTY,
  1288. WL_JACKFROST,
  1289. WL_MARSHOFABYSS,
  1290. WL_RECOGNIZEDSPELL,
  1291. WL_SIENNAEXECRATE,
  1292. WL_RADIUS,
  1293. WL_STASIS,
  1294. WL_DRAINLIFE,
  1295. WL_CRIMSONROCK,
  1296. WL_HELLINFERNO,
  1297. WL_COMET,
  1298. WL_CHAINLIGHTNING,
  1299. WL_CHAINLIGHTNING_ATK,
  1300. WL_EARTHSTRAIN,
  1301. WL_TETRAVORTEX,
  1302. WL_TETRAVORTEX_FIRE,
  1303. WL_TETRAVORTEX_WATER,
  1304. WL_TETRAVORTEX_WIND,
  1305. WL_TETRAVORTEX_GROUND,
  1306. WL_SUMMONFB,
  1307. WL_SUMMONBL,
  1308. WL_SUMMONWB,
  1309. WL_SUMMON_ATK_FIRE,
  1310. WL_SUMMON_ATK_WIND,
  1311. WL_SUMMON_ATK_WATER,
  1312. WL_SUMMON_ATK_GROUND,
  1313. WL_SUMMONSTONE,
  1314. WL_RELEASE,
  1315. WL_READING_SB,
  1316. WL_FREEZE_SP,
  1317. RA_ARROWSTORM,
  1318. RA_FEARBREEZE,
  1319. RA_RANGERMAIN,
  1320. RA_AIMEDBOLT,
  1321. RA_DETONATOR,
  1322. RA_ELECTRICSHOCKER,
  1323. RA_CLUSTERBOMB,
  1324. RA_WUGMASTERY,
  1325. RA_WUGRIDER,
  1326. RA_WUGDASH,
  1327. RA_WUGSTRIKE,
  1328. RA_WUGBITE,
  1329. RA_TOOTHOFWUG,
  1330. RA_SENSITIVEKEEN,
  1331. RA_CAMOUFLAGE,
  1332. RA_RESEARCHTRAP,
  1333. RA_MAGENTATRAP,
  1334. RA_COBALTTRAP,
  1335. RA_MAIZETRAP,
  1336. RA_VERDURETRAP,
  1337. RA_FIRINGTRAP,
  1338. RA_ICEBOUNDTRAP,
  1339. NC_MADOLICENCE,
  1340. NC_BOOSTKNUCKLE,
  1341. NC_PILEBUNKER,
  1342. NC_VULCANARM,
  1343. NC_FLAMELAUNCHER,
  1344. NC_COLDSLOWER,
  1345. NC_ARMSCANNON,
  1346. NC_ACCELERATION,
  1347. NC_HOVERING,
  1348. NC_F_SIDESLIDE,
  1349. NC_B_SIDESLIDE,
  1350. NC_MAINFRAME,
  1351. NC_SELFDESTRUCTION,
  1352. NC_SHAPESHIFT,
  1353. NC_EMERGENCYCOOL,
  1354. NC_INFRAREDSCAN,
  1355. NC_ANALYZE,
  1356. NC_MAGNETICFIELD,
  1357. NC_NEUTRALBARRIER,
  1358. NC_STEALTHFIELD,
  1359. NC_REPAIR,
  1360. NC_TRAININGAXE,
  1361. NC_RESEARCHFE,
  1362. NC_AXEBOOMERANG,
  1363. NC_POWERSWING,
  1364. NC_AXETORNADO,
  1365. NC_SILVERSNIPER,
  1366. NC_MAGICDECOY,
  1367. NC_DISJOINT,
  1368. SC_FATALMENACE,
  1369. SC_REPRODUCE,
  1370. SC_AUTOSHADOWSPELL,
  1371. SC_SHADOWFORM,
  1372. SC_TRIANGLESHOT,
  1373. SC_BODYPAINT,
  1374. SC_INVISIBILITY,
  1375. SC_DEADLYINFECT,
  1376. SC_ENERVATION,
  1377. SC_GROOMY,
  1378. SC_IGNORANCE,
  1379. SC_LAZINESS,
  1380. SC_UNLUCKY,
  1381. SC_WEAKNESS,
  1382. SC_STRIPACCESSARY,
  1383. SC_MANHOLE,
  1384. SC_DIMENSIONDOOR,
  1385. SC_CHAOSPANIC,
  1386. SC_MAELSTROM,
  1387. SC_BLOODYLUST,
  1388. SC_FEINTBOMB,
  1389. LG_CANNONSPEAR = 2307,
  1390. LG_BANISHINGPOINT,
  1391. LG_TRAMPLE,
  1392. LG_SHIELDPRESS,
  1393. LG_REFLECTDAMAGE,
  1394. LG_PINPOINTATTACK,
  1395. LG_FORCEOFVANGUARD,
  1396. LG_RAGEBURST,
  1397. LG_SHIELDSPELL,
  1398. LG_EXEEDBREAK,
  1399. LG_OVERBRAND,
  1400. LG_PRESTIGE,
  1401. LG_BANDING,
  1402. LG_MOONSLASHER,
  1403. LG_RAYOFGENESIS,
  1404. LG_PIETY,
  1405. LG_EARTHDRIVE,
  1406. LG_HESPERUSLIT,
  1407. LG_INSPIRATION,
  1408. SR_DRAGONCOMBO,
  1409. SR_SKYNETBLOW,
  1410. SR_EARTHSHAKER,
  1411. SR_FALLENEMPIRE,
  1412. SR_TIGERCANNON,
  1413. SR_HELLGATE,
  1414. SR_RAMPAGEBLASTER,
  1415. SR_CRESCENTELBOW,
  1416. SR_CURSEDCIRCLE,
  1417. SR_LIGHTNINGWALK,
  1418. SR_KNUCKLEARROW,
  1419. SR_WINDMILL,
  1420. SR_RAISINGDRAGON,
  1421. SR_GENTLETOUCH,
  1422. SR_ASSIMILATEPOWER,
  1423. SR_POWERVELOCITY,
  1424. SR_CRESCENTELBOW_AUTOSPELL,
  1425. SR_GATEOFHELL,
  1426. SR_GENTLETOUCH_QUIET,
  1427. SR_GENTLETOUCH_CURE,
  1428. SR_GENTLETOUCH_ENERGYGAIN,
  1429. SR_GENTLETOUCH_CHANGE,
  1430. SR_GENTLETOUCH_REVITALIZE,
  1431. WA_SWING_DANCE = 2350,
  1432. WA_SYMPHONY_OF_LOVER,
  1433. WA_MOONLIT_SERENADE,
  1434. MI_RUSH_WINDMILL = 2381,
  1435. MI_ECHOSONG,
  1436. MI_HARMONIZE,
  1437. WM_LESSON = 2412,
  1438. WM_METALICSOUND,
  1439. WM_REVERBERATION,
  1440. WM_REVERBERATION_MELEE,
  1441. WM_REVERBERATION_MAGIC,
  1442. WM_DOMINION_IMPULSE,
  1443. WM_SEVERE_RAINSTORM,
  1444. WM_POEMOFNETHERWORLD,
  1445. WM_VOICEOFSIREN,
  1446. WM_DEADHILLHERE,
  1447. WM_LULLABY_DEEPSLEEP,
  1448. WM_SIRCLEOFNATURE,
  1449. WM_RANDOMIZESPELL,
  1450. WM_GLOOMYDAY,
  1451. WM_GREAT_ECHO,
  1452. WM_SONG_OF_MANA,
  1453. WM_DANCE_WITH_WUG,
  1454. WM_SOUND_OF_DESTRUCTION,
  1455. WM_SATURDAY_NIGHT_FEVER,
  1456. WM_LERADS_DEW,
  1457. WM_MELODYOFSINK,
  1458. WM_BEYOND_OF_WARCRY,
  1459. WM_UNLIMITED_HUMMING_VOICE,
  1460. SO_FIREWALK = 2443,
  1461. SO_ELECTRICWALK,
  1462. SO_SPELLFIST,
  1463. SO_EARTHGRAVE,
  1464. SO_DIAMONDDUST,
  1465. SO_POISON_BUSTER,
  1466. SO_PSYCHIC_WAVE,
  1467. SO_CLOUD_KILL,
  1468. SO_STRIKING,
  1469. SO_WARMER,
  1470. SO_VACUUM_EXTREME,
  1471. SO_VARETYR_SPEAR,
  1472. SO_ARRULLO,
  1473. SO_EL_CONTROL,
  1474. SO_SUMMON_AGNI,
  1475. SO_SUMMON_AQUA,
  1476. SO_SUMMON_VENTUS,
  1477. SO_SUMMON_TERA,
  1478. SO_EL_ACTION,
  1479. SO_EL_ANALYSIS,
  1480. SO_EL_SYMPATHY,
  1481. SO_EL_CURE,
  1482. SO_FIRE_INSIGNIA,
  1483. SO_WATER_INSIGNIA,
  1484. SO_WIND_INSIGNIA,
  1485. SO_EARTH_INSIGNIA,
  1486. GN_TRAINING_SWORD = 2474,
  1487. GN_REMODELING_CART,
  1488. GN_CART_TORNADO,
  1489. GN_CARTCANNON,
  1490. GN_CARTBOOST,
  1491. GN_THORNS_TRAP,
  1492. GN_BLOOD_SUCKER,
  1493. GN_SPORE_EXPLOSION,
  1494. GN_WALLOFTHORN,
  1495. GN_CRAZYWEED,
  1496. GN_CRAZYWEED_ATK,
  1497. GN_DEMONIC_FIRE,
  1498. GN_FIRE_EXPANSION,
  1499. GN_FIRE_EXPANSION_SMOKE_POWDER,
  1500. GN_FIRE_EXPANSION_TEAR_GAS,
  1501. GN_FIRE_EXPANSION_ACID,
  1502. GN_HELLS_PLANT,
  1503. GN_HELLS_PLANT_ATK,
  1504. GN_MANDRAGORA,
  1505. GN_SLINGITEM,
  1506. GN_CHANGEMATERIAL,
  1507. GN_MIX_COOKING,
  1508. GN_MAKEBOMB,
  1509. GN_S_PHARMACY,
  1510. GN_SLINGITEM_RANGEMELEEATK,
  1511. AB_SECRAMENT = 2515,
  1512. WM_SEVERE_RAINSTORM_MELEE,
  1513. SR_HOWLINGOFLION,
  1514. SR_RIDEINLIGHTNING,
  1515. LG_OVERBRAND_BRANDISH,
  1516. LG_OVERBRAND_PLUSATK,
  1517. ALL_ODINS_RECALL = 2533,
  1518. RETURN_TO_ELDICASTES,
  1519. ALL_BUYING_STORE,
  1520. ALL_GUARDIAN_RECALL,
  1521. ALL_ODINS_POWER,
  1522. BEER_BOTTLE_CAP,
  1523. NPC_ASSASSINCROSS,
  1524. NPC_DISSONANCE,
  1525. NPC_UGLYDANCE,
  1526. ALL_TETANY,
  1527. ALL_RAY_OF_PROTECTION,
  1528. MC_CARTDECORATE,
  1529. GM_ITEM_ATKMAX,
  1530. GM_ITEM_ATKMIN,
  1531. GM_ITEM_MATKMAX,
  1532. GM_ITEM_MATKMIN,
  1533. RL_GLITTERING_GREED = 2551,
  1534. RL_RICHS_COIN,
  1535. RL_MASS_SPIRAL,
  1536. RL_BANISHING_BUSTER,
  1537. RL_B_TRAP,
  1538. RL_FLICKER,
  1539. RL_S_STORM,
  1540. RL_E_CHAIN,
  1541. RL_QD_SHOT,
  1542. RL_C_MARKER,
  1543. RL_FIREDANCE,
  1544. RL_H_MINE,
  1545. RL_P_ALTER,
  1546. RL_FALLEN_ANGEL,
  1547. RL_R_TRIP,
  1548. RL_D_TAIL,
  1549. RL_FIRE_RAIN,
  1550. RL_HEAT_BARREL,
  1551. RL_AM_BLAST,
  1552. RL_SLUGSHOT,
  1553. RL_HAMMER_OF_GOD,
  1554. RL_R_TRIP_PLUSATK,
  1555. RL_B_FLICKER_ATK,
  1556. RL_GLITTERING_GREED_ATK,
  1557. KO_YAMIKUMO = 3001,
  1558. KO_RIGHT,
  1559. KO_LEFT,
  1560. KO_JYUMONJIKIRI,
  1561. KO_SETSUDAN,
  1562. KO_BAKURETSU,
  1563. KO_HAPPOKUNAI,
  1564. KO_MUCHANAGE,
  1565. KO_HUUMARANKA,
  1566. KO_MAKIBISHI,
  1567. KO_MEIKYOUSISUI,
  1568. KO_ZANZOU,
  1569. KO_KYOUGAKU,
  1570. KO_JYUSATSU,
  1571. KO_KAHU_ENTEN,
  1572. KO_HYOUHU_HUBUKI,
  1573. KO_KAZEHU_SEIRAN,
  1574. KO_DOHU_KOUKAI,
  1575. KO_KAIHOU,
  1576. KO_ZENKAI,
  1577. KO_GENWAKU,
  1578. KO_IZAYOI,
  1579. KG_KAGEHUMI,
  1580. KG_KYOMU,
  1581. KG_KAGEMUSYA,
  1582. OB_ZANGETSU,
  1583. OB_OBOROGENSOU,
  1584. OB_OBOROGENSOU_TRANSITION_ATK,
  1585. OB_AKAITSUKI,
  1586. ECL_SNOWFLIP = 3031,
  1587. ECL_PEONYMAMY,
  1588. ECL_SADAGUI,
  1589. ECL_SEQUOIADUST,
  1590. ECLAGE_RECALL,
  1591. GC_DARKCROW = 5001,
  1592. RA_UNLIMIT,
  1593. GN_ILLUSIONDOPING,
  1594. RK_DRAGONBREATH_WATER,
  1595. RK_LUXANIMA,
  1596. NC_MAGMA_ERUPTION,
  1597. WM_FRIGG_SONG,
  1598. SO_ELEMENTAL_SHIELD,
  1599. SR_FLASHCOMBO,
  1600. SC_ESCAPE,
  1601. AB_OFFERTORIUM,
  1602. WL_TELEKINESIS_INTENSE,
  1603. LG_KINGS_GRACE,
  1604. ALL_FULL_THROTTLE,
  1605. SR_FLASHCOMBO_ATK_STEP1, // SR_DRAGONCOMBO
  1606. SR_FLASHCOMBO_ATK_STEP2, // SR_FALLENEMPIRE
  1607. SR_FLASHCOMBO_ATK_STEP3, // SR_TIGERCANNON
  1608. SR_FLASHCOMBO_ATK_STEP4, // SR_SKYNETBLOW
  1609. HLIF_HEAL = 8001,
  1610. HLIF_AVOID,
  1611. HLIF_BRAIN,
  1612. HLIF_CHANGE,
  1613. HAMI_CASTLE,
  1614. HAMI_DEFENCE,
  1615. HAMI_SKIN,
  1616. HAMI_BLOODLUST,
  1617. HFLI_MOON,
  1618. HFLI_FLEET,
  1619. HFLI_SPEED,
  1620. HFLI_SBR44,
  1621. HVAN_CAPRICE,
  1622. HVAN_CHAOTIC,
  1623. HVAN_INSTRUCT,
  1624. HVAN_EXPLOSION,
  1625. MUTATION_BASEJOB,
  1626. MH_SUMMON_LEGION,
  1627. MH_NEEDLE_OF_PARALYZE,
  1628. MH_POISON_MIST,
  1629. MH_PAIN_KILLER,
  1630. MH_LIGHT_OF_REGENE,
  1631. MH_OVERED_BOOST,
  1632. MH_ERASER_CUTTER,
  1633. MH_XENO_SLASHER,
  1634. MH_SILENT_BREEZE,
  1635. MH_STYLE_CHANGE,
  1636. MH_SONIC_CRAW,
  1637. MH_SILVERVEIN_RUSH,
  1638. MH_MIDNIGHT_FRENZY,
  1639. MH_STAHL_HORN,
  1640. MH_GOLDENE_FERSE,
  1641. MH_STEINWAND,
  1642. MH_HEILIGE_STANGE,
  1643. MH_ANGRIFFS_MODUS,
  1644. MH_TINDER_BREAKER,
  1645. MH_CBC,
  1646. MH_EQC,
  1647. MH_MAGMA_FLOW,
  1648. MH_GRANITIC_ARMOR,
  1649. MH_LAVA_SLIDE,
  1650. MH_PYROCLASTIC,
  1651. MH_VOLCANIC_ASH,
  1652. MS_BASH = 8201,
  1653. MS_MAGNUM,
  1654. MS_BOWLINGBASH,
  1655. MS_PARRYING,
  1656. MS_REFLECTSHIELD,
  1657. MS_BERSERK,
  1658. MA_DOUBLE,
  1659. MA_SHOWER,
  1660. MA_SKIDTRAP,
  1661. MA_LANDMINE,
  1662. MA_SANDMAN,
  1663. MA_FREEZINGTRAP,
  1664. MA_REMOVETRAP,
  1665. MA_CHARGEARROW,
  1666. MA_SHARPSHOOTING,
  1667. ML_PIERCE,
  1668. ML_BRANDISH,
  1669. ML_SPIRALPIERCE,
  1670. ML_DEFENDER,
  1671. ML_AUTOGUARD,
  1672. ML_DEVOTION,
  1673. MER_MAGNIFICAT,
  1674. MER_QUICKEN,
  1675. MER_SIGHT,
  1676. MER_CRASH,
  1677. MER_REGAIN,
  1678. MER_TENDER,
  1679. MER_BENEDICTION,
  1680. MER_RECUPERATE,
  1681. MER_MENTALCURE,
  1682. MER_COMPRESS,
  1683. MER_PROVOKE,
  1684. MER_AUTOBERSERK,
  1685. MER_DECAGI,
  1686. MER_SCAPEGOAT,
  1687. MER_LEXDIVINA,
  1688. MER_ESTIMATION,
  1689. MER_KYRIE,
  1690. MER_BLESSING,
  1691. MER_INCAGI,
  1692. MER_INVINCIBLEOFF2,
  1693. EL_CIRCLE_OF_FIRE = 8401,
  1694. EL_FIRE_CLOAK,
  1695. EL_FIRE_MANTLE,
  1696. EL_WATER_SCREEN,
  1697. EL_WATER_DROP,
  1698. EL_WATER_BARRIER,
  1699. EL_WIND_STEP,
  1700. EL_WIND_CURTAIN,
  1701. EL_ZEPHYR,
  1702. EL_SOLID_SKIN,
  1703. EL_STONE_SHIELD,
  1704. EL_POWER_OF_GAIA,
  1705. EL_PYROTECHNIC,
  1706. EL_HEATER,
  1707. EL_TROPIC,
  1708. EL_AQUAPLAY,
  1709. EL_COOLER,
  1710. EL_CHILLY_AIR,
  1711. EL_GUST,
  1712. EL_BLAST,
  1713. EL_WILD_STORM,
  1714. EL_PETROLOGY,
  1715. EL_CURSED_SOIL,
  1716. EL_UPHEAVAL,
  1717. EL_FIRE_ARROW,
  1718. EL_FIRE_BOMB,
  1719. EL_FIRE_BOMB_ATK,
  1720. EL_FIRE_WAVE,
  1721. EL_FIRE_WAVE_ATK,
  1722. EL_ICE_NEEDLE,
  1723. EL_WATER_SCREW,
  1724. EL_WATER_SCREW_ATK,
  1725. EL_TIDAL_WEAPON,
  1726. EL_WIND_SLASH,
  1727. EL_HURRICANE,
  1728. EL_HURRICANE_ATK,
  1729. EL_TYPOON_MIS,
  1730. EL_TYPOON_MIS_ATK,
  1731. EL_STONE_HAMMER,
  1732. EL_ROCK_CRUSHER,
  1733. EL_ROCK_CRUSHER_ATK,
  1734. EL_STONE_RAIN,
  1735. };
  1736. /// The client view ids for land skills.
  1737. enum s_skill_unit_id {
  1738. UNT_SAFETYWALL = 0x7e,
  1739. UNT_FIREWALL,
  1740. UNT_WARP_WAITING,
  1741. UNT_WARP_ACTIVE,
  1742. UNT_BENEDICTIO, //TODO
  1743. UNT_SANCTUARY,
  1744. UNT_MAGNUS,
  1745. UNT_PNEUMA,
  1746. UNT_DUMMYSKILL, //These show no effect on the client
  1747. UNT_FIREPILLAR_WAITING,
  1748. UNT_FIREPILLAR_ACTIVE,
  1749. UNT_HIDDEN_TRAP, //TODO
  1750. UNT_TRAP, //TODO
  1751. UNT_HIDDEN_WARP_NPC, //TODO
  1752. UNT_USED_TRAPS,
  1753. UNT_ICEWALL,
  1754. UNT_QUAGMIRE,
  1755. UNT_BLASTMINE,
  1756. UNT_SKIDTRAP,
  1757. UNT_ANKLESNARE,
  1758. UNT_VENOMDUST,
  1759. UNT_LANDMINE,
  1760. UNT_SHOCKWAVE,
  1761. UNT_SANDMAN,
  1762. UNT_FLASHER,
  1763. UNT_FREEZINGTRAP,
  1764. UNT_CLAYMORETRAP,
  1765. UNT_TALKIEBOX,
  1766. UNT_VOLCANO,
  1767. UNT_DELUGE,
  1768. UNT_VIOLENTGALE,
  1769. UNT_LANDPROTECTOR,
  1770. UNT_LULLABY,
  1771. UNT_RICHMANKIM,
  1772. UNT_ETERNALCHAOS,
  1773. UNT_DRUMBATTLEFIELD,
  1774. UNT_RINGNIBELUNGEN,
  1775. UNT_ROKISWEIL,
  1776. UNT_INTOABYSS,
  1777. UNT_SIEGFRIED,
  1778. UNT_DISSONANCE,
  1779. UNT_WHISTLE,
  1780. UNT_ASSASSINCROSS,
  1781. UNT_POEMBRAGI,
  1782. UNT_APPLEIDUN,
  1783. UNT_UGLYDANCE,
  1784. UNT_HUMMING,
  1785. UNT_DONTFORGETME,
  1786. UNT_FORTUNEKISS,
  1787. UNT_SERVICEFORYOU,
  1788. UNT_GRAFFITI,
  1789. UNT_DEMONSTRATION,
  1790. UNT_CALLFAMILY,
  1791. UNT_GOSPEL,
  1792. UNT_BASILICA,
  1793. UNT_MOONLIT,
  1794. UNT_FOGWALL,
  1795. UNT_SPIDERWEB,
  1796. UNT_GRAVITATION,
  1797. UNT_HERMODE,
  1798. UNT_KAENSIN, //TODO
  1799. UNT_SUITON,
  1800. UNT_TATAMIGAESHI,
  1801. UNT_KAEN,
  1802. UNT_GROUNDDRIFT_WIND,
  1803. UNT_GROUNDDRIFT_DARK,
  1804. UNT_GROUNDDRIFT_POISON,
  1805. UNT_GROUNDDRIFT_WATER,
  1806. UNT_GROUNDDRIFT_FIRE,
  1807. UNT_DEATHWAVE, //TODO
  1808. UNT_WATERATTACK, //TODO
  1809. UNT_WINDATTACK, //TODO
  1810. UNT_EARTHQUAKE, //TODO
  1811. UNT_EVILLAND,
  1812. UNT_DARK_RUNNER, //TODO
  1813. UNT_DARK_TRANSFER, //TODO
  1814. UNT_EPICLESIS,
  1815. UNT_EARTHSTRAIN,
  1816. UNT_MANHOLE,
  1817. UNT_DIMENSIONDOOR,
  1818. UNT_CHAOSPANIC,
  1819. UNT_MAELSTROM,
  1820. UNT_BLOODYLUST,
  1821. UNT_FEINTBOMB,
  1822. UNT_MAGENTATRAP,
  1823. UNT_COBALTTRAP,
  1824. UNT_MAIZETRAP,
  1825. UNT_VERDURETRAP,
  1826. UNT_FIRINGTRAP,
  1827. UNT_ICEBOUNDTRAP,
  1828. UNT_ELECTRICSHOCKER,
  1829. UNT_CLUSTERBOMB,
  1830. UNT_REVERBERATION,
  1831. UNT_SEVERE_RAINSTORM,
  1832. UNT_FIREWALK,
  1833. UNT_ELECTRICWALK,
  1834. UNT_NETHERWORLD,
  1835. UNT_PSYCHIC_WAVE,
  1836. UNT_CLOUD_KILL,
  1837. UNT_POISONSMOKE,
  1838. UNT_NEUTRALBARRIER,
  1839. UNT_STEALTHFIELD,
  1840. UNT_WARMER,
  1841. UNT_THORNS_TRAP,
  1842. UNT_WALLOFTHORN,
  1843. UNT_DEMONIC_FIRE,
  1844. UNT_FIRE_EXPANSION_SMOKE_POWDER,
  1845. UNT_FIRE_EXPANSION_TEAR_GAS,
  1846. UNT_HELLS_PLANT,
  1847. UNT_VACUUM_EXTREME,
  1848. UNT_BANDING,
  1849. UNT_FIRE_MANTLE,
  1850. UNT_WATER_BARRIER,
  1851. UNT_ZEPHYR,
  1852. UNT_POWER_OF_GAIA,
  1853. UNT_FIRE_INSIGNIA,
  1854. UNT_WATER_INSIGNIA,
  1855. UNT_WIND_INSIGNIA,
  1856. UNT_EARTH_INSIGNIA,
  1857. UNT_POISON_MIST,
  1858. UNT_LAVA_SLIDE,
  1859. UNT_VOLCANIC_ASH,
  1860. UNT_ZENKAI_WATER,
  1861. UNT_ZENKAI_LAND,
  1862. UNT_ZENKAI_FIRE,
  1863. UNT_ZENKAI_WIND,
  1864. UNT_MAKIBISHI,
  1865. UNT_VENOMFOG,
  1866. UNT_ICEMINE,
  1867. UNT_FLAMECROSS,
  1868. UNT_HELLBURNING,
  1869. UNT_MAGMA_ERUPTION,
  1870. UNT_KINGS_GRACE,
  1871. UNT_GLITTERING_GREED,
  1872. UNT_B_TRAP,
  1873. UNT_FIRE_RAIN,
  1874. /**
  1875. * Guild Auras
  1876. **/
  1877. UNT_GD_LEADERSHIP = 0xc1,
  1878. UNT_GD_GLORYWOUNDS = 0xc2,
  1879. UNT_GD_SOULCOLD = 0xc3,
  1880. UNT_GD_HAWKEYES = 0xc4,
  1881. UNT_MAX = 0x190
  1882. };
  1883. /**
  1884. * Skill Unit Save
  1885. **/
  1886. void skill_usave_add(struct map_session_data * sd, uint16 skill_id, uint16 skill_lv);
  1887. void skill_usave_trigger(struct map_session_data *sd);
  1888. /**
  1889. * Warlock
  1890. **/
  1891. #define MAX_SKILL_SPELLBOOK_DB 17
  1892. enum wl_spheres {
  1893. WLS_FIRE = 0x44,
  1894. WLS_WIND,
  1895. WLS_WATER,
  1896. WLS_STONE,
  1897. };
  1898. struct s_skill_spellbook_db {
  1899. unsigned short nameid;
  1900. unsigned short skill_id;
  1901. unsigned short point;
  1902. };
  1903. extern struct s_skill_spellbook_db skill_spellbook_db[MAX_SKILL_SPELLBOOK_DB];
  1904. extern unsigned short skill_spellbook_count;
  1905. void skill_spellbook(struct map_session_data *sd, unsigned short nameid);
  1906. int skill_block_check(struct block_list *bl, enum sc_type type, uint16 skill_id);
  1907. /**
  1908. * Guilottine Cross
  1909. **/
  1910. #define MAX_SKILL_MAGICMUSHROOM_DB 25
  1911. struct s_skill_magicmushroom_db {
  1912. uint16 skill_id;
  1913. };
  1914. extern struct s_skill_magicmushroom_db skill_magicmushroom_db[MAX_SKILL_MAGICMUSHROOM_DB];
  1915. extern unsigned short skill_magicmushroom_count;
  1916. int skill_maelstrom_suction(struct block_list *bl, va_list ap);
  1917. bool skill_check_shadowform(struct block_list *bl, int64 damage, int hit);
  1918. /**
  1919. * Ranger
  1920. **/
  1921. int skill_detonator(struct block_list *bl, va_list ap);
  1922. bool skill_check_camouflage(struct block_list *bl, struct status_change_entry *sce);
  1923. /**
  1924. * Mechanic
  1925. **/
  1926. int skill_magicdecoy(struct map_session_data *sd, unsigned short nameid);
  1927. /**
  1928. * Guiltoine Cross
  1929. **/
  1930. int skill_poisoningweapon( struct map_session_data *sd, unsigned short nameid);
  1931. /**
  1932. * Auto Shadow Spell (Shadow Chaser)
  1933. **/
  1934. int skill_select_menu(struct map_session_data *sd,uint16 skill_id);
  1935. int skill_elementalanalysis(struct map_session_data *sd, int n, uint16 skill_lv, unsigned short *item_list); // Sorcerer Four Elemental Analisys.
  1936. int skill_changematerial(struct map_session_data *sd, int n, unsigned short *item_list); // Genetic Change Material.
  1937. int skill_get_elemental_type(uint16 skill_id, uint16 skill_lv);
  1938. bool skill_is_combo(uint16 skill_id);
  1939. void skill_combo_toogle_inf(struct block_list* bl, uint16 skill_id, int inf);
  1940. void skill_combo(struct block_list* src,struct block_list *dsrc, struct block_list *bl, uint16 skill_id, uint16 skill_lv, int tick);
  1941. #ifdef ADJUST_SKILL_DAMAGE
  1942. /// Skill Damage target
  1943. enum e_skill_damage_caster {
  1944. SDC_PC = 0x01,
  1945. SDC_MOB = 0x02,
  1946. SDC_PET = 0x04,
  1947. SDC_HOM = 0x08,
  1948. SDC_MER = 0x10,
  1949. SDC_ELEM = 0x20,
  1950. SDC_ALL = SDC_PC|SDC_MOB|SDC_PET|SDC_HOM|SDC_MER|SDC_ELEM,
  1951. };
  1952. #endif
  1953. /// Variable name of copied skill by Plagiarism
  1954. #define SKILL_VAR_PLAGIARISM "CLONE_SKILL"
  1955. /// Variable name of copied skill level by Plagiarism
  1956. #define SKILL_VAR_PLAGIARISM_LV "CLONE_SKILL_LV"
  1957. /// Variable name of copied skill by Reproduce
  1958. #define SKILL_VAR_REPRODUCE "REPRODUCE_SKILL"
  1959. /// Variable name of copied skill level by Reproduce
  1960. #define SKILL_VAR_REPRODUCE_LV "REPRODUCE_SKILL_LV"
  1961. #define SKILL_CHK_HOMUN(skill_id) ( (skill_id) >= HM_SKILLBASE && (skill_id) < HM_SKILLBASE+MAX_HOMUNSKILL )
  1962. #define SKILL_CHK_MERC(skill_id) ( (skill_id) >= MC_SKILLBASE && (skill_id) < MC_SKILLBASE+MAX_MERCSKILL )
  1963. #define SKILL_CHK_ELEM(skill_id) ( (skill_id) >= EL_SKILLBASE && (skill_id) < EL_SKILLBASE+MAX_ELEMENTALSKILL )
  1964. #define SKILL_CHK_GUILD(skill_id) ( (skill_id) >= GD_SKILLBASE && (skill_id) < GD_SKILLBASE+MAX_GUILDSKILL )
  1965. #endif /* _SKILL_H_ */