skill.h 50 KB

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