summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog-Trunk.txt (renamed from Changelog-Renewal.txt)887
-rw-r--r--RAthena-10.sln (renamed from eAthena-10.sln)0
-rw-r--r--RAthena-9.sln (renamed from eAthena-9.sln)0
-rw-r--r--conf/Changelog.txt2
-rw-r--r--conf/battle/client.conf4
-rw-r--r--conf/battle/exp.conf2
-rw-r--r--conf/battle/gm.conf4
-rw-r--r--conf/battle/items.conf8
-rw-r--r--conf/battle/player.conf12
-rw-r--r--conf/battle/skill.conf14
-rw-r--r--conf/char_athena.conf2
-rw-r--r--conf/map_athena.conf10
-rw-r--r--conf/mapflag/partylock.txt2
-rw-r--r--conf/mapflag/reset.txt84
-rw-r--r--conf/msg_athena.conf4
-rw-r--r--db/Changelog.txt41
-rw-r--r--db/abra_db.txt11
-rw-r--r--db/attr_fix.txt45
-rw-r--r--db/castle_db.txt10
-rw-r--r--db/const.txt211
-rw-r--r--db/create_arrow_db.txt7
-rw-r--r--db/exp.txt30
-rw-r--r--db/exp2.txt35
-rw-r--r--db/guild_skill_tree.txt14
-rw-r--r--db/homun_skill_tree.txt24
-rw-r--r--db/homunculus_db.txt23
-rw-r--r--db/item_avail.txt14
-rw-r--r--db/item_buyingstore.txt267
-rw-r--r--db/item_cookie_bag.txt1
-rw-r--r--db/item_db.txt1858
-rw-r--r--db/item_db_re.txt304
-rw-r--r--db/item_delay.txt9
-rw-r--r--db/item_group_db.txt1
-rw-r--r--db/item_misc.txt2
-rw-r--r--db/item_scroll.txt6
-rw-r--r--db/item_stack.txt27
-rw-r--r--db/job_db1.txt325
-rw-r--r--db/job_db2.txt104
-rw-r--r--db/magicmushroom_db.txt26
-rw-r--r--db/mob_penalty_db.txt40
-rw-r--r--db/mob_skill_db.txt29
-rw-r--r--db/packet_db.txt39
-rw-r--r--db/produce_db.txt69
-rw-r--r--db/quest_db.txt28
-rw-r--r--db/re_job_db.txt230
-rw-r--r--db/refine_db.txt10
-rw-r--r--db/skill_cast_db.txt1738
-rw-r--r--db/skill_db.txt695
-rw-r--r--db/skill_nocast_db.txt3
-rw-r--r--db/skill_require_db.txt405
-rw-r--r--db/skill_tree.txt2739
-rw-r--r--db/skill_unit_db.txt22
-rw-r--r--db/spellbook_db.txt29
-rw-r--r--db/statpoint.txt292
-rw-r--r--db/statpoint_renewal.txt255
-rw-r--r--doc/3rd_job_notes.txt261
-rw-r--r--doc/item_bonus.txt4
-rw-r--r--doc/script_commands.txt318
-rw-r--r--doc/whisper_sys.txt2
-rw-r--r--eAthena-6.dsw149
-rw-r--r--eAthena-7.1.sln69
-rw-r--r--eAthena-8.sln139
-rw-r--r--notice.txt8
-rw-r--r--npc/Changelog.txt1
-rw-r--r--npc/custom/MVP_arena/arena_mvp.txt2
-rw-r--r--npc/custom/eAAC_Scripts/kafraExpress/config.txt2
-rw-r--r--npc/custom/eAAC_Scripts/kafraExpress/ke_main.txt2
-rw-r--r--npc/guides/guides_brasilis.txt1
-rw-r--r--npc/guild/agit_template.txt4
-rw-r--r--npc/instances/NydhoggsNest.txt5896
-rw-r--r--npc/jobs/2-1/priest.txt2
-rw-r--r--npc/mobs/fields/brasilis.txt2
-rw-r--r--npc/mobs/towns/brasilis.txt32
-rw-r--r--npc/other/arena/arena_aco.txt28
-rw-r--r--npc/other/pvp.txt20
-rw-r--r--npc/quests/eye_of_hellion.txt4
-rw-r--r--npc/quests/newgears/2005_headgears.txt3
-rw-r--r--npc/quests/quests_brasilis.txt9200
-rw-r--r--npc/quests/quests_ein.txt138
-rw-r--r--npc/quests/quiz/quiz_qt.txt42
-rw-r--r--npc/warps/dungeons/anthell.txt4
-rw-r--r--npc/warps/dungeons/bra_dun.txt34
-rw-r--r--npc/warps/dungeons/juperos.txt2
-rw-r--r--npc/warps/dungeons/prt_maze.txt2
-rw-r--r--npc/warps/fields/veins_fild.txt2
-rw-r--r--npc/warps/guild/guildcastles.txt252
-rw-r--r--npc/warps/other/arena.txt18
-rw-r--r--npc/warps/other/god.txt10
-rw-r--r--readme.html25
-rw-r--r--readme/commands.html16
-rw-r--r--readme/faq-content.html33
-rw-r--r--readme/faq.html55
-rw-r--r--readme/resources.html75
-rw-r--r--readme/scripting.html99
-rw-r--r--readme/setup.html70
-rw-r--r--readme/style.css11
-rw-r--r--sql-files/convert_engine_innodb.sql1
-rw-r--r--sql-files/convert_engine_myisam.sql1
-rw-r--r--sql-files/item_db.sql10
-rw-r--r--sql-files/item_db_re.sql102
-rw-r--r--sql-files/main.sql2
-rw-r--r--sql-files/upgrade_svn15003.sql1
-rw-r--r--src/char/char.c8
-rw-r--r--src/char/int_party.c44
-rw-r--r--src/char/inter.c2
-rw-r--r--src/char_sql/char.c8
-rw-r--r--src/char_sql/int_party.c58
-rw-r--r--src/char_sql/int_storage.c4
-rw-r--r--src/char_sql/inter.c3
-rw-r--r--src/common/core.c26
-rw-r--r--src/common/mmo.h81
-rw-r--r--src/common/showmsg.c27
-rw-r--r--src/common/showmsg.h1
-rw-r--r--src/common/socket.c12
-rw-r--r--src/common/sql.h5
-rw-r--r--src/map/Makefile.in4
-rw-r--r--src/map/atcommand.c410
-rw-r--r--src/map/battle.c781
-rw-r--r--src/map/battle.h18
-rw-r--r--src/map/buyingstore.c20
-rw-r--r--src/map/chrif.c8
-rw-r--r--src/map/clif.c1115
-rw-r--r--src/map/clif.h55
-rw-r--r--src/map/config/Core.h28
-rw-r--r--src/map/config/Data/Const.h33
-rw-r--r--src/map/config/Renewal.h53
-rw-r--r--src/map/config/Secure.h36
-rw-r--r--src/map/config/Skills/General.h23
-rw-r--r--src/map/config/Skills/Mage_Classes.h19
-rw-r--r--src/map/config/Skills/Swordsman_Classes.h19
-rw-r--r--src/map/guild.c19
-rw-r--r--src/map/intif.c19
-rw-r--r--src/map/intif.h2
-rw-r--r--src/map/itemdb.c124
-rw-r--r--src/map/itemdb.h52
-rw-r--r--src/map/log.c30
-rw-r--r--src/map/map.c212
-rw-r--r--src/map/map.h109
-rw-r--r--src/map/mercenary.h6
-rw-r--r--src/map/mob.c33
-rw-r--r--src/map/mob.h5
-rw-r--r--src/map/npc.c75
-rw-r--r--src/map/npc.h21
-rw-r--r--src/map/party.c274
-rw-r--r--src/map/party.h12
-rw-r--r--src/map/pc.c598
-rw-r--r--src/map/pc.h58
-rw-r--r--src/map/script.c1318
-rw-r--r--src/map/skill.c2975
-rw-r--r--src/map/skill.h65
-rw-r--r--src/map/status.c2269
-rw-r--r--src/map/status.h415
-rw-r--r--src/map/storage.c14
-rw-r--r--src/map/unit.c125
-rw-r--r--src/map/unit.h4
-rw-r--r--vcproj-10/char-server_sql.vcxproj5
-rw-r--r--vcproj-10/char-server_sql.vcxproj.filters186
-rw-r--r--vcproj-10/char-server_txt.vcxproj3
-rw-r--r--vcproj-10/char-server_txt.vcxproj.filters168
-rw-r--r--vcproj-10/login-server_sql.vcxproj5
-rw-r--r--vcproj-10/login-server_sql.vcxproj.filters144
-rw-r--r--vcproj-10/login-server_txt.vcxproj4
-rw-r--r--vcproj-10/login-server_txt.vcxproj.filters144
-rw-r--r--vcproj-10/map-server_sql.vcxproj12
-rw-r--r--vcproj-10/map-server_sql.vcxproj.filters342
-rw-r--r--vcproj-10/map-server_txt.vcxproj10
-rw-r--r--vcproj-10/map-server_txt.vcxproj.filters342
-rw-r--r--vcproj-10/mapcache.vcxproj3
-rw-r--r--vcproj-10/mapcache.vcxproj.filters69
-rw-r--r--vcproj-10/txt-converter-char.vcxproj3
-rw-r--r--vcproj-10/txt-converter-char.vcxproj.filters156
-rw-r--r--vcproj-10/txt-converter-login.vcxproj3
-rw-r--r--vcproj-10/txt-converter-login.vcxproj.filters90
-rw-r--r--vcproj-6/char-server_sql.dsp324
-rw-r--r--vcproj-6/char-server_txt.dsp300
-rw-r--r--vcproj-6/login-server_sql.dsp276
-rw-r--r--vcproj-6/login-server_txt.dsp276
-rw-r--r--vcproj-6/map-server_sql.dsp528
-rw-r--r--vcproj-6/map-server_txt.dsp528
-rw-r--r--vcproj-6/mapcache.dsp160
-rw-r--r--vcproj-6/plugin-console.dsp107
-rw-r--r--vcproj-6/plugin-pid.dsp107
-rw-r--r--vcproj-6/txt-converter-char.dsp576
-rw-r--r--vcproj-6/txt-converter-login.dsp200
-rw-r--r--vcproj-7.1/char-server_sql.vcproj332
-rw-r--r--vcproj-7.1/char-server_txt.vcproj307
-rw-r--r--vcproj-7.1/login-server_sql.vcproj291
-rw-r--r--vcproj-7.1/login-server_txt.vcproj288
-rw-r--r--vcproj-7.1/map-server_sql.vcproj490
-rw-r--r--vcproj-7.1/map-server_txt.vcproj484
-rw-r--r--vcproj-7.1/mapcache.vcproj199
-rw-r--r--vcproj-8/char-server_sql.vcproj445
-rw-r--r--vcproj-8/char-server_txt.vcproj411
-rw-r--r--vcproj-8/dbghelpplug.vcproj211
-rw-r--r--vcproj-8/login-server_sql.vcproj391
-rw-r--r--vcproj-8/login-server_txt.vcproj374
-rw-r--r--vcproj-8/map-server_sql.vcproj654
-rw-r--r--vcproj-8/map-server_txt.vcproj645
-rw-r--r--vcproj-8/mapcache.vcproj269
-rw-r--r--vcproj-8/plugin-console.vcproj234
-rw-r--r--vcproj-8/plugin-pid.vcproj234
-rw-r--r--vcproj-8/txt-converter-char.vcproj505
-rw-r--r--vcproj-8/txt-converter-login.vcproj301
-rw-r--r--vcproj-9/char-server_sql.vcproj5
-rw-r--r--vcproj-9/char-server_txt.vcproj5
-rw-r--r--vcproj-9/login-server_sql.vcproj5
-rw-r--r--vcproj-9/login-server_txt.vcproj5
-rw-r--r--vcproj-9/map-server_sql.vcproj73
-rw-r--r--vcproj-9/map-server_txt.vcproj31
-rw-r--r--vcproj-9/mapcache.vcproj7
-rw-r--r--vcproj-9/plugin-console.vcproj5
-rw-r--r--vcproj-9/plugin-pid.vcproj5
-rw-r--r--vcproj-9/txt-converter-char.vcproj5
-rw-r--r--vcproj-9/txt-converter-login.vcproj5
214 files changed, 24294 insertions, 27935 deletions
diff --git a/Changelog-Renewal.txt b/Changelog-Trunk.txt
index 85bb01525..8082888f6 100644
--- a/Changelog-Renewal.txt
+++ b/Changelog-Trunk.txt
@@ -1,93 +1,826 @@
Date Added
+2011-11-27
+ * Welcome to RAthena! http://rathena.org/board/topic/53704-rathena-the-fork/
+
+2011/11/28
+ * Fixed novending cell check using misleading error message (bugreport:2592, since r11572 and r14724, related r11580). [Ai4rei]
+ * Fixed removing item scripts through script command *setitemscript not working the way it is stated in script_commands.txt (related r9831). [Ai4rei]
+2011/11/19
+ * Fixed wrong damage numbers being displayed when the damage source was disguised (bugreport:5093, since r14979). [Ai4rei]
+2011/11/17
+ * Added a check to WFIFOSET to detect zero-length 'sets' of packets, that could cause memory corruption (through code after WFIFOHEAD(fd,packet_len(cmd)) where the length is 0). [Ai4rei]
+2011/11/16
+ * Fixed natural expiration of GM mute printing the unmute message twice (since r12169). [Ai4rei]
+2011/11/12
+ * Fixed npc class HIDDEN_WARP_NPC (139) being sent to the client, causing client crashes in poring war. It's a server-side "sprite" only. [Ai4rei]
+ - Updated Aegis NPC ID constants from current npcidentity.lub (569~603).
+ - Reintroduced HIDDEN_WARP_NPC script constant, which was removed by accident (since r14679).
+2011/11/03
+ * Organized items in VS2010 projects into groups like in other projects (follow up to r14562). [Ai4rei]
+2011/10/28
+ * Random documentation of database files. [Ai4rei]
+ * Fixed db/packet_db.txt reading not checking for max. amount of positions. [Ai4rei]
+ * Introduced MAX_GUILD_SKILL_REQUIRE to fix inconsistency in amount of prereq. guild skills.
2011/10/26
- * Rev. 14983 Implemented first version of rebalanced Rune Knight skills. [L0ne_W0lf]
- * Implemented the rebalancing of most Archbishop skills.
- * As a result, merged r14979 from trunk. (act/notify packet update)
- * Added pc_isUseitem_check_runeskill care of Meyrawr (blocks rune usage based on skill delay.)
- * Added more status effects that do NOT save on log out. A whole slew of them.
- * Now only level 11 Dec. AGI will take the new config settings into account.
- * Fixed Level 11 Dec. AGI duration faux pas, where it was multiplying it by 100.
- * Added script command: setdragon: See documentation for details.
- * Added script command: successruneuse: Will return 0 or 1. Handles runestone backfire effects.
- * Modified script command: produce, now accepts <item id> as a second parameter.
- * Corrected message that is displayed when attempting to generate items when that item has a limit.
- * GM Item commands will no longer display 'Item created' messages on failure.
+ * Fixed a mistake in RID description in doc/script_commands.txt (since r2402). [Ai4rei]
+2011/10/23
+ * Revised packets related to auction system. [Ai4rei]
+ - Added packet documentation and corrected existing one.
+ - Removed an impossible condition in clif_parse_Auction_setitem (since r12301).
+ - Updated backet db definitions and removed a duplicate entry (entries from older packet versions carry over to newer).
+2011/10/17
+ * Remove 'hack code' in party_member_added causing crashes since r14968. (bugreport:5069) [FlavioJS]
+2011/10/16
+ * Added support for new act/damage packet 0x2e1 (ZC_NOTIFY_ACT2) for clients 2007-11-13Sakexe and newer. [Ai4rei]
+ * Added a message indicating how many concurrent connections the server was compiled to support. [Ai4rei]
+ * Added field for the change slot feature to character select list packet for 2011-09-28aRagexeRE and newer. [Ai4rei]
+ * Changed function-like macros into inline functions where it seemed appropriate (topic:264007). [Ai4rei]
+ * Fixed public/guild chat message packets sending strings without zero-termination causing recent clients to display trailing junk on such messages (bugreport:5068). [Ai4rei]
+ - Changed memcpy to safestrncpy in message packets where overlong messages are truncated (thus loose zero-termination).
+ - Replaced dynamic allocation in clif_guild_message with buffer from stack.
+ - Fixed clif_disp_message not checking whether the message fits into provided buffer.
+2011/10/15
+ * Some readme clean-ups (related r14711). [Ai4rei]
+ - Normalized whitespace and made the html files validate properly.
+ - Moved faq-content content to faq.
+2011/10/10
+ * Add correct reply when player invited to party isn't found. [FlavioJS]
+2011/10/09
+ * Rework some party code. [FlavioJS]
+ - add leader argument to party_fill_member
+ - add party_getmemberid
+ - add requester char_id to packets 0x3021 and 0x3821 (party info)
+ - diff members when replacing party info
+ - remove fixup all-player-iteration when receiving a party for the first time
+ - send 'party info' before 'party created'
+ - send 'party info' before 'party member added'
+ - update empty party_id when checking the player of a party
2011/10/07
- * Merged changes from trunk [14895:14966/trunk]. [Ai4rei]
-2011/09/30
- * Rev. 14965 Forgot to increase MAX_ITEMDELAYs to 18. [L0ne_W0lf]
- * Rev. 14964 Just a slew of back-logged source updates. [L0ne_W0lf]
- * Fixed skill_calc_heal applying heal bonuses only to AL_HEAL.
- * Still working on updating the status window to display properly.
- * Refine bonuses on armor now apply properly. (+1 additional bonus for every 4 refines.) Refining in general now goes up to 20.
- * Criticals will now no longer ignore defense, but will still always hit.
- * Converted m/def2 to a short, for testing status window update, will eventually need to surpass 32k. Good like this for now while we work on it.
- * Cleaned up some minor things relating tot he arch bishop skill update.
- * Applied some of the 30/08/2011 kRO updates to arch bishop skills.
- * Added more SI_ Constants from newer clients to status.h.
-2011/08/28
- * Rev. 14948 Fixed Blessing crashing the server when used on monsters, monster weapon attack mechanics are currently unknown. [L0ne_W0lf]
- * Updated conditions for UNT_EPICLESIS and AB_ADORAMUS (two cases of || to &&.)
-
-2011/08/27
- * Fixed AB_ADORAMUS's partner and item check. [Inkfish]
- * Added a null pointer check to AB_CLEMENTIA and AB_CANTO. [Inkfish]
- * Fixed skillratio of Archbishop skills is 100% higher than it's supposed be.(it's initialized to be 100% not 0) [Inkfish]
- * Reverted unnecessary signature change of clif_skill_fail from r14941. [Gepard]
-2011/08/26
- * Rev. 14941 Renewal changes in renewal branch? Am I dreaming? [L0ne_W0lf]
- - Implemented first version of Archbishop skills. Preliminary version, see doc/3rd_job_notes.txt for details/bugs/issues with skills.
- - Implemented fixed cast time, old cast time mechanics no longer available. Added bFixedCastRate used for reducing fixed cast time mechanic.
- Cast time calculations probably still needs work, as the cast rate reductions are probably additive and multiplicative as they used to be.
- - As a result, skill_delayfix_sc() has been removed, status effects that modify cast time are now calculated DURING cast time, not after.
- - Implemented skill cooldown in skill_cast_db.txt. Known issue is that the cooldowns should save on logout/server shutdown/etc.
- - Implemented new heal calculation and started work on MATK. Added bWeaponMatk, and bEquipmentMatk for use with new MATK mechanic.
- - Removed custom features and their config settings: delay_dependon_dex, delay_dependon_agi, castrate_dex_scale.
- - Increased max_def to 9999 for now, as that is by default the largest defense increase found in the Renewal database (Ahura_mazdah, GM item)
- - Added shield aspd reduction from job_db1.txt-- Not 100% sure on this one yet. Should be considered a WIP.
- - Modified updatestatus(), to display information more in line with the client's status window.
- - Updated some calculations in status_calc_misc to match renewal, needs a lot of work still.
- - ST_CHASEWALK and HP_BASILICA no longer have 0 cast time while being canceled.
- * Implemented 'Boss' Decrease AGI, like 'Boss' Heal - editable in skill.conf
- * clif_skill_fail() now accepts a new parameter, to be used in later messages.
- * status_change_start() now stores tick as duration upon being called, which fixes timers calling the function from showing negative durations.
- * Implemented skill ALL_PARTYFLEE. 1 level, increases party member flee by 10.
-2011/08/07
- * Rev. 14931 Raised MAX_MERCENARY_CLASS to 44 for new mercenaries. [L0ne_W0lf]
- * Raised max_lv to allow values up to 150 in battle.conf.
- * Raised MAX_SKILL_TREE 77 in prep for 3rd class skill trees.
-2011/08/07
- * Rev. 14927 Added bonus3 bAddClassDropItem, care of Epoque. [L0ne_W0lf]
+ * Remove fds from the shortlist before processing. [FlavioJS]
+2011/09/18
+ * 14961 Applied map flag update patch provided by Daegaladh. Will mess with custom restricted items.
+ - Adds a reset mapflag which is checked when using the Neuralizer.
+ - Syncronizes the item_noequip_db bitmasks with with skill_nocast_db.
+ - Updates mapflags, and both skills and items which are restricted.
+2011/09/18
+ * Fixed CR_SLIMPITCHER passing item requirement index to itemdb_search when used by a monster (bugreport:5021, since r6791). [Ai4rei]
+2011/09/17
+ * Rental items no longer expire in cart and storage. The packet does not support this and rentals cannot be put in on official either (since r14082, related r14083). [Ai4rei]
+ - Corrected packet 0x299 (ZC_CASH_ITEM_DELETE) missing inventory index field (since r13370).
+ * Fixed missing edits for cash shop support for clients 2007-07-10aSakexe and older (follow up to r14932). [Ai4rei]
+2011/09/08
+ * Fix C++ compilation issues. [FlavioJS]
+2011/09/05
+ * Add consistency checks to the shortlist. [FlavioJS]
+ * Restrict intif_quest_save to sql only. txt char-server doesn't support the packet and disconnects the map-server.
+2011/09/02
+ * Fixed @reloadmobdb wiping out monster spawn information. [Skotlex]
+2011/08/30
+ * Corrected SQL saving so that the server won't update the 'saved' data if there is an SQL error. It should fix possible dupes and other data synch issues when the SQL server is temporarily down during save. [Skotlex]
+2011/08/23
+ * Rewrote the combo logic. Now it uses packet 0x7e1 to signal skill state changes rather than resending the whole skill list. [Skotlex]
+2011/08/21
+ * Fixed monsters above Lv99 displaying a Lv99 aura (bugreport:3986). [Ai4rei]
+ - The server no longer caps the level sent to the client by default.
+ - Servers that require the aura to be displayed at a level different from lv99, either have to alter the client or adjust the 'client_limit_unit_lv' setting.
+2011/08/20
+ * Added quick validation of guild emblems' bitmap format to prevent forged emblems, that cause the client to crash, from being accepted (thx to sinya for a sample). [Ai4rei]
+2011/08/16
+ * Added -fno-strict-aliasing detection to configure.in (-fstrict-aliasing is added through -O2), since the code is not aliasing safe and causes warnings with gcc. [Ai4rei]
+ - This also fixes a missing line in the pre-built configure script (since r14870).
+2011/08/11
+ * Fixed bonuses bAddMonsterDropItem and bAddMonsterDropItemGroup (which broke after bAddClassDropItem was added). [Skotlex]
+2011/08/10
+ * Added support for cash shop packets without kafra points for clients 2007-07-10aSakexe and older (bugreport:4701, related r10888 and r11548). [Ai4rei]
+ * Added sending a dummy 0x08b9 packet (PIN auth system) in the char-server, required to support clients from this year. [Skotlex]
+ * Updated unitwarp so that an id of "0" causes the script's rid to be warped. This allows OnTouchNPC scripts to warp the monster. [Skotlex]
+ * Updated @warp/@jump commands so that when an invalid tile is specified, a nearby cell is chosen.
+2011/08/06
+ * Added missing fields to guild belong info packet 0x16c (ZC_UPDATE_GDID). [Ai4rei]
+2011/07/31
+ * Fixed quest saving checking only the first 3 objectives for changes regardless of MAX_QUEST_OBJECTIVES (follow up to r14800, since r13973). [Ai4rei]
+2011/07/22
+ * CMake: Added options BUILD_TXT_SERVERS, BUILD_SQL_SERVERS, BUILD_MAPCACHE. [FlavioJS]
+2011/07/21
+ * CMake: Only install template files if they don't already exist. [FlavioJS]
+ * CMake: Added plugin targets.
+ * CMake: Added options BUILD_* to build the converters and individual plugins. (default=OFF)
+ * CMake: Added option WITH_CPACK for package creation. (default=ON)
+2011/07/20
+ * Made GCOLLECT use it's debug functions. [FlavioJS]
+ * Turned off garbage collection for GCOLLECT since there's nothing to do with explicit frees.
+ * Added malloc_verify_ptr/malloc_usage code for all memory libraries.
+ * Added malloc_memory_check for debug purposes, tests memory for errors and memory leaks.
+ * Added explicit memory check on malloc_final.
+2011/07/19
+ * Made NO_MEMMGR only be set as a default value, allowing for simultaneous use with the memory libraries. [FlavioJS]
+ * Moved memory library selection to malloc.c to avoid poisoning the namespace of the rest of the code.
+ * Removed BCHECK code since it's uneeded. (bcheck is an external batch tool that runs on top of the dbx debugger)
+ * Fixed GCOLLECT usage. (missing init and final memory leak check)
+ * Fixed DMALLOC usage. (missing options on CYGWIN and verify memory)
+ * Renamed malloc_verify to malloc_verify_ptr to avoid conflict with DMALLOC.
+ * Changed itemtype from inline to static inline to avoid error with the SunOS compiler.
+ * CMake: added option ENABLE_MEMMGR. (builtin memory manager)
+ * CMake: added option ENABLE_MEMORY. (memory library)
+ * CMake: added option ENABLE_EXTRA_DEBUG_CODE.
+ * CMake: added option ENABLE_PROFILER.
+2011/07/15
+ * Changed the warning message of when setrlimit fails to be more explicit. [FlavioJS]
+ * CMake: added tests for big endian, typecast to union and monotonic clock.
+ * CMake: added 'have function' tests for setrlimit, strnlen, getpid and gettid.
+ * CMake: added option ENABLE_RDTSC.
+2011/07/12
+ * CMake: set project language to C, added module FindFunctionLibrary, added search for dl library. (tested with debian-wheezy-i386) [FlavioJS]
+ * CMake: added search for math.h, added search for socket/nsl library. (tested with Solaris-201011-x86)
+ * Added missing include to socket.c.
+ * CMake: added search for ws2_32 library. (tested with MinGW/MSYS)
+ * Added missing pcre library for MinGW.
+2011/07/11
+ * Rev. 14901 Added bonus3 bAddClassDropItem, care of Epoque. [L0ne_W0lf]
2011/07/10
- * Merged changes from trunk [14827:14894/trunk]. [Ai4rei]
+ * Temporary fix for bugreport:4961 (unintended conversion from signed to unsigned). [FlavioJS]
+ * CMake: lowered required version to 2.8.3 and moved custom cmake modules to 3rdparty/cmake.
+ * Changed limit definitions used in WBUF* and WFIFO* to the intended fixed size alternatives.
+ * CMake: added txt-converter targets, added warning for 64bit, added list of available targets.
+2011/07/09
+ * Added script command 'getmercinfo' for retrieving information about a mercenary of an online character. [Ai4rei]
+ * CMake: added search for math library, made CPack existence optional, updated the search for mysqlclient and corrected misspelled variables (tested with FreeBSD-8.2-i386) [FlavioJS]
+ * Removed duplicate entries for Gunslinger and Ninja in msg_athena.conf (since r5506). [Ai4rei]
+2011/07/07
+ * Replaced compress/uncompress inline code (encode_zip/decode_zip) with the respective zlib library calls while keeping 3rdparty calls inside common code (follow up to r14888, related r14808). [Ai4rei]
+2011/07/06
+ * Changed grfio.c include order and moved zlib include from the header to the source. [FlavioJS]
+ * Merged decode_zip/encode_zip from eapp's grfio to replace our direct use of zlib's uncompress/compress.
+ * Fixed strict-aliasing warning in mapcache's GetFloat.
+ * CMake: src/common builds static libraries common_base/common_sql, that are used as dependencies by the other targets.
+ * CMake: normalized variable names, added ability to create a package/installer.
+2011/07/05
+ * CMake: split txt and sql variants of login-server and map-server. [FlavioJS]
+2011/07/04
+ * Fixed 'strnlen' still causing warnings in db.c on Debian (follow up to r14855). [Ai4rei]
+2011/07/03
+ * Corrected npcdb_checkid to exclude border constants 400 (JT_NEW_NPC_START) and 1000 (JT_MON_BEGIN) (since r4425 and r12025, related r4537). [Ai4rei]
+2011/07/02
+ * Fixed minor stuff in login/char converter VS6 project files (since r14858). [Ai4rei]
+ * More instancing updates. [Ai4rei]
+ - Improved instance_id validity checking.
+ - Fixed instance name being copied with memcpy rather than safestrncpy (since r13901).
+ - Removed unused instance data field 'progress_timeoutval' (since r13901).
+ * Random updates to instance system. [Ai4rei]
+ - Introduced a constant for instance name length.
+ - Corrected comments related to instance packets 0x2cb (ZC_MEMORIALDUNGEON_SUBSCRIPTION_INFO) and 0x2ce (ZC_MEMORIALDUNGEON_NOTIFY).
+ - Moved instance finalization out of map.c into instance.c
+2011/07/01
+ * CMake: marked executables as different components and other miscellaneous changes. [FlavioJS]
+2011/06/29
+ * Added experimental support for CMake. (for now: basic build, no extras, only tested with VS10 and cygwin) [FlavioJS]
+2011/06/27
+ * Added common/random and 3rdparty/mt19937ar to project files, makefiles and configure script. [FlavioJS]
+2011/06/26
+ * Fixed a signed literal being assigned to an unsigned variable and other minor cleanups in malloc (bugreport:4765). [Ai4rei]
+ * Fixed @mobinfo displaying mvp rewards with 'AegisName' although normal drops use 'Name' item db column (bugreport:4981, follow up to r6346). [Ai4rei]
+ * Fixed quest index memory corruption when adding new quests (since r14039, bugreport:4982) [ultramage]
+2011/06/25
+ * Added Mersenne Twister MT19937 as a random number generator. [FlavioJS]
+2011/06/23
+ * Made chrif_save always call pc_makesavestatus. (no reason to prevent the call, and was interfering with multi map-server; fixes bugreport:1400) [FlavioJS]
+2011/06/22
+ * Plagiarized skills are now removed on jobchange (bugreport:4973) [ultramage]
+2011/06/19
+ * Fixed various sorts of issues with VS6 project files (since r6929, follow up to r14466 and r14638). [Ai4rei]
+ - Debug configuration was missing and release had _DEBUG defined (indicates debug configuration).
+ - Login-server (SQL) defined PACKETVER=6 (overrides mmo.h).
+ - Warning Level was 2, which hides a lot of actual errors.
+ - Added projects for mapcache and TXT converter.
+ - Removed references unneeded/obsolete libraries/source files.
+2011/06/18
+ * Fixed using @refresh while having vending or buyingstore open would stuck the character (bugreport:156 , since r1307). [Ai4rei]
+ * Fixed missing strlib.h include for compilers without own 'strnlen' implementation (since r14853). [Ai4rei]
+2011/06/16
+ * Slight speedup on most strdb operations [ultramage]
+ * Fixed DBMap's db_dup_key to allocate only as much as necessary (bugreport:4969) [ultramage]
+ * Fixed char-converter not being able to compile due to both char.h being included. (caused by last commit) [FlavioJS]
+ * Merges from charmerge:
+ - Added DBMap::exists. (r14090)
+ - Added sv_parse_next, a stepped version of sv_parse (delim-separated parser). (r14100 r14104)
+ - Added missing fd check to do_close. (r14145)
+ - Normalized, refactored and restructured some code (in preparation for shutdown/reconnect code). (r14145 r14150)
+ - Changed the char select request code to allow the char-server to reject it. (player in map-server trying to go to char select) (r14150)
+ - Added shutdown support to the servers. (incomplete) (r14152)
2011/06/13
- * Fixed 3rd classes not being able to level up after Base Level reset. [Gepard]
+ * Fixed pet's equip would visually disappear when it's walk speed was changed while it was standing (related r14838). [Ai4rei]
+2011/06/11
+ * Added support for new skill usage notification packet 0x7fb (ZC_USESKILL_ACK2). [Ai4rei]
+ * Fixed party invite packet 0xfe (ZC_REQ_JOIN_GROUP) using account id of the inviter rather than party id. [Ai4rei]
+ - Added support for new party invite packet 0x2c6 (ZC_PARTY_JOIN_REQ), introduction date guessed.
+2011/06/02
+ * Fixed a crash in clif_parse_FriendsListAdd, when a player is added that is not online (bugreport:4947, since r14835). [Ai4rei]
+2011/05/31
+ * Fixed a typo in buyingstore_create. [Inkfish]
+2011/05/30
+ * Fixed script command 'warpguild' looking for an attached player even when it is not needed (bugreport:4941, since r2674, related r14840). [Ai4rei]
+ - Documented special map names recognized by the command.
+ * Fixed script command 'warpparty' looking for an attached player even when it is not needed (bugreport:4359, since r14311, related r2674 and r5592). [Ai4rei]
+ - This also resolves an issue, where the command fails when the attached player is on a map that has noreturn or nowarpto mapflags set.
+2011/05/29
+ * Fixed pets' speed would not get updated to normal, after they finished running to their owner (bugreport:1304). [Ai4rei]
+ * Fixed NULL pointer in status_change_timer (SC_BERSERK), when the HP subtraction causes the HP drop below 100, but does not exceed remaining HP (bugreport:1150, related r8705, r11786 and r12061). [Ai4rei]
+ * Updated script commands 'npcshopitem', 'npcshopadditem' and 'npcshopdelitem' to support cashshops as well (bugreport:4928). [Ai4rei]
+ * Fixed players could add themselves to their friendslist through their clones or WPE (bugreport:4909). [Ai4rei]
+ * Fixed bonus 'bHPDrainValue' on left hand would work as right hand bonus, when specified with 'bonus' rather than 'bonus2' (bugreport:4939, since r6221). [Ai4rei]
+2011/05/23
+ * Changed enumerating defines into enumerations (related topic:264007). [Ai4rei]
+ - Minor fixups on few macros.
+2011/05/17
+ * Fixed Super Novices could not be adopted (bugreport:4907, since r12389). [Ai4rei]
+ * Improved error reporting during monster database and spawn data reading. [Ai4rei]
2011/05/15
- * Merged changes from trunk [14824:14825/trunk]. [Gepard]
- * Added support for increased max statistics (parameters) for 3rd classes (regular and baby). [Gepard]
- * Updated amounts of status points given at Base Level up for levels over 99. [Gepard]
- * Fixes to Job Level stat bonuses table. [Gepard]
- - Added missing bonuses: Warlock's INT, Minstrel's INT & AGI, Genetic's VIT.
- - Official Royal Guard's bonuses.
- * Merged changes from trunk [14784:14819/trunk]. [Ai4rei]
+ * Extracted calculations of the number of status points PC gets when leveling up to a function. [Gepard]
+ * Removed status point calculations (duplicate) from `pc_resetstate` function. It is now handled by `pc_need_status_point`. [Gepard]
+ * Merged pcdb_checkid update from renewal [14810/branches/renewal]. [Ai4rei]
2011/05/14
- * Added Job Level stat bonuses for baby third classes. [Gepard]
- - Fixed Genetic High's VIT bonus being given at different level than Genetic's (since r14557).
- * Updated attribute (element) damage adjustment table. [Gepard]
+ * Moved bitfield 'boss' inside 'spawn_data' and 'mob_data' into the respective state struct (from r13813, follow up to r14795). [Ai4rei]
+ * Some NPC event related cleaning. [Ai4rei]
+ - Made event label deprecation message a warning rather than an error, as the scripts still work regardless of whether '::On' is used or not (since r6592).
+ - Introduced constant EVENT_NAME_LENGTH (51) for all event name struct fields to eliminate size inconsistency across all objects (was 50 and 51).
+ - Fixed event names, that are considered special attributes, were not wiped when the value was 0 (since r5707).
+ * Removed impossible condition in mob_parse_dataset as spawn_data::eventname was/is the same size as mob_data::npc_event (since r5707). [Ai4rei]
+ * Fixed map-server printing deprecation message, when monster event label was used as transport for special attributes (small/large monsters etc.) in script command 'monster' and related commands (bugreport:1274, since r6592, related r5707). [Ai4rei]
+2011/05/13
+ * Random accumulated bits and pieces. [Ai4rei]
+ - Added checks/warnings to pc_paycash and pc_getcash (follow up to r12264).
+ - Added missing packet_db.txt and packet length table entries for packet 0x0859 (follow up to r14799).
+ - Added set of map_id2xx wrappers for map_id2bl for most common map objects, which return NULL when the bl-type is not the expected one (also updated map_id2nd to behave this way).
+ - Fixed missing ',' in mob_skill_db.txt example (follow up to r14270).
+ - Updated mapcache with recent maps (up to que_lhz).
+ - Functions 'msg_txt' and 'job_name' now return a const pointer.
2011/05/08
- * Fixed pcdb_checkid not recognizing invalid/unused job classes (bugreport:4830, since r14755). [Ai4rei]
+ * Script command 'query_logsql' now throws a warning when SQL logs are disabled (related r11892). [Ai4rei]
+ * Updated/revised description of instance-related script commands (bugreport:4880). [Ai4rei]
+ - Fixed 'instance_create' would return -4 (party already instancing) when the requested party was not found.
+ - 'instance_create' return value -2 now means 'party not found' rather than 'missing parameter'.
+2011/05/01
+ * Removed functions 'decode_zip' (ancient) and 'encode_zip' (from r824) from grfio. These were outdated copies of zlib's 'uncompress' and 'compress' respectively (related r1530 and r5152). [Ai4rei]
+ * Removed auto-add feature from mapindex code, as map indexes are used for save data, thus need to be constant across server starts (since r4726). [Ai4rei]
+2011/04/28
+ * Fixed @makehomun not checking for existing homunculus properly and thus allowing to create a homunculus when one is already present but inactive (bugreport:4879, since r10272). [Ai4rei]
+ * Updated packet 0x163 (ZC_BAN_LIST) to reflect change in packet layout introduced with 2010-08-03aRagexeRE (bugreport:4881, follow up to r14718). [Ai4rei]
+ * Fixed formatted broadcast messages not working with 2010-11-24aRagexeRE and later (bugreport:4872, since r14120). [Ai4rei]
+2011/04/27
+ * Fixed description for script command 'itemheal' claiming, that this command is responsible for potion visual effects which it is not (item-use causes the client to display these) (since r2397). [Ai4rei]
+2011/04/21
+ * Extended debugging code for bugreport:3504 (related r14599). [Ai4rei]
+2011/04/20
+ * Fixed quest_check checking exactly 3 quest objectives instead of MAX_QUEST_OBJECTIVES (since r13959). [Gepard]
+2011/04/17
+ * Updated packet for the view players' equip feature for 2010-11-24aRagexeRE+ and made it support robes (follow up to r14797). [Ai4rei]
+ - Fixed spawn/walking packets using wrong variable for shifting buffer reference (since r14797).
+ * Fixed char-server missing some WFIFOHEAD (partially due to r10909 being reverted by r11245, follow up to r9307 and r14618). [Ai4rei]
+2011/04/16
+ * Added support for visible garments/robes. [Ai4rei]
+ - For SQL apply upgrade_svn14797.sql to upgrade table `char`; for TXT no action is necessary, as it upgrades itself.
+ - This also fixes NPCs not being visible with clients 2011-01-11aRagexeRE+ (bugreport:4865).
+ * Updated field `weapon` in table `char` to default to '0' (bare-handed) rather than '1' (knife) (follow up to r11696). [Ai4rei]
+ - Apply upgrade_svn14796.sql to reflect the change on existing setups.
+ * Some cleanups related to player and monster states. [Ai4rei]
+ - Moved user_font and bg_id out of states as they are data, not states.
+ - Reordered members of state structs so that bitfields are packed together (less memory gets wasted).
+ - Other insignificant code tweaks.
+2011/04/13
+ * Added missing 0x369 packet.(info provided by Yommy) [Inkfish]
+2011/04/10
+ * Added support for clients 2010-11-23aRagexeRE+ and 2011-01-11aRagexeRE+. [Ai4rei]
+ - Servers that used packet db version 'default' until now need to be updated to use version '25'.
+ * Fixed switching between musical weapons would cancel ongoing dance skills (bugreport:4756, since r3538). [Ai4rei]
+ * Fixed @changegm not updating guild window interface after changing the guild leader (bugreport:408, since r2622, related r3185). [Ai4rei]
+2011/04/09
+ * Moved duel code into a separate file. [Ai4rei]
+ * Added *.opt (VS6 workspace cache file) to svn:ignore. [Ai4rei]
+ * Changed pc_jobid2mapid to use a 1:1 mapping which is less prone to errors and faster than the previous method (follow up to r14755). [Ai4rei]
+2011/04/08
+ * Fixed memory corruption when amount of players online approached FD_SETSIZE (topic:262388, bugreport:4856, since 11897). [Ai4rei]
+ * Fixed a compile error when socket send shortlists are disabled (s->eof instead of s->flag.eof) (follow up to r11930). [Ai4rei]
+2011/04/07
+ * Fixed monster skill associated emotions were always ignored when having less than three digits ( = all ) (bugreport:4842). [Ai4rei]
+ * Throwing around with packet updates. [Ai4rei]
+ - Clarified the description for role-change chatroom packets 0xe0 (CZ_REQ_ROLE_CHANGE) and 0xe1 (ZC_ROLE_CHANGE).
+ - Fixed auction window opening packet 0x25f (ZC_AUCTION_WINDOWS) had also a close button packet attached (since r12270).
+ - Fixed auction search results packet 0x252 (ZC_AUCTION_ITEM_REQ_SEARCH) obtaining only a WFIFO buffer of 20 bytes, regardless of the amount of results (since r12301).
+ - Fixed auction search result item type was .W instead of .L, which also eliminates the unknown field after it (since r12301).
+ - Fixed an odd packet in clif_Auction_close, which is supposed to have layout of 0x25e, while using 0x25d as packet type (since r12323).
+ - Resolved unconfirmed fields in clif_party_show_picker (follow up to r13987).
+ - Updated packet layouts for auction in packet_db.
+2011/04/06
+ * Resolved some pc_setparam issues. [Ai4rei]
+ - Fixed HP/MaxHP/SP/MaxSP could be set to arbitrary values, thus disregarding configuration limits and causing client crashes on certain conditions (bugreport:4177).
+ - Fixed HP/SP not getting adjusted to MaxHP/MaxSP respectively, when the max. value is reduced below the value of the cur. value.
+ - Fixed STR/AGI/VIT/INT/DEX/LUK values could be set beyond character's max. stat limit.
+ - Fixed Gender not being limited to male/female.
+ * Fixed script command 'warpwaitingpc' not checking, whether or not the player still has required amount of Zeny (since r14765). [Ai4rei]
+ - Fixed warping through 'warpwaitingpc' to savepoint would take the fee twice ( missing {} ).
+ - Fixed random warping through 'warpwaitingpc' would not take away fee Zeny at all.
+ * STABLE IS NOW THE OLD TRUNK. THE NEW TRUNK IS NOW FOR BLEEDING-EDGE AND/OR UNTESTED CHANGES. [Paradox924X]
+2011/04/05
+ * Moved detection of monotonic clock support to the configure script, which also checks, whether or not it actually works (bugreport:1003, related r11912 and r11983). [Ai4rei]
+ * Paying and obtaining Zeny (pc_payzeny/pc_getzeny) no longer silently reverses the effect for negative amounts, that is, getting Zeny instead of paying up and vice versa (since r8273, related r8072). [Ai4rei]
+2011/03/29
+ * Added TargetName values to VS2010 project files to prevent MSB8012 warnings (follow-up to r14562). [Gepard]
+2011/03/28
+ * Prevented SC_EXPBOOST, SC_JEXPBOOST and SC_ITEMBOOST (used by Battle Manuals and Bubble Gum) from being dispelled by Gospel. (bugreport:4836) [Paradox924X]
+2011/03/27
+ * Added separate character state for vending (like for buyingstore), instead of vender_id != 0 (follow up to r14682, related r14713). [Ai4rei]
+ * Added support for tracking state of client command /effect through packet 0x21d (CZ_LESSEFFECT). [Ai4rei]
+2011/03/25
+ * Fixed battlegrounds chat packet 0x2dc (ZC_BATTLEFIELD_CHAT) being sent with the battleground id rather than the account id of the talking player (since r13593). [Ai4rei]
+2011/03/22
+ * Documentation updates and fixes. [Ai4rei]
+ - Added documentation for script commands 'bg_getareausers' and 'bg_get_data' (bugreport:3034).
+ - Fixed documentation for script command 'waitingroom2bg_single' (bugreport:4770, since r14373).
+ - Documented optional parameter 'npc name' for script command 'waitingroom2bg'.
+ * Fixed possible client crash when monster is class-changing to mob_avail'd one. [Gepard]
+2011/03/20
+ * Random accumulated tweaks and fixes. [Ai4rei]
+ - Added a error message to npc_enable, to spot disablenpc/enablenpc/hideoffnpc/hideonnpc on non-existing NPCs (related r14750).
+ - Replaced inlined npc_name2id code with calls to npc_name2id.
+ - Open Buying Store skill is now exempted from noskill mapflag like Vending as well (bugreport:4815, follow up to r14713).
+ - Fixed signed constant being returned as unsigned value in get_percentage (bugreport:4765, since r12679).
+ - Replaced strlen checks, which checked whether or not a string is empty, with first-byte checks.
+ - Fixed enabling 'fakename' not clearing party and guild name and cleaned up atcommand 'fakename' code.
+ - Cleaned up party/guild name code in clif_charnameack (follow up to r14737).
+ * Fixed battleground kvm02 and kvm03 scripts referring to NPCs in the custom battleground kvm (bugreport:4812, since r14369). [Ai4rei]
+ - Fixed kvm02 printing different amount of points, than it actually gives.
+ * Updates the to configure script. [Ai4rei]
+ - Added check, whether or not '-Wno-pointer-sign' can actually be used (caused warnings with g++).
+ - Math library is no longer considered required, when math functions are available without it (made configure fail on platforms, where no separate math library is present).
+2011/03/19
+ * Removed leftovers of old charcommand config (follow-up to r13403). [Gepard]
+ * Added check to ensure character `rename` status will be saved if changed. [Gepard]
+ * Fixed Beast Strafing (HT_POWER) damage formula provided by Playtester (bugreport:4675, since r4392). [Gepard]
+2011/03/15
+ * Fixed pet database reading displaying wrong amount of read entries per file (bugreport:4797). [Ai4rei]
+ * Fixed canceling item appraisal window (Magnifier and Identify) would prevent players from using any follow up skills (bugreport:4809, since r14545). [Ai4rei]
+ * Fixed monsters getting warped when stepping on an NPC warp when at least one of the bits of setting 'mob_warp' was set (bugreport:4766, since r12757). [Ai4rei]
+2011/03/14
+ * Fixed a typo in npc_touchnext_areanpc (NPC's map being used as it's x-coordinate), which caused ::OnTouch_ invokation to affect different area than intended (bugreport:4814, since r14097). [Ai4rei]
+2011/03/13
+ * Script commands documentation updates. [Ai4rei]
+ - Added missing description for script command 'cooking' provided by Masao (bugreport:3372, follow up to r13628).
+ - Fixed wrong item levels being listed in the description to script command 'produce'.
+2011/03/08
+ * Fixed @item2 and script command 'getitem2' not taking MAX_REFINE define into consideration (bugreport:4804). [Ai4rei]
+ * Fixed @str/@agi/@vit/@int/@dex/@luk commands setting a stat to 0 (rather than 1), when exact amount is subtracted (bugreport:4803, since r14493). [Ai4rei]
+2011/03/07
+ * Cleaned up packet dumping code. [Ai4rei]
+ - Replaced utils function 'dump' with 'WriteDump' (files) and 'ShowDump' (console), and used those to replace inlined code in clif (related r10947).
+ - Fixed clif_parse_debug not printing anything, when it is used with a variable length packet.
+ - Added ability to dump invalid packets through define DUMP_INVALID_PACKET (clif.c).
+ - Removed code to dump all incoming packets, as that can be achieved with the DUMP_UNKNOWN_PACKET code as well when needed (from r1009).
+2011/03/06
+ * Implemented search store info system (aka. vending and buying store search) together with related items. [Ai4rei]
+ - Requires 2010-08-03aRagexeRE or later and can be disabled in 'conf/battle/feature.conf'.
+2011/03/05
+ * Fixed possible crash in script_reportdata, when a script string becomes NULL for whatever reason. [Ai4rei]
+2011/03/04
+ * Fixed recursive map_quit invocation when a buying store is auto-closed (login when @autotrade/logout) (bugreport:4796, since r14724). [Ai4rei]
+2011/03/02
+ * Updates to the super novice's guardian angel prayer effect and related handling code. [Ai4rei]
+ - Removed the server-side chat tracking code (since r492) responsible for invoking the effect, since this functionality is handled by the client (invocation also processed by the server). This also fixes the missing 7 lines requirement on the server-side handling (bugreport:4786).
+ - Updated the checks in the client-invoked code part and documented the packet.
+ - Now only the prayer in client-side data\msgstringtable.txt (lines 791~794) applies.
+ - The prayer is no longer blocked by noskill-restrictions.
+ - Exp at 0% and 100% no longer causes the effect to trigger.
+ - Fixed the exp percent check to also check one digit after the decimal point (requirement is 10.0% not 10%).
+2011/03/01
+ * Fixed packet 0x839 (new guild member expel notification) was expected on clients 2010-06-08aRagexeRE~2010-07-30aRagexeRE, although those do not implement it (bugreport:4789, since r14718, related r14368). [Ai4rei]
+2011/02/26
+ * Reduced MAX_GUILD_STORAGE from 1000 to 600 (like MAX_STORAGE), since storage with 1000 items causes too large packets that are dropped then, which in turn gives the impression that the items are lost (follow up to r14503). [Ai4rei]
+ - Note: When updating an existing server, keep in mind that excess items in guild storage get lost, when MAX_GUILD_STORAGE is reduced.
+2011/02/23
+ * Updates to various custom stuff that buying stores might/are expected to support (follow up to r14713). [Ai4rei]
+ - Buying store no longer works on novending maps/cells (bugreport:4778).
+ - MANNER_NOROOM mute flag now affects buying stores as well (like vending).
+ - Enabled @autotrade for buying stores.
+ * Fixed whispering to NPCs (::OnWhisperGlobal) not working for NPCs whose unique name is different from the display name (bugreport:4776, since r2624). [Ai4rei]
+2011/02/20
+ * Fixed SP regen not stopping when Maximize Power (BS_MAXIMIZE) is in effect. [Ai4rei]
+ * Fixed missing </File> end-tag in VC8 map-server sql project file (since r14713). [Ai4rei]
+2011/02/19
+ * Updated guild expel notification packet 0x15c (ZC_ACK_BAN_GUILD) for clients 2010-06-08aRagexeRE and newer to 0x839. [Ai4rei]
+ * Removed '.txt' from log config info messages, as the values already have an extension (since r197, related r196). [Ai4rei]
+ * Fixed gcc compile warnings in char-server and console plug-in (bugreport:4771, topic:208746, since r9631 and r14700). [Ai4rei]
+ * Fixed buying stores could be opened and sold to regardless of distance between seller and buyer (since r14713). [Ai4rei]
+ * Fixed 'feature.conf' not getting loaded and a typo buying store feature setting name (follow up to r14713). [Ai4rei]
+ * Implemented buying store system (aka. reverse vending, purchase shop) together with related skill and items, without NPCs. [Ai4rei]
+ - For SQL apply upgrade_svn14713_log.sql to upgrade tables `picklog` and `zenylog`; for TXT no action is necessary.
+ - Requires 2010-04-20aRagexeRE or later and can be disabled in 'conf/battle/feature.conf'.
+2011/02/17
+ * Merged enumeration update from renewal [14699/branches/renewal] for a future commit. [Ai4rei]
+2011/02/16
+ * Updated configure/make scripts to resolve various issues. [Ai4rei]
+ - Added detection whether or not -fPIC switch is required when compiling shared objects (plug-ins) to resolve compile issues on 64-bit platforms (topic:208746).
+ - Native 'strnlen' implementations are now detected and disable the one in strlib (bugreport:1261).
+ - Define 'DB_MANUAL_CAST_TO_UNION' is now set when necessary (bugreport:1261).
+2011/02/15
+ * Added support for client GM command /check (related r12076). [Ai4rei]
+2011/02/14
+ * Fixed drop list of map flag 'pvp_nightmaredrop' not getting cleared upon @reloadscript (bugreport:4282, follow up to r14668). [Ai4rei]
+ * Fixed GMs with GM level equal to 'lowest_gm_level' being treated as normal players in 'gm_can_party' check (bugreport:4162, since r13143). [Ai4rei]
+ * Fixed a crash when script 'npctalk' is given too long string (bugreport:4759, related r2145). [Ai4rei]
+ - Fixed related buffer overflows in message related clif functions (since r1182, r14270).
+2011/02/09
+ * Fixed script command 'bpet' (Pet Incubator) displaying an empty egg list when attempting to hatch a pet while already having one out (bugreport:3313). [Ai4rei]
+2011/02/08
+ * Moved script constant manipulation code into separate functions script_get_constant / script_set_constant. [Ai4rei]
+ - Added protection against overwriting existing names in script constant creation code.
2011/02/07
- * Updated enumerations of skill, skill unit and status option IDs. [Ai4rei]
+ * Added support for new delayed character deletion. [Ai4rei]
+ - Asks for birth date associated with the account and has a waiting time of 24 hours by default (setting).
+ - For SQL apply upgrade_svn14700.sql to upgrade table `char`; for TXT no action is necessary, as it upgrades itself.
+ - This completes support for clients 2010-08-03aRagexeRE and later.
+ * Updated login sql engine version, missed during `birthdate` addition (follow up to r14672).
+ * Updates to various client packets. [Ai4rei]
+ - Renamed clif_set0199 and clif_send0199 to clif_map_property and clif_map_property_mapall respectively and added an enumeration for currently known map properties.
+ - Renamed clif_set01D6 to clif_map_type and added an enumeration for currently known map types.
+ - Resolved undocumented field of packet 0x22e (ZC_PROPERTY_HOMUN) to attack range.
+ - Fixed aspd field of packet 0xbd (ZC_STATUS) getting filled with karma value.
+ - Removed commented clif_skillinfo (duplicate of clif_item_skill).
+ - Other minor comment updates and 'FIXME' assignments.
+2011/02/06
+ * Replaced 'nameid < 500' checks in script commands 'countitem', 'countitem2' and 'autoequip' with stricter ones. [Ai4rei]
+ - This should stop meaningless itemdb_search warnings from said commands when an invalid item id is used.
+2011/02/05
+ * Fixed NPCs with closing parenthesis in their name could not be duplicated (bugreport:3235). [Ai4rei]
+ * Fixed closing 'switch' curly not causing script EOL processing to trigger, leading to the script line after the switch being handled as belonging to the curly-less statement block (bugreport:3273, since r3422). [Ai4rei]
+ * Removed unnecessary getlogincount.pl, mapcheck.sh and mapchecker.sh tools (topic:262934). [Ai4rei]
+2011/02/02
+ * Fixed non-windows 'findfile' utils function missing a 'closedir' call (bugreport:4739, since r1629). [Ai4rei]
+2011/01/31
+ * Inventory and Cart item arrays are no longer getting compacted on each log-in/teleport/warp. [Ai4rei]
+ - This also resolves yet another issue caused by r14685 (bugreport:2604).
+ * Various accumulated cleanups and fixes. [Ai4rei]
+ - Improved the compile speed for files which include common/socket.h on windows builds (related r10471).
+ - Moved FIFOSIZE_SERVERLINK define from common/mmo.h to common/socket.h (since it is a server connection FIFO size setting).
+ - Fixed script command 'areamobuseskill' canceling monster's skill cast before it determined it's new target, which could be 'none' (bugreport:3272, since r13897).
+ - Added a protection against attempts to read an empty backup / write to a full backup in skill_dance_switch as per TODO from r11347.
+ * Fixed faulty WFIFO reallocation causing memory exhaustion (bugreport:4737, since r1816, related r11503, r11571, r11886 and r12232). [Ai4rei]
+2011/01/30
+ * Fixed equipped items' bonus no longer working after log-in until next status recalc, due to missing pc_setequipindex which was previously called by pc_checkitem (bugreport:2604, since r14685). [Ai4rei]
2011/01/29
- * Merged changes from trunk (r14636:14686). [Ai4rei]
+ * Removed @aw/@away which duplicates and collides with client's /am (away message) (bugreport:1235, topic:163083, since r4351). [Ai4rei]
+ * Fixed a map-server crash when invalid items are deleted (option 'item_check') from a logging-in character (bugreport:2604). [Ai4rei]
+ - This removes the pc_checkitem call from pc_authok, as the check is done in clif_parse_LoadEndAck as well, after first status calc has taken place.
+ - Inventory list is now sent before pc_checkitem in clif_parse_LoadEndAck, so that deleted items do not show up as 'unknown item'.
+2011/01/27
+ * Fixed @accept not checking, whether or not a duel is already full (bugreport:2740, since r4111). [Ai4rei]
+ * Resolving allow/deny IP rules not working (bugreport:2632). [Ai4rei]
+ - Fixed 'mask' being filled with 'ip' when standard mask was specified (since r9647).
+ - Fixed 'ip' and 'mask' (bit mask) being stored in wrong byte order (network order instead of host order) (since r10162).
+2011/01/26
+ * Fixed buyers, that are currently in a vending shop could be fooled into buying an item at different price than they see by reopening the vending shop (bugreport:4728). [Ai4rei]
+ - This implements the official vending shop unique id handling (previously mistaken for char id), made compatible with packets before it's introduction (follow up to r14234).
+2011/01/24
+ * Added documentation for undocumented bonuses (bugreport:4727, follow up to r302, r354, r485, r699, r928, r1116, r6221, r7982, r10031, r13596 and r14018). [Ai4rei]
+2011/01/23
+ * Some cleaning here and there. [Ai4rei]
+ - Fixed a typo in basejob_baseclass_upper sample script (since r3893).
+ - Fixed (for sake of consistency) usage of 'sd' before corresponding nullpo check in party_invite (bugreport:2752).
+ - Fixed atcommand config reading would not cap level for charcommands, when using atcommand level as fallback (bugreport:2961, since r13409).
+ - Removed orphaned clif_mob_hp declaration from clif.h (bugreport:2788, since r2092).
+ - Removed unnecessary look-up in itemdb_available macro, as dummy_item is considered unavailable.
+ - Removed leftover shortlist linked-list struct (followup to r10507).
+2011/01/19
+ * Fixed solo dance/star gladiator warm AoE no longer following the owner and cloaking wall rules no longer working (bugreport:4720, since r14671). [Ai4rei]
+2011/01/16
+ * Fixed a map-server crash, when a script attempts to call a local function, which has only a forward declaration. Such functions now count as script parse error (bugreport:4009, since r3422). [Ai4rei]
+ * Fixed definitions of local functions would set a label reference, even when their name was already taken (follow up to r14600, since r3422).
+2011/01/15
+ * Various accumulated insignificant fixes to documentation, examples and comments. [Ai4rei]
+2011/01/14
+ * Added 'birthdate' field to account data. For SQL apply upgrade_svn14672.sql to upgrade table `login`; for TXT no action is necessary, as it upgrades itself. [Ai4rei]
+ - Control panel developers are encouraged to enable players to modify this value, as it is required for new character deletion (2010-08-03aRagexeRE and later, not yet implemented).
+ * Removed unconditional redundant status change checks before status_change_end calls (follow up to r12890). [Ai4rei]
+ * Replaced remaining occurences of '-1' with 'INVALID_TIMER', where appropriate (follow up to r12998). [Ai4rei]
+ * Removed 'gui' plug-in (support plug-in for 3rd party eAthena GUI front-ends) (topic:262934). [Ai4rei]
+2011/01/13
+ * Fixed mapflags 'restricted', 'nocommand', 'bexp' and 'jexp' still not getting completely initialized upon @reloadscript (bugreport:4710, follow up to r14548). [Ai4rei]
+ * Removed ladmin (remote administration tool), all related support code and the checkversion.pl tool with it's support code, which was shared with ladmin (topic:262934, related bugreport:1147, bugreport:1889, r9408 and r9610). [Ai4rei]
+ * Fixed chrif-packet processing considering free/unused packet IDs incorrectly as variable length packets (-1 = variable length, 0 = disabled packet). [Ai4rei]
+ * Added support for creating account through the console-plugin on login-server (replaces ladmin functionality unavailable through atcommands). [Ai4rei]
+ * Reformatting and minor cleanups to console-plugin related code. [Ai4rei]
+2011/01/10
+ * Fixed script command 'cleararray' setting 1 element more, than it is told to (bugreport:2047, since r12253). [Ai4rei]
+ - Fixed 'inaccessible element 127' issue in 'cleararray', 'setarray' (since r10813) and 'copyarray' (since r14608) script commands (bugreport:864, related r12253, follow up to r14608).
+ * Fixed monster level not getting updated in monster name (option 'show_mob_info'), when a monster levels up (option 'mobs_level_up') (follow up to r8644, related r187). [Ai4rei]
+ * Made script command 'charisalpha' always return 1 when 'isaplha' is true, rather than to return the return value of 'isalpha' which is only defined as zero/non-zero and can be different from 1 (bugreport:2024, related r2003). [Ai4rei]
+2011/01/09
+ * Fixed packet_len entry for packet 0x289 (ZC_PC_CASH_POINT_UPDATE) not matching the actual size used in clif_cashshop_ack (bugreport:4701, since r14639, follow up to r12264). [Ai4rei]
+2011/01/08
+ * Fixed script command 'progressbar' resuming fails on second invocation, when there was no script pause between the first and second call (bugreport:4698, since r14024). [Ai4rei]
+ * Fixed kill steal protection result in skill casting (unit_skilluse_id2) not getting evaluated (bugreport:1808, since r12203). [Ai4rei]
+ - Moved kill steal protection in skill casting to be only executed, after the actual target has been determined and validated (since r12203).
+ * Applied fix provided by Valaris to make /pvpinfo actually work. (bugreport:1785, since r1602). [Ai4rei]
+ - Filled-in missing packet fields and documented the packet. Note, that this command does not show anything outside of PvP maps (client-side limitation).
+ * Fixed @homlevel usage message stating, that deleveling is possible, although it is not (bugreport:1485, since r10272). [Ai4rei]
+ - The command now fails, if it is given a zero or negative value.
+2011/01/07
+ * Fixed @alootid using 'autolootitem' (internal name) in it's usage message (bugreport:1445, since r12203). [Ai4rei]
+2011/01/06
+ * Fixed script command 'deletearray' deleting incorrect amount of array elements from arrays with empty elements (bugreport:4628). [Ai4rei]
+2011/01/05
+ * Fixed ends of statement blocks missing script EOL processing, thus causing 'next line' label (-) to misbehave in statement blocks without additional curly braces (bugreport:4417, since r3422). [Ai4rei]
+2011/01/04
+ * Added support for removal of trailing comments to sv_readdb (bugreport:4680). [Ai4rei]
+2011/01/01
+ * Fixed local files could not be aliased with resnametable.txt in grfio (bugreport:2203, since r5152). [Ai4rei]
+ * Cleanups to grfio. [Ai4rei]
+ - Replaced strncpy with safestrncpy (bugreport:3080).
+ - Ensured, that all local paths are normalized and work whether or not the data dir ends with '/'.
+ - Local files are no longer added to the GRF+alias file list (apparently served to cache file size, with no performance gain).
+ - Buffer for files is no longer allocated with 1024 extra bytes, but only 1 for zero-termination of text files.
+ * Updates to map cache generator tool. [Ai4rei]
+ - Removed unmaintained grfio library copy and made the tool use the one in /common instead (related r12726).
+ - Updated makefile to use compile options/libraries determined by configure (bugreport:1109).
+ - Fixed error messages from the tool and grfio library overlapping each other (bugreport:2403).
+2010/12/31
+ * Pending trade requests no longer prevent a character from trading someone else instead (official). [Ai4rei]
+ - This fixes trade window displaying wrong name when attempting to deal multiple characters (bugreport:344).
2010/12/30
- * Fixed a nullpo crash in pc_gainexp when receiving exp though script command getexp (topic:262958, since r14625). [Ai4rei]
+ * Fixed improper use of itemdb_search. It does not return NULL but a dummy item, if the item id is invalid. [Ai4rei]
+2010/12/29
+ * Made remaining csv databases (guild, castle, homunculus, itemdb, mercenary) use sv_readdb, where applicable (follow up to r14524, r14526 and r14532). [Ai4rei]
+ - Few databases remain unchanged, which have either a custom layout or are otherwise incompatible with sv_readdb.
+ * Collection of random insignificant changes. [Ai4rei]
+ - Added progress indication on map-server shutdown when objects are removed from maps, as it takes significant amount of time to complete.
+ - Moved ers_free in db_obj_vclear, so that the node pointer is not used for comparison after it has been freed.
+ - Some documentation of shop packets.
+ * Fixed 'console' plugin not working on Windows, due to NULL passed to CreateThread instead of required pointer to thread id variable. [Ai4rei]
+ - Fixed 'console' plugin causing delete_timer error when it fails to load, due to uninitialized variable.
+ * Renamed plugin.def to sample.def and added 'sample' plugin exports into it, as it's purpose is nothing than a sample right now.
+ - Also added .def files for 'gui' and 'pid' plugins as MSVC does not export everything automatically and missing event export cause the plugins silently failing.
+ - Added VS6, VS8 and VS9 projects for compiling plug-ins, which can be used on Windows.
+ * The plug-in system will now report, if it cannot import an event function.
+2010/12/28
+ * Fixed char-server making assumptions about RFIFO data length in character deletion packet (since r10909). [Ai4rei]
+ * Fixed login-server discarding RFIFO data, when the length is 1 byte; minimum packet size is 2 bytes (since r5027).
+ - Fixed login-server not skipping packet 0x2728's data on failure (since r12043).
+ * Removed unmaintained and broken 'adduser' tool (topic:262284). [Ai4rei]
2010/12/27
- * Added item stacking limit database (item_stack.txt) required for runes and other 3rd class related skill items. [Ai4rei]
- * Merged fixes from trunk for script command 'checkweight' (r14631) and skill-based item production (r14633). [Ai4rei]
+ * Fixed skill_can_produce_mix not checking, whether or not the produced goods can actually be stored (bugreport:4674). [Ai4rei]
2010/12/26
- * Merged changes from trunk (r14496:14630). [Ai4rei]
+ * Reverted r14565, as the database version is already properly commented in source and is overwritten upon first sync of account.txt anyway. [Ai4rei]
+ * Cleaned up script command checkweight. [Ai4rei]
+ - Replaced some code parts with calls to pc_checkadditem and pc_inventoryblank (follow up to r13735).
+ - Fixed item id not getting checked for validity properly.
+ * Moved MAX_AMOUNT check in pc_checkadditem to the top of the function, to prevent unnecessary inventory scan before it.
+ * Fixed opening other player's vending terminating currently running NPC conversation. Vending is now unavailable when talking to an NPC (bugreport:2208). [Ai4rei]
+ * Fixed vending not accepting 0 Zeny as sell price. The client asks for confirmation when you attempt to sell items at 0 Zeny (bugreport:2595, since r918 and r11344).
+ * Fixed items, that get dropped at 100% chance, being reported in @iteminfo as 'available in the shops only' (since/replaces r3482). [Ai4rei]
+ * Updated commands @delitem/#delitem. [Ai4rei]
+ - No longer deletes stackable items one by one (bugreport:1914).
+ - Fixed pets not getting deleted when a pet egg was deleted.
+ - Fixed outdated usage message (since r13403).
+2010/12/25
+ * Fixed two-hand weapons not getting recognized as such upon equipping, causing respective one-hand weapon's base ASPD values being used instead (bugreport:4659, related r12599). [Ai4rei]
+ * Updated script commands delitem and delitem2. [Ai4rei]
+ - Items are now deleted only if there is enough of them (as per r14395, related r13368).
+ - Not equipped items are now actually prioritized over equipped ones (related r200).
+ - Fixed item id not getting checked for validity.
+ * Fixed a compile error in txt-converter-char caused by 'save_log' being declared by both SQL and TXT (bugreport:4671, since r14619). [Ai4rei]
+ * Made SQL char-server options 'chars_per_account' and 'char_del_level' work on TXT as well (follow up to r1063 and r8420). [Ai4rei]
+2010/12/24
+ * Added support for new /remove and /recall packets for 2010-08-03aRagexeRE and newer. [Ai4rei]
+ * Synchronized TXT/SQL char-server code a bit. [Ai4rei]
+ * Fixes to char-server. [Ai4rei]
+ - Removed unnecessary #includes from TXT and synchronized them with SQL.
+ - Fixed TXT having start Zeny of 500 instead of 0 by default (follow up to r4409 and r8420).
+ - Fixed TXT using 1024 instead of NAME_LENGTH for 'unknown_char_name' (follow up to r2191).
+ - Fixed SQL potentionally attempting to disconnect a player for account_id == 0 in changesex packet.
+ - Fixed SQL looking for option 'db_path' in 'inter_athena.conf' instead of 'char_athena.conf'.
+ - Fixed char select not sending a reply packet, when selected character was not found.
+ - Made use of safestrncpy instead of strcpy, strncpy and memset for copying strings where appropriate.
+ - Removed unused function 'chardb_final' in TXT (since r4878).
+ - Removed unnecessary WFIFOHEAD in char deletion in SQL (since r11245, related r9307 and r10909).
+2010/12/23
+ * Fixed server processing the sell list (deleting items and giving zeny) for script-controlled shops (OnSellItem), causing the controller script to fail (bugreport:4656, since r6557). [Ai4rei]
+ - This also makes the server first check the sell list and only continue, if all items can be processed, thus no longer causing incomplete deals and the need for client disconnection in such case (since r6557).
+2010/12/22
+ * NPC shop buy list received from the client is now validated for scripted shops (OnBuyItem), before the control is transfered to the script, as well (bugreport:3680, since r5841, related r8525). [Ai4rei]
+ * Resolved random compiler warnings. [Ai4rei]
+ - Silenced pointer size mismatch gcc warning for variables passed to script_setarray_pc (bugreport:4661, since r14613).
+ * Fixed sql mapreg loading code specifying output buffer size for SqlStmt_BindColumn without zero-terminator, leading to truncations of variable names and/or their values when using the maximum length (bugreport:1939, since r11245). [Ai4rei]
+2010/12/21
+ * Added script_setarray_pc for setting temporary character array variables outside of script.c without requiring them to use script-interal code (add_str and reference_uid). [Ai4rei]
+ - Applied script_setarray_pc to assignment of dynamic shop arrays (related r5841).
+ * Replaced in-place generation of uid of script array elements with reference_uid macro (follow up to r10813). [Ai4rei]
+ * Fixed dynamic shop arrays @bought_nameid, @bought_quantity, @sold_nameid and @sold_quantity not getting reset to zero before use, thus providing attached script with wrong/old data, if it did not clear them by itself in previous call (bugreport:1574, since r5841). [Ai4rei]
+ * Removed 'strsignal' forward-declaration from 'sig' plugin to prevent random gcc distributions from failing to compile due to mismatched declaration already present in <string.h> (bugreport:4644, topic:262284, follow up to r14591). [Ai4rei]
+ - Removed WIN32 conditions in non-WIN32 code in 'sig' plugin (follow up to r4380).
+2010/12/19
+ * Fixes to the dynamic shop sample script. [Ai4rei]
+ - Fixed wrong check in ::OnSellItem, causing not-enough-items condition not getting detected (since r11829).
+ - Fixed an exploit in ::OnSellItem, causing Zeny to be given to the player, even if the items fail to delete (since r5842).
+ - Fixed missing 'close' in ::OnSellItem (since r5842).
+ - Replaced 'end' with 'close' in ::OnBuyItem (since r5842, followup to r11829).
+ * Replaced maximum script array size literals with a define (constant). [Ai4rei]
+ - Fixed an off-by-one mistake in copyarray, allowing to copy 1 element more into the target array, than allowed (since r10813).
+2010/12/18
+ * Renamed item array in 'struct guild_storage' from 'storage_' to 'items' to match 'struct storage_data' (related r12933). [Ai4rei]
+ * Bunch of intif_parse_LoadGuildStorage fixes. [Ai4rei]
+ - Fixed guild storage not being sorted, when the storage had to be requested first (follow up to r14605).
+ - Fixed missing check, whether or not the character has already an open storage (follow up to r4562).
+ - Fixed missing GM trust check, whether or not the player is allowed to use guild storage (follow up to r3481).
+ * Fixed character storage no longer being sorted (bugreport:1982, since r12950). [Ai4rei]
+ - Guild storage is now sorted before being displayed rather than after being saved...
+ - Merged storage_gsortitem into storage_sortitem.
+ - Added option 'client_sort_storage' to control storage sorting (disabled by default, like on official servers).
+ * Updates to handling of hair color/style and cloth color of characters. [Ai4rei]
+ - Moved limit shortcut defines from mmo.h to battle.h, as they are only required in files, which include battle.h (since pre-svn 2004/10/15).
+ - Moved hair style/color validation from char-server to map-server. This enables use of non-default limits as specified in battle config, rather than being restricted to hard-coded ones (bugreport:150).
+ - Cleaned up related capping of values in pc_changelook (related r1708).
+ * Fixed usage of literals for map name length in character list packet (since r14368). [Ai4rei]
+2010/12/17
+ * Made the 'player not attached' script error also report the function it occured in, if available. [Ai4rei]
+ * Fixed a crash, when script command 'doevent' is called without an attached player (bugreport:3973). [Ai4rei]
+ * Fixed label definitions silently overwriting built-in script functions (bugreport:2806, follow up to r8027). [Ai4rei]
+ * Added temporary check to skill_delunitgroup to prevent crashes when 'group' is NULL and added some debug messages to track down the source of the crash (bugreport:3504). [Ai4rei]
+ * Spellchecked script_commands.txt. [Ai4rei]
+ * Random script engine clean-ups that have accumulated over time. [Ai4rei]
+ - Resolved unnecessary script_getnum re-evaluation in a loop in script command 'npcshopdelitem' (since r7120).
+ - Script commands 'menu', 'select' and 'prompt' now warn, when there are more menu options, than the client can handle correctly (TODO from r10316).
+2010/12/16
+ * Reverted r14525 (introduction of SV_READDB_MAX_FIELDS) because it causes confusion to certain group of users and depends on MAX_LEVEL since r14526. [Ai4rei]
+ - Made sv_readdb be able to process any amount of columns instead.
+ * Fixed a mistake in sv_split, causing CR being recognized as EOL character, even when only LF was specified (since r12459). [Ai4rei]
+2010/12/15
+ * Corrected type of second argument of script command 'setbattleflag' from string to number (bugreport:4640, topic:261833, since r5407, related r14577). [Ai4rei]
+ * Fixed missing check in cooking, causing cooking kit requirement could be bypassed by sending 0x25b (CZ_REQ_MAKINGITEM) directly (bugreport:4642, since r13628). [Ai4rei]
+2010/12/13
+ * Fixed plugin 'sig' not being compilable on Mac OS X, due to different return value type of 'strsignal' (bugreport:4637). [Ai4rei]
+2010/12/12
+ * Fixed homunculus_autoloot not working with skill/item granted drops and loot (bugreport:4452, since r12203). [Ai4rei]
+ * Fixed killed monsters were assumed to be killed by homunculus only, if no damage log entries were elligible for exp distribution, even when no homunculus took part in damage dealing (bugreport:4452, since r12203). [Ai4rei]
+ * Added enumeration for monster damage log field 'flag'. [Ai4rei]
+ * Removed disabled backup of script command 'isequipped' (since r1605). [Ai4rei]
+ * Made script engine's DEBUG_DISASM block use script_op2name, rather than hardcoding operator names as per TODO from r13083 (related r9569, follow up to r10667). [Ai4rei]
+ * Cleaned up MOTD reading (related r292 and r4552). [Ai4rei]
+ - Added a warning for common client crash caused by the sequence ' :' in MOTD.
+ * Fixed impossible condition in soundeffect script command (since athena-dev-2.1.1-mod1046, related r5841). [Ai4rei]
+ * Updates to the playBGM functionality (since r14335). [Ai4rei]
+ - Removed impossible condition in playBGM script command (from soundeffect).
+ - Removed unused code (retrieving of a bl) in playBGMall (from soundeffectall).
+ - Made playBGMall default to 'entire server' when both map name and coordinates are omitted instead of printing an error.
+ - Updated documentation for playBGM and playBGMall to match actual behavior.
+ - Removed unused parameter 'bl' in clif_playBGM.
+2010/12/11
+ * Fixed script command setd always assuming value parameter to be a string, which causes hexadecimal and octal numbers not being handled properly (topic:261833, followup to r14577 and r14578). [Ai4rei]
+ * Updates to dynamic server information `ragsrvinfo` on SQL. [Ai4rei]
+ - Fixed exp and drop rates (int) getting truncated (short) when sent to char-server.
+ - Removed `motd` from `ragsrvinfo` as it is not dynamically changed by the server and as such can be read by 3rd party applications directly from conf/motd.txt if required.
+ * Added support for checking argument data type of built-in script functions (bugreport:1701, topic:261833, related r14573). [Ai4rei]
+ * Fixed error message in intif_parse_mercenary_received printing wrong struct size (bugreport:4633, since r13116). [Ai4rei]
+2010/12/10
+ * Replaced buildin_getpartyname_sub, buildin_getguildname_sub and buildin_getguildmaster_sub, which create only unnecessary overhead, with equivalent inlined code. [Ai4rei]
+ - Fixed a memory leak in getguildmasterid, when the guild leader was not online (bugreport:2743).
+ - Command getguildmasterid no longer requires the guild leader to be online.
+ * Fixed bAutoSpellOnSkill bonuses not working independently of each other (bugreport:4617, since r13596, related r14536). [Ai4rei]
+ * Revised argument declaration of all script commands according to the actual functions' argument usage. [Ai4rei]
+ - Fixed many script commands with fixed amount of optional parameters to no longer accept any amount of arguments (faulty declaration).
+ - Corrected use of dummy parameter for guildopenstorage in scripts.
+2010/12/09
+ * Removed some of the duplicate, storage-related packet code. [Ai4rei]
+ - Removed clif_guildstoragelist and adjusted clif_storagelist to be able to handle any kind of storage.
+ - Removed clif_guildstorageitemadded in favor of clif_storageitemadded.
+ - This also fixes clif_guildstorageitemadded sending old update packet for clients prior 20090603, although packet 0x1c4 (ZC_ADD_ITEM_TO_STORE2) was added before PACKETVER 5 (before 2003-11-03aSakexe, exact addition date unknown) (since r14286).
+2010/12/08
+ * Applied some script command documentation updates and fixes as already done inside the wiki. [Ai4rei]
+ - Updated description for 'next', 'return', 'attachrid', 'detachrid', 'itemskill', 'openstorage', 'skilleffect', 'donpcevent', 'day', 'night', 'atoi' and 'axtoi' to resolve inaccuracies, missing information or unverified behavior.
+ - Clarified the purpose of the 'jump_zero' and 'getelementofarray' script commands.
+ - Fixed 'changebase' stating, that it only works in item scripts (since r2402).
+ - Fixed 'kickwaitingroomall' stating, that it is not properly linked into the script engine, thus not working (since r13732).
+ - Updated the description for 'cutin' so that it does not give the impression, that the client is able to display multiple illustrations at once, and being less confusing about the maximum size of illustrations.
+2010/12/07
+ * Fixed txt-converter-login was no longer compilable with supplied project/make files, due to missing reference to function exists in utils.c (bugreport:4626, since r14528). [Ai4rei]
+ * Applied svn:eol-style to VS2010 project files (follow up to r14562). [Ai4rei]
+ * Reverted r14563, due to multiple issues which render the source malfunctioning or uncompilable. To be redone later (bugreport:4627). [Ai4rei]
+ * Removed unnecessary reference operator from scanf calls passing character strings as arguments in adduser tool. [Paradox924X]
+ * Revert of r14564. The value wasn't an arbitrary account id but rather the file format version. Added comment specifying this. [Paradox924X]
+ * Removed arbitrary account id from atop account.txt (Since r13000). [Paradox924X]
+ * Changed almost all instances of sprintf() to snprintf(). [Paradox924X]
+ * Further corrections to doc/item_bonus.txt (bugreport:4624). [Ai4rei]
+ - Added documentation for bUnbreakableGarment, bUnbreakableWeapon, bUnbreakableArmor, bUnbreakableHelm, bUnbreakableShield, bUnbreakableShoes, bBreakWeaponRate and bBreakArmorRate (follow up to r485, r915, r1116, r13819).
+ - Fixed bIgnoreDefEle having race constants listed instead of element constants (since r12804).
+ - Fixed bUnstripable* not mentioning, that the bonus parameter is meaningless (follow up to r1382).
+2010/12/06
+ * Corrected description for bonuses bHealPower and bHealPower2 stating skill names being supported, although the bonus does not accept 'skill' as parameter (bugreport:4619, since r13821). [Ai4rei]
+2010/12/05
+ * Rev. 14559 Added support for bonus bAddItemHealRate, which works for all healing items care of Epoque. [L0ne_W0lf]
+2010/12/04
+ * Fixed party booking search increasing result counter, even when no results were found, causing crashes from r14516 onwards (bugreport:4615, since r14412). [Ai4rei]
+2010/12/03
+ * Fixed soul linkers not receiving taekwon angel buffs upon level up (bugreport:3585, since r3657 and r3660, related r6294). [Ai4rei]
+ * Corrected 'chance' in description for bonuses bAddMonsterDropItem and bAddMonsterDropItemGroup (bugreport:4063, partially since r1572). [Ai4rei]
+ * Removed leftovers of the item_value_db.txt feature (bugreport:2031, since athena-dev-2.1.1-mod377, followup to pre-svn 2004/05/29). [Ai4rei]
+2010/12/02
+ * Various code tweaks and updates related to item types. [Ai4rei]
+ - Replaced item type literals with their appropriate constants.
+ - Added itemdb_typename to replace the ugly "BUG!" filled array in @iteminfo (since r1741, follow up to r14550).
+ - Made the item database parser verify item type for validity.
+ - Added item type constants to const.txt for use in scripts (getiteminfo).
+ * Added support for IT_CASH to @iteminfo, logging filters and item drop rate adjustment. Added 'show_picker.item_type'-specific IT_CASH value to it's description (follow up to r14549). [Ai4rei]
+ * Rev. 14549 Added item type IT_CASH (item type 18) Requires user confirmation before using/generating item(s). [L0ne_W0lf]
+ * Fixed mapflags not getting initialized upon @reloadscript (bugreport:2247, since r1275). [Ai4rei]
+ * Removed redundant check in food vs. cash food status change overriding code, partially suggested by xazax (related r14437 and r14510). [Ai4rei]
+ * Added an error message when a client connection exceeds the socket write buffer, so that it does not appear to be closed for no apparent reason (follow up to r13469). [Ai4rei]
+ * Random clif.c fixes and cleanups. [Ai4rei]
+ - Fixed clif_homskillup using sd before nullpo check (since r9297 and r9307).
+ - Merged code responsible for disabling pets in GvG and spawning them as per TODO (related r12002).
+ - Fixed base and job exp not being sent to the client for new connections (follow to r14505).
+ - Fixed Magnifier (item) and Identify (skill) attempting to identify an item, even when cancel is pressed, causing skill failed message.
+ * Added defines for guild notice sizes (MAX_GUILDMES1 and MAX_GUILDMES2). [Ai4rei]
+ * Added clif_starskill (packet 0x20e, ZC_STARSKILL) to host the packet previously implemented by clif_feel_info, clif_hate_info, clif_mission_info and clif_feel_hate_reset (related r4352, r4375 and r9162). [Ai4rei]
+ - This also fixes sd->bl.id being sometimes supplied for monster_id in this packet.
+ * Various additions and updates to the comments and documentation of packets in clif. [Ai4rei]
+ - Renamed clif_01ac to clif_skillunit_update to make it look less 'mysterious'.
+ * Removed clif_weather_sub and clif_misceffect2 in favor of clif_specialeffect_single and clif_specialeffect (all of them are ZC_NOTIFY_EFFECT2). [Ai4rei]
+ * Rev. 14540 Monsters spawned with mob-generating items now have MD_ANGRY applied to them. [L0ne_W0lf]
+2010/12/01
+ * Added packet 0x1b1 (ZC_SHOWDIGIT). [Ai4rei]
+ * Confirmed packet 0x291 (ZC_MSG) to be general-purpose msgstringtable.txt packet and updated all functions using it (related r12245 and r13126). [Ai4rei]
+ * Fixed using main chat nick longer than 15 characters would cause a buffer overflow (bugreport:2671, since r5013). [Ai4rei]
+ * Fixed bAutoSpellOnSkill bonuses could not be chained (bugreport:4421, since r13596). [Ai4rei]
+ * Fixed NPC_TALK message being displayed with EOL character attached (bugreport:4596, since r14270). [Ai4rei]
+ * Reverted change from r14533 and restored the 3rd field of mob_avail.txt being optional (bugreport:4599, since r14532). [Ai4rei]
+ * Monster database reading now utilizes sv_readdb. [Ai4rei]
+2010/11/30
+ * Fixed out-of-bound access to percentrefinery array causing refine bonuses stop working (bugreport:4598, since r14526). [Ai4rei]
+ * Fixed class being used instead of idx in status_readdb_job2 (bugreport:4597, since r14526). [Ai4rei]
+ * Moved function 'exists' (file presense check) to utils.c, so that it is available to code outside of lock.c [Ai4rei]
+ - Fixed associated F_OK and R_OK defines causing 'already defined' warnings on MinGW (since r1361).
+ * Resolved missing script documentation (bugreport:4578). [Ai4rei]
+ - Added documentation for bonus bAutoSpellOnSkill (follow up to r13596).
+ - Added documentation for script command progressbar (follow up to r14024).
+ * Made job_db1.txt, job_db2.txt, size_fix.txt and refine_db.txt reading use sv_readdb. [Ai4rei]
+ - NOTE: Any MAX_LEVEL (map.h) increase requires at least same increase of SV_READDB_MAX_FIELDS (strlib.c) as well.
+ * Added SV_READDB_MAX_FIELDS define for configuration of the sv_readdb limit. [Ai4rei]
+ * Made skill_tree.txt reading use sv_readdb. [Ai4rei]
+ - Added define for skill entry requirements.
+ - Reports duplicate skills within same job class.
+ * Added a define for star gladiator feel/hate info array length (follow up to r8721 and r11840). [Ai4rei]
+ * Fixed script command getusers causing 'player not attached' errors when asking for character count in entire server (bugreport:4591, since r14495). [Ai4rei]
+2010/11/29
+ * Resolved issues with item delay system. [Ai4rei]
+ - Fixed random crashes caused by map_session_data corruption due to out-of-bounds access to item_delay array (bugreport:4568, since r14455).
+ - Fixed item delay database not being compatible with @reloaditemdb. Item delays are now reset upon reloading, much like a restart would do (bugreport:4589).
+ - Fixed trailing commented lines in db/item_delay.txt could cause 'too many entries' error to be displayed.
+ - Fixed last entity of a cash food item not being recognized as cash food, thus not receiving use delay, due to access to deleted inventory slot (since r14426).
+ - These changes also fix a warning regarding variable 'i' in pc_useitem being potentionally uninitialized (bugreport:4559).
+2010/11/28
+ * Added an option to re-roll the /dice emotion server-side, to prevent cheats during events (bugreport:4194). [Ai4rei]
+ * Added emotion_type enumeration for clif_emotion constants. [Ai4rei]
+ - Made clif_parse_Emotion use clif_emotion, rather than having it's code inlined.
+ * Added clr_type enumeration for vanish effect constants. [Ai4rei]
+ * Resolved multiple issues with the party booking system (bugreport:4573, since r14412). [Ai4rei]
+ - Fixed recruitments were limited to party leaders.
+ - Fixed recruitment index was party id instead of an auto-increment value, causing sorting by age not working.
+ - Fixed search result packet being sent on recruitment creation (probably to work-around next problem).
+ - Fixed packet 0x0805 not getting sent, because of commented entries in packet_db.txt (packet ver. restriction of clif_send).
+ - Fixed recruitment creation notice being sent to the recruiter only.
+ * Removed 'negative clrtype is used for skipping unauthed objects from saving' introduced in r9975, as it is no longer required/used (follow up to r12223). [Ai4rei]
+ * Made the party booking search pass results as array of pointers, rather than array of indexes, which require further lookup. [Ai4rei]
+ * Replaced literal constants related to the party booking system with defines. [Ai4rei]
+ * Fixed pets derived from immobile monsters not being able to walk (bugreport:3377, since r13789). [Ai4rei]
+ - This also fixes pets using original monster walk speed, instead of the one defined in pet db.
+ - Fixed pets not being able to attack (pet_attack_support and pet_damage_support) when derived from a monster, which is not able to attack.
+2010/11/27
+ * Fixed a crash uncovered with r14501, caused by outdated local variables when a script is about to suspend or terminate (bugreport:4577). [Ai4rei]
+ * Fixed a crash when using food status bonuses with cash food status bonuses (bugreport:4582, since r14437). [Ai4rei]
+2010/11/26
+ * Fixed description of bCriticalAddRace having 'race' and 'crit' parameters interchanged (bugreport:4383, since r1116 and r1382, related r12804). [Ai4rei]
+ * Changed 'killerrid' and 'killedrid' from player vars to player params (bugreport:3249) [ultramage]
+ - Now stored in player session data, so they don't get saved on logout anymore.
+ - Added sql upgrade script 'upgrade_svn14507.sql' to remove the now unused player variables.
+ * Some updates and fixes to script command documentation. [Ai4rei]
+ - Fixed small inaccuracy in description for homevolution (bugreport:125).
+ - Added ~AnnieRuru~'s fixes to item scripts, variables, and commands addtimer and addnpctimer (bugreport:373).
+ - Fixed documentation for function command in regard of passed arguments and return value. (bugreport:373).
+ - Simplified description for getusers, by hiding internal mechanics of the command, which are irrelevant to a scripter (bugreport:2545).
+ - Added description for setfont and mercenary-related commands (bugreport:3034).
+ - Added documentation for ?: operator and "global" labels provided by Gepard (bugreport:3650).
+ - Added documentation for operators -, ~ and ! (bugreport:3650).
+ * Fixed base and job exp not getting reset on (de)leveling through commands (bugreport:85). [Ai4rei]
+ - Fixed level up related functions not updating client-side exp information, causing the exp percent value display random values.
+ - Fixed party system not getting notified of level-ups through parameter changes.
+ * Fixed auto-generated statpoint table missing 3 status points (since r1107). [Ai4rei]
+2010/11/25
+ * Too large client packets, which would otherwise cause the client to crash, are now dropped and reported (bugreport:4391). [Ai4rei]
+ * Fixed a crash when an unknown map is encountered during parsing a 'script' npc and the script has mismatched curly braces (bugreport:4423, since r11502). [Ai4rei]
+ * Fixed script commands attachrid and detachrid not updating the attached character's information about currently running script, causing errors with dialog-based scripts or preventing characters from walking (bugreport:4571). [Ai4rei]
+2010/11/24
+ * Fixed party booking search not interpreting level 0 as 'all levels' and using level as upper rather than lower bound (bugreport:4537, since r14412). [Ai4rei]
+ * Display a message showing the user where to change MAX_ITEMDELAYS when they have too many entries in the item_delays db. Follow-up to r14455. [Paradox924X]
+ * Fixed pets with player sprites causing the client to crash while looking for non-existing resources (topic:260895, follow up to r14488). [Ai4rei]
+ * Fixed calls to pc_delautobonus assuming map_session_data::autobonus2 and map_session_data::autobonus3 arrays having the same size as map_session_data::autobonus (since r13915). [Ai4rei]
2010/11/23
* Added script command pushpc, which is required by newer scripts. [Ai4rei]
- Moved knockback-part of skill_blown into unit_blown, to allow unconditional knockback required by pushpc without copy-pasting code.
@@ -922,7 +1655,7 @@ Date Added
2008/11/11
* Updated script_commands.txt [FlavioJS]
* Made scripts terminate with an error: (fixes bugreport:2429)
- - when getitem/getitem2 tries to delete more items than the player has
+ - when delitem/delitem2 tries to delete more items than the player has
- when trying to set Zeny to a negative number.
2008/11/09
* Added a check to make sure killed monster's level was greater than half of the mercenary owner's level before incrementing mercenary's killcount. (bugreport:2410) [Paradox924X]
diff --git a/eAthena-10.sln b/RAthena-10.sln
index 991395305..991395305 100644
--- a/eAthena-10.sln
+++ b/RAthena-10.sln
diff --git a/eAthena-9.sln b/RAthena-9.sln
index 7a1f69c67..7a1f69c67 100644
--- a/eAthena-9.sln
+++ b/RAthena-9.sln
diff --git a/conf/Changelog.txt b/conf/Changelog.txt
index 43c92fc74..8a32c7f47 100644
--- a/conf/Changelog.txt
+++ b/conf/Changelog.txt
@@ -1,5 +1,7 @@
Date Added
+2011/10/15
+ * Rev. 14972 Updated misleading comment in conf/mapflag/partylock.txt (bugreport:4930, since r14092). [Ai4rei]
2011/08/21
* Rev. 14938 Added setting 'client_limit_unit_lv' to control the unit types which are affected by 'max_lv' and 'aura_lv' settings. [Ai4rei]
2011/08/10
diff --git a/conf/battle/client.conf b/conf/battle/client.conf
index c6a5159d5..7194c23bf 100644
--- a/conf/battle/client.conf
+++ b/conf/battle/client.conf
@@ -78,7 +78,7 @@ area_size: 14
// NOTE: You also need to adjust the client if you want this to work.
// NOTE: Default is 99. Values above 127 will probably behave incorrectly.
// NOTE: If you don't know what this does, don't change it!!!
-max_lv: 150
+max_lv: 99
// Level required to display an aura.
// NOTE: This assumes that sending max_lv to the client will display the aura.
@@ -86,7 +86,7 @@ max_lv: 150
// Example: If max_lv is 99 and aura_lv is 150, characters with level 99~149
// will be sent as being all level 98, and only characters with level
// 150 or more will be reported as having level 99 and show an aura.
-aura_lv: 150
+aura_lv: 99
// Units types affected by max_lv and aura_lv settings. (Note 3)
// Note: If an unit type, which normally does not show an aura, is
diff --git a/conf/battle/exp.conf b/conf/battle/exp.conf
index f3d438ea2..f5078b0b6 100644
--- a/conf/battle/exp.conf
+++ b/conf/battle/exp.conf
@@ -87,7 +87,7 @@ death_penalty_base: 100
// Job exp. penalty rate (Each 100 is 1% of their exp)
death_penalty_job: 100
-// When a player dies, how much zeny should we penalize them with?
+// When a player dies (to another player), how much zeny should we penalize them with?
// NOTE: It is a percentage of their zeny, so 100 = 1%
zeny_penalty: 0
diff --git a/conf/battle/gm.conf b/conf/battle/gm.conf
index 21b54f386..d345b3978 100644
--- a/conf/battle/gm.conf
+++ b/conf/battle/gm.conf
@@ -56,6 +56,10 @@ gm_kick_chat: no
// set to 'Yes', Normal players (gm level 0) can never use a GM command even if you set the command level to 0.
atcommand_gm_only: no
+// (@) @allstats/@str/@agi/@vit/@int/@dex/@luk
+// allow gms to bypass the maximum stat parameter? ( if yes gm stats can go up to 32k ) default: no
+atcommand_max_stat_bypass: no
+
// Is the character of a GM account set as the object of a display by @ command etc. or not?
hide_GM_session: no
diff --git a/conf/battle/items.conf b/conf/battle/items.conf
index 200241ca6..9dc7ca314 100644
--- a/conf/battle/items.conf
+++ b/conf/battle/items.conf
@@ -87,11 +87,3 @@ gtb_sc_immunity: 50
// NOTE: Different cards that grant the same skill will both
// always work independently of each other regardless of setting.
autospell_stacking: no
-
-// Rune consumption is blocked by the skill's cooldown (note 1)
-rune_block_by_skill: yes
-
-// Rune consumption is blocked by previously activated status effect (Note 1)
-// associated with the skill the rune stone being used would cast.
-// ie: if SC_REFRESH is active, then the Nosiege Runestone is unuseable.
-rune_block_by_status: no
diff --git a/conf/battle/player.conf b/conf/battle/player.conf
index 005570c9c..d8efd9f3a 100644
--- a/conf/battle/player.conf
+++ b/conf/battle/player.conf
@@ -88,20 +88,18 @@ max_sp: 1000000
// Max limit of char stats. (agi, str, etc.)
max_parameter: 99
-// Same as max_parameter, but for baby classes.
-max_baby_parameter: 80
-
-// Same as max_parameter, but for third classes.
+// Same as max_parameter, but for 3rd classes.
max_third_parameter: 120
-// Same as max_parameter, but for baby third classes.
-max_baby_third_parameter: 108
+// Same as max_parameter, but for baby classes.
+max_baby_parameter: 80
// Max armor def/mdef
+// NOTE: This setting have no effect if server is run on Renewal Mode (RRMODE)
// NOTE: does not affects skills and status effects like Mental Strength
// If weapon_defense_type is non-zero, it won't apply to max def.
// If magic_defense_type is non-zero, it won't apply to max mdef.
-max_def: 32767
+max_def: 99
// Def to Def2 conversion bonus. If the armor def/mdef exceeds max_def,
// the remaining is converted to vit def/int mdef using this multiplier
diff --git a/conf/battle/skill.conf b/conf/battle/skill.conf
index 061f7b0f3..960960692 100644
--- a/conf/battle/skill.conf
+++ b/conf/battle/skill.conf
@@ -27,6 +27,11 @@ casting_rate: 100
// Delay time after casting (Note 2)
delay_rate: 100
+// Does the delay time depend on the caster's DEX and/or AGI? (Note 1)
+// Note: On Official servers, neither Dex nor Agi affect delay time
+delay_dependon_dex: no
+delay_dependon_agi: no
+
// Minimum allowed delay for ANY skills after casting (in miliseconds) (Note 1)
// Note: Setting this to anything above 0 can stop speedhacks.
min_skill_delay_limit: 100
@@ -44,6 +49,9 @@ default_walk_delay: 300
// min_skill_delay_limit.
no_skill_delay: 2
+// At what dex does the cast time become zero (instacast)?
+castrate_dex_scale: 150
+
// Will normal attacks be able to ignore the delay after skills? (Note 1)
skill_delay_attack_enable: yes
@@ -205,12 +213,6 @@ berserk_cancels_buffs: no
max_heal: 9999
max_heal_lv: 11
-// Level and Strength of "MVP Decrease AGI". When someone casts Decrease AGI of this
-// level or above, Agility will be reduced by max_decagi for max_decagi_dur milliseconds.
-max_decagi: 50
-max_decagi_dur: 120000
-max_decagi_lv: 11
-
// Emergency Recall Guild Skill setting (add as appropiate).
// Note that for the skill to be usable at all,
// you need at least one of 1/2 and 4/8
diff --git a/conf/char_athena.conf b/conf/char_athena.conf
index 512f3cb97..4ffd47783 100644
--- a/conf/char_athena.conf
+++ b/conf/char_athena.conf
@@ -10,7 +10,7 @@ passwd: p1
// Server name, use alternative character such as ASCII 160 for spaces.
// NOTE: Do not use spaces in the name, or guild emblems won't work client-side!
-server_name: eAthenaRE
+server_name: RAthena
// Wisp name for server: used to send wisp from server to players (between 4 to 23 characters)
wisp_server_name: Server
diff --git a/conf/map_athena.conf b/conf/map_athena.conf
index 644bafd53..f25f6a695 100644
--- a/conf/map_athena.conf
+++ b/conf/map_athena.conf
@@ -19,7 +19,7 @@
// only as information/reference.
//--------------------------------------------------------------
-// Configuration Info
+// Configuration Info
//--------------------------------------------------------------
// Interserver communication passwords, set in account.txt (or equiv.)
userid: s1
@@ -59,6 +59,14 @@ map_port: 5121
//If redirected output contains escape sequences (color codes)
stdout_with_ansisequence: no
+//Makes server log selected message types to a file in the /log/ folder
+//1: Log Warning Messages
+//2: Log Error and SQL Error messages.
+//4: Log Debug Messages
+//Example: "console_msg_log: 7" logs all 3 kinds
+//Messages logged by this overrides console_silent setting
+console_msg_log: 0
+
//Makes server output more silent by ommitting certain types of messages:
//1: Hide Information messages
//2: Hide Status messages
diff --git a/conf/mapflag/partylock.txt b/conf/mapflag/partylock.txt
index 78faf4b50..e3720f5a6 100644
--- a/conf/mapflag/partylock.txt
+++ b/conf/mapflag/partylock.txt
@@ -1,6 +1,6 @@
//===== eAthena Script =======================================
//= Map flag that disable party modification.
-//= Currently not used.
+//= Currently not used officially by any maps.
//===== By: ==================================================
//= eAthena Dev Team
//= v 1.0
diff --git a/conf/mapflag/reset.txt b/conf/mapflag/reset.txt
index b6693eaf2..5e0e621d9 100644
--- a/conf/mapflag/reset.txt
+++ b/conf/mapflag/reset.txt
@@ -1,42 +1,42 @@
-//===== eAthena Script =======================================
-//= Map flags that enable the use of Neuralizer
-//===== By: ==================================================
-//= Daegaladh
-//===== Current Version: =====================================
-//= 1.0 [Daegaladh]
-//===== Compatible With: =====================================
-//=
-//===== Description: =========================================
-//=
-//============================================================
-
-alberta mapflag reset
-aldebaran mapflag reset
-amatsu mapflag reset
-ayothaya mapflag reset
-brasilis mapflag reset
-comodo mapflag reset
-einbroch mapflag reset
-einbech mapflag reset
-geffen mapflag reset
-gonryun mapflag reset
-izlude mapflag reset
-jawaii mapflag reset
-hugel mapflag reset
-lighthalzen mapflag reset
-louyang mapflag reset
-manuk mapflag reset
-mid_camp mapflag reset
-moc_ruins mapflag reset
-morocc mapflag reset
-moscovia mapflag reset
-niflheim mapflag reset
-prontera mapflag reset
-payon mapflag reset
-pay_arche mapflag reset
-rachel mapflag reset
-splendide mapflag reset
-umbala mapflag reset
-veins mapflag reset
-xmas mapflag reset
-yuno mapflag reset
+//===== eAthena Script =======================================
+//= Map flags that enable the use of Neuralizer
+//===== By: ==================================================
+//= Daegaladh
+//===== Current Version: =====================================
+//= 1.0 [Daegaladh]
+//===== Compatible With: =====================================
+//=
+//===== Description: =========================================
+//=
+//============================================================
+
+alberta mapflag reset
+aldebaran mapflag reset
+amatsu mapflag reset
+ayothaya mapflag reset
+brasilis mapflag reset
+comodo mapflag reset
+einbroch mapflag reset
+einbech mapflag reset
+geffen mapflag reset
+gonryun mapflag reset
+izlude mapflag reset
+jawaii mapflag reset
+hugel mapflag reset
+lighthalzen mapflag reset
+louyang mapflag reset
+manuk mapflag reset
+mid_camp mapflag reset
+moc_ruins mapflag reset
+morocc mapflag reset
+moscovia mapflag reset
+niflheim mapflag reset
+prontera mapflag reset
+payon mapflag reset
+pay_arche mapflag reset
+rachel mapflag reset
+splendide mapflag reset
+umbala mapflag reset
+veins mapflag reset
+xmas mapflag reset
+yuno mapflag reset
diff --git a/conf/msg_athena.conf b/conf/msg_athena.conf
index f6d696e27..ae2cd5cd9 100644
--- a/conf/msg_athena.conf
+++ b/conf/msg_athena.conf
@@ -217,7 +217,7 @@
201: You don't have this quest skill.
202: This player has forgotten the skill.
203: This player doesn't have this quest skill.
-//204: FREE
+204: You can't open a shop on this cell.
//205: FREE
206: '%s' skill points reset.
207: '%s' stats points reset.
@@ -427,6 +427,8 @@
504: Used %d kafra points and %d cash points. %d kafra and %d cash points remaining.
505: Gained %d cash points. Total %d points.
506: Gained %d kafra points. Total %d points.
+410: Removed %d cash points. Total %d points.
+411: Removed %d kafra points. Total %d points.
// Trade Spoof Messages
507: This player has been banned for %d minute(s).
diff --git a/db/Changelog.txt b/db/Changelog.txt
index aeb03dd00..310b32f57 100644
--- a/db/Changelog.txt
+++ b/db/Changelog.txt
@@ -9,27 +9,11 @@
13005 Angelic Wing Dagger: NEED INFO.
=======================
-2011/10/26
- * Rev. 14984 Added Rune Knight skill updates, and supporting information for r14983. [L0ne_W0lf]
- * Updated Emperium to be plant-mode.
- * Updated item database with RE stats.
- * Added new constants to const.txt.
-2011/09/30
- * Rev. 14964 Minor changes from kRO's 30/08/2011 maintainence, and general updates. [L0ne_W0lf]
- * Added constants to the database for future updates.
- * Updated Runestones and creation items.
- * Added Runestone delays to item_delay.
- * Added Runestones receipies to produce_db.
- * Added dummy rates to refine_db.
- * Added Rune Knight skills to skill_cast_db
- * Updated Rune Knight skills, and Arch Bishop skills.
- * Updated SP requirements in skill_require_db.
+2011/11/03
+ * Rev. 14989 Updated item_buyingstore.txt according to 2011/11/02 kRO update. [Ai4rei]
+ - Enabled older items, that were previously unknown to the item db.
2011/09/27
* Rev. 14963 Updated item_noequip.txt examples to reflect recent changes (follow up to r14961). [Ai4rei]
-2011/08/26
- * Rev. 14941 Several updates in relation to 3rd jobs. [L0ne_W0lf]
-2011/08/10
- * Rev. 14931 Added Brasilis database updates from trunk r14928. [L0ne_W0lf]
2011/08/09
* Rev. 14928 Added remaining database modifications for Brasilis.
- Added the skills for the Brasilis monsters.
@@ -37,7 +21,6 @@
- Added stats for the Suspicious Hydra monsters.
- Corrected the capture rate for Suspicious Hydra.
2011/08/07
- * Rev. 14927 Merged database changes from trunk r14927. [L0ne_W0lf]
* Rev. 14926 Minor item-related updates, and a couple quest database updates. [L0ne_W0lf]
2011/07/11
* Rev. 14901 Lots of updates. :] [L0ne_W0lf]
@@ -81,8 +64,6 @@
- Changed Crunch Toast generated by the F_Toast_Box. (Bugreport:4610)
- Corrected typo with Dagger of Hunter, casts Bash level 10 at 10% chance (bugreport:4667)
- Corrected Veteran Hammer, now uses bHealPower instead of bSkillheal. (bugreport:4670)
-2010/12/27
- * Rev. 14634 Added item stacking limitation database 'item_stack.txt'. [Ai4rei]
2010/12/16
* Rev. 14596 Added missing pet db documentation for fields 'attack_rate', 'defence_attack_rate', 'change_target_rate', 'pet_script' and 'loyal_script' based on the one provided by frenzmu06 (bugreport:4636, follow up to r13752). [Ai4rei]
2010/12/13
@@ -90,8 +71,6 @@
- Fixed typo 'HungeyDelay' into 'HungryDelay' in pet database description (bugreport:4636, since r13752).
2010/12/05
* Rev. 14559 Updated some items to use bonus bAddItemHealRate, and healpower2. [L0ne_W0lf]
-2010/12/04
- * Rev. 14557 Added 3rd class stat bonuses (source: kRO website, February 2010). [Ai4rei]
2010/12/02
* Rev. 14555 Corrected incorrect bonuses relating to bAddMonsterDropItem/Group. (burgerport:4569) [L0ne_W0lf]
* Updated the IG_Ore, IG_Food, IG_Recovery and IG_Jewel item groups to official items/rates.
@@ -122,27 +101,13 @@
- Corrected weight of Some_of_Report to 0, as per desc. (bugreport:4541)
- Corrected typos in skill name column in abra_db.txt. (bugreport:4557)
- Corrected what jobs can use the Weihna and Krieg. (bugreport:4558)
- * Added 3rd job constants to const.txt.
- * Corrected level for third jobs in exp.txt.
* Rev. 14469 Fixed packet layout of wanttoconnection for packet_ver 16 and 22 (bugreport:3359, since r9958). [Ai4rei]
2010/11/14
* Rev. 14463 Updated quest and item DBs with Eden Group information. [L0ne_W0lf]
-2010/11/11
- * Rev. 14459 Updated known EXP values, and deleted exp2.txt. [L0ne_W0lf]
2010/11/10
* Rev. 14458 Added some items with enforced delays to the item_delay_db! [L0ne_W0lf]
-2010/11/04
- * Rev. 14445 Updated monster database. Most spawning monsters stats are now updated. [L0ne_W0lf]
- - 'Ghost' mobs, and event monsters are not updated at this time.
- - Information collected from RODE by Gepard.
- * Added demonstrative mob_penalty_db. (unused.)
2010/11/02
* Fixed incorrect status change constants being used in cash food scripts. (bugreport:4477) [Paradox924X]
-2010/10/23
- * Rev. 14435 Updated stats for monsters that spawn on Geffen Fields. [L0ne_W0lf]
- * Packet_db now uses packet_db_ver set to default
-2010/10/20
- * Rev. 14433 Updated stats for monsters that spawn on Prontera Fields. [L0ne_W0lf]
2010/10/11
* Updated cash items to use new cash food statuses. [Paradox924X]
2010/10/05
diff --git a/db/abra_db.txt b/db/abra_db.txt
index ae7f59e11..c25621f91 100644
--- a/db/abra_db.txt
+++ b/db/abra_db.txt
@@ -1,7 +1,16 @@
-// Hocus-Pocus Castable Skills Database
+// Hocus-Pocus (Abrakadabra) Castable Skills Database
//
// Structure of Database:
// SkillID,DummyName,RequiredHocusPocusLevel,Rate
+//
+// 01. SkillID Skill ID to be casted by hocus pocus.
+// 02. DummyName Name of the skill (informative, not used by server).
+// 03. RequiredHocusPocusLevel Minimum skill level of hocus pocus for the current skill to be selected.
+// 04. Rate Chance at which the skill is selected (1 = 0.01%, 10000 = 100%).
+//
+// NOTE: The skill is picked at random from the entire database and then tested for rate. If it
+// does not succeed at that rate, an another skill is picked and tested. This continues
+// until a skill succeeds.
//1,Basic Skill,1,0
diff --git a/db/attr_fix.txt b/db/attr_fix.txt
index ddedfe0d5..134eec5cd 100644
--- a/db/attr_fix.txt
+++ b/db/attr_fix.txt
@@ -1,40 +1,41 @@
// Elemental attribute damage adjustment tables
-// Column titles (top) are target element
-// Rows titles (side) are attack element
+//
+// Row: target's defense element
+// Column: attacker's weapon element
1,10 // lv1 Attribute table
//Neut Watr Erth Fire Wind Pois Holy Shdw Gho Und
- 100, 100, 100, 100, 100, 100, 100, 100, 70, 100, // Neutral
- 100, 25, 100, 150, 90, 100, 75, 100, 100, 100, // Water
- 100, 100, 25, 90, 150, 100, 75, 100, 100, 100, // Earth
- 100, 90, 150, 25, 100, 100, 75, 100, 100, 125, // Fire
- 100, 175, 90, 100, 25, 100, 75, 100, 100, 100, // Wind
+ 100, 100, 100, 100, 100, 100, 100, 100, 25, 100, // Neutral
+ 100, 25, 100, 150, 50, 100, 75, 100, 100, 100, // Water
+ 100, 100, 100, 50, 150, 100, 75, 100, 100, 100, // Earth
+ 100, 50, 150, 25, 100, 100, 75, 100, 100, 125, // Fire
+ 100, 175, 50, 100, 25, 100, 75, 100, 100, 100, // Wind
100, 100, 125, 125, 125, 0, 75, 50, 100, -25, // Poison
100, 100, 100, 100, 100, 100, 0, 125, 100, 150, // Holy
100, 100, 100, 100, 100, 50, 125, 0, 100, -25, // Shadow
- 70, 100, 100, 100, 100, 100, 75, 75, 125, 100, // Ghost
+ 25, 100, 100, 100, 100, 100, 75, 75, 125, 100, // Ghost
100, 100, 100, 100, 100, 50, 100, 0, 100, 0, // Undead
2,10 // lv2 Attribute table
//Neut Watr Erth Fire Wind Pois Holy Shdw Gho Und
- 100, 100, 100, 100, 100, 100, 100, 100, 50, 100, // Neutral
- 100, 0, 100, 175, 80, 100, 50, 75, 100, 100, // Water
- 100, 100, 0, 80, 175, 100, 50, 75, 100, 100, // Earth
- 100, 80, 175, 0, 100, 100, 50, 75, 100, 150, // Fire
- 100, 175, 80, 100, 0, 100, 50, 75, 100, 100, // Wind
+ 100, 100, 100, 100, 100, 100, 100, 100, 25, 100, // Neutral
+ 100, 0, 100, 175, 25, 100, 50, 75, 100, 100, // Water
+ 100, 100, 50, 25, 175, 100, 50, 75, 100, 100, // Earth
+ 100, 25, 175, 0, 100, 100, 50, 75, 100, 150, // Fire
+ 100, 175, 25, 100, 0, 100, 50, 75, 100, 100, // Wind
100, 75, 125, 125, 125, 0, 50, 25, 75, -50, // Poison
100, 100, 100, 100, 100, 100, -25, 150, 100, 175, // Holy
100, 100, 100, 100, 100, 25, 150, -25, 100, -50, // Shadow
- 50, 75, 75, 75, 75, 75, 50, 50, 150, 125, // Ghost
+ 0, 75, 75, 75, 75, 75, 50, 50, 150, 125, // Ghost
100, 75, 75, 75, 75, 25, 125, 0, 100, 0, // Undead
3,10 // lv3 Attribute table
//Neut Watr Erth Fire Wind Pois Holy Shdw Gho Und
100, 100, 100, 100, 100, 100, 100, 100, 0, 100, // Neutral
- 100, -25, 100, 200, 70, 100, 25, 50, 100, 125, // Water
- 100, 100, -25, 70, 200, 100, 25, 50, 100, 75, // Earth
- 100, 70, 200, -25, 100, 100, 25, 50, 100, 175, // Fire
- 100, 200, 70, 100, -25, 100, 25, 50, 100, 100, // Wind
+ 100, -25, 100, 200, 0, 100, 25, 50, 100, 125, // Water
+ 100, 100, 0, 0, 200, 100, 25, 50, 100, 75, // Earth
+ 100, 0, 200, -25, 100, 100, 25, 50, 100, 175, // Fire
+ 100, 200, 0, 100, -25, 100, 25, 50, 100, 100, // Wind
100, 50, 100, 100, 100, 0, 25, 0, 50, -75, // Poison
100, 100, 100, 100, 100, 125, -50, 175, 100, 200, // Holy
100, 100, 100, 100, 100, 0, 175, -50, 100, -75, // Shadow
@@ -44,10 +45,10 @@
4,10 // lv4 Attribute table
//Neut Watr Erth Fire Wind Pois Holy Shdw Gho Und
100, 100, 100, 100, 100, 100, 100, 100, 0, 100, // Neutral
- 100, -50, 100, 200, 60, 75, 0, 25, 100, 150, // Water
- 100, 100, -50, 60, 200, 75, 0, 25, 100, 50, // Earth
- 100, 60, 200, -50, 100, 75, 0, 25, 100, 200, // Fire
- 100, 200, 60, 100, -50, 75, 0, 25, 100, 100, // Wind
+ 100, -50, 100, 200, 0, 75, 0, 25, 100, 150, // Water
+ 100, 100, -25, 0, 200, 75, 0, 25, 100, 50, // Earth
+ 100, 0, 200, -50, 100, 75, 0, 25, 100, 200, // Fire
+ 100, 200, 0, 100, -50, 75, 0, 25, 100, 100, // Wind
100, 25, 75, 75, 75, 0, 0, -25, 25,-100, // Poison
100, 75, 75, 75, 75, 125,-100, 200, 100, 200, // Holy
100, 75, 75, 75, 75, -25, 200,-100, 100,-100, // Shadow
diff --git a/db/castle_db.txt b/db/castle_db.txt
index 050cfc280..37d615496 100644
--- a/db/castle_db.txt
+++ b/db/castle_db.txt
@@ -1,7 +1,15 @@
// Guild Castles Database
//
// Structure of Database:
-// CastleID,MapName,CastleName,OnGuildBreakEventName(to abandon captured castles),Flag(reserved)
+// CastleID,MapName,CastleName,OnGuildBreakEventName,Flag
+//
+// 01. CastleID Unique ID of the castle.
+// 02. MapName Map name to be considered as the castle map.
+// 03. CastleName Name of the castle (used by scripts and guardian name tags).
+// 04. OnGuildBreakEventName NPC unique name to invoke ::OnGuildBreak on, when a occupied
+// castle is abandoned during guild break.
+// 05. Flag Switch flag (reserved as of athena-dev mod0796~0801, not used by server).
+
0,aldeg_cas01,Neuschwanstein,Agit#aldeg_cas01,1 // kRO : Noisyubantian
1,aldeg_cas02,Hohenschwangau,Agit#aldeg_cas02,1 // kRO : Hohensyubangawoo
2,aldeg_cas03,Nuenberg,Agit#aldeg_cas03,1 // kRO : Nyirenverk
diff --git a/db/const.txt b/db/const.txt
index 7777357a2..be5589645 100644
--- a/db/const.txt
+++ b/db/const.txt
@@ -1,3 +1,19 @@
+// Script Constant Database
+//
+// Structure of Database:
+// Identifier Value[ Type]
+//
+// Alternatively:
+// Identifier,Value[,Type]
+//
+// 01. Identifier Unique name for the constant, must not have same name as script commands, functions or variables.
+// 02. Value Value assigned to the constant. This value cannot be changed during the runtime of the server.
+// 03. Type Specifies whether the identifier is a constant (0) or a parameter (1) (optional, defaults to 0).
+//
+// NOTE: Parameters are special in that they retrieve certain runtime values depending on the specified ID
+// in field Value. Depending on the implementation values assigned by scripts to parameters will affect
+// runtime values, such as Zeny, as well (see pc_readparam/pc_setparam).
+
Job_Novice 0
Job_Swordman 1
Job_Mage 2
@@ -80,70 +96,11 @@ Job_Star_Gladiator 4047
Job_Star_Gladiator2 4048
Job_Soul_Linker 4049
-Job_Rune_Knight 4054
-Job_Warlock 4055
-Job_Ranger 4056
-Job_Archbishop 4057
-Job_Mechanic 4058
-Job_Guillotine_Cross 4059
-
-Job_Rune_Knight_H 4060
-Job_Warlock_H 4061
-Job_Ranger_H 4062
-Job_Archbishop_H 4063
-Job_Mechanic_H 4064
-Job_Guillotine_Cross_H 4065
-
-Job_Royal_Guard 4066
-Job_Sorcerer 4067
-Job_Minstrel 4068
-Job_Wanderer 4069
-Job_Sura 4070
-Job_Genetic 4071
-Job_Shadow_Chaser 4072
-
-Job_Royal_Guard_H 4073
-Job_Sorcerer_H 4074
-Job_Minstrel_H 4075
-Job_Wanderer_H 4076
-Job_Sura_H 4077
-Job_Genetic_H 4078
-Job_Shadow_Chaser_H 4079
-
-Job_Rune_Knight2 4080
-Job_Rune_Knight_H2 4081
-Job_Royal_Guard2 4082
-Job_Royal_Guard_H2 4083
-Job_Ranger2 4084
-Job_Ranger_H2 4085
-Job_Mechanic2 4086
-Job_Mechanic_H2 4087
-
-Job_Baby_Rune 4096
-Job_Baby_Warlock 4097
-Job_Baby_Ranger 4098
-Job_Baby_Bishop 4099
-Job_Baby_Mechanic 4100
-Job_Baby_Cross 4101
-Job_Baby_Guard 4102
-Job_Baby_Sorcerer 4103
-Job_Baby_Minstrel 4104
-Job_Baby_Wanderer 4105
-Job_Baby_Sura 4106
-Job_Baby_Genetic 4107
-Job_Baby_Chaser 4108
-
-Job_Baby_Rune2 4109
-Job_Baby_Guard2 4110
-Job_Baby_Ranger2 4111
-Job_Baby_Mechanic2 4112
-
EAJL_2_1 0x100
EAJL_2_2 0x200
EAJL_2 0x300
EAJL_UPPER 0x1000
EAJL_BABY 0x2000
-EAJL_3 0x4000
EAJ_UPPERMASK 0x0fff
EAJ_BASEMASK 0x00ff
@@ -175,32 +132,6 @@ EAJ_ALCHEMIST 0x205
EAJ_ROGUE 0x206
EAJ_SOUL_LINKER 0x207
-EAJ_RUNE_KNIGHT 0x4101
-EAJ_WARLOCK 0x4102
-EAJ_RANGER 0x4103
-EAJ_ARCHBISHOP 0x4104
-EAJ_MECHANIC 0x4105
-EAJ_GUILLOTINE_CROSS 0x4106
-EAJ_ROYAL_GUARD 0x4201
-EAJ_SORCERER 0x4202
-EAJ_MINSTRELWANDERER 0x4203
-EAJ_SURA 0x4204
-EAJ_GENETIC 0x4205
-EAJ_SHADOW_CHASER 0x4206
-
-EAJ_RUNE_KNIGHT_H 0x5101
-EAJ_WARLOCK_H 0x5102
-EAJ_RANGER_H 0x5103
-EAJ_ARCHBISHOP_H 0x5104
-EAJ_MECHANIC_H 0x5105
-EAJ_GUILLOTINE_CROSS_H 0x5106
-EAJ_ROYAL_GUARD_H 0x5201
-EAJ_SORCERER_H 0x5202
-EAJ_MINSTRELWANDERER_H 0x5203
-EAJ_SURA_H 0x5204
-EAJ_GENETIC_H 0x5205
-EAJ_SHADOW_CHASER_H 0x5206
-
EAJ_NOVICE_HIGH 0x1000
EAJ_SWORDMAN_HIGH 0x1001
EAJ_MAGE_HIGH 0x1002
@@ -252,21 +183,6 @@ EAJ_BABY_SOUL_LINKER 0x2207
Option_Wedding 0x1000
Option_Xmas 0x10000
Option_Summer 0x40000
-Option_Dragon1 0x80000
-Option_Wug 0x100000
-Option_Wugrider 0x200000
-Option_Madogear 0x400000
-Option_Dragon2 0x800000
-Option_Dragon3 0x1000000
-Option_Dragon4 0x2000000
-Option_Dragon5 0x4000000
-Option_Riding2 0x8000000
-
-DRAGON_GREEN 0
-DRAGON_BLACK 1
-DRAGON_WHITE 2
-DRAGON_BLUE 3
-DRAGON_RED 4
bc_all 0
bc_map 1
@@ -312,14 +228,14 @@ mf_nomobloot 31
mf_nomvploot 32
mf_noreturn 33
mf_nowarpto 34
-mf_nonightmaredrop 35
+mf_nightmaredrop 35
mf_restricted 36
mf_nocommand 37
mf_nodrop 38
mf_jexp 39
mf_bexp 40
mf_novending 41
-mf_loadevent 42
+mf_loadevent 42
mf_nochat 43
mf_noexppenalty 44
mf_guildlock 45
@@ -329,6 +245,7 @@ mf_allowks 48
mf_monster_noteleport 49
mf_pvp_nocalcrank 50
mf_battleground 51
+mf_reset 52
cell_walkable 0
cell_shootable 1
@@ -493,10 +410,6 @@ bSkillHeal2 1088
bAddEffOnSkill 1089
bHealPower 1090
bHealPower2 1091
-bFixedCastrate 1092
-//bMatk 1093
-bWeaponMatk 1094
-bEquipmentMatk 1095
bRestartFullRecover 2000
bNoCastCancel 2001
@@ -918,10 +831,6 @@ SC_INCFLEE2 248
SC_JAILED 249
SC_ENCHANTARMS 250
SC_MAGICALATTACK 251
-SC_ARMORCHANGE 252
-SC_CRITICALWOUND 253
-SC_MAGICMIRROR 254
-SC_SLOWCAST 255
SC_SUMMER 256
SC_EXPBOOST 257
SC_ITEMBOOST 258
@@ -969,40 +878,6 @@ SC_FOOD_VIT_CASH 305
SC_FOOD_DEX_CASH 306
SC_FOOD_INT_CASH 307
SC_FOOD_LUK_CASH 308
-SC_PARTYFLEE 309
-
-SC_FEAR 310
-SC_BURNING 311
-SC_ENCHANTBLADE 312
-SC_DEATHBOUND 313
-SC_REFRESH 314
-SC_GIANTGROWTH 315
-SC_STONEHARDSKIN 316
-SC_VITALITYACTIVATION 317
-SC_FIGHTINGSPIRIT 318
-SC_ABUNDANCE 319
-SC_MILLENNIUMSHIELD 320
-//SC_REUSE_MILLENNIUMSHIELD 320
-//SC_REUSE_CRUSHSTRIKE 321
-//SC_REUSE_REFRESH 322
-//SC_REUSE_STORMBLAST 323
-//SC_VENOMIMPRESS 324
-SC_EPICLESIS 325
-SC_ORATIO 326
-SC_LAUDAAGNUS 327
-SC_LAUDARAMUS 328
-//SC_CLOAKINGEXCEED 329
-//SC_HALLUCINATIONWALK 330
-//SC_HALLUCINATIONWALK_POSTDELAY 331
-SI_RENOVATIO 332
-//SC_WEAPONBLOCKING 333
-//SC_WEAPONBLOCKING_POSTDELAY 334
-//SC_ROLLINGCUTTER 335
-SC_EXPIATIO 336
-SC_ADORAMUS 380
-SC_AB_SECRAMENT 451
-//SC_ALL_RIDING 472
-SC_CRUSHSTRIKE 599
e_gasp 0
e_what 1
@@ -1631,6 +1506,7 @@ HIDDEN_NPC 111
2_F_MAGICMASTER 123
4_F_TELEPORTER 124
4_M_TELEPORTER 125
+HIDDEN_WARP_NPC 139
4_M_MUT2 401
4_M_SCIENCE 402
4_F_VALKYRIE2 403
@@ -1799,6 +1675,41 @@ MOB_TOMB 565
4_MYSTCASE 566
4_M_SIT_NOVICE 567
4_OCTOPUS_LEG 568
+4_F_NURSE 569
+4_MAL_SOLDIER 570
+4_MAL_CAPTAIN 571
+4_MAL_BUDIDAI 572
+4_M_MAYOR 573
+4_M_BARYO_OLD 574
+4_F_BARYO_OLD 575
+4_F_BARYO_GIRL 576
+4_M_BARYO_BOY 577
+4_M_BARYO_MAN 578
+4_F_BARYO_WOMAN 579
+4_BARYO_CHIEF 580
+4_MAL_KAFRA 581
+4_M_MALAYA 582
+4_F_MALAYA 583
+4_F_PATIENT 584
+4_M_PATIENT 585
+4_F_KR_TIGER 586
+4_M_KR_BOY 587
+4_M_KAGE_OLD 588
+4_WHIKEBAIN 589
+4_EREND 590
+4_RAWREL 591
+4_ARMAIA 592
+4_KAVAC 593
+4_YGNIZEM 594
+4_EREMES 595
+4_MAGALETA 596
+4_KATRINN 597
+4_SHECIL 598
+4_SEYREN 599
+4_HARWORD 600
+4_F_JP_CYNTHIA 601
+4_M_JP_GUSTON 602
+4_M_JP_BERKUT 603
//Free Ids
8_F_GIRL 700
4_F_GODEMOM 701
@@ -2146,15 +2057,3 @@ IT_PETARMOR 8
IT_AMMO 10
IT_DELAYCONSUME 11
IT_CASH 18
-
-Runestone_Ordinary 12737
-Runestone_Quality 12734
-Runestone_Rare 12738
-Runestone_Ancient 12735
-Runestone_Mystic 12736
-
-Produce_Weaponlvl1 1
-Produce_Weaponlvl2 2
-Produce_Weaponlvl3 3
-Produce_Materials 21
-Produce_Runestone 24
diff --git a/db/create_arrow_db.txt b/db/create_arrow_db.txt
index b5f80a215..f438e7de1 100644
--- a/db/create_arrow_db.txt
+++ b/db/create_arrow_db.txt
@@ -2,6 +2,13 @@
//
// Structure of Database:
// SourceID,MakeID1,MakeAmount1,...,MakeID5,MakeAmount5
+//
+// 01. SourceID ID of the item, that is consumed by Arrow Crafting.
+// 02. MakeID ID of the item received from Arrow Crafting.
+// 03. MakeAmount Amount of MakeID item received from Arrow Crafting.
+// ...
+//
+// NOTE: Up to MAX_ARROW_RESOURCE (typically 5) ID/Amount pairs can be specified.
// Old Blue Box --> 50 Sharp Arrows, 50 Sleep Arrows
603,1764,50,1768,50
diff --git a/db/exp.txt b/db/exp.txt
index 059cceb33..3733f3050 100644
--- a/db/exp.txt
+++ b/db/exp.txt
@@ -1,30 +1,28 @@
//Experience tables format:
//Max Level,Class list,Type (0 - Base Exp; 1 - Job Exp),Exp for Lv 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98
//Base - Normal and Baby Jobs
-99,0:1:2:3:4:5:6:7:8:9:10:11:12:13:14:15:16:17:18:19:20:21:23:24:25:26:4023:4024:4025:4026:4027:4028:4029:4030:4031:4032:4033:4034:4035:4036:4037:4038:4039:4040:4041:4042:4043:4044:4045:4046:4047:4048:4049,0,550,900,1500,2200,3200,3800,4200,4550,5000,5500,6000,6100,6350,6700,7350,8000,8400,8800,9200,9700,10300,11000,11800,13000,14000,15000,16000,17000,18000,19000,20000,21000,22000,23200,24000,26000,27500,29000,30000,31500,33000,34000,36000,37500,38000,40000,42000,44500,47000,49000,51000,53000,55000,57000,59000,61500,63000,65000,67000,69000,70000,73000,77000,80000,84000,88000,91000,95000,110000,128000,140000,155000,163000,170000,180000,188000,195000,200000,230000,260000,300000,350000,400000,480000,550000,600000,680000,750000,900000,1000000,1200000,1500000,1800000,2100000,2400000,2800000,3300000,4000000
+99,0:1:2:3:4:5:6:7:8:9:10:11:12:13:14:15:16:17:18:19:20:21:23:24:25:26:4023:4024:4025:4026:4027:4028:4029:4030:4031:4032:4033:4034:4035:4036:4037:4038:4039:4040:4041:4042:4043:4044:4045:4046:4047:4048:4049,0,9,16,25,36,77,112,153,200,253,320,385,490,585,700,830,970,1120,1260,1420,1620,1860,1990,2240,2504,2950,3426,3934,4474,6889,7995,9174,10425,11748,13967,15775,17678,19677,21773,30543,34212,38065,42102,46323,53026,58419,64041,69892,75973,102468,115254,128692,142784,157528,178184,196300,215198,234879,255341,330188,365914,403224,442116,482590,536948,585191,635278,687211,740988,925400,1473746,1594058,1718928,1848355,1982340,2230113,2386162,2547417,2713878,3206160,3681024,4022472,4377024,4744680,5125440,5767272,6204000,6655464,7121664,7602600,9738720,11649960,13643520,18339300,23836800,35658000,48687000,58135000,99999999
//Base - Adv Jobs
-99,4001:4002:4003:4004:4005:4006:4007:4008:4009:4010:4011:4012:4013:4014:4015:4016:4017:4018:4019:4020:4021:4022,0,660,1080,1800,2640,3840,4560,5040,5460,6000,6600,7200,7320,7620,8040,8820,9600,10080,10560,11040,12610,13390,14300,15340,16900,18460,19500,20800,22100,23400,24700,26000,27300,28600,30160,31200,33800,35750,37700,39000,44100,46200,47600,50400,52500,53200,56000,58800,62300,65800,68600,71400,74200,77000,79800,82600,86100,88200,91000,96800,103500,105000,109500,115500,120000,126000,132000,136500,142500,165000,192000,210000,232500,244500,255000,270000,282000,292500,300000,345000,416000,480000,560000,640000,768000,880000,960000,1088000,1200000,1440000,1700000,2040000,2550000,3060000,3570000,4080000,4760000,5610000,6800000
-//Base - 3rd Jobs (Normal and Baby)
-150,4054:4055:4056:4057:4058:4059:4066:4067:4068:4069:4070:4071:4072:4080:4082:4084:4086:4096:4097:4098:4099:4100:4101:4102:4103:4104:4105:4106:4107:4108:4109:4110:4111:4112,0,550,900,1500,2200,3200,3800,4200,4550,5000,5500,6000,6100,6350,6700,7350,8000,8400,8800,9200,9700,10300,11000,11800,13000,14000,15000,16000,17000,18000,19000,20000,21000,22000,23200,24000,26000,27500,29000,30000,31500,33000,34000,36000,37500,38000,40000,42000,44500,47000,49000,51000,53000,55000,57000,59000,61500,63000,65000,67000,69000,70000,73000,77000,80000,84000,88000,91000,95000,110000,128000,140000,155000,163000,170000,180000,188000,195000,200000,230000,260000,300000,350000,400000,480000,550000,600000,680000,750000,900000,1000000,1200000,1500000,1800000,2100000,2400000,2800000,3300000,4000000,7070000,7400000,7770000,8150000,8550000,9100000,9610000,10150000,10570000,11180000,12000000,12930000,13150000,14030000,14420000,15420000,15420000,15670000,16870000,17140000,18720000,19020000,20590000,20930000,22690000,23310000,25290000,26020000,27860000,28535000,30990000,31680000,33560000,34942000,36372000,38350000,39890000,41545000,43330000,45400000,48100000,50410000,53370000,56250000,59230000,62590000,66120000,70200000,75330000,81100000,95000000
-//Base - 3rd Jobs (Adv)
-150,4060:4061:4062:4063:4064:4065:4073:4074:4075:4076:4077:4078:4079:4081:4083:4085:4087,0,660,1080,1800,2640,3840,4560,5040,5460,6000,6600,7200,7320,7620,8040,8820,9600,10080,10560,11040,12610,13390,14300,15340,16900,18460,19500,20800,22100,23400,24700,26000,27300,28600,30160,31200,33800,35750,37700,39000,44100,46200,47600,50400,52500,53200,56000,58800,62300,65800,68600,71400,74200,77000,79800,82600,86100,88200,91000,96800,103500,105000,109500,115500,120000,126000,132000,136500,142500,165000,192000,210000,232500,244500,255000,270000,282000,292500,300000,345000,416000,480000,560000,640000,768000,880000,960000,1088000,1200000,1440000,1700000,2040000,2550000,3060000,3570000,4080000,4760000,5610000,6800000,7070000,7400000,7770000,8150000,8550000,9100000,9610000,10150000,10570000,11180000,12000000,12930000,13150000,14030000,14420000,15420000,15420000,15670000,16870000,17140000,18720000,19020000,20590000,20930000,22690000,23310000,25290000,26020000,27860000,28535000,30990000,31680000,33560000,34942000,36372000,38350000,39890000,41545000,43330000,45400000,48100000,50410000,53370000,56250000,59230000,62590000,66120000,70200000,75330000,81100000,95000000
+99,4001:4002:4003:4004:4005:4006:4007:4008:4009:4010:4011:4012:4013:4014:4015:4016:4017:4018:4019:4020:4021:4022,0,10,18,28,40,85,123,168,220,278,400,481,613,731,875,1038,1213,1400,1575,1775,2268,2604,2786,3136,3506,4130,4796,5508,6264,9645,12392,14220,16159,18209,21649,24451,27401,30499,33748,47342,58160,64711,71573,78749,90144,99312,108870,118816,129154,174196,213220,238080,264150,291427,329640,363155,398116,434526,472381,610848,731828,806448,884232,965180,1073896,1170382,1270556,1374422,1481976,1850800,3389616,3666333,3953534,4251217,4559382,5129260,5488173,5859059,6241919,7374168,9570662,10458427,11380262,12336168,13326144,14994907,16130400,17304200,18516326,19766760,29216160,34949880,40930560,55017900,71510400,106974000,146061000,174405000,343210000
+//Base - 3rd Jobs
+150,4054:4055:4056:4057:4058:4059:4060:4061:4062:4063:4064:4065:4066:4067:4068:4069:4070:4071:4072:4073:4074:4075:4076:4077:4078:4079:4080:4081:4082:4083:4084:4085:4086:4087,0,10,18,28,40,85,123,168,220,278,400,481,613,731,875,1038,1213,1400,1575,1775,2268,2604,2786,3136,3506,4130,4796,5508,6264,9645,12392,14220,16159,18209,21649,24451,27401,30499,33748,47342,58160,64711,71573,78749,90144,99312,108870,118816,129154,174196,213220,238080,264150,291427,329640,363155,398116,434526,472381,610848,731828,806448,884232,965180,1073896,1170382,1270556,1374422,1481976,1850800,3389616,3666333,3953534,4251217,4559382,5129260,5488173,5859059,6241919,7374168,9570662,10458427,11380262,12336168,13326144,14994907,16130400,17304200,18516326,19766760,29216160,34949880,40930560,55017900,71510400,106974000,146061000,174405000,343210000,360090500,377815025,396425776,415967065,436485418,459055606,470340701,482190050,494631866,507695773,523372462,531210807,535913813,540851970,546037035,552259113,555370152,558636742,562066663,565668079,569989779,572150629,573447138,574808474,576237876,577953159,579325385,580766222,582279101,583867625,588633194,592445650,596639351,601252423,606326801,616475558,624594564,633525470,643349467,654155864,691978251,722236162,755519863,792131935,832405213,912951771,977389016,1031157636,1153302698,1236233433,1650887110
//Job - Novice
10,0:4023,1,10,18,28,40,91,151,205,268,340
//Job - 1st Classes
-50,1:2:3:4:5:6:26:4024:4025:4026:4027:4028:4029:4046,1,60,130,260,460,780,1060,1300,1560,1910,2290,2680,2990,3340,3740,4360,4970,5330,6120,6700,8090,8920,9970,11080,12690,14440,15850,17400,19220,21060,22870,24910,26840,29080,31320,33300,37110,40500,43570,46180,53510,57200,60310,65690,70090,72130,77540,83320,90120,97180
+50,1:2:3:4:5:6:26:4024:4025:4026:4027:4028:4029:4046,1,30,43,58,76,116,180,220,272,336,520,604,699,802,948,1125,1668,1937,2226,3040,3988,5564,6272,7021,9114,11473,15290,16891,18570,23229,28359,36478,39716,43088,52417,62495,78160,84175,90404,107611,125915,153941,191781,204351,248352,286212,386371,409795,482092,509596
//Job - 2nd Classes
-50,7:8:9:10:11:12:13:14:15:16:17:18:19:20:21:4030:4031:4032:4033:4034:4035:4036:4037:4038:4039:4040:4041:4042:4043:4044:4049,1,2500,4200,7000,10300,15900,18900,20900,22600,24900,28800,31500,23000,33300,35100,40500,44100,46300,48500,50700,56000,59400,63500,68100,75000,85700,90500,96600,102600,108600,119700,126000,132300,138600,146100,157500,170600,180400,190300,196800,214900,225200,232000,245700,255900,279300,294000,308700,327000,345400
-//Job - Super Novice - Needs to be updated.
+50,7:8:9:10:11:12:13:14:15:16:17:18:19:20:21:4030:4031:4032:4033:4034:4035:4036:4037:4038:4039:4040:4041:4042:4043:4044:4049,1,144,184,284,348,603,887,1096,1598,2540,3676,4290,4946,6679,9492,12770,14344,16005,20642,27434,35108,38577,42206,52708,66971,82688,89544,96669,117821,144921,174201,186677,199584,238617,286366,337147,358435,380376,447685,526989,610246,644736,793535,921810,1106758,1260955,1487304,1557657,1990632,2083386
+//Job - Super Novice
99,23:4045,1,30,43,58,76,116,180,220,272,336,520,604,699,802,948,1125,1668,1937,2226,3040,3988,5564,6272,7021,9114,11473,15290,16891,18570,23229,28359,36478,39716,43088,52417,62495,78160,84175,90404,107611,125915,153941,191781,204351,248352,286212,386371,409795,482092,509596,982092,992092,1002092,1012092,1022092,1032092,1042092,1052092,1062092,1072092,1082092,1092092,1102092,1112092,1122092,1132092,1142092,1152092,1162092,1172092,1182092,1192092,1202092,1212092,1222092,1232092,1242092,1252092,1262092,1272092,1282092,1292092,1302092,1312092,1322092,1332092,1342092,1352092,1362092,1372092,1382092,1392092,1402092,1412092,1422092,1432092,1442092,1452092,1462092
//Job - Novice High
-10,4001,1,12,22,35,50,113,188,256,335,425
+10,4001,1,11,20,31,44,100,166,226,295,374
//Job - Adv First Classes
-50,4002:4003:4004:4005:4006:4007,1,340,550,760,990,1250,1600,1980,2340,2740,3140,3950,4510,5210,5950,7000,8150,9130,10220,11480,12780,14090,15560,16980,18620,20280,21780,24510,27000,29000,31000,36000,39000,41000,45000,49000,51900,55000,59450,64630,70030,74940,79800,84630,89610,95170,100420,107250,112070,118120
+50,4002:4003:4004:4005:4006:4007,1,60,86,116,152,232,360,440,544,672,1040,1208,1398,1604,1896,2250,3336,3874,4452,6080,7976,11128,12544,14042,18228,28683,38225,42228,46425,58073,70898,91195,99290,107720,131043,156238,195408,210430,226010,269028,314788,384853,479453,510878,620880,715530,965928,1024488,1205230,1273990
//Job - Adv Second Classes
-70,4008:4009:4010:4011:4012:4013:4014:4015:4016:4017:4018:4019:4020:4021:4022,1,3800,6200,10400,15200,22900,27100,30000,32500,35700,41300,45000,45800,47600,50300,58700,63900,67100,70300,73500,90600,96200,102700,110200,121400,144700,152900,163100,173300,183500,213500,224700,236000,247200,260700,299800,324800,343600,362300,374800,474400,497000,512100,542200,564800,644300,678200,712100,754500,796900,949300,988100,1026800,1065600,1104300,1334800,1371400,1425300,1470600,1515800,2003800,2032800,2119900,2236100,2323200,3025300,3433300,3776600,4436900,6758400
-//Job - Star Gladiator - Needs to be updated.
+70,4008:4009:4010:4011:4012:4013:4014:4015:4016:4017:4018:4019:4020:4021:4022,1,288,368,568,696,1206,1774,2192,3196,5080,7352,8580,9892,13358,18984,31925,35860,40013,51605,68585,87770,96443,105515,131770,167428,206720,223860,241673,294553,362303,479053,513362,548856,656197,787507,927154,985696,1046034,1231134,1449220,1678177,1773024,2182221,2534978,3043585,3782865,4461912,4672971,5971896,6250158,6875174,7562691,8318960,9150856,10065942,11877812,14015818,16538655,19515624,23028437,28094693,34275525,41816141,51015692,62239144,79666104,101972614,130524946,167071930,213852071
+//Job - Star Gladiator
50,4047:4048,1,27434,27434,27434,27434,27434,27434,27434,27434,27434,27434,27434,27434,27434,27434,27434,27434,27434,27434,54868,70216,77154,84412,105416,133942,165376,179088,193338,235642,289842,348402,373354,399168,477234,572732,674294,716870,760752,895370,1053978,1220492,1289472,1587070,1843620,2213516,2521910,2974608,3115314,3981264,4166772
//Job - Ninja/Gunslinger
-70,24:25,1,200,300,400,600,700,1000,1200,1400,1700,1900,2400,2700,3200,3600,4200,4900,5500,6100,6900,7700,8400,9300,10100,11100,12100,13000,14600,16100,17500,18600,21500,23300,24700,27000,29000,30000,32400,35000,38100,41100,44000,46700,49600,52500,55600,58900,62700,65500,69200,72300,81200,84100,89300,95500,100900,107800,114900,120700,128600,150500,176900,196100,219600,234200,247900,266400,281300,296600,308000
-//Job - 3rd Classes
-50,4054:4055:4056:4057:4058:4059:4060:4061:4062:4063:4064:4065:4066:4067:4068:4069:4070:4071:4072:4073:4074:4075:4076:4077:4078:4079:4080:4081:4082:4083:4084:4085:4086:4087:4096:4097:4098:4099:4100:4101:4102:4103:4104:4105:4106:4107:4108:4109:4110:4111:4112,1,112000,355000,15000,917000,1253000,1595000,2007000,2430000,2868000,3420000,3863000,4504000,4998000,5769000,6321000,7254000,7870000,9015000,9530000,11072000,11848000,13467000,14337000,16243000,17216000,19446000,20781000,23070000,24453000,27568000,29118000,31820000,34125000,37048000,40204000,42972000,45937000,49110000,52696000,57158000,61305000,67167000,72285000,77646000,83624000,91113000,98548000,107630000,119077000
+70,24:25,1,72,92,142,174,301,443,548,799,1270,1838,2145,2473,3339,4746,6385,7172,8002,10321,13717,17554,19288,21103,26354,33485,41344,44772,48334,58910,72460,87100,93338,99792,119308,143183,231068,257377,274363,314246,371105,431038,476309,588548,665256,801731,916689,1130023,1188623,1477408,1551289,1746582,1845236,1954741,2124555,2345698,2548763,2759555,3021488,3254111,3489547,3695474,4012251,4181112,4302211,4496584,4578951,4869523,5022114,5123654,5395117
+//Job - 3rd Jobs (650 3CeAM)
+50,4054:4055:4056:4057:4058:4059:4060:4061:4062:4063:4064:4065:4066:4067:4068:4069:4070:4071:4072:4073:4074:4075:4076:4077:4078:4079:4080:4081:4082:4083:4084:4085:4086:4087,1,100000,160000,232000,318400,413440,498976,593066,696564,903561,1069159,1267876,1506337,1792490,2221719,2565102,2977162,3471634,4065001,5251734,6201120,7340384,8707500,10348040,12808849,14777497,17139874,19974727,23376550,30180196,39705300,53992957,75424442,107571670,200798630,247412110,303348286,370471698,451019791,547677504,596006360,646751659,700034223,755980915,814724942,832348150,850852518,870282105,890683171,899999999
diff --git a/db/exp2.txt b/db/exp2.txt
new file mode 100644
index 000000000..733b13a92
--- /dev/null
+++ b/db/exp2.txt
@@ -0,0 +1,35 @@
+//This is a custom Experience table with support for up to level 1000.
+//To use it, replace exp.txt with this file and edit the max level
+//accordingly.
+//Experience tables format:
+//Max Level,Class list,Type (0 - Base Exp / 1 - Job Exp),Exp 1,2,3,...
+//Base - Normal Jobs
+99,0:1:2:3:4:5:6:7:8:9:10:11:12:13:14:15:16:17:18:19:20:21:23:24:25:26:4046:4047:4048:4049,0,9,16,25,36,77,112,153,200,253,320,385,490,585,700,830,970,1120,1260,1420,1620,1860,1990,2240,2504,2950,3426,3934,4474,6889,7995,9174,10425,11748,13967,15775,17678,19677,21773,30543,34212,38065,42102,46323,53026,58419,64041,69892,75973,102468,115254,128692,142784,157528,178184,196300,215198,234879,255341,330188,365914,403224,442116,482590,536948,585191,635278,687211,740988,925400,1473746,1594058,1718928,1848355,1982340,2230113,2386162,2547417,2713878,3206160,3681024,4022472,4377024,4744680,5125440,5767272,6204000,6655464,7121664,7602600,8109652,8643822,9206127,9797599,10419283,11072238,11757533,12476249,13229476,14018313,14843866,15707247,16609574,17551968,18535552,19561452,20630792,21744696,22904284,24110674,25364977,26668297,28021732,29426368,30883282,32393539,33958189,35578269,37254799,38988782,40781202,42633023,44545189,46518620,48554214,50652844,52815357,55042573,57335285,59694256,62120220,64613880,67175907,69806941,72507587,75278418,78119970,81032746,84017211,87073795,90202891,93404853,96680000,100028610,103450924,106947144,110517434,114161918,117880680,121673767,125541185,129482901,133498844,137588903,141752928,145990732,150302088,154686733,159144364,163674642,168277191,172951600,177697420,182514167,187401324,192358338,197384623,202479560,207642499,212872757,218169621,223532347,228960163,234452268,240007834,245626005,251305900,257046613,262847212,268706744,274624232,280598679,286629065,292714352,298853483,305045382,311288957,317583099,323926685,330318577,336757623,343242660,349772512,356345994,362961909,369619053,376316214,383052171,389825698,396635564,403480532,410359362,417270811,424213634,431186584,438188413,445217874,452273720,459354706,466459588,473587127,480736086,487905232,495093338,502299181,509521545,516759221,524011006,531275705,538552132,545839109,553135467,560440047,567751700,575069288,582391684,589717771,597046446,604376616,611707202,619037136,626365365,633690848,641012559,648329484,655640625,662944998,670241632,677529573,684807881,692075631,699331913,706575834,713806514,721023091,728224718,735410563,742579811,749731663,756865335,763980061,771075089,778149684,785203127,792234715,799243761,806229595,813191563,820129025,827041359,833927958,840788232,847621604,854427516,861205423,867954796,874675123,881365905,888026659,894656917,901256227,907824150,914360262,920864154,927335431,933773713,940178632,946549836,952886985,959189754,965457830,971690914,977888720,984050975,990177418,996267800,1002321886,1008339452,1014320285,1020264186,1026170966,1032040448,1037872466,1043666865,1049423500,1055142238,1060822955,1066465539,1072069886,1077635904,1083163509,1088652627,1094103193,1099515152,1104888457,1110223070,1115518962,1120776112,1125994507,1131174143,1136315022,1141417155,1146480560,1151505263,1156491296,1161438699,1166347518,1171217806,1176049622,1180843032,1185598108,1190314928,1194993575,1199634138,1204236712,1208801396,1213328296,1217817522,1222269189,1226683417,1231060330,1235400057,1239702732,1243968491,1248197476,1252389832,1256545708,1260665257,1264748635,1268796001,1272807518,1276783353,1280723674,1284628654,1288498467,1292333290,1296133304,1299898691,1303629636,1307326326,1310988950,1314617700,1318212769,1321774352,1325302646,1328797850,1332260164,1335689790,1339086931,1342451791,1345784576,1349085494,1352354752,1355592559,1358799125,1361974661,1365119379,1368233491,1371317210,1374370750,1377394325,1380388150,1383352439,1386287408,1389193273,1392070249,1394918553,1397738400,1400530007,1403293591,1406029367,1408737552,1411418361,1414072010,1416698715,1419298692,1421872155,1424419319,1426940398,1429435606,1431905157,1434349263,1436768137,1439161990,1441531034,1443875479,1446195535,1448491412,1450763318,1453011460,1455236046,1457437282,1459615373,1461770523,1463902937,1466012816,1468100363,1470165779,1472209264,1474231016,1476231234,1478210114,1480167853,1482104645,1484020685,1485916165,1487791277,1489646211,1491481157,1493296304,1495091838,1496867946,1498624813,1500362623,1502081558,1503781800,1505463529,1507126924,1508772163,1510399423,1512008880,1513600707,1515175078,1516732165,1518272138,1519795167,1521301420,1522791064,1524264265,1525721187,1527161994,1528586847,1529995908,1531389336,1532767289,1534129924,1535477397,1536809863,1538127475,1539430385,1540718744,1541992701,1543252405,1544498003,1545729641,1546947464,1548151616,1549342238,1550519472,1551683458,1552834334,1553972238,1555097306,1556209673,1557309473,1558396839,1559471902,1560534793,1561585640,1562624572,1563651716,1564667197,1565671140,1566663668,1567644904,1568614969,1569573982,1570522063,1571459329,1572385897,1573301883,1574207401,1575102565,1575987487,1576862278,1577727048,1578581907,1579426962,1580262321,1581088090,1581904373,1582711275,1583508898,1584297344,1585076715,1585847110,1586608628,1587361366,1588105422,1588840892,1589567871,1590286453,1590996731,1591698797,1592392743,1593078658,1593756633,1594426755,1595089112,1595743791,1596390878,1597030458,1597662614,1598287430,1598904988,1599515370,1600118656,1600714926,1601304259,1601886733,1602462426,1603031414,1603593772,1604149576,1604698899,1605241815,1605778396,1606308715,1606832842,1607350847,1607862800,1608368770,1608868825,1609363032,1609851457,1610334167,1610811226,1611282699,1611748650,1612209142,1612664237,1613113997,1613558483,1613997756,1614431875,1614860899,1615284887,1615703896,1616117984,1616527207,1616931621,1617331282,1617726244,1618116561,1618502287,1618883474,1619260175,1619632442,1620000326,1620363877,1620723146,1621078182,1621429033,1621775749,1622118377,1622456965,1622791559,1623122206,1623448951,1623771840,1624090917,1624406227,1624717813,1625025719,1625329987,1625630660,1625927779,1626221386,1626511522,1626798227,1627081541,1627361504,1627638155,1627911532,1628181674,1628448618,1628712402,1628973062,1629230635,1629485157,1629736664,1629985191,1630230773,1630473445,1630713240,1630950192,1631184334,1631415700,1631644322,1631870232,1632093461,1632314042,1632532005,1632747381,1632960200,1633170493,1633378289,1633583617,1633786507,1633986987,1634185085,1634380829,1634574248,1634765368,1634954216,1635140820,1635325205,1635507398,1635687425,1635865311,1636041081,1636214761,1636386375,1636555947,1636723501,1636889061,1637052651,1637214294,1637374013,1637531831,1637687770,1637841852,1637994099,1638144533,1638293176,1638440048,1638585171,1638728565,1638870250,1639010247,1639148576,1639285256,1639420307,1639553749,1639685600,1639815879,1639944605,1640071796,1640197471,1640321647,1640444342,1640565574,1640685360,1640803717,1640920662,1641036212,1641150383,1641263192,1641374655,1641484788,1641593607,1641701127,1641807363,1641912331,1642016046,1642118523,1642219777,1642319822,1642418672,1642516342,1642612846,1642708197,1642802409,1642895496,1642987471,1643078348,1643168139,1643256857,1643344515,1643431126,1643516702,1643601256,1643684799,1643767344,1643848902,1643929486,1644009107,1644087776,1644165505,1644242304,1644318185,1644393159,1644467237,1644540429,1644612746,1644684198,1644754796,1644824550,1644893470,1644961565,1645028846,1645095322,1645161003,1645225899,1645290018,1645353370,1645415965,1645477811,1645538917,1645599292,1645658945,1645717884,1645776118,1645833655,1645890503,1645946671,1646002167,1646056999,1646111175,1646164702,1646217589,1646269843,1646321471,1646372481,1646422881,1646472677,1646521877,1646570488,1646618517,1646665972,1646712858,1646759183,1646804953,1646850175,1646894856,1646939002,1646982619,1647025714,1647068293,1647110362,1647151927,1647192995,1647233571,1647273661,1647313271,1647352406,1647391073,1647429277,1647467023,1647504317,1647541164,1647577570,1647613540,1647649079,1647684192,1647718884,1647753161,1647787027,1647820488,1647853548,1647886212,1647918484,1647950370,1647981874,1648013000,1648043753,1648074138,1648104159,1648133820,1648163126,1648192080,1648220687,1648248952,1648276878,1648304469,1648331730,1648358664,1648385275,1648411567,1648437544,1648463210,1648488568,1648513622,1648538376,1648562833,1648586997,1648610872,1648634460,1648657766,1648680792,1648703542,1648726020,1648748228,1648770170,1648791849,1648813268,1648834430,1648855339,1648875997,1648896407,1648916573,1648936497,1648956182,1648975631,1648994847,1649013832,1649032590,1649051123,1649069434,1649087525,1649105399,1649123059,1649140507,1649157746,1649174778,1649191606,1649208232,1649224659,1649240889,1649256924,1649272767,1649288420,1649303885,1649319165,1649334262,1649349178,1649363915,1649378475,1649392861,1649407074,1649421117,1649434991,1649448699,1649462242,1649475623,1649488844,1649501906,1649514811,1649527562,1649540160,1649552607,1649564904,1649577054,1649589058,1649600918,1649612636,1649624213,1649635652,1649646953,1649658119,1649669151,1649680051,1649690820,1649701460,1649711972,1649722358,1649732619,1649742757,1649752774,1649762671,1649772449,1649782110,1649791655,1649801085,1649810402,1649819607,1649828702,1649837688,1649846566,1649855338,1649864004,1649872566,1649881026,1649889384,1649897642,1649905801,1649913862,1649921826,1649929695,1649937469,1649945150,1649952739,1649960237,1649967645,1649974964,1649982195,1649989340,1649996399,1650003373,1650010263,1650017071,1650023797,1650030442,1650037008,1650043495,1650049904,1650056236,1650062492,1650068673,1650074780,1650080814,1650086775,1650092665,1650098484,1650104233,1650109913,1650115525,1650121070,1650126548,1650131961,1650137309,1650142593,1650147813,1650152971,1650158067,1650163102,1650168076,1650172990,1650177845,1650182642,1650187382,1650192065,1650196692,1650201263,1650205779,1650210241,1650214650,1650219006,1650223309,1650227561,1650231762,1650235912,1650240012,1650244063,1650248066,1650252021,1650255928,1650259788,1650263602,1650267370,1650271093,1650274771,1650278405,1650281996,1650285544,1650289049,1650292512,1650295933,1650299313,1650302653,1650305953,1650309213,1650312434,1650315616,1650318760,1650321866,1650324935,1650327967,1650330963,1650333923,1650336847,1650339736,1650342591,1650345411,1650348198,1650350951,1650353671,1650356358,1650359013,1650361636,1650364228,1650366789,1650369319,1650371819,1650374289,1650376729,1650379140,1650381522,1650383875,1650386200,1650388497,1650390766,1650393008,1650395223,1650397412,1650399574,1650401711,1650403822,1650405908,1650407969,1650410005,1650412016,1650414003,1650415966,1650417906,1650419823,1650421717,1650423588,1650425436,1650427262,1650429066
+//Base - Adv Jobs
+99,4001:4002:4003:4004:4005:4006:4007:4008:4009:4010:4011:4012:4013:4014:4015:4016:4017:4018:4019:4020:4021:4022,0,10,18,28,40,85,123,168,220,278,400,481,613,731,875,1038,1213,1400,1575,1775,2268,2604,2786,3136,3506,4130,4796,5508,6264,9645,12392,14220,16159,18209,21649,24451,27401,30499,33748,47342,58160,64711,71573,78749,90144,99312,108870,118816,129154,174196,213220,238080,264150,291427,329640,363155,398116,434526,472381,610848,731828,806448,884232,965180,1073896,1170382,1270556,1374422,1481976,1850800,3389616,3666333,3953534,4251217,4559382,5129260,5488173,5859059,6241919,7374168,9570662,10458427,11380262,12336168,13326144,14994907,16130400,17304200,18516326,19766760,21085096,22473939,23935933,25473761,27090141,28787825,30569594,32438257,34396650,36447628,38594068,40838862,43184915,45635142,48192464,50859807,53640095,56536248,59551182,62687799,65948990,69337627,72856561,76508620,80296602,84223275,88291372,92503586,96862571,101370933,106031232,110845975,115817614,120948544,126241098,131697545,137320088,143110859,149071919,155205253,161512770,167996297,174657580,181498280,188519973,195724146,203112195,210685425,218445048,226392181,234527844,242852961,251368358,260074760,268972793,278062983,287345754,296821429,306490229,316352273,326407578,336656059,347097530,357731703,368558190,379576502,390786051,402186149,413776012,425554759,437521412,449674899,462014055,474537623,487244256,500132518,513200886,526447751,539871420,553470119,567241993,581185110,595297462,609576966,624021468,638628745,653396504,668322389,683403980,698638797,714024301,729557897,745236936,761058717,777020492,793119465,809352795,825717601,842210961,858829917,875571475,892432609,909410264,926501355,943702774,961011389,978424047,995937576,1013548788,1031254481,1049051440,1066936441,1084906252,1102957634,1121087346,1139292145,1157568786,1175914029,1194324635,1212797373,1231329018,1249916355,1268556179,1287245299,1305980536,1324758729,1343576732,1362431419,1381319683,1400238439,1419184625,1438155202,1457147157,1476157502,1495183278,1514221554,1533269429,1552324031,1571382520,1590442090,1609499966,1628553409,1647599713,1666636209,1685660263,1704669278,1723660695,1742631992,1761580687,1780504336,1799400534,1818266916,1837101157,1855900974,1874664122,1893388399,1912071644,1930711737,1949306600,1967854196,1986352530,2004799649,2023193642,2041532640,2059814816,2078038384,2096201600,2114302763,2132340212,2150312328,2168217533,2186054291,2203821106,2221516523,2239139127,2256687544,2274160439,2291556517,2308874523,2326113241,2343271492,2360348137,2377342074,2394252239,2411077605,2427817182,2444470016,2461035190,2477511822,2493899065,2510196107,2526402170,2542516509,2558538414,2574467207,2590302243,2606042908,2621688620,2637238829,2652693014,2668050684,2683311379,2698474666,2713540143,2728507434,2743376192,2758146097,2772816855,2787388198,2801859883,2816231694,2830503439,2844674950,2858746082,2872716714,2886586747,2900356105,2914024733,2927592598,2941059688,2954426010,2967691593,2980856483,2993920747,3006884469,3019747752,3032510717,3045173501,3057736259,3070199161,3082562393,3094826158,3106990673,3119056170,3131022894,3142891106,3154661079,3166333099,3177907466,3189384491,3200764497,3212047820,3223234805,3234325809,3245321200,3256221356,3267026664,3277737521,3288354333,3298877514,3309307489,3319644689,3329889553,3340042528,3350104069,3360074637,3369954700,3379744733,3389445216,3399056636,3408579485,3418014261,3427361466,3436621608,3445795199,3454882755,3463884797,3472801849,3481634440,3490383101,3499048368,3507630778,3516130872,3524549194,3532886290,3541142708,3549318998,3557415713,3565433406,3573372633,3581233950,3589017916,3596725090,3604356032,3611911302,3619391462,3626797073,3634128697,3641386897,3648572235,3655685273,3662726573,3669696697,3676596205,3683425658,3690185617,3696876640,3703499285,3710054109,3716541669,3722962519,3729317213,3735606303,3741830339,3747989871,3754085446,3760117610,3766086907,3771993879,3777839066,3783623006,3789346235,3795009287,3800612694,3806156985,3811642688,3817070327,3822440424,3827753500,3833010071,3838210653,3843355757,3848445893,3853481568,3858463286,3863391548,3868266853,3873089696,3877860570,3882579965,3887248368,3891866263,3896434130,3900952448,3905421692,3909842333,3914214841,3918539681,3922817316,3927048205,3931232805,3935371569,3939464947,3943513385,3947517328,3951477216,3955393486,3959266573,3963096907,3966884916,3970631025,3974335655,3977999224,3981622147,3985204835,3988747697,3992251137,3995715558,3999141358,4002528933,4005878676,4009190975,4012466216,4015704782,4018907052,4022073402,4025204206,4028299834,4031360652,4034387025,4037379312,4040337871,4043263057,4046155220,4049014709,4051841869,4054637042,4057400566,4060132778,4062834010,4065504592,4068144851,4070755111,4073335693,4075886914,4078409090,4080902532,4083367550,4085804450,4088213536,4090595108,4092949463,4095276897,4097577701,4099852165,4102100575,4104323215,4106520366,4108692307,4110839312,4112961655,4115059606,4117133433,4119183400,4121209770,4123212802,4125192754,4127149880,4129084433,4130996662,4132886814,4134755133,4136601862,4138427240,4140231505,4142014891,4143777631,4145519954,4147242089,4148944261,4150626693,4152289606,4153933218,4155557746,4157163403,4158750402,4160318952,4161869260,4163401532,4164915971,4166412777,4167892150,4169354286,4170799380,4172227625,4173639211,4175034327,4176413160,4177775894,4179122712,4180453795,4181769321,4183069467,4184354408,4185624318,4186879367,4188119725,4189345560,4190557037,4191754321,4192937573,4194106954,4195262623,4196404736,4197533449,4198648916,4199751289,4200840717,4201917350,4202981334,4204032815,4205071936,4206098840,4207113668,4208116558,4209107648,4210087074,4211054971,4212011472,4212956708,4213890810,4214813906,4215726123,4216627588,4217518424,4218398755,4219268703,4220128387,4220977927,4221817441,4222647044,4223466852,4224276979,4225077537,4225868637,4226650390,4227422904,4228186286,4228940643,4229686080,4230422700,4231150607,4231869902,4232580686,4233283058,4233977116,4234662957,4235340677,4236010370,4236672131,4237326053,4237972227,4238610743,4239241692,4239865161,4240481239,4241090012,4241691565,4242285983,4242873350,4243453749,4244027261,4244593967,4245153947,4245707279,4246254042,4246794313,4247328169,4247855684,4248376933,4248891990,4249400928,4249903818,4250400732,4250891740,4251376912,4251856316,4252330020,4252798092,4253260597,4253717602,4254169171,4254615368,4255056257,4255491900,4255922359,4256347695,4256767969,4257183240,4257593568,4257999011,4258399627,4258795472,4259186603,4259573076,4259954946,4260332267,4260705093,4261073477,4261437472,4261797129,4262152500,4262503636,4262850586,4263193401,4263532129,4263866819,4264197518,4264524274,4264847134,4265166143,4265481348,4265792793,4266100523,4266404582,4266705014,4267001861,4267295166,4267584971,4267871318,4268154248,4268433801,4268710017,4268982936,4269252597,4269519039,4269782300,4270042418,4270299430,4270553373,4270804284,4271052198,4271297151,4271539179,4271778316,4272014596,4272248054,4272478723,4272706636,4272931826,4273154325,4273374166,4273591380,4273805998,4274018051,4274227570,4274434585,4274639125,4274841221,4275040901,4275238194,4275433128,4275625732,4275816033,4276004059,4276189837,4276373393,4276554754,4276733946,4276910995,4277085927,4277258767,4277429540,4277598270,4277764982,4277929700,4278092447,4278253247,4278412124,4278569100,4278724198,4278877440,4279028849,4279178446,4279326253,4279472291,4279616582,4279759146,4279900004,4280039176,4280176683,4280312544,4280446779,4280579407,4280710448,4280839920,4280967842,4281094233,4281219111,4281342494,4281464400,4281584846,4281703850,4281821429,4281937601,4282052382,4282165788,4282277836,4282388543,4282497924,4282605995,4282712772,4282818270,4282922505,4283025492,4283127245,4283227779,4283327109,4283425250,4283522215,4283618019,4283712675,4283806197,4283898599,4283989894,4284080096,4284169217,4284257270,4284344268,4284430224,4284515150,4284599059,4284681963,4284763873,4284844802,4284924761,4285003762,4285081817,4285158936,4285235131,4285310413,4285384793,4285458282,4285530890,4285602628,4285673507,4285743536,4285812726,4285881087,4285948628,4286015360,4286081292,4286146434,4286210795,4286274385,4286337213,4286399288,4286460619,4286521215,4286581084,4286640236,4286698679,4286756421,4286813471,4286869837,4286925527,4286980550,4287034913,4287088625,4287141693,4287194125,4287245928,4287297110,4287347678,4287397640,4287447003,4287495774,4287543961,4287591570,4287638608,4287685082,4287730999,4287776365,4287821187,4287865472,4287909226,4287952455,4287995166,4288037365,4288079058,4288120251,4288160950,4288201161,4288240890,4288280143,4288318925,4288357242,4288395099,4288432502,4288469457,4288505969,4288542043,4288577684,4288612898,4288647690,4288682064,4288716026,4288749581,4288782733,4288815488,4288847850,4288879824,4288911414,4288942626,4288973463,4289003930,4289034032,4289063773,4289093157,4289122189,4289150873,4289179213,4289207213,4289234877,4289262209,4289289213,4289315893,4289342253,4289368297,4289394029,4289419452,4289444570,4289469387,4289493906,4289518131,4289542066,4289565714,4289589078,4289612162,4289634969,4289657502,4289679765,4289701761,4289723493,4289744964,4289766178,4289787137,4289807845,4289828305,4289848519,4289868491,4289888223,4289907718,4289926979,4289946009,4289964811,4289983388,4290001742,4290019876,4290037792,4290055493,4290072982,4290090261,4290107333,4290124200,4290140865,4290157330,4290173597,4290189669,4290205548,4290221237,4290236737,4290252051,4290267182,4290282131,4290296901,4290311494,4290325912,4290340157,4290354231,4290368136,4290381874,4290395447,4290408857,4290422107,4290435198,4290448132,4290460910,4290473535,4290486009,4290498333,4290510509,4290522539,4290534425,4290546168,4290557770,4290569233,4290580558,4290591748,4290602803,4290613726,4290624518,4290635180,4290645714,4290656122,4290666405,4290676565,4290686603,4290696520,4290706318,4290715999,4290725564,4290735014,4290744350,4290753574,4290762688,4290771692,4290780588,4290789378,4290798062,4290806642,4290815119,4290823494,4290831769,4290839944,4290848021,4290856001,4290863886,4290871676,4290879373,4290886977,4290894490,4290901913,4290909247,4290916493,4290923652,4290930725,4290937713,4290944617,4290951438,4290958178,4290964837,4290971416,4290977916,4290984338,4290990683,4290996952,4291003145,4291009264,4291015310,4291021283,4291027184,4291033015,4291038776,4291044468,4291050091,4291055647,4291061136,4291066559,4291071917,4291077211,4291082441,4291087609,4291092715,4291097759,4291102743,4291107667,4291112532,4291117338,4291122087,4291126779
+//Base - Baby Jobs
+99,4023:4024:4025:4026:4027:4028:4029:4030:4031:4032:4033:4034:4035:4036:4037:4038:4039:4040:4041:4042:4043:4044:4045,0,9,16,25,36,77,112,153,200,253,320,385,490,585,700,830,970,1120,1260,1420,1620,1860,1990,2240,2504,2950,3426,3934,4474,6889,7995,9174,10425,11748,13967,15775,17678,19677,21773,30543,34212,38065,42102,46323,53026,58419,64041,69892,75973,102468,115254,128692,142784,157528,178184,196300,215198,234879,255341,330188,365914,403224,442116,482590,536948,585191,635278,687211,740988,925400,1473746,1594058,1718928,1848355,1982340,2230113,2386162,2547417,2713878,3206160,3681024,4022472,4377024,4744680,5125440,5767272,6204000,6655464,7121664,7602600,8109652,8643822,9206127,9797599,10419283,11072238,11757533,12476249,13229476,14018313,14843866,15707247,16609574,17551968,18535552,19561452,20630792,21744696,22904284,24110674,25364977,26668297,28021732,29426368,30883282,32393539,33958189,35578269,37254799,38988782,40781202,42633023,44545189,46518620,48554214,50652844,52815357,55042573,57335285,59694256,62120220,64613880,67175907,69806941,72507587,75278418,78119970,81032746,84017211,87073795,90202891,93404853,96680000,100028610,103450924,106947144,110517434,114161918,117880680,121673767,125541185,129482901,133498844,137588903,141752928,145990732,150302088,154686733,159144364,163674642,168277191,172951600,177697420,182514167,187401324,192358338,197384623,202479560,207642499,212872757,218169621,223532347,228960163,234452268,240007834,245626005,251305900,257046613,262847212,268706744,274624232,280598679,286629065,292714352,298853483,305045382,311288957,317583099,323926685,330318577,336757623,343242660,349772512,356345994,362961909,369619053,376316214,383052171,389825698,396635564,403480532,410359362,417270811,424213634,431186584,438188413,445217874,452273720,459354706,466459588,473587127,480736086,487905232,495093338,502299181,509521545,516759221,524011006,531275705,538552132,545839109,553135467,560440047,567751700,575069288,582391684,589717771,597046446,604376616,611707202,619037136,626365365,633690848,641012559,648329484,655640625,662944998,670241632,677529573,684807881,692075631,699331913,706575834,713806514,721023091,728224718,735410563,742579811,749731663,756865335,763980061,771075089,778149684,785203127,792234715,799243761,806229595,813191563,820129025,827041359,833927958,840788232,847621604,854427516,861205423,867954796,874675123,881365905,888026659,894656917,901256227,907824150,914360262,920864154,927335431,933773713,940178632,946549836,952886985,959189754,965457830,971690914,977888720,984050975,990177418,996267800,1002321886,1008339452,1014320285,1020264186,1026170966,1032040448,1037872466,1043666865,1049423500,1055142238,1060822955,1066465539,1072069886,1077635904,1083163509,1088652627,1094103193,1099515152,1104888457,1110223070,1115518962,1120776112,1125994507,1131174143,1136315022,1141417155,1146480560,1151505263,1156491296,1161438699,1166347518,1171217806,1176049622,1180843032,1185598108,1190314928,1194993575,1199634138,1204236712,1208801396,1213328296,1217817522,1222269189,1226683417,1231060330,1235400057,1239702732,1243968491,1248197476,1252389832,1256545708,1260665257,1264748635,1268796001,1272807518,1276783353,1280723674,1284628654,1288498467,1292333290,1296133304,1299898691,1303629636,1307326326,1310988950,1314617700,1318212769,1321774352,1325302646,1328797850,1332260164,1335689790,1339086931,1342451791,1345784576,1349085494,1352354752,1355592559,1358799125,1361974661,1365119379,1368233491,1371317210,1374370750,1377394325,1380388150,1383352439,1386287408,1389193273,1392070249,1394918553,1397738400,1400530007,1403293591,1406029367,1408737552,1411418361,1414072010,1416698715,1419298692,1421872155,1424419319,1426940398,1429435606,1431905157,1434349263,1436768137,1439161990,1441531034,1443875479,1446195535,1448491412,1450763318,1453011460,1455236046,1457437282,1459615373,1461770523,1463902937,1466012816,1468100363,1470165779,1472209264,1474231016,1476231234,1478210114,1480167853,1482104645,1484020685,1485916165,1487791277,1489646211,1491481157,1493296304,1495091838,1496867946,1498624813,1500362623,1502081558,1503781800,1505463529,1507126924,1508772163,1510399423,1512008880,1513600707,1515175078,1516732165,1518272138,1519795167,1521301420,1522791064,1524264265,1525721187,1527161994,1528586847,1529995908,1531389336,1532767289,1534129924,1535477397,1536809863,1538127475,1539430385,1540718744,1541992701,1543252405,1544498003,1545729641,1546947464,1548151616,1549342238,1550519472,1551683458,1552834334,1553972238,1555097306,1556209673,1557309473,1558396839,1559471902,1560534793,1561585640,1562624572,1563651716,1564667197,1565671140,1566663668,1567644904,1568614969,1569573982,1570522063,1571459329,1572385897,1573301883,1574207401,1575102565,1575987487,1576862278,1577727048,1578581907,1579426962,1580262321,1581088090,1581904373,1582711275,1583508898,1584297344,1585076715,1585847110,1586608628,1587361366,1588105422,1588840892,1589567871,1590286453,1590996731,1591698797,1592392743,1593078658,1593756633,1594426755,1595089112,1595743791,1596390878,1597030458,1597662614,1598287430,1598904988,1599515370,1600118656,1600714926,1601304259,1601886733,1602462426,1603031414,1603593772,1604149576,1604698899,1605241815,1605778396,1606308715,1606832842,1607350847,1607862800,1608368770,1608868825,1609363032,1609851457,1610334167,1610811226,1611282699,1611748650,1612209142,1612664237,1613113997,1613558483,1613997756,1614431875,1614860899,1615284887,1615703896,1616117984,1616527207,1616931621,1617331282,1617726244,1618116561,1618502287,1618883474,1619260175,1619632442,1620000326,1620363877,1620723146,1621078182,1621429033,1621775749,1622118377,1622456965,1622791559,1623122206,1623448951,1623771840,1624090917,1624406227,1624717813,1625025719,1625329987,1625630660,1625927779,1626221386,1626511522,1626798227,1627081541,1627361504,1627638155,1627911532,1628181674,1628448618,1628712402,1628973062,1629230635,1629485157,1629736664,1629985191,1630230773,1630473445,1630713240,1630950192,1631184334,1631415700,1631644322,1631870232,1632093461,1632314042,1632532005,1632747381,1632960200,1633170493,1633378289,1633583617,1633786507,1633986987,1634185085,1634380829,1634574248,1634765368,1634954216,1635140820,1635325205,1635507398,1635687425,1635865311,1636041081,1636214761,1636386375,1636555947,1636723501,1636889061,1637052651,1637214294,1637374013,1637531831,1637687770,1637841852,1637994099,1638144533,1638293176,1638440048,1638585171,1638728565,1638870250,1639010247,1639148576,1639285256,1639420307,1639553749,1639685600,1639815879,1639944605,1640071796,1640197471,1640321647,1640444342,1640565574,1640685360,1640803717,1640920662,1641036212,1641150383,1641263192,1641374655,1641484788,1641593607,1641701127,1641807363,1641912331,1642016046,1642118523,1642219777,1642319822,1642418672,1642516342,1642612846,1642708197,1642802409,1642895496,1642987471,1643078348,1643168139,1643256857,1643344515,1643431126,1643516702,1643601256,1643684799,1643767344,1643848902,1643929486,1644009107,1644087776,1644165505,1644242304,1644318185,1644393159,1644467237,1644540429,1644612746,1644684198,1644754796,1644824550,1644893470,1644961565,1645028846,1645095322,1645161003,1645225899,1645290018,1645353370,1645415965,1645477811,1645538917,1645599292,1645658945,1645717884,1645776118,1645833655,1645890503,1645946671,1646002167,1646056999,1646111175,1646164702,1646217589,1646269843,1646321471,1646372481,1646422881,1646472677,1646521877,1646570488,1646618517,1646665972,1646712858,1646759183,1646804953,1646850175,1646894856,1646939002,1646982619,1647025714,1647068293,1647110362,1647151927,1647192995,1647233571,1647273661,1647313271,1647352406,1647391073,1647429277,1647467023,1647504317,1647541164,1647577570,1647613540,1647649079,1647684192,1647718884,1647753161,1647787027,1647820488,1647853548,1647886212,1647918484,1647950370,1647981874,1648013000,1648043753,1648074138,1648104159,1648133820,1648163126,1648192080,1648220687,1648248952,1648276878,1648304469,1648331730,1648358664,1648385275,1648411567,1648437544,1648463210,1648488568,1648513622,1648538376,1648562833,1648586997,1648610872,1648634460,1648657766,1648680792,1648703542,1648726020,1648748228,1648770170,1648791849,1648813268,1648834430,1648855339,1648875997,1648896407,1648916573,1648936497,1648956182,1648975631,1648994847,1649013832,1649032590,1649051123,1649069434,1649087525,1649105399,1649123059,1649140507,1649157746,1649174778,1649191606,1649208232,1649224659,1649240889,1649256924,1649272767,1649288420,1649303885,1649319165,1649334262,1649349178,1649363915,1649378475,1649392861,1649407074,1649421117,1649434991,1649448699,1649462242,1649475623,1649488844,1649501906,1649514811,1649527562,1649540160,1649552607,1649564904,1649577054,1649589058,1649600918,1649612636,1649624213,1649635652,1649646953,1649658119,1649669151,1649680051,1649690820,1649701460,1649711972,1649722358,1649732619,1649742757,1649752774,1649762671,1649772449,1649782110,1649791655,1649801085,1649810402,1649819607,1649828702,1649837688,1649846566,1649855338,1649864004,1649872566,1649881026,1649889384,1649897642,1649905801,1649913862,1649921826,1649929695,1649937469,1649945150,1649952739,1649960237,1649967645,1649974964,1649982195,1649989340,1649996399,1650003373,1650010263,1650017071,1650023797,1650030442,1650037008,1650043495,1650049904,1650056236,1650062492,1650068673,1650074780,1650080814,1650086775,1650092665,1650098484,1650104233,1650109913,1650115525,1650121070,1650126548,1650131961,1650137309,1650142593,1650147813,1650152971,1650158067,1650163102,1650168076,1650172990,1650177845,1650182642,1650187382,1650192065,1650196692,1650201263,1650205779,1650210241,1650214650,1650219006,1650223309,1650227561,1650231762,1650235912,1650240012,1650244063,1650248066,1650252021,1650255928,1650259788,1650263602,1650267370,1650271093,1650274771,1650278405,1650281996,1650285544,1650289049,1650292512,1650295933,1650299313,1650302653,1650305953,1650309213,1650312434,1650315616,1650318760,1650321866,1650324935,1650327967,1650330963,1650333923,1650336847,1650339736,1650342591,1650345411,1650348198,1650350951,1650353671,1650356358,1650359013,1650361636,1650364228,1650366789,1650369319,1650371819,1650374289,1650376729,1650379140,1650381522,1650383875,1650386200,1650388497,1650390766,1650393008,1650395223,1650397412,1650399574,1650401711,1650403822,1650405908,1650407969,1650410005,1650412016,1650414003,1650415966,1650417906,1650419823,1650421717,1650423588,1650425436,1650427262,1650429066
+//Job - Novice
+10,0,1,10,18,28,40,91,151,205,268,340,0
+//Job - 1st Classes
+50,1:2:3:4:5:6:26:4046,1,43,58,76,116,180,220,272,336,520,604,699,802,948,1125,1668,1937,2226,3040,3988,5564,6272,7021,9114,11473,15290,16891,18570,23229,28359,36478,39716,43088,52417,62495,78160,84175,90404,107611,125915,153941,191781,204351,248352,286212,329843,379102,434567,496856,566629,644589,731482,828096,935264,1053861,1184807,1329062,1487630,1661554,1851918,2059842,2286484,2533034,2800715,3090779,3404503,3743189,4108159,4500752,4922319,5374222,5857829,6374510,6925632,7512557,8136637,8799208,9501590,10245078,11030942,11860420,12734717,13654998,14622385,15637956,16702739,17817709,18983785,20201828,21472637,22796947,24175427,25608679,27097233,28641549,30242013,31898938,33612561,35383045,37210476,39094865,41036147,43034181,45088752,47199571,49366275,51588430,53865531,56197005,58582210,61020440,63510925,66052833,68645274,71287301,73977913,76716056,79500628,82330481,85204422,88121217,91079595,94078248,97115837,100190993,103302318,106448393,109627775,112839003,116080601,119351078,122648934,125972660,129320741,132691658,136083893,139495928,142926248,146373345,149835718,153311875,156800336,160299633,163808315,167324946,170848108,174376402,177908451,181442899,184978413,188513685,192047431,195578393,199105341,202627072,206142410,209650210,213149356,216638760,220117366,223584148,227038110,230478288,233903749,237313590,240706940,244082960,247440841,250779805,254099105,257398024,260675877,263932007,267165788,270376624,273563946,276727216,279865923,282979584,286067743,289129972,292165868,295175054,298157179,301111917,304038965,306938045,309808901,312651301,315465033,318249908,321005758,323732433,326429805,329097764,331736219,334345097,336924341,339473912,341993787,344483958,346944434,349375236,351776401,354147978,356490030,358802632,361085872,363339848,365564669,367760455,369927336,372065452,374174951,376255991,378308737,380333362,382330048,384298982,386240358,388154377,390041246,391901177,393734387,395541098,397321537,399075935,400804526,402507549,404185246,405837861,407465642,409068839,410647704,412202492,413733459,415240862,416724961,418186016,419624289,421040041,422433535,423805034,425154801,426483099,427790192,429076343,430341814,431586867,432811764,434016766,435202133,436368124,437514996,438643007,439752411,440843463,441916415,442971519,444009023,445029176,446032223,447018409,447987976,448941165,449878214,450799359,451704835,452594875,453469708,454329562,455174663,456005235,456821498,457623672,458411973,459186616,459947813,460695773,461430704,462152810,462862294,463559356,464244194,464917003,465577976,466227304,466865175,467491774,468107285,468711889,469305764,469889087,470462031,471024768,471577467,472120295,472653416,473176993,473691185,474196151,474692045,475179021,475657230,476126821,476587940,477040732,477485339,477921901,478350556,478771440,479184687,479590429,479988796,480379915,480763913,481140913,481511037,481874405,482231136,482581346,482925149,483262657,483593982,483919232,484238515,484551937,484859601,485161609,485458061,485749057,486034693,486315066,486590269,486860394,487125532,487385773,487641205,487891913,488137983,488379498,488616541,488849192,489077530,489301633,489521578,489737440,489949293,490157210,490361262,490561520,490758052,490950927,491140211,491325969,491508266,491687165,491862728,492035017,492204091,492370009,492532829,492692607,492849400,493003262,493154248,493302410,493447800,493590469,493730468,493867845,494002649,494134928,494264728,494392095,494517074,494639709,494760043,494878119,494993979,495107664,495219215,495328671,495436070,495541451,495644852,495746309,495845859,495943537,496039378,496133416,496225684,496316216,496405044,496492199,496577713,496661617,496743940,496824712,496903963,496981720,497058012,497132865,497206307,497278364,497349062,497418427,497486483,497553255,497618767,497683043,497746106,497807978,497868682,497928240,497986673,498044003,498100250,498155434,498209576,498262695,498314810,498365940,498416104,498465319,498513604,498560976,498607452,498653050,498697785,498741674,498784733,498826978,498868423,498909084,498948976,498988113,499026509,499064179,499101136,499137393,499172964,499207862,499242099,499275688,499308641,499340970,499372686,499403802,499434328,499464276,499493657,499522481,499550759,499578502,499605719,499632420,499658615,499684314,499709526,499734260,499758525,499782330,499805684,499828596,499851073,499873124,499894757,499915980,499936801,499957227,499977266,499996925,500016211,500035131,500053692,500071901,500089765,500107290,500124483,500141350,500157897,500174130,500190055,500205678,500221004,500236040,500250790,500265261,500279457,500293384,500307047,500320450,500333599,500346498,500359153,500371568,500383747,500395695,500407416,500418915,500430195,500441261,500452117,500462767,500473215,500483465,500493520,500503384,500513061,500522554,500531867,500541003,500549966,500558759,500567385,500575847,500584149,500592293,500600282,500608120,500615809,500623352,500630752,500638011,500645132,500652118,500658971,500665694,500672290,500678760,500685108,500691335,500697444,500703437,500709316,500715083,500720741,500726291,500731736,500737078,500742318,500747459,500752502,500757449,500762302,500767063,500771734,500776316,500780811,500785220,500789546,500793790,500797953,500802037,500806043,500809973,500813829,500817611,500821321,500824961,500828532,500832035,500835471,500838842,500842149,500845393,500848576,500851698,500854761,500857766,500860714,500863606,500866443,500869226,500871956,500874634,500877261,500879838,500882366,500884846,500887279,500889666,500892008,500894305,500896558,500898769,500900938,500903065,500905152,500907199,500909207,500911177,500913110,500915006,500916866,500918691,500920481,500922237,500923960,500925650,500927308,500928934,500930529,500932094,500933629,500935135,500936613,500938063,500939485,500940880,500942248,500943590,500944907,500946199,500947466,500948709,500949929,500951125,500952299,500953450,500954580,500955688,500956775,500957841,500958887,500959913,500960920,500961908,500962877,500963827,500964759,500965674,500966571,500967451,500968314,500969161,500969992,500970807,500971607,500972391,500973160,500973915,500974656,500975382,500976095,500976794,500977480,500978153,500978813,500979460,500980095,500980718,500981329,500981929,500982517,500983094,500983660,500984215,500984760,500985294,500985818,500986332,500986836,500987331,500987816,500988292,500988759,500989217,500989667,500990108,500990541,500990965,500991381,500991789,500992190,500992583,500992968,500993346,500993717,500994081,500994438,500994788,500995132,500995469,500995800,500996124,500996442,500996754,500997060,500997360,500997655,500997944,500998227,500998505,500998778,500999046,500999309,500999567,500999820,501000068,501000311,501000549,501000783,501001012,501001237,501001458,501001675,501001887,501002095,501002299,501002500,501002697,501002890,501003079,501003265,501003447,501003626,501003801,501003973,501004142,501004307,501004469,501004628,501004784,501004937,501005087,501005234,501005379,501005521,501005660,501005796,501005930,501006061,501006190,501006316,501006440,501006562,501006681,501006798,501006913,501007026,501007136,501007244,501007350,501007454,501007556,501007656,501007754,501007850,501007945,501008038,501008129,501008218,501008306,501008392,501008476,501008559,501008640,501008720,501008798,501008875,501008950,501009024,501009096,501009167,501009237,501009305,501009372,501009438,501009502,501009565,501009627,501009688,501009748,501009806,501009863,501009919,501009974,501010028,501010081,501010133,501010184,501010234,501010283,501010331,501010378,501010424,501010469,501010514,501010558,501010601,501010643,501010684,501010724,501010764,501010803,501010841,501010878,501010915,501010951,501010986,501011021,501011055,501011088,501011121,501011153,501011184,501011215,501011245,501011275,501011304,501011332,501011360,501011387,501011414,501011440,501011466,501011491,501011516,501011540,501011564,501011587,501011610,501011633,501011655,501011677,501011698,501011719,501011739,501011759,501011779,501011798,501011817,501011835,501011853,501011871,501011888,501011905,501011922,501011938,501011954,501011970,501011985,501012000,501012015,501012030,501012044,501012058,501012072,501012085,501012098,501012111,501012124,501012136,501012148,501012160,501012172,501012183,501012194,501012205,501012216,501012227,501012237,501012247,501012257,501012267,501012277,501012286,501012295,501012304,501012313,501012322,501012330,501012338,501012346,501012354,501012362,501012370,501012378,501012385,501012392,501012399,501012406,501012413,501012420,501012427,501012433,501012439,501012445,501012451,501012457,501012463,501012469,501012475,501012480,501012485,501012490,501012495,501012500,501012505,501012510,501012515,501012520,501012524,501012528,501012532,501012536,501012540,501012544,501012548,501012552,501012556,501012560,501012564,501012568,501012571,501012574,501012577,501012580,501012583,501012586,501012589,501012592,501012595,501012598,501012601,501012604,501012607,501012610,501012613,501012615,501012617,501012619,501012621,501012623,501012625,501012627,501012629,501012631,501012633,501012635,501012637,501012639,501012641,501012643,501012645,501012647,501012649,501012651,501012653,501012655,501012656,501012657,501012658,501012659,501012660,501012661,501012662,501012663,501012664,501012665,501012666,501012667,501012668,501012669,501012670,501012671,501012672,501012673,501012674,501012675,501012676,501012677,501012678,501012679,501012680,501012681,501012682,501012683,501012684,501012685,501012686,501012687,501012688,501012689,501012690,501012691,501012691,501012691,501012691,501012691,501012691,501012691,501012691,501012691,501012691,501012691,501012691,501012691,501012691
+//Job - 2nd Classes
+50,7:8:9:10:11:12:13:14:15:16:17:18:19:20:21:4030:4031:4032:4033:4034:4035:4036:4037:4038:4039:4040:4041:4042:4043:4044:4049,1,144,184,284,348,603,887,1096,1598,2540,3676,4290,4946,6679,9492,12770,14344,16005,20642,27434,35108,38577,42206,52708,66971,82688,89544,96669,117821,144921,174201,186677,199584,238617,286366,337147,358435,380376,447685,526989,610246,704689,811527,932059,1067681,1219884,1390260,1580501,1792401,2027857,2288870,2577542,2896079,3246785,3632064,4054414,4516427,5020783,5570245,6167657,6815936,7518065,8277089,9096106,9978260,10926733,11944736,13035502,14202274,15448298,16776813,18191041,19694176,21289377,22979756,24768369,26658206,28652182,30753126,32963775,35286762,37724609,40279720,42954371,45750705,48670723,51716280,54889077,58190657,61622401,65185522,68881063,72709894,76672708,80770021,85002169,89369310,93871421,98508300,103279567,108184665,113222861,118393251,123694760,129126148,134686012,140372791,146184770,152120084,158176725,164352547,170645270,177052488,183571672,190200181,196935263,203774065,210713640,217750950,224882876,232106223,239417728,246814065,254291853,261847661,269478017,277179412,284948306,292781137,300674324,308624274,316627388,324680066,332778713,340919742,349099582,357314681,365561510,373836570,382136392,390457544,398796635,407150316,415515285,423888291,432266134,440645671,449023816,457397543,465763888,474119952,482462902,490789971,499098461,507385745,515649266,523886539,532095151,540272763,548417108,556525995,564597304,572628991,580619086,588565690,596466980,604321205,612126687,619881818,627585062,635234954,642830098,650369167,657850901,665274107,672637658,679940491,687181606,694360067,701474996,708525577,715511052,722430719,729283933,736070103,742788691,749439211,756021226,762534350,768978243,775352612,781657209,787891828,794056307,800150524,806174396,812127878,818010962,823823676,829566082,835238274,840840378,846372551,851834978,857227874,862551478,867806057,872991902,878109327,883158668,888140283,893054550,897901867,902682649,907397329,912046357,916630197,921149329,925604246,929995454,934323471,938588826,942792060,946933722,951014371,955034574,958994906,962895949,966738291,970522526,974249254,977919079,981532609,985090456,988593235,992041563,995436060,998777348,1002066049,1005302786,1008488184,1011622866,1014707457,1017742580,1020728856,1023666907,1026557352,1029400809,1032197893,1034949218,1037655393,1040317027,1042934723,1045509083,1048040705,1050530182,1052978105,1055385060,1057751629,1060078390,1062365915,1064614774,1066825530,1068998742,1071134965,1073234748,1075298634,1077327163,1079320868,1081280278,1083205916,1085098299,1086957939,1088785342,1090581010,1092345438,1094079115,1095782526,1097456149,1099100457,1100715917,1102302990,1103862133,1105393795,1106898420,1108376447,1109828309,1111254434,1112655243,1114031153,1115382574,1116709911,1118013563,1119293924,1120551383,1121786323,1122999122,1124190152,1125359779,1126508366,1127636269,1128743839,1129831422,1130899359,1131947986,1132977634,1133988629,1134981292,1135955938,1136912879,1137852422,1138774868,1139680514,1140569653,1141442572,1142299555,1143140880,1143966822,1144777651,1145573633,1146355029,1147122096,1147875088,1148614253,1149339836,1150052079,1150751218,1151437486,1152111113,1152772324,1153421341,1154058381,1154683659,1155297386,1155899769,1156491012,1157071316,1157640877,1158199889,1158748542,1159287023,1159815516,1160334201,1160843257,1161342858,1161833175,1162314377,1162786630,1163250097,1163704937,1164151308,1164589365,1165019259,1165441139,1165855152,1166261441,1166660148,1167051412,1167435370,1167812155,1168181900,1168544733,1168900782,1169250171,1169593023,1169929459,1170259597,1170583552,1170901439,1171213370,1171519455,1171819803,1172114519,1172403707,1172687470,1172965908,1173239120,1173507203,1173770252,1174028360,1174281619,1174530119,1174773949,1175013195,1175247943,1175478276,1175704277,1175926026,1176143603,1176357085,1176566548,1176772068,1176973718,1177171570,1177365695,1177556163,1177743042,1177926399,1178106300,1178282809,1178455990,1178625906,1178792617,1178956183,1179116664,1179274117,1179428599,1179580165,1179728870,1179874768,1180017912,1180158353,1180296142,1180431328,1180563961,1180694088,1180821757,1180947013,1181069902,1181190469,1181308757,1181424809,1181538667,1181650373,1181759966,1181867487,1181972975,1182076467,1182178002,1182277616,1182375346,1182471227,1182565293,1182657579,1182748119,1182836945,1182924090,1183009586,1183093463,1183175752,1183256483,1183335686,1183413389,1183489621,1183564409,1183637781,1183709763,1183780382,1183849663,1183917632,1183984313,1184049731,1184113909,1184176871,1184238640,1184299239,1184358689,1184417013,1184474231,1184530365,1184585435,1184639461,1184692463,1184744460,1184795471,1184845515,1184894611,1184942776,1184990027,1185036382,1185081858,1185126472,1185170240,1185213178,1185255302,1185296627,1185337168,1185376940,1185415958,1185454236,1185491788,1185528627,1185564767,1185600222,1185635004,1185669126,1185702601,1185735441,1185767658,1185799263,1185830269,1185860686,1185890526,1185919800,1185948518,1185976691,1186004330,1186031444,1186058044,1186084139,1186109739,1186134853,1186159490,1186183659,1186207370,1186230631,1186253450,1186275836,1186297797,1186319341,1186340476,1186361210,1186381550,1186401504,1186421079,1186440283,1186459122,1186477604,1186495735,1186513521,1186530970,1186548087,1186564879,1186581353,1186597514,1186613368,1186628921,1186644179,1186659147,1186673831,1186688236,1186702367,1186716230,1186729830,1186743172,1186756260,1186769100,1186781696,1186794053,1186806175,1186818067,1186829733,1186841177,1186852404,1186863418,1186874223,1186884822,1186895220,1186905421,1186915428,1186925245,1186934875,1186944322,1186953590,1186962682,1186971601,1186980351,1186988935,1186997356,1187005617,1187013721,1187021671,1187029470,1187037121,1187044626,1187051989,1187059212,1187066298,1187073249,1187080068,1187086758,1187093321,1187099759,1187106075,1187112271,1187118349,1187124311,1187130160,1187135898,1187141527,1187147049,1187152466,1187157780,1187162993,1187168107,1187173124,1187178046,1187182874,1187187611,1187192258,1187196816,1187201288,1187205675,1187209978,1187214200,1187218341,1187222404,1187226390,1187230300,1187234136,1187237899,1187241590,1187245211,1187248763,1187252248,1187255667,1187259021,1187262311,1187265538,1187268704,1187271810,1187274857,1187277846,1187280778,1187283655,1187286477,1187289245,1187291961,1187294625,1187297238,1187299802,1187302317,1187304784,1187307204,1187309578,1187311907,1187314192,1187316434,1187318633,1187320790,1187322906,1187324982,1187327019,1187329017,1187330977,1187332900,1187334786,1187336636,1187338451,1187340232,1187341979,1187343693,1187345374,1187347023,1187348641,1187350228,1187351785,1187353312,1187354810,1187356280,1187357722,1187359136,1187360524,1187361885,1187363220,1187364530,1187365815,1187367076,1187368313,1187369526,1187370716,1187371883,1187373028,1187374151,1187375253,1187376334,1187377395,1187378435,1187379456,1187380457,1187381439,1187382403,1187383348,1187384275,1187385185,1187386077,1187386952,1187387811,1187388653,1187389479,1187390290,1187391085,1187391865,1187392630,1187393381,1187394118,1187394841,1187395550,1187396245,1187396927,1187397596,1187398252,1187398896,1187399528,1187400148,1187400756,1187401352,1187401937,1187402511,1187403074,1187403626,1187404168,1187404699,1187405220,1187405731,1187406233,1187406725,1187407208,1187407682,1187408147,1187408603,1187409050,1187409489,1187409919,1187410341,1187410755,1187411161,1187411559,1187411950,1187412333,1187412709,1187413078,1187413440,1187413795,1187414143,1187414485,1187414820,1187415149,1187415472,1187415788,1187416098,1187416402,1187416701,1187416994,1187417281,1187417563,1187417840,1187418111,1187418377,1187418638,1187418894,1187419145,1187419391,1187419633,1187419870,1187420103,1187420331,1187420555,1187420775,1187420990,1187421201,1187421408,1187421611,1187421810,1187422006,1187422198,1187422386,1187422571,1187422752,1187422930,1187423104,1187423275,1187423443,1187423608,1187423769,1187423927,1187424082,1187424234,1187424383,1187424530,1187424674,1187424815,1187424953,1187425089,1187425222,1187425353,1187425481,1187425607,1187425730,1187425851,1187425970,1187426086,1187426200,1187426312,1187426422,1187426530,1187426636,1187426740,1187426842,1187426942,1187427040,1187427136,1187427230,1187427322,1187427413,1187427502,1187427589,1187427674,1187427758,1187427840,1187427921,1187428000,1187428078,1187428154,1187428229,1187428302,1187428374,1187428444,1187428513,1187428581,1187428648,1187428713,1187428777,1187428840,1187428902,1187428962,1187429021,1187429079,1187429136,1187429192,1187429247,1187429301,1187429354,1187429406,1187429457,1187429507,1187429556,1187429604,1187429651,1187429697,1187429742,1187429786,1187429829,1187429872,1187429914,1187429955,1187429995,1187430034,1187430073,1187430111,1187430148,1187430184,1187430220,1187430255,1187430289,1187430323,1187430356,1187430388,1187430420,1187430451,1187430482,1187430512,1187430541,1187430570,1187430598,1187430626,1187430653,1187430680,1187430706,1187430732,1187430757,1187430782,1187430806,1187430830,1187430853,1187430876,1187430898,1187430920,1187430942,1187430963,1187430984,1187431004,1187431024,1187431044,1187431063,1187431082,1187431100,1187431118,1187431136,1187431153,1187431170,1187431187,1187431203,1187431219,1187431235,1187431250,1187431265,1187431280,1187431295,1187431309,1187431323,1187431337,1187431350,1187431363,1187431376,1187431389,1187431401,1187431413,1187431425,1187431437,1187431448,1187431459,1187431470,1187431481,1187431492,1187431502,1187431512,1187431522,1187431532,1187431542,1187431551,1187431560,1187431569,1187431578,1187431587,1187431595,1187431603,1187431611,1187431619,1187431627,1187431635,1187431642,1187431649,1187431656,1187431663,1187431670,1187431677,1187431684,1187431690,1187431696,1187431702,1187431708,1187431714,1187431720,1187431726,1187431732,1187431737,1187431742,1187431747,1187431752,1187431757,1187431762,1187431767,1187431772,1187431777,1187431782,1187431786,1187431790,1187431794,1187431798,1187431802,1187431806,1187431810,1187431814,1187431818,1187431822,1187431826,1187431829,1187431832,1187431835,1187431838,1187431841,1187431844,1187431847,1187431850,1187431853,1187431856,1187431859,1187431862,1187431865,1187431868,1187431871,1187431873,1187431875,1187431877,1187431879,1187431881,1187431883,1187431885,1187431887,1187431889,1187431891,1187431893,1187431895,1187431897,1187431899,1187431901,1187431903,1187431905,1187431907,1187431909,1187431911,1187431913,1187431915,1187431916,1187431917,1187431918,1187431919,1187431920,1187431921,1187431922
+//Job - Super Novice
+99,23,1,30,43,58,76,116,180,220,272,336,520,604,699,802,948,1125,1668,1937,2226,3040,3988,5564,6272,7021,9114,11473,15290,16891,18570,23229,28359,36478,39716,43088,52417,62495,78160,84175,90404,107611,125915,153941,191781,204351,248352,286212,328955,377083,431132,491676,559324,634723,718557,811549,914458,1028082,1153255,1290848,1441766,1606949,1787369,1984031,2197968,2430240,2681934,2954159,3248044,3564736,3905397,4271200,4663326,5082962,5531297,6009517,6518804,7060331,7635258,8244729,8889869,9571780,10291536,11050182,11848729,12688151,13569383,14493317,15460800,16472628,17529549,18632256,19781387,20977523,22221186,23512836,24852871,26241627,27679375,29166322,30702608,32288308,33923432,35607923,37341659,39124453,40956055,42836150,44764361,46740250,48763319,50833011,52948714,55109760,57315427,59564942,61857484,64192184,66568128,68984360,71439882,73933660,76464624,79031670,81633664,84269444,86937821,89637583,92367498,95126314,97912764,100725566,103563428,106425047,109309113,112214313,115139328,118082841,121043535,124020096,127011214,130015587,133031921,136058931,139095344,142139901,145191355,148248476,151310051,154374884,157441798,160509638,163577267,166643572,169707462,172767868,175823747,178874080,181917872,184954154,187981983,191000442,194008641,197005716,199990830,202963174,205921964,208866445,211795888,214709591,217606880,220487106,223349647,226193908,229019320,231825340,234611449,237377155,240121991,242845513,245547302,248226962,250884122,253518432,256129566,258717218,261281106,263820967,266336559,268827661,271294071,273735605,276152100,278543408,280909401,283249967,285565011,287854454,290118232,292356296,294568612,296755160,298915934,301050940,303160198,305243739,307301606,309333854,311340547,313321762,315277584,317208107,319113436,320993684,322848972,324679429,326485191,328266402,330023212,331755778,333464263,335148836,336809671,338446947,340060848,341651562,343219283,344764207,346286534,347786469,349264218,350719990,352153998,353566457,354957584,356327598,357676720,359005172,360313177,361600961,362868749,364116768,365345245,366554409,367744487,368915708,370068300,371202492,372318512,373416587,374496946,375559815,376605421,377633989,378645744,379640909,380619707,381582360,382529088,383460111,384375646,385275910,386161118,387031483,387887217,388728531,389555633,390368730,391168027,391953728,392726034,393485145,394231258,394964570,395685274,396393563,397089626,397773652,398445826,399106332,399755353,400393068,401019655,401635289,402240145,402834393,403418204,403991744,404555179,405108673,405652386,406186478,406711105,407226423,407732584,408229739,408718037,409197625,409668648,410131248,410585566,411031741,411469910,411900208,412322767,412737719,413145193,413545315,413938212,414324006,414702820,415074773,415439983,415798566,416150637,416496308,416835690,417168893,417496024,417817188,418132490,418442033,418745917,419044242,419337105,419624602,419906829,420183878,420455840,420722806,420984864,421242102,421494605,421742458,421985743,422224542,422458935,422689001,422914818,423136461,423354006,423567526,423777094,423982781,424184657,424382791,424577250,424768101,424955409,425139238,425319652,425496712,425670480,425841015,426008376,426172621,426333807,426491990,426647225,426799565,426949063,427095772,427239742,427381024,427519667,427655720,427789230,427920243,428048806,428174964,428298761,428420241,428539446,428656418,428771199,428883829,428994348,429102794,429209207,429313623,429416080,429516614,429615261,429712056,429807033,429900226,429991668,430081391,430169428,430255809,430340566,430423729,430505327,430585390,430663946,430741024,430816650,430890852,430963657,431035091,431105179,431173946,431241417,431307617,431372569,431436296,431498821,431560167,431620356,431679410,431737350,431794196,431849969,431904690,431958378,432011052,432062732,432113436,432163182,432211988,432259872,432306852,432352944,432398165,432442532,432486060,432528765,432570663,432611769,432652098,432691664,432730482,432768566,432805929,432842585,432878548,432913831,432948446,432982406,433015723,433048410,433080478,433111939,433142805,433173086,433202794,433231939,433260533,433288585,433316106,433343106,433369594,433395581,433421075,433446086,433470624,433494697,433518314,433541483,433564213,433586512,433608389,433629851,433650906,433671562,433691827,433711708,433731212,433750346,433769117,433787533,433805599,433823323,433840711,433857769,433874504,433890921,433907027,433922828,433938329,433953536,433968454,433983089,433997447,434011533,434025351,434038907,434052206,434065253,434078052,434090608,434102926,434115010,434126865,434138495,434149905,434161098,434172079,434182851,434193419,434203786,434213957,434223935,434233723,434243325,434252745,434261986,434271052,434279946,434288671,434297230,434305627,434313865,434321946,434329874,434337651,434345281,434352766,434360109,434367312,434374379,434381311,434388112,434394784,434401329,434407750,434414049,434420228,434426290,434432237,434438071,434443794,434449408,434454916,434460319,434465620,434470820,434475921,434480925,434485834,434490650,434495375,434500010,434504557,434509017,434513393,434517686,434521897,434526028,434530081,434534057,434537957,434541783,434545536,434549218,434552830,434556374,434559850,434563260,434566605,434569887,434573107,434576265,434579363,434582403,434585385,434588310,434591180,434593995,434596757,434599466,434602124,434604731,434607289,434609798,434612259,434614674,434617043,434619367,434621647,434623883,434626077,434628229,434630340,434632411,434634443,434636436,434638391,434640309,434642191,434644037,434645848,434647624,434649367,434651077,434652754,434654399,434656013,434657596,434659149,434660673,434662168,434663634,434665072,434666483,434667867,434669225,434670557,434671864,434673146,434674404,434675638,434676848,434678035,434679200,434680343,434681464,434682564,434683643,434684701,434685739,434686757,434687756,434688736,434689697,434690640,434691565,434692473,434693363,434694236,434695093,434695934,434696759,434697568,434698362,434699140,434699904,434700653,434701388,434702109,434702816,434703510,434704191,434704859,434705514,434706156,434706786,434707404,434708011,434708606,434709190,434709763,434710325,434710876,434711417,434711947,434712467,434712977,434713478,434713969,434714451,434714924,434715388,434715843,434716289,434716727,434717156,434717577,434717990,434718395,434718793,434719183,434719566,434719941,434720309,434720670,434721024,434721372,434721713,434722047,434722375,434722697,434723013,434723323,434723627,434723925,434724217,434724504,434724785,434725061,434725332,434725598,434725859,434726115,434726366,434726612,434726853,434727090,434727322,434727550,434727773,434727992,434728207,434728418,434728625,434728828,434729027,434729222,434729414,434729602,434729786,434729967,434730144,434730318,434730489,434730656,434730820,434730981,434731139,434731294,434731446,434731595,434731741,434731885,434732026,434732164,434732299,434732432,434732562,434732690,434732815,434732938,434733059,434733177,434733293,434733407,434733519,434733629,434733737,434733842,434733945,434734046,434734146,434734244,434734340,434734434,434734526,434734616,434734705,434734792,434734877,434734961,434735043,434735123,434735202,434735279,434735355,434735430,434735503,434735575,434735645,434735714,434735782,434735848,434735913,434735977,434736040,434736101,434736161,434736220,434736278,434736335,434736391,434736446,434736500,434736553,434736605,434736656,434736706,434736755,434736803,434736850,434736896,434736941,434736985,434737028,434737071,434737113,434737154,434737194,434737233,434737272,434737310,434737347,434737383,434737419,434737454,434737488,434737522,434737555,434737587,434737619,434737650,434737681,434737711,434737740,434737769,434737797,434737825,434737852,434737879,434737905,434737931,434737956,434737981,434738005,434738029,434738052,434738075,434738097,434738119,434738140,434738161,434738182,434738202,434738222,434738241,434738260,434738279,434738297,434738315,434738333,434738350,434738367,434738384,434738400,434738416,434738432,434738447,434738462,434738477,434738491,434738505,434738519,434738533,434738546,434738559,434738572,434738585,434738597,434738609,434738621,434738633,434738644,434738655,434738666,434738677,434738688,434738698,434738708,434738718,434738728,434738738,434738747,434738756,434738765,434738774,434738783,434738791,434738799,434738807,434738815,434738823,434738831,434738838,434738845,434738852,434738859,434738866,434738873,434738880,434738886,434738892,434738898,434738904,434738910,434738916,434738922,434738928,434738933,434738938,434738943,434738948,434738953,434738958,434738963,434738968,434738973,434738978,434738982,434738986,434738990,434738994,434738998,434739002,434739006,434739010,434739014,434739018,434739022,434739025,434739028,434739031,434739034,434739037,434739040,434739043,434739046,434739049,434739052,434739055,434739058,434739061,434739064,434739067,434739069,434739071,434739073,434739075,434739077,434739079,434739081,434739083,434739085,434739087,434739089,434739091,434739093,434739095,434739097,434739099,434739101,434739103,434739105,434739107,434739109,434739110,434739111,434739112,434739113,434739114,434739115,434739116,434739117,434739118,434739119,434739120,434739121,434739122,434739123,434739124,434739125,434739126,434739127,434739128,434739129,434739130,434739131,434739132,434739133,434739134,434739135,434739136,434739137,434739138,434739139,434739140,434739141,434739142,434739143,434739144,434739145,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146
+//Job - Novice High
+10,4001,1,11,20,31,44,100,166,226,295,374,0
+//Job - Adv First Classes
+50,4002:4003:4004:4005:4006:4007,1,60,86,116,152,232,360,440,544,672,1040,1208,1398,1604,1896,2250,3336,3874,4452,6080,7976,11128,12544,14042,18228,28683,38225,42228,46425,58073,70898,91195,99290,107720,131043,156238,195408,210430,226010,269028,314788,384853,479453,510878,620880,715530,822388,942708,1077832,1229192,1398312,1586809,1796395,2028875,2286150,2570212,2883147,3227131,3604428,4017387,4468440,4960097,5494942,6075626,6704865,7385431,8120148,8911883,9763540,10678052,11658373,12707470,13828314,15023872,16297098,17650924,19088250,20611938,22224798,23929585,25728985,27625611,29621990,31720558,33923652,36233502,38652223,41181809,43824128,46580913,49453759,52444118,55553293,58782437,62132546,65604458,69198851,72916241,76756979,80721254,84809088,89020341,93354708,97811721,102390753,107091018,111911574,116851326,121909029,127083292,132372582,137775229,143289430,148913253,154644644,160481430,166421327,172461943,178600787,184835272,191162721,197580376,204085402,210674892,217345875,224095322,230920151,237817234,244783402,251815451,258910149,266064240,273274451,280537495,287850079,295208908,302610689,310052137,317529979,325040959,332581841,340149414,347740495,355351934,362980617,370623468,378277453,385939583,393606917,401276564,408945685,416611495,424271267,431922331,439562077,447187956,454797483,462388235,469957854,477504049,485024593,492517328,499980161,507411067,514808089,522169338,529492992,536777296,544020563,551221172,558377570,565488268,572551843,579566936,586532253,593446562,600308694,607117541,613872055,620571248,627214189,633800006,640327881,646797052,653206812,659556504,665845524,672073319,678239382,684343257,690384532,696362841,702277862,708129315,713916962,719640605,725300085,730895280,736426105,741892510,747294479,752632028,757905206,763114091,768258791,773339442,778356208,783309277,788198862,793025201,797788555,802489205,807127454,811703625,816218058,820671113,825063166,829394608,833665848,837877307,842029420,846122635,850157413,854134225,858053552,861915887,865721730,869471590,873165985,876805439,880390483,883921654,887399495,890824553,894197380,897518531,900788566,904008046,907177537,910297605,913368818,916391747,919366961,922295032,925176531,928012029,930802096,933547303,936248218,938905408,941519439,944090875,946620278,949108207,951555219,953961868,956328705,958656278,960945131,963195806,965408840,967584767,969724117,971827415,973895183,975927939,977926195,979890460,981821237,983719026,985584322,987417614,989219387,990990121,992730290,994440365,996120811,997772088,999394651,1000988949,1002555426,1004094522,1005606671,1007092302,1008551839,1009985700,1011394298,1012778042,1014137334,1015472572,1016784149,1018072452,1019337863,1020580760,1021801514,1023000493,1024178058,1025334567,1026470371,1027585817,1028681247,1029756999,1030813405,1031850792,1032869483,1033869796,1034852045,1035816538,1036763579,1037693467,1038606498,1039502962,1040383145,1041247329,1042095790,1042928803,1043746635,1044549552,1045337813,1046111675,1046871391,1047617208,1048349371,1049068120,1049773692,1050466319,1051146230,1051813650,1052468801,1053111901,1053743164,1054362800,1054971017,1055568019,1056154006,1056729176,1057293722,1057847834,1058391700,1058925505,1059449429,1059963650,1060468344,1060963682,1061449833,1061926964,1062395238,1062854815,1063305853,1063748508,1064182931,1064609273,1065027680,1065438297,1065841266,1066236727,1066624817,1067005670,1067379419,1067746194,1068106123,1068459331,1068805942,1069146076,1069479853,1069807389,1070128800,1070444198,1070753693,1071057395,1071355410,1071647844,1071934799,1072216376,1072492675,1072763794,1073029828,1073290871,1073547016,1073798354,1074044974,1074286963,1074524407,1074757391,1074985997,1075210307,1075430400,1075646355,1075858249,1076066158,1076270156,1076470315,1076666707,1076859403,1077048471,1077233979,1077415993,1077594579,1077769801,1077941721,1078110401,1078275902,1078438283,1078597603,1078753918,1078907285,1079057760,1079205396,1079350247,1079492364,1079631799,1079768602,1079902823,1080034510,1080163711,1080290472,1080414839,1080536857,1080656570,1080774021,1080889253,1081002307,1081113225,1081222046,1081328810,1081433556,1081536322,1081637145,1081736061,1081833107,1081928317,1082021726,1082113368,1082203277,1082291485,1082378024,1082462925,1082546220,1082627938,1082708110,1082786764,1082863929,1082939633,1083013904,1083086769,1083158254,1083228386,1083297189,1083364689,1083430911,1083495879,1083559616,1083622146,1083683491,1083743674,1083802717,1083860641,1083917467,1083973217,1084027910,1084081567,1084134207,1084185849,1084236512,1084286215,1084334976,1084382812,1084429742,1084475782,1084520949,1084565260,1084608731,1084651377,1084693215,1084734259,1084774525,1084814027,1084852780,1084890798,1084928095,1084964685,1085000581,1085035796,1085070343,1085104235,1085137484,1085170102,1085202101,1085233493,1085264289,1085294501,1085324140,1085353217,1085381742,1085409726,1085437179,1085464111,1085490532,1085516451,1085541878,1085566823,1085591294,1085615301,1085638852,1085661956,1085684622,1085706858,1085728672,1085750072,1085771065,1085791660,1085811864,1085831684,1085851128,1085870203,1085888916,1085907274,1085925283,1085942950,1085960282,1085977285,1085993965,1086010328,1086026381,1086042129,1086057578,1086072734,1086087602,1086102188,1086116497,1086130534,1086144304,1086157813,1086171065,1086184066,1086196820,1086209332,1086221606,1086233647,1086245459,1086257047,1086268415,1086279567,1086290507,1086301240,1086311769,1086322098,1086332231,1086342171,1086351922,1086361488,1086370872,1086380078,1086389109,1086397969,1086406661,1086415187,1086423552,1086431758,1086439808,1086447705,1086455452,1086463052,1086470507,1086477821,1086484996,1086492035,1086498940,1086505714,1086512359,1086518878,1086525273,1086531547,1086537701,1086543738,1086549661,1086555471,1086561171,1086566763,1086572248,1086577629,1086582908,1086588087,1086593167,1086598151,1086603040,1086607836,1086612541,1086617157,1086621685,1086626127,1086630485,1086634760,1086638954,1086643068,1086647104,1086651063,1086654947,1086658757,1086662495,1086666162,1086669759,1086673288,1086676750,1086680146,1086683477,1086686745,1086689951,1086693096,1086696181,1086699208,1086702177,1086705090,1086707947,1086710750,1086713500,1086716198,1086718844,1086721440,1086723987,1086726485,1086728936,1086731340,1086733699,1086736013,1086738283,1086740510,1086742694,1086744837,1086746939,1086749001,1086751024,1086753009,1086754956,1086756866,1086758740,1086760578,1086762381,1086764150,1086765885,1086767587,1086769257,1086770895,1086772502,1086774078,1086775624,1086777141,1086778629,1086780089,1086781521,1086782926,1086784304,1086785656,1086786982,1086788283,1086789559,1086790811,1086792039,1086793244,1086794426,1086795586,1086796724,1086797840,1086798935,1086800009,1086801063,1086802097,1086803111,1086804106,1086805082,1086806039,1086806978,1086807899,1086808803,1086809689,1086810559,1086811412,1086812249,1086813070,1086813875,1086814665,1086815440,1086816200,1086816946,1086817678,1086818396,1086819100,1086819791,1086820469,1086821134,1086821786,1086822426,1086823053,1086823669,1086824273,1086824865,1086825446,1086826016,1086826575,1086827124,1086827662,1086828190,1086828708,1086829216,1086829714,1086830203,1086830683,1086831153,1086831615,1086832068,1086832512,1086832948,1086833375,1086833794,1086834205,1086834608,1086835004,1086835392,1086835773,1086836147,1086836514,1086836874,1086837227,1086837573,1086837912,1086838245,1086838572,1086838892,1086839206,1086839514,1086839816,1086840113,1086840404,1086840690,1086840970,1086841245,1086841515,1086841779,1086842038,1086842292,1086842542,1086842787,1086843027,1086843263,1086843494,1086843721,1086843943,1086844161,1086844375,1086844585,1086844791,1086844993,1086845191,1086845385,1086845576,1086845763,1086845946,1086846126,1086846303,1086846476,1086846646,1086846813,1086846976,1086847136,1086847293,1086847447,1086847598,1086847746,1086847892,1086848035,1086848175,1086848312,1086848447,1086848579,1086848709,1086848836,1086848961,1086849083,1086849203,1086849321,1086849437,1086849550,1086849661,1086849770,1086849877,1086849982,1086850085,1086850186,1086850285,1086850382,1086850477,1086850571,1086850663,1086850753,1086850841,1086850928,1086851013,1086851096,1086851178,1086851258,1086851337,1086851414,1086851490,1086851564,1086851637,1086851708,1086851778,1086851847,1086851914,1086851980,1086852045,1086852109,1086852171,1086852232,1086852292,1086852351,1086852409,1086852466,1086852522,1086852576,1086852629,1086852681,1086852732,1086852782,1086852831,1086852879,1086852927,1086852974,1086853020,1086853065,1086853109,1086853152,1086853194,1086853236,1086853277,1086853317,1086853356,1086853394,1086853432,1086853469,1086853505,1086853541,1086853576,1086853610,1086853644,1086853677,1086853709,1086853741,1086853772,1086853802,1086853832,1086853861,1086853890,1086853918,1086853946,1086853973,1086854000,1086854026,1086854052,1086854077,1086854102,1086854126,1086854150,1086854173,1086854196,1086854218,1086854240,1086854261,1086854282,1086854303,1086854323,1086854343,1086854362,1086854381,1086854400,1086854418,1086854436,1086854454,1086854471,1086854488,1086854505,1086854521,1086854537,1086854553,1086854568,1086854583,1086854598,1086854612,1086854626,1086854640,1086854654,1086854667,1086854680,1086854693,1086854706,1086854718,1086854730,1086854742,1086854754,1086854765,1086854776,1086854787,1086854798,1086854808,1086854818,1086854828,1086854838,1086854848,1086854857,1086854866,1086854875,1086854884,1086854893,1086854902,1086854910,1086854918,1086854926,1086854934,1086854942,1086854950,1086854957,1086854964,1086854971,1086854978,1086854985,1086854992,1086854999,1086855005,1086855011,1086855017,1086855023,1086855029,1086855035,1086855041,1086855047,1086855052,1086855057,1086855062,1086855067,1086855072,1086855077,1086855082,1086855087,1086855092,1086855096,1086855100,1086855104,1086855108,1086855112,1086855116,1086855120,1086855124,1086855128,1086855132,1086855136,1086855140,1086855143,1086855146,1086855149,1086855152,1086855155,1086855158,1086855161,1086855164,1086855167,1086855170,1086855173,1086855176,1086855179,1086855182,1086855185,1086855187,1086855189,1086855191,1086855193,1086855195,1086855197,1086855199,1086855201,1086855203,1086855205,1086855207,1086855209,1086855211,1086855213,1086855215,1086855217,1086855219,1086855221,1086855223,1086855225,1086855227,1086855228,1086855229,1086855230,1086855231,1086855232,1086855233,1086855234,1086855235,1086855236
+//Job - Adv Second Classes
+70,24:25:4008:4009:4010:4011:4012:4013:4014:4015:4016:4017:4018:4019:4020:4021:4022,1,368,568,696,1206,1774,2192,3196,5080,7352,8580,9892,13358,18984,31925,35860,40013,51605,68585,87770,96443,105515,131770,167428,206720,223860,241673,294553,362303,479053,513362,548856,656197,787507,927154,985696,1046034,1231134,1449220,1678177,1943306,2244059,2584282,2968115,3400000,3884688,4427246,5033064,5707855,6457661,7288852,8208125,9222500,10339317,11566230,12911197,14382470,15988583,17738338,19640789,21705223,23941143,26358244,28966392,31775600,34796000,38037819,41511350,45226922,49194872,53425513,57929105,62715823,67795725,73178721,78874542,84892710,91242506,97932943,104972733,112370263,120133566,128270295,136787699,145692601,154991375,164689926,174793673,185307530,196235893,207582627,219351052,231543938,244163492,257211358,270688607,284595740,298932685,313698799,328892871,344513126,360557232,377022309,393904936,411201163,428906522,447016041,465524258,484425237,503712583,523379460,543418608,563822364,584582678,605691135,627138976,648917115,671016163,693426449,716138040,739140762,762424222,785977830,809790819,833852265,858151108,882676174,907416194,932359821,957495652,982812246,1008298142,1033941875,1059731995,1085657082,1111705763,1137866726,1164128735,1190480643,1216911407,1243410098,1269965914,1296568193,1323206421,1349870242,1376549469,1403234090,1429914278,1456580397,1483223010,1509832883,1536400993,1562918530,1589376904,1615767747,1642082917,1668314501,1694454815,1720496409,1746432067,1772254807,1797957882,1823534782,1848979230,1874285184,1899446836,1924458610,1949315159,1974011367,1998542342,2022903418,2047090150,2071098310,2094923887,2118563083,2142012307,2165268175,2188327503,2211187307,2233844796,2256297369,2278542611,2300578289,2322402347,2344012903,2365408244,2386586822,2407547248,2428288289,2448808865,2469108042,2489185029,2509039173,2528669956,2548076989,2567260008,2586218871,2604953553,2623464142,2641750834,2659813929,2677653830,2695271035,2712666136,2729839813,2746792832,2763526041,2780040365,2796336805,2812416433,2828280388,2843929874,2859366157,2874590560,2889604462,2904409294,2919006536,2933397714,2947584399,2961568203,2975350775,2988933801,3002319001,3015508125,3028502953,3041305291,3053916970,3066339843,3078575783,3090626683,3102494451,3114181011,3125688300,3137018266,3148172868,3159154072,3169963851,3180604184,3191077054,3201384446,3211528348,3221510747,3231333629,3240998979,3250508779,3259865006,3269069632,3278124624,3287031942,3295793538,3304411356,3312887331,3321223387,3329421440,3337483392,3345411135,3353206549,3360871500,3368407842,3375817414,3383102041,3390263534,3397303689,3404224286,3411027090,3417713850,3424286299,3430746152,3437095109,3443334852,3449467047,3455493342,3461415367,3467234735,3472953041,3478571863,3484092761,3489517276,3494846931,3500083232,3505227667,3510281705,3515246797,3520124376,3524915857,3529622637,3534246095,3538787592,3543248471,3547630058,3551933659,3556160565,3560312047,3564389360,3568393741,3572326410,3576188570,3579981406,3583706087,3587363764,3590955573,3594482632,3597946043,3601346892,3604686248,3607965165,3611184681,3614345817,3617449581,3620496963,3623488939,3626426470,3629310502,3632141966,3634921779,3637650842,3640330044,3642960259,3645542346,3648077152,3650565509,3653008236,3655406140,3657760013,3660070635,3662338774,3664565184,3666750607,3668895774,3671001402,3673068197,3675096854,3677088055,3679042471,3680960763,3682843579,3684691557,3686505325,3688285499,3690032685,3691747478,3693430465,3695082220,3696703310,3698294290,3699855707,3701388097,3702891989,3704367901,3705816342,3707237813,3708632806,3710001804,3711345282,3712663706,3713957535,3715227220,3716473203,3717695918,3718895792,3720073245,3721228689,3722362528,3723475160,3724566975,3725638356,3726689680,3727721318,3728733632,3729726979,3730701710,3731658168,3732596692,3733517613,3734421257,3735307945,3736177990,3737031701,3737869381,3738691328,3739497833,3740289184,3741065662,3741827543,3742575099,3743308597,3744028298,3744734459,3745427333,3746107167,3746774204,3747428682,3748070836,3748700896,3749319088,3749925634,3750520750,3751104651,3751677546,3752239641,3752791138,3753332236,3753863129,3754384008,3754895060,3755396470,3755888418,3756371081,3756844634,3757309248,3757765090,3758212325,3758651114,3759081616,3759503986,3759918377,3760324939,3760723819,3761115161,3761499107,3761875797,3762245366,3762607949,3762963676,3763312677,3763655079,3763991005,3764320578,3764643917,3764961140,3765272361,3765577694,3765877250,3766171137,3766459463,3766742332,3767019847,3767292109,3767559217,3767821269,3768078359,3768330582,3768578029,3768820790,3769058954,3769292607,3769521835,3769746721,3769967347,3770183794,3770396141,3770604465,3770808842,3771009346,3771206051,3771399029,3771588350,3771774083,3771956296,3772135055,3772310426,3772482473,3772651259,3772816845,3772979292,3773138659,3773295005,3773448386,3773598859,3773746479,3773891300,3774033375,3774172755,3774309492,3774443636,3774575236,3774704340,3774830995,3774955248,3775077144,3775196728,3775314043,3775429133,3775542040,3775652805,3775761468,3775868070,3775972649,3776075244,3776175892,3776274631,3776371496,3776466523,3776559747,3776651202,3776740921,3776828938,3776915285,3776999993,3777083093,3777164616,3777244592,3777323050,3777400019,3777475527,3777549602,3777622271,3777693560,3777763496,3777832105,3777899411,3777965440,3778030215,3778093760,3778156099,3778217255,3778277250,3778336106,3778393844,3778450486,3778506053,3778560565,3778614042,3778666503,3778717968,3778768456,3778817986,3778866575,3778914242,3778961003,3779006877,3779051880,3779096028,3779139338,3779181825,3779223505,3779264394,3779304506,3779343857,3779382460,3779420330,3779457481,3779493927,3779529681,3779564756,3779599164,3779632919,3779666033,3779698518,3779730386,3779761649,3779792318,3779822405,3779851920,3779880875,3779909280,3779937145,3779964481,3779991298,3780017605,3780043413,3780068731,3780093568,3780117933,3780141835,3780165283,3780188286,3780210852,3780232989,3780254706,3780276010,3780296909,3780317412,3780337525,3780357256,3780376612,3780395601,3780414229,3780432503,3780450430,3780468016,3780485268,3780502193,3780518796,3780535084,3780551062,3780566737,3780582114,3780597199,3780611997,3780626514,3780640755,3780654726,3780668431,3780681876,3780695066,3780708005,3780720698,3780733150,3780745366,3780757349,3780769105,3780780637,3780791950,3780803048,3780813936,3780824617,3780835095,3780845374,3780855458,3780865350,3780875054,3780884574,3780893913,3780903074,3780912061,3780920878,3780929527,3780938012,3780946336,3780954501,3780962511,3780970369,3780978078,3780985640,3780993059,3781000337,3781007476,3781014480,3781021351,3781028091,3781034703,3781041189,3781047552,3781053794,3781059918,3781065925,3781071818,3781077599,3781083270,3781088834,3781094292,3781099646,3781104899,3781110052,3781115107,3781120066,3781124931,3781129703,3781134384,3781138976,3781143481,3781147901,3781152237,3781156490,3781160662,3781164755,3781168770,3781172709,3781176573,3781180364,3781184083,3781187731,3781191310,3781194821,3781198265,3781201644,3781204958,3781208209,3781211399,3781214528,3781217598,3781220609,3781223563,3781226461,3781229304,3781232093,3781234829,3781237513,3781240146,3781242729,3781245263,3781247749,3781250187,3781252579,3781254926,3781257228,3781259486,3781261701,3781263874,3781266006,3781268097,3781270149,3781272162,3781274136,3781276073,3781277973,3781279837,3781281666,3781283460,3781285220,3781286946,3781288639,3781290300,3781291930,3781293529,3781295097,3781296636,3781298145,3781299626,3781301078,3781302503,3781303901,3781305272,3781306617,3781307937,3781309231,3781310501,3781311747,3781312969,3781314168,3781315344,3781316498,3781317630,3781318740,3781319829,3781320897,3781321945,3781322973,3781323982,3781324972,3781325943,3781326895,3781327829,3781328745,3781329644,3781330526,3781331391,3781332240,3781333073,3781333890,3781334691,3781335477,3781336248,3781337004,3781337746,3781338474,3781339188,3781339888,3781340575,3781341249,3781341910,3781342559,3781343195,3781343819,3781344431,3781345032,3781345621,3781346199,3781346766,3781347322,3781347868,3781348403,3781348928,3781349443,3781349948,3781350444,3781350930,3781351407,3781351875,3781352334,3781352784,3781353226,3781353659,3781354084,3781354501,3781354910,3781355311,3781355705,3781356091,3781356470,3781356842,3781357207,3781357565,3781357916,3781358260,3781358598,3781358929,3781359254,3781359573,3781359886,3781360193,3781360494,3781360789,3781361079,3781361363,3781361642,3781361915,3781362183,3781362446,3781362704,3781362957,3781363205,3781363449,3781363688,3781363922,3781364152,3781364378,3781364599,3781364816,3781365029,3781365238,3781365443,3781365644,3781365841,3781366034,3781366224,3781366410,3781366593,3781366772,3781366948,3781367120,3781367289,3781367455,3781367618,3781367778,3781367934,3781368088,3781368239,3781368387,3781368532,3781368674,3781368813,3781368950,3781369084,3781369216,3781369345,3781369472,3781369596,3781369718,3781369838,3781369955,3781370070,3781370183,3781370294,3781370403,3781370509,3781370613,3781370715,3781370815,3781370914,3781371011,3781371106,3781371199,3781371290,3781371380,3781371468,3781371554,3781371638,3781371721,3781371802,3781371882,3781371960,3781372037,3781372112,3781372186,3781372258,3781372329,3781372399,3781372467,3781372534,3781372600,3781372664,3781372727,3781372789,3781372850,3781372910,3781372969,3781373026,3781373082,3781373137,3781373191,3781373244,3781373296,3781373347,3781373397,3781373446,3781373494,3781373541,3781373587,3781373632,3781373677,3781373721,3781373764,3781373806,3781373847,3781373887,3781373927,3781373966,3781374004,3781374041,3781374078,3781374114,3781374149,3781374184,3781374218,3781374251,3781374284,3781374316,3781374347,3781374378,3781374408,3781374438,3781374467,3781374496,3781374524,3781374551,3781374578,3781374604,3781374630,3781374655,3781374680,3781374704,3781374728,3781374751,3781374774,3781374797,3781374819,3781374841,3781374862,3781374883,3781374903,3781374923,3781374943,3781374962,3781374981,3781375000,3781375018,3781375036,3781375053,3781375070,3781375087,3781375103,3781375119,3781375135,3781375151,3781375166,3781375181,3781375196,3781375210,3781375224,3781375238,3781375252,3781375265,3781375278,3781375291,3781375303,3781375315,3781375327,3781375339,3781375351,3781375362,3781375373,3781375384,3781375395,3781375405,3781375415,3781375425,3781375435,3781375445,3781375454,3781375463,3781375472,3781375481,3781375490,3781375499,3781375507,3781375515,3781375523,3781375531,3781375539,3781375547,3781375554,3781375561,3781375568,3781375575,3781375582,3781375589,3781375596,3781375602,3781375608,3781375614,3781375620,3781375626,3781375632,3781375638,3781375644,3781375649,3781375654,3781375659,3781375664
+//Job - Star Gladiator
+50,4047:4048,1,27434,27434,27434,27434,27434,27434,27434,27434,27434,27434,27434,27434,27434,27434,27434,27434,27434,27434,54868,70216,77154,84412,105416,133942,165376,179088,193338,235642,289842,348402,373354,399168,477234,572732,674294,716870,760752,895370,1053978,1220492,1409379,1623055,1864120,2135364,2439771,2780523,3161005,3584806,4055720,4577747,5155093,5792168,6493582,7264141,8108843,9032871,10041585,11140513,12335340,13631900,15036161,16554212,18192249,19956561,21853511,23889523,26071060,28404610,30896665,33553702,36382164,39388442,42578852,45959619,49536854,53316538,57304499,61506398,65927706,70573691,75449398,80559633,85908949,91501631,97341682,103432811,109778421,116381598,123245103,130371364,137762466,145420147,153345795,161540442,170004760,178739065,187743310,197017092,206559651,216369871,226446289,236787095,247390140,258252944,269372701,280746288,292370275,304240934,316354248,328705924,341291403,354105871,367144273,380401324,393871522,407549162,421428347,435503003,449766891,464213622,478836669,493629380,508584993,523696648,538957399,554360228,569898056,585563758,601350173,617250114,633256384,649361782,665559118,681841219,698200942,714631183,731124884,747675046,764274732,780917079,797595303,814302708,831032690,847778745,864534475,881293592,898049925,914797422,931530156,948242328,964928270,981582450,998199473,1014774083,1031301167,1047775755,1064193021,1080548287,1096837020,1113054835,1129197495,1145260911,1161241141,1177134391,1192937013,1208645505,1224256509,1239766811,1255173340,1270473164,1285663492,1300741669,1315705176,1330551627,1345278767,1359884471,1374366739,1388723697,1402953592,1417054791,1431025777,1444865147,1458571611,1472143986,1485581197,1498882271,1512046336,1525072618,1537960438,1550709209,1563318435,1575787706,1588116696,1600305161,1612352936,1624259931,1636026131,1647651590,1659136432,1670480845,1681685082,1692749457,1703674340,1714460159,1725107395,1735616581,1745988298,1756223174,1766321883,1776285140,1786113701,1795808361,1805369951,1814799337,1824097418,1833265123,1842303411,1851213268,1859995707,1868651764,1877182497,1885588987,1893872333,1902033652,1910074079,1917994763,1925796869,1933481573,1941050064,1948503540,1955843209,1963070288,1970186001,1977191577,1984088252,1990877264,1997559857,2004137276,2010610768,2016981581,2023250963,2029420161,2035490422,2041462991,2047339109,2053120015,2058806945,2064401129,2069903793,2075316158,2080639439,2085874846,2091023580,2096086837,2101065805,2105961665,2110775588,2115508739,2120162273,2124737336,2129235066,2133656590,2138003026,2142275483,2146475060,2150602844,2154659913,2158647334,2162566165,2166417450,2170202225,2173921514,2177576330,2181167675,2184696540,2188163904,2191570735,2194917991,2198206616,2201437545,2204611701,2207729995,2210793327,2213802586,2216758649,2219662382,2222514640,2225316266,2228068093,2230770942,2233425623,2236032934,2238593664,2241108590,2243578477,2246004081,2248386147,2250725409,2253022589,2255278401,2257493547,2259668720,2261804601,2263901862,2265961164,2267983160,2269968491,2271917789,2273831677,2275710768,2277555665,2279366962,2281145244,2282891087,2284605057,2286287712,2287939601,2289561264,2291153232,2292716028,2294250167,2295756155,2297234490,2298685661,2300110151,2301508433,2302880974,2304228232,2305550658,2306848695,2308122780,2309373341,2310600799,2311805570,2312988060,2314148671,2315287796,2316405822,2317503130,2318580095,2319637084,2320674458,2321692573,2322691778,2323672416,2324634824,2325579333,2326506269,2327415953,2328308698,2329184814,2330044604,2330888366,2331716394,2332528975,2333326392,2334108923,2334876841,2335630414,2336369905,2337095574,2337807674,2338506455,2339192162,2339865036,2340525313,2341173226,2341809003,2342432868,2343045041,2343645738,2344235172,2344813550,2345381078,2345937956,2346484382,2347020550,2347546649,2348062867,2348569387,2349066390,2349554052,2350032547,2350502045,2350962713,2351414717,2351858217,2352293372,2352720337,2353139265,2353550306,2353953607,2354349312,2354737563,2355118500,2355492259,2355858974,2356218777,2356571797,2356918161,2357257994,2357591417,2357918551,2358239514,2358554421,2358863386,2359166519,2359463931,2359755728,2360042016,2360322899,2360598477,2360868851,2361134118,2361394373,2361649711,2361900225,2362146005,2362387140,2362623717,2362855822,2363083539,2363306951,2363526139,2363741182,2363952158,2364159144,2364362215,2364561444,2364756904,2364948666,2365136800,2365321374,2365502455,2365680109,2365854400,2366025392,2366193147,2366357727,2366519191,2366677598,2366833005,2366985469,2367135046,2367281790,2367425755,2367566993,2367705556,2367841494,2367974857,2368105693,2368234050,2368359975,2368483514,2368604712,2368723613,2368840261,2368954698,2369066966,2369177106,2369285159,2369391164,2369495159,2369597183,2369697272,2369795464,2369891794,2369986298,2370079010,2370169964,2370259193,2370346730,2370432607,2370516855,2370599505,2370680588,2370760133,2370838169,2370914725,2370989829,2371063508,2371135789,2371206699,2371276264,2371344509,2371411459,2371477139,2371541573,2371604784,2371666796,2371727631,2371787312,2371845861,2371903299,2371959647,2372014925,2372069154,2372122354,2372174544,2372225744,2372275972,2372325247,2372373587,2372421009,2372467531,2372513170,2372557943,2372601866,2372644955,2372687226,2372728695,2372769376,2372809285,2372848437,2372886845,2372924524,2372961488,2372997750,2373033324,2373068222,2373102458,2373136044,2373168992,2373201314,2373233023,2373264130,2373294646,2373324582,2373353950,2373382760,2373411023,2373438750,2373465950,2373492634,2373518811,2373544491,2373569683,2373594397,2373618641,2373642425,2373665757,2373688646,2373711101,2373733129,2373754739,2373775938,2373796735,2373817137,2373837151,2373856785,2373876046,2373894941,2373913478,2373931663,2373949502,2373967002,2373984170,2374001012,2374017534,2374033742,2374049642,2374065240,2374080542,2374095553,2374110279,2374124726,2374138898,2374152801,2374166440,2374179820,2374192946,2374205822,2374218454,2374230846,2374243002,2374254927,2374266626,2374278103,2374289362,2374300407,2374311242,2374321871,2374332298,2374342527,2374352562,2374362406,2374372063,2374381537,2374390831,2374399948,2374408892,2374417666,2374426273,2374434717,2374443000,2374451126,2374459098,2374466918,2374474590,2374482116,2374489499,2374496742,2374503847,2374510817,2374517655,2374524363,2374530943,2374537398,2374543731,2374549943,2374556037,2374562016,2374567881,2374573635,2374579279,2374584816,2374590248,2374595577,2374600804,2374605932,2374610963,2374615898,2374620739,2374625488,2374630147,2374634718,2374639202,2374643600,2374647915,2374652148,2374656301,2374660375,2374664371,2374668291,2374672137,2374675910,2374679611,2374683242,2374686804,2374690298,2374693726,2374697089,2374700388,2374703624,2374706798,2374709912,2374712967,2374715964,2374718904,2374721788,2374724617,2374727393,2374730116,2374732787,2374735407,2374737978,2374740500,2374742974,2374745401,2374747782,2374750117,2374752408,2374754655,2374756860,2374759023,2374761145,2374763226,2374765268,2374767271,2374769236,2374771164,2374773055,2374774910,2374776730,2374778515,2374780266,2374781984,2374783669,2374785322,2374786944,2374788535,2374790096,2374791627,2374793129,2374794603,2374796049,2374797467,2374798858,2374800223,2374801562,2374802875,2374804163,2374805427,2374806667,2374807883,2374809076,2374810246,2374811394,2374812520,2374813625,2374814709,2374815772,2374816815,2374817838,2374818842,2374819827,2374820793,2374821741,2374822671,2374823583,2374824478,2374825356,2374826217,2374827062,2374827891,2374828704,2374829501,2374830283,2374831050,2374831803,2374832541,2374833265,2374833976,2374834673,2374835357,2374836028,2374836686,2374837332,2374837965,2374838586,2374839195,2374839793,2374840379,2374840954,2374841518,2374842072,2374842615,2374843148,2374843671,2374844184,2374844687,2374845180,2374845664,2374846139,2374846605,2374847062,2374847510,2374847950,2374848381,2374848804,2374849219,2374849626,2374850025,2374850417,2374850801,2374851178,2374851548,2374851911,2374852267,2374852616,2374852959,2374853295,2374853625,2374853948,2374854265,2374854576,2374854881,2374855180,2374855474,2374855762,2374856045,2374856322,2374856594,2374856861,2374857123,2374857380,2374857632,2374857879,2374858121,2374858359,2374858592,2374858821,2374859045,2374859265,2374859481,2374859693,2374859901,2374860105,2374860305,2374860501,2374860693,2374860882,2374861067,2374861249,2374861427,2374861602,2374861773,2374861941,2374862106,2374862268,2374862427,2374862583,2374862736,2374862886,2374863033,2374863177,2374863318,2374863457,2374863593,2374863727,2374863858,2374863986,2374864112,2374864236,2374864357,2374864476,2374864593,2374864707,2374864819,2374864929,2374865037,2374865143,2374865247,2374865349,2374865449,2374865547,2374865643,2374865737,2374865830,2374865921,2374866010,2374866097,2374866183,2374866267,2374866349,2374866430,2374866509,2374866587,2374866663,2374866738,2374866811,2374866883,2374866954,2374867023,2374867091,2374867158,2374867223,2374867287,2374867350,2374867412,2374867473,2374867532,2374867590,2374867647,2374867703,2374867758,2374867812,2374867865,2374867917,2374867968,2374868018,2374868067,2374868115,2374868162,2374868208,2374868253,2374868297,2374868341,2374868384,2374868426,2374868467,2374868507,2374868547,2374868586,2374868624,2374868661,2374868698,2374868734,2374868769,2374868803,2374868837,2374868870,2374868903,2374868935,2374868966,2374868997,2374869027,2374869057,2374869086,2374869114,2374869142,2374869169,2374869196,2374869222,2374869248,2374869273,2374869298,2374869322,2374869346,2374869369,2374869392,2374869414,2374869436,2374869458,2374869479,2374869500,2374869520,2374869540,2374869560,2374869579,2374869598,2374869616,2374869634,2374869652,2374869669,2374869686,2374869703,2374869719,2374869735,2374869751,2374869766,2374869781,2374869796,2374869811,2374869825,2374869839,2374869853,2374869866,2374869879,2374869892,2374869905,2374869917,2374869929,2374869941,2374869953,2374869964,2374869975,2374869986,2374869997,2374870008,2374870018,2374870028,2374870038,2374870048,2374870058,2374870067,2374870076,2374870085,2374870094,2374870103,2374870111,2374870119,2374870127,2374870135,2374870143,2374870151,2374870158,2374870165,2374870172,2374870179,2374870186,2374870193,2374870200,2374870206,2374870212,2374870218,2374870224,2374870230,2374870236,2374870242,2374870248,2374870253,2374870258,2374870263,2374870268,2374870273,2374870278,2374870283,2374870288,2374870293,2374870298,2374870302,2374870306,2374870310,2374870314,2374870318,2374870322,2374870326,2374870330,2374870334,2374870338,2374870342,2374870346,2374870349,2374870352,2374870355,2374870358,2374870361,2374870364,2374870367
+//Job - Baby Novice
+10,4023,1,10,18,28,40,91,151,205,268,340,0
+//Job - 1st Baby Classes
+50,4024:4025:4026:4027:4028:4029,1,30,43,58,76,116,180,220,272,336,520,604,699,802,948,1125,1668,1937,2226,3040,3988,5564,6272,7021,9114,11473,15290,16891,18570,23229,28359,36478,39716,43088,52417,62495,78160,84175,90404,107611,125915,153941,191781,204351,248352,286212,328955,377083,431132,491676,559324,634723,718557,811549,914458,1028082,1153255,1290848,1441766,1606949,1787369,1984031,2197968,2430240,2681934,2954159,3248044,3564736,3905397,4271200,4663326,5082962,5531297,6009517,6518804,7060331,7635258,8244729,8889869,9571780,10291536,11050182,11848729,12688151,13569383,14493317,15460800,16472628,17529549,18632256,19781387,20977523,22221186,23512836,24852871,26241627,27679375,29166322,30702608,32288308,33923432,35607923,37341659,39124453,40956055,42836150,44764361,46740250,48763319,50833011,52948714,55109760,57315427,59564942,61857484,64192184,66568128,68984360,71439882,73933660,76464624,79031670,81633664,84269444,86937821,89637583,92367498,95126314,97912764,100725566,103563428,106425047,109309113,112214313,115139328,118082841,121043535,124020096,127011214,130015587,133031921,136058931,139095344,142139901,145191355,148248476,151310051,154374884,157441798,160509638,163577267,166643572,169707462,172767868,175823747,178874080,181917872,184954154,187981983,191000442,194008641,197005716,199990830,202963174,205921964,208866445,211795888,214709591,217606880,220487106,223349647,226193908,229019320,231825340,234611449,237377155,240121991,242845513,245547302,248226962,250884122,253518432,256129566,258717218,261281106,263820967,266336559,268827661,271294071,273735605,276152100,278543408,280909401,283249967,285565011,287854454,290118232,292356296,294568612,296755160,298915934,301050940,303160198,305243739,307301606,309333854,311340547,313321762,315277584,317208107,319113436,320993684,322848972,324679429,326485191,328266402,330023212,331755778,333464263,335148836,336809671,338446947,340060848,341651562,343219283,344764207,346286534,347786469,349264218,350719990,352153998,353566457,354957584,356327598,357676720,359005172,360313177,361600961,362868749,364116768,365345245,366554409,367744487,368915708,370068300,371202492,372318512,373416587,374496946,375559815,376605421,377633989,378645744,379640909,380619707,381582360,382529088,383460111,384375646,385275910,386161118,387031483,387887217,388728531,389555633,390368730,391168027,391953728,392726034,393485145,394231258,394964570,395685274,396393563,397089626,397773652,398445826,399106332,399755353,400393068,401019655,401635289,402240145,402834393,403418204,403991744,404555179,405108673,405652386,406186478,406711105,407226423,407732584,408229739,408718037,409197625,409668648,410131248,410585566,411031741,411469910,411900208,412322767,412737719,413145193,413545315,413938212,414324006,414702820,415074773,415439983,415798566,416150637,416496308,416835690,417168893,417496024,417817188,418132490,418442033,418745917,419044242,419337105,419624602,419906829,420183878,420455840,420722806,420984864,421242102,421494605,421742458,421985743,422224542,422458935,422689001,422914818,423136461,423354006,423567526,423777094,423982781,424184657,424382791,424577250,424768101,424955409,425139238,425319652,425496712,425670480,425841015,426008376,426172621,426333807,426491990,426647225,426799565,426949063,427095772,427239742,427381024,427519667,427655720,427789230,427920243,428048806,428174964,428298761,428420241,428539446,428656418,428771199,428883829,428994348,429102794,429209207,429313623,429416080,429516614,429615261,429712056,429807033,429900226,429991668,430081391,430169428,430255809,430340566,430423729,430505327,430585390,430663946,430741024,430816650,430890852,430963657,431035091,431105179,431173946,431241417,431307617,431372569,431436296,431498821,431560167,431620356,431679410,431737350,431794196,431849969,431904690,431958378,432011052,432062732,432113436,432163182,432211988,432259872,432306852,432352944,432398165,432442532,432486060,432528765,432570663,432611769,432652098,432691664,432730482,432768566,432805929,432842585,432878548,432913831,432948446,432982406,433015723,433048410,433080478,433111939,433142805,433173086,433202794,433231939,433260533,433288585,433316106,433343106,433369594,433395581,433421075,433446086,433470624,433494697,433518314,433541483,433564213,433586512,433608389,433629851,433650906,433671562,433691827,433711708,433731212,433750346,433769117,433787533,433805599,433823323,433840711,433857769,433874504,433890921,433907027,433922828,433938329,433953536,433968454,433983089,433997447,434011533,434025351,434038907,434052206,434065253,434078052,434090608,434102926,434115010,434126865,434138495,434149905,434161098,434172079,434182851,434193419,434203786,434213957,434223935,434233723,434243325,434252745,434261986,434271052,434279946,434288671,434297230,434305627,434313865,434321946,434329874,434337651,434345281,434352766,434360109,434367312,434374379,434381311,434388112,434394784,434401329,434407750,434414049,434420228,434426290,434432237,434438071,434443794,434449408,434454916,434460319,434465620,434470820,434475921,434480925,434485834,434490650,434495375,434500010,434504557,434509017,434513393,434517686,434521897,434526028,434530081,434534057,434537957,434541783,434545536,434549218,434552830,434556374,434559850,434563260,434566605,434569887,434573107,434576265,434579363,434582403,434585385,434588310,434591180,434593995,434596757,434599466,434602124,434604731,434607289,434609798,434612259,434614674,434617043,434619367,434621647,434623883,434626077,434628229,434630340,434632411,434634443,434636436,434638391,434640309,434642191,434644037,434645848,434647624,434649367,434651077,434652754,434654399,434656013,434657596,434659149,434660673,434662168,434663634,434665072,434666483,434667867,434669225,434670557,434671864,434673146,434674404,434675638,434676848,434678035,434679200,434680343,434681464,434682564,434683643,434684701,434685739,434686757,434687756,434688736,434689697,434690640,434691565,434692473,434693363,434694236,434695093,434695934,434696759,434697568,434698362,434699140,434699904,434700653,434701388,434702109,434702816,434703510,434704191,434704859,434705514,434706156,434706786,434707404,434708011,434708606,434709190,434709763,434710325,434710876,434711417,434711947,434712467,434712977,434713478,434713969,434714451,434714924,434715388,434715843,434716289,434716727,434717156,434717577,434717990,434718395,434718793,434719183,434719566,434719941,434720309,434720670,434721024,434721372,434721713,434722047,434722375,434722697,434723013,434723323,434723627,434723925,434724217,434724504,434724785,434725061,434725332,434725598,434725859,434726115,434726366,434726612,434726853,434727090,434727322,434727550,434727773,434727992,434728207,434728418,434728625,434728828,434729027,434729222,434729414,434729602,434729786,434729967,434730144,434730318,434730489,434730656,434730820,434730981,434731139,434731294,434731446,434731595,434731741,434731885,434732026,434732164,434732299,434732432,434732562,434732690,434732815,434732938,434733059,434733177,434733293,434733407,434733519,434733629,434733737,434733842,434733945,434734046,434734146,434734244,434734340,434734434,434734526,434734616,434734705,434734792,434734877,434734961,434735043,434735123,434735202,434735279,434735355,434735430,434735503,434735575,434735645,434735714,434735782,434735848,434735913,434735977,434736040,434736101,434736161,434736220,434736278,434736335,434736391,434736446,434736500,434736553,434736605,434736656,434736706,434736755,434736803,434736850,434736896,434736941,434736985,434737028,434737071,434737113,434737154,434737194,434737233,434737272,434737310,434737347,434737383,434737419,434737454,434737488,434737522,434737555,434737587,434737619,434737650,434737681,434737711,434737740,434737769,434737797,434737825,434737852,434737879,434737905,434737931,434737956,434737981,434738005,434738029,434738052,434738075,434738097,434738119,434738140,434738161,434738182,434738202,434738222,434738241,434738260,434738279,434738297,434738315,434738333,434738350,434738367,434738384,434738400,434738416,434738432,434738447,434738462,434738477,434738491,434738505,434738519,434738533,434738546,434738559,434738572,434738585,434738597,434738609,434738621,434738633,434738644,434738655,434738666,434738677,434738688,434738698,434738708,434738718,434738728,434738738,434738747,434738756,434738765,434738774,434738783,434738791,434738799,434738807,434738815,434738823,434738831,434738838,434738845,434738852,434738859,434738866,434738873,434738880,434738886,434738892,434738898,434738904,434738910,434738916,434738922,434738928,434738933,434738938,434738943,434738948,434738953,434738958,434738963,434738968,434738973,434738978,434738982,434738986,434738990,434738994,434738998,434739002,434739006,434739010,434739014,434739018,434739022,434739025,434739028,434739031,434739034,434739037,434739040,434739043,434739046,434739049,434739052,434739055,434739058,434739061,434739064,434739067,434739069,434739071,434739073,434739075,434739077,434739079,434739081,434739083,434739085,434739087,434739089,434739091,434739093,434739095,434739097,434739099,434739101,434739103,434739105,434739107,434739109,434739110,434739111,434739112,434739113,434739114,434739115,434739116,434739117,434739118,434739119,434739120,434739121,434739122,434739123,434739124,434739125,434739126,434739127,434739128,434739129,434739130,434739131,434739132,434739133,434739134,434739135,434739136,434739137,434739138,434739139,434739140,434739141,434739142,434739143,434739144,434739145,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146
+//Job - 2nd Baby Classes
+50,4030:4031:4032:4033:4034:4035:4036:4037:4038:4039:4040:4041:4042:4043:4044,1,144,184,284,348,603,887,1096,1598,2540,3676,4290,4946,6679,9492,12770,14344,16005,20642,27434,35108,38577,42206,52708,66971,82688,89544,96669,117821,144921,174201,186677,199584,238617,286366,337147,358435,380376,447685,526989,610246,704689,811527,932059,1067681,1219884,1390260,1580501,1792401,2027857,2288870,2577542,2896079,3246785,3632064,4054414,4516427,5020783,5570245,6167657,6815936,7518065,8277089,9096106,9978260,10926733,11944736,13035502,14202274,15448298,16776813,18191041,19694176,21289377,22979756,24768369,26658206,28652182,30753126,32963775,35286762,37724609,40279720,42954371,45750705,48670723,51716280,54889077,58190657,61622401,65185522,68881063,72709894,76672708,80770021,85002169,89369310,93871421,98508300,103279567,108184665,113222861,118393251,123694760,129126148,134686012,140372791,146184770,152120084,158176725,164352547,170645270,177052488,183571672,190200181,196935263,203774065,210713640,217750950,224882876,232106223,239417728,246814065,254291853,261847661,269478017,277179412,284948306,292781137,300674324,308624274,316627388,324680066,332778713,340919742,349099582,357314681,365561510,373836570,382136392,390457544,398796635,407150316,415515285,423888291,432266134,440645671,449023816,457397543,465763888,474119952,482462902,490789971,499098461,507385745,515649266,523886539,532095151,540272763,548417108,556525995,564597304,572628991,580619086,588565690,596466980,604321205,612126687,619881818,627585062,635234954,642830098,650369167,657850901,665274107,672637658,679940491,687181606,694360067,701474996,708525577,715511052,722430719,729283933,736070103,742788691,749439211,756021226,762534350,768978243,775352612,781657209,787891828,794056307,800150524,806174396,812127878,818010962,823823676,829566082,835238274,840840378,846372551,851834978,857227874,862551478,867806057,872991902,878109327,883158668,888140283,893054550,897901867,902682649,907397329,912046357,916630197,921149329,925604246,929995454,934323471,938588826,942792060,946933722,951014371,955034574,958994906,962895949,966738291,970522526,974249254,977919079,981532609,985090456,988593235,992041563,995436060,998777348,1002066049,1005302786,1008488184,1011622866,1014707457,1017742580,1020728856,1023666907,1026557352,1029400809,1032197893,1034949218,1037655393,1040317027,1042934723,1045509083,1048040705,1050530182,1052978105,1055385060,1057751629,1060078390,1062365915,1064614774,1066825530,1068998742,1071134965,1073234748,1075298634,1077327163,1079320868,1081280278,1083205916,1085098299,1086957939,1088785342,1090581010,1092345438,1094079115,1095782526,1097456149,1099100457,1100715917,1102302990,1103862133,1105393795,1106898420,1108376447,1109828309,1111254434,1112655243,1114031153,1115382574,1116709911,1118013563,1119293924,1120551383,1121786323,1122999122,1124190152,1125359779,1126508366,1127636269,1128743839,1129831422,1130899359,1131947986,1132977634,1133988629,1134981292,1135955938,1136912879,1137852422,1138774868,1139680514,1140569653,1141442572,1142299555,1143140880,1143966822,1144777651,1145573633,1146355029,1147122096,1147875088,1148614253,1149339836,1150052079,1150751218,1151437486,1152111113,1152772324,1153421341,1154058381,1154683659,1155297386,1155899769,1156491012,1157071316,1157640877,1158199889,1158748542,1159287023,1159815516,1160334201,1160843257,1161342858,1161833175,1162314377,1162786630,1163250097,1163704937,1164151308,1164589365,1165019259,1165441139,1165855152,1166261441,1166660148,1167051412,1167435370,1167812155,1168181900,1168544733,1168900782,1169250171,1169593023,1169929459,1170259597,1170583552,1170901439,1171213370,1171519455,1171819803,1172114519,1172403707,1172687470,1172965908,1173239120,1173507203,1173770252,1174028360,1174281619,1174530119,1174773949,1175013195,1175247943,1175478276,1175704277,1175926026,1176143603,1176357085,1176566548,1176772068,1176973718,1177171570,1177365695,1177556163,1177743042,1177926399,1178106300,1178282809,1178455990,1178625906,1178792617,1178956183,1179116664,1179274117,1179428599,1179580165,1179728870,1179874768,1180017912,1180158353,1180296142,1180431328,1180563961,1180694088,1180821757,1180947013,1181069902,1181190469,1181308757,1181424809,1181538667,1181650373,1181759966,1181867487,1181972975,1182076467,1182178002,1182277616,1182375346,1182471227,1182565293,1182657579,1182748119,1182836945,1182924090,1183009586,1183093463,1183175752,1183256483,1183335686,1183413389,1183489621,1183564409,1183637781,1183709763,1183780382,1183849663,1183917632,1183984313,1184049731,1184113909,1184176871,1184238640,1184299239,1184358689,1184417013,1184474231,1184530365,1184585435,1184639461,1184692463,1184744460,1184795471,1184845515,1184894611,1184942776,1184990027,1185036382,1185081858,1185126472,1185170240,1185213178,1185255302,1185296627,1185337168,1185376940,1185415958,1185454236,1185491788,1185528627,1185564767,1185600222,1185635004,1185669126,1185702601,1185735441,1185767658,1185799263,1185830269,1185860686,1185890526,1185919800,1185948518,1185976691,1186004330,1186031444,1186058044,1186084139,1186109739,1186134853,1186159490,1186183659,1186207370,1186230631,1186253450,1186275836,1186297797,1186319341,1186340476,1186361210,1186381550,1186401504,1186421079,1186440283,1186459122,1186477604,1186495735,1186513521,1186530970,1186548087,1186564879,1186581353,1186597514,1186613368,1186628921,1186644179,1186659147,1186673831,1186688236,1186702367,1186716230,1186729830,1186743172,1186756260,1186769100,1186781696,1186794053,1186806175,1186818067,1186829733,1186841177,1186852404,1186863418,1186874223,1186884822,1186895220,1186905421,1186915428,1186925245,1186934875,1186944322,1186953590,1186962682,1186971601,1186980351,1186988935,1186997356,1187005617,1187013721,1187021671,1187029470,1187037121,1187044626,1187051989,1187059212,1187066298,1187073249,1187080068,1187086758,1187093321,1187099759,1187106075,1187112271,1187118349,1187124311,1187130160,1187135898,1187141527,1187147049,1187152466,1187157780,1187162993,1187168107,1187173124,1187178046,1187182874,1187187611,1187192258,1187196816,1187201288,1187205675,1187209978,1187214200,1187218341,1187222404,1187226390,1187230300,1187234136,1187237899,1187241590,1187245211,1187248763,1187252248,1187255667,1187259021,1187262311,1187265538,1187268704,1187271810,1187274857,1187277846,1187280778,1187283655,1187286477,1187289245,1187291961,1187294625,1187297238,1187299802,1187302317,1187304784,1187307204,1187309578,1187311907,1187314192,1187316434,1187318633,1187320790,1187322906,1187324982,1187327019,1187329017,1187330977,1187332900,1187334786,1187336636,1187338451,1187340232,1187341979,1187343693,1187345374,1187347023,1187348641,1187350228,1187351785,1187353312,1187354810,1187356280,1187357722,1187359136,1187360524,1187361885,1187363220,1187364530,1187365815,1187367076,1187368313,1187369526,1187370716,1187371883,1187373028,1187374151,1187375253,1187376334,1187377395,1187378435,1187379456,1187380457,1187381439,1187382403,1187383348,1187384275,1187385185,1187386077,1187386952,1187387811,1187388653,1187389479,1187390290,1187391085,1187391865,1187392630,1187393381,1187394118,1187394841,1187395550,1187396245,1187396927,1187397596,1187398252,1187398896,1187399528,1187400148,1187400756,1187401352,1187401937,1187402511,1187403074,1187403626,1187404168,1187404699,1187405220,1187405731,1187406233,1187406725,1187407208,1187407682,1187408147,1187408603,1187409050,1187409489,1187409919,1187410341,1187410755,1187411161,1187411559,1187411950,1187412333,1187412709,1187413078,1187413440,1187413795,1187414143,1187414485,1187414820,1187415149,1187415472,1187415788,1187416098,1187416402,1187416701,1187416994,1187417281,1187417563,1187417840,1187418111,1187418377,1187418638,1187418894,1187419145,1187419391,1187419633,1187419870,1187420103,1187420331,1187420555,1187420775,1187420990,1187421201,1187421408,1187421611,1187421810,1187422006,1187422198,1187422386,1187422571,1187422752,1187422930,1187423104,1187423275,1187423443,1187423608,1187423769,1187423927,1187424082,1187424234,1187424383,1187424530,1187424674,1187424815,1187424953,1187425089,1187425222,1187425353,1187425481,1187425607,1187425730,1187425851,1187425970,1187426086,1187426200,1187426312,1187426422,1187426530,1187426636,1187426740,1187426842,1187426942,1187427040,1187427136,1187427230,1187427322,1187427413,1187427502,1187427589,1187427674,1187427758,1187427840,1187427921,1187428000,1187428078,1187428154,1187428229,1187428302,1187428374,1187428444,1187428513,1187428581,1187428648,1187428713,1187428777,1187428840,1187428902,1187428962,1187429021,1187429079,1187429136,1187429192,1187429247,1187429301,1187429354,1187429406,1187429457,1187429507,1187429556,1187429604,1187429651,1187429697,1187429742,1187429786,1187429829,1187429872,1187429914,1187429955,1187429995,1187430034,1187430073,1187430111,1187430148,1187430184,1187430220,1187430255,1187430289,1187430323,1187430356,1187430388,1187430420,1187430451,1187430482,1187430512,1187430541,1187430570,1187430598,1187430626,1187430653,1187430680,1187430706,1187430732,1187430757,1187430782,1187430806,1187430830,1187430853,1187430876,1187430898,1187430920,1187430942,1187430963,1187430984,1187431004,1187431024,1187431044,1187431063,1187431082,1187431100,1187431118,1187431136,1187431153,1187431170,1187431187,1187431203,1187431219,1187431235,1187431250,1187431265,1187431280,1187431295,1187431309,1187431323,1187431337,1187431350,1187431363,1187431376,1187431389,1187431401,1187431413,1187431425,1187431437,1187431448,1187431459,1187431470,1187431481,1187431492,1187431502,1187431512,1187431522,1187431532,1187431542,1187431551,1187431560,1187431569,1187431578,1187431587,1187431595,1187431603,1187431611,1187431619,1187431627,1187431635,1187431642,1187431649,1187431656,1187431663,1187431670,1187431677,1187431684,1187431690,1187431696,1187431702,1187431708,1187431714,1187431720,1187431726,1187431732,1187431737,1187431742,1187431747,1187431752,1187431757,1187431762,1187431767,1187431772,1187431777,1187431782,1187431786,1187431790,1187431794,1187431798,1187431802,1187431806,1187431810,1187431814,1187431818,1187431822,1187431826,1187431829,1187431832,1187431835,1187431838,1187431841,1187431844,1187431847,1187431850,1187431853,1187431856,1187431859,1187431862,1187431865,1187431868,1187431871,1187431873,1187431875,1187431877,1187431879,1187431881,1187431883,1187431885,1187431887,1187431889,1187431891,1187431893,1187431895,1187431897,1187431899,1187431901,1187431903,1187431905,1187431907,1187431909,1187431911,1187431913,1187431915,1187431916,1187431917,1187431918,1187431919,1187431920,1187431921,1187431922
+//Job - Super Baby
+99,4045,1,30,43,58,76,116,180,220,272,336,520,604,699,802,948,1125,1668,1937,2226,3040,3988,5564,6272,7021,9114,11473,15290,16891,18570,23229,28359,36478,39716,43088,52417,62495,78160,84175,90404,107611,125915,153941,191781,204351,248352,286212,328955,377083,431132,491676,559324,634723,718557,811549,914458,1028082,1153255,1290848,1441766,1606949,1787369,1984031,2197968,2430240,2681934,2954159,3248044,3564736,3905397,4271200,4663326,5082962,5531297,6009517,6518804,7060331,7635258,8244729,8889869,9571780,10291536,11050182,11848729,12688151,13569383,14493317,15460800,16472628,17529549,18632256,19781387,20977523,22221186,23512836,24852871,26241627,27679375,29166322,30702608,32288308,33923432,35607923,37341659,39124453,40956055,42836150,44764361,46740250,48763319,50833011,52948714,55109760,57315427,59564942,61857484,64192184,66568128,68984360,71439882,73933660,76464624,79031670,81633664,84269444,86937821,89637583,92367498,95126314,97912764,100725566,103563428,106425047,109309113,112214313,115139328,118082841,121043535,124020096,127011214,130015587,133031921,136058931,139095344,142139901,145191355,148248476,151310051,154374884,157441798,160509638,163577267,166643572,169707462,172767868,175823747,178874080,181917872,184954154,187981983,191000442,194008641,197005716,199990830,202963174,205921964,208866445,211795888,214709591,217606880,220487106,223349647,226193908,229019320,231825340,234611449,237377155,240121991,242845513,245547302,248226962,250884122,253518432,256129566,258717218,261281106,263820967,266336559,268827661,271294071,273735605,276152100,278543408,280909401,283249967,285565011,287854454,290118232,292356296,294568612,296755160,298915934,301050940,303160198,305243739,307301606,309333854,311340547,313321762,315277584,317208107,319113436,320993684,322848972,324679429,326485191,328266402,330023212,331755778,333464263,335148836,336809671,338446947,340060848,341651562,343219283,344764207,346286534,347786469,349264218,350719990,352153998,353566457,354957584,356327598,357676720,359005172,360313177,361600961,362868749,364116768,365345245,366554409,367744487,368915708,370068300,371202492,372318512,373416587,374496946,375559815,376605421,377633989,378645744,379640909,380619707,381582360,382529088,383460111,384375646,385275910,386161118,387031483,387887217,388728531,389555633,390368730,391168027,391953728,392726034,393485145,394231258,394964570,395685274,396393563,397089626,397773652,398445826,399106332,399755353,400393068,401019655,401635289,402240145,402834393,403418204,403991744,404555179,405108673,405652386,406186478,406711105,407226423,407732584,408229739,408718037,409197625,409668648,410131248,410585566,411031741,411469910,411900208,412322767,412737719,413145193,413545315,413938212,414324006,414702820,415074773,415439983,415798566,416150637,416496308,416835690,417168893,417496024,417817188,418132490,418442033,418745917,419044242,419337105,419624602,419906829,420183878,420455840,420722806,420984864,421242102,421494605,421742458,421985743,422224542,422458935,422689001,422914818,423136461,423354006,423567526,423777094,423982781,424184657,424382791,424577250,424768101,424955409,425139238,425319652,425496712,425670480,425841015,426008376,426172621,426333807,426491990,426647225,426799565,426949063,427095772,427239742,427381024,427519667,427655720,427789230,427920243,428048806,428174964,428298761,428420241,428539446,428656418,428771199,428883829,428994348,429102794,429209207,429313623,429416080,429516614,429615261,429712056,429807033,429900226,429991668,430081391,430169428,430255809,430340566,430423729,430505327,430585390,430663946,430741024,430816650,430890852,430963657,431035091,431105179,431173946,431241417,431307617,431372569,431436296,431498821,431560167,431620356,431679410,431737350,431794196,431849969,431904690,431958378,432011052,432062732,432113436,432163182,432211988,432259872,432306852,432352944,432398165,432442532,432486060,432528765,432570663,432611769,432652098,432691664,432730482,432768566,432805929,432842585,432878548,432913831,432948446,432982406,433015723,433048410,433080478,433111939,433142805,433173086,433202794,433231939,433260533,433288585,433316106,433343106,433369594,433395581,433421075,433446086,433470624,433494697,433518314,433541483,433564213,433586512,433608389,433629851,433650906,433671562,433691827,433711708,433731212,433750346,433769117,433787533,433805599,433823323,433840711,433857769,433874504,433890921,433907027,433922828,433938329,433953536,433968454,433983089,433997447,434011533,434025351,434038907,434052206,434065253,434078052,434090608,434102926,434115010,434126865,434138495,434149905,434161098,434172079,434182851,434193419,434203786,434213957,434223935,434233723,434243325,434252745,434261986,434271052,434279946,434288671,434297230,434305627,434313865,434321946,434329874,434337651,434345281,434352766,434360109,434367312,434374379,434381311,434388112,434394784,434401329,434407750,434414049,434420228,434426290,434432237,434438071,434443794,434449408,434454916,434460319,434465620,434470820,434475921,434480925,434485834,434490650,434495375,434500010,434504557,434509017,434513393,434517686,434521897,434526028,434530081,434534057,434537957,434541783,434545536,434549218,434552830,434556374,434559850,434563260,434566605,434569887,434573107,434576265,434579363,434582403,434585385,434588310,434591180,434593995,434596757,434599466,434602124,434604731,434607289,434609798,434612259,434614674,434617043,434619367,434621647,434623883,434626077,434628229,434630340,434632411,434634443,434636436,434638391,434640309,434642191,434644037,434645848,434647624,434649367,434651077,434652754,434654399,434656013,434657596,434659149,434660673,434662168,434663634,434665072,434666483,434667867,434669225,434670557,434671864,434673146,434674404,434675638,434676848,434678035,434679200,434680343,434681464,434682564,434683643,434684701,434685739,434686757,434687756,434688736,434689697,434690640,434691565,434692473,434693363,434694236,434695093,434695934,434696759,434697568,434698362,434699140,434699904,434700653,434701388,434702109,434702816,434703510,434704191,434704859,434705514,434706156,434706786,434707404,434708011,434708606,434709190,434709763,434710325,434710876,434711417,434711947,434712467,434712977,434713478,434713969,434714451,434714924,434715388,434715843,434716289,434716727,434717156,434717577,434717990,434718395,434718793,434719183,434719566,434719941,434720309,434720670,434721024,434721372,434721713,434722047,434722375,434722697,434723013,434723323,434723627,434723925,434724217,434724504,434724785,434725061,434725332,434725598,434725859,434726115,434726366,434726612,434726853,434727090,434727322,434727550,434727773,434727992,434728207,434728418,434728625,434728828,434729027,434729222,434729414,434729602,434729786,434729967,434730144,434730318,434730489,434730656,434730820,434730981,434731139,434731294,434731446,434731595,434731741,434731885,434732026,434732164,434732299,434732432,434732562,434732690,434732815,434732938,434733059,434733177,434733293,434733407,434733519,434733629,434733737,434733842,434733945,434734046,434734146,434734244,434734340,434734434,434734526,434734616,434734705,434734792,434734877,434734961,434735043,434735123,434735202,434735279,434735355,434735430,434735503,434735575,434735645,434735714,434735782,434735848,434735913,434735977,434736040,434736101,434736161,434736220,434736278,434736335,434736391,434736446,434736500,434736553,434736605,434736656,434736706,434736755,434736803,434736850,434736896,434736941,434736985,434737028,434737071,434737113,434737154,434737194,434737233,434737272,434737310,434737347,434737383,434737419,434737454,434737488,434737522,434737555,434737587,434737619,434737650,434737681,434737711,434737740,434737769,434737797,434737825,434737852,434737879,434737905,434737931,434737956,434737981,434738005,434738029,434738052,434738075,434738097,434738119,434738140,434738161,434738182,434738202,434738222,434738241,434738260,434738279,434738297,434738315,434738333,434738350,434738367,434738384,434738400,434738416,434738432,434738447,434738462,434738477,434738491,434738505,434738519,434738533,434738546,434738559,434738572,434738585,434738597,434738609,434738621,434738633,434738644,434738655,434738666,434738677,434738688,434738698,434738708,434738718,434738728,434738738,434738747,434738756,434738765,434738774,434738783,434738791,434738799,434738807,434738815,434738823,434738831,434738838,434738845,434738852,434738859,434738866,434738873,434738880,434738886,434738892,434738898,434738904,434738910,434738916,434738922,434738928,434738933,434738938,434738943,434738948,434738953,434738958,434738963,434738968,434738973,434738978,434738982,434738986,434738990,434738994,434738998,434739002,434739006,434739010,434739014,434739018,434739022,434739025,434739028,434739031,434739034,434739037,434739040,434739043,434739046,434739049,434739052,434739055,434739058,434739061,434739064,434739067,434739069,434739071,434739073,434739075,434739077,434739079,434739081,434739083,434739085,434739087,434739089,434739091,434739093,434739095,434739097,434739099,434739101,434739103,434739105,434739107,434739109,434739110,434739111,434739112,434739113,434739114,434739115,434739116,434739117,434739118,434739119,434739120,434739121,434739122,434739123,434739124,434739125,434739126,434739127,434739128,434739129,434739130,434739131,434739132,434739133,434739134,434739135,434739136,434739137,434739138,434739139,434739140,434739141,434739142,434739143,434739144,434739145,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146,434739146
diff --git a/db/guild_skill_tree.txt b/db/guild_skill_tree.txt
index 2ae734f70..8572244aa 100644
--- a/db/guild_skill_tree.txt
+++ b/db/guild_skill_tree.txt
@@ -1,4 +1,16 @@
-//Skill-ID,MaxLV,Prerequisite Skill-ID-1,Prerequisite Skill-ID-1-Lv,PrereqSkill-ID-2,PrereqSkill-ID-2-Lv,PrereqSkill-ID-3,PrereqSkill-ID-3-Lv,PrereqSkill-ID-4,PrereqSkill-ID-4-Lv,PrereqSkill-ID-5,PrereqSkill-ID-5-Lv //GUILD SKILLNAME#Skill Name#
+// Guild Skill Tree Database
+//
+// Structure of Database:
+// SkillID,MaxLv,Prerequisite SkillID1,Prerequisite SkillLv1,PrereqSkillID2,PrereqSkillLv2,PrereqSkillID3,PrereqSkillLv3,PrereqSkillID4,PrereqSkillLv4,PrereqSkillID5,PrereqSkillLv5 //GUILD SKILLNAME#Skill Name#
+//
+// 01. SkillID Skill ID of the guild skill.
+// 02. MaxLv Maximum level of the guild skill.
+// 03. Prerequisite SkillID Guild skill required for the skill to become available.
+// 04. Prerequisite SkillLv Level of the required guild skill.
+// ...
+//
+// NOTE: MAX_GUILD_SKILL_REQUIRE (typically 5) ID/Lv pairs must be specified.
+
10000,1,0,0,0,0,0,0,0,0,0,0 //GD_APPROVAL#Official Guild Approval#
10001,1,10000,1,0,0,0,0,0,0,0,0 //GD_KAFRACONTRACT#Contract with Kafra#
diff --git a/db/homun_skill_tree.txt b/db/homun_skill_tree.txt
index e606924c0..2f889fdaf 100644
--- a/db/homun_skill_tree.txt
+++ b/db/homun_skill_tree.txt
@@ -1,4 +1,18 @@
-//CLass,Skill-ID,MaxLV,Prerequisite Skill-ID-1,Prerequisite Skill-ID-1-Lv,PrereqSkill-ID-2,PrereqSkill-ID-2-Lv,PrereqSkill-ID-3,PrereqSkill-ID-3-Lv,PrereqSkill-ID-4,PrereqSkill-ID-4-Lv,PrereqSkill-ID-5,PrereqSkill-ID-5-Lv//CLASS_SKILLNAME#Skill Name#
+// Homunculus Skill Tree Database
+//
+// Structure of Database:
+// Class,SkillID,MaxLv[,JobLevel],Prerequisite SkillID1,Prerequisite SkillLv1,PrereqSkillID2,PrereqSkillLv2,PrereqSkillID3,PrereqSkillLv3,PrereqSkillID4,PrereqSkillLv4,PrereqSkillID5,PrereqSkillLv5 //SKILLNAME#Skill Name#
+//
+// 01. Class Homunculus ID.
+// 02. SkillID Skill ID of the homunuculus skill.
+// 03. MaxLv Maximum level of the homunuculus skill.
+// 04. JobLevel Job level required for the skill to become available (optional, reserved, not used by server).
+// 05. Prerequisite SkillID Homunculus skill required for the skill to become available.
+// 06. Prerequisite SkillLv Level of the required homunculus skill.
+// ...
+//
+// NOTE: MAX_PC_SKILL_REQUIRE (typically 5) ID/Lv pairs must be specified.
+
//Lif
6001,8001,5,0,0,0,0,0,0,0,0,0,0 //HLIF_HEAL
6001,8002,5,8001,3,0,0,0,0,0,0,0,0 //HLIF_AVOID
@@ -12,7 +26,7 @@
6003,8010,5,8009,3,0,0,0,0,0,0,0,0 //HFLI_FLEET
6003,8011,5,8010,3,0,0,0,0,0,0,0,0 //HFLI_SPEED
//Vanilmirth
-6004,8013,5,0,0,0,0,0,0,0,0,0,0 //HVAN_CAPRICE,
+6004,8013,5,0,0,0,0,0,0,0,0,0,0 //HVAN_CAPRICE
6004,8014,5,8013,3,0,0,0,0,0,0,0,0 //HVAN_CHAOTIC
6004,8015,5,8013,5,0,0,0,0,0,0,0,0 //HVAN_INSTRUCT
//Lif2
@@ -28,7 +42,7 @@
6007,8010,5,8009,3,0,0,0,0,0,0,0,0 //HFLI_FLEET
6007,8011,5,8010,3,0,0,0,0,0,0,0,0 //HFLI_SPEED
//Vanilmirth2
-6008,8013,5,0,0,0,0,0,0,0,0,0,0 //HVAN_CAPRICE,
+6008,8013,5,0,0,0,0,0,0,0,0,0,0 //HVAN_CAPRICE
6008,8014,5,8013,3,0,0,0,0,0,0,0,0 //HVAN_CHAOTIC
6008,8015,5,8013,5,0,0,0,0,0,0,0,0 //HVAN_INSTRUCT
//Lif_H
@@ -47,7 +61,7 @@
6011,8011,5,8010,3,0,0,0,0,0,0,0,0 //HFLI_SPEED
6011,8012,3,0,0,0,0,0,0,0,0,0,0 //HFLI_SBR44
//Vanilmirth_H
-6012,8013,5,0,0,0,0,0,0,0,0,0,0 //HVAN_CAPRICE,
+6012,8013,5,0,0,0,0,0,0,0,0,0,0 //HVAN_CAPRICE
6012,8014,5,8013,3,0,0,0,0,0,0,0,0 //HVAN_CHAOTIC
6012,8015,5,8013,5,0,0,0,0,0,0,0,0 //HVAN_INSTRUCT
6012,8016,3,0,0,0,0,0,0,0,0,0,0 //HVAN_EXPLOSION
@@ -67,7 +81,7 @@
6015,8011,5,8010,3,0,0,0,0,0,0,0,0 //HFLI_SPEED
6015,8012,3,0,0,0,0,0,0,0,0,0,0 //HFLI_SBR44
//Vanilmirth2_H
-6016,8013,5,0,0,0,0,0,0,0,0,0,0 //HVAN_CAPRICE,
+6016,8013,5,0,0,0,0,0,0,0,0,0,0 //HVAN_CAPRICE
6016,8014,5,8013,3,0,0,0,0,0,0,0,0 //HVAN_CHAOTIC
6016,8015,5,8013,5,0,0,0,0,0,0,0,0 //HVAN_INSTRUCT
6016,8016,3,0,0,0,0,0,0,0,0,0,0 //HVAN_EXPLOSION
diff --git a/db/homunculus_db.txt b/db/homunculus_db.txt
index 3ec8f0a88..5ce9d8b73 100644
--- a/db/homunculus_db.txt
+++ b/db/homunculus_db.txt
@@ -1,6 +1,23 @@
-//Legend: b: base, gn: growth min, gx: growth max, en: evolution min, ex: evolution max
-//Note: Only the growth values are in a 1/10 scale, the other stats are 1/1 (eg: 5 gmAGI means 0.5 agi)
-//class,evo_class,name,foodID,hungryDelay,base_size,evo_size,race,element,bASPD,bHP,bSP,bSTR,bAGI,bVIT,bINT,bDEX,bLUK,gnHP,gxHP,gnSP,gxSP,gnSTR,gxSTR,gnAGI,gxAGI,gnVIT,gxVIT,gnINT,gxINT,gnDEX,gxDEX,gnLUK,gxLUK,enHP,exHP,enSP,exSP,enSTR,exSTR,enAGI,exAGI,enVIT,exVIT,enINT,exINT,enDEX,exDEX,enLUK,exLUK
+// Homunculus Database
+//
+// Structure of Database:
+// Class,EvoClass,Name,FoodID,HungryDelay,BaseSize,EvoSize,Race,Element,bASPD,bHP,bSP,bSTR,bAGI,bVIT,bINT,bDEX,bLUK,gnHP,gxHP,gnSP,gxSP,gnSTR,gxSTR,gnAGI,gxAGI,gnVIT,gxVIT,gnINT,gxINT,gnDEX,gxDEX,gnLUK,gxLUK,enHP,exHP,enSP,exSP,enSTR,exSTR,enAGI,exAGI,enVIT,exVIT,enINT,exINT,enDEX,exDEX,enLUK,exLUK
+//
+// 01. Class Homunculus ID.
+// 02. EvoClass Homunculus ID of the evolved version.
+// 03. Name Name of the homunculus.
+// 04. FoodID Item ID of the homunuclus food.
+// 05. HungryDelay Time interval in milliseconds after which the homunculus' hunger value is altered.
+// 06. BaseSize Size of the base homunculus class (0 = small, 1 = normal, 2 = large).
+// 07. EvoSize Size of the evolved homunculus class (0 = small, 1 = normal, 2 = large).
+// 08. Race Race of the homunculus (0 = formless, 1 = undead, 2 = brute, 3 = plant, 4 = insect, 5 = fish, 6 = demon, 7 = demi-human, 8 = angel, 9 = dragon).
+// 09. Element Element of the homunculus (0 = neutral, 1 = water, 2 = earth, 3 = fire, 4 = wind, 5 = poison, 6 = holy, 7 = dark, 8 = ghost, 9 = undead).
+// The element level is always 1.
+// ...
+//
+// Legend: b: base, gn: growth min, gx: growth max, en: evolution min, ex: evolution max
+// NOTE: Only the growth values are in a 1/10 scale, the other stats are 1/1 (eg: 5 gmAGI means 0.5 agi)
+
6001,6009,Lif,537,60000,0,1,7,0,700,150,40,17,20,15,35,24,12,60,100,4,9,5,19,5,19,5,19,4,20,6,20,6,20,1,10,10,20,1,5,1,4,1,5,4,10,1,10,1,3
6002,6010,Amistr,912,60000,0,1,2,0,700,320,10,20,17,35,11,24,12,80,130,1,4,8,20,4,20,4,20,1,10,3,19,3,19,10,20,1,10,1,10,1,5,4,10,1,3,1,4,1,5
6003,6011,Filir,910,60000,0,1,2,0,700,90,25,29,35,9,8,30,9,45,75,3,6,4,20,8,20,1,10,3,19,4,20,3,19,5,15,5,15,4,10,1,10,1,3,1,4,1,5,1,5
diff --git a/db/item_avail.txt b/db/item_avail.txt
index 614fcc129..a3c7acdfe 100644
--- a/db/item_avail.txt
+++ b/db/item_avail.txt
@@ -1,7 +1,15 @@
-// item id,sprite id
-// Replaces an item client-side while keeping them separate server-side.
+// Item Availability and Alias Database
+//
+// Structure of Database:
+// ItemID,SpriteID
+//
+// 01. ItemID Item ID to change.
+// 02. SpriteID Item ID which will be sent to the client instead of ItemID.
+// If 0, the item becomes unavailable for use. If item_check is enabled and a player owns such an item, it will be removed upon next login/teleport.
+//
+// NOTE: Replaces an item client-side while keeping them separate server-side.
// Think of it as a way to disguise items.
-// If 0 is used then item will be disabled.
+
2240,2241 //Beard - Grampa Beard
//Treasure Hunters Quest Items
diff --git a/db/item_buyingstore.txt b/db/item_buyingstore.txt
index ec336c2a1..879f49927 100644
--- a/db/item_buyingstore.txt
+++ b/db/item_buyingstore.txt
@@ -7,6 +7,128 @@
// Items are in same order as data\buyingstoreitemlist.txt, which
// must be edited as well for the client to accept added items.
+// items from 2011-11-02 update
+714 // Emperium
+6381 // Field_Shovel
+6382 // Urn
+6393 // Round_Feather
+6394 // Golden_Feather
+6395 // Angel_Magic_Power
+//6403
+//6404
+//6405
+//6423
+//6469
+//6470
+//6471
+//6493
+//6496
+//6497
+//6498
+//6499
+//6508
+//6509
+//6510
+//6511
+//6512
+//6513
+//6514
+//6515
+//6516
+//6517
+//6518
+//6523
+//6524
+//6525
+7347 // Lab_Staff_Record
+7760 // Yaga_Magic_Book
+7762 // Yaga_Pestle
+7824 // Spirit_Liquor
+11519 // Beef_Toast
+11520 // Mora_Mandarin
+11521 // Pingui_Berry_Juice
+11522 // Red_Raffle_Sap
+11523 // Yellow_Raffle_Sap
+11524 // White_Raffle_Sap
+11525 // Mora_Hip_Tea
+11526 // Rafflecino
+//11532
+//11533
+//11534
+//11536
+//11537
+//11547
+//11548
+//11549
+12329 // Recall_MaleGM
+12330 // Recall_FemaleGM
+12342 // Manuk's_Opportunity
+12343 // Manuk's_Courage
+12344 // Pinguicula's_fruit_Jam
+12345 // Luciola's_Honey_Jam
+12348 // Manuk's_Faith
+12349 // Cornus'_Tears
+12350 // Angeling_Potion
+12351 // Shout_Megaphone
+12354 // Buche_De_Noel
+12355 // Xmas_Gift
+12356 // Louise_Costume_Box
+12418 // Full_SwingK
+12419 // Mana_Plus
+12422 // HP_Increase_PotionS
+12423 // HP_Increase_PotionM
+12424 // HP_Increase_PotionL
+12425 // SP_Increase_PotionS
+12426 // SP_Increase_PotionM
+12427 // SP_Increase_PotionL
+12428 // Enrich_White_PotionZ
+12429 // Savage_BBQ
+12430 // Wug_Blood_Cocktail
+12431 // Minor_Brisket
+12432 // Siroma_Icetea
+12433 // Drocera_Herb_Stew
+12434 // Petti_Tail_Noodle
+12436 // Vitata500
+12437 // Enrich_Celermine_Juice
+12475 // Cure_Free
+12536 // NY_Rice_Cake_Soup
+12539 // Splendid_Box
+12561 // Mysterious_Seed
+12574 // Mora_Berry
+12575 // Arrow_Of_Elf_Cntr
+12576 // Hunting_Arrow_Cntr
+//12582
+//12608
+//12609
+//12612
+//12613
+//12614
+//12615
+//12616
+//12617
+//12618
+//12619
+//12620
+//12621
+//12623
+//12675
+//12676
+//12677
+//12678
+//12679
+//12680
+//12683
+//12690
+//12691
+//12692
+//12693
+//12694
+//12695
+//12698
+//12699
+//12700
+//12775
+
// items from 2010-03-12 update
601 // Wing_Of_Fly
602 // Wing_Of_Butterfly
@@ -259,7 +381,7 @@
12393 // RepairB
12394 // RepairC
12395 // Tantanmen
-//12414
+12414 // Guarana_Candy
12717 // Poison_Paralysis
12718 // Poison_Leech
12719 // Poison_Oblivion
@@ -334,10 +456,10 @@
593 // Honey_Pancake
594 // Sour_Cream_Pancake
595 // Mushroom_Pancake
-//11513
+11513 // Protect_Neck_Candy
11515 // Coconut
11516 // Acai_Fruit
-//11517
+11517 // Puri_Potion
701 // Ora_Ora
702 // Animal_Blood
703 // Hinalle
@@ -613,73 +735,73 @@
6146 // Magic_Gear_Fuel
6147 // Liquid_Condensed_Bullet
6186 // Monkey_Wrench
-//6189
-//6190
-//6191
-//6192
-//6193
-//6194
-//6195
-//6196
-//6197
-//6198
-//6199
-//6200
-//6201
-//6202
-//6203
-//6204
-//6205
-//6210 // Seed_Of_Thorny_Plant
-//6211 // Bloodsuck_Plant_Seed
-//6212 // Bomb_Mushroom_Spore
-//6213 // Explosive_Powder
-//6214 // Smokes_Powder
-//6215 // Tear_Gas
-//6216 // Oil_Bottle
-//6217 // Mandragora_Flowerpot
+6189 // Magic_Book_FB
+6190 // Magic_Book_CB
+6191 // Magic_Book_LB
+6192 // Magic_Book_SG
+6193 // Magic_Book_LOV
+6194 // Magic_Book_MS
+6195 // Magic_Book_CM
+6196 // Magic_Book_TV
+6197 // Magic_Book_TS
+6198 // Magic_Book_JT
+6199 // Magic_Book_WB
+6200 // Magic_Book_HD
+6201 // Magic_Book_ES
+6202 // Magic_Book_ES_
+6203 // Magic_Book_CL
+6204 // Magic_Book_CR
+6205 // Magic_Book_DL
+6210 // Seed_Of_Thorny_Plant
+6211 // Bloodsuck_Plant_Seed
+6212 // Bomb_Mushroom_Spore
+6213 // Explosive_Powder
+6214 // Smokes_Powder
+6215 // Tear_Gas
+6216 // Oil_Bottle
+6217 // Mandragora_Flowerpot
6223 // Carnium
6224 // Bradium
-//6244 // Dark_Powder
-//6245 // Black_Powder
-//6246 // Yellow_Powder
-//6247 // White_Powder
-//6248 // Chowder_Pot
-//6249 // Savage_Meat
-//6250 // Iron_Cooking_Skewer
-//6251 // Black_Charcoal
-//6252 // Wolf's_Blood
-//6253 // Cold_Ice
-//6254 // Seasoned_Tough_Meat
-//6255 // Large_Pan
-//6256 // Powdered_Ice
-//6257 // Ice_Crystal
-//6258 // Comodo_Tropical_Fruit
-//6259 // Drosera_Feeler
-//6260 // Petite_Tail
-//6261 // Fine_Noodles
-//6262 // Cold_Broth
-//6263 // Coconut
-//6264 // Melon
-//6265 // Pineapple
-//6279 // Apple_Bomb_Guidebook
-//6280 // Pineapple_Bomb_Guidebook
-//6281 // Coconut_Bomb_Guidebook
-//6282 // Melon_Bomb_Guidebook
-//6283 // Banana_Bomb_Guidebook
-//6284 // Plant_Genetic_Cultivation_Guide
-//6285 // Improved_Potion_Creation_Manual
+6244 // Dark_Powder
+6245 // Black_Powder
+6246 // Yellow_Powder
+6247 // White_Powder
+6248 // Chowder_Pot
+6249 // Savage_Meat
+6250 // Iron_Cooking_Skewer
+6251 // Black_Charcoal
+6252 // Wolf's_Blood
+6253 // Cold_Ice
+6254 // Seasoned_Tough_Meat
+6255 // Large_Pan
+6256 // Powdered_Ice
+6257 // Ice_Crystal
+6258 // Comodo_Tropical_Fruit
+6259 // Drosera_Feeler
+6260 // Petite_Tail
+6261 // Fine_Noodles
+6262 // Cold_Broth
+6263 // Coconut
+6264 // Melon
+6265 // Pineapple
+6279 // Apple_Bomb_Guidebook
+6280 // Pineapple_Bomb_Guidebook
+6281 // Coconut_Bomb_Guidebook
+6282 // Melon_Bomb_Guidebook
+6283 // Banana_Bomb_Guidebook
+6284 // Plant_Genetic_Cultivation_Guide
+6285 // Improved_Potion_Creation_Manual
6297 // Empty_Potion_Bottle
-//6321 // Rake_Helmet
-//6322 // Antler_Helmet
-//6323 // Two-Horn_Helmet
-//6324 // One-Horn_Helmet
-//6325 // White_Spider_Legs
-//6326 // Queen_Scraba_Shell
-//6360 // Scarlet_Point
-//6361 // Indigo_Point
-//6362 // Yellow_Wish_Point
-//6363 // Lime_Green_Point
+6321 // Rake_Helmet
+6322 // Antler_Helmet
+6323 // Two-Horn_Helmet
+6324 // One-Horn_Helmet
+6325 // White_Spider_Legs
+6326 // Queen_Scraba_Shell
+6360 // Scarlet_Point
+6361 // Indigo_Point
+6362 // Yellow_Wish_Point
+6363 // Lime_Green_Point
7001 // Mould_Powder
7002 // Ogre_Tooth
7003 // Anolian_Skin
@@ -1005,9 +1127,8 @@
11007 // Blood_Flower02
11008 // Barmund
11009 // Adventure_Story02
-//11020
-//11021
-//11022 // Mix_Cooking_Ingredient_Book_1
-//11023 // Vitality_Boost_Research_Book
-//11024 // Energy_Drink_Formula
-
+11020 // Japan_Book1
+11021 // Japan_Book2
+11022 // Mix_Cooking_Ingredient_Book_1
+11023 // Vitality_Boost_Research_Book
+11024 // Energy_Drink_Formula
diff --git a/db/item_cookie_bag.txt b/db/item_cookie_bag.txt
index 64cfdfe01..eec259183 100644
--- a/db/item_cookie_bag.txt
+++ b/db/item_cookie_bag.txt
@@ -1,4 +1,3 @@
-
// Cookie Bag Obtainable Items Database
//
// Structure of Database:
diff --git a/db/item_db.txt b/db/item_db.txt
index 97319e2e6..f3813f6be 100644
--- a/db/item_db.txt
+++ b/db/item_db.txt
@@ -115,13 +115,13 @@
609,Amulet,Amulet,2,100,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
610,Leaf_Of_Yggdrasil,Yggdrasil Leaf,11,4000,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "ALL_RESURRECTION",1; },{},{}
611,Spectacles,Magnifier,11,40,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "MC_IDENTIFY",1; },{},{}
-612,Portable_Furnace,Mini Furnace,2,150,,200,,,,,0xFFFFFFFF,7,2,,,,,,{ produce Produce_Materials; },{},{}
-613,Iron_Hammer,Iron Hammer,2,1000,,200,,,,,0xFFFFFFFF,7,2,,,,,,{ produce Produce_Weaponlvl1; },{},{}
-614,Golden_Hammer,Golden Hammer,2,3000,,300,,,,,0xFFFFFFFF,7,2,,,,,,{ produce Produce_Weaponlvl2; },{},{}
-615,Oridecon_Hammer,Oridecon Hammer,2,5000,,400,,,,,0xFFFFFFFF,7,2,,,,,,{ produce Produce_Weaponlvl3; },{},{}
+612,Portable_Furnace,Mini Furnace,2,150,,200,,,,,0xFFFFFFFF,7,2,,,,,,{ produce 21; },{},{}
+613,Iron_Hammer,Iron Hammer,2,1000,,200,,,,,0xFFFFFFFF,7,2,,,,,,{ produce 1; },{},{}
+614,Golden_Hammer,Golden Hammer,2,3000,,300,,,,,0xFFFFFFFF,7,2,,,,,,{ produce 2; },{},{}
+615,Oridecon_Hammer,Oridecon Hammer,2,5000,,400,,,,,0xFFFFFFFF,7,2,,,,,,{ produce 3; },{},{}
616,Old_Card_Album,Old Card Album,2,10000,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem groupranditem(IG_CardAlbum),1; },{},{}
617,Old_Violet_Box,Old Purple Box,2,10000,,200,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem groupranditem(IG_VioletBox),1; },{},{}
-618,Worn_Out_Scroll,Worn Out Scroll,2,50,,20,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem groupranditem(IG_ScrollBox),1; },{},{}
+618,Worn_Out_Scroll,Worn Out Scroll,2,50,,20,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
619,Unripe_Apple,Unripe Apple,2,1000,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ pet 1002; },{},{}
620,Orange_Juice,Orange Juice,2,1500,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ pet 1113; },{},{}
621,Bitter_Herb,Bitter Herb,2,20,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ pet 1031; },{},{}
@@ -578,7 +578,7 @@
1228,Combat_Knife,Combat Knife,4,20,,400,80,,1,0,0x028F5EEE,7,2,2,4,36,1,1,{ bonus bIgnoreDefRace,RC_DemiHuman; bonus2 bSubRace,RC_DemiHuman,10; bonus2 bSubRace,RC_Demon,-10; },{},{}
1229,Mama's_Knife,Kitchen Knife,4,20,,500,75,,1,0,0x028F5EEE,7,2,2,4,36,1,1,{ bonus bCritical,30; bonus3 bAddMonsterDropItem,517,RC_Brute,5000; },{},{}
1230,House_Auger,Ice Pick,4,20,,600,80,,1,0,0x028F5EEE,7,2,2,4,36,1,1,{ bonus bDefRatioAtkRace,RC_Boss; bonus bDefRatioAtkRace,RC_NonBoss; },{},{}
-1231,Bazerald,Bazerald,4,20,,500,70,,1,0,0x028F5EEE,7,2,2,4,36,1,1,{ bonus bWeaponMatk,105; bonus bAtkEle,Ele_Fire; bonus bInt,5; },{},{}
+1231,Bazerald,Bazerald,4,20,,500,70,,1,0,0x028F5EEE,7,2,2,4,36,1,1,{ bonus bAtkEle,Ele_Fire; bonus bInt,5; bonus bMatkRate,10; },{},{}
1232,Assasin_Dagger,Assassin Dagger,4,20,,600,140,,1,0,0x00001000,7,2,2,4,36,1,1,{ bonus bMaxHPrate,20; bonus bMaxSPrate,15; bonus bAspdRate,2; bonus bAtkEle,Ele_Dark; },{},{}
1233,Exercise,Exorciser,4,20,,700,90,,1,0,0x028F5EEE,7,2,2,4,36,1,1,{ bonus bIgnoreDefRace,RC_Demon; bonus2 bSubRace,RC_Demon,5; bonus2 bSubRace,RC_DemiHuman,-10; },{},{}
1234,Moonlight_Sword,Moonlight Dagger,4,20,,700,50,,1,0,0x028F5EEE,7,2,2,4,36,1,1,{ bonus bMaxSPrate,10; bonus bSPDrainValue,3; },{},{}
@@ -713,7 +713,7 @@
1416,Tjungkuletti,Tjungkuletti,4,20,,1000,95,,3,0,0x00004082,7,2,2,4,48,1,4,{ bonus bSPDrainValue,1; bonus bSPGainValue,5; },{},{}
1417,Pole_Axe,Pole Axe,4,20,,3800,160,,3,1,0x00004082,7,2,2,3,71,1,4,{ bonus bStr,1; bonus bInt,2; bonus bDex,1; },{},{}
1418,Gungnir_,Gungnir,4,20,,500,120,,3,2,0x00004082,7,2,2,4,4,1,4,{ bonus bAtkEle,Ele_Wind; bonus bPerfectHitRate,25; bonus bHit,30; },{},{}
-1419,Pole_Axe_C,Pole Axe,4,1,,4800,195,,3,0,0x00004082,7,2,2,3,1,0,4,{ bonus bStr,1; bonus bInt,2; bonus bDex,1; },{},{}
+1419,Pole_Axe_C,Pole Axe,4,1,,4800,159,,3,0,0x00004082,7,2,2,3,1,0,4,{ bonus bStr,1; bonus bInt,2; bonus bDex,1; },{},{}
1420,Long_Horn,Long Horn,4,20,,1000,150,,3,1,0x00004082,2,2,2,4,65,1,4,{ bonus bAtkEle,Ele_Holy; bonus2 bAddEff,Eff_Bleeding,500; skill "TF_DETOXIFY",1; bonus bUnbreakableWeapon,0; if(isequipped(2115)) bonus3 bAutoSpellWhenHit,"HP_ASSUMPTIO",2,5; },{},{}
1421,Battle_Hook,Battle Hook,4,20,,900,140,,3,1,0x00004082,2,2,2,4,65,1,4,{ bonus2 bAddEff,Eff_Stun,500; bonus2 bAddRace,RC_DemiHuman,20; skill "KN_PIERCE",3; },{},{}
1422,Hunting_Spear,Hunting Spear,4,20,,4200,180,,3,1,0x00004082,2,2,2,4,60,1,4,{ bonus bIgnoreDefRace,RC_Brute; bonus3 bAddMonsterDropItem,517,RC_Brute,1000; bonus3 bAutoSpell,"LK_JOINTBEAT",3,100; },{},{}
@@ -727,7 +727,7 @@
1430,Pike_C,Pike,4,0,,0,74,,3,0,0x00004082,7,2,2,1,1,0,4,{ bonus2 bAddSize,0,70; bonus2 bAddSize,1,70; bonus2 bAddSize,2,70; },{},{}
1431,F_Pole_Axe_C,Pole Axe,4,1,,4800,195,,3,0,0x00004082,7,2,2,3,1,0,4,{ bonus bStr,1; bonus bInt,2; bonus bDex,1; },{},{}
1432,E_Pole_Axe_C,Pole Axe,4,1,,4800,195,,3,0,0x00004082,7,2,2,3,1,0,4,{ bonus bStr,1; bonus bInt,2; bonus bDex,1; },{},{}
-1433,Imperial_Spear,Imperial Spear,4,20,,1800,180,,3,1,0x00004082,7,2,2,3,102,1,4,{ bonus bWeaponMatk,40; /* bonus bSkillAtk,"LG_CANNONSPEAR",(20+getrefine()); bonus bSkillAtk,"LG_BANISHINGPOINT",(20+getrefine()); if(isequipped(2153)) { bonus bSkillAtk,"CR_GRANDCROSS",(10+getrefine()); bonus bSkillAtk,"LG_RAYOFGENESIS",(10+getrefine()); } */ },{},{}
+1433,Imperial_Spear,Imperial Spear,4,20,,1800,180,,3,1,0x00004082,7,2,2,3,102,1,4,{ /* bonus bMAtk,40; bonus bSkillAtk,"LG_CANNONSPEAR",(20+getrefine()); bonus bSkillAtk,"LG_BANISHINGPOINT",(20+getrefine()); if(isequipped(2153)) { bonus bSkillAtk,"CR_GRANDCROSS",(10+getrefine()); bonus bSkillAtk,"LG_RAYOFGENESIS",(10+getrefine()); } */ },{},{}
// 2-Handed Spears
1451,Guisarme,Guisarme,4,13000,,1000,84,,3,2,0x00004082,7,2,34,2,18,1,5,{},{},{}
1452,Guisarme_,Guisarme,4,13000,,1000,84,,3,3,0x00004082,7,2,34,2,18,1,5,{},{},{}
@@ -751,8 +751,8 @@
1470,Brionac,Brionac,4,20,,3000,190,,3,0,0x00004082,7,2,34,4,48,1,5,{ bonus bAtkEle,Ele_Holy; skill "AL_HEAL",5; bonus3 bAutoSpell,"MG_SOULSTRIKE",3,100; bonus2 bAddRace,RC_Boss,5; },{},{}
1471,Hell_Fire,Hellfire,4,20,,3500,200,,3,0,0x00004082,7,2,34,4,48,1,5,{ bonus bAtkEle,Ele_Fire; bonus3 bAutoSpell,"MG_FIREBALL",3,100; bonus bStr,3; },{},{}
// 2-Handed Staffs
-1472,Staff_Of_Soul,Soul Staff,4,20,,1400,25,,1,0,0x00810204,7,2,34,3,73,1,10,{ bonus bWeaponMatk,200; bonus bInt,5; bonus bAgi,2; if(isequipped(2677) || isequipped(2711)){ bonus bMatkRate,6; bonus bDex,2; bonus bCastrate,-getrefine(); } },{},{}
-1473,Wizardy_Staff,Wizardry Staff,4,20,,2400,120,,1,0,0x00810204,7,2,34,4,90,1,10,{ bonus bWeaponMatk,200; bonus bInt,6; bonus bDex,2; if(isequipped(2677) || isequipped(2711)){ bonus bMatkRate,6; bonus bDex,2; bonus bCastrate,-getrefine(); } },{},{}
+1472,Staff_Of_Soul,Soul Staff,4,20,,1400,25,,1,0,0x00810204,7,2,34,3,73,1,10,{ bonus bInt,5; bonus bAgi,2; bonus bMatkRate,15; if(isequipped(2677) || isequipped(2711)){ bonus bMatkRate,6; bonus bDex,2; bonus bCastrate,-getrefine(); } },{},{}
+1473,Wizardy_Staff,Wizardry Staff,4,20,,2400,120,,1,0,0x00810204,7,2,34,4,90,1,10,{ bonus bInt,6; bonus bDex,2; bonus bMatkRate,15; if(isequipped(2677) || isequipped(2711)){ bonus bMatkRate,6; bonus bDex,2; bonus bCastrate,-getrefine(); } },{},{}
// 2-Handed Spears
1474,Gae_Bolg,Gae Bolg,4,20,,2000,160,,3,0,0x00004082,7,2,34,4,60,1,5,{ bonus bIgnoreDefRace,RC_Dragon; bonus2 bAddRace,RC_Boss,10; },{},{}
1475,Horseback_Lance,Equestrian's Spear,4,20,,3700,200,,4,0,0x00004082,7,2,34,4,75,1,5,{},{},{}
@@ -799,7 +799,7 @@
1527,Quadrille,Quadrille,4,20,,900,165,,1,0,0x00008110,7,2,2,4,40,1,8,{ bonus2 bAddRace,RC_Undead,10; bonus2 bAddRace,RC_DemiHuman,10; bonus2 bAddEle,Ele_Earth,10; },{},{}
1528,Grand_Cross,Grand Cross,4,20,,1500,140,,1,0,0x00008110,7,2,2,4,40,1,8,{ bonus bAtkEle,Ele_Holy; skill "PR_TURNUNDEAD",3; bonus3 bAutoSpell,"PR_TURNUNDEAD",3,100; bonus2 bSPDrainValueRace,RC_Undead,1; bonus2 bSPGainRace,RC_Undead,3; },{},{}
1529,Iron_Driver,Iron Driver,4,20,,3000,155,,2,0,0x00008100,7,2,2,3,78,1,8,{},{},{}
-1530,Mjolnir,Mjolnir,4,20,,6000,350,,1,0,0x000444A2,7,2,2,4,95,0,8,{ bonus bStr,20; bonus bDex,50; bonus bAtkEle,Ele_Wind; bonus bAspdRate,10; bonus bUnbreakableWeapon,0; bonus3 bAutoSpell,"MG_THUNDERSTORM",10,100; autobonus "{ bonus bSplashRange,1; }",50,10000,BF_WEAPON,"{ specialeffect2 EF_ENHANCE; }"; },{},{}
+1530,Mjolnir,Mjolnir,4,20,,6000,250,,1,0,0x000444A2,7,2,2,4,95,0,8,{ bonus bAtkEle,Ele_Wind; bonus bDex,40; bonus bStr,15; bonus bAspdRate,10; bonus bUnbreakableWeapon,0; },{},{}
1531,Spanner,Wrench,4,20,,2500,115,,1,0,0x00008110,7,2,2,3,55,1,8,{ bonus2 bAddEff,Eff_Blind,100; bonus2 bAddEff,Eff_Stun,100; bonus2 bAddEff,Eff_Poison,100; bonus2 bAddEff,Eff_Freeze,100; },{},{}
1532,Stunner_,Stunner,4,60000,,2000,140,,1,2,0x00008110,7,2,2,3,27,1,8,{ bonus2 bAddEff,Eff_Stun,1000; },{},{}
1533,Warrior_Balmung,Warrior's Balmung,4,20,,1000,170,,1,0,0xFFFFFFFF,7,2,2,4,48,1,8,{ bonus bAllStats,5; },{},{}
@@ -830,85 +830,85 @@
1557,Book_Of_The_Apocalypse,Book of the Apocalypse,4,60000,,800,120,,1,0,0x00410100,7,2,2,4,40,1,15,{ bonus bAtkEle,Ele_Dark; bonus2 bAddEle,Ele_Holy,5; bonus2 bAddEle,Ele_Water,7; bonus2 bAddEle,Ele_Earth,7; bonus2 bAddEle,Ele_Fire,7; bonus2 bAddEle,Ele_Wind,7; },{},{}
1558,Girl's_Diary,Girl's Diary,4,1500,,300,60,,1,1,0x00410100,7,2,2,4,40,1,15,{ bonus2 bAddDamageClass,1188,150; },{},{}
1559,Legacy_Of_Dragon,Legacy of Dragon,4,20,,700,130,,1,0,0x00410100,7,2,2,4,70,1,15,{ bonus bInt,3; bonus bIgnoreDefRace,RC_Dragon; bonus2 bSPGainRace,RC_Dragon,10; },{},{}
-1560,Diary_Of_Great_Sage,Sage's Diary,4,20,,1100,100,,1,2,0x00410100,7,2,2,3,60,1,15,{ bonus bWeaponMatk,120; if(readparam(bStr)>=50) bonus bAspdRate,5; if(readparam(bInt)>=70) bonus bMatkRate,5; },{},{}
+1560,Diary_Of_Great_Sage,Sage's Diary,4,20,,1100,100,,1,2,0x00410100,7,2,2,3,60,1,15,{ bonus bMatkRate,15; if(readparam(bStr)>=50) bonus bAspdRate,5; if(readparam(bInt)>=70) bonus bMatkRate,5; },{},{}
1561,Hardback,Hardcover Book,4,20,,1500,140,,1,1,0x00410100,7,2,2,4,55,1,15,{ bonus bStr,3; bonus bDex,2; },{},{}
1562,Bible_Of_Battlefield,Battlefield Textbook,4,20,,700,110,,1,1,0x00410100,7,2,2,4,80,0,15,{ bonus bInt,3; bonus3 bAutoSpell,"AL_BLESSING",3+(getskilllv("AL_BLESSING")>3)*(getskilllv("AL_BLESSING")-3),20; },{},{}
-1563,Diary_Of_Great_Sage_C,Sage's Diary,4,1,,0,135,,1,2,0x00410100,7,2,2,3,1,0,15,{ bonus bWeaponMatk,140; bonus bAspdRate,5; },{},{}
-1564,Encyclopedia,Encyclopedia,4,20,,2000,110,,1,2,0x00410100,7,2,2,3,70,1,15,{ bonus bWeaponMatk,100; bonus bInt,3; bonus bDex,2; bonus bCritical,20+((readparam(bLuk)*2)/10); },{},{}
-1565,Death_Note,Ledger of Death,4,20,,1000,137,,1,2,0x00410100,7,2,2,4,85,1,15,{ bonus bWeaponMatk,100; bonus bStr,3; bonus bInt,3; bonus bLuk,-20; bonus2 bWeaponComaRace,RC_DemiHuman,10; bonus bAspdRate,getrefine(); if(BaseJob == Job_Sage) bonus3 bAutoSpell,"NPC_HELLJUDGEMENT",5,20; },{},{}
-1566,Diary_Of_Great_Basil,Diary Of Great Basil,4,20,,0,120,,1,0,0x00410100,7,2,2,1,0,0,15,{ bonus bWeaponMatk,125; bonus2 bAddRace,RC_Boss,50; bonus2 bAddRace,RC_NonBoss,50; },{},{}
-1567,Hardback_C,Refined Hardcover Book,4,1,,0,168,,1,0,0x00410100,7,2,2,4,0,0,15,{ bonus bWeaponMatk,100; bonus bStr,5; bonus bDex,2; },{},{}
+1563,Diary_Of_Great_Sage_C,Sage's Diary,4,1,,0,135,,1,2,0x00410100,7,2,2,3,1,0,15,{ bonus bMatkRate,20; bonus bAspdRate,5; },{},{}
+1564,Encyclopedia,Encyclopedia,4,20,,2000,110,,1,2,0x00410100,7,2,2,3,70,1,15,{ bonus bMatkRate,15; bonus bInt,3; bonus bDex,2; bonus bCritical,20+((readparam(bLuk)*2)/10); },{},{}
+1565,Death_Note,Ledger of Death,4,20,,1000,137,,1,2,0x00410100,7,2,2,4,85,1,15,{ bonus bMatkRate,15; bonus bStr,3; bonus bInt,3; bonus bLuk,-20; bonus2 bWeaponComaRace,RC_DemiHuman,10; bonus bAspdRate,getrefine(); if(BaseJob == Job_Sage) bonus3 bAutoSpell,"NPC_HELLJUDGEMENT",5,20; },{},{}
+1566,Diary_Of_Great_Basil,Diary Of Great Basil,4,20,,0,120,,1,0,0x00410100,7,2,2,1,0,0,15,{ bonus2 bAddRace,RC_Boss,50; bonus2 bAddRace,RC_NonBoss,50; },{},{}
+1567,Hardback_C,Refined Hardcover Book,4,1,,0,168,,1,0,0x00410100,7,2,2,4,0,0,15,{ bonus bStr,5; bonus bDex,2; bonus bMatkRate,20; },{},{}
1568,Book_Of_Billows_,Book of Billows,4,35000,,750,90,,1,3,0x00410100,7,2,2,3,27,1,15,{ bonus bAtkEle,Ele_Water; },{},{}
1569,Book_Of_Mother_Earth_,Book of Mother Earth,4,35000,,750,90,,1,3,0x00410100,7,2,2,3,27,1,15,{ bonus bAtkEle,Ele_Earth; },{},{}
1570,Book_Of_Blazing_Sun_,Book of Blazing Sun,4,35000,,750,90,,1,3,0x00410100,7,2,2,3,27,1,15,{ bonus bAtkEle,Ele_Fire; },{},{}
1571,Book_Of_Gust_Of_Wind_,Book of Gust of Wind,4,35000,,750,90,,1,3,0x00410100,7,2,2,3,27,1,15,{ bonus bAtkEle,Ele_Wind; },{},{}
-1572,Principles_Of_Magic,Principles of Magic,4,20,,300,60,,1,2,0x00410100,7,2,2,3,60,1,15,{ bonus bWeaponMatk,160; bonus bInt,3; bonus bSPrecovRate,5; },{},{}
-1573,Ancient_Magic,Ancient Magic,4,20,,700,30,,1,2,0x00410100,7,2,2,3,70,1,15,{ bonus bWeaponMatk,140; if (isequipped(2334) || isequipped(2372)) { bonus bMdef,8; bonus bMaxSPRate,10; bonus bInt,4; }; },{},{}
-1574,BF_Book1,Brave Battle Strategy Book,4,20,,0,90,,1,0,0x00410100,7,2,2,3,80,1,15,{ bonus bWeaponMatk,125; bonus bStr,2; bonus bInt,1; bonus2 bAddRace,RC_DemiHuman,75; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus bUnbreakableWeapon,0; },{},{}
-1575,BF_Book2,Valorous Battle Strategy Book,4,20,,0,90,,1,0,0x00410100,7,2,2,3,80,1,15,{ bonus bWeaponMatk,125; bonus bStr,1; bonus bInt,2; bonus2 bIgnoreMDefRate,RC_DemiHuman,25; bonus bUnbreakableWeapon,0; },{},{}
-1576,Krieger_Book1,Glorious Tablet,4,20,,0,90,,1,0,0x00410100,7,2,2,4,80,1,15,{ bonus bWeaponMatk,115; bonus2 bAddRace,RC_DemiHuman,80; bonus2 bIgnoreDefRate,RC_DemiHuman,25; bonus bUnbreakableWeapon,0; if(getrefine() > 5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; } if(getrefine() > 8) autobonus "{ bonus bBaseAtk,200; }",30,3000,BF_WEAPON,"{ specialeffect2 EF_BASH3D; }"; },{},{}
-1577,Krieger_Book2,Glorious Apocalypse,4,20,,0,90,,1,0,0x00410100,7,2,2,4,80,1,15,{ bonus bWeaponMatk,115; bonus2 bAddRace,RC_DemiHuman,80; bonus2 bIgnoreDefRate,RC_DemiHuman,25; bonus bUnbreakableWeapon,0; if(getrefine() > 5) bonus2 bIgnoreDefRate,RC_DemiHuman,5; if(getrefine() > 8) { bonus bMatkRate,5; bonus bCastrate,-5; bonus bDelayRate,-5; } },{},{}
+1572,Principles_Of_Magic,Principles of Magic,4,20,,300,60,,1,2,0x00410100,7,2,2,3,60,1,15,{ bonus bMatkRate,20; bonus bInt,3; bonus bSPrecovRate,5; },{},{}
+1573,Ancient_Magic,Ancient Magic,4,20,,700,30,,1,2,0x00410100,7,2,2,3,70,1,15,{ bonus bMatkRate,15; if (isequipped(2334) || isequipped(2372)) { bonus bMdef,8; bonus bMaxSPRate,10; bonus bInt,4; }; },{},{}
+1574,BF_Book1,Brave Battle Strategy Book,4,20,,0,90,,1,0,0x00410100,7,2,2,3,80,1,15,{ bonus bStr,2; bonus bInt,1; bonus bMatkRate,15; bonus2 bAddRace,RC_DemiHuman,75; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus bUnbreakableWeapon,0; },{},{}
+1575,BF_Book2,Valorous Battle Strategy Book,4,20,,0,90,,1,0,0x00410100,7,2,2,3,80,1,15,{ bonus bStr,2; bonus bInt,1; bonus bMatkRate,15; bonus2 bIgnoreMDefRate,RC_DemiHuman,25; bonus bUnbreakableWeapon,0; },{},{}
+1576,Krieger_Book1,Glorious Tablet,4,20,,0,90,,1,0,0x00410100,7,2,2,4,80,1,15,{ bonus bMatkRate,15; bonus2 bAddRace,RC_DemiHuman,80; bonus2 bIgnoreDefRate,RC_DemiHuman,25; bonus bUnbreakableWeapon,0; if(getrefine() > 5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; } if(getrefine() > 8) autobonus "{ bonus bBaseAtk,200; }",30,3000,BF_WEAPON,"{ specialeffect2 EF_BASH3D; }"; },{},{}
+1577,Krieger_Book2,Glorious Apocalypse,4,20,,0,90,,1,0,0x00410100,7,2,2,4,80,1,15,{ bonus bMatkRate,15; bonus2 bAddRace,RC_DemiHuman,80; bonus2 bIgnoreDefRate,RC_DemiHuman,25; bonus bUnbreakableWeapon,0; if(getrefine() > 5) bonus2 bIgnoreDefRate,RC_DemiHuman,5; if(getrefine() > 8) { bonus bMatkRate,5; bonus bCastrate,-5; bonus bDelayRate,-5; } },{},{}
1578,Book_Of_Prayer,Book Of Prayer,4,20,,0,140,,1,0,0x00410100,7,2,2,3,0,0,15,{ bonus bVit,2; bonus bMdef,2; bonus bMaxSPrate,10; },{},{}
-1579,Death_Note_M,Book of the Dead,4,20,,1000,137,,1,2,0x00410100,7,2,2,4,85,1,15,{ bonus bStr,3; bonus bInt,3; bonus bLuk,-20; bonus2 bWeaponComaRace,RC_DemiHuman,10; bonus bAspdRate,getrefine(); if(BaseJob == Job_Sage) bonus3 bAutoSpell,"NPC_HELLJUDGEMENT",5,20; },{},{}
-1580,Encyclopedia_C,Giant Encyclopedia,4,0,,0,145,,1,0,0x00410100,7,2,2,3,0,0,15,{ bonus bWeaponMatk,100; bonus bInt,3; bonus bDex,2; bonus bCritical,20+((readparam(bLuk)*2)/10); bonus2 bAddSize,0,40; bonus2 bAddSize,1,40; bonus2 bAddSize,2,40; },{},{}
+1579,Death_Note_M,Book of the Dead,4,20,,1000,137,,1,2,0x00410100,7,2,2,4,85,1,15,{ bonus bMatkRate,15; bonus bStr,3; bonus bInt,3; bonus bLuk,-20; bonus2 bWeaponComaRace,RC_DemiHuman,10; bonus bAspdRate,getrefine(); if(BaseJob == Job_Sage) bonus3 bAutoSpell,"NPC_HELLJUDGEMENT",5,20; },{},{}
+1580,Encyclopedia_C,Giant Encyclopedia,4,0,,0,145,,1,0,0x00410100,7,2,2,3,0,0,15,{ bonus bMatkRate,15; bonus bInt,3; bonus bDex,2; bonus bCritical,20+((readparam(bLuk)*2)/10); bonus2 bAddSize,0,40; bonus2 bAddSize,1,40; bonus2 bAddSize,2,40; },{},{}
1581,F_Diary_Of_Great_Sage_C,Diary Of Great Sage,4,1,,0,135,,1,2,0x00410100,7,2,2,3,1,0,15,{},{},{}
1582,E_Diary_Of_Great_Sage_C,Diary Of Great Sage,4,1,,0,135,,1,2,0x00410100,7,2,2,3,1,0,15,{},{},{}
-1599,Angra_Manyu,Angra Manyu,4,1,,10,1000,,2,0,0xFFFFFFFF,7,2,2,1,1,1,8,{ bonus bWeaponMatk,1000; bonus bAllStats,50; bonus bBaseAtk,3800; bonus2 bHPDrainRate,1000,100; bonus2 bSPDrainRate,1000,20; bonus bHealPower,200; bonus2 bAddRace,RC_NonBoss,100; bonus2 bAddRace,RC_Boss,100; skill "WZ_STORMGUST",10; Skill "WZ_METEOR",10; Skill "WZ_VERMILION",10; /*skill "GM_SANDMAN",1;*/ bonus bFixedCastRate,-100; },{},{}
+1599,Angra_Manyu,Angra Manyu,4,1,,10,200,,2,0,0xFFFFFFFF,7,2,2,1,1,1,8,{ bonus bAllStats,50; bonus bBaseAtk,3800; bonus bMatkRate,200; bonus2 bHPDrainRate,1000,100; bonus2 bSPDrainRate,1000,20; bonus bHealPower,200; bonus2 bAddRace,RC_NonBoss,100; bonus2 bAddRace,RC_Boss,100; skill "WZ_STORMGUST",10; Skill "WZ_METEOR",10; Skill "WZ_VERMILION",10; /*skill "GM_SANDMAN",1;*/ },{},{}
// Staffs
-1601,Rod,Rod,4,50,,400,15,,1,3,0x00818315,7,2,2,1,1,1,10,{ bonus bWeaponMatk,30; },{},{}
-1602,Rod_,Rod,4,50,,400,15,,1,4,0x00818315,7,2,2,1,1,1,10,{ bonus bWeaponMatk,30; },{},{}
-1603,Rod__,Rod,4,50,,400,15,,1,0,0x00818315,7,2,2,1,1,1,10,{ bonus bWeaponMatk,30; },{},{}
-1604,Wand,Wand,4,2500,,400,25,,1,2,0x00818315,7,2,2,2,12,1,10,{ bonus bWeaponMatk,45; bonus bInt,1; },{},{}
-1605,Wand_,Wand,4,2500,,400,25,,1,3,0x00818315,7,2,2,2,12,1,10,{ bonus bWeaponMatk,45; bonus bInt,1; },{},{}
-1606,Wand__,Wand,4,2500,,400,25,,1,0,0x00818315,7,2,2,2,12,1,10,{ bonus bWeaponMatk,45; bonus bInt,1; },{},{}
-1607,Staff,Staff,4,9500,,400,40,,1,2,0x00818314,7,2,2,2,12,1,10,{ bonus bWeaponMatk,70; bonus bInt,2; },{},{}
-1608,Staff_,Staff,4,9500,,400,40,,1,3,0x00818314,7,2,2,2,12,1,10,{ bonus bWeaponMatk,70; bonus bInt,2; },{},{}
-1609,Staff__,Staff,4,9500,,400,40,,1,0,0x00818314,7,2,2,2,12,1,10,{ bonus bWeaponMatk,70; bonus bInt,2; },{},{}
-1610,Arc_Wand,Arc Wand,4,45000,,400,60,,1,1,0x00818314,7,2,2,3,24,1,10,{ bonus bWeaponMatk,95; bonus bInt,3; },{},{}
-1611,Arc_Wand_,Arc Wand,4,45000,,400,60,,1,2,0x00818314,7,2,2,3,24,1,10,{ bonus bWeaponMatk,95; bonus bInt,3; },{},{}
-1612,Arc_Wand__,Arc Wand,4,45000,,400,60,,1,0,0x00818314,7,2,2,3,24,1,10,{ bonus bWeaponMatk,95; bonus bInt,3; },{},{}
-1613,Mighty_Staff,Mighty Staff,4,20,,700,130,,1,0,0x00818314,7,2,2,3,24,1,10,{ bonus bWeaponMatk,100; bonus bStr,10; bonus bSPDrainValue,-2; },{},{}
-1614,Blessed_Wand,Wand of Occult,4,20,,700,75,,1,0,0x00818314,7,2,2,3,24,1,10,{ bonus bWeaponMatk,105; bonus bInt,3; },{},{}
-1615,Bone_Wand,Evil Bone Wand,4,20,,700,40,,1,0,0x00818314,7,2,2,3,24,1,10,{ bonus bWeaponMatk,110; bonus bAtkEle,Ele_Undead; bonus bInt,4; },{},{}
-1616,Staff_Of_Wing,Wing Staff,4,20,,500,60,,1,0,0x00810204,7,2,2,4,40,1,10,{ bonus bWeaponMatk,115; bonus bAtkEle,Ele_Wind; bonus bCastrate,-5; },{},{}
-1617,Survival_Rod,Survivor's Rod,4,85000,,1000,50,,1,0,0x00818314,7,2,2,3,24,1,10,{ bonus bWeaponMatk,120; bonus bDex,2; bonus bMaxHP,300; },{},{}
-1618,Survival_Rod_,Survivor's Rod,4,85000,,1000,50,,1,1,0x00818314,7,2,2,3,24,1,10,{ bonus bWeaponMatk,120; bonus bDex,3; bonus bMaxHP,400; },{},{}
-1619,Survival_Rod2,Survivor's Rod,4,85000,,1000,50,,1,0,0x00818314,7,2,2,3,24,1,10,{ bonus bWeaponMatk,120; bonus bInt,2; bonus bMaxHP,300; },{},{}
-1620,Survival_Rod2_,Survivor's Rod,4,85000,,1000,50,,1,1,0x00818314,7,2,2,3,24,1,10,{ bonus bWeaponMatk,120; bonus bInt,3; bonus bMaxHP,400; },{},{}
-1621,Hypnotist's_Staff,Hypnotist's Staff,4,43000,,500,70,,1,1,0x00000001,7,2,2,3,30,1,10,{ bonus bWeaponMatk,120; bonus bInt,1; },{},{}
-1622,Hypnotist's_Staff_,Hypnotist's Staff,4,20,,500,70,,1,2,0x00000001,7,2,2,3,30,1,10,{ bonus bWeaponMatk,120; bonus bInt,1; },{},{}
-1623,Mighty_Staff_C,Mighty Staff,4,1,,0,165,,1,0,0x00818314,7,2,2,3,1,0,10,{ bonus bWeaponMatk,100; bonus bStr,10; bonus bInt,4; bonus bSPDrainValue,-1; },{},{}
-1624,Lich_Bone_Wand,Lich's Bone Wand,4,20,,800,60,,1,2,0x00018314,2,2,2,3,70,1,10,{ bonus bWeaponMatk,170; bonus bAtkEle,Ele_Undead; bonus bInt,1; bonus bDex,1; bonus3 bAutoSpellWhenHit,"NPC_WIDECURSE",5,10+getrefine(); if(getrefine()>=9){ bonus bMatkRate,3; bonus bMaxSP,300; } },{},{}
-1625,Healing_Staff,Healing Staff,4,20,,400,10,,1,0,0x00008110,7,2,2,3,55,1,10,{ bonus bWeaponMatk,105; bonus bAtkEle,Ele_Holy; bonus bHealPower,(getrefine()*3/2); },{},{}
-1626,Piercing_Staff,Piercing Staff,4,20,,500,80,,1,0,0x00018314,2,2,2,3,70,1,10,{ bonus bWeaponMatk,145; bonus bInt,4; bonus bIgnoreMdefRate,10+getrefine(); },{},{}
-1627,Staffy,Staffy,4,20,,0,40,,1,0,0x00818314,7,2,2,1,0,0,10,{ bonus bWeaponMatk,120; bonus bInt,4; bonus2 bAddRace,RC_Boss,50; bonus2 bAddRace,RC_NonBoss,50; },{},{}
-1628,Survival_Rod_C,Refined Survivor's Rod,4,1,,0,71,,1,0,0x00818314,7,2,2,3,0,0,10,{ bonus bWeaponMatk,145; bonus bDex,4; bonus bMaxHP,500; },{},{}
-1629,Walking_Stick,Gentleman's Staff,4,20,,500,40,,1,1,0x00818314,7,2,2,4,50,1,10,{ bonus bWeaponMatk,125; bonus bDex,1; if (isequipped(5045)) { bonus bDex,2; bonus bInt,2; bonus bSPrecovRate,5; bonus bMatkRate,getrefine(); } },{},{}
-1630,Release_Of_Wish,Release of Wish,4,20,,500,30,,1,0,0x00810204,7,2,2,3,50,1,10,{ bonus bWeaponMatk,125; bonus bInt,3; bonus bHealPower,5; autobonus "{ bonus2 bSPRegenRate,100,2000; bonus2 bHPRegenRate,50,2000; }",10,10000,BF_MAGIC,"{ specialeffect2 EF_HEAL; }"; },{},{}
-1631,Holy_Stick,Holy Stick,4,20,,500,50,,1,1,0x00008100,7,2,2,4,70,1,10,{ bonus bWeaponMatk,140; bonus bAtkEle,Ele_Holy; bonus2 bCastrate,156,-25; bonus2 bCastrate,77,-25; bonus2 bCastrate,79,-25; },{},{}
-1632,BF_Staff1,Warlock's Magic Wand,4,20,,0,70,,1,0,0x00818314,7,2,2,3,80,1,10,{ bonus bWeaponMatk,125; bonus bInt,4; bonus bDex,3; bonus2 bIgnoreMdefRate,RC_DemiHuman,25; bonus3 bAddEff,Eff_Stun,500,ATF_SKILL; bonus bUnbreakableWeapon,0; },{},{}
-1633,BF_Staff2,Warlock's Battle Wand,4,20,,0,70,,1,0,0x00818314,7,2,2,3,80,1,10,{ bonus bWeaponMatk,125; bonus bInt,3; bonus bDex,3; bonus2 bMagicAddRace,RC_DemiHuman,15; bonus3 bAddEff,Eff_Stun,500,ATF_SKILL; bonus bUnbreakableWeapon,0; },{},{}
-1634,BF_Staff3,Strong Recovery Wand,4,20,,0,70,,1,0,0x00818314,7,2,2,3,80,1,10,{ bonus bWeaponMatk,125; bonus bHealPower,14; bonus2 bSPRegenRate,5,10000; bonus bUnbreakableWeapon,0; },{},{}
-1635,BF_Staff4,Speedy Recovery Wand,4,20,,0,70,,1,0,0x00818314,7,2,2,3,80,1,10,{ bonus bWeaponMatk,125; bonus bInt,3; bonus bDex,2; bonus bDelayRate,-15; bonus2 bSPRegenRate,5,10000; bonus bUnbreakableWeapon,0; },{},{}
-1636,Thorn_Staff,Thorn Staff of Darkness,4,20,,700,60,,1,0,0x00018314,2,2,2,4,75,1,10,{ bonus bWeaponMatk,160; bonus bAtkEle,Ele_Dark; bonus bInt,3; bonus bDex,3; bonus bIgnoreMdefRate,getrefine(); bonus bDelayRate,-(getrefine()*3/2); },{},{}
-1637,Eraser,Eraser,4,20,,500,80,,1,0,0x00018314,2,2,2,4,70,1,10,{ bonus bWeaponMatk,170; bonus bInt,3; bonus bDex,2; bonus bSPrecovRate,8; if( getrefine() > 9 ) bonus5 bAutoSpell,"NPC_WIDESOULDRAIN",3,5,BF_MAGIC,0; else bonus5 bAutoSpell,"NPC_WIDESOULDRAIN",1,5,BF_MAGIC,0; },{},{}
-1638,Healing_Staff_C,Staff Of Healing,4,20,,0,10,,1,0,0x00008110,7,2,2,3,1,0,10,{ bonus bWeaponMatk,125; bonus bAtkEle,Ele_Holy; bonus bHealPower,(getrefine()*3/2); },{},{}
-1639,N_Rod,Novice Rod,4,0,,0,15,,1,3,0x00818315,7,2,2,1,1,0,10,{ bonus bWeaponMatk,32; },{},{}
-1640,Krieger_Onehand_Staff1,Glorious Arc Wand,4,20,,0,70,,1,0,0x00818314,7,2,2,4,80,1,10,{ bonus bWeaponMatk,135; bonus2 bMagicAddRace,RC_DemiHuman,15; bonus2 bIgnoreMdefRate,RC_DemiHuman,25; bonus bUnbreakableWeapon,0; if(getrefine() > 5) bonus2 bIgnoreMdefRate,RC_DemiHuman,5; if(getrefine() > 8) { bonus bMatkRate,5; bonus bCastrate,-5; bonus bDelayRate,-5; } },{},{}
-1641,Krieger_Onehand_Staff2,Glorious Cure Wand,4,20,,0,70,,1,0,0x00818314,7,2,2,4,80,1,10,{ bonus bWeaponMatk,135; bonus bHealPower,14; bonus bDelayRate,-10; bonus bUnbreakableWeapon,0; if(getrefine() > 5) { bonus2 bIgnoreMdefRate,RC_DemiHuman,5; bonus bHealPower,5+(getrefine()-5)*2; } if(getrefine() > 8) bonus5 bAutoSpellOnSkill,"AL_HEAL","AL_HEAL",10,100,1; if(getrefine() > 9) { bonus bHealPower,10; } },{},{}
-1642,Staff_Of_Darkness,Staff Of Darkness,4,20,,0,100,,1,0,0x00818314,7,2,2,2,0,0,10,{ bonus bWeaponMatk,120; bonus bInt,2; bonus bCastrate,-5; },{},{}
-1643,Dead_Tree_Cane,Dead Tree Cane,4,20,,100,100,,1,0,0x00818314,7,2,2,4,70,1,10,{ bonus bWeaponMatk,155; bonus bInt,4; if (getrefine()>5) { bonus bInt,getrefine()-5; bonus bMaxHP,-200; bonus bMaxSP,-100; } },{},{}
-1644,Piercing_Staff_M,Staff of Piercing,4,20,,500,80,,1,0,0x00018314,2,2,2,3,70,1,10,{ bonus bWeaponMatk,145; bonus bInt,4; bonus bIgnoreMdefRate,10+getrefine(); },{},{}
-1645,Lich_Bone_Wand_M,Lich's Bone Wand,4,20,,800,60,,1,2,0x00018314,2,2,2,3,70,1,10,{ bonus bWeaponMatk,170; bonus bAtkEle,Ele_Undead; bonus bInt,1; bonus bDex,1; bonus3 bAutoSpellWhenHit,"NPC_WIDECURSE",5,10+getrefine(); if(getrefine()>=9){ bonus bMatkRate,3; bonus bMaxSP,300; } },{},{}
-1646,La'cryma_Stick,La'cryma Stick,4,20,,500,30,,1,2,0x00010204,2,2,2,3,50,1,10,{ bonus bWeaponMatk,180; bonus bInt,4; bonus bMdef,1; bonus2 bSkillAtk,"WZ_STORMGUST",getrefine(); if (getrefine() > 9) bonus2 bCastRate,"WZ_STORMGUST",-8; },{},{}
-1647,Croce_Staff,Croce Staff,4,20,,500,30,,1,1,0x00008110,2,2,2,3,50,1,10,{ bonus bWeaponMatk,175; bonus bAtkEle,Ele_Holy; bonus bInt,4; bonus4 bAutoSpellOnSkill,"AL_HEAL","AL_BLESSING",getskilllv("AL_BLESSING")>1?getskilllv("AL_BLESSING"):1,20; },{},{}
-1648,Staff_Of_Bordeaux,Staff Of Bordeaux,4,20,,500,30,,1,0,0x00010204,2,2,2,4,50,1,10,{ bonus bWeaponMatk,170; bonus bInt,2; bonus bDex,1; if(getskilllv("SA_DRAGONOLOGY") == 5) { bonus bUseSPrate,-15; bonus bInt,3; } },{},{}
-1649,Rafini_Staff,Rafini Staff,4,20,,500,30,,1,0,0x00818315,7,2,2,3,100,1,10,{ bonus bWeaponMatk,180; bonus bFixedCastRate,-getrefine(); },{},{}
-1650,P_Staff1,Eden Staff I,4,0,,0,60,,1,0,0x00818314,7,2,2,2,26,0,10,{ bonus bWeaponMatk,125; bonus bInt,2; },{},{}
-1651,P_Staff2,Eden Staff II,4,0,,0,60,,1,0,0x00818314,7,2,2,2,40,0,10,{ bonus bWeaponMatk,150; bonus bInt,3; },{},{}
+1601,Rod,Rod,4,50,,400,15,,1,3,0x00818315,7,2,2,1,1,1,10,{ bonus bMatkRate,15; },{},{}
+1602,Rod_,Rod,4,50,,400,15,,1,4,0x00818315,7,2,2,1,1,1,10,{ bonus bMatkRate,15; },{},{}
+1603,Rod__,Rod,4,50,,400,15,,1,0,0x00818315,7,2,2,1,1,1,10,{ bonus bMatkRate,15; },{},{}
+1604,Wand,Wand,4,2500,,400,25,,1,2,0x00818315,7,2,2,2,12,1,10,{ bonus bInt,1; bonus bMatkRate,15; },{},{}
+1605,Wand_,Wand,4,2500,,400,25,,1,3,0x00818315,7,2,2,2,12,1,10,{ bonus bInt,1; bonus bMatkRate,15; },{},{}
+1606,Wand__,Wand,4,2500,,400,25,,1,0,0x00818315,7,2,2,2,12,1,10,{ bonus bInt,1; bonus bMatkRate,15; },{},{}
+1607,Staff,Staff,4,9500,,400,40,,1,2,0x00818314,7,2,2,2,12,1,10,{ bonus bInt,2; bonus bMatkRate,15; },{},{}
+1608,Staff_,Staff,4,9500,,400,40,,1,3,0x00818314,7,2,2,2,12,1,10,{ bonus bInt,2; bonus bMatkRate,15; },{},{}
+1609,Staff__,Staff,4,9500,,400,40,,1,0,0x00818314,7,2,2,2,12,1,10,{ bonus bInt,2; bonus bMatkRate,15; },{},{}
+1610,Arc_Wand,Arc Wand,4,45000,,400,60,,1,1,0x00818314,7,2,2,3,24,1,10,{ bonus bInt,3; bonus bMatkRate,15; },{},{}
+1611,Arc_Wand_,Arc Wand,4,45000,,400,60,,1,2,0x00818314,7,2,2,3,24,1,10,{ bonus bInt,3; bonus bMatkRate,15; },{},{}
+1612,Arc_Wand__,Arc Wand,4,45000,,400,60,,1,0,0x00818314,7,2,2,3,24,1,10,{ bonus bInt,3; bonus bMatkRate,15; },{},{}
+1613,Mighty_Staff,Mighty Staff,4,20,,700,130,,1,0,0x00818314,7,2,2,3,24,1,10,{ bonus bStr,10; bonus bMatkRate,15; bonus bSPDrainValue,-2; },{},{}
+1614,Blessed_Wand,Wand of Occult,4,20,,700,75,,1,0,0x00818314,7,2,2,3,24,1,10,{ bonus bInt,3; bonus bMatkRate,15; },{},{}
+1615,Bone_Wand,Evil Bone Wand,4,20,,700,40,,1,0,0x00818314,7,2,2,3,24,1,10,{ bonus bInt,4; bonus bAtkEle,Ele_Undead; bonus bMatkRate,15; },{},{}
+1616,Staff_Of_Wing,Wing Staff,4,20,,500,60,,1,0,0x00810204,7,2,2,4,40,1,10,{ bonus bMatkRate,15; bonus bCastrate,-5; },{},{}
+1617,Survival_Rod,Survivor's Rod,4,85000,,1000,50,,1,0,0x00818314,7,2,2,3,24,1,10,{ bonus bDex,2; bonus bMatkRate,15; bonus bMaxHP,300; },{},{}
+1618,Survival_Rod_,Survivor's Rod,4,85000,,1000,50,,1,1,0x00818314,7,2,2,3,24,1,10,{ bonus bDex,3; bonus bMatkRate,15; bonus bMaxHP,400; },{},{}
+1619,Survival_Rod2,Survivor's Rod,4,85000,,1000,50,,1,0,0x00818314,7,2,2,3,24,1,10,{ bonus bInt,2; bonus bMatkRate,15; bonus bMaxHP,300; },{},{}
+1620,Survival_Rod2_,Survivor's Rod,4,85000,,1000,50,,1,1,0x00818314,7,2,2,3,24,1,10,{ bonus bInt,3; bonus bMatkRate,15; bonus bMaxHP,400; },{},{}
+1621,Hypnotist's_Staff,Hypnotist's Staff,4,43000,,500,70,,1,1,0x00000001,7,2,2,3,30,1,10,{ bonus bInt,1; bonus bMatkRate,25; },{},{}
+1622,Hypnotist's_Staff_,Hypnotist's Staff,4,20,,500,70,,1,2,0x00000001,7,2,2,3,30,1,10,{ bonus bInt,1; bonus bMatkRate,25; },{},{}
+1623,Mighty_Staff_C,Mighty Staff,4,1,,0,165,,1,0,0x00818314,7,2,2,3,1,0,10,{ bonus bStr,10; bonus bInt,4; bonus bMatkRate,20; bonus bSPDrainValue,-1; },{},{}
+1624,Lich_Bone_Wand,Lich's Bone Wand,4,20,,800,60,,1,2,0x00018314,2,2,2,3,70,1,10,{ bonus bInt,1; bonus bDex,1; bonus bAtkEle,Ele_Undead; bonus bMatkRate,20; bonus3 bAutoSpellWhenHit,"NPC_WIDECURSE",5,10+getrefine(); if(getrefine()>=9){ bonus bMatkRate,3; bonus bMaxSP,300; } },{},{}
+1625,Healing_Staff,Healing Staff,4,20,,400,10,,1,0,0x00008110,7,2,2,3,55,1,10,{ bonus bAtkEle,Ele_Holy; bonus bMatkRate,15; bonus bHealPower,(getrefine()*3/2); },{},{}
+1626,Piercing_Staff,Piercing Staff,4,20,,500,80,,1,0,0x00018314,2,2,2,3,70,1,10,{ bonus bInt,4; bonus bMatkRate,15; bonus bIgnoreMdefRate,10+getrefine(); },{},{}
+1627,Staffy,Staffy,4,20,,0,40,,1,0,0x00818314,7,2,2,1,0,0,10,{ bonus bMatkRate,15; bonus2 bAddRace,RC_Boss,50; bonus2 bAddRace,RC_NonBoss,50; },{},{}
+1628,Survival_Rod_C,Refined Survivor's Rod,4,1,,0,71,,1,0,0x00818314,7,2,2,3,0,0,10,{ bonus bDex,4; bonus bMatkRate,20; bonus bMaxHP,500; },{},{}
+1629,Walking_Stick,Gentleman's Staff,4,20,,500,40,,1,1,0x00818314,7,2,2,4,50,1,10,{ bonus bMatkRate,15; bonus bDex,1; if (isequipped(5045)) { bonus bDex,2; bonus bInt,2; bonus bSPrecovRate,5; bonus bMatkRate,getrefine(); } },{},{}
+1630,Release_Of_Wish,Release of Wish,4,20,,500,30,,1,0,0x00810204,7,2,2,3,50,1,10,{ bonus bMatkRate,15; bonus bInt,3; bonus bHealPower,5; autobonus "{ bonus2 bSPRegenRate,100,2000; bonus2 bHPRegenRate,50,2000; }",10,10000,BF_MAGIC,"{ specialeffect2 EF_HEAL; }"; },{},{}
+1631,Holy_Stick,Holy Stick,4,20,,500,50,,1,1,0x00008100,7,2,2,4,70,1,10,{ bonus bAtkEle,Ele_Holy; bonus bMatkRate,15; bonus2 bCastrate,156,-25; bonus2 bCastrate,77,-25; bonus2 bCastrate,79,-25; },{},{}
+1632,BF_Staff1,Warlock's Magic Wand,4,20,,0,70,,1,0,0x00818314,7,2,2,3,80,1,10,{ bonus bInt,4; bonus bDex,3; bonus bMatkRate,15; bonus2 bIgnoreMdefRate,RC_DemiHuman,25; bonus3 bAddEff,Eff_Stun,500,ATF_SKILL; bonus bUnbreakableWeapon,0; },{},{}
+1633,BF_Staff2,Warlock's Battle Wand,4,20,,0,70,,1,0,0x00818314,7,2,2,3,80,1,10,{ bonus bInt,3; bonus bDex,3; bonus bMatkRate,15; bonus2 bMagicAddRace,RC_DemiHuman,15; bonus3 bAddEff,Eff_Stun,500,ATF_SKILL; bonus bUnbreakableWeapon,0; },{},{}
+1634,BF_Staff3,Strong Recovery Wand,4,20,,0,70,,1,0,0x00818314,7,2,2,3,80,1,10,{ bonus bMatkRate,15; bonus bHealPower,14; bonus2 bSPRegenRate,5,10000; bonus bUnbreakableWeapon,0; },{},{}
+1635,BF_Staff4,Speedy Recovery Wand,4,20,,0,70,,1,0,0x00818314,7,2,2,3,80,1,10,{ bonus bInt,3; bonus bDex,2; bonus bMatkRate,15; bonus bDelayRate,-15; bonus2 bSPRegenRate,5,10000; bonus bUnbreakableWeapon,0; },{},{}
+1636,Thorn_Staff,Thorn Staff of Darkness,4,20,,700,60,,1,0,0x00018314,2,2,2,4,75,1,10,{ bonus bInt,3; bonus bDex,3; bonus bMatkRate,20; bonus bIgnoreMdefRate,getrefine(); bonus bDelayRate,-(getrefine()*3/2); },{},{}
+1637,Eraser,Eraser,4,20,,500,80,,1,0,0x00018314,2,2,2,4,70,1,10,{ bonus bMatkRate,20; bonus bInt,3; bonus bDex,2; bonus bSPrecovRate,8; if( getrefine() > 9 ) bonus5 bAutoSpell,"NPC_WIDESOULDRAIN",3,5,BF_MAGIC,0; else bonus5 bAutoSpell,"NPC_WIDESOULDRAIN",1,5,BF_MAGIC,0; },{},{}
+1638,Healing_Staff_C,Staff Of Healing,4,20,,0,10,,1,0,0x00008110,7,2,2,3,1,0,10,{ bonus bAtkEle,Ele_Holy; bonus bMatkRate,15; bonus bHealPower,(getrefine()*3/2); },{},{}
+1639,N_Rod,Novice Rod,4,0,,0,15,,1,3,0x00818315,7,2,2,1,1,0,10,{ bonus bMatkRate,16; },{},{}
+1640,Krieger_Onehand_Staff1,Glorious Arc Wand,4,20,,0,70,,1,0,0x00818314,7,2,2,4,80,1,10,{ bonus2 bMagicAddRace,RC_DemiHuman,15; bonus2 bIgnoreMdefRate,RC_DemiHuman,25; bonus bUnbreakableWeapon,0; if(getrefine() > 5) bonus2 bIgnoreMdefRate,RC_DemiHuman,5; if(getrefine() > 8) { bonus bMatkRate,5; bonus bCastrate,-5; bonus bDelayRate,-5; } },{},{}
+1641,Krieger_Onehand_Staff2,Glorious Cure Wand,4,20,,0,70,,1,0,0x00818314,7,2,2,4,80,1,10,{ bonus bHealPower,14; bonus bDelayRate,-10; bonus bUnbreakableWeapon,0; if(getrefine() > 5) { bonus2 bIgnoreMdefRate,RC_DemiHuman,5; bonus bHealPower,5+(getrefine()-5)*2; } if(getrefine() > 8) bonus5 bAutoSpellOnSkill,"AL_HEAL","AL_HEAL",10,100,1; if(getrefine() > 9) { bonus bHealPower,10; } },{},{}
+1642,Staff_Of_Darkness,Staff Of Darkness,4,20,,0,100,,1,0,0x00818314,7,2,2,2,0,0,10,{ bonus bCastrate,-5; bonus bMatkRate,15; bonus bInt,2; },{},{}
+1643,Dead_Tree_Cane,Dead Tree Cane,4,20,,100,100,,1,0,0x00818314,7,2,2,4,70,1,10,{ bonus bMatk,15; bonus bInt,4; if (getrefine()>5) { bonus bInt,getrefine()-5; bonus bMaxHP,-200; bonus bMaxSP,-100; } },{},{}
+1644,Piercing_Staff_M,Staff of Piercing,4,20,,500,80,,1,0,0x00018314,2,2,2,3,70,1,10,{ bonus bInt,4; bonus bMatkRate,15; bonus bIgnoreMdefRate,10+getrefine(); },{},{}
+1645,Lich_Bone_Wand_M,Lich's Bone Wand,4,20,,800,60,,1,2,0x00018314,2,2,2,3,70,1,10,{ bonus bInt,1; bonus bDex,1; bonus bAtkEle,Ele_Undead; bonus bMatkRate,20; bonus3 bAutoSpellWhenHit,"NPC_WIDECURSE",5,10+getrefine(); if(getrefine()>=9){ bonus bMatkRate,3; bonus bMaxSP,300; } },{},{}
+1646,La'cryma_Stick,La'cryma Stick,4,20,,500,30,,1,2,0x00010204,2,2,2,3,50,1,10,{ bonus bInt,4; bonus bMatkRate,15; bonus bMdef,1; bonus2 bSkillAtk,"WZ_STORMGUST",getrefine(); if (getrefine() > 9) bonus2 bCastRate,"WZ_STORMGUST",-8; },{},{}
+1647,Croce_Staff,Croce Staff,4,20,,500,30,,1,1,0x00008110,2,2,2,3,50,1,10,{ bonus bAtkEle,Ele_Holy; bonus bMatkRate,15; bonus bInt,4; bonus4 bAutoSpellOnSkill,"AL_HEAL","AL_BLESSING",getskilllv("AL_BLESSING")>1?getskilllv("AL_BLESSING"):1,20; },{},{}
+1648,Staff_Of_Bordeaux,Staff Of Bordeaux,4,20,,500,30,,1,0,0x00010204,2,2,2,4,50,1,10,{ bonus bMatkRate,15; bonus bInt,2; bonus bDex,1; if(getskilllv("SA_DRAGONOLOGY") == 5) { bonus bUseSPrate,-15; bonus bInt,3; } },{},{}
+1649,Rafini_Staff,Rafini Staff,4,20,,500,30,,1,0,0x00818315,7,2,2,3,100,1,10,{ /* bonus bMAtk,180; */ /* bonus bFixedCastRateMilli,-(getrefine()*10); */ },{},{}
+1650,P_Staff1,Eden Staff I,4,0,,0,60,,1,0,0x00818314,7,2,2,2,26,0,10,{ /* bonus bMAtk,125; */ bonus bInt,2; },{},{}
+1651,P_Staff2,Eden Staff II,4,0,,0,60,,1,0,0x00818314,7,2,2,2,40,0,10,{ /* bonus bMAtk,150; */ bonus bInt,3; },{},{}
1652,Tourist_Staff,Tourist Staff,4,0,,500,35,,1,0,0x00818315,7,2,2,1,1,0,10,{ bonus bInt,2; bonus bAgi,1; },{},{}
-1653,Staff_Of_Healing_C,Staff of Healing,4,20,,0,10,,1,0,0x00008110,7,2,2,3,1,0,10,{ bonus bWeaponMatk,100; bonus bAtkEle,Ele_Holy; },{},{}
-1654,Mental_Stick,Mental Stick,4,20,,500,40,,1,1,0x00818315,7,2,2,3,102,1,10,{ bonus bWeaponMatk,170; if (getrefine() > 5) { /* bonus bSkillAtk,"SO_PSYCHIC_WAVE",(getrefine()-5)*2; */ bonus bMaxHPRate,-(getrefine()-5)*2; } /* bonus2 bVariableCast,"SO_PSYCHIC_WAVE",-3000; bonus2 bUseSP,"SO_PSYCHIC_WAVE",-60; */ },{},{ itemheal 0,-100; }
+1653,Staff_Of_Healing_C,Staff of Healing,4,20,,0,10,,1,0,0x00008110,7,2,2,3,1,0,10,{ /* bonus bMAtk,100; */ bonus bAtkEle,Ele_Holy; },{},{}
+1654,Mental_Stick,Mental Stick,4,20,,500,40,,1,1,0x00818315,7,2,2,3,102,1,10,{ /* bonus bMAtk,170; */ if (getrefine() > 5) { /* bonus bSkillAtk,"SO_PSYCHIC_WAVE",(getrefine()-5)*2; */ bonus bMaxHPRate,-(getrefine()-5)*2; } /* bonus2 bVariableCastTime,"SO_PSYCHIC_WAVE",-3000; bonus2 bUseSPAmount,"SO_PSYCHIC_WAVE",-60; */ },{},{ itemheal 0,-100; }
// Bows
1701,Bow,Bow,4,1000,,500,15,,5,3,0x000A0848,7,2,34,1,4,1,11,{},{},{}
1702,Bow_,Bow,4,1000,,500,15,,5,4,0x000A0848,7,2,34,1,4,1,11,{},{},{}
@@ -1014,7 +1014,7 @@
1827,Krieger_Knuckle2,Glorious Fist,4,20,,0,30,,1,0,0x00008100,7,2,2,4,80,1,12,{ bonus2 bAddRace,RC_DemiHuman,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus bUnbreakableWeapon,0; if(getrefine() > 5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; } if(getrefine() > 8) { bonus2 bCastrate,271,-100; bonus4 bautospellonskill,"MO_EXPLOSIONSPIRITS","CH_SOULCOLLECT",1,1000; } },{},{}
1828,Monk_Knuckle,Monk Knuckle,4,20,,0,150,,1,0,0x00008100,7,2,2,4,0,0,12,{ bonus bInt,2; bonus2 bSkillAtk,"MO_FINGEROFFENSIVE",25; },{},{}
1829,Fist_C,Fist,4,0,,0,150,,1,0,0x00008100,7,2,2,3,1,0,12,{ bonus2 bAddSize,0,40; bonus2 bAddSize,1,40; bonus2 bAddSize,2,40; },{},{}
-1830,Sura_Rampage,Sura Rampage,4,20,,500,142,,1,1,0x00008100,7,2,2,3,102,1,12,{ /* bonus2 bSkillAtk,"SR_EARTHSHAKER",20; bonus2 bSkillAtk,"SR_SKYNETBLOW",20; */ bonus bUseSPrate,5; if (getrefine()>5) bonus bUseSPrate,-(getrefine()-5); },{},{}
+1830,Sura_Rampage,Sura Rampage,4,20,,500,142,,1,1,0x00008100,7,2,2,3,102,1,12,{},{},{}
// Instruments
1901,Violin,Violin,4,4000,,700,50,,1,3,0x00080000,7,1,2,1,2,1,13,{},{},{}
1902,Violin_,Violin,4,4000,,700,50,,1,4,0x00080000,7,1,2,1,2,1,13,{},{},{}
@@ -1045,7 +1045,7 @@
1927,Krieger_Instrument1,Glorious Guitar,4,20,,0,50,,1,0,0x00080000,7,1,2,4,80,1,13,{ bonus2 bAddRace,RC_DemiHuman,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus bUnbreakableWeapon,0; if(getrefine() > 5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; } if(getrefine() > 8) bonus4 bAutoSpellOnSkill,"CG_ARROWVULCAN","CG_TAROTCARD",5,100; },{},{}
1928,Berserk_Guitar_I,Spirited Guitar,4,0,,0,40,,1,0,0x00080000,2,1,2,4,0,0,13,{ bonus bAspdRate,100; bonus bHPrecovRate,-100; bonus2 bHPLossRate,50,5000; bonus bDex,-readparam(bDex); },{},{}
1929,Guitar_C,Guitar,4,0,,0,177,,1,0,0x00080000,7,1,2,3,1,0,13,{ bonus2 bAddSize,0,40; bonus2 bAddSize,1,40; bonus2 bAddSize,2,40; },{},{}
-1930,Green_Whistle,Green Whistle,4,20,,800,170,,1,1,0x00080000,7,1,2,3,102,1,13,{ bonus bWeaponMatk,50; },{},{}
+1930,Green_Whistle,Green Whistle,4,20,,800,170,,1,1,0x00080000,7,1,2,3,102,1,13,{ /* bonus bMAtk,50; */ },{},{}
// Whips
1950,Rope,Rope,4,2500,,400,45,,2,3,0x00080000,7,0,2,1,3,1,14,{},{},{}
1951,Rope_,Rope,4,2500,,400,45,,2,4,0x00080000,7,0,2,1,3,1,14,{},{},{}
@@ -1081,62 +1081,62 @@
1981,Krieger_Whip1,Glorious Lariat,4,20,,0,50,,2,0,0x00080000,7,0,2,4,80,1,14,{ bonus2 bAddRace,RC_DemiHuman,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus bUnbreakableWeapon,0; if(getrefine() > 5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; } if(getrefine() > 8) bonus4 bAutoSpellOnSkill,"CG_ARROWVULCAN","CG_TAROTCARD",5,100; },{},{}
1982,Phenomena_Whip,Phenomena Whip,4,20,,0,160,,2,0,0x00080000,7,0,2,4,0,0,14,{ bonus bDex,2; bonus2 bSkillAtk,"DC_THROWARROW",25; },{},{}
1983,Rante_C,Rante Whip,4,0,,0,170,,2,0,0x00080000,7,0,2,3,1,0,14,{ bonus2 bAddSize,0,40; bonus2 bAddSize,1,40; bonus2 bAddSize,2,40; },{},{}
-1984,Stem_Whip,Stem Whip,4,20,,800,170,,1,1,0x00080000,7,0,2,3,102,1,14,{ bonus bWeaponMatk,50; },{},{}
-1985,Rosebine,Rosebine,4,20,,1000,100,,1,0,0x00080000,7,0,2,4,110,1,14,{ bonus bWeaponMatk,130; bonus bInt,2; },{},{}
+1984,Stem_Whip,Stem Whip,4,20,,800,170,,1,1,0x00080000,7,0,2,3,102,1,14,{ /* bonus bMAtk,50; */ },{},{}
+1985,Rosebine,Rosebine,4,20,,1000,100,,1,0,0x00080000,7,0,2,4,110,1,14,{ /* bonus bMAtk,130; */ bonus bInt,2; },{},{}
// Additional 2-Handed Staffs
-2000,Destruction_Rod,Staff of Destruction,4,20,,2500,130,,1,1,0x00000200,2,2,34,4,80,1,23,{ bonus bWeaponMatk,280; bonus bMatkRate,getrefine()/2; bonus bInt,3; bonus bAgi,10; bonus bUseSPrate,(getrefine()*2); bonus3 bAutoSpellWhenHit,"WZ_JUPITEL",5,(getrefine()*20); bonus2 bCastrate,366,-50; },{},{}
-2001,Divine_Cross,Divine Cross,4,20,,1500,120,,1,0,0x00008100,7,2,34,4,70,1,23,{ bonus bWeaponMatk,210; bonus bAtkEle,Ele_Holy; bonus bMatkRate,15; bonus bDex,4; bonus2 bSubRace,RC_Demon,15; bonus2 bSubRace,RC_Undead,15; if (isequipped(2677) || isequipped(2711)) { bonus bMatkRate,10; bonus bDex,2; bonus2 bSubRace,RC_Demon,10; bonus2 bSubRace,RC_Undead,10; }; },{},{}
-2002,Krieger_Twohand_Staff1,Glorious Destruction Staff,4,20,,0,70,,1,0,0x00018314,7,2,34,4,80,1,23,{ bonus bWeaponMatk,210; bonus bMatkRate,getrefine(); bonus2 bMagicAddRace,RC_DemiHuman,15; bonus2 bIgnoreMdefRate,RC_DemiHuman,25; bonus bUnbreakableWeapon,0; if(getrefine() > 5) { bonus2 bMagicAddRace,RC_DemiHuman,(getrefine()-5)*2; bonus2 bIgnoreMdefRate,RC_DemiHuman,(getrefine()-5)*2; } if(getrefine() > 8) { bonus5 bAutoSpellOnSkill,"WZ_STORMGUST","MG_SAFETYWALL",10,200,1; bonus5 bAutoSpellOnSkill,"WZ_METEOR","MG_SAFETYWALL",10,200,1; bonus5 bAutoSpellOnSkill,"WZ_VERMILION","MG_SAFETYWALL",10,200,1; } },{},{}
-2003,Destruction_Rod_M,Staff of Destruction,4,20,,2500,130,,1,1,0x00000200,2,2,34,4,80,1,23,{ bonus bWeaponMatk,280; bonus bMatkRate,getrefine()/2; bonus bInt,3; bonus bAgi,10; bonus bUseSPrate,(getrefine()*2); bonus3 bAutoSpellWhenHit,"WZ_JUPITEL",5,(getrefine()*20); bonus2 bCastrate,366,-50; },{},{}
-2004,Kronos,Kronos,4,20,,1000,30,,1,0,0x00010204,2,2,34,4,50,1,23,{ bonus bWeaponMatk,240; bonus bInt,3+(getrefine()/2); bonus bMaxHP,300+(50*getrefine()/2); autobonus "{ bonus bMatkRate,12; bonus buseSPRate,20; }",1,5000,BF_MAGIC,"{ specialeffect2 EF_ENHANCE; }"; },{},{}
-2005,Dea_Staff,Dea Staff,4,20,,1000,30,,1,1,0x00008110,2,2,34,3,50,1,23,{ bonus bWeaponMatk,220; bonus bAtkEle,Ele_Holy; bonus bMatkRate,getrefine()/2; bonus bInt,6; bonus bVit,2; autobonus3 "{ }",20,1000,"AL_HEAL","{ specialeffect2 EF_MAGICALATTHIT; heal 0,200; }"; },{},{}
-2006,G_Staff_Of_Light,Staff Of Light,4,20,,1900,80,,1,0,0x00810204,7,2,34,4,60,1,23,{ bonus bWeaponMatk,150; bonus bAtkEle,Ele_Holy; bonus bInt,6; },{},{}
-2007,Golden_Rod_Staff,Golden Rod Staff,4,20,,900,30,,1,2,0x00000200,7,2,34,4,100,1,23,{ bonus bWeaponMatk,230; bonus bAtkEle,Ele_Wind; bonus bInt,3; },{},{}
-2008,Aqua_Staff,Aqua Staff,4,20,,900,30,,1,2,0x00000200,7,2,34,4,100,1,23,{ bonus bWeaponMatk,230; bonus bAtkEle,Ele_Water; bonus bInt,3; },{},{}
-2009,Crimson_Staff,Crimson Staff,4,20,,900,30,,1,2,0x00000200,7,2,34,4,100,1,23,{ bonus bWeaponMatk,230; bonus bAtkEle,Ele_Fire; bonus bInt,3; },{},{}
-2010,Forest_Staff,Forest Staff,4,20,,900,30,,1,2,0x00000200,7,2,34,4,100,1,23,{ bonus bWeaponMatk,230; bonus bAtkEle,Ele_Earth; bonus bInt,3; },{},{}
+2000,Destruction_Rod,Staff of Destruction,4,20,,2500,130,,1,1,0x00000200,2,2,34,4,80,1,23,{ bonus bMatkRate,25+getrefine()/2; bonus bInt,3; bonus bAgi,10; bonus bUseSPrate,(getrefine()*2); bonus3 bAutoSpellWhenHit,"WZ_JUPITEL",5,(getrefine()*20); bonus2 bCastrate,366,-50; },{},{}
+2001,Divine_Cross,Divine Cross,4,20,,1500,120,,1,0,0x00008100,7,2,34,4,70,1,23,{ bonus bAtkEle,Ele_Holy; bonus bMatkRate,15; bonus bDex,4; bonus2 bSubRace,RC_Demon,15; bonus2 bSubRace,RC_Undead,15; if (isequipped(2677) || isequipped(2711)) { bonus bMatkRate,10; bonus bDex,2; bonus2 bSubRace,RC_Demon,10; bonus2 bSubRace,RC_Undead,10; }; },{},{}
+2002,Krieger_Twohand_Staff1,Glorious Destruction Staff,4,20,,0,70,,1,0,0x00018314,7,2,34,4,80,1,23,{ bonus bMatkRate,getrefine(); bonus2 bMagicAddRace,RC_DemiHuman,15; bonus2 bIgnoreMdefRate,RC_DemiHuman,25; bonus bUnbreakableWeapon,0; if(getrefine() > 5) { bonus2 bMagicAddRace,RC_DemiHuman,(getrefine()-5)*2; bonus2 bIgnoreMdefRate,RC_DemiHuman,(getrefine()-5)*2; } if(getrefine() > 8) { bonus5 bAutoSpellOnSkill,"WZ_STORMGUST","MG_SAFETYWALL",10,200,1; bonus5 bAutoSpellOnSkill,"WZ_METEOR","MG_SAFETYWALL",10,200,1; bonus5 bAutoSpellOnSkill,"WZ_VERMILION","MG_SAFETYWALL",10,200,1; } },{},{}
+2003,Destruction_Rod_M,Staff of Destruction,4,20,,2500,130,,1,1,0x00000200,2,2,34,4,80,1,23,{ bonus bMatkRate,25+getrefine()/2; bonus bInt,3; bonus bAgi,10; bonus bUseSPrate,(getrefine()*2); bonus3 bAutoSpellWhenHit,"WZ_JUPITEL",5,(getrefine()*20); bonus2 bCastrate,366,-50; },{},{}
+2004,Kronos,Kronos,4,20,,1000,30,,1,0,0x00010204,2,2,34,4,50,1,23,{ bonus bMatkRate,20; bonus bInt,3+(getrefine()/2); bonus bMaxHP,300+(50*getrefine()/2); autobonus "{ bonus bMatkRate,12; bonus buseSPRate,20; }",1,5000,BF_MAGIC,"{ specialeffect2 EF_ENHANCE; }"; },{},{}
+2005,Dea_Staff,Dea Staff,4,20,,1000,30,,1,1,0x00008110,2,2,34,3,50,1,23,{ bonus bAtkEle,Ele_Holy; bonus bMatkRate,15+getrefine()/2; bonus bInt,6; bonus bVit,2; autobonus3 "{ }",20,1000,"AL_HEAL","{ specialeffect2 EF_MAGICALATTHIT; heal 0,200; }"; },{},{}
+2006,G_Staff_Of_Light,Staff Of Light,4,20,,1900,80,,1,0,0x00810204,7,2,34,4,60,1,23,{ /* bonus bMAtk,150; */ bonus bAtkEle,Ele_Holy; bonus bInt,6; },{},{}
+2007,Golden_Rod_Staff,Golden Rod Staff,4,20,,900,30,,1,2,0x00000200,7,2,34,4,100,1,23,{ /* bonus bMAtk,230; */ bonus bAtkEle,Ele_Wind; bonus bInt,3; },{},{}
+2008,Aqua_Staff,Aqua Staff,4,20,,900,30,,1,2,0x00000200,7,2,34,4,100,1,23,{ /* bonus bMAtk,230; */ bonus bAtkEle,Ele_Water; bonus bInt,3; },{},{}
+2009,Crimson_Staff,Crimson Staff,4,20,,900,30,,1,2,0x00000200,7,2,34,4,100,1,23,{ /* bonus bMAtk,230; */ bonus bAtkEle,Ele_Fire; bonus bInt,3; },{},{}
+2010,Forest_Staff,Forest Staff,4,20,,900,30,,1,2,0x00000200,7,2,34,4,100,1,23,{ /* bonus bMAtk,230; */ bonus bAtkEle,Ele_Earth; bonus bInt,3; },{},{}
// Shields
//===================================================================
-2101,Guard,Guard,5,500,,300,,20,,0,0xFFFFFFFF,7,2,32,,0,1,1,{},{},{}
-2102,Guard_,Guard,5,500,,300,,20,,1,0xFFFFFFFF,7,2,32,,0,1,1,{},{},{}
-2103,Buckler,Buckler,5,14000,,600,,40,,0,0x000ED5F2,7,2,32,,0,1,2,{},{},{}
-2104,Buckler_,Buckler,5,14000,,600,,40,,1,0x000ED5F2,7,2,32,,0,1,2,{},{},{}
-2105,Shield,Shield,5,56000,,1300,,60,,0,0x00004082,7,2,32,,0,1,3,{},{},{}
-2106,Shield_,Shield,5,56000,,1300,,60,,1,0x00004082,7,2,32,,0,1,3,{},{},{}
-2107,Mirror_Shield,Mirror Shield,5,60000,,1000,,45,,0,0x00404082,7,2,32,,0,1,4,{ bonus bMdef,5; },{},{}
-2108,Mirror_Shield_,Mirror Shield,5,60000,,1000,,45,,1,0x00404082,7,2,32,,0,1,4,{ bonus bMdef,5; },{},{}
-2109,Memorize_Book,Memory Book,5,20,,1000,,25,,0,0x00810204,7,2,32,,0,1,5,{ bonus bInt,1; bonus bMdef,2; if (isequipped(2717,2239)) { bonus bHPrecovRate,15; bonus bSPrecovRate,15; bonus bMatkRate,7; }; },{},{}
-2110,Holy_Guard,Holy Guard,5,85000,,1400,,110,,0,0x00004000,7,2,32,,68,0,4,{ bonus bVit,2; bonus bMdef,2; },{},{}
-2111,Herald_Of_GOD,Sacred Mission,5,128000,,1600,,120,,0,0x00004000,7,2,32,,83,1,4,{ bonus bInt,2; bonus bVit,3; bonus bMdef,3; bonus bUnbreakableShield,0; },{},{}
-2112,Novice_Guard,Novice Guard,5,1,,1,,20,,0,0x00000001,7,2,32,,0,0,1,{},{},{}
-2113,Novice_Shield,Novice Shield,5,5000,,1000,,20,,1,0x00000001,7,2,32,,40,1,3,{ bonus2 bSubEle,Ele_Water,20; bonus2 bSubEle,Ele_Earth,20; bonus2 bSubEle,Ele_Fire,20; bonus2 bSubEle,Ele_Wind,20; bonus2 bSubEle,Ele_Poison,20; bonus2 bSubEle,Ele_Ghost,20; bonus2 bSubEle,Ele_Undead,20; },{},{}
-2114,Stone_Buckler,Stone Buckler,5,30000,,1500,,45,,1,0xFFFFFFFE,7,2,32,,65,1,2,{ bonus2 bSubSize,2,5; if (isequipped(2353,5122)) { bonus bStr,2; bonus bDef,5; bonus bMdef,5; if(BaseClass == Job_Swordman) bonus bDef,6; } },{},{}
-2115,Valkyrja's_Shield,Valkyrja's Shield,5,30000,,500,,80,,1,0xFFFFFFFE,7,2,32,,65,1,4,{ bonus2 bSubEle,Ele_Water,20; bonus2 bSubEle,Ele_Fire,20; bonus2 bSubEle,Ele_Dark,20; bonus2 bSubEle,Ele_Undead,20; bonus bMdef,5; if(isequipped(2353,5124)) { bonus bDef,2-getrefine()-getequiprefinerycnt(EQI_HEAD_TOP); bonus bMdef,5+getrefine()+getequiprefinerycnt(EQI_HEAD_TOP); } },{},{}
-2116,Angel's_Safeguard,Angelic Guard,5,10000,,400,,30,,1,0x00000001,7,2,32,,20,1,1,{ bonus2 bSubRace,RC_Demon,5; },{},{}
-2117,Arm_Guard,Arm Guard,5,10000,,150,,50,,0,0x02000000,7,2,32,,20,1,1,{},{},{}
-2118,Arm_Guard_,Arm Guard,5,10000,,150,,50,,1,0x02000000,7,2,32,,20,1,1,{},{},{}
-2119,Improved_Arm_Guard,Advanced Arm Guard,5,40000,,150,,45,,0,0x02000000,7,2,32,,50,1,1,{ bonus bMdef,5; },{},{}
-2120,Improved_Arm_Guard_,Advanced Arm Guard,5,40000,,150,,45,,1,0x02000000,7,2,32,,50,1,1,{ bonus bMdef,5; },{},{}
-2121,Memorize_Book_,Memory Book,5,20,,1000,,25,,1,0x00810204,7,2,32,,0,1,5,{ bonus bInt,1; bonus bMdef,2; if (isequipped(2717,2239)) { bonus bHPrecovRate,15; bonus bSPrecovRate,15; bonus bMatkRate,7; }; },{},{}
-2122,Platinum_Shield,Platinum Shield,5,20,,1200,,95,,0,0xFFFFFFFE,2,2,32,,68,1,4,{ bonus bMdef,5; bonus2 bSubSize,1,15; bonus2 bSubSize,2,15; bonus2 bSubRace,RC_Undead,10; bonus5 bAutoSpellWhenHit,"NPC_MAGICMIRROR",2,150,BF_MAGIC,0; },{},{}
-2123,Orleans_Server,Orleans's Server,5,20,,1000,,75,,1,0xFFFFFFFE,2,2,32,,55,1,4,{ bonus bMdef,2; bonus bMagicDamageReturn,5; if (isequipped(2701)) bonus bCastrate,-10; },{},{}
-2124,Thorny_Buckler,Thorny Buckler,5,20,,1000,,85,,1,0xFFFFFFFE,2,2,32,,55,1,2,{ bonus bMdef,2; if (isequipped(2702)) { bonus bAspdRate,10; bonus bShortWeaponDamageReturn,5; } },{},{}
-2125,Strong_Shield,Strong Shield,5,20,,2500,,90,,1,0xFFFFFFFE,2,2,32,,75,1,4,{ bonus bNoKnockback,0; bonus2 bSubEle,Ele_Neutral,-20; bonus2 bSubEle,Ele_Fire,-20; bonus2 bSubEle,Ele_Water,-20; bonus2 bSubEle,Ele_Wind,-20; bonus2 bSubEle,Ele_Earth,-20; bonus2 bSubEle,Ele_Dark,-20; bonus2 bSubEle,Ele_Holy,-20; bonus2 bSubEle,Ele_Ghost,-20; },{},{}
-2126,Guyak_Shield,Guyak Shield,5,20,,700,,3,,0,0xFFFFFFFE,7,2,32,,75,1,2,{ bonus bMdef,2; },{},{}
+2101,Guard,Guard,5,500,,300,,3,,0,0xFFFFFFFF,7,2,32,,0,1,1,{},{},{}
+2102,Guard_,Guard,5,500,,300,,3,,1,0xFFFFFFFF,7,2,32,,0,1,1,{},{},{}
+2103,Buckler,Buckler,5,14000,,600,,4,,0,0x000ED5F2,7,2,32,,0,1,2,{},{},{}
+2104,Buckler_,Buckler,5,14000,,600,,4,,1,0x000ED5F2,7,2,32,,0,1,2,{},{},{}
+2105,Shield,Shield,5,56000,,1300,,6,,0,0x00004082,7,2,32,,0,1,3,{},{},{}
+2106,Shield_,Shield,5,56000,,1300,,6,,1,0x00004082,7,2,32,,0,1,3,{},{},{}
+2107,Mirror_Shield,Mirror Shield,5,60000,,1000,,4,,0,0x00404082,7,2,32,,0,1,4,{ bonus bMdef,5; },{},{}
+2108,Mirror_Shield_,Mirror Shield,5,60000,,1000,,4,,1,0x00404082,7,2,32,,0,1,4,{ bonus bMdef,5; },{},{}
+2109,Memorize_Book,Memory Book,5,20,,1000,,3,,0,0x00810204,7,2,32,,0,1,5,{ bonus bInt,1; bonus bMdef,2; if (isequipped(2717,2239)) { bonus bHPrecovRate,15; bonus bSPrecovRate,15; bonus bMatkRate,7; }; },{},{}
+2110,Holy_Guard,Holy Guard,5,85000,,1400,,5,,0,0x00004000,7,2,32,,68,0,4,{ bonus bVit,2; bonus bMdef,2; },{},{}
+2111,Herald_Of_GOD,Sacred Mission,5,128000,,1600,,5,,0,0x00004000,7,2,32,,83,1,4,{ bonus bVit,3; bonus bInt,2; bonus bMdef,3; bonus bUnbreakableShield,0; },{},{}
+2112,Novice_Guard,Novice Guard,5,1,,1,,3,,0,0x00000001,7,2,32,,0,0,1,{},{},{}
+2113,Novice_Shield,Novice Shield,5,5000,,1000,,3,,1,0x00000001,7,2,32,,40,1,3,{ bonus2 bSubEle,Ele_Water,20; bonus2 bSubEle,Ele_Earth,20; bonus2 bSubEle,Ele_Fire,20; bonus2 bSubEle,Ele_Wind,20; bonus2 bSubEle,Ele_Poison,20; bonus2 bSubEle,Ele_Ghost,20; bonus2 bSubEle,Ele_Undead,20; },{},{}
+2114,Stone_Buckler,Stone Buckler,5,30000,,1500,,3,,1,0xFFFFFFFE,7,2,32,,65,1,2,{ bonus2 bSubSize,2,5; if (isequipped(2353,5122)) { bonus bStr,2; bonus bDef,5; bonus bMdef,5; if(BaseClass == Job_Swordman) bonus bDef,6; } },{},{}
+2115,Valkyrja's_Shield,Valkyrja's Shield,5,30000,,500,,3,,1,0xFFFFFFFE,7,2,32,,65,1,4,{ bonus2 bSubEle,Ele_Water,20; bonus2 bSubEle,Ele_Fire,20; bonus2 bSubEle,Ele_Dark,20; bonus2 bSubEle,Ele_Undead,20; bonus bMdef,5; if(isequipped(2353,5124)) { bonus bDef,2-getrefine()-getequiprefinerycnt(EQI_HEAD_TOP); bonus bMdef,5+getrefine()+getequiprefinerycnt(EQI_HEAD_TOP); } },{},{}
+2116,Angel's_Safeguard,Angelic Guard,5,10000,,400,,3,,1,0x00000001,7,2,32,,20,1,1,{ bonus2 bSubRace,RC_Demon,5; },{},{}
+2117,Arm_Guard,Arm Guard,5,10000,,150,,5,,0,0x02000000,7,2,32,,20,1,1,{},{},{}
+2118,Arm_Guard_,Arm Guard,5,10000,,150,,5,,1,0x02000000,7,2,32,,20,1,1,{},{},{}
+2119,Improved_Arm_Guard,Advanced Arm Guard,5,40000,,150,,4,,0,0x02000000,7,2,32,,50,1,1,{ bonus bMdef,5; },{},{}
+2120,Improved_Arm_Guard_,Advanced Arm Guard,5,40000,,150,,4,,1,0x02000000,7,2,32,,50,1,1,{ bonus bMdef,5; },{},{}
+2121,Memorize_Book_,Memory Book,5,20,,1000,,3,,1,0x00810204,7,2,32,,0,1,5,{ bonus bInt,1; bonus bMdef,2; if (isequipped(2717,2239)) { bonus bHPrecovRate,15; bonus bSPrecovRate,15; bonus bMatkRate,7; }; },{},{}
+2122,Platinum_Shield,Platinum Shield,5,20,,1200,,5,,0,0xFFFFFFFE,2,2,32,,68,1,4,{ bonus bMdef,5; bonus2 bSubSize,1,15; bonus2 bSubSize,2,15; bonus2 bSubRace,RC_Undead,10; bonus5 bAutoSpellWhenHit,"NPC_MAGICMIRROR",2,150,BF_MAGIC,0; },{},{}
+2123,Orleans_Server,Orleans's Server,5,20,,1000,,5,,1,0xFFFFFFFE,2,2,32,,55,1,4,{ bonus bMdef,2; bonus bMagicDamageReturn,5; if (isequipped(2701)) bonus bCastrate,-10; },{},{}
+2124,Thorny_Buckler,Thorny Buckler,5,20,,1000,,5,,1,0xFFFFFFFE,2,2,32,,55,1,2,{ bonus bMdef,2; if (isequipped(2702)) { bonus bAspdRate,10; bonus bShortWeaponDamageReturn,5; } },{},{}
+2125,Strong_Shield,Strong Shield,5,20,,2500,,4,,1,0xFFFFFFFE,2,2,32,,75,1,4,{ bonus bNoKnockback,0; bonus2 bSubEle,Ele_Neutral,-20; bonus2 bSubEle,Ele_Fire,-20; bonus2 bSubEle,Ele_Water,-20; bonus2 bSubEle,Ele_Wind,-20; bonus2 bSubEle,Ele_Earth,-20; bonus2 bSubEle,Ele_Dark,-20; bonus2 bSubEle,Ele_Holy,-20; bonus2 bSubEle,Ele_Ghost,-20; },{},{}
+2126,Guyak_Shield,Guyak Shield,5,20,,700,,3,,0,0xFFFFFFFE,7,2,32,,75,1,2,{ bonus bMdef,3; },{},{}
2127,Secular_Mission,Secular Mission,5,20,,0,,10,,0,0xFFFFFFFF,7,2,32,,0,0,4,{ bonus2 bSubRace,RC_NonBoss,25; bonus2 bSubRace,RC_Boss,25; },{},{}
-2128,Herald_Of_GOD_,Sacred Mission,5,128000,,1600,,120,,1,0x00004000,7,2,32,,83,1,4,{ bonus bVit,3; bonus bInt,2; bonus bMdef,3; bonus bUnbreakableShield,0; },{},{}
-2129,Exorcism_Bible,Exorcism Bible,5,20,,600,,80,,0,0x00008100,7,2,32,,50,1,5,{ bonus bHPrecovRate,3; bonus bSPrecovRate,3; bonus bInt,1; if(isequipped(1631)) { bonus2 bSkillAtk,"PR_MAGNUS",20; bonus3 bAutoSpellWhenHit,"PR_TURNUNDEAD",1,20; } },{},{}
-2130,Cross_Shield,Cross Shield,5,20,,2000,,130,,1,0x00004000,7,2,32,,80,1,4,{ bonus bStr,1; bonus2 bSkillAtk,"PA_SHIELDCHAIN",30; bonus2 bSkillAtk,"CR_SHIELDBOOMERANG",30; bonus bUseSPrate,10; },{},{}
-2131,Magic_Study_Vol1,Magic Bible Vol1,5,20,,1000,,18,,1,0x00810204,7,2,32,,70,1,5,{ bonus bMdef,3; bonus bInt,2; bonus2 bAddEffWhenHit,Eff_Stun,1000; },{},{}
-2132,Shelter_Resistance,Shell Of Resistance,5,20,,0,,140,,0,0xFFFFFFFF,7,2,32,,0,0,2,{ bonus2 bSubEle,Ele_Neutral,20; bonus2 bSubEle,Ele_Water,20; bonus2 bSubEle,Ele_Earth,20; bonus2 bSubEle,Ele_Fire,20; bonus2 bSubEle,Ele_Wind,20; bonus2 bSubEle,Ele_Poison,20; bonus2 bSubEle,Ele_Holy,20; bonus2 bSubEle,Ele_Dark,20; bonus2 bSubEle,Ele_Ghost,20; bonus2 bSubEle,Ele_Undead,20; bonus bShortWeaponDamageReturn,1; },{},{}
-2133,Tournament_Shield,Tournament Shield,5,20,,1000,,105,,1,0x00004082,2,2,32,,50,1,4,{ bonus2 bAddRace,RC_NonBoss,1; bonus2 bAddRace,RC_Boss,1; if( Class == Job_Lord_Knight ) bonus bAspdRate,-5; if( isequipped(1420) || isequipped(1421) || isequipped(1422) ) { bonus2 bAddRace,RC_NonBoss,4; bonus2 bAddRace,RC_Boss,4; bonus bDef,2; } },{},{}
-2134,Shield_Of_Naga,Shield of Naga,5,20,,500,,35,,1,0x00CFFF80,2,2,32,,0,1,2,{ bonus bMdef,3; autobonus2 "{ bonus bShortWeaponDamageReturn,(getrefine()*3); }",10,5000,BF_WEAPON,"{ specialeffect2 EF_GUARD; }"; },{},{}
-2135,Shadow_Guard,Shadow Guard,5,20,,800,,52,,1,0x00020000,2,2,32,,70,1,2,{ if( isequipped(2426) ) { bonus2 bAddEff,Eff_Blind,500; autobonus "{ bonus bFlee,20; }",200,10000,BF_WEAPON,"{ specialeffect2 EF_INCAGILITY; }"; } },{},{}
-2136,Cracked_Buckler,Cracked Buckler,5,0,,0,,55,,0,0xFFFFFFFF,7,2,32,,0,0,2,{ bonus bAgi,2; bonus2 bAddEle,Ele_Neutral,-10; bonus3 bAutoSpellWhenHit,"PR_KYRIE",1,50; bonus bMdef,1; },{},{}
-2137,Valkyrja's_Shield_C,Neo Valkyrja's Shield,5,0,,0,,110,,0,0xFFFFFFFE,2,2,32,,95,0,4,{ bonus2 bSubEle,Ele_Water,20; bonus2 bSubEle,Ele_Fire,20; bonus2 bSubEle,Ele_Dark,20; bonus2 bSubEle,Ele_Undead,20; bonus bMdef,5; if(isequipped(2353,5124)) { bonus bDef,2-getrefine()-getequiprefinerycnt(EQI_HEAD_TOP); bonus bMdef,5+getrefine()+getequiprefinerycnt(EQI_HEAD_TOP); } },{},{}
-2138,Bradium_Shield,Bradium Shield,5,20,,1800,,98,,1,0x00CFFF80,2,2,32,,65,1,3,{ bonus2 bSkillAtk,"CR_SHIELDBOOMERANG",60; bonus bAgi,-1; bonus bMaxHP,500; },{},{}
-2139,Flame_Thrower,Flame Thrower,5,20000,,2000,,60,,0,0x00000000,7,2,32,,99,0,1,{},{},{}
-2140,Energy_Rune_Guard,Energy Rune Guard,5,20,,0,,70,,1,0x00000000,7,2,32,,99,1,4,{ bonus bMaxSPrate,2; },{},{}
+2128,Herald_Of_GOD_,Sacred Mission,5,128000,,1600,,5,,1,0x00004000,7,2,32,,83,1,4,{ bonus bVit,3; bonus bInt,2; bonus bMdef,3; bonus bUnbreakableShield,0; },{},{}
+2129,Exorcism_Bible,Exorcism Bible,5,20,,600,,5,,0,0x00008100,7,2,32,,50,1,5,{ bonus bHPrecovRate,3; bonus bSPrecovRate,3; bonus bInt,1; if(isequipped(1631)) { bonus2 bSkillAtk,"PR_MAGNUS",20; bonus3 bAutoSpellWhenHit,"PR_TURNUNDEAD",1,20; } },{},{}
+2130,Cross_Shield,Cross Shield,5,20,,2000,,6,,1,0x00004000,7,2,32,,80,1,4,{ bonus bStr,1; bonus2 bSkillAtk,"PA_SHIELDCHAIN",30; bonus2 bSkillAtk,"CR_SHIELDBOOMERANG",30; bonus bUseSPrate,10; },{},{}
+2131,Magic_Study_Vol1,Magic Bible Vol1,5,20,,1000,,2,,1,0x00810204,2,2,32,,70,1,5,{ bonus bMdef,3; bonus bInt,2; bonus2 bAddEffWhenHit,Eff_Stun,1000; },{},{}
+2132,Shelter_Resistance,Shell Of Resistance,5,20,,0,,9,,0,0xFFFFFFFF,2,2,32,,0,0,2,{ bonus2 bSubEle,Ele_Neutral,20; bonus2 bSubEle,Ele_Water,20; bonus2 bSubEle,Ele_Earth,20; bonus2 bSubEle,Ele_Fire,20; bonus2 bSubEle,Ele_Wind,20; bonus2 bSubEle,Ele_Poison,20; bonus2 bSubEle,Ele_Holy,20; bonus2 bSubEle,Ele_Dark,20; bonus2 bSubEle,Ele_Ghost,20; bonus2 bSubEle,Ele_Undead,20; bonus bShortWeaponDamageReturn,1; },{},{}
+2133,Tournament_Shield,Tournament Shield,5,20,,1000,,5,,1,0x00004082,2,2,32,,50,1,4,{ bonus2 bAddRace,RC_NonBoss,1; bonus2 bAddRace,RC_Boss,1; if( Class == Job_Lord_Knight ) bonus bAspdRate,-5; if( isequipped(1420) || isequipped(1421) || isequipped(1422) ) { bonus2 bAddRace,RC_NonBoss,4; bonus2 bAddRace,RC_Boss,4; bonus bDef,2; } },{},{}
+2134,Shield_Of_Naga,Shield of Naga,5,20,,500,,3,,1,0x00CFFF80,2,2,32,,70,1,2,{ bonus bMdef,3; autobonus2 "{ bonus bShortWeaponDamageReturn,(getrefine()*3); }",10,5000,BF_WEAPON,"{ specialeffect2 EF_GUARD; }"; },{},{}
+2135,Shadow_Guard,Shadow Guard,5,20,,800,,4,,1,0x00020000,2,2,32,,70,1,2,{ if( isequipped(2426) ) { bonus2 bAddEff,Eff_Blind,500; autobonus "{ bonus bFlee,20; }",200,10000,BF_WEAPON,"{ specialeffect2 EF_INCAGILITY; }"; } },{},{}
+2136,Cracked_Buckler,Cracked Buckler,5,0,,0,,5,,0,0xFFFFFFFF,7,2,32,,0,0,2,{ bonus bAgi,2; bonus2 bAddEle,Ele_Neutral,-10; bonus3 bAutoSpellWhenHit,"PR_KYRIE",1,50; bonus bMdef,1; },{},{}
+2137,Valkyrja's_Shield_C,Neo Valkyrja's Shield,5,0,,0,,5,,0,0xFFFFFFFE,2,2,32,,95,0,4,{ bonus2 bSubEle,Ele_Water,20; bonus2 bSubEle,Ele_Fire,20; bonus2 bSubEle,Ele_Dark,20; bonus2 bSubEle,Ele_Undead,20; bonus bMdef,5; if(isequipped(2353,5124)) { bonus bDef,2-getrefine()-getequiprefinerycnt(EQI_HEAD_TOP); bonus bMdef,5+getrefine()+getequiprefinerycnt(EQI_HEAD_TOP); } },{},{}
+2138,Bradium_Shield,Bradium Shield,5,20,,1800,,5,,1,0x00CFFF80,2,2,32,,65,1,3,{ bonus2 bSkillAtk,"CR_SHIELDBOOMERANG",60; bonus bAgi,-1; bonus bMaxHP,500; },{},{}
+2139,Flame_Thrower,Flame Thrower,5,20000,,2000,,60,,0,0xFFFFFFFF,7,2,32,,99,0,1,{},{},{}
+2140,Energy_Rune_Guard,Energy Rune Guard,5,20,,0,,6,,1,0x00004082,7,2,32,,99,1,4,{ bonus bMaxSPrate,2; },{},{}
//2141,Freyja_SShield7,Freyja Spirit Shield,5,0,,300,,5,,0,0xFFFFFFFF,7,2,32,,20,0,1,{},{},{}
//2142,Freyja_SShield30,Freyja Spirit Shield,5,0,,300,,5,,0,0xFFFFFFFF,7,2,32,,20,0,1,{},{},{}
//2143,Freyja_SShield60,Freyja Spirit Shield,5,0,,300,,5,,0,0xFFFFFFFF,7,2,32,,20,0,1,{},{},{}
@@ -1144,7 +1144,7 @@
2145,Time_Keepr_Shield,Time Keeper Shield,5,30000,,0,,20,,0,0xFFFFFFFF,7,2,32,,1,1,3,{ bonus bMdef,1; },{},{}
2146,Siver_Guard,silver Guard,5,12500,,300,,60,,1,0xFFFFFFFF,7,2,32,,22,1,1,{},{},{}
2147,Round_Buckler,Round Buckleer,5,24000,,600,,90,,1,0xFFFFFFFE,2,2,32,,22,1,2,{},{},{}
-2148,Rotha_Shield,Rosa Shield,5,56000,,1300,,130,,1,0x00000000,7,2,32,,100,1,3,{},{},{}
+2148,Rotha_Shield,Rosa Shield,5,56000,,1300,,3,,1,0xFFFFFFFF,7,2,32,,100,1,3,{},{},{}
2149,Upg_Guard,Upg Guard,5,20,,150,,25,,1,0xFFFFFFFF,7,2,32,,1,1,1,{},{},{}
2150,Upg_Buckler,Upg Buckler,5,20,,300,,45,,1,0x000ED5F2,7,2,32,,1,1,2,{},{},{}
2151,Upg_Shield,Upg Shield,5,20,,650,,65,,1,0x00004082,7,2,32,,1,1,3,{},{},{}
@@ -1152,7 +1152,7 @@
2153,Imperial_Guard,Imperial Guard,5,20,,2500,,120,,1,0x00000000,7,2,32,,102,1,0,{ bonus bMdef,5; },{},{}
2154,Toy_Shield,Toy Shield,5,0,,500,,1,,1,0xFFFFFFFF,7,2,32,,10,1,1,{},{},{}
2156,Bible_Of_Promise1,Bible Of Promise,5,20,,500,,10,,1,0x00000000,7,2,32,,110,1,5,{ bonus bMdef,2; },{},{}
-2199,Ahura_Mazda,Ahura Mazdah,5,1,,10,,99999,,0,0xFFFFFFFF,7,2,32,,1,0,2,{ bonus bAllStats,50; bonus bMdef,99; bonus bShortWeaponDamageReturn,100; bonus2 bSubRace,RC_DemiHuman,95; skill "CR_FULLPROTECTION",5; Skill "WZ_ESTIMATION",1; Skill "ST_FULLSTRIP",5; Skill "HW_MAGICPOWER", 10; bonus bMaxHPRate,200; bonus bNoGemStone,0; bonus bSpeedRate,25; },{ sc_start4 SC_ENDURE,60000,10,0,0,1; },{ sc_end SC_ENDURE; }
+2199,Ahura_Mazda,Ahura Mazdah,5,1,,10,,100,,0,0xFFFFFFFF,7,2,32,,1,1,0,{ bonus bAllStats,50; bonus bMdef,99; bonus bShortWeaponDamageReturn,100; bonus2 bSubRace,RC_DemiHuman,95; skill "CR_FULLPROTECTION",5; Skill "WZ_ESTIMATION",1; Skill "ST_FULLSTRIP",5; Skill "HW_MAGICPOWER", 10; bonus bMaxHPRate,200; bonus bNoGemStone,0; bonus bSpeedRate,25; },{ sc_start4 SC_ENDURE,60000,10,0,0,1; },{ sc_end SC_ENDURE; }
// Headgears
//===================================================================
2201,Sunglasses,Sunglasses,5,5000,,100,,0,,0,0xFFFFFFFF,7,2,512,,0,0,12,{ bonus2 bResEff,Eff_Blind,500; },{},{}
@@ -1164,249 +1164,249 @@
2207,Fancy_Flower,Fancy Flower,5,20,,100,,0,,0,0xFFFFFFFF,7,2,256,,0,0,4,{ bonus2 bSubRace,RC_Plant,10; },{},{}
2208,Ribbon,Ribbon,5,800,,100,,1,,0,0xFFFFFFFF,7,0,256,,0,1,17,{ bonus bMdef,3; },{},{}
2209,Ribbon_,Ribbon,5,800,,100,,1,,1,0xFFFFFFFF,7,0,256,,0,1,17,{ bonus bMdef,3; },{},{}
-2210,Hair_Band,Hair Band,5,500,,100,,2,,0,0xFFFFFFFF,7,2,256,,0,0,9,{},{},{}
-2211,Bandana,Bandana,5,400,,100,,2,,0,0xFFFFFFFF,7,2,256,,0,1,6,{},{},{}
+2210,Hair_Band,Hair Band,5,500,,100,,1,,0,0xFFFFFFFF,7,2,256,,0,0,9,{},{},{}
+2211,Bandana,Bandana,5,400,,100,,1,,0,0xFFFFFFFF,7,2,256,,0,1,6,{},{},{}
2212,Eye_Bandage,Eye Patch,5,1000,,100,,0,,0,0xFFFFFFFF,7,2,512,,0,0,13,{},{},{}
-2213,Cat_Hairband,Kitty Band,5,20,,100,,3,,0,0xFFFFFFFF,7,2,256,,0,1,2,{},{},{}
-2214,Bunny_Band,Bunny Band,5,20,,100,,3,,0,0xFFFFFFFF,7,2,256,,0,1,15,{ bonus bLuk,2; },{},{}
-2215,Flower_Hairband,Flower Band,5,20,,100,,4,,0,0xFFFFFFFF,7,2,256,,0,1,5,{},{},{}
-2216,Biretta,Biretta,5,9000,,100,,8,,0,0x00008110,7,2,256,,0,1,11,{},{},{}
-2217,Biretta_,Biretta,5,9000,,100,,8,,1,0x00008110,7,2,256,,0,1,11,{},{},{}
+2213,Cat_Hairband,Kitty Band,5,20,,100,,2,,0,0xFFFFFFFF,7,2,256,,0,1,2,{},{},{}
+2214,Bunny_Band,Bunny Band,5,20,,100,,2,,0,0xFFFFFFFF,7,2,256,,0,1,15,{ bonus bLuk,2; },{},{}
+2215,Flower_Hairband,Flower Band,5,20,,100,,2,,0,0xFFFFFFFF,7,2,256,,0,1,5,{},{},{}
+2216,Biretta,Biretta,5,9000,,100,,4,,0,0x00008110,7,2,256,,0,1,11,{},{},{}
+2217,Biretta_,Biretta,5,9000,,100,,4,,1,0x00008110,7,2,256,,0,1,11,{},{},{}
2218,Flu_Mask,Flu Mask,5,300,,100,,0,,0,0xFFFFFFFF,7,2,1,,0,0,8,{ bonus2 bResEff,Eff_Silence,1000; },{},{}
2219,Flu_Mask_,Flu Mask,5,300,,100,,0,,0,0xFFFFFFFF,7,2,1,,0,0,8,{ bonus2 bResEff,Eff_Silence,1000; },{},{}
2220,Hat,Hat,5,1000,,200,,2,,0,0xFFFFFFFF,7,2,256,,0,1,16,{},{},{}
2221,Hat_,Hat,5,1000,,200,,2,,1,0xFFFFFFFF,7,2,256,,0,1,16,{},{},{}
-2222,Turban,Turban,5,4500,,300,,5,,0,0xFFFFFFFE,7,2,256,,0,1,7,{},{},{}
-2223,Turban_,Turban,5,4500,,300,,5,,1,0xFFFFFFFE,7,2,256,,0,1,7,{},{},{}
+2222,Turban,Turban,5,4500,,300,,3,,0,0xFFFFFFFE,7,2,256,,0,1,7,{},{},{}
+2223,Turban_,Turban,5,4500,,300,,3,,1,0xFFFFFFFE,7,2,256,,0,1,7,{},{},{}
2224,Goggle,Goggles,5,20,,300,,5,,0,0x000E5CEA,7,2,768,,0,1,1,{},{},{}
2225,Goggle_,Goggles,5,20,,300,,5,,1,0x000E5CEA,7,2,768,,0,1,1,{},{},{}
-2226,Cap,Cap,5,12000,,400,,7,,0,0x000E5CEA,7,2,256,,0,1,14,{},{},{}
-2227,Cap_,Cap,5,12000,,400,,7,,1,0x000E5CEA,7,2,256,,0,1,14,{},{},{}
-2228,Helm,Helm,5,44000,,600,,13,,0,0x00004082,7,2,256,,0,1,40,{},{},{}
-2229,Helm_,Helm,5,44000,,600,,13,,1,0x00004082,7,2,256,,0,1,40,{},{},{}
-2230,Gemmed_Sallet,Gemmed Sallet,5,50000,,500,,8,,0,0x000654E2,7,2,256,,0,1,0,{ bonus bMdef,3; },{},{}
-2231,Gemmed_Sallet_,Gemmed Sallet,5,50000,,500,,8,,1,0x000654E2,7,2,256,,0,1,0,{ bonus bMdef,3; },{},{}
-2232,Circlet,Circlet,5,7500,,300,,6,,0,0x00818314,7,2,256,,0,1,18,{ bonus bMdef,3; },{},{}
-2233,Circlet_,Circlet,5,7500,,300,,6,,1,0x00818314,7,2,256,,0,1,18,{ bonus bMdef,3; },{},{}
-2234,Tiara,Tiara,5,20,,400,,7,,0,0xFFFFFFFE,7,0,256,,45,1,19,{ bonus bInt,2; },{},{}
-2235,Crown,Crown,5,20,,400,,7,,0,0xFFFFFFFE,7,1,256,,45,1,45,{ bonus bInt,2; },{},{}
-2236,Santa's_Hat,Santa Hat,5,20,,100,,2,,0,0xFFFFFFFF,7,2,256,,0,1,20,{ bonus bLuk,1; bonus bMdef,1; },{},{}
+2226,Cap,Cap,5,12000,,400,,4,,0,0x000E5CEA,7,2,256,,0,1,14,{},{},{}
+2227,Cap_,Cap,5,12000,,400,,4,,1,0x000E5CEA,7,2,256,,0,1,14,{},{},{}
+2228,Helm,Helm,5,44000,,600,,6,,0,0x00004082,7,2,256,,0,1,40,{},{},{}
+2229,Helm_,Helm,5,44000,,600,,6,,1,0x00004082,7,2,256,,0,1,40,{},{},{}
+2230,Gemmed_Sallet,Gemmed Sallet,5,50000,,500,,4,,0,0x000654E2,7,2,256,,0,1,0,{ bonus bMdef,3; },{},{}
+2231,Gemmed_Sallet_,Gemmed Sallet,5,50000,,500,,4,,1,0x000654E2,7,2,256,,0,1,0,{ bonus bMdef,3; },{},{}
+2232,Circlet,Circlet,5,7500,,300,,3,,0,0x00818314,7,2,256,,0,1,18,{ bonus bMdef,3; },{},{}
+2233,Circlet_,Circlet,5,7500,,300,,3,,1,0x00818314,7,2,256,,0,1,18,{ bonus bMdef,3; },{},{}
+2234,Tiara,Tiara,5,20,,400,,4,,0,0xFFFFFFFE,7,0,256,,45,1,19,{ bonus bInt,2; },{},{}
+2235,Crown,Crown,5,20,,400,,4,,0,0xFFFFFFFE,7,1,256,,45,1,45,{ bonus bInt,2; },{},{}
+2236,Santa's_Hat,Santa Hat,5,20,,100,,1,,0,0xFFFFFFFF,7,2,256,,0,1,20,{ bonus bMdef,1; bonus bLuk,1; },{},{}
2237,Weird_Goatee,Bandit Beard,5,2,,100,,0,,0,0xFFFFFFFF,7,2,1,,0,0,21,{},{},{}
//2238,Weird_Moustache,Moustache,5,2,,100,,0,,0,0xFFFFFFFF,7,2,1,,0,0,22,{},{},{}
2239,One_Eyed_Glass,Monocle,5,10000,,100,,0,,0,0xFFFFFFFF,7,2,512,,0,0,23,{},{},{}
2240,Beard,Beard,5,2,,100,,0,,0,0xFFFFFFFF,7,2,1,,0,0,24,{},{},{}
2241,Granpa_Beard,Grampa Beard,5,5000,,100,,0,,0,0xFFFFFFFF,7,2,1,,0,0,25,{},{},{}
-2242,Luxury_Sunglasses,Purple Glasses,5,24000,,100,,2,,0,0xFFFFFFFF,7,2,512,,0,0,26,{ bonus2 bResEff,Eff_Blind,1000; },{},{}
+2242,Luxury_Sunglasses,Purple Glasses,5,24000,,100,,1,,0,0xFFFFFFFF,7,2,512,,0,0,26,{ bonus2 bResEff,Eff_Blind,1000; },{},{}
2243,Spinning_Eyes,Geek Glasses,5,20000,,100,,1,,0,0xFFFFFFFF,7,2,512,,0,0,27,{ bonus2 bResEff,Eff_Blind,1500; },{},{}
-2244,Big_Sis'_Ribbon,Big Ribbon,5,15000,,200,,3,,0,0xFFFFFFFE,7,2,256,,0,1,28,{ bonus bMdef,3; },{},{}
-2245,Sweet_Gents,Sweet Gent,5,15000,,400,,5,,0,0xFFFFFFFE,7,2,256,,0,1,29,{},{},{}
-2246,Golden_Gear,Golden Gear,5,20,,900,,9,,0,0xFFFFFFFE,7,2,256,,40,1,30,{ bonus bUnbreakableHelm,0; },{},{}
-2247,Oldman's_Romance,Romantic Gent,5,15000,,400,,5,,0,0xFFFFFFFE,7,2,256,,0,1,31,{},{},{}
-2248,Western_Grace,Western Grace,5,15000,,400,,5,,0,0xFFFFFFFE,7,2,256,,0,1,32,{},{},{}
-2249,Coronet,Coronet,5,20,,300,,5,,0,0xFFFFFFFE,7,2,256,,0,1,33,{ bonus bInt,1; },{},{}
-2250,Fillet,Cute Ribbon,5,500,,100,,2,,0,0xFFFFFFFE,7,2,256,,0,0,34,{ bonus bMaxSP,20; },{},{}
-2251,Holy_Bonnet,Monk Hat,5,30000,,100,,10,,0,0x00008110,7,2,256,,0,1,35,{ bonus bMdef,3; },{},{}
-2252,Star_Sparkling,Wizard Hat,5,20,,300,,7,,0,0x00810204,7,2,256,,0,1,36,{ bonus bMaxSP,100; },{},{}
+2244,Big_Sis'_Ribbon,Big Ribbon,5,15000,,200,,2,,0,0xFFFFFFFE,7,2,256,,0,1,28,{ bonus bMdef,3; },{},{}
+2245,Sweet_Gents,Sweet Gent,5,15000,,400,,3,,0,0xFFFFFFFE,7,2,256,,0,1,29,{},{},{}
+2246,Golden_Gear,Golden Gear,5,20,,900,,5,,0,0xFFFFFFFE,7,2,256,,40,1,30,{ bonus bUnbreakableHelm,0; },{},{}
+2247,Oldman's_Romance,Romantic Gent,5,15000,,400,,3,,0,0xFFFFFFFE,7,2,256,,0,1,31,{},{},{}
+2248,Western_Grace,Western Grace,5,15000,,400,,3,,0,0xFFFFFFFE,7,2,256,,0,1,32,{},{},{}
+2249,Coronet,Coronet,5,20,,300,,3,,0,0xFFFFFFFE,7,2,256,,0,1,33,{ bonus bInt,1; },{},{}
+2250,Fillet,Cute Ribbon,5,500,,100,,1,,0,0xFFFFFFFE,7,2,256,,0,0,34,{ bonus bMaxSP,20; },{},{}
+2251,Holy_Bonnet,Monk Hat,5,30000,,100,,5,,0,0x00008110,7,2,256,,0,1,35,{ bonus bMdef,3; },{},{}
+2252,Star_Sparkling,Wizard Hat,5,20,,300,,4,,0,0x00810204,7,2,256,,0,1,36,{ bonus bMaxSP,100; },{},{}
2253,Sunflower,Sunflower,5,20,,100,,1,,0,0xFFFFFFFF,7,2,256,,0,0,37,{ bonus2 bSubRace,RC_Insect,10; },{},{}
-2254,Angelic_Chain,Angel Wing,5,20,,100,,4,,0,0xFFFFFFFE,7,2,256,,0,1,38,{ bonus bMdef,3; bonus bAgi,1; bonus bLuk,1; bonus2 bSubRace,RC_Demon,3; },{},{}
-2255,Satanic_Chain,Evil Wing,5,20,,100,,6,,0,0xFFFFFFFE,7,2,256,,0,1,39,{ bonus bMdef,2; bonus bStr,1; bonus2 bSubRace,RC_Angel,3; },{},{}
-2256,Magestic_Goat,Majestic Goat,5,20,,800,,9,,0,0x006444A2,7,2,256,,0,1,41,{ bonus bStr,1; },{},{}
-2257,Snowy_Horn,Unicorn Horn,5,20,,100,,4,,0,0xFFFFFFFF,7,2,256,,0,1,42,{},{},{}
-2258,Sharp_Gear,Spiky Band,5,20,,1000,,12,,0,0x0066D5F2,7,2,256,,50,1,43,{},{},{}
-2259,Mini_Propeller,Mini Propeller,5,20,,100,,2,,0,0xFFFFFFFF,7,2,256,,0,1,46,{},{},{}
-2260,Mini_Glasses,Mini Glasses,5,28000,,100,,2,,0,0xFFFFFFFE,7,2,512,,0,0,47,{},{},{}
-2261,Prontera_Army_Cap,Army Cap,5,20,,400,,8,,0,0x000654E2,7,2,256,,0,1,48,{},{},{}
+2254,Angelic_Chain,Angel Wing,5,20,,100,,2,,0,0xFFFFFFFE,7,2,256,,0,1,38,{ bonus bMdef,3; bonus bAgi,1; bonus bLuk,1; bonus2 bSubRace,RC_Demon,3; },{},{}
+2255,Satanic_Chain,Evil Wing,5,20,,100,,3,,0,0xFFFFFFFE,7,2,256,,0,1,39,{ bonus bMdef,2; bonus bStr,1; bonus2 bSubRace,RC_Angel,3; },{},{}
+2256,Magestic_Goat,Majestic Goat,5,20,,800,,5,,0,0x006444A2,7,2,256,,0,1,41,{ bonus bStr,1; },{},{}
+2257,Snowy_Horn,Unicorn Horn,5,20,,100,,2,,0,0xFFFFFFFF,7,2,256,,0,1,42,{},{},{}
+2258,Sharp_Gear,Spiky Band,5,20,,1000,,6,,0,0x0066D5F2,7,2,256,,50,1,43,{},{},{}
+2259,Mini_Propeller,Mini Propeller,5,20,,100,,1,,0,0xFFFFFFFF,7,2,256,,0,1,46,{},{},{}
+2260,Mini_Glasses,Mini Glasses,5,28000,,100,,1,,0,0xFFFFFFFE,7,2,512,,0,0,47,{},{},{}
+2261,Prontera_Army_Cap,Army Cap,5,20,,400,,4,,0,0x000654E2,7,2,256,,0,1,48,{},{},{}
2262,Pierrot_Nose,Clown Nose,5,20,,100,,0,,0,0xFFFFFFFF,7,2,1,,0,0,49,{},{},{}
2263,Gangster_Patch,Zorro Masque,5,20,,100,,0,,0,0xFFFFFFFE,7,2,512,,0,0,50,{},{},{}
2264,Munak_Turban,Munak Hat,5,20,,300,,5,,0,0xFFFFFFFF,7,2,769,,0,0,51,{ bonus2 bSubRace,RC_Undead,10; },{},{}
2265,Ganster_Mask,Gangster Mask,5,20,,100,,0,,0,0xFFFFFFFF,7,2,1,,0,0,52,{ bonus2 bResEff,Eff_Silence,1500; },{},{}
-2266,Iron_Cane,Iron Cain,5,20,,300,,4,,0,0x00004082,7,2,1,,50,0,53,{},{},{}
+2266,Iron_Cane,Iron Cain,5,20,,300,,1,,0,0x00004082,7,2,1,,50,0,53,{},{},{}
2267,Cigar,Cigarette,5,20,,100,,0,,0,0xFFFFFFFE,7,2,1,,0,0,54,{ bonus2 bSubRace,RC_Insect,3; },{},{}
2268,Smoking_Pipe,Pipe,5,20,,100,,0,,0,0xFFFFFFFE,7,2,1,,0,0,55,{ bonus2 bSubRace,RC_Insect,3; },{},{}
2269,Centimental_Flower,Romantic Flower,5,20,,100,,0,,0,0xFFFFFFFE,7,2,1,,0,0,56,{ bonus2 bSubRace,RC_Plant,3; },{},{}
2270,Centimental_Leaf,Romantic Leaf,5,20,,100,,0,,0,0xFFFFFFFE,7,2,1,,0,0,57,{ bonus2 bSubRace,RC_Plant,3; },{},{}
2271,Jack_A_Dandy,Jack be Dandy,5,45000,,100,,1,,0,0xFFFFFFFE,7,2,256,,0,0,58,{},{},{}
2272,Stop_Post,Stop Post,5,20,,400,,1,,0,0xFFFFFFFF,7,2,256,,0,1,59,{},{},{}
-2273,Doctor_Cap,Doctor Band,5,20,,100,,5,,0,0xFFFFFFFE,7,2,256,,0,1,60,{ bonus bInt,1; },{},{}
+2273,Doctor_Cap,Doctor Band,5,20,,100,,3,,0,0xFFFFFFFE,7,2,256,,0,1,60,{ bonus bInt,1; },{},{}
2274,Ghost_Bandana,Ghost Bandana,5,20,,100,,0,,0,0xFFFFFFFE,7,2,256,,0,1,61,{ bonus bAgi,2; bonus2 bSubEle,Ele_Ghost,10; },{},{}
-2275,Red_Bandana,Red Bandana,5,20,,100,,4,,0,0xFFFFFFFF,7,2,256,,0,1,62,{},{},{}
-2276,Eagle_Eyes,Angled Glasses,5,20,,100,,2,,0,0xFFFFFFFF,7,2,512,,0,0,63,{},{},{}
-2277,Nurse_Cap,Nurse Cap,5,20,,100,,4,,0,0x00008110,7,2,256,,0,1,64,{ bonus bInt,1; },{},{}
+2275,Red_Bandana,Red Bandana,5,20,,100,,2,,0,0xFFFFFFFF,7,2,256,,0,1,62,{},{},{}
+2276,Eagle_Eyes,Angled Glasses,5,20,,100,,1,,0,0xFFFFFFFF,7,2,512,,0,0,63,{},{},{}
+2277,Nurse_Cap,Nurse Cap,5,20,,100,,2,,0,0x00008110,7,2,256,,0,1,64,{ bonus bInt,1; },{},{}
2278,Mr_Smile,Mr. Smile,5,60,,100,,1,,0,0xFFFFFFFF,7,2,513,,0,0,65,{},{},{}
-2279,Bomb_Wick,Bomb Wick,5,20,,100,,2,,0,0xFFFFFFFF,7,2,256,,0,0,66,{},{},{}
-2280,Sahkkat,Sakkat,5,20,,300,,4,,0,0xFFFFFFFF,7,2,256,,0,1,67,{ bonus bAgi,1; },{},{}
+2279,Bomb_Wick,Bomb Wick,5,20,,100,,1,,0,0xFFFFFFFF,7,2,256,,0,0,66,{},{},{}
+2280,Sahkkat,Sakkat,5,20,,300,,3,,0,0xFFFFFFFF,7,2,256,,0,1,67,{ bonus bAgi,1; },{},{}
2281,Phantom_Of_Opera,Opera Masque,5,20,,200,,2,,0,0xFFFFFFFE,7,2,513,,0,0,68,{},{},{}
2282,Spirit_Chain,Halo,5,20,,100,,0,,0,0xFFFFFFFF,7,2,256,,0,0,69,{ bonus2 bSubEle,Ele_Holy,15; },{},{}
-2283,Ear_Mufs,Ear Muffs,5,20,,200,,4,,0,0xFFFFFFFF,7,2,256,,0,1,70,{ bonus2 bResEff,Eff_Curse,1000; },{},{}
-2284,Antler,Antlers,5,20,,500,,8,,0,0xFFFFFFFE,7,2,256,,0,1,71,{},{},{}
-2285,Apple_Of_Archer,Apple of Archer,5,20,,200,,1,,0,0xFFFFFFFE,7,2,256,,30,1,72,{ bonus bDex,3; },{},{}
+2283,Ear_Mufs,Ear Muffs,5,20,,200,,3,,0,0xFFFFFFFF,7,2,256,,0,1,70,{ bonus2 bResEff,Eff_Curse,1000; },{},{}
+2284,Antler,Antlers,5,20,,500,,4,,0,0xFFFFFFFE,7,2,256,,0,1,71,{},{},{}
+2285,Apple_Of_Archer,Apple of Archer,5,20,,200,,0,,0,0xFFFFFFFE,7,2,256,,30,1,72,{ bonus bDex,3; },{},{}
2286,Elven_Ears,Elven Ears,5,20,,100,,0,,0,0xFFFFFFFE,7,2,512,,70,0,73,{},{},{}
-2287,Pirate_Bandana,Pirate Bandana,5,20,,100,,4,,0,0xFFFFFFFE,7,2,256,,0,1,74,{ bonus bStr,1; },{},{}
+2287,Pirate_Bandana,Pirate Bandana,5,20,,100,,3,,0,0xFFFFFFFE,7,2,256,,0,1,74,{ bonus bStr,1; },{},{}
2288,Mr_Scream,Mr. Scream,5,20,,100,,1,,0,0xFFFFFFFE,7,2,513,,0,0,75,{},{},{}
2289,Poo_Poo_Hat,Poo Poo Hat,5,20,,700,,0,,0,0xFFFFFFFF,7,2,256,,0,0,76,{ bonus2 bSubRace,RC_DemiHuman,10; },{},{}
-2290,Funeral_Costume,Funeral Hat,5,3000,,100,,2,,0,0xFFFFFFFF,7,2,256,,0,0,77,{},{},{}
+2290,Funeral_Costume,Funeral Hat,5,3000,,100,,1,,0,0xFFFFFFFF,7,2,256,,0,0,77,{},{},{}
2291,Masquerade,Masquerade,5,20,,100,,0,,0,0xFFFFFFFE,7,2,512,,0,0,78,{ bonus2 bAddRace,RC_DemiHuman,3; },{},{}
2292,Welding_Mask,Welding Mask,5,20,,300,,2,,0,0x00040420,7,2,513,,50,0,79,{ bonus2 bSubEle,Ele_Fire,10; },{},{}
2293,Pretend_Murdered,Pretend Murdered,5,20,,100,,1,,0,0xFFFFFFFF,7,2,256,,0,0,80,{},{},{}
2294,Star_Dust,Stellar,5,20,,100,,1,,0,0xFFFFFFFF,7,2,256,,0,1,81,{},{},{}
2295,Blinker,Blinker,5,1500,,100,,0,,0,0xFFFFFFFE,7,2,512,,0,0,82,{ bonus2 bResEff,Eff_Blind,10000; },{},{}
-2296,Binoculars,Binoculars,5,20,,100,,2,,0,0x00080808,7,2,512,,50,0,83,{ bonus bDex,1; },{},{}
+2296,Binoculars,Binoculars,5,20,,100,,1,,0,0x00080808,7,2,512,,50,0,83,{ bonus bDex,1; },{},{}
2297,Goblini_Mask,Goblin Mask,5,20,,100,,1,,0,0xFFFFFFFE,7,2,513,,0,0,84,{},{},{}
-2298,Green_Feeler,Green Feeler,5,20,,100,,3,,0,0xFFFFFFFF,7,2,256,,0,0,85,{},{},{}
-2299,Viking_Helm,Orc Helm,5,20,,500,,9,,0,0x000654E2,7,2,256,,0,1,86,{},{},{}
+2298,Green_Feeler,Green Feeler,5,20,,100,,2,,0,0xFFFFFFFF,7,2,256,,0,0,85,{},{},{}
+2299,Viking_Helm,Orc Helm,5,20,,500,,5,,0,0x000654E2,7,2,256,,0,1,86,{},{},{}
// Armors
//===================================================================
-2301,Cotton_Shirt,Cotton Shirt,5,10,,100,,10,,0,0xFFFFFFFF,7,2,16,,0,1,0,{},{},{}
-2302,Cotton_Shirt_,Cotton Shirt,5,10,,100,,10,,1,0xFFFFFFFF,7,2,16,,0,1,0,{},{},{}
-2303,Leather_Jacket,Jacket,5,200,,200,,15,,0,0xFFFFFFFF,7,2,16,,0,1,0,{},{},{}
-2304,Leather_Jacket_,Jacket,5,200,,200,,15,,1,0xFFFFFFFF,7,2,16,,0,1,0,{},{},{}
-2305,Adventure_Suit,Adventurer's Suit,5,1000,,300,,20,,0,0xFFFFFFFF,7,2,16,,0,1,0,{},{},{}
-2306,Adventurere's_Suit_,Adventurer's Suit,5,1000,,300,,20,,1,0xFFFFFFFF,7,2,16,,0,1,0,{},{},{}
-2307,Mantle,Mantle,5,10000,,600,,37,,0,0xFFFFFFFE,7,2,16,,0,1,0,{},{},{}
-2308,Mantle_,Mantle,5,10000,,600,,37,,1,0xFFFFFFFE,7,2,16,,0,1,0,{},{},{}
-2309,Coat,Coat,5,22000,,1200,,42,,0,0xFFFFFFFE,7,2,16,,0,1,0,{},{},{}
-2310,Coat_,Coat,5,22000,,1200,,42,,1,0xFFFFFFFE,7,2,16,,0,1,0,{},{},{}
-2311,Mink_Coat,Mink Coat,5,20,,2300,,30,,1,0xFFFFFFFE,7,2,16,,30,1,0,{},{},{}
-2312,Padded_Armor,Padded Armor,5,48000,,2800,,35,,0,0x000654E2,7,2,16,,0,1,0,{ if(isequipped(2656)) { bonus bDef,5; bonus bMaxHP,150; } },{},{}
-2313,Padded_Armor_,Padded Armor,5,48000,,2800,,35,,1,0x000654E2,7,2,16,,0,1,0,{ if(isequipped(2656)) { bonus bDef,5; bonus bMaxHP,150; } },{},{}
-2314,Chain_Mail,Chain Mail,5,65000,,3300,,55,,0,0x000654E2,7,2,16,,0,1,0,{},{},{}
-2315,Chain_Mail_,Chain Mail,5,65000,,3300,,55,,1,0x000654E2,7,2,16,,0,1,0,{},{},{}
-2316,Plate_Armor,Full Plate,5,80000,,4500,,70,,0,0x00004082,7,2,16,,40,1,0,{},{},{}
-2317,Plate_Armor_,Full Plate,5,80000,,4500,,70,,1,0x00004082,7,2,16,,40,1,0,{},{},{}
-2318,Clothes_Of_The_Lord,Lord's Clothes,5,20,,2500,,59,,1,0x00040420,7,2,16,,70,1,0,{ bonus bMdef,5; bonus bInt,1; },{},{}
-2319,Glittering_Clothes,Glittering Jacket,5,20,,2500,,58,,1,0xFFFFFFFE,7,2,16,,60,1,0,{ bonus bMdef,5; bonus2 bAddEff,Eff_Blind,300; },{},{}
-2320,Formal_Suit,Formal Suit,5,20,,300,,40,,1,0xFFFFFFFE,7,2,16,,0,1,0,{},{},{}
-2321,Silk_Robe,Silk Robe,5,8000,,400,,20,,0,0x0085C7B6,7,2,16,,0,1,0,{ bonus bMdef,10; },{},{}
-2322,Silk_Robe_,Silk Robe,5,8000,,400,,20,,1,0x0085C7B6,7,2,16,,0,1,0,{ bonus bMdef,10; },{},{}
-2323,Scapulare,Scapulare,5,6500,,400,,24,,0,0x00008110,7,2,16,,0,1,0,{},{},{}
-2324,Scapulare_,Scapulare,5,6500,,400,,24,,1,0x00008110,7,2,16,,0,1,0,{},{},{}
-2325,Saint_Robe,Saint's Robe,5,54000,,600,,50,,0,0x00048530,7,2,16,,0,1,0,{ bonus bMdef,5; },{},{}
-2326,Saint_Robe_,Saint's Robe,5,54000,,600,,50,,1,0x00048530,7,2,16,,0,1,0,{ bonus bMdef,5; },{},{}
-2327,Holy_Robe,Holy Robe,5,20,,1700,,57,,0,0x00008110,7,2,16,,60,1,0,{ bonus bMdef,5; bonus2 bSubRace,RC_Demon,15; bonus2 bSubEle,Ele_Dark,10; },{},{}
-2328,Wooden_Mail,Wooden Mail,5,5500,,1000,,25,,0,0x000444A2,7,2,16,,0,1,0,{},{},{}
-2329,Wooden_Mail_,Wooden Mail,5,5500,,1000,,25,,1,0x000444A2,7,2,16,,0,1,0,{},{},{}
-2330,Tights,Tights,5,71000,,500,,27,,0,0x00080808,7,2,16,,45,1,0,{ bonus bDex,1; },{},{}
-2331,Tights_,Tights,5,71000,,500,,27,,1,0x00080808,7,2,16,,45,1,0,{ bonus bDex,1; },{},{}
-2332,Silver_Robe,Silver Robe,5,7000,,700,,23,,0,0x00810204,7,2,16,,0,1,0,{},{},{}
-2333,Silver_Robe_,Silver Robe,5,7000,,700,,23,,1,0x00810204,7,2,16,,0,1,0,{},{},{}
-2334,Mage_Coat,Mage Coat,5,20,,600,,40,,0,0x00810204,7,2,16,,50,1,0,{ bonus bInt,1; bonus bMdef,5; },{},{}
-2335,Thief_Clothes,Thief Clothes,5,74000,,100,,40,,0,0x02021040,7,2,16,,0,1,0,{ bonus bAgi,1; },{},{}
-2336,Thief_Clothes_,Thief Clothes,5,74000,,100,,40,,1,0x02021040,7,2,16,,0,1,0,{ bonus bAgi,1; },{},{}
-2337,Ninja_Suit,Ninja Suit,5,20,,1500,,58,,0,0x02021040,7,2,16,,50,1,0,{ bonus bAgi,1; bonus bMdef,3; if(isequipped(2654)) { bonus bUseSPrate,-20; bonus bMaxHP,300; } },{},{}
-2338,Wedding_Dress,Wedding Dress,5,43000,,500,,10,,0,0xFFFFFFFE,7,2,16,,0,1,0,{ bonus bMdef,15; },{},{}
-2339,G_Strings,Pantie,5,1000,,100,,22,,0,0xFFFFFFFF,7,2,16,,0,1,0,{},{},{}
-2340,Novice_Breast,Novice Breastplate,5,89000,,500,,32,,1,0x00000001,7,2,16,,10,1,0,{},{},{}
-2341,Full_Plate_Armor,Legion Plate Armor,5,94000,,5500,,79,,0,0x00004000,7,2,16,,70,1,0,{},{},{}
-2342,Full_Plate_Armor_,Legion Plate Armor,5,102500,,5500,,79,,1,0x00004000,7,2,16,,70,1,0,{},{},{}
-2343,Robe_Of_Casting,Robe of Cast,5,124800,,1100,,40,,0,0x00810200,7,2,16,,75,1,0,{ bonus bCastrate,-3; bonus bMdef,4; },{},{}
-2344,Flame_Sprits_Armor,Lucius's Fierce Armor of Volcano,5,136000,,2200,,25,,0,0x000444A2,7,2,16,,45,1,0,{ bonus bDefEle,Ele_Fire; },{},{}
-2345,Flame_Sprits_Armor_,Lucius's Fierce Armor of Volcano,5,136000,,2200,,25,,1,0xFFFFFFFE,7,2,16,,45,1,0,{ bonus bDefEle,Ele_Fire; },{},{}
-2346,Water_Sprits_Armor,Saphien's Armor of Ocean,5,136000,,2200,,25,,0,0x000444A2,7,2,16,,45,1,0,{ bonus bDefEle,Ele_Water; },{},{}
-2347,Water_Sprits_Armor_,Saphien's Armor of Ocean,5,136000,,2200,,25,,1,0xFFFFFFFE,7,2,16,,45,1,0,{ bonus bDefEle,Ele_Water; },{},{}
-2348,Wind_Sprits_Armor,Aebecee's Raging Typhoon Armor,5,136000,,2200,,25,,0,0x000444A2,7,2,16,,45,1,0,{ bonus bDefEle,Ele_Wind; },{},{}
-2349,Wind_Sprits_Armor_,Aebecee's Raging Typhoon Armor,5,136000,,2200,,25,,1,0xFFFFFFFE,7,2,16,,45,1,0,{ bonus bDefEle,Ele_Wind; },{},{}
-2350,Earth_Sprits_Armor,Claytos Cracking Earth Armor,5,136000,,2200,,25,,0,0x000444A2,7,2,16,,45,1,0,{ bonus bDefEle,Ele_Earth; },{},{}
-2351,Earth_Sprits_Armor_,Claytos Cracking Earth Armor,5,136000,,2200,,25,,1,0xFFFFFFFE,7,2,16,,45,1,0,{ bonus bDefEle,Ele_Earth; },{},{}
-2352,Novice_Plate,Tattered Novice Ninja Suit,5,1,,1,,25,,0,0x00000001,7,2,16,,0,0,0,{},{},{}
-2353,Odin's_Blessing,Odin's Blessing,5,30000,,2500,,53,,1,0xFFFFFFFE,7,2,16,,65,1,0,{},{},{}
-2354,Goibne's_Armor,Goibne's Armor,5,50000,,3500,,58,,0,0xFFFFFFFE,7,2,16,,54,1,0,{ bonus bVit,2; bonus bMaxHPrate,10; },{},{}
-2355,Angel's_Protection,Angelic Protection,5,10000,,600,,25,,1,0x00000001,7,2,16,,40,1,0,{ bonus bMdef,20; if(isequipped(2116,2420,2521,5125)) { bonus bMaxHP,900; bonus bMaxSP,100; bonus3 bAutoSpellWhenHit,"HP_ASSUMPTIO",1,30; } },{},{}
-2356,Vestment_Of_Grace,Blessed Holy Robe,5,20,,2500,,45,,1,0x00008100,7,2,16,,70,1,0,{ bonus bMdef,5; bonus2 bResEff,Eff_Blind,8000; },{},{}
-2357,Valkyrie_Armor,Valkyrian Armor,5,0,,2800,,55,,1,0xFFFFFFFE,2,2,16,,1,1,0,{ bonus bAllStats,1; bonus bUnbreakableArmor,0; if(BaseClass==Job_Mage||BaseClass==Job_Archer||BaseClass==Job_Acolyte) bonus2 bResEff,Eff_Silence,5000; else if(BaseClass==Job_Swordman||BaseClass==Job_Merchant||BaseClass==Job_Thief) bonus2 bResEff,Eff_Stun,5000; },{},{}
+2301,Cotton_Shirt,Cotton Shirt,5,10,,100,,1,,0,0xFFFFFFFF,7,2,16,,0,1,0,{},{},{}
+2302,Cotton_Shirt_,Cotton Shirt,5,10,,100,,1,,1,0xFFFFFFFF,7,2,16,,0,1,0,{},{},{}
+2303,Leather_Jacket,Jacket,5,200,,200,,2,,0,0xFFFFFFFF,7,2,16,,0,1,0,{},{},{}
+2304,Leather_Jacket_,Jacket,5,200,,200,,2,,1,0xFFFFFFFF,7,2,16,,0,1,0,{},{},{}
+2305,Adventure_Suit,Adventurer's Suit,5,1000,,300,,3,,0,0xFFFFFFFF,7,2,16,,0,1,0,{},{},{}
+2306,Adventurere's_Suit_,Adventurer's Suit,5,1000,,300,,3,,1,0xFFFFFFFF,7,2,16,,0,1,0,{},{},{}
+2307,Mantle,Mantle,5,10000,,600,,4,,0,0xFFFFFFFE,7,2,16,,0,1,0,{},{},{}
+2308,Mantle_,Mantle,5,10000,,600,,4,,1,0xFFFFFFFE,7,2,16,,0,1,0,{},{},{}
+2309,Coat,Coat,5,22000,,1200,,5,,0,0xFFFFFFFE,7,2,16,,0,1,0,{},{},{}
+2310,Coat_,Coat,5,22000,,1200,,5,,1,0xFFFFFFFE,7,2,16,,0,1,0,{},{},{}
+2311,Mink_Coat,Mink Coat,5,20,,2300,,6,,1,0xFFFFFFFE,7,2,16,,30,1,0,{},{},{}
+2312,Padded_Armor,Padded Armor,5,48000,,2800,,7,,0,0x000654E2,7,2,16,,0,1,0,{ if(isequipped(2656)) { bonus bDef,5; bonus bMaxHP,150; } },{},{}
+2313,Padded_Armor_,Padded Armor,5,48000,,2800,,7,,1,0x000654E2,7,2,16,,0,1,0,{ if(isequipped(2656)) { bonus bDef,5; bonus bMaxHP,150; } },{},{}
+2314,Chain_Mail,Chain Mail,5,65000,,3300,,8,,0,0x000654E2,7,2,16,,0,1,0,{},{},{}
+2315,Chain_Mail_,Chain Mail,5,65000,,3300,,8,,1,0x000654E2,7,2,16,,0,1,0,{},{},{}
+2316,Plate_Armor,Full Plate,5,80000,,4500,,10,,0,0x00004082,7,2,16,,40,1,0,{},{},{}
+2317,Plate_Armor_,Full Plate,5,80000,,4500,,10,,1,0x00004082,7,2,16,,40,1,0,{},{},{}
+2318,Clothes_Of_The_Lord,Lord's Clothes,5,20,,2500,,8,,1,0x00040420,7,2,16,,70,1,0,{ bonus bMdef,5; bonus bInt,1; },{},{}
+2319,Glittering_Clothes,Glittering Jacket,5,20,,2500,,7,,1,0xFFFFFFFE,7,2,16,,60,1,0,{ bonus bMdef,5; bonus2 bAddEff,Eff_Blind,300; },{},{}
+2320,Formal_Suit,Formal Suit,5,20,,300,,5,,1,0xFFFFFFFE,7,2,16,,0,1,0,{},{},{}
+2321,Silk_Robe,Silk Robe,5,8000,,400,,3,,0,0x0085C7B6,7,2,16,,0,1,0,{ bonus bMdef,10; },{},{}
+2322,Silk_Robe_,Silk Robe,5,8000,,400,,3,,1,0x0085C7B6,7,2,16,,0,1,0,{ bonus bMdef,10; },{},{}
+2323,Scapulare,Scapulare,5,6500,,400,,4,,0,0x00008110,7,2,16,,0,1,0,{},{},{}
+2324,Scapulare_,Scapulare,5,6500,,400,,4,,1,0x00008110,7,2,16,,0,1,0,{},{},{}
+2325,Saint_Robe,Saint's Robe,5,54000,,600,,6,,0,0x00048530,7,2,16,,0,1,0,{ bonus bMdef,5; },{},{}
+2326,Saint_Robe_,Saint's Robe,5,54000,,600,,6,,1,0x00048530,7,2,16,,0,1,0,{ bonus bMdef,5; },{},{}
+2327,Holy_Robe,Holy Robe,5,20,,1700,,7,,0,0x00008110,7,2,16,,60,1,0,{ bonus bMdef,5; bonus2 bSubRace,RC_Demon,15; bonus2 bSubEle,Ele_Dark,10; },{},{}
+2328,Wooden_Mail,Wooden Mail,5,5500,,1000,,4,,0,0x000444A2,7,2,16,,0,1,0,{},{},{}
+2329,Wooden_Mail_,Wooden Mail,5,5500,,1000,,4,,1,0x000444A2,7,2,16,,0,1,0,{},{},{}
+2330,Tights,Tights,5,71000,,500,,6,,0,0x00080808,7,2,16,,45,1,0,{ bonus bDex,1; },{},{}
+2331,Tights_,Tights,5,71000,,500,,6,,1,0x00080808,7,2,16,,45,1,0,{ bonus bDex,1; },{},{}
+2332,Silver_Robe,Silver Robe,5,7000,,700,,4,,0,0x00810204,7,2,16,,0,1,0,{},{},{}
+2333,Silver_Robe_,Silver Robe,5,7000,,700,,4,,1,0x00810204,7,2,16,,0,1,0,{},{},{}
+2334,Mage_Coat,Mage Coat,5,20,,600,,5,,0,0x00810204,7,2,16,,50,1,0,{ bonus bMdef,5; bonus bInt,1; },{},{}
+2335,Thief_Clothes,Thief Clothes,5,74000,,100,,6,,0,0x02021040,7,2,16,,0,1,0,{ bonus bAgi,1; },{},{}
+2336,Thief_Clothes_,Thief Clothes,5,74000,,100,,6,,1,0x02021040,7,2,16,,0,1,0,{ bonus bAgi,1; },{},{}
+2337,Ninja_Suit,Ninja Suit,5,20,,1500,,7,,0,0x02021040,7,2,16,,50,1,0,{ bonus bAgi,1; bonus bMdef,3; if(isequipped(2654)) { bonus bUseSPrate,-20; bonus bMaxHP,300; } },{},{}
+2338,Wedding_Dress,Wedding Dress,5,43000,,500,,0,,0,0xFFFFFFFE,7,2,16,,0,1,0,{ bonus bMdef,15; },{},{}
+2339,G_Strings,Pantie,5,1000,,100,,4,,0,0xFFFFFFFF,7,2,16,,0,1,0,{},{},{}
+2340,Novice_Breast,Novice Breastplate,5,89000,,500,,4,,1,0x00000001,7,2,16,,10,1,0,{},{},{}
+2341,Full_Plate_Armor,Legion Plate Armor,5,94000,,5500,,11,,0,0x00004000,7,2,16,,70,1,0,{},{},{}
+2342,Full_Plate_Armor_,Legion Plate Armor,5,102500,,5500,,11,,1,0x00004000,7,2,16,,70,1,0,{},{},{}
+2343,Robe_Of_Casting,Robe of Cast,5,124800,,1100,,5,,0,0x00810200,7,2,16,,75,1,0,{ bonus bCastrate,-3; bonus bMdef,4; },{},{}
+2344,Flame_Sprits_Armor,Lucius's Fierce Armor of Volcano,5,136000,,2200,,4,,0,0x000444A2,7,2,16,,45,1,0,{ bonus bDefEle,Ele_Fire; },{},{}
+2345,Flame_Sprits_Armor_,Lucius's Fierce Armor of Volcano,5,136000,,2200,,4,,1,0xFFFFFFFE,7,2,16,,45,1,0,{ bonus bDefEle,Ele_Fire; },{},{}
+2346,Water_Sprits_Armor,Saphien's Armor of Ocean,5,136000,,2200,,4,,0,0x000444A2,7,2,16,,45,1,0,{ bonus bDefEle,Ele_Water; },{},{}
+2347,Water_Sprits_Armor_,Saphien's Armor of Ocean,5,136000,,2200,,4,,1,0xFFFFFFFE,7,2,16,,45,1,0,{ bonus bDefEle,Ele_Water; },{},{}
+2348,Wind_Sprits_Armor,Aebecee's Raging Typhoon Armor,5,136000,,2200,,4,,0,0x000444A2,7,2,16,,45,1,0,{ bonus bDefEle,Ele_Wind; },{},{}
+2349,Wind_Sprits_Armor_,Aebecee's Raging Typhoon Armor,5,136000,,2200,,4,,1,0xFFFFFFFE,7,2,16,,45,1,0,{ bonus bDefEle,Ele_Wind; },{},{}
+2350,Earth_Sprits_Armor,Claytos Cracking Earth Armor,5,136000,,2200,,4,,0,0x000444A2,7,2,16,,45,1,0,{ bonus bDefEle,Ele_Earth; },{},{}
+2351,Earth_Sprits_Armor_,Claytos Cracking Earth Armor,5,136000,,2200,,4,,1,0xFFFFFFFE,7,2,16,,45,1,0,{ bonus bDefEle,Ele_Earth; },{},{}
+2352,Novice_Plate,Tattered Novice Ninja Suit,5,1,,1,,4,,0,0x00000001,7,2,16,,0,0,0,{},{},{}
+2353,Odin's_Blessing,Odin's Blessing,5,30000,,2500,,6,,1,0xFFFFFFFE,7,2,16,,65,1,0,{},{},{}
+2354,Goibne's_Armor,Goibne's Armor,5,50000,,3500,,7,,0,0xFFFFFFFE,7,2,16,,54,1,0,{ bonus bVit,2; bonus bMaxHPrate,10; },{},{}
+2355,Angel's_Protection,Angelic Protection,5,10000,,600,,4,,1,0x00000001,7,2,16,,40,1,0,{ bonus bMdef,20; if(isequipped(2116,2420,2521,5125)) { bonus bMaxHP,900; bonus bMaxSP,100; bonus3 bAutoSpellWhenHit,"HP_ASSUMPTIO",1,30; } },{},{}
+2356,Vestment_Of_Grace,Blessed Holy Robe,5,20,,2500,,5,,1,0x00008100,7,2,16,,70,1,0,{ bonus bMdef,5; bonus2 bResEff,Eff_Blind,8000; },{},{}
+2357,Valkyrie_Armor,Valkyrian Armor,5,0,,2800,,6,,1,0xFFFFFFFE,2,2,16,,1,1,0,{ bonus bAllStats,1; bonus bUnbreakableArmor,0; if(BaseClass==Job_Mage||BaseClass==Job_Archer||BaseClass==Job_Acolyte) bonus2 bResEff,Eff_Silence,5000; else if(BaseClass==Job_Swordman||BaseClass==Job_Merchant||BaseClass==Job_Thief) bonus2 bResEff,Eff_Stun,5000; },{},{}
2358,Dress_Of_Angel,Angel's Dress,5,20,,1000,,5,,0,0xFFFFFFFF,7,2,16,,1,0,0,{ bonus bLuk,4; },{},{}
-2359,Ninja_Suit_,Ninja Suit,5,20,,1500,,58,,1,0x02021040,7,2,16,,50,1,0,{ bonus bAgi,1; bonus bMdef,3; if(isequipped(2654)) { bonus bUseSPrate,-20; bonus bMaxHP,300; } },{},{}
-2360,Robe_Of_Casting_,Robe of Cast,5,124800,,1100,,40,,1,0x00810200,7,2,16,,75,1,0,{ bonus bCastrate,-3; bonus bMdef,4; },{},{}
+2359,Ninja_Suit_,Ninja Suit,5,20,,1500,,7,,1,0x02021040,7,2,16,,50,1,0,{ bonus bAgi,1; bonus bMdef,3; if(isequipped(2654)) { bonus bUseSPrate,-20; bonus bMaxHP,300; } },{},{}
+2360,Robe_Of_Casting_,Robe of Cast,5,124800,,1100,,5,,1,0x00810200,7,2,16,,75,1,0,{ bonus bCastrate,-3; bonus bMdef,4; },{},{}
//2361,Blue_Aodai,Blue Robe,5,20,,500,,0,,0,0xFFFFFFFE,7,2,16,,1,1,0,{ bonus bAllStats,3; bonus bMdef,5; },{},{}
//2362,Red_Aodai,Red Robe,5,20,,500,,0,,0,0xFFFFFFFE,7,2,16,,1,1,0,{ bonus bAllStats,3; bonus bMdef,5; },{},{}
//2363,White_Aodai,White Robe,5,20,,500,,0,,0,0x00000001,7,2,16,,1,1,0,{ bonus bAllStats,3; bonus bMdef,5; },{},{}
-2364,Meteo_Plate_Armor,Meteo Plate Armor,5,20,,3000,,85,,1,0x000444A2,2,2,16,,55,1,0,{ bonus2 bResEff,Eff_Stun,3000; bonus2 bResEff,Eff_Freeze,3000; },{},{}
-2365,Orleans_Gown,Orleans's Gown,5,20,,300,,15,,1,0xFFFFFFFE,2,2,16,,55,1,0,{ bonus bCastrate,15; bonus bNoCastCancel,0; },{},{}
-2366,Divine_Cloth,Divine Cloth,5,20,,1500,,50,,1,0xFFFFFFFE,2,2,16,,55,1,0,{ bonus2 bResEff,Eff_Curse,500; bonus2 bResEff,Eff_Silence,500; bonus2 bResEff,Eff_Stun,500; bonus2 bResEff,Eff_Stone,500; bonus2 bResEff,Eff_Sleep,500; },{},{}
-2367,Sniping_Suit,Sniping Suit,5,20,,750,,42,,1,0x00000800,2,2,16,,50,1,0,{ bonus bMdef,5; bonus bCritical,6+(readparam(bLuk)/10); bonus bDelayRate,-23; },{},{}
+2364,Meteo_Plate_Armor,Meteo Plate Armor,5,20,,3000,,10,,1,0x000444A2,2,2,16,,55,1,0,{ bonus2 bResEff,Eff_Stun,3000; bonus2 bResEff,Eff_Freeze,3000; },{},{}
+2365,Orleans_Gown,Orleans's Gown,5,20,,300,,2,,1,0xFFFFFFFE,2,2,16,,55,1,0,{ bonus bCastrate,15; bonus bNoCastCancel,0; },{},{}
+2366,Divine_Cloth,Divine Cloth,5,20,,1500,,6,,1,0xFFFFFFFE,2,2,16,,55,1,0,{ bonus2 bResEff,Eff_Curse,500; bonus2 bResEff,Eff_Silence,500; bonus2 bResEff,Eff_Stun,500; bonus2 bResEff,Eff_Stone,500; bonus2 bResEff,Eff_Sleep,500; },{},{}
+2367,Sniping_Suit,Sniping Suit,5,20,,750,,5,,1,0x00000800,2,2,16,,50,1,0,{ bonus bMdef,5; bonus bCritical,6+(readparam(bLuk)/10); bonus bDelayRate,-23; },{},{}
2368,Golden_Armor,Golden Armor,5,20,,2000,,4,,0,0xFFFFFFFF,7,2,16,,0,0,0,{ bonus bMdef,4; },{},{}
2369,Freyja_Overcoat,Freyja Overcoat,5,0,,500,,12,,0,0xFFFFFFFE,7,2,16,,0,0,0,{ bonus bUnbreakableArmor,0; bonus2 bSubRace,RC_DemiHuman,10; if ((isequipped(2428)) && (isequipped(2533)) && (isequipped(5306))) { bonus2 bSubRace,RC_DemiHuman,10; bonus bMaxHPrate,20; bonus2 bResEff,Eff_Freeze,10000; skill "WZ_FIREPILLAR",10; } },{},{}
2370,Used_Mage_Coat,Used Mage Coat,5,0,,0,,15,,0,0xFFFFFFFF,7,2,16,,0,0,0,{ bonus bMaxHP,300; bonus bMaxSP,30; bonus bBaseAtk,10; bonus bAGI,1; },{},{}
-2371,G_Strings_,Pantie,5,1000,,100,,22,,1,0xFFFFFFFF,7,2,16,,0,1,0,{},{},{}
-2372,Mage_Coat_,Mage Coat,5,20,,600,,40,,1,0x00810204,7,2,16,,50,1,0,{ bonus bMdef,5; bonus bInt,1; },{},{}
-2373,Holy_Robe_,Holy Robe,5,20,,1700,,57,,1,0x00008110,7,2,16,,60,1,0,{ bonus bMdef,5; bonus2 bSubRace,RC_Demon,15; bonus2 bSubEle,Ele_Dark,10; },{},{}
-2374,Diabolus_Robe,Diabolus Robe,5,20,,300,,57,,1,0x00098B1C,2,2,16,,60,1,0,{ bonus bMaxSP,150; bonus bMdef,5; bonus bHealPower,6; bonus bDelayRate,-10; if (isequipped(2729)) { bonus2 bAddRace,RC_NonBoss,3; bonus2 bAddRace,RC_Boss,3; bonus bMatkRate,3; } },{},{}
-2375,Diabolus_Armor,Diabolus Armor,5,20,,600,,79,,1,0x000654E2,2,2,16,,60,1,0,{ bonus bStr,2; bonus bDex,1; bonus bMaxHP,150; bonus2 bResEff,Eff_Stun,500; bonus2 bResEff,Eff_Stone,500; if (isequipped(2729)) { bonus2 bAddRace,RC_NonBoss,3; bonus2 bAddRace,RC_Boss,3; bonus bMatkRate,3; } },{},{}
-2376,Assaulter_Plate,Assaulter Plate,5,10,,0,,57,,1,0x006444A2,7,2,16,,80,1,0,{ bonus bMaxHP,150; bonus bMdef,2; bonus2 bSubRace,RC_DemiHuman,2; if (isequipped(2538,2435)) { bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bVit,3; bonus bMaxHPRate,12; bonus bHealpower2,10; bonus bAddItemHealRate,10; autobonus2 "{ bonus2 bHPRegenRate,600,1000; }",5,10000,BF_WEAPON,"{ specialeffect2 EF_HEAL; }"; }; },{},{}
-2377,Elite_Engineer_Armor,Elite Engineer Armor,5,10,,0,,50,,1,0x00040420,7,2,16,,80,1,0,{ bonus bMaxHP,150; bonus bMdef,2; bonus2 bSubRace,RC_DemiHuman,2; if (isequipped(2538,2435)) { bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bStr,3; bonus bMaxHPRate,12; bonus2 bSkillAtk,"MC_MAMMONITE",20; bonus2 bSkillHeal,"AM_POTIONPITCHER",10; bonus2 bSkillHeal2,"AM_POTIONPITCHER",10; bonus2 bSkillHeal2,"AL_HEAL",10; bonus bUnbreakableArmor,0; }; },{},{}
-2378,Assassin_Robe,Assassin Robe,5,10,,0,,41,,1,0x02021040,7,2,16,,80,1,0,{ bonus bMaxHP,150; bonus bMdef,2; bonus2 bSubRace,RC_DemiHuman,2; if (isequipped(2538,2435)) { bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bAgi,3; bonus bMaxHPRate,12; bonus bCritical,5; bonus bAspdRate,5; autobonus "{ bonus2 bHPRegenRate,300,1000; }",10,10000,BF_WEAPON,"{ specialeffect2 EF_HEAL; }"; }; },{},{}
-2379,Warlock_Battle_Robe,Warlock's Battle Robe,5,10,,0,,36,,1,0x00810204,7,2,16,,80,1,0,{ bonus bMaxHP,150; bonus bMdef,2; bonus2 bSubRace,RC_DemiHuman,2; if (isequipped(2539,2436)) { bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bInt,3; bonus bMaxHPRate,12; bonus2 bResEff,Eff_Stun,2000; autobonus2 "{ bonus bDefEle,Ele_Ghost; }",30,10000,BF_WEAPON,"{ specialeffect2 EF_ENERGYCOAT; }"; }; },{},{}
-2380,Medic_Robe,Medic's Robe,5,10,,0,,25,,1,0x00008110,7,2,16,,80,1,0,{ bonus bMaxHP,150; bonus bMdef,2; bonus2 bSubRace,RC_DemiHuman,2; if (isequipped(2539,2436)) { bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bInt,3; bonus bMaxHPRate,12; bonus2 bCastrate,156,-50; bonus bHealPower,6; autobonus2 "{ bonus bDefEle,Ele_Ghost; }",30,10000,BF_WEAPON,"{ specialeffect2 EF_ENERGYCOAT; }"; }; },{},{}
-2381,Elite_Archer_Suit,Elite Archer Suit,5,10,,0,,35,,1,0x00080808,7,2,16,,80,1,0,{ bonus bMaxHP,150; bonus bMdef,2; bonus2 bSubRace,RC_DemiHuman,2; if (isequipped(2539,2436)) { bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bDex,3; bonus bMaxHPRate,12; bonus bLongAtkDef,10; bonus bDelayRate,-25; }; },{},{}
-2382,Elite_Shooter_Suit,Elite Shooter Suit,5,10,,0,,25,,1,0x01000000,7,2,16,,80,1,0,{ bonus bMaxHP,150; bonus bMdef,2; bonus2 bSubRace,RC_DemiHuman,2; if (isequipped(2540,2437)) { bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bDex,3; bonus bMaxHPRate,12; bonus bLongAtkDef,10; bonus bDelayRate,-25; }; },{},{}
-2383,Brynhild,Brynhild,5,20,,400,,120,,0,0xFFFFFFFF,7,2,16,,94,0,0,{ bonus bMdef,10; bonus bMaxHP,20*BaseLevel; bonus bMaxSP,5*BaseLevel; bonus2 bAddRace,RC_NonBoss,10; bonus2 bAddRace,RC_Boss,10; bonus bMatkRate,10; bonus bUnbreakableArmor,0; bonus bNoKnockback,0; },{},{}
-2384,Spritual_Tunic,Spiritual Tunic,5,20,,0,,38,,0,0xFFFFFFFF,7,2,16,,0,0,0,{ bonus bMaxHP,800; bonus2 bResEff,Eff_Freeze,10000; bonus2 bSubEle,Ele_Earth,20; bonus2 bSubEle,Ele_Fire,20; bonus2 bSubEle,Ele_Wind,20; bonus2 bSubEle,Ele_Poison,20; bonus2 bSubEle,Ele_Holy,20; bonus2 bSubEle,Ele_Dark,20; bonus2 bSubEle,Ele_Ghost,20; bonus2 bSubEle,Ele_Undead,20; },{},{}
-2385,Recuperative_Armor,Recuperative Armor,5,20,,0,,67,,0,0xFFFFFFFF,7,2,16,,0,0,0,{ bonus bNoRegen,1; bonus bNoRegen,2; bonus bHPGainValue,60; bonus bSPGainValue,6; bonus bMagicHPGainValue,60; bonus bMagicSPGainValue,6; },{},{ heal 0,-100; }
-2386,Chameleon_Armor,Chameleon Armor,5,20,,1700,,55,,0,0x00CFFF80,2,2,16,,70,1,0,{ bonus bMaxHP,(BaseLevel*7); bonus bMaxSP,(BaseLevel/2); autobonus2 "{ bonus bNoMagicDamage,100; }",10,2000,BF_MAGIC,"{ specialeffect2 EF_ENERGYCOAT; }"; if( BaseClass == Job_Mage || BaseClass == Job_Archer || BaseClass == Job_Acolyte ) bonus bMdef,5; else if( BaseClass == Job_Swordman || BaseClass == Job_Merchant || BaseClass == Job_Thief ) bonus bDef,3; },{},{}
-2387,Sprint_Mail,Sprint Mail,5,20,,1000,,20,,1,0x00CFFF80,2,2,16,,0,1,0,{ bonus bVit,1; bonus bHPrecovRate,5; bonus bAddItemHealRate,3; bonus2 bSkillHeal,"AL_HEAL",3; if( isequipped(2440,2744) ) { bonus bMaxHPrate,7; bonus bMaxSPrate,7; bonus bCastrate,-3; bonus bDelayrate,-15; } },{},{}
-2388,Kandura,Kandura,5,20,,300,,36,,1,0x00001000,2,2,16,,70,1,0,{ bonus bAgi,1; bonus bFlee,5; bonus bAspdRate,2; },{},{}
-2389,Armor_Of_Naga,Armor of Naga,5,20,,1000,,45,,1,0x00CFFF80,2,2,16,,0,1,0,{ bonus bMdef,2; autobonus "{ bonus bBaseAtk,20; }",10,10000,BF_WEAPON,"{ specialeffect2 EF_ENHANCE; }"; },{},{}
-2390,Improved_Tights,Improved Tights,5,20,,400,,38,,1,0x00080808,2,2,16,,75,1,0,{ bonus bMdef,2; bonus bFlee2,3; },{},{}
-2391,Life_Link,Life Link,5,20,,3500,,75,,1,0x00004082,2,2,16,,82,1,0,{ bonus bVit,2; bonus bMdef,5; bonus bHPrecovRate,50; },{},{}
-2392,Old_Pant,Old Green Pantie,5,0,,0,,60,,0,0xFFFFFFFF,7,2,16,,0,0,0,{ bonus bStr,2; bonus bVit,2; bonus bMaxHP,200; bonus3 bAutoSpellWhenHit,"MO_CALLSPIRITS",5,20; bonus bMdef,1; },{},{}
-2393,N_Adventurer's_Suit,Novice Adventurer's Suit,5,0,,0,,45,,1,0xFFFFFFFF,7,2,16,,0,0,0,{},{},{}
-2394,Krieger_Suit1,Glorious Suit,5,20,,0,,10,,0,0xFFFFFFFE,7,2,16,,81,1,0,{ bonus bMaxHPRate,20; bonus2 bSubRace,RC_DemiHuman,7; if( isequipped(2444,2549) ) { bonus2 bAddRace,RC_NonBoss,5; bonus2 bAddRace,RC_Boss,5; bonus bMatkRate,5; bonus2 bResEff,Eff_Freeze,10000; bonus2 bSkillHeal2,"AM_POTIONPITCHER",3; bonus2 bSkillHeal2,"AL_HEAL",3; bonus2 bSkillHeal2,"PR_SANCTUARY",3; } },{},{}
-2395,Krieger_Suit2,Glorious Popularized Suit,5,20,,0,,10,,0,0xFFFFFFFE,7,2,16,,61,1,0,{ bonus bMaxHP,600; bonus bSPrecovRate,10; },{},{}
-2396,Krieger_Suit3,Glorious Mass-Production Suit,5,20,,0,,10,,0,0xFFFFFFFE,7,2,16,,0,1,0,{ bonus bMaxHP,500; },{},{}
-2397,Incredible_Coat,Incredible Event Resignation Coat,5,10,,900,,10,,0,0xFFFFFFFE,7,2,16,,0,1,0,{},{},{}
+2371,G_Strings_,Pantie,5,1000,,100,,4,,1,0xFFFFFFFF,7,2,16,,0,1,0,{},{},{}
+2372,Mage_Coat_,Mage Coat,5,20,,600,,5,,1,0x00810204,7,2,16,,50,1,0,{ bonus bMdef,5; bonus bInt,1; },{},{}
+2373,Holy_Robe_,Holy Robe,5,20,,1700,,7,,1,0x00008110,7,2,16,,60,1,0,{ bonus bMdef,5; bonus2 bSubRace,RC_Demon,15; bonus2 bSubEle,Ele_Dark,10; },{},{}
+2374,Diabolus_Robe,Diabolus Robe,5,20,,300,,6,,1,0x00098B1C,2,2,16,,55,1,0,{ bonus bMaxSP,150; bonus bMdef,5; bonus bHealPower,6; bonus bDelayRate,-10; if (isequipped(2729)) { bonus2 bAddRace,RC_NonBoss,3; bonus2 bAddRace,RC_Boss,3; bonus bMatkRate,3; } },{},{}
+2375,Diabolus_Armor,Diabolus Armor,5,20,,600,,7,,1,0x000654E2,2,2,16,,55,1,0,{ bonus bStr,2; bonus bDex,1; bonus bMaxHP,150; bonus2 bResEff,Eff_Stun,500; bonus2 bResEff,Eff_Stone,500; if (isequipped(2729)) { bonus2 bAddRace,RC_NonBoss,3; bonus2 bAddRace,RC_Boss,3; bonus bMatkRate,3; } },{},{}
+2376,Assaulter_Plate,Assaulter Plate,5,10,,0,,7,,1,0x006444A2,7,2,16,,80,1,0,{ bonus bMaxHP,150; bonus bMdef,2; bonus2 bSubRace,RC_DemiHuman,2; if (isequipped(2538,2435)) { bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bVit,3; bonus bMaxHPRate,12; bonus bHealpower2,10; bonus bAddItemHealRate,10; autobonus2 "{ bonus2 bHPRegenRate,600,1000; }",5,10000,BF_WEAPON,"{ specialeffect2 EF_HEAL; }"; }; },{},{}
+2377,Elite_Engineer_Armor,Elite Engineer Armor,5,10,,0,,7,,1,0x00040420,7,2,16,,80,1,0,{ bonus bMaxHP,150; bonus bMdef,2; bonus2 bSubRace,RC_DemiHuman,2; if (isequipped(2538,2435)) { bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bStr,3; bonus bMaxHPRate,12; bonus2 bSkillAtk,"MC_MAMMONITE",20; bonus2 bSkillHeal,"AM_POTIONPITCHER",10; bonus2 bSkillHeal2,"AM_POTIONPITCHER",10; bonus2 bSkillHeal2,"AL_HEAL",10; bonus bUnbreakableArmor,0; }; },{},{}
+2378,Assassin_Robe,Assassin Robe,5,10,,0,,7,,1,0x02021040,7,2,16,,80,1,0,{ bonus bMaxHP,150; bonus bMdef,2; bonus2 bSubRace,RC_DemiHuman,2; if (isequipped(2538,2435)) { bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bAgi,3; bonus bMaxHPRate,12; bonus bCritical,5; bonus bAspdRate,5; autobonus "{ bonus2 bHPRegenRate,300,1000; }",10,10000,BF_WEAPON,"{ specialeffect2 EF_HEAL; }"; }; },{},{}
+2379,Warlock_Battle_Robe,Warlock's Battle Robe,5,10,,0,,3,,1,0x00810204,7,2,16,,80,1,0,{ bonus bMaxHP,150; bonus bMdef,2; bonus2 bSubRace,RC_DemiHuman,2; if (isequipped(2539,2436)) { bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bInt,3; bonus bMaxHPRate,12; bonus2 bResEff,Eff_Stun,2000; autobonus2 "{ bonus bDefEle,Ele_Ghost; }",30,10000,BF_WEAPON,"{ specialeffect2 EF_ENERGYCOAT; }"; }; },{},{}
+2380,Medic_Robe,Medic's Robe,5,10,,0,,3,,1,0x00008110,7,2,16,,80,1,0,{ bonus bMaxHP,150; bonus bMdef,2; bonus2 bSubRace,RC_DemiHuman,2; if (isequipped(2539,2436)) { bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bInt,3; bonus bMaxHPRate,12; bonus2 bCastrate,156,-50; bonus bHealPower,6; autobonus2 "{ bonus bDefEle,Ele_Ghost; }",30,10000,BF_WEAPON,"{ specialeffect2 EF_ENERGYCOAT; }"; }; },{},{}
+2381,Elite_Archer_Suit,Elite Archer Suit,5,10,,0,,3,,1,0x00080808,7,2,16,,80,1,0,{ bonus bMaxHP,150; bonus bMdef,2; bonus2 bSubRace,RC_DemiHuman,2; if (isequipped(2539,2436)) { bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bDex,3; bonus bMaxHPRate,12; bonus bLongAtkDef,10; bonus bDelayRate,-25; }; },{},{}
+2382,Elite_Shooter_Suit,Elite Shooter Suit,5,10,,0,,3,,1,0x01000000,7,2,16,,80,1,0,{ bonus bMaxHP,150; bonus bMdef,2; bonus2 bSubRace,RC_DemiHuman,2; if (isequipped(2540,2437)) { bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bDex,3; bonus bMaxHPRate,12; bonus bLongAtkDef,10; bonus bDelayRate,-25; }; },{},{}
+2383,Brynhild,Brynhild,5,20,,400,,10,,0,0xFFFFFFFF,7,2,16,,94,0,0,{ bonus bMdef,10; bonus bMaxHP,20*BaseLevel; bonus bMaxSP,5*BaseLevel; bonus2 bAddRace,RC_NonBoss,10; bonus2 bAddRace,RC_Boss,10; bonus bMatkRate,10; bonus bUnbreakableArmor,0; bonus bNoKnockback,0; },{},{}
+2384,Spritual_Tunic,Spiritual Tunic,5,20,,0,,10,,0,0xFFFFFFFF,7,2,16,,0,0,0,{ bonus bMaxHP,800; bonus2 bResEff,Eff_Freeze,10000; bonus2 bSubEle,Ele_Earth,20; bonus2 bSubEle,Ele_Fire,20; bonus2 bSubEle,Ele_Wind,20; bonus2 bSubEle,Ele_Poison,20; bonus2 bSubEle,Ele_Holy,20; bonus2 bSubEle,Ele_Dark,20; bonus2 bSubEle,Ele_Ghost,20; bonus2 bSubEle,Ele_Undead,20; },{},{}
+2385,Recuperative_Armor,Recuperative Armor,5,20,,0,,12,,0,0xFFFFFFFF,7,2,16,,0,0,0,{ bonus bNoRegen,1; bonus bNoRegen,2; bonus bHPGainValue,60; bonus bSPGainValue,6; bonus bMagicHPGainValue,60; bonus bMagicSPGainValue,6; },{},{ heal 0,-100; }
+2386,Chameleon_Armor,Chameleon Armor,5,20,,1700,,5,,0,0x00CFFF80,2,2,16,,70,1,0,{ bonus bMaxHP,(BaseLevel*7); bonus bMaxSP,(BaseLevel/2); autobonus2 "{ bonus bNoMagicDamage,100; }",10,2000,BF_MAGIC,"{ specialeffect2 EF_ENERGYCOAT; }"; if( BaseClass == Job_Mage || BaseClass == Job_Archer || BaseClass == Job_Acolyte ) bonus bMdef,5; else if( BaseClass == Job_Swordman || BaseClass == Job_Merchant || BaseClass == Job_Thief ) bonus bDef,3; },{},{}
+2387,Sprint_Mail,Sprint Mail,5,20,,1000,,3,,1,0x00CFFF80,2,2,16,,70,1,0,{ bonus bVit,1; bonus bHPrecovRate,5; bonus bAddItemHealRate,3; bonus2 bSkillHeal,"AL_HEAL",3; if( isequipped(2440,2744) ) { bonus bMaxHPrate,7; bonus bMaxSPrate,7; bonus bCastrate,-3; bonus bDelayrate,-15; } },{},{}
+2388,Kandura,Kandura,5,20,,300,,4,,1,0x00001000,2,2,16,,70,1,0,{ bonus bAgi,1; bonus bFlee,5; bonus bAspdRate,2; },{},{}
+2389,Armor_Of_Naga,Armor of Naga,5,20,,1000,,5,,1,0x00CFFF80,2,2,16,,70,1,0,{ bonus bMdef,2; autobonus "{ bonus bBaseAtk,20; }",10,10000,BF_WEAPON,"{ specialeffect2 EF_ENHANCE; }"; },{},{}
+2390,Improved_Tights,Improved Tights,5,20,,400,,6,,1,0x00080808,2,2,16,,75,1,0,{ bonus bMdef,2; bonus bFlee2,3; },{},{}
+2391,Life_Link,Life Link,5,20,,3500,,9,,1,0x00004082,2,2,16,,82,1,0,{ bonus bVit,2; bonus bMdef,5; bonus bHPrecovRate,50; },{},{}
+2392,Old_Pant,Old Green Pantie,5,0,,0,,10,,0,0xFFFFFFFF,7,2,16,,0,0,0,{ bonus bStr,2; bonus bVit,2; bonus bMaxHP,200; bonus3 bAutoSpellWhenHit,"MO_CALLSPIRITS",5,20; bonus bMdef,1; },{},{}
+2393,N_Adventurer's_Suit,Novice Adventurer's Suit,5,0,,0,,8,,1,0xFFFFFFFF,7,2,16,,0,0,0,{},{},{}
+2394,Krieger_Suit1,Glorious Suit,5,20,,0,,0,,0,0xFFFFFFFE,7,2,16,,81,1,0,{ bonus bMaxHPRate,20; bonus2 bSubRace,RC_DemiHuman,7; if( isequipped(2444,2549) ) { bonus2 bAddRace,RC_NonBoss,5; bonus2 bAddRace,RC_Boss,5; bonus bMatkRate,5; bonus2 bResEff,Eff_Freeze,10000; bonus2 bSkillHeal2,"AM_POTIONPITCHER",3; bonus2 bSkillHeal2,"AL_HEAL",3; bonus2 bSkillHeal2,"PR_SANCTUARY",3; } },{},{}
+2395,Krieger_Suit2,Glorious Popularized Suit,5,20,,0,,0,,0,0xFFFFFFFE,7,2,16,,61,1,0,{ bonus bMaxHP,600; bonus bSPrecovRate,10; },{},{}
+2396,Krieger_Suit3,Glorious Mass-Production Suit,5,20,,0,,0,,0,0xFFFFFFFE,7,2,16,,0,1,0,{ bonus bMaxHP,500; },{},{}
+2397,Incredible_Coat,Incredible Event Resignation Coat,5,10,,900,,2,,0,0xFFFFFFFE,7,2,16,,0,1,0,{},{},{}
2398,Sniping_Suit_M,Sniping Suit,5,20,,750,,5,,1,0x00000800,2,2,16,,50,1,0,{ bonus bMdef,5; bonus bCritical,6+(readparam(bLuk)/10); bonus bDelayRate,-23; },{},{}
-2399,Dragon_Vest,Dragon Vest,5,20,,500,,20,,1,0xFFFFFFFE,2,2,16,,0,1,0,{ bonus bMdef,3; if(isequipped(2553)) { bonus bAgi,5; bonus bFlee,15; } },{},{}
+2399,Dragon_Vest,Dragon Vest,5,20,,500,,3,,1,0xFFFFFFFE,2,2,16,,0,1,0,{ bonus bMdef,3; if(isequipped(2553)) { bonus bAgi,5; bonus bFlee,15; } },{},{}
// Footgears
//===================================================================
-2401,Sandals,Sandals,5,400,,200,,5,,0,0xFFFFFFFF,7,2,64,,0,1,0,{},{},{}
-2402,Sandals_,Sandals,5,400,,200,,5,,1,0xFFFFFFFF,7,2,64,,0,1,0,{},{},{}
-2403,Shoes,Shoes,5,3500,,400,,10,,0,0xFFFFFFFE,7,2,64,,0,1,0,{},{},{}
-2404,Shoes_,Shoes,5,3500,,400,,10,,1,0xFFFFFFFE,7,2,64,,0,1,0,{},{},{}
-2405,Boots,Boots,5,18000,,600,,16,,0,0x016E5CEA,7,2,64,,0,1,0,{},{},{}
-2406,Boots_,Boots,5,18000,,600,,16,,1,0x016E5CEA,7,2,64,,0,1,0,{},{},{}
-2407,Chrystal_Pumps,Crystal Pumps,5,20,,100,,5,,0,0xFFFFFFFE,7,0,64,,0,1,0,{ bonus bMdef,10; bonus bLuk,5; },{},{}
-2408,Cuffs,Shackles,5,5000,,3000,,15,,0,0xFFFFFFFF,7,2,64,,0,1,0,{ if (isequipped(2655)) { bonus bBaseAtk,50; bonus2 bAddDefClass,1196,20; bonus2 bAddDefClass,1197,20; } },{},{}
-2409,Spiky_Heel,High Heels,5,8500,,600,,10,,0,0xFFFFFFFE,7,2,64,,0,1,0,{ bonus bMdef,5; },{},{}
-2410,Sleipnir,Sleipnir,5,20,,3500,,40,,0,0xFFFFFFFF,7,2,64,,94,0,0,{ bonus bInt,25; bonus bMdef,10; bonus bMaxHPrate,20; bonus bMaxSPrate,20; bonus bSPrecovRate,15; bonus bSpeedRate,25; },{},{}
-2411,Grave,Greaves,5,48000,,750,,27,,0,0x00004080,7,2,64,,65,1,0,{},{},{}
-2412,Grave_,Greaves,5,54000,,750,,27,,1,0x00004080,7,2,64,,65,1,0,{},{},{}
-2413,Safty_Boots,Safety Boots,5,34000,,350,,22,,0,0x00004082,7,2,64,,30,0,0,{},{},{}
-2414,Novice_Boots,Novice Slippers,5,1,,1,,5,,0,0x00000001,7,2,64,,0,0,0,{},{},{}
-2415,Slipper,Bunny Slipper,5,34000,,300,,9,,1,0xFFFFFFFE,7,0,64,,30,1,0,{ bonus bLuk,3; bonus bMdef,3; },{},{}
-2416,Novice_Shoes,Novice Shoes,5,35000,,500,,8,,1,0x00000001,7,2,64,,40,1,0,{ bonus bMaxHPrate,5; },{},{}
-2417,Fricco_Shoes,Fricco's Shoes,5,30000,,500,,12,,0,0xFFFFFFFE,7,2,64,,65,1,0,{ bonus bAgi,2; bonus2 bAddItemHealRate,IG_Potion,20; if(isequipped(2353,2516)){ bonus bAgi,3; bonus bMaxHPrate,5; bonus bMaxSPrate,5; } },{},{}
-2418,Vidar's_Boots,Vidar's Boots,5,30000,,650,,13,,0,0xFFFFFFFE,7,2,64,,65,1,0,{ bonus bMaxHPrate,9; bonus bMaxSPrate,9; if(isequipped(2353,2517)){ bonus bVit,5; bonus bHPrecovRate,10; bonus bSPrecovRate,10; } },{},{}
-2419,Goibne's_Combat_Boots,Goibne's Greaves,5,30000,,700,,13,,0,0xFFFFFFFE,7,2,64,,54,1,0,{ bonus bMdef,3; bonus bMaxHPrate,5; bonus bMaxSPrate,5; },{},{}
-2420,Angel's_Arrival,Angel's Reincarnation,5,10000,,300,,8,,1,0x00000001,7,2,64,,25,1,0,{ bonus bMaxHP,100; },{},{}
-2421,Valkyrie_Shoes,Valkyrian Shoes,5,0,,500,,13,,1,0xFFFFFFFE,2,2,64,,1,1,0,{ bonus bUnbreakableShoes,0; if(BaseClass==Job_Mage||BaseClass==Job_Archer||BaseClass==Job_Acolyte) bonus bMaxHP,(BaseLevel*5); else if(BaseClass==Job_Swordman||BaseClass==Job_Merchant||BaseClass==Job_Thief) bonus bMaxSP,(JobLevel*2); },{},{}
-2422,High_Fashion_Sandals,High Fashion Sandals,5,24000,,200,,7,,1,0x00818314,7,2,64,,40,1,0,{ bonus bMdef,10; },{},{}
-2423,Variant_Shoes,Variant Shoes,5,20,,500,,13,,0,0xFFFFFFFE,2,2,64,,85,1,0,{ bonus bMaxHPRate,20-getrefine(); bonus bMaxSPRate,20-getrefine(); bonus bDef,getrefine()/2; },{},{}
-2424,Tidal_Shoes,Tidal Shoes,5,20,,300,,13,,1,0xFFFFFFFE,2,2,64,,55,1,0,{ bonus2 bSubEle,Ele_Water,5; if (isequipped(2528)) { bonus bHPrecovRate,5; bonus bMaxHPrate,10; } },{},{}
-2425,Black_Leather_Boots,Black Leather Boots,5,20,,500,,16,,0,0xFFFFFFFE,2,2,64,,55,1,0,{ bonus bAgi,1; if(getrefine() >= 9) bonus bAgi,2; },{},{}
+2401,Sandals,Sandals,5,400,,200,,1,,0,0xFFFFFFFF,7,2,64,,0,1,0,{},{},{}
+2402,Sandals_,Sandals,5,400,,200,,1,,1,0xFFFFFFFF,7,2,64,,0,1,0,{},{},{}
+2403,Shoes,Shoes,5,3500,,400,,2,,0,0xFFFFFFFE,7,2,64,,0,1,0,{},{},{}
+2404,Shoes_,Shoes,5,3500,,400,,2,,1,0xFFFFFFFE,7,2,64,,0,1,0,{},{},{}
+2405,Boots,Boots,5,18000,,600,,4,,0,0x016E5CEA,7,2,64,,0,1,0,{},{},{}
+2406,Boots_,Boots,5,18000,,600,,4,,1,0x016E5CEA,7,2,64,,0,1,0,{},{},{}
+2407,Chrystal_Pumps,Crystal Pumps,5,20,,100,,0,,0,0xFFFFFFFE,7,0,64,,0,1,0,{ bonus bMdef,10; bonus bLuk,5; },{},{}
+2408,Cuffs,Shackles,5,5000,,3000,,3,,0,0xFFFFFFFF,7,2,64,,0,1,0,{ if (isequipped(2655)) { bonus bBaseAtk,50; bonus2 bAddDefClass,1196,20; bonus2 bAddDefClass,1197,20; } },{},{}
+2409,Spiky_Heel,High Heels,5,8500,,600,,2,,0,0xFFFFFFFE,7,2,64,,0,1,0,{ bonus bMdef,5; },{},{}
+2410,Sleipnir,Sleipnir,5,20,,3500,,5,,0,0xFFFFFFFF,7,2,64,,94,0,0,{ bonus bMdef,10; bonus bMaxHPrate,20; bonus bMaxSPrate,20; bonus bSPrecovRate,15; bonus bSpeedRate,25; },{},{}
+2411,Grave,Greaves,5,48000,,750,,5,,0,0x00004080,7,2,64,,65,1,0,{},{},{}
+2412,Grave_,Greaves,5,54000,,750,,5,,1,0x00004080,7,2,64,,65,1,0,{},{},{}
+2413,Safty_Boots,Safety Boots,5,34000,,350,,6,,0,0x00004082,7,2,64,,30,0,0,{},{},{}
+2414,Novice_Boots,Novice Slippers,5,1,,1,,2,,0,0x00000001,7,2,64,,0,0,0,{},{},{}
+2415,Slipper,Bunny Slipper,5,34000,,300,,3,,1,0xFFFFFFFE,7,0,64,,30,1,0,{ bonus bLuk,3; bonus bMdef,3; },{},{}
+2416,Novice_Shoes,Novice Shoes,5,35000,,500,,2,,1,0x00000001,7,2,64,,40,1,0,{ bonus bMaxHPrate,5; },{},{}
+2417,Fricco_Shoes,Fricco's Shoes,5,30000,,500,,3,,0,0xFFFFFFFE,7,2,64,,65,1,0,{ bonus bAgi,2; bonus2 bAddItemHealRate,IG_Potion,20; if(isequipped(2353,2516)){ bonus bAgi,3; bonus bMaxHPrate,5; bonus bMaxSPrate,5; } },{},{}
+2418,Vidar's_Boots,Vidar's Boots,5,30000,,650,,4,,0,0xFFFFFFFE,7,2,64,,65,1,0,{ bonus bMaxHPrate,9; bonus bMaxSPrate,9; if(isequipped(2353,2517)){ bonus bVit,5; bonus bHPrecovRate,10; bonus bSPrecovRate,10; } },{},{}
+2419,Goibne's_Combat_Boots,Goibne's Greaves,5,30000,,700,,4,,0,0xFFFFFFFE,7,2,64,,54,1,0,{ bonus bMdef,3; bonus bMaxHPrate,5; bonus bMaxSPrate,5; },{},{}
+2420,Angel's_Arrival,Angel's Reincarnation,5,10000,,300,,2,,1,0x00000001,7,2,64,,25,1,0,{ bonus bMaxHP,100; },{},{}
+2421,Valkyrie_Shoes,Valkyrian Shoes,5,0,,500,,4,,1,0xFFFFFFFE,2,2,64,,1,1,0,{ bonus bUnbreakableShoes,0; if(BaseClass==Job_Mage||BaseClass==Job_Archer||BaseClass==Job_Acolyte) bonus bMaxHP,(BaseLevel*5); else if(BaseClass==Job_Swordman||BaseClass==Job_Merchant||BaseClass==Job_Thief) bonus bMaxSP,(JobLevel*2); },{},{}
+2422,High_Fashion_Sandals,High Fashion Sandals,5,24000,,200,,2,,1,0x00818314,7,2,64,,40,1,0,{ bonus bMdef,10; },{},{}
+2423,Variant_Shoes,Variant Shoes,5,20,,500,,3,,0,0xFFFFFFFE,2,2,64,,85,1,0,{ bonus bMaxHPRate,20-getrefine(); bonus bMaxSPRate,20-getrefine(); bonus bDef,getrefine()/2; },{},{}
+2424,Tidal_Shoes,Tidal Shoes,5,20,,300,,3,,1,0xFFFFFFFE,2,2,64,,55,1,0,{ bonus2 bSubEle,Ele_Water,5; if (isequipped(2528)) { bonus bHPrecovRate,5; bonus bMaxHPrate,10; } },{},{}
+2425,Black_Leather_Boots,Black Leather Boots,5,20,,500,,4,,0,0xFFFFFFFE,2,2,64,,55,1,0,{ bonus bAgi,1; if(getrefine() >= 9) bonus bAgi,2; },{},{}
2426,Shadow_Walk,Shadow Walk,5,20,,2000,,0,,0,0xFFFFFFFE,2,2,64,,75,1,0,{ bonus bMdef,10; if(getskilllv("AS_CLOAKING") < 3){ bonus5 bAutoSpellWhenHit,"AS_CLOAKING",3,100,BF_MAGIC,0; } else bonus5 bAutoSpellWhenHit,"AS_CLOAKING",getskilllv("AS_CLOAKING"),100,BF_MAGIC,0; },{},{}
2427,Golden_Shoes,Golden Shoes,5,20,,300,,4,,0,0xFFFFFFFF,7,2,64,,0,0,0,{ bonus bMdef,4; },{},{}
-//2428,Freyja_Boots,Freyja Boots,5,0,,300,,22,,0,0xFFFFFFFE,7,2,64,,0,0,0,{ bonus2 bSubRace,RC_DemiHuman,5; },{},{}
+//2428,Freyja_Boots,Freyja Boots,5,0,,300,,10,,0,0xFFFFFFFE,7,2,64,,0,0,0,{ bonus2 bSubRace,RC_DemiHuman,5; },{},{}
2429,Iron_Boots01,Iron Boots,5,0,,1500,,5,,0,0x000E5CEA,7,2,64,,0,1,0,{},{},{}
2430,Iron_Boots02,Iron Boots,5,0,,800,,5,,0,0xFFFFFFFF,7,2,64,,0,1,0,{},{},{}
2431,Valley_Shoes,Valley Shoes,5,20,,0,,10,,0,0xFFFFFFFF,7,2,64,,0,0,0,{ bonus bMaxHPRate,7; bonus bMaxSPRate,7; },{},{}
-2432,Spiky_Heel_,High Heels,5,8500,,600,,10,,1,0xFFFFFFFE,7,2,64,,0,1,0,{ bonus bMdef,5; },{},{}
-2433,Diabolus_Boots,Diabolus Boots,5,20,,250,,15,,1,0x00CFFF80,2,2,64,,0,1,0,{ bonus bMaxHP,(BaseLevel*10); },{},{}
-2434,Black_Leather_Boots_,Black Leather Boots,5,20,,500,,16,,1,0xFFFFFFFE,2,2,64,,55,1,0,{ bonus bAgi,1; if(getrefine() >= 9) bonus bAgi,2; },{},{}
-2435,Battle_Greave,Battle Greaves,5,10,,0,,15,,1,0x026654E2,7,2,64,,80,1,0,{ bonus bMaxHP,100; bonus bMdef,1; bonus2 bSubRace,RC_DemiHuman,1; },{},{}
-2436,Combat_Boots,Combat Boots,5,10,,0,,9,,1,0x00898B1C,7,2,64,,80,1,0,{ bonus bMaxHP,100; bonus bMdef,1; bonus2 bSubRace,RC_DemiHuman,1; },{},{}
-2437,Battle_Boots,Battle Boots,5,10,,0,,9,,1,0x01000000,7,2,64,,80,1,0,{ bonus bMaxHP,100; bonus bMdef,1; bonus2 bSubRace,RC_DemiHuman,1; },{},{}
-2438,Paw_Of_Cat,Paw Of Cat,5,10,,300,,0,,0,0xFFFFFFFF,7,2,64,,1,1,0,{ bonus bFlee,5; bonus bAgi,1; },{},{}
-2439,Refresh_Shoes,Refresh Shoes,5,20,,0,,20,,0,0xFFFFFFFF,7,2,64,,0,0,0,{ bonus bMaxHPRate,17; bonus bMaxSPRate,8; bonus2 bHPRegenRate,20,10000; bonus2 bSPRegenRate,3,10000; },{},{}
-2440,Sprint_Shoes,Sprint Shoes,5,20,,300,,10,,1,0x00CFFF80,2,2,64,,0,1,0,{ bonus bAgi,1; bonus bSPrecovRate,5; },{},{}
+2432,Spiky_Heel_,High Heels,5,8500,,600,,2,,1,0xFFFFFFFE,7,2,64,,0,1,0,{ bonus bMdef,5; },{},{}
+2433,Diabolus_Boots,Diabolus Boots,5,20,,250,,4,,1,0x00CFFF80,2,2,64,,0,1,0,{ bonus bMaxHP,(BaseLevel*10); },{},{}
+2434,Black_Leather_Boots_,Black Leather Boots,5,20,,500,,4,,1,0xFFFFFFFE,2,2,64,,55,1,0,{ bonus bAgi,1; if(getrefine() >= 9) bonus bAgi,2; },{},{}
+2435,Battle_Greave,Battle Greaves,5,10,,0,,4,,1,0x026654E2,7,2,64,,80,1,0,{ bonus bMaxHP,100; bonus bMdef,1; bonus2 bSubRace,RC_DemiHuman,1; },{},{}
+2436,Combat_Boots,Combat Boots,5,10,,0,,3,,1,0x00898B1C,7,2,64,,80,1,0,{ bonus bMaxHP,100; bonus bMdef,1; bonus2 bSubRace,RC_DemiHuman,1; },{},{}
+2437,Battle_Boots,Battle Boots,5,10,,0,,3,,1,0x01000000,7,2,64,,80,1,0,{ bonus bMaxHP,100; bonus bMdef,1; bonus2 bSubRace,RC_DemiHuman,1; },{},{}
+2438,Paw_Of_Cat,Paw Of Cat,5,10,,300,,0,,0,0xFFFFFFFF,7,2,64,,80,1,0,{ bonus bFlee,5; bonus bAgi,1; },{},{}
+2439,Refresh_Shoes,Refresh Shoes,5,20,,0,,9,,0,0xFFFFFFFF,7,2,64,,0,0,0,{ bonus bMaxHPRate,17; bonus bMaxSPRate,8; bonus2 bHPRegenRate,20,10000; bonus2 bSPRegenRate,3,10000; },{},{}
+2440,Sprint_Shoes,Sprint Shoes,5,20,,300,,2,,1,0x00CFFF80,2,2,64,,70,1,0,{ bonus bAgi,1; bonus bSPrecovRate,5; },{},{}
2441,Beach_Sandal,Beach Sandals,5,20,,200,,0,,0,0xFFFFFFFF,7,2,64,,0,1,0,{ bonus bStr,1; bonus bInt,1; bonus bAgi,1; bonus2 bSubEle,Ele_Fire,10; if (isequipped(2546)) bonus bFlee,5; },{},{}
-2442,Boots_Perforated,Red Stocking Boots,5,0,,0,,18,,0,0xFFFFFFFF,7,2,64,,0,0,0,{ bonus bLuk,2; bonus bHPrecovRate,10; bonus bSPrecovRate,10; bonus3 bAutoSpellWhenHit,"WZ_QUAGMIRE",3,20; bonus bMdef,1; },{},{}
+2442,Boots_Perforated,Red Stocking Boots,5,0,,0,,7,,0,0xFFFFFFFF,7,2,64,,0,0,0,{ bonus bLuk,2; bonus bHPrecovRate,10; bonus bSPrecovRate,10; bonus3 bAutoSpellWhenHit,"WZ_QUAGMIRE",3,20; bonus bMdef,1; },{},{}
2443,Fish_Shoes,Fisher's Boots,5,10,,250,,0,,0,0xFFFFFFFF,7,2,64,,0,0,0,{},{},{}
2444,Krieger_Shoes1,Glorious Shoes,5,20,,0,,0,,0,0xFFFFFFFE,7,2,64,,81,1,0,{ bonus bMaxHPRate,10; bonus2 bSubRace,RC_DemiHuman,4; bonus3 bAutoSpellWhenHit,"AL_INCAGI",1,10; },{},{}
-2445,Krieger_Shoes2,Glorious Popularized Shoes,5,20,,0,,5,,0,0xFFFFFFFE,7,2,64,,61,1,0,{ bonus bMaxHPRate,5; bonus bMaxSPRate,5; },{},{}
-2446,Krieger_Shoes3,Glorious Mass-Production Shoes,5,20,,0,,10,,0,0xFFFFFFFE,7,2,64,,0,1,0,{ bonus bMaxHPRate,5; },{},{}
-2447,Military_Boots,Army Boots,5,20,,1000,,5,,0,0xFFFFFFFE,7,2,64,,0,1,0,{},{},{}
+2445,Krieger_Shoes2,Glorious Popularized Shoes,5,20,,0,,0,,0,0xFFFFFFFE,7,2,64,,61,1,0,{ bonus bMaxHPRate,5; bonus bMaxSPRate,5; },{},{}
+2446,Krieger_Shoes3,Glorious Mass-Production Shoes,5,20,,0,,0,,0,0xFFFFFFFE,7,2,64,,0,1,0,{ bonus bMaxHPRate,5; },{},{}
+2447,Military_Boots,Army Boots,5,0,,1000,,5,,0,0xFFFFFFFE,7,2,64,,0,1,0,{},{},{}
2448,Air_Boss,Air Boss,5,0,,500,,2,,0,0xFFFFFFFF,7,2,64,,0,1,0,{ bonus bAgi,1; },{},{}
2449,Variant_Shoes_M,Variant Shoes,5,20,,500,,3,,0,0xFFFFFFFE,2,2,64,,85,1,0,{ bonus bMaxHPRate,20-getrefine(); bonus bMaxSPRate,20-getrefine(); bonus bDef,getrefine()/2; },{},{}
-2450,Vital_Tree_Shoes,Vital Tree Shoes,5,20,,500,,16,,0,0xFFFFFFFE,2,2,64,,60,1,0,{ bonus bMaxHPrate,10; bonus2 bHPRegenRate,30,10000; bonus bHealpower2,5; bonus bAddItemHealRate,5; bonus bMdef,3; bonus bVit,2; },{},{}
+2450,Vital_Tree_Shoes,Vital Tree Shoes,5,20,,500,,4,,0,0xFFFFFFFE,2,2,64,,60,1,0,{ bonus bMaxHPrate,10; bonus2 bHPRegenRate,30,10000; bonus bHealpower2,5; bonus bAddItemHealRate,5; bonus bMdef,3; bonus bVit,2; },{},{}
//2451,Freyja_SSandal7,Freyja Sprit Sandals,5,20,,400,,5,,0,0xFFFFFFFF,7,2,64,,20,0,0,{},{},{}
//2452,Freyja_SSandal30,Freyja Sprit Sandals,5,20,,400,,5,,0,0xFFFFFFFF,7,2,64,,20,0,0,{},{},{}
//2453,Freyja_SSandal60,Freyja Sprit Sandals,5,20,,400,,5,,0,0xFFFFFFFF,7,2,64,,20,0,0,{},{},{}
@@ -1429,60 +1429,60 @@
2470,Forest_Shoes,Forest Shoes,5,20,,500,,12,,1,0x00000000,7,2,64,,100,1,0,{ bonus bMdef,2; },{},{}
// Garments
//===================================================================
-2501,Hood,Hood,5,1000,,200,,4,,0,0xFFFFFFFF,7,2,4,,0,1,0,{},{},{}
-2502,Hood_,Hood,5,1000,,200,,4,,1,0xFFFFFFFF,7,2,4,,0,1,0,{},{},{}
-2503,Muffler,Muffler,5,5000,,400,,8,,0,0xFFFFFFFE,7,2,4,,0,1,0,{},{},{}
-2504,Muffler_,Muffler,5,5000,,400,,8,,1,0xFFFFFFFE,7,2,4,,0,1,0,{},{},{}
-2505,Manteau,Manteau,5,32000,,600,,13,,0,0x006654E2,7,2,4,,0,1,0,{},{},{}
-2506,Manteau_,Manteau,5,32000,,600,,13,,1,0x006654E2,7,2,4,,0,1,0,{},{},{}
-2507,Cape_Of_Ancient_Lord,Ancient Cape,5,82000,,600,,9,,0,0xFFFFFFFE,7,2,4,,40,1,0,{ bonus bAgi,1; },{},{}
-2508,Ragamuffin_Cape,Ragamuffin Manteau,5,56000,,500,,4,,0,0xFFFFFFFE,7,2,4,,0,1,0,{ bonus bUnbreakableGarment,0; bonus bMdef,10; },{},{}
-2509,Clack_Of_Servival,Survivor's Manteau,5,20000,,550,,10,,0,0x00810204,7,2,4,,75,1,0,{ bonus bMdef,5; bonus bVit,10; if(isequipped(1618) || isequipped(1620)){ bonus bMaxHP,300; bonus bMatkRate,getequiprefinerycnt(EQI_HAND_R)-5; bonus2 bSubEle,Ele_Neutral,getrefine()*3; } },{},{}
-2510,Novice_Hood,Somber Novice Hood,5,1,,1,,4,,0,0x00000001,7,2,4,,0,0,0,{ bonus2 bSubEle,Ele_Neutral,20; },{},{}
-2511,Skeleton's_Cape,Skeleton Manteau,5,5000,,700,,13,,0,0xFFFFFFFE,7,2,4,,75,1,0,{ bonus bStr,2; bonus bInt,-3; bonus bDex,2; bonus bVit,-3; bonus bLuk,2; bonus bAgi,-4; },{},{}
-2512,Novice_Manteau,Novice Manteau,5,50000,,500,,7,,1,0x00000001,7,2,4,,40,1,0,{ bonus2 bSubEle,Ele_Neutral,10; },{},{}
-2513,Celestial_Robe,Heavenly Maiden Robe,5,20,,500,,18,,1,0xFFFFFFFE,7,2,4,,80,1,0,{},{},{}
-2514,Pauldron,Pauldron,5,20,,800,,25,,1,0x000654E2,7,2,4,,80,1,0,{},{},{}
-2515,Wing_Of_Eagle,Eagle Wing,5,20000,,300,,12,,1,0x00810204,7,2,4,,85,1,0,{ if(isequipped(1616)) bonus bSpeedRate,25; },{},{}
-2516,Falcon_Robe,Falcon Muffler,5,30000,,400,,8,,0,0xFFFFFFFE,7,2,4,,65,1,0,{ bonus bFlee,15; bonus bFlee2,5; },{},{}
-2517,Vali's_Manteau,Vali's Manteau,5,30000,,600,,13,,0,0xFFFFFFFE,7,2,4,,65,1,0,{ bonus2 bSubEle,Ele_Neutral,15; },{},{}
-2518,Morpheus's_Shawl,Morpheus's Shawl,5,30000,,600,,8,,0,0xFFFFFFFE,7,2,4,,33,1,0,{ bonus bMaxSPrate,10; bonus bMdef,3; },{},{}
-2519,Morrigane's_Manteau,Morrigane's Manteau,5,30000,,600,,9,,0,0xFFFFFFFE,7,2,4,,61,1,0,{ bonus bLuk,2; bonus bFlee2,8; },{},{}
-2520,Goibne's_Shoulder_Arms,Goibne's Spaulders,5,30000,,700,,11,,0,0xFFFFFFFE,7,2,4,,54,1,0,{ bonus bLongAtkDef,10; bonus bMdef,2; bonus bVit,1; },{},{}
-2521,Angel's_Warmth,Angelic Cardigan,5,10000,,400,,6,,1,0x00000001,7,2,4,,20,1,0,{ bonus bHPrecovRate,5; },{},{}
-2522,Undershirt,Undershirt,5,20000,,150,,5,,0,0xFFFFFFFF,7,2,4,,1,1,0,{ bonus bMdef,1; if(isequipped(2339) || isequipped(2371)) { bonus bAgi,5; bonus bFlee,10; } },{},{}
-2523,Undershirt_,Undershirt,5,20000,,150,,5,,1,0xFFFFFFFF,7,2,4,,1,1,0,{ bonus bMdef,1; if(isequipped(2339) || isequipped(2371)) { bonus bAgi,5; bonus bFlee,10; } },{},{}
-2524,Valkyrie_Manteau,Valkyrian Manteau,5,0,,500,,10,,1,0xFFFFFFFE,2,2,4,,1,1,0,{ bonus bUnbreakableGarment,0; if(BaseClass==Job_Mage||BaseClass==Job_Archer||BaseClass==Job_Acolyte) bonus bFlee2,5+(getequiprefinerycnt(EQI_GARMENT)*2); else if(BaseClass==Job_Swordman||BaseClass==Job_Merchant||BaseClass==Job_Thief) bonus bShortWeaponDamageReturn,5+(getequiprefinerycnt(EQI_GARMENT)*2); },{},{}
-2525,Cape_Of_Ancient_Lord_,Ancient Cape,5,82000,,600,,9,,1,0xFFFFFFFE,7,2,4,,40,1,0,{ bonus bAgi,1; },{},{}
-2526,Dragon_Scale_Coat,Coat of Dragon Scale,5,20,,10,,14,,0,0xFFFFFFFF,7,2,4,,50,1,0,{},{},{}
-2527,Dragon_Breath,Dragon Breath,5,20,,600,,16,,1,0xFFFFFFFE,2,2,4,,48,1,0,{ bonus2 bSubRace,RC_Dragon,15; if (isequipped(1166) || isequipped(13001) || isequipped(1474)) bonus2 bAddRace,RC_Dragon,5; },{},{}
-2528,Wool_Scarf,Wool Scarf,5,20,,500,,11,,1,0xFFFFFFFE,2,2,4,,55,1,0,{ bonus bMdef,4; },{},{}
-2529,Rider_Insignia,Rider Insignia,5,20,,500,,13,,0,0xFFFFFFFE,2,2,4,,55,1,0,{ bonus bAgi,2; if (isequipped(2425) || isequipped(2434)) bonus bFlee,10; },{},{}
-2530,Rider_Insignia_,Rider Insignia,5,20,,500,,13,,1,0xFFFFFFFE,2,2,4,,55,1,0,{ bonus bAgi,2; if (isequipped(2425) || isequipped(2434)) bonus bFlee,10; },{},{}
-2531,Ulfhedinn,Ulfhedinn,5,20,,700,,13,,1,0x000654E2,2,2,4,,70,1,0,{ bonus3 bAutoSpellWhenHit,"NPC_STONESKIN",1,20; },{},{}
-2532,Mithril_Magic_Cape,Mithril Magic Cape,5,20,,400,,8,,1,0x00098B1C,2,2,4,,70,1,0,{ bonus bMdef,3; bonus5 bAutoSpellWhenHit,"NPC_ANTIMAGIC",1,200,BF_MAGIC,0; },{},{}
+2501,Hood,Hood,5,1000,,200,,1,,0,0xFFFFFFFF,7,2,4,,0,1,0,{},{},{}
+2502,Hood_,Hood,5,1000,,200,,1,,1,0xFFFFFFFF,7,2,4,,0,1,0,{},{},{}
+2503,Muffler,Muffler,5,5000,,400,,2,,0,0xFFFFFFFE,7,2,4,,0,1,0,{},{},{}
+2504,Muffler_,Muffler,5,5000,,400,,2,,1,0xFFFFFFFE,7,2,4,,0,1,0,{},{},{}
+2505,Manteau,Manteau,5,32000,,600,,4,,0,0x006654E2,7,2,4,,0,1,0,{},{},{}
+2506,Manteau_,Manteau,5,32000,,600,,4,,1,0x006654E2,7,2,4,,0,1,0,{},{},{}
+2507,Cape_Of_Ancient_Lord,Ancient Cape,5,82000,,600,,2,,0,0xFFFFFFFE,7,2,4,,40,1,0,{ bonus bAgi,1; },{},{}
+2508,Ragamuffin_Cape,Ragamuffin Manteau,5,56000,,500,,1,,0,0xFFFFFFFE,7,2,4,,0,1,0,{ bonus bUnbreakableGarment,0; bonus bMdef,10; },{},{}
+2509,Clack_Of_Servival,Survivor's Manteau,5,20000,,550,,0,,0,0x00810204,7,2,4,,75,1,0,{ bonus bMdef,5; bonus bVit,10; if(isequipped(1618) || isequipped(1620)){ bonus bMaxHP,300; bonus bMatkRate,getequiprefinerycnt(EQI_HAND_R)-5; bonus2 bSubEle,Ele_Neutral,getrefine()*3; } },{},{}
+2510,Novice_Hood,Somber Novice Hood,5,1,,1,,2,,0,0x00000001,7,2,4,,0,0,0,{ bonus2 bSubEle,Ele_Neutral,20; },{},{}
+2511,Skeleton's_Cape,Skeleton Manteau,5,5000,,700,,1,,0,0xFFFFFFFE,7,2,4,,75,1,0,{ bonus bStr,2; bonus bInt,-3; bonus bDex,2; bonus bVit,-3; bonus bLuk,2; bonus bAgi,-4; },{},{}
+2512,Novice_Manteau,Novice Manteau,5,50000,,500,,2,,1,0x00000001,7,2,4,,40,1,0,{ bonus2 bSubEle,Ele_Neutral,10; },{},{}
+2513,Celestial_Robe,Heavenly Maiden Robe,5,20,,500,,3,,1,0xFFFFFFFE,7,2,4,,80,1,0,{},{},{}
+2514,Pauldron,Pauldron,5,20,,800,,5,,1,0x000654E2,7,2,4,,80,1,0,{},{},{}
+2515,Wing_Of_Eagle,Eagle Wing,5,20000,,300,,1,,1,0x00810204,7,2,4,,85,1,0,{ if(isequipped(1616)) bonus bSpeedRate,25; },{},{}
+2516,Falcon_Robe,Falcon Muffler,5,30000,,400,,3,,0,0xFFFFFFFE,7,2,4,,65,1,0,{ bonus bFlee,15; bonus bFlee2,5; },{},{}
+2517,Vali's_Manteau,Vali's Manteau,5,30000,,600,,4,,0,0xFFFFFFFE,7,2,4,,65,1,0,{ bonus2 bSubEle,Ele_Neutral,15; },{},{}
+2518,Morpheus's_Shawl,Morpheus's Shawl,5,30000,,600,,3,,0,0xFFFFFFFE,7,2,4,,33,1,0,{ bonus bMaxSPrate,10; bonus bMdef,3; },{},{}
+2519,Morrigane's_Manteau,Morrigane's Manteau,5,30000,,600,,3,,0,0xFFFFFFFE,7,2,4,,61,1,0,{ bonus bLuk,2; bonus bFlee2,8; },{},{}
+2520,Goibne's_Shoulder_Arms,Goibne's Spaulders,5,30000,,700,,3,,0,0xFFFFFFFE,7,2,4,,54,1,0,{ bonus bLongAtkDef,10; bonus bMdef,2; bonus bVit,1; },{},{}
+2521,Angel's_Warmth,Angelic Cardigan,5,10000,,400,,2,,1,0x00000001,7,2,4,,20,1,0,{ bonus bHPrecovRate,5; },{},{}
+2522,Undershirt,Undershirt,5,20000,,150,,2,,0,0xFFFFFFFF,7,2,4,,1,1,0,{ bonus bMdef,1; if(isequipped(2339) || isequipped(2371)) { bonus bAgi,5; bonus bFlee,10; } },{},{}
+2523,Undershirt_,Undershirt,5,20000,,150,,2,,1,0xFFFFFFFF,7,2,4,,1,1,0,{ bonus bMdef,1; if(isequipped(2339) || isequipped(2371)) { bonus bAgi,5; bonus bFlee,10; } },{},{}
+2524,Valkyrie_Manteau,Valkyrian Manteau,5,0,,500,,3,,1,0xFFFFFFFE,2,2,4,,1,1,0,{ bonus bUnbreakableGarment,0; if(BaseClass==Job_Mage||BaseClass==Job_Archer||BaseClass==Job_Acolyte) bonus bFlee2,5+(getequiprefinerycnt(EQI_GARMENT)*2); else if(BaseClass==Job_Swordman||BaseClass==Job_Merchant||BaseClass==Job_Thief) bonus bShortWeaponDamageReturn,5+(getequiprefinerycnt(EQI_GARMENT)*2); },{},{}
+2525,Cape_Of_Ancient_Lord_,Ancient Cape,5,82000,,600,,2,,1,0xFFFFFFFE,7,2,4,,40,1,0,{ bonus bAgi,1; },{},{}
+2526,Dragon_Scale_Coat,Coat of Dragon Scale,5,20,,10,,4,,0,0xFFFFFFFF,7,2,4,,50,1,0,{},{},{}
+2527,Dragon_Breath,Dragon Breath,5,20,,600,,4,,1,0xFFFFFFFE,2,2,4,,48,1,0,{ bonus2 bSubRace,RC_Dragon,15; if (isequipped(1166) || isequipped(13001) || isequipped(1474)) bonus2 bAddRace,RC_Dragon,5; },{},{}
+2528,Wool_Scarf,Wool Scarf,5,20,,500,,3,,1,0xFFFFFFFE,2,2,4,,55,1,0,{ bonus bMdef,4; },{},{}
+2529,Rider_Insignia,Rider Insignia,5,20,,500,,4,,0,0xFFFFFFFE,2,2,4,,55,1,0,{ bonus bAgi,2; if (isequipped(2425) || isequipped(2434)) bonus bFlee,10; },{},{}
+2530,Rider_Insignia_,Rider Insignia,5,20,,500,,4,,1,0xFFFFFFFE,2,2,4,,55,1,0,{ bonus bAgi,2; if (isequipped(2425) || isequipped(2434)) bonus bFlee,10; },{},{}
+2531,Ulfhedinn,Ulfhedinn,5,20,,700,,3,,1,0x000654E2,2,2,4,,70,1,0,{ bonus3 bAutoSpellWhenHit,"NPC_STONESKIN",1,20; },{},{}
+2532,Mithril_Magic_Cape,Mithril Magic Cape,5,20,,400,,3,,1,0x00098B1C,2,2,4,,70,1,0,{ bonus bMdef,3; bonus5 bAutoSpellWhenHit,"NPC_ANTIMAGIC",1,200,BF_MAGIC,0; },{},{}
//2533,Freyja_Cape,Freyja Cape,5,0,,200,,10,,0,0xFFFFFFFE,7,2,4,,0,0,0,{ bonus2 bSubRace,RC_DemiHuman,15; },{},{}
2534,Ruffler,Ruffler,5,20,,0,,10,,0,0xFFFFFFFF,7,2,4,,0,0,0,{ bonus2 bSubEle,Ele_Neutral,17; bonus bFlee,17; },{},{}
-2535,Cloak_Of_Survival_C,Cloak Of Survival,5,1,,0,,17,,0,0x00810204,7,2,4,,0,0,0,{ bonus bVit,10; bonus bMdef,10; if (isequipped(1618) || isequipped(1620)) { bonus bMatkRate,5; bonus2 bSubEle,Ele_Neutral,25; } },{},{}
-2536,Skin_Of_Ventus,Skin of Ventus,5,20,,250,,7,,1,0xFFFFFFFE,7,2,4,,60,1,0,{ bonus bMdef,2; bonus bMaxHP,200; bonus bFlee,10; },{},{}
-2537,Diabolus_Manteau,Diabolus Manteau,5,20,,250,,15,,1,0x00CFFF80,2,2,4,,0,1,0,{ bonus2 bSubEle,Ele_Neutral,5; bonus bMaxHP,100; bonus2 bAddDamageClass,1916,10; bonus2 bAddDamageClass,1917,10; if (isequipped(2433)) bonus bMaxHPRate,6; },{},{}
-2538,Commander_Manteau,Captain's Manteau,5,10,,0,,28,,1,0x026654E2,7,2,4,,80,1,0,{ bonus bMaxHP,50; bonus bMdef,1; bonus2 bSubRace,RC_DemiHuman,1; },{},{}
-2539,Commander_Manteau_,Commander's Manteau,5,10,,0,,20,,1,0x00898B1C,7,2,4,,80,1,0,{ bonus bMaxHP,50; bonus bMdef,1; bonus2 bSubRace,RC_DemiHuman,1; },{},{}
-2540,Sheriff_Manteau,Sheriff's Manteau,5,10,,0,,20,,1,0x01000000,7,2,4,,80,1,0,{ bonus bMaxHP,50; bonus bMdef,1; bonus2 bSubRace,RC_DemiHuman,1; },{},{}
-2541,Asprika,Asprika,5,20,,400,,40,,0,0xFFFFFFFF,7,2,4,,94,0,0,{ bonus bMdef,5; bonus3 bSubEle,Ele_Neutral,30,BF_SHORT; bonus3 bSubEle,Ele_Water,30,BF_SHORT; bonus3 bSubEle,Ele_Earth,30,BF_SHORT; bonus3 bSubEle,Ele_Fire,30,BF_SHORT; bonus3 bSubEle,Ele_Wind,30,BF_SHORT; bonus3 bSubEle,Ele_Poison,30,BF_SHORT; bonus3 bSubEle,Ele_Holy,30,BF_SHORT; bonus3 bSubEle,Ele_Dark,30,BF_SHORT; bonus3 bSubEle,Ele_Ghost,30,BF_SHORT; bonus3 bSubEle,Ele_Undead,30,BF_SHORT; bonus bFlee,30; skill "AL_TELEPORT",1; bonus bUnbreakableGarment,0; },{},{}
-2542,Flame_Manteau,Flame Manteau of Naght Sieger,5,20,,500,,16,,1,0xFFFFFFFE,2,2,4,,70,1,0,{ bonus bMaxHPRate,5; bonus bMdef,2; bonus bMatkRate,1; bonus2 bAddEle,Ele_Fire,2; },{},{}
-2543,Sylphid_Manteau,Sylphid Manteau,5,20,,0,,33,,0,0xFFFFFFFF,7,2,4,,0,0,0,{ bonus bFlee,13; bonus2 bSubEle,Ele_Neutral,13; bonus bFlee2,1; },{},{}
-2544,Leather_Of_Tendrilion,Leather of Tendrilion,5,20,,500,,14,,1,0x00CFDF80,2,2,4,,0,1,0,{ bonus2 bSubEle,Ele_Water,5; bonus2 bSubEle,Ele_Earth,5; bonus2 bSubRace,RC_Plant,5; bonus2 bSubRace,RC_Brute,5; },{},{}
-2545,Musika,Musika,5,20,,500,,10,,1,0x00008100,2,2,4,,70,1,0,{ bonus bMdef,3; bonus3 bAutoSpellwhenhit,"AL_HEAL",getskilllv("AL_HEAL") ? getskilllv("AL_HEAL") : 1,20; },{},{}
+2535,Cloak_Of_Survival_C,Cloak Of Survival,5,1,,0,,5,,0,0x00810204,7,2,4,,0,0,0,{ bonus bVit,10; bonus bMdef,10; if (isequipped(1618) || isequipped(1620)) { bonus bMatkRate,5; bonus2 bSubEle,Ele_Neutral,25; } },{},{}
+2536,Skin_Of_Ventus,Skin of Ventus,5,20,,250,,2,,1,0xFFFFFFFE,7,2,4,,60,1,0,{ bonus bMdef,2; bonus bMaxHP,200; bonus bFlee,10; },{},{}
+2537,Diabolus_Manteau,Diabolus Manteau,5,20,,250,,5,,1,0x00CFFF80,2,2,4,,0,1,0,{ bonus2 bSubEle,Ele_Neutral,5; bonus bMaxHP,100; bonus2 bAddDamageClass,1916,10; bonus2 bAddDamageClass,1917,10; if (isequipped(2433)) bonus bMaxHPRate,6; },{},{}
+2538,Commander_Manteau,Captain's Manteau,5,10,,0,,4,,1,0x026654E2,7,2,4,,80,1,0,{ bonus bMaxHP,50; bonus bMdef,1; bonus2 bSubRace,RC_DemiHuman,1; },{},{}
+2539,Commander_Manteau_,Commander's Manteau,5,10,,0,,3,,1,0x00898B1C,7,2,4,,80,1,0,{ bonus bMaxHP,50; bonus bMdef,1; bonus2 bSubRace,RC_DemiHuman,1; },{},{}
+2540,Sheriff_Manteau,Sheriff's Manteau,5,10,,0,,3,,1,0x01000000,7,2,4,,80,1,0,{ bonus bMaxHP,50; bonus bMdef,1; bonus2 bSubRace,RC_DemiHuman,1; },{},{}
+2541,Asprika,Asprika,5,20,,400,,5,,0,0xFFFFFFFF,7,2,4,,94,0,0,{ bonus bMdef,5; bonus3 bSubEle,Ele_Neutral,30,BF_SHORT; bonus3 bSubEle,Ele_Water,30,BF_SHORT; bonus3 bSubEle,Ele_Earth,30,BF_SHORT; bonus3 bSubEle,Ele_Fire,30,BF_SHORT; bonus3 bSubEle,Ele_Wind,30,BF_SHORT; bonus3 bSubEle,Ele_Poison,30,BF_SHORT; bonus3 bSubEle,Ele_Holy,30,BF_SHORT; bonus3 bSubEle,Ele_Dark,30,BF_SHORT; bonus3 bSubEle,Ele_Ghost,30,BF_SHORT; bonus3 bSubEle,Ele_Undead,30,BF_SHORT; bonus bFlee,30; skill "AL_TELEPORT",1; bonus bUnbreakableGarment,0; },{},{}
+2542,Flame_Manteau,Flame Manteau of Naght Sieger,5,20,,70,,4,,1,0xFFFFFFFE,2,2,4,,70,1,0,{ bonus bMaxHPRate,5; bonus bMdef,2; bonus bMatkRate,1; bonus2 bAddEle,Ele_Fire,2; },{},{}
+2543,Sylphid_Manteau,Sylphid Manteau,5,20,,0,,9,,0,0xFFFFFFFF,7,2,4,,0,0,0,{ bonus bFlee,13; bonus2 bSubEle,Ele_Neutral,13; bonus bFlee2,1; },{},{}
+2544,Leather_Of_Tendrilion,Leather of Tendrilion,5,20,,300,,3,,1,0x00CFDF80,2,2,4,,0,1,0,{ bonus2 bSubEle,Ele_Water,5; bonus2 bSubEle,Ele_Earth,5; bonus2 bSubRace,RC_Plant,5; bonus2 bSubRace,RC_Brute,5; },{},{}
+2545,Musika,Musika,5,20,,500,,2,,1,0x00008100,2,2,4,,70,1,0,{ bonus bMdef,3; bonus3 bAutoSpellwhenhit,"AL_HEAL",getskilllv("AL_HEAL") ? getskilllv("AL_HEAL") : 1,20; },{},{}
2546,Beach_Manteau,Beach Manteau,5,20,,600,,0,,1,0xFFFFFFFF,7,2,4,,0,1,0,{ bonus bStr,1; bonus bInt,1; bonus2 bSubEle,Ele_Fire,10; },{},{}
-2547,Cheap_Running_Shirts,Cheap Undershirt,5,0,,0,,11,,0,0xFFFFFFFF,7,2,4,,0,1,0,{ bonus bDex,2; bonus bFlee,10; bonus2 bSubEle,Ele_Neutral,10; bonus bMdef,1; },{},{}
-2548,Muffler_C,Neo Muffler,5,0,,0,,22,,0,0xFFFFFFFE,2,2,4,,95,0,0,{ bonus2 bSubRace,RC_DemiHuman,10; bonus bMaxHPrate,10; bonus2 bSubEle,Ele_Water,5; bonus2 bSubEle,Ele_Fire,5; bonus2 bSubEle,Ele_Holy,5; bonus2 bSubEle,Ele_Dark,5; },{},{}
-2549,Krieger_Muffler1,Glorious Muffler,5,20,,0,,3,,0,0xFFFFFFFE,7,2,4,,81,1,0,{ bonus bMaxHPRate,5; bonus2 bSubRace,RC_DemiHuman,5; },{},{}
+2547,Cheap_Running_Shirts,Cheap Undershirt,5,0,,0,,8,,0,0xFFFFFFFF,7,2,4,,0,1,0,{ bonus bDex,2; bonus bFlee,10; bonus2 bSubEle,Ele_Neutral,10; bonus bMdef,1; },{},{}
+2548,Muffler_C,Neo Muffler,5,0,,0,,5,,0,0xFFFFFFFE,2,2,4,,95,0,0,{ bonus2 bSubRace,RC_DemiHuman,10; bonus bMaxHPrate,10; bonus2 bSubEle,Ele_Water,5; bonus2 bSubEle,Ele_Fire,5; bonus2 bSubEle,Ele_Holy,5; bonus2 bSubEle,Ele_Dark,5; },{},{}
+2549,Krieger_Muffler1,Glorious Muffler,5,20,,0,,0,,0,0xFFFFFFFE,7,2,4,,81,1,0,{ bonus bMaxHPRate,5; bonus2 bSubRace,RC_DemiHuman,5; },{},{}
2550,Fisher's_Muffler,Fisher's Muffler,5,20,,200,,0,,0,0xFFFFFFFF,7,2,4,,0,1,0,{},{},{}
2551,Rider_Insignia_M,Crest of the Rider,5,20,,500,,4,,1,0xFFFFFFFE,2,2,4,,55,1,0,{ bonus bAgi,2; if (isequipped(2425) || isequipped(2434)) bonus bFlee,10; },{},{}
2552,Mithril_Magic_Cape_M,Mithril Magic Manteau,5,20,,400,,3,,1,0x00098B1C,2,2,4,,70,1,0,{ bonus bMdef,3; bonus5 bAutoSpellWhenHit,"NPC_ANTIMAGIC",1,200,BF_MAGIC,0; },{},{}
-2553,Dragon_Manteau,Dragon Manteau,5,20,,1000,,14,,1,0xFFFFFFFE,2,2,4,,0,1,0,{ bonus bAgi,1; bonus bMdef,5; },{},{}
-2554,Piece_Of_Angent_Skin,Nydhorgg's Shadow Garb,5,20,,400,,25,,1,0xFFFFFFFE,2,2,4,,90,1,0,{ bonus2 bSubEle,Ele_Neutral,7; bonus2 bSubEle,Ele_Water,7; bonus2 bSubEle,Ele_Earth,7; bonus2 bSubEle,Ele_Fire,7; bonus2 bSubEle,Ele_Wind,7; bonus2 bSubEle,Ele_Poison,7; bonus2 bSubEle,Ele_Holy,7; bonus2 bSubEle,Ele_Dark,7; bonus2 bSubEle,Ele_Ghost,7; bonus2 bSubEle,Ele_Undead,7; bonus bMaxSP,(BaseLevel/3)+(getrefine()*10); bonus3 bSPDrainRate,1,1,0; bonus bMdef,3; },{},{}
+2553,Dragon_Manteau,Dragon Manteau,5,20,,1000,,5,,1,0xFFFFFFFE,2,2,4,,0,1,0,{ bonus bAgi,1; bonus bMdef,5; },{},{}
+2554,Piece_Of_Angent_Skin,Nydhorgg's Shadow Garb,5,20,,400,,5,,1,0xFFFFFFFE,2,2,4,,90,1,0,{ bonus2 bSubEle,Ele_Neutral,7; bonus2 bSubEle,Ele_Water,7; bonus2 bSubEle,Ele_Earth,7; bonus2 bSubEle,Ele_Fire,7; bonus2 bSubEle,Ele_Wind,7; bonus2 bSubEle,Ele_Poison,7; bonus2 bSubEle,Ele_Holy,7; bonus2 bSubEle,Ele_Dark,7; bonus2 bSubEle,Ele_Ghost,7; bonus2 bSubEle,Ele_Undead,7; bonus bMaxSP,(BaseLevel/3)+(getrefine()*10); bonus3 bSPDrainRate,1,1,0; bonus bMdef,3; },{},{}
//2555,Freyja_SScarf7,Freyja Soul Scarf,5,20,,400,,4,,0,0xFFFFFFFF,7,2,4,,20,0,0,{},{},{}
//2556,Freyja_SScarf30,Freyja Soul Scarf,5,20,,400,,4,,0,0xFFFFFFFF,7,2,4,,20,0,0,{},{},{}
//2557,Freyja_SScarf60,Freyja Soul Scarf,5,20,,400,,4,,0,0xFFFFFFFF,7,2,4,,20,0,0,{},{},{}
@@ -1518,16 +1518,16 @@
2618,Matyr's_Flea_Guard,Matyr's Leash,5,2,,100,,1,,0,0xFFFFFFFE,7,2,136,,35,0,0,{ bonus bAgi,1; },{},{}
2619,Thimble_Of_Archer,Bow Thimble,5,10000,,100,,0,,0,0x00080808,7,2,136,,65,0,0,{ bonus bLongAtkRate,3; },{},{}
2620,Ring_Of_Rogue,Rogue's Treasure,5,10000,,100,,0,,0,0x02021040,7,2,136,,70,0,0,{ if(readparam(bStr)>=90){ bonus bHit,10; bonus bFlee,10; } if(readparam(bAgi)>=90){ bonus bAtk,10; bonus bCritical,10; } },{},{}
-2621,Ring_,Ring,5,30000,,100,,0,,1,0xFFFFFFFE,7,2,136,,90,0,0,{ bonus bStr,1; },{},{}
-2622,Earring_,Earring,5,30000,,100,,0,,1,0xFFFFFFFE,7,2,136,,90,0,0,{ bonus bInt,1; },{},{}
-2623,Necklace_,Necklace,5,30000,,100,,0,,1,0xFFFFFFFE,7,2,136,,90,0,0,{ bonus bVit,1; },{},{}
-2624,Glove_,Glove,5,30000,,100,,0,,1,0xFFFFFFFE,7,2,136,,90,0,0,{ bonus bDex,1; },{},{}
-2625,Brooch_,Brooch,5,30000,,100,,0,,1,0xFFFFFFFE,7,2,136,,90,0,0,{ bonus bAgi,1; },{},{}
-2626,Rosary_,Rosary,5,15000,,100,,0,,1,0xFFFFFFFE,7,2,136,,90,0,0,{ bonus bLuk,1; bonus bMdef,3; },{},{}
+2621,Ring_,Ring,5,30000,,200,,0,,1,0xFFFFFFFE,7,2,136,,90,0,0,{ bonus bStr,1; },{},{}
+2622,Earring_,Earring,5,30000,,200,,0,,1,0xFFFFFFFE,7,2,136,,90,0,0,{ bonus bInt,1; },{},{}
+2623,Necklace_,Necklace,5,30000,,200,,0,,1,0xFFFFFFFE,7,2,136,,90,0,0,{ bonus bVit,1; },{},{}
+2624,Glove_,Glove,5,30000,,200,,0,,1,0xFFFFFFFE,7,2,136,,90,0,0,{ bonus bDex,1; },{},{}
+2625,Brooch_,Brooch,5,30000,,200,,0,,1,0xFFFFFFFE,7,2,136,,90,0,0,{ bonus bAgi,1; },{},{}
+2626,Rosary_,Rosary,5,15000,,200,,0,,1,0xFFFFFFFE,7,2,136,,90,0,0,{ bonus bMdef,3; bonus bLuk,1; },{},{}
2627,Belt,Belt,5,20000,,1200,,0,,1,0xFFFFFFFF,7,2,136,,25,0,0,{},{},{}
2628,Novice_Armlet,Novice Armlet,5,400,,200,,0,,1,0x00000001,7,2,136,,1,0,0,{},{},{}
-2629,Magingiorde,Megingjard,5,20,,8000,,2,,0,0xFFFFFFFF,7,2,136,,94,0,0,{ bonus bStr,40+(BaseLevel/5); bonus bMdef,7; if(readparam(bStr)>=120) bonus2 bAddRace,RC_Boss,10; },{},{}
-2630,Brysinggamen,Brisingamen,5,20,,1500,,1,,0,0xFFFFFFFF,7,2,136,,94,0,0,{ bonus bStr,6; bonus bInt,10; bonus bVit,6; bonus bDex,6; bonus bAgi,6; bonus bLuk,10; bonus bMdef,5; bonus bHealPower,6; },{},{}
+2629,Magingiorde,Megingjard,5,20,,8000,,2,,0,0xFFFFFFFF,7,2,136,,94,0,0,{ bonus bStr,40; bonus bMdef,7; },{},{}
+2630,Brysinggamen,Brisingamen,5,20,,1500,,1,,0,0xFFFFFFFF,7,2,136,,94,0,0,{ bonus bStr,6; bonus bAgi,6; bonus bVit,6; bonus bInt,6; bonus bLuk,10; bonus bMdef,5; },{},{}
2631,First_Age_Ring,Celebration Ring,5,1,,10,,0,,0,0xFFFFFFFF,7,2,136,,1,0,0,{},{},{}
//2632,Korean_Trinket,Korean Trinket,5,125000,,100,,1,,0,0xFFFFFFFE,7,2,136,,65,0,0,{ bonus bVit,1; bonus bDex,1; bonus bLuk,1; },{},{}
//2633,Jade_Ring,Jade Ring,5,204000,,100,,0,,0,0xFFFFFFFE,7,2,136,,80,0,0,{ bonus bStr,2; bonus bInt,1; },{},{}
@@ -1541,7 +1541,7 @@
2641,Fashionable_Sack,Fashion Hip Sack,5,20,,700,,0,,0,0x00040420,7,2,136,,50,0,0,{ bonus bStr,2; },{},{}
2642,Serin's_Gold_Ring,Serin's Gold Ring,5,20,,0,,0,,0,0xFFFFFFFF,7,2,136,,0,0,0,{},{},{}
2643,Serin's_Gold_Ring_,Serin's Gold Ring,5,45000,,100,,0,,0,0xFFFFFFFF,7,2,136,,0,0,0,{},{},{}
-2644,The_Sign_,The Sign,5,2,,0,,0,,0,0xFFFFFFFF,7,2,136,,0,0,0,{ bonus2 bAddRace,RC_NonBoss,5; bonus2 bAddRace,RC_Boss,5; bonus bMatkRate,5; },{},{}
+2644,The_Sign_,The Sign,5,2,,0,,0,,0,0xFFFFFFFF,7,2,136,,0,0,0,{ bonus2 bAddRace,RC_NonBoss,5; bonus2 bAddRace,RC_Boss,5; bonus2 bMagicAddRace,RC_NonBossn,5; bonus2 bMagicAddRace,RC_Boss,5; },{},{}
2645,Moonlight_Ring,Moonlight Ring,5,40000,,200,,0,,0,0x02021040,7,2,136,,60,0,0,{ bonus bMdef,2; },{},{}
2646,Bunch_Of_Carnation,Bunch of Carnations,5,2,,100,,0,,0,0xFFFFFFFF,7,2,136,,0,0,0,{ bonus bAllStats,3; },{},{}
2647,Nile_Rose,Nile Rose,5,2,,100,,0,,1,0xFFFFFFFF,7,2,136,,0,0,0,{ bonus bMaxHP,10; },{},{}
@@ -1553,7 +1553,7 @@
2653,Sacrifice_Ring,Sacrifice Ring,5,20,,100,,0,,0,0xFFFFFFFF,7,2,136,,90,0,0,{},{},{}
2654,Shinobi's_Sash,Shinobi Sash,5,20000,,300,,1,,0,0x02021040,7,2,136,,30,0,0,{ bonus bStr,1; bonus bAgi,1; bonus bMdef,1; },{},{}
2655,Bloody_Iron_Ball,Bloodied Shackle Ball,5,50000,,4000,,0,,0,0xFFFFFFFE,7,2,136,,1,0,0,{},{},{}
-2656,Hyper_Changer,Armor Charm,5,20000,,1000,,0,,0,0x000654E2,7,2,136,,1,0,0,{ bonus bMaxHP,50; },{},{}
+2656,Hyper_Changer,Armor Charm,5,20000,,1000,,1,,0,0x000654E2,7,2,136,,1,0,0,{ bonus bMaxHP,50; },{},{}
2657,Lab_Passport,Laboratory Permit,5,20,,100,,0,,0,0xFFFFFFFF,7,2,136,,1,0,0,{},{},{}
2658,Nile_Rose_,Nile Rose,5,2,,100,,0,,1,0xFFFFFFFF,7,2,136,,0,0,0,{ bonus bMaxHP,10; },{},{}
2659,Vesper_Core01,Vesper Core 01,5,20,,100,,1,,0,0x00CFFF80,2,2,136,,1,0,0,{ bonus bMdef,3; bonus bInt,2; bonus bMaxSPrate,5; },{},{}
@@ -1591,8 +1591,8 @@
2691,Necklace_C,Necklace,5,1,,0,,0,,0,0xFFFFFFFE,7,2,136,,1,0,0,{ bonus bVit,4; },{},{}
2692,Glove_C,Glove,5,1,,0,,0,,0,0xFFFFFFFE,7,2,136,,1,0,0,{ bonus bDex,4; },{},{}
2693,Brooch_C,Brooch,5,1,,0,,0,,0,0xFFFFFFFE,7,2,136,,1,0,0,{ bonus bAgi,4; },{},{}
-2694,Rosary_C,Rosary,5,1,,0,,0,,0,0xFFFFFFFE,7,2,136,,1,0,0,{ bonus bLuk,4; bonus bMdef,5; },{},{}
-2695,Safety_Ring_C,Safety Ring,5,1,,0,,8,,0,0xFFFFFFFE,7,2,136,,1,0,0,{ bonus bMdef,8; },{},{}
+2694,Rosary_C,Rosary,5,1,,0,,0,,0,0xFFFFFFFE,7,2,136,,1,0,0,{ bonus bMdef,5; bonus bLuk,4; },{},{}
+2695,Safety_Ring_C,Safety Ring,5,1,,0,,5,,0,0xFFFFFFFE,7,2,136,,1,0,0,{ bonus bMdef,5; },{},{}
2696,Vesper_Core01_C,Vesper Core 01,5,1,,0,,1,,0,0xFFFFFFFE,7,2,136,,1,0,0,{ bonus bMdef,3; bonus bInt,2; bonus bMaxSPrate,5; },{},{}
2697,Vesper_Core02_C,Vesper Core 02,5,1,,0,,1,,0,0xFFFFFFFE,7,2,136,,1,0,0,{ bonus bMdef,3; bonus bStr,3; bonus bBaseAtk,10; },{},{}
2698,Vesper_Core03_C,Vesper Core 03,5,1,,0,,1,,0,0xFFFFFFFE,7,2,136,,1,0,0,{ bonus bMdef,3; bonus bAgi,3; bonus bFlee,5; },{},{}
@@ -1602,7 +1602,7 @@
2702,Bison_Horn,Bison Horn,5,20,,100,,0,,1,0xFFFFFFFE,2,2,136,,90,0,0,{ bonus bAgi,2; },{},{}
2703,Expert_Ring,Expert Ring,5,20,,150,,0,,1,0xFFFFFFFE,2,2,136,,50,0,0,{ bonus bDelayRate,-5; bonus bUseSPrate,5; },{},{}
2704,Golden_Accessory,Golden Accessories,5,20,,100,,4,,0,0xFFFFFFFF,7,2,136,,0,0,0,{ bonus bMdef,4; },{},{}
-2705,Golden_Accessory2,Golden Accessories,5,20,,100,,0,,0,0xFFFFFFFF,7,2,136,,,,,{ bonus2 bAddMonsterDropItem,12018,500; },{},{}
+2705,Golden_Accessory2,Golden Accessories,5,20,,100,,4,,0,0xFFFFFFFF,7,2,136,,,,,{ bonus2 bAddMonsterDropItem,12018,500; },{},{}
2706,Handcuff,Arrest Handcuffs,5,0,,0,,0,,0,0xFFFFFFFF,7,2,136,,0,0,0,{},{},{}
2707,GUSLI,GUSLI,5,20,,100,,0,,0,0xFFFFFFFF,7,2,136,,0,0,0,{},{},{}
2708,Chinese_Handicraft,Chinese Handicraft,5,0,,50,,0,,0,0xFFFFFFFF,7,2,136,,0,0,0,{ bonus3 bAutoSpell,"MG_FIREBOLT",5,300; },{},{}
@@ -1614,7 +1614,7 @@
2714,Marvelous_Pandent,Marvelous Pendant,5,0,,100,,0,,1,0xFFFFFFFF,7,2,136,,0,0,0,{},{},{}
2715,Skul_Ring_,Skull Ring,5,10000,,100,,0,,1,0xFFFFFFFF,7,2,136,,0,0,0,{ bonus2 bSubRace,RC_Undead,1; },{},{}
2716,Librarian_Glove,Librarian Glove,5,20,,100,,0,,1,0x00810200,7,2,136,,80,0,0,{ bonus bMaxSP,20; if ((isequipped(1572) || isequipped(1573)) && isequipped(2717)) { bonus bInt,5; bonus bMaxHP,700; bonus bAspdRate,5; } },{},{}
-2717,Pocket_Watch_,Pocket Watch,5,20,,200,,1,,0,0x00810204,7,2,136,,80,0,0,{},{},{}
+2717,Pocket_Watch_,Pocket Watch,5,20,,200,,0,,0,0x00810204,7,2,136,,80,0,0,{},{},{}
2718,Lunatic_Brooch,Lunatic Brooch,5,20,,200,,0,,1,0x00080808,7,2,136,,65,0,0,{},{},{}
2719,Iron_Wrist,Iron Wrist,5,20,,700,,1,,0,0x000444A2,7,2,136,,50,0,0,{ bonus2 bSkillAtk,"SM_BASH",6; bonus2 bSkillAtk,"MC_MAMMONITE",6; },{},{}
2720,Medal_Swordman,Medal of Honor,5,20,,0,,1,,0,0x00404082,7,2,136,,70,0,0,{ bonus2 bAddRace,RC_NonBoss,5; bonus2 bAddRace,RC_Boss,5; bonus bMatkRate,5; bonus bHit,10; bonus bMaxHP,500; bonus bMaxSP,50; bonus3 bAddEff,Eff_Stun,100,ATF_SHORT; },{},{}
@@ -1631,8 +1631,8 @@
2731,Morroc_Charm_Stone,Rune Spellstone,5,20,,50,,0,,1,0xFFFFFFFE,7,2,136,,80,0,0,{ bonus bMaxSP,50; bonus bCastRate,-1; },{},{}
2732,Morroc_Ring,Death Loop,5,20,,50,,0,,1,0xFFFFFFFE,7,2,136,,80,0,0,{ bonus bCritical,5; },{},{}
2733,Medal_Gunner,Sheriff Badge,5,20,,0,,1,,0,0x01000000,7,2,136,,70,0,0,{ bonus2 bAddRace,RC_NonBoss,5; bonus2 bAddRace,RC_Boss,5; bonus bMatkRate,5; bonus bCritical,10; bonus bMaxHP,300; bonus bMaxSP,80; bonus3 bAddEff,Eff_Blind,1000,ATF_LONG; },{},{}
-2734,Directive_A,Directive,5,0,,0,,0,,0,0x00000001,7,2,136,,0,0,0,{},{},{}
-2735,Directive_B,Directive,5,0,,0,,0,,0,0x00000001,7,2,136,,0,0,0,{},{},{}
+2734,Directive_A,Directive,5,0,,0,,1,,0,0x00000001,7,2,136,,0,0,0,{},{},{}
+2735,Directive_B,Directive,5,0,,0,,1,,0,0x00000001,7,2,136,,0,0,0,{},{},{}
2736,Navel_Ring,Navel Ring,5,20,,100,,0,,0,0xFFFFFFFE,7,2,136,,75,0,0,{ bonus bDex,3; bonus bLuk,3; bonus bMdef,2; },{},{}
2737,Foot_Ring,Foot Ring,5,20,,150,,0,,0,0xFFFFFFFE,7,2,136,,75,0,0,{ bonus bVit,3; bonus bMaxHPRate,10; },{},{}
2738,Shiny_Coin,Shiny Coin,5,0,,0,,0,,0,0xFFFFFFFF,7,2,136,,0,0,0,{ bonus2 bAddRace,RC_NonBoss,6; bonus2 bAddRace,RC_Boss,6; bonus bMatkRate,6; },{},{}
@@ -1641,7 +1641,7 @@
2741,All_In_One_Ring,All In One Ring,5,20,,0,,0,,0,0xFFFFFFFF,7,2,136,,0,0,0,{ bonus bAllStats,1; bonus bNoCastCancel,0; bonus bCastRate,10; skill "AL_HEAL",1; skill "AL_TELEPORT",1; },{},{}
//2742,Lucky_Clip,Lucky Clip,5,0,,0,,0,,0,0xFFFFFFFF,7,2,136,,0,0,0,{},{},{}
2743,Angelic_Ring,Angelic Ring,5,20,,100,,0,,0,0x00CFFF80,2,2,136,,70,0,0,{ bonus bInt,2; bonus bDex,1; bonus bMdef,2; autobonus3 "{ bonus bHealPower,20; }",50,2000,"AL_HEAL"; autobonus3 "{ bonus bHealPower,20; }",50,2000,"AM_POTIONPITCHER"; autobonus3 "{ bonus bHealPower,20; }",50,2000,"PR_SANCTUARY"; },{},{}
-2744,Sprint_Ring,Sprint Ring,5,20,,100,,0,,0,0x00CFFF80,2,2,136,,0,0,0,{ bonus bCastrate,-10; bonus bDelayRate,-5; },{},{}
+2744,Sprint_Ring,Sprint Ring,5,20,,100,,0,,0,0x00CFFF80,2,2,136,,70,0,0,{ bonus bCastrate,-10; bonus bDelayRate,5; },{},{}
2745,Pinguicula_Corsage,Pinguicula Corsage,5,20,,200,,0,,1,0x00CFFF80,2,2,136,,70,0,0,{ bonus bMdef,2; bonus bMaxSP,25; },{},{}
2746,Cold_Heart,Cold Heart,5,20,,100,,1,,0,0x00001000,2,2,136,,80,0,0,{ bonus bAgi,3; if( isequipped(2620) ) { bonus2 bAddSize,1,8; bonus bAspdRate,getequiprefinerycnt(EQI_HAND_R)/2; } },{},{}
2747,Black_Cat,Black Cat,5,20,,100,,1,,0,0x00020000,2,2,136,,80,0,0,{ bonus bDex,3; if( isequipped(2620) ) { bonus2 bAddSize,2,8; bonus bHit,getequiprefinerycnt(EQI_HAND_R)/2; bonus bCastrate,-getequiprefinerycnt(EQI_HAND_R)/2; } },{},{}
@@ -1678,7 +1678,7 @@
2778,Shaman_Earing,Shaman Earrings,5,20,,100,,0,,0,0xFFFFFFFF,7,2,136,,30,0,0,{ bonus bInt,2; },{},{}
2779,Dark_Knight_Belt,Dark Knight Belt,5,20,,500,,1,,0,0xFFFFFFFF,7,2,136,,30,0,0,{ bonus bStr,2; bonus bAgi,1; },{},{}
2780,Dark_Knight_Glove,Dark Knight Glove,5,20,,500,,1,,0,0xFFFFFFFF,7,2,136,,80,0,0,{ autobonus "{ bonus bAspdRate,2; }",10,10000,0,"{ specialeffect2 EF_POTION_BERSERK; }"; },{},{}
-2781,Aumdura's_Grace,Aumdura's Benefit,5,20,,100,,1,,1,0xFFFFFFFF,7,2,136,,1,0,0,{ bonus bAllStats,1; bonus bMdef,1; },{},{}
+2781,Aumdura's_Grace,Aumdura's Benefit,5,0,,100,,1,,1,0xFFFFFFFF,7,2,136,,1,0,0,{ bonus bAllStats,1; bonus bMdef,1; },{},{}
2782,Ring_Of_Wise_King,Ring of the Ancient Wise King,5,20,,100,,0,,0,0xFFFFFFFF,7,2,136,,0,0,0,{ bonus bMaxHP,50; bonus bMaxSP,20; },{},{}
2783,Eyes_Stone_Ring,Eye Stone Ring,5,20,,100,,0,,1,0xFFFFFFFF,7,2,136,,70,0,0,{ bonus bCritical,2; bonus bMaxSP,25; },{},{}
2784,Oh_Holy_Night,Christmas Musicbox,5,20,,100,,0,,0,0xFFFFFFFF,7,2,136,,1,0,0,{ skill "ALL_WEWISH",1; },{},{}
@@ -1697,17 +1697,17 @@
2797,Magical_Stone_,Rocks,5,0,,200,,0,,0,0x00810204,7,2,136,,99,0,0,{ bonus2 bAddDamageClass,2049,10; bonus2 bAddDefClass,2050,-10; bonus3 bAddClassDropItem,6151,2049,70; },{},{}
2798,Will_Of_Exhausted_Angel,Will Of Exhausted Angel,5,0,,200,,0,,0,0x00008100,7,2,136,,99,0,0,{ getmapxy .@map$,.@x,.@y,0; if(.@map$ == "job3_arch02") { bonus2 bAddDefClass,1761,50; bonus2 bAddDefClass,1762,50; } },{},{}
2799,Kuirpenring,Kuirpenring,5,0,,100,,0,,1,0xFFFFFFFF,7,2,136,,0,0,0,{ bonus bMdef,1; },{},{}
-2800,Accelerator,Accelerator,5,100000,,100,,0,,1,0x00000000,7,2,136,,99,0,0,{ bonus bAgi,2; },{},{}
-2801,Hovering_Booster,Hovering Booster,5,100000,,2000,,0,,1,0x00000000,7,2,136,,99,0,0,{ bonus bAgi,1; },{},{}
-2802,Suicidal_Device,Suicidal Device,5,500000,,1000,,0,,1,0x00000000,7,2,136,,99,0,0,{},{},{}
-2803,Shape_Shifter,Shape Shifter,5,100000,,500,,0,,1,0x00000000,7,2,136,,99,0,0,{ bonus bInt,3; },{},{}
-2804,Cooling_Device,Cooling Device,5,100000,,2500,,0,,1,0x00000000,7,2,136,,99,0,0,{ bonus bDex,1; },{},{}
-2805,Magnetic_Field_Generator,Magnetic Field Generator,5,100000,,6000,,0,,1,0x00000000,7,2,136,,99,0,0,{ bonus bDex,1; },{},{}
-2806,Barrier_Builder,Barrier Builder,5,150000,,8000,,3,,1,0x00000000,7,2,136,,99,0,0,{ bonus bDex,1; },{},{}
-2807,Repair_Kit,Repair Kit,5,200000,,400,,0,,1,0x00000000,7,2,136,,99,0,0,{},{},{}
-2808,Camouflage_Generator,Camouflague Generator,5,250000,,1000,,0,,1,0x00000000,7,2,136,,99,0,0,{ bonus bAgi,3; },{},{}
-2809,High_Quality_Cooler,High Quality Cooler,5,100000,,2500,,0,,1,0x00000000,7,2,136,,99,0,0,{ bonus bDex,1; },{},{}
-2810,Special_Cooler,Special Cooler,5,100000,,2500,,0,,1,0x00000000,7,2,136,,99,0,0,{ bonus bDex,1; },{},{}
+2800,Accelerator,Accelerator,5,100000,,100,,0,,1,0x00000400,8,2,136,,99,0,0,{ bonus bAgi,2; },{},{}
+2801,Hovering_Booster,Hovering Booster,5,100000,,2000,,0,,1,0x00000400,8,2,136,,99,0,0,{ bonus bAgi,1; },{},{}
+2802,Suicidal_Device,Suicidal Device,5,500000,,1000,,0,,1,0x00000400,8,2,136,,99,0,0,{},{},{}
+2803,Shape_Shifter,Shape Shifter,5,100000,,500,,0,,1,0x00000400,8,2,136,,99,0,0,{ bonus bInt,3; },{},{}
+2804,Cooling_Device,Cooling Device,5,100000,,2500,,0,,1,0x00000400,8,2,136,,99,0,0,{ bonus bDex,1; },{},{}
+2805,Magnetic_Field_Generator,Magnetic Field Generator,5,100000,,6000,,0,,1,0x00000400,8,2,136,,99,0,0,{ bonus bDex,1; },{},{}
+2806,Barrier_Builder,Barrier Builder,5,150000,,8000,,3,,1,0x00000400,8,2,136,,99,0,0,{ bonus bDex,1; },{},{}
+2807,Repair_Kit,Repair Kit,5,200000,,400,,0,,1,0x00000400,8,2,136,,99,0,0,{},{},{}
+2808,Camouflage_Generator,Camouflague Generator,5,250000,,1000,,0,,1,0x00000400,8,2,136,,99,0,0,{ bonus bAgi,3; },{},{}
+2809,High_Quality_Cooler,High Quality Cooler,5,100000,,2500,,0,,1,0x00000400,8,2,136,,99,0,0,{ bonus bDex,1; },{},{}
+2810,Special_Cooler,Special Cooler,5,100000,,2500,,0,,1,0x00000400,8,2,136,,99,0,0,{ bonus bDex,1; },{},{}
//2811,Freyja_SBracelet7,Freyja's Spirit Bracelet,5,20,,200,,1,,0,0xFFFFFFFF,7,2,136,,20,0,0,{ bonus bAllStats,1; },{},{}
//2812,Freyja_SBracelet30,Freyja's Spirit Bracelet,5,20,,200,,1,,0,0xFFFFFFFF,7,2,136,,20,0,0,{ bonus bAllStats,1; },{},{}
//2813,Freyja_SBracelet60,Freyja's Spirit Bracelet,5,20,,200,,1,,0,0xFFFFFFFF,7,2,136,,20,0,0,{ bonus bAllStats,1; },{},{}
@@ -2108,7 +2108,7 @@
4340,Teddy_Bear_Card,Teddy Bear Card,6,20,,10,,,,,,,,32,,,,,{ bonus2 bSubRace,RC_Undead,30; },{},{}
4341,Metaling_Card,Metaling Card,6,20,,10,,,,,,,,2,,,,,{ bonus3 bAutoSpell,"RG_STRIPWEAPON",1,50; },{},{}
4342,Rsx_0806_Card,RSX-0806 Card,6,20,,10,,,,,,,,16,,,,,{ bonus bVit,3; bonus bUnbreakableArmor,0; bonus bNoKnockback,0; },{},{}
-4343,Mole_Card,Holden Card,6,20,,10,,,,,,,,769,,,,,{ bonus bLuk,2; if(isequipped(4186,4281,4036,4233)) { bonus bStr,4; bonus bMaxHPrate,7; bonus bMaxSPrate,7; bonus2 bSkillAtk,"MC_MAMMONITE",20; bonus bSPDrainValue,1; if(BaseJob == Job_Alchemist) { bonus3 bAutoSpell,"BS_ADRENALINE",1,10; bonus2 bAddMonsterDropItem,7139,3; bonus2 bAddMonsterDropItem,905,10; } } },{},{}
+4343,Mole_Card,Holden Card,6,20,,10,,,,,,,,769,,,,,{ bonus bLuk,2; if(isequipped(4186,4281,4036,4233)) { bonus bStr,4; bonus bMaxHPrate,7; bonus bMaxSPrate,7; bonus2 bSkillAtk,"MC_MAMMONITE",20; bonus bSPDrainValue,1; if(BaseJob == Job_Alchemist) { bonus4 bAutoSpell,"BS_ADRENALINE",1,10,0; bonus2 bAddMonsterDropItem,7139,3; bonus2 bAddMonsterDropItem,905,10; } } },{},{}
4344,Anopheles_Card,Anopheles Card,6,20,,10,,,,,,,,136,,,,,{ bonus3 bAddMonsterDropItem,12058,RC_Insect,50; },{},{}
4345,Hill_Wind_Card,Hill Wind Card,6,20,,10,,,,,,,,2,,,,,{ bonus2 bSkillAtk,"MG_THUNDERSTORM",5; bonus2 bSkillAtk,"WZ_JUPITEL",5; bonus2 bSkillAtk,"WZ_VERMILION",5; },{},{ heal 0,-50; }
4346,Ygnizem_Card,Egnigem Cenia Card,6,20,,10,,,,,,,,16,,,,,{ bonus bStr,readparam(bInt)/18; },{},{}
@@ -2214,9 +2214,9 @@
4447,Centipede_Card,Centipede Card,6,20,,10,,,,,,,,32,,,,,{ bonus2 bSubEle,Ele_Poison,20; bonus2 bAddEle,Ele_Poison,5; },{},{}
4448,Cornus_Card,Cornus Card,6,20,,10,,,,,,,,32,,,,,{ bonus2 bSubEle,Ele_Holy,20; bonus2 bAddEle,Ele_Holy,5; },{},{}
4449,Dark_Shadow_Card,Dark Shadow Card,6,20,,10,,,,,,,,32,,,,,{ bonus2 bSubEle,Ele_Dark,20; bonus2 bAddEle,Ele_Dark,5; },{},{}
-4450,Banshee_Master_Card,Banshee Master Card,6,20,,10,,,,,,,,16,,,,,{ bonus bInt,1; bonus bEquipmentMatk,10; },{},{}
+4450,Banshee_Master_Card,Banshee Master Card,6,20,,10,,,,,,,,16,,,,,{ bonus bInt,1; /* bonus bMAtk,10; */ },{},{}
4451,Entweihen_Card,Entweihen Crothen Card,6,20,,10,,,,,,,,16,,,,,{},{},{}
-4452,Centipede_Larva_Card,Centipede Larva Card,6,20,,10,,,,,,,,2,,,,,{ bonus bInt,1; bonus bEquipmentMatk,3; },{},{}
+4452,Centipede_Larva_Card,Centipede Larva Card,6,20,,10,,,,,,,,2,,,,,{ bonus bInt,1; /* bonus bMAtk,3; */ },{},{}
4453,Hilsrion_Card,Hillsrion Card,6,20,,10,,,,,,,,2,,,,,{ bonus bAtk,25; },{},{}
4454,Light_Up_Card1,Light Up Card,6,20,,10,,,,,,,,2,,,,,{},{},{}
4455,Light_Up_Card2,Light Up Card,6,20,,10,,,,,,,,2,,,,,{},{},{}
@@ -2282,8 +2282,8 @@
4757,Luck8,LUK+8,6,20,,10,,,,,,,,16,,,,,{ bonus bLuk,8; },{},{}
4758,Luck9,LUK+9,6,20,,10,,,,,,,,16,,,,,{ bonus bLuk,9; },{},{}
4759,Luck10,LUK+10,6,20,,10,,,,,,,,16,,,,,{ bonus bLuk,10; },{},{}
-4760,Matk1,MATK+1%,6,20,,10,,,,,,,,16,,,,,{ bonus bMatkRate,1; bonus bFixedCastRate,-1; },{},{}
-4761,Matk2,MATK+2%,6,20,,10,,,,,,,,16,,,,,{ bonus bMatkRate,2; bonus bFixedCastRate,-1; },{},{}
+4760,Magic_Attack1,MATK+1%,6,20,,10,,,,,,,,16,,,,,{ bonus bMatkRate,1; },{},{}
+4761,Magic_Attack2,MATK+2%,6,20,,10,,,,,,,,16,,,,,{ bonus bMatkRate,2; },{},{}
4762,Evasion6,FLEE+6,6,20,,10,,,,,,,,16,,,,,{ bonus bFlee,6; },{},{}
4763,Evasion12,FLEE+12,6,20,,10,,,,,,,,16,,,,,{ bonus bFlee,12; },{},{}
4764,Critical5,CRI+5,6,20,,10,,,,,,,,16,,,,,{ bonus bCritical,5; },{},{}
@@ -2330,91 +2330,91 @@
4805,Heal_Amount2,Heal Amount2,6,20,,10,,,,,,,,16,,,,,{},{},{}
// More Headgears
//===================================================================
-5001,Headset,Headset,5,20,,200,,6,,0,0xFFFFFFFE,7,2,256,,1,1,87,{ bonus2 bResEff,Eff_Curse,1000; },{},{}
-5002,Gemmed_Crown,Jewel Crown,5,20,,600,,9,,0,0x000654E2,7,2,256,,60,1,88,{ bonus bInt,2; bonus bLuk,1; bonus bMdef,3; },{},{}
-5003,Joker_Jester,Joker Jester,5,20,,100,,3,,0,0xFFFFFFFE,7,2,256,,0,1,89,{ bonus bLuk,2; bonus bMdef,5; },{},{}
+5001,Headset,Headset,5,20,,200,,3,,0,0xFFFFFFFE,7,2,256,,1,1,87,{ bonus2 bResEff,Eff_Curse,1000; },{},{}
+5002,Gemmed_Crown,Jewel Crown,5,20,,600,,4,,0,0x000654E2,7,2,256,,60,1,88,{ bonus bInt,2; bonus bLuk,1; bonus bMdef,3; },{},{}
+5003,Joker_Jester,Joker Jester,5,20,,100,,1,,0,0xFFFFFFFE,7,2,256,,0,1,89,{ bonus bLuk,2; bonus bMdef,5; },{},{}
5004,Oxygen_Mask,Oxygen Mask,5,20,,200,,0,,0,0xFFFFFFFE,7,2,1,,0,0,90,{ bonus2 bResEff,Eff_Poison,2000; },{},{}
5005,Gas_Mask,Gas Mask,5,20,,100,,1,,0,0xFFFFFFFE,7,2,513,,0,0,91,{ bonus2 bResEff,Eff_Poison,3000; },{},{}
5006,Machoman_Glasses,Machoman's Glasses,5,36000,,100,,1,,0,0xFFFFFFFE,7,2,512,,0,0,92,{},{},{}
-5007,Loard_Circlet,Grand Circlet,5,20,,200,,7,,0,0xFFFFFFFE,7,2,256,,55,1,93,{ bonus bStr,1; bonus bInt,1; bonus bLuk,1; bonus bMdef,4; },{},{}
+5007,Loard_Circlet,Grand Circlet,5,20,,200,,3,,0,0xFFFFFFFE,7,2,256,,55,1,93,{ bonus bStr,1; bonus bInt,1; bonus bLuk,1; bonus bMdef,4; },{},{}
5008,Puppy_Love,Puppy Love,5,20,,100,,1,,0,0xFFFFFFFE,7,2,256,,0,0,94,{},{},{}
-5009,Safety_Helmet,Safety Helmet,5,20,,500,,7,,0,0xFFFFFFFE,7,2,256,,0,1,95,{ bonus bMdef,3; bonus bUnbreakableHelm,0; },{},{}
-5010,Indian_Hair_Piece,Indian Fillet,5,20,,100,,5,,0,0xFFFFFFFF,7,2,256,,0,1,96,{},{},{}
-5011,Antenna,Aerial,5,20,,100,,5,,0,0xFFFFFFFF,7,2,256,,0,1,97,{},{},{}
-5012,Ph.D_Hat,Ph.D Hat,5,20,,200,,5,,0,0xFFFFFFFE,7,2,256,,0,1,98,{},{},{}
-5013,Horn_Of_Lord_Kaho,Lord Kaho's Horn,5,20,,100,,30,,0,0xFFFFFFFF,7,2,256,,0,1,99,{ bonus bMdef,10; bonus bStr,5; bonus bAgi,10; bonus bVit,10; bonus bInt,5; bonus bLuk,20; },{},{}
-5014,Fin_Helm,Fin Helm,5,20,,300,,5,,0,0x00004082,7,2,512,,65,0,100,{},{},{}
-5015,Egg_Shell,Egg Shell,5,20,,200,,6,,0,0xFFFFFFFF,7,2,256,,0,0,101,{},{},{}
-5016,Boy's_Cap,Boy's Cap,5,20,,100,,3,,0,0xFFFFFFFE,7,2,256,,0,1,102,{},{},{}
-5017,Bone_Helm,Bone Helm,5,20,,800,,15,,0,0x000444A2,7,2,256,,70,1,103,{ bonus2 bSubEle,Ele_Dark,-15; },{},{}
-5018,Feather_Bonnet,Feather Bonnet,5,20,,300,,8,,0,0x00080808,7,2,256,,0,1,104,{ bonus bAgi,1; },{},{}
-5019,Corsair,Corsair,5,20,,500,,11,,0,0xFFFFFFFE,7,2,256,,0,1,105,{ bonus bVit,1; },{},{}
-5020,Kafra_Band,Kafra Band,5,20,,500,,5,,0,0xFFFFFFFF,7,2,256,,0,1,106,{ bonus bMdef,3; },{},{}
-5021,Bankruptcy_Of_Heart,Grief for Greed,5,20,,1200,,8,,0,0x00040420,7,2,256,,38,1,107,{ bonus bInt,1; bonus bDex,1; },{},{}
+5009,Safety_Helmet,Safety Helmet,5,20,,500,,3,,0,0xFFFFFFFE,7,2,256,,0,1,95,{ bonus bMdef,3; bonus bUnbreakableHelm,0; },{},{}
+5010,Indian_Hair_Piece,Indian Fillet,5,20,,100,,3,,0,0xFFFFFFFF,7,2,256,,0,1,96,{},{},{}
+5011,Antenna,Aerial,5,20,,100,,3,,0,0xFFFFFFFF,7,2,256,,0,1,97,{},{},{}
+5012,Ph.D_Hat,Ph.D Hat,5,20,,200,,3,,0,0xFFFFFFFE,7,2,256,,0,1,98,{},{},{}
+5013,Horn_Of_Lord_Kaho,Lord Kaho's Horn,5,20,,100,,5,,0,0xFFFFFFFF,7,2,256,,0,1,99,{ bonus bMdef,10; bonus bStr,5; bonus bAgi,10; bonus bVit,10; bonus bInt,5; bonus bLuk,20; },{},{}
+5014,Fin_Helm,Fin Helm,5,20,,300,,2,,0,0x00004082,7,2,512,,65,0,100,{},{},{}
+5015,Egg_Shell,Egg Shell,5,20,,200,,3,,0,0xFFFFFFFF,7,2,256,,0,0,101,{},{},{}
+5016,Boy's_Cap,Boy's Cap,5,20,,100,,2,,0,0xFFFFFFFE,7,2,256,,0,1,102,{},{},{}
+5017,Bone_Helm,Bone Helm,5,20,,800,,7,,0,0x000444A2,7,2,256,,70,1,103,{ bonus2 bSubEle,Ele_Dark,-15; },{},{}
+5018,Feather_Bonnet,Feather Bonnet,5,20,,300,,4,,0,0x00080808,7,2,256,,0,1,104,{ bonus bAgi,1; },{},{}
+5019,Corsair,Corsair,5,20,,500,,5,,0,0xFFFFFFFE,7,2,256,,0,1,105,{ bonus bVit,1; },{},{}
+5020,Kafra_Band,Kafra Band,5,20,,500,,3,,0,0xFFFFFFFF,7,2,256,,0,1,106,{ bonus bMdef,3; },{},{}
+5021,Bankruptcy_Of_Heart,Grief for Greed,5,20,,1200,,4,,0,0x00040420,7,2,256,,38,1,107,{ bonus bInt,1; bonus bDex,1; },{},{}
5022,Helm_Of_Sun,Hat of the Sun God,5,20,,2400,,4,,0,0x00CFDF80,7,2,768,,0,1,138,{ bonus bStr,3; bonus bInt,2; },{},{}
5023,Hat_Of_Bundle,Parcel Hat,5,20,,1000,,0,,0,0x00040420,7,2,256,,0,1,108,{},{},{}
-5024,Hat_Of_Cake,Cake Hat,5,20,,1000,,2,,0,0xFFFFFFFF,7,2,256,,0,1,109,{},{},{}
-5025,Helm_Of_Angel,Helm of Angel,5,20,,1600,,10,,0,0x00CFDF80,7,2,256,,74,1,110,{ bonus bAgi,1; bonus bLuk,1; bonus bMdef,3; },{},{}
-5026,Hat_Of_Cook,Chef Hat,5,20,,300,,3,,0,0xFFFFFFFE,7,2,256,,50,1,111,{ bonus bDex,1; },{},{}
-5027,Wizardry_Hat,Mage Hat,5,20,,300,,2,,0,0x00810204,7,2,256,,0,1,112,{ bonus bInt,2; bonus bMaxSP,150; },{},{}
+5024,Hat_Of_Cake,Cake Hat,5,20,,1000,,1,,0,0xFFFFFFFF,7,2,256,,0,1,109,{},{},{}
+5025,Helm_Of_Angel,Helm of Angel,5,20,,1600,,5,,0,0x00CFDF80,7,2,256,,74,1,110,{ bonus bAgi,1; bonus bLuk,1; bonus bMdef,3; },{},{}
+5026,Hat_Of_Cook,Chef Hat,5,20,,300,,1,,0,0xFFFFFFFE,7,2,256,,50,1,111,{ bonus bDex,1; },{},{}
+5027,Wizardry_Hat,Mage Hat,5,20,,300,,1,,0,0x00810204,7,2,256,,0,1,112,{ bonus bInt,2; bonus bMaxSP,150; },{},{}
5028,Candle,Candle,5,20,,150,,0,,0,0xFFFFFFFF,7,2,256,,0,1,113,{},{},{}
-5029,Spore_Hat,Spore Hat,5,20,,900,,6,,0,0xFFFFFFFE,7,2,256,,20,1,114,{},{},{}
-5030,Panda_Cap,Panda Hat,5,20,,800,,6,,0,0xFFFFFFFE,7,2,256,,40,1,115,{},{},{}
-5031,Mine_Helm,Mine Hat,5,20,,1500,,9,,0,0x0006D5F2,7,2,256,,55,1,116,{ bonus bDex,2; },{},{}
+5029,Spore_Hat,Spore Hat,5,20,,900,,3,,0,0xFFFFFFFE,7,2,256,,20,1,114,{},{},{}
+5030,Panda_Cap,Panda Hat,5,20,,800,,3,,0,0xFFFFFFFE,7,2,256,,40,1,115,{},{},{}
+5031,Mine_Helm,Mine Hat,5,20,,1500,,4,,0,0x0006D5F2,7,2,256,,55,1,116,{ bonus bDex,2; },{},{}
5032,Picnic_Hat,Sunday Hat,5,20,,800,,1,,0,0xFFFFFFFE,7,2,256,,0,1,117,{},{},{}
-5033,Smokie_Hat,Raccoon Hat,5,20,,900,,6,,0,0xFFFFFFFE,7,2,256,,50,1,118,{},{},{}
+5033,Smokie_Hat,Raccoon Hat,5,20,,900,,3,,0,0xFFFFFFFE,7,2,256,,50,1,118,{},{},{}
5034,Light_Bulb_Band,Bulb Band,5,20,,500,,0,,0,0xFFFFFFFE,7,2,256,,0,1,119,{},{},{}
-5035,Poring_Hat,Poring Hat,5,20,,700,,3,,0,0xFFFFFFFE,7,2,256,,38,1,120,{},{},{}
-5036,Cross_Band,Cross Hat,5,20,,250,,2,,0,0xFFFFFFFE,7,2,256,,10,1,121,{},{},{}
-5037,Fruit_Shell,Nut Shell,5,20,,150,,8,,0,0xFFFFFFFF,7,2,256,,5,0,122,{},{},{}
-5038,Deviruchi_Cap,Deviruchi Hat,5,20,,800,,4,,0,0xFFFFFFFE,7,2,256,,64,1,123,{ bonus bStr,1; bonus bInt,1; },{},{}
-5039,Mottled_Egg_Shell,Rainbow Eggshell,5,20,,400,,8,,0,0xFFFFFFFF,7,2,256,,19,0,124,{},{},{}
+5035,Poring_Hat,Poring Hat,5,20,,700,,2,,0,0xFFFFFFFE,7,2,256,,38,1,120,{},{},{}
+5036,Cross_Band,Cross Hat,5,20,,250,,1,,0,0xFFFFFFFE,7,2,256,,10,1,121,{},{},{}
+5037,Fruit_Shell,Nut Shell,5,20,,150,,4,,0,0xFFFFFFFF,7,2,256,,5,0,122,{},{},{}
+5038,Deviruchi_Cap,Deviruchi Hat,5,20,,800,,2,,0,0xFFFFFFFE,7,2,256,,64,1,123,{ bonus bStr,1; bonus bInt,1; },{},{}
+5039,Mottled_Egg_Shell,Rainbow Eggshell,5,20,,400,,4,,0,0xFFFFFFFF,7,2,256,,19,0,124,{},{},{}
5040,Blush,Blush,5,20,,100,,0,,0,0xFFFFFFFF,7,2,512,,0,0,125,{},{},{}
5041,Heart_Hair_Pin,Heart Hairpin,5,20,,100,,0,,0,0xFFFFFFFF,7,2,256,,0,1,126,{},{},{}
5042,Hair_Protector,Bao Bao,5,20,,150,,0,,0,0xFFFFFFFE,7,2,256,,14,1,127,{},{},{}
-5043,Opera_Ghost_Mask,Opera Phantom Mask,5,20,,200,,2,,0,0xFFFFFFFE,7,2,512,,20,0,128,{},{},{}
-5044,Devil's_Wing,Evil Wing Ears,5,20,,350,,4,,0,0x0,7,2,256,,45,1,129,{ bonus bVit,1; },{},{}
-5045,Magician_Hat,Magician Hat,5,20,,500,,6,,0,0x00818314,7,2,256,,50,1,130,{ bonus bDex,1; bonus bAgi,1; bonus bMaxSP,50; },{},{}
+5043,Opera_Ghost_Mask,Opera Phantom Mask,5,20,,200,,1,,0,0xFFFFFFFE,7,2,512,,20,0,128,{},{},{}
+5044,Devil's_Wing,Evil Wing Ears,5,20,,350,,2,,0,0x0,7,2,256,,45,1,129,{ bonus bVit,1; },{},{}
+5045,Magician_Hat,Magician Hat,5,20,,500,,3,,0,0x00818314,7,2,256,,50,1,130,{ bonus bDex,1; bonus bAgi,1; bonus bMaxSP,50; },{},{}
5046,Bongun_Hat,Bongun Hat,5,20,,300,,5,,0,0xFFFFFFFF,7,2,769,,0,0,139,{},{},{}
5047,Fashion_Sunglass,Fashionable Glasses,5,20,,100,,0,,0,0xFFFFFFFE,7,2,256,,0,1,131,{},{},{}
5048,First_Moon_Hair_Pin,Cresent Hairpin,5,20,,100,,0,,0,0xFFFFFFFF,7,2,256,,0,1,132,{},{},{}
5049,Stripe_Band,Striped Hairband,5,20,,150,,1,,0,0xFFFFFFFF,7,2,256,,0,0,133,{},{},{}
-5050,Mystery_Fruit_Shell,Wonder Nutshell,5,20,,300,,10,,0,0xFFFFFFFF,7,2,256,,30,0,134,{},{},{}
-5051,Kitty_Bell,Pussy Cat Bell,5,20,,100,,0,,0,0x0,7,2,1,,0,0,135,{},{},{}
-5052,Blue_Hair_Band,Blue Hairband,5,20,,150,,2,,0,0xFFFFFFFF,7,2,256,,0,1,136,{},{},{}
+5050,Mystery_Fruit_Shell,Wonder Nutshell,5,20,,300,,5,,0,0xFFFFFFFF,7,2,256,,30,0,134,{},{},{}
+5051,Kitty_Bell,Pussy Cat Bell,5,20,,100,,0,,0,0xFFFFFFFF,7,2,1,,0,0,135,{},{},{}
+5052,Blue_Hair_Band,Blue Hairband,5,20,,150,,1,,0,0xFFFFFFFF,7,2,256,,0,1,136,{},{},{}
5053,Spinx_Helm,Sphinx Hat,5,20,,3000,,5,,0,0x00004082,7,2,257,,65,0,137,{ bonus bStr,2; },{},{}
5054,Assassin_Mask,Assassin Mask,5,20,,100,,0,,0,0x00001100,7,2,1,,70,0,180,{},{},{}
-5055,Novice_Egg_Cap,Novice False Eggshell,5,1,,1,,6,,0,0x00000001,7,2,256,,0,0,101,{},{},{}
+5055,Novice_Egg_Cap,Novice False Eggshell,5,1,,1,,3,,0,0x00000001,7,2,256,,0,0,101,{},{},{}
5056,Love_Berry,Fruit of Love,5,1,,100,,0,,0,0xFFFFFFFF,7,2,256,,0,0,140,{},{},{}
-5057,Ear_Of_Black_Cat,Black Cat Ears,5,16000,,200,,4,,0,0xFFFFFFFF,7,2,256,,45,1,141,{},{},{}
-5058,Drooping_Kitty,Drooping Cat,5,250000,,500,,3,,0,0xFFFFFFFE,7,2,256,,0,1,142,{ bonus bMdef,15; bonus2 bResEff,Eff_Curse,3000; },{},{}
-5059,Brown_Bear_Cap,Teddybear Hat,5,20,,800,,6,,0,0xFFFFFFFF,7,2,256,,50,1,143,{},{},{}
-5060,Party_Hat,Party Hat,5,20,,300,,4,,0,0xFFFFFFFF,7,2,256,,0,1,144,{ bonus bLuk,1; },{},{}
+5057,Ear_Of_Black_Cat,Black Cat Ears,5,16000,,200,,2,,0,0xFFFFFFFF,7,2,256,,45,1,141,{},{},{}
+5058,Drooping_Kitty,Drooping Cat,5,250000,,500,,1,,0,0xFFFFFFFE,7,2,256,,0,1,142,{ bonus bMdef,15; bonus2 bResEff,Eff_Curse,3000; },{},{}
+5059,Brown_Bear_Cap,Teddybear Hat,5,20,,800,,3,,0,0xFFFFFFFF,7,2,256,,50,1,143,{},{},{}
+5060,Party_Hat,Party Hat,5,20,,300,,3,,0,0xFFFFFFFF,7,2,256,,0,1,144,{ bonus bLuk,1; },{},{}
5061,Flower_Hairpin,Flower Hairpin,5,20,,100,,1,,0,0xFFFFFFFF,7,2,256,,0,1,145,{},{},{}
-5062,Straw_Hat,Straw Hat,5,20,,200,,6,,0,0xFFFFFFFF,7,2,256,,50,1,146,{ bonus bAgi,1; },{},{}
+5062,Straw_Hat,Straw Hat,5,20,,200,,3,,0,0xFFFFFFFF,7,2,256,,50,1,146,{ bonus bAgi,1; },{},{}
5063,Plaster,Giant Band Aid,5,20,,100,,1,,0,0xFFFFFFFE,7,2,256,,0,1,147,{},{},{}
5064,Leaf_Headgear,Smokie Leaf,5,20,,100,,1,,0,0xFFFFFFFF,7,2,256,,0,1,148,{},{},{}
-5065,Fish_On_Head,Blue Fish,5,20,,500,,4,,0,0xFFFFFFFF,7,2,256,,50,1,149,{ bonus2 bAddRace,RC_Fish,10; },{},{}
-5066,Horn_Of_Succubus,Succubus Horn,5,20,,800,,7,,0,0xFFFFFFFE,7,2,256,,70,1,150,{ bonus bInt,1; bonus bMdef,10; },{},{}
-5067,Sombrero,Sombrero,5,20,,350,,8,,0,0xFFFFFFFE,7,2,256,,0,1,151,{ bonus bAgi,1; },{},{}
-5068,Ear_Of_Devil's_Wing,Evil Wing Ears,5,20,,100,,3,,0,0xFFFFFFFF,7,2,512,,70,0,152,{ bonus bStr,1; },{},{}
-5069,Mask_Of_Fox,Kitsune Mask,5,20,,300,,2,,0,0xFFFFFFFE,7,2,256,,0,1,153,{ bonus bAgi,1; bonus bLuk,1; },{},{}
-5070,Headband_Of_Power,Hot-blooded Headband,5,20,,100,,3,,0,0xFFFFFFFE,7,2,256,,0,1,154,{ bonus bStr,2; },{},{}
-5071,Indian_Headband,Indian Headband,5,20,,200,,2,,0,0xFFFFFFFE,7,2,256,,0,1,155,{ bonus bDex,1; },{},{}
-5072,Inccubus_Horn,Incubus Horn,5,20,,800,,7,,0,0xFFFFFFFE,7,2,256,,70,1,156,{ bonus bAgi,1; bonus bMdef,10; },{},{}
-5073,Cap_Of_Concentration,Model Training Hat,5,20,,700,,5,,0,0xFFFFFFFE,7,2,256,,0,1,157,{ bonus bDex,2; },{},{}
-5074,Ear_Of_Angel's_Wing,Angel Wing Ears,5,20,,100,,3,,0,0xFFFFFFFF,7,2,512,,70,0,158,{ bonus bStr,1; },{},{}
-5075,Cowboy_Hat,Cowboy Hat,5,20,,500,,8,,0,0xFFFFFFFF,7,2,256,,0,1,159,{},{},{}
-5076,Fur_Hat,Beanie,5,20,,350,,3,,0,0xFFFFFFFF,7,2,256,,0,1,160,{ bonus bLuk,1; },{},{}
+5065,Fish_On_Head,Blue Fish,5,20,,500,,2,,0,0xFFFFFFFF,7,2,256,,50,1,149,{ bonus2 bAddRace,RC_Fish,10; },{},{}
+5066,Horn_Of_Succubus,Succubus Horn,5,20,,800,,4,,0,0xFFFFFFFE,7,2,256,,70,1,150,{ bonus bInt,1; bonus bMdef,10; },{},{}
+5067,Sombrero,Sombrero,5,20,,350,,4,,0,0xFFFFFFFE,7,2,256,,0,1,151,{ bonus bAgi,1; },{},{}
+5068,Ear_Of_Devil's_Wing,Evil Wing Ears,5,20,,100,,1,,0,0xFFFFFFFF,7,2,512,,70,0,152,{ bonus bStr,1; },{},{}
+5069,Mask_Of_Fox,Kitsune Mask,5,20,,300,,1,,0,0xFFFFFFFE,7,2,256,,0,1,153,{ bonus bAgi,1; bonus bLuk,1; },{},{}
+5070,Headband_Of_Power,Hot-blooded Headband,5,20,,100,,1,,0,0xFFFFFFFE,7,2,256,,0,1,154,{ bonus bStr,2; },{},{}
+5071,Indian_Headband,Indian Headband,5,20,,200,,1,,0,0xFFFFFFFE,7,2,256,,0,1,155,{ bonus bDex,1; },{},{}
+5072,Inccubus_Horn,Incubus Horn,5,20,,800,,4,,0,0xFFFFFFFE,7,2,256,,70,1,156,{ bonus bAgi,1; bonus bMdef,10; },{},{}
+5073,Cap_Of_Concentration,Model Training Hat,5,20,,700,,2,,0,0xFFFFFFFE,7,2,256,,0,1,157,{ bonus bDex,2; },{},{}
+5074,Ear_Of_Angel's_Wing,Angel Wing Ears,5,20,,100,,1,,0,0xFFFFFFFF,7,2,512,,70,0,158,{ bonus bStr,1; },{},{}
+5075,Cowboy_Hat,Cowboy Hat,5,20,,500,,4,,0,0xFFFFFFFF,7,2,256,,0,1,159,{},{},{}
+5076,Fur_Hat,Beanie,5,20,,350,,2,,0,0xFFFFFFFF,7,2,256,,0,1,160,{ bonus bLuk,1; },{},{}
5077,Tulip_Hairpin,Tulip Hairpin,5,20,,100,,1,,0,0xFFFFFFFF,7,2,256,,0,1,161,{},{},{}
-5078,Sea_Otter_Cap,Sea-Otter Hat,5,20,,800,,6,,0,0xFFFFFFFF,7,2,256,,50,1,162,{ bonus bVit,1; },{},{}
+5078,Sea_Otter_Cap,Sea-Otter Hat,5,20,,800,,3,,0,0xFFFFFFFF,7,2,256,,50,1,162,{ bonus bVit,1; },{},{}
5079,Crossed_Hair_Band,X Hairpin,5,20,,100,,1,,0,0xFFFFFFFF,7,2,256,,0,1,163,{},{},{}
-5080,Headgear_Of_Queen,Crown of Ancient Queen,5,20,,400,,8,,0,0xFFFFFFFF,7,2,256,,45,1,164,{},{},{}
-5081,Mistress_Crown,Crown of Mistress,5,20,,100,,2,,0,0xFFFFFFFE,7,2,256,,75,1,165,{ bonus bMaxSP,100; bonus bInt,2; bonus bUnbreakableHelm,0; },{},{}
-5082,Mushroom_Band,Decorative Mushroom,5,20,,100,,3,,0,0xFFFFFFFF,7,2,256,,0,1,166,{},{},{}
-5083,Red_Tailed_Ribbon,Red Ribbon,5,20,,200,,2,,0,0xFFFFFFFF,7,2,256,,45,1,167,{ bonus bMdef,10; },{},{}
-5084,Lazy_Raccoon,Lazy Smokie,5,20,,500,,2,,0,0xFFFFFFFE,7,2,256,,0,1,168,{ bonus2 bResEff,Eff_Sleep,2000; },{},{}
-5085,Pair_Of_Red_Ribbon,Small Ribbons,5,20,,100,,2,,0,0xFFFFFFFF,7,2,512,,45,0,169,{},{},{}
+5080,Headgear_Of_Queen,Crown of Ancient Queen,5,20,,400,,4,,0,0xFFFFFFFF,7,2,256,,45,1,164,{},{},{}
+5081,Mistress_Crown,Crown of Mistress,5,20,,100,,0,,0,0xFFFFFFFE,7,2,256,,75,1,165,{ bonus bMaxSP,100; bonus bInt,2; bonus bUnbreakableHelm,0; },{},{}
+5082,Mushroom_Band,Decorative Mushroom,5,20,,100,,2,,0,0xFFFFFFFF,7,2,256,,0,1,166,{},{},{}
+5083,Red_Tailed_Ribbon,Red Ribbon,5,20,,200,,1,,0,0xFFFFFFFF,7,2,256,,45,1,167,{ bonus bMdef,10; },{},{}
+5084,Lazy_Raccoon,Lazy Smokie,5,20,,500,,1,,0,0xFFFFFFFE,7,2,256,,0,1,168,{ bonus2 bResEff,Eff_Sleep,2000; },{},{}
+5085,Pair_Of_Red_Ribbon,Small Ribbons,5,20,,100,,1,,0,0xFFFFFFFF,7,2,512,,45,0,169,{},{},{}
5086,Alarm_Mask,Alarm Mask,5,20,,100,,2,,0,0xFFFFFFFE,7,2,513,,0,0,170,{ bonus2 bResEff,Eff_Blind,5000; },{},{}
5087,Goblin_Mask_01,Poker Face,5,20,,100,,1,,0,0xFFFFFFFF,7,2,513,,0,0,171,{},{},{}
5088,Goblin_Mask_02,Surprised Mask,5,20,,100,,1,,0,0xFFFFFFFF,7,2,513,,0,0,172,{},{},{}
@@ -2425,101 +2425,101 @@
5093,Blue_Coif_,Coif,5,150000,,300,,5,,1,0x00001100,7,2,768,,65,1,177,{ bonus bMaxSP,100; },{},{}
5094,Orc_Hero_Helm,Helmet of Orc Hero,5,500000,,900,,5,,0,0xFFFFFFFE,7,2,768,,55,1,178,{ bonus bStr,2; bonus bVit,1; },{},{}
//5095,Orc_Hero_Helm_,Helmet of Orc Hero,5,800000,,1000,,5,,1,0xFFFFFFFE,7,2,768,,55,1,179,{ bonus bStr,2; bonus bVit,1; },{},{}
-5096,Assassin_Mask_,Assassin Mask,5,20,,100,,1,,0,0x00001100,7,2,1,,70,0,180,{},{},{}
+5096,Assassin_Mask_,Assassin Mask,5,20,,100,,0,,0,0x00001100,7,2,1,,70,0,180,{},{},{}
5097,Cone_Hat_,Holiday Hat,5,0,,400,,0,,0,0xFFFFFFFF,7,2,256,,0,1,144,{},{},{}
5098,Tiger_Mask,Tiger Mask,5,20,,400,,2,,0,0xFFFFFFFF,7,2,768,,50,0,181,{ bonus bStr,3; bonus bMaxHP,100; },{},{}
-5099,Cat_Hat,Neko Mimi,5,20,,300,,2,,0,0xFFFFFFFF,7,2,256,,0,1,182,{ bonus bLuk,2; bonus bMdef,10; bonus2 bSubRace,RC_Brute,5; },{},{}
+5099,Cat_Hat,Neko Mimi,5,20,,300,,1,,0,0xFFFFFFFF,7,2,256,,0,1,182,{ bonus bLuk,2; bonus bMdef,10; bonus2 bSubRace,RC_Brute,5; },{},{}
5100,Sales_Signboard,Sales Banner,5,20,,800,,0,,0,0xFFFFFFFF,7,2,256,,75,1,183,{ bonus bStr,1; bonus bAgi,1; bonus bLuk,1; },{},{}
5101,Takius_Blindfold,Takius's Blindfold,5,20,,100,,0,,0,0xFFFFFFFF,7,2,512,,0,0,184,{},{},{}
5102,Round_Eyes,Blank Eyes,5,20,,100,,0,,0,0xFFFFFFFF,7,2,512,,0,0,185,{},{},{}
-5103,Sunflower_Hairpin,Sunflower Hairpin,5,20,,600,,2,,0,0xFFFFFFFE,7,2,256,,30,0,186,{ bonus bAgi,2; bonus bCritical,5; },{},{}
+5103,Sunflower_Hairpin,Sunflower Hairpin,5,20,,600,,1,,0,0xFFFFFFFE,7,2,256,,30,0,186,{ bonus bAgi,2; bonus bCritical,5; },{},{}
5104,Dark_Blindfold,Dark Blinder,5,20,,100,,0,,0,0xFFFFFFFE,7,2,512,,0,0,187,{ bonus2 bResEff,Eff_Blind,10000; bonus2 bResEff,Eff_Stun,200; },{},{}
-5105,Hat_Of_Cake_,2nd Anniversary Hat,5,20,,1000,,2,,0,0xFFFFFFFF,7,2,256,,24,1,109,{ bonus bDex,1; bonus bMaxSP,80; },{},{}
-5106,Cone_Hat_INA,2nd Anniversary Hat,5,20,,300,,10,,0,0xFFFFFFFF,7,2,256,,1,0,144,{ bonus bLuk,1; },{},{}
+5105,Hat_Of_Cake_,2nd Anniversary Hat,5,20,,1000,,1,,0,0xFFFFFFFF,7,2,256,,24,1,109,{ bonus bDex,1; bonus bMaxSP,80; },{},{}
+5106,Cone_Hat_INA,2nd Anniversary Hat,5,20,,300,,3,,0,0xFFFFFFFF,7,2,256,,1,0,144,{ bonus bLuk,1; },{},{}
5107,Well_Baked_Toast,Crunch Toast,5,20,,50,,0,,0,0xFFFFFFFF,7,2,1,,0,0,188,{},{},{}
-5108,Detective_Hat,Renown Detective's Cap,5,20,,350,,6,,1,0xFFFFFFFF,7,2,256,,0,1,189,{},{},{}
-5109,Red_Bonnet,Red Bonnet,5,20,,400,,4,,0,0xFFFFFFFF,7,2,256,,0,1,190,{},{},{}
+5108,Detective_Hat,Renown Detective's Cap,5,20,,350,,3,,1,0xFFFFFFFF,7,2,256,,0,1,189,{},{},{}
+5109,Red_Bonnet,Red Bonnet,5,20,,400,,2,,0,0xFFFFFFFF,7,2,256,,0,1,190,{},{},{}
5110,Baby_Pacifier,Baby Pacifier,5,20,,50,,0,,0,0xFFFFFFFF,7,2,1,,0,0,191,{},{},{}
-5111,Galapago_Cap,Galapago Cap,5,20,,500,,4,,0,0xFFFFFFFF,7,2,256,,55,1,192,{ bonus2 bAddMonsterDropItem,605,100; },{},{}
-5112,Super_Novice_Hat,Super Novice Hat,5,8500,,400,,8,,0,0x00000001,7,2,256,,40,1,193,{ bonus bAllStats,1; },{},{}
+5111,Galapago_Cap,Galapago Cap,5,20,,500,,2,,0,0xFFFFFFFF,7,2,256,,55,1,192,{ bonus2 bAddMonsterDropItem,605,100; },{},{}
+5112,Super_Novice_Hat,Super Novice Hat,5,8500,,400,,4,,0,0x00000001,7,2,256,,40,1,193,{ bonus bAllStats,1; },{},{}
5113,Angry_Mouth,Angry Snarl,5,20,,50,,0,,0,0xFFFFFFFF,7,2,1,,0,0,194,{},{},{}
-5114,Fedora,Bucket Hat,5,6000,,300,,6,,0,0xFFFFFFFF,7,2,256,,0,1,195,{},{},{}
-5115,Winter_Hat,Winter Hat,5,20,,500,,5,,0,0xFFFFFFFF,7,2,256,,0,1,196,{ bonus2 bResEff,Eff_Freeze,1000; },{},{}
-5116,Banana_Hat,Banana Hat,5,20,,200,,3,,0,0xFFFFFFFF,7,2,256,,0,1,197,{ bonus3 bAutoSpell,"SM_PROVOKE",3,30; },{},{}
+5114,Fedora,Bucket Hat,5,6000,,300,,3,,0,0xFFFFFFFF,7,2,256,,0,1,195,{},{},{}
+5115,Winter_Hat,Winter Hat,5,20,,500,,3,,0,0xFFFFFFFF,7,2,256,,0,1,196,{ bonus2 bResEff,Eff_Freeze,1000; },{},{}
+5116,Banana_Hat,Banana Hat,5,20,,200,,1,,0,0xFFFFFFFF,7,2,256,,0,1,197,{ bonus3 bAutoSpell,"SM_PROVOKE",3,30; },{},{}
5117,Mistic_Rose,Mystic Rose,5,20,,100,,0,,0,0xFFFFFFFF,7,2,256,,0,1,198,{ bonus2 bSubRace,RC_Plant,2; },{},{}
-5118,Ear_Of_Puppy,Puppy Headband,5,20,,100,,3,,0,0xFFFFFFFF,7,2,256,,0,1,199,{},{},{}
-5119,Super_Novice_Hat_,Super Novice Hat,5,8500,,400,,8,,1,0x00000001,7,2,256,,40,1,193,{ bonus bAllStats,1; },{},{}
-5120,Fedora_,Bucket Hat,5,6000,,300,,6,,1,0xFFFFFFFF,7,2,256,,0,1,195,{},{},{}
+5118,Ear_Of_Puppy,Puppy Headband,5,20,,100,,2,,0,0xFFFFFFFF,7,2,256,,0,1,199,{},{},{}
+5119,Super_Novice_Hat_,Super Novice Hat,5,8500,,400,,4,,1,0x00000001,7,2,256,,40,1,193,{ bonus bAllStats,1; },{},{}
+5120,Fedora_,Bucket Hat,5,6000,,300,,3,,1,0xFFFFFFFF,7,2,256,,0,1,195,{},{},{}
5121,Zherlthsh_Mask,Zealotus Mask,5,20,,400,,3,,0,0xFFFFFFFE,7,2,768,,70,1,200,{ bonus2 bAddRace,RC_DemiHuman,5; bonus2 bSubRace,RC_DemiHuman,5; },{},{}
-5122,Magni_Cap,Magni's Cap,5,30000,,1000,,9,,0,0xFFFFFFFE,7,2,256,,65,1,250,{ bonus bStr,2; },{},{}
-5123,Ulle_Cap,Ulle's Cap,5,30000,,500,,6,,1,0xFFFFFFFE,7,2,256,,65,1,254,{ bonus bDex,2; bonus bAgi,1; if(isequipped(2353) && readparam(bDex)>=70) bonus bUseSPrate,-10; },{},{}
-5124,Fricca_Circlet,Fricca's Circlet,5,30000,,300,,6,,0,0xFFFFFFFE,7,2,256,,65,1,251,{ bonus bMdef,10; bonus bInt,2; bonus bMaxSP,50; },{},{}
-5125,Kiss_Of_Angel,Angel's Kiss,5,10000,,300,,6,,1,0x00000001,7,2,256,,50,1,255,{ bonus bSPrecovRate,5; },{},{}
-5126,Morpheus's_Hood,Morpheus's Hood,5,30000,,200,,3,,0,0xFFFFFFFE,7,2,256,,33,1,256,{ bonus bInt,2; if(isequipped(2518,2648,2649)) { bonus bInt,5; bonus bMdef,11; bonus bMaxSPrate,20; bonus bNoCastCancel,0; bonus bCastrate,25; } },{},{}
-5127,Morrigane's_Helm,Morrigane's Helm,5,30000,,500,,8,,0,0xFFFFFFFE,7,2,256,,61,1,257,{ bonus bLuk,2; bonus bBaseAtk,3; if(isequipped(2519,2650,2651)) { bonus bStr,2; bonus bLuk,9; bonus bCritical,13; bonus bBaseAtk,18; bonus bFlee2,13; } },{},{}
-5128,Goibne's_Helmet,Goibne's Helm,5,30000,,500,,10,,0,0xFFFFFFFE,7,2,256,,54,1,258,{ bonus bVit,3; bonus bMdef,3; if(isequipped(2354,2419,2520)) { bonus bVit,5; bonus bMaxHPrate,15; bonus bMaxSPrate,5; bonus bDef,5; bonus bMdef,15; bonus2 bSubEle,Ele_Water,10; bonus2 bSubEle,Ele_Earth,10; bonus2 bSubEle,Ele_Fire,10; bonus2 bSubEle,Ele_Wind,10; } },{},{}
-5129,Bird_Nest,Bird Nest,5,20,,400,,2,,0,0xFFFFFFFF,7,2,256,,50,0,201,{ bonus bAgi,2; bonus2 bSubRace,RC_Brute,10; },{},{}
+5122,Magni_Cap,Magni's Cap,5,30000,,1000,,5,,0,0xFFFFFFFE,7,2,256,,65,1,250,{ bonus bStr,2; },{},{}
+5123,Ulle_Cap,Ulle's Cap,5,30000,,500,,3,,1,0xFFFFFFFE,7,2,256,,65,1,254,{ bonus bDex,2; bonus bAgi,1; if(isequipped(2353) && readparam(bDex)>=70) bonus bUseSPrate,-10; },{},{}
+5124,Fricca_Circlet,Fricca's Circlet,5,30000,,300,,3,,0,0xFFFFFFFE,7,2,256,,65,1,251,{ bonus bMdef,10; bonus bInt,2; bonus bMaxSP,50; },{},{}
+5125,Kiss_Of_Angel,Angel's Kiss,5,10000,,300,,3,,1,0x00000001,7,2,256,,50,1,255,{ bonus bSPrecovRate,5; },{},{}
+5126,Morpheus's_Hood,Morpheus's Hood,5,30000,,200,,1,,0,0xFFFFFFFE,7,2,256,,33,1,256,{ bonus bInt,2; if(isequipped(2518,2648,2649)) { bonus bInt,5; bonus bMdef,11; bonus bMaxSPrate,20; bonus bNoCastCancel,0; bonus bCastrate,25; } },{},{}
+5127,Morrigane's_Helm,Morrigane's Helm,5,30000,,500,,4,,0,0xFFFFFFFE,7,2,256,,61,1,257,{ bonus bLuk,2; bonus bBaseAtk,3; if(isequipped(2519,2650,2651)) { bonus bStr,2; bonus bLuk,9; bonus bCritical,13; bonus bBaseAtk,18; bonus bFlee2,13; } },{},{}
+5128,Goibne's_Helmet,Goibne's Helm,5,30000,,500,,5,,0,0xFFFFFFFE,7,2,256,,54,1,258,{ bonus bVit,3; bonus bMdef,3; if(isequipped(2354,2419,2520)) { bonus bVit,5; bonus bMaxHPrate,15; bonus bMaxSPrate,5; bonus bDef,5; bonus bMdef,15; bonus2 bSubEle,Ele_Water,10; bonus2 bSubEle,Ele_Earth,10; bonus2 bSubEle,Ele_Fire,10; bonus2 bSubEle,Ele_Wind,10; } },{},{}
+5129,Bird_Nest,Bird Nest,5,20,,400,,1,,0,0xFFFFFFFF,7,2,256,,50,0,201,{ bonus bAgi,2; bonus2 bSubRace,RC_Brute,10; },{},{}
5130,Lion_Mask,Lion Mask,5,20,,700,,0,,0,0x00CFDF80,7,2,768,,75,1,202,{ bonus2 bAddEffWhenHit,Eff_Silence,500; bonus bMdef,1; },{},{}
5131,Close_Helmet,Close Helmet,5,20,,1200,,8,,0,0x00004082,7,2,769,,75,1,203,{ bonus bVit,3; bonus bMaxHPrate,3; },{},{}
-5132,Angeling_Hat,Angeling Hat,5,20,,700,,5,,0,0xFFFFFFFF,7,2,256,,0,0,204,{ bonus2 bSubRace,RC_DemiHuman,10; },{},{}
-5133,Sheep_Hat,Sheep Hat,5,20,,150,,3,,0,0x00008110,7,2,256,,0,0,205,{ bonus bShortWeaponDamageReturn,5; },{},{}
-5134,Pumpkin_Hat,Pumpkin-Head,5,20,,200,,3,,0,0xFFFFFFFF,7,2,256,,0,1,206,{ bonus2 bSubRace,RC_Demon,5; },{},{}
+5132,Angeling_Hat,Angeling Hat,5,20,,700,,2,,0,0xFFFFFFFF,7,2,256,,0,0,204,{ bonus2 bSubRace,RC_DemiHuman,10; },{},{}
+5133,Sheep_Hat,Sheep Hat,5,20,,150,,1,,0,0x00008110,7,2,256,,0,0,205,{ bonus bShortWeaponDamageReturn,5; },{},{}
+5134,Pumpkin_Hat,Pumpkin-Head,5,20,,200,,2,,0,0xFFFFFFFF,7,2,256,,0,1,206,{ bonus2 bSubRace,RC_Demon,5; },{},{}
5135,Cyclops_Visor,Cyclop's Eye,5,0,,200,,0,,0,0xFFFFFFFE,7,2,512,,75,0,207,{ bonus bMaxSP,50; },{},{}
-5136,Santa's_Hat_,Antonio's Santa Hat,5,20,,100,,4,,0,0xFFFFFFFF,7,2,256,,0,1,20,{},{},{}
-5137,Alice_Doll,Alice Doll,5,20,,500,,1,,1,0xFFFFFFFE,7,2,256,,30,0,208,{ bonus bStr,1; bonus2 bAddRace,RC_DemiHuman,10; bonus2 bAddEff2,Eff_Sleep,10; },{},{}
-5138,Magic_Eyes,Magic Eyes,5,20,,300,,3,,0,0x00810204,7,2,256,,30,1,209,{ bonus bMdef,5; bonus bCastrate,-10; bonus bUseSPrate,20; },{},{}
+5136,Santa's_Hat_,Antonio's Santa Hat,5,20,,100,,3,,0,0xFFFFFFFF,7,2,256,,0,1,20,{},{},{}
+5137,Alice_Doll,Alice Doll,5,20,,500,,0,,1,0xFFFFFFFE,7,2,256,,30,0,208,{ bonus bStr,1; bonus2 bAddRace,RC_DemiHuman,10; bonus2 bAddEff2,Eff_Sleep,10; },{},{}
+5138,Magic_Eyes,Magic Eyes,5,20,,300,,1,,0,0x00810204,7,2,256,,30,1,209,{ bonus bMdef,5; bonus bCastrate,-10; bonus bUseSPrate,20; },{},{}
5139,Hibiscus,Hibiscus,5,20,,200,,0,,0,0xFFFFFFFF,7,2,256,,10,0,210,{ bonus bDex,1; bonus bInt,1; bonus bMdef,5; },{},{}
-5140,Charming_Ribbon,Charming Ribbon,5,20,,400,,2,,1,0xFFFFFFFF,7,2,256,,10,1,211,{ bonus2 bSubRace,RC_Undead,5; bonus2 bSubRace,RC_Demon,5; },{},{}
-5141,Marionette_Doll,Marionette Doll,5,20,,400,,1,,1,0xFFFFFFFE,7,2,256,,30,1,212,{ bonus bStr,1; },{},{}
+5140,Charming_Ribbon,Charming Ribbon,5,20,,400,,1,,1,0xFFFFFFFF,7,2,256,,10,1,211,{ bonus2 bSubRace,RC_Undead,5; bonus2 bSubRace,RC_Demon,5; },{},{}
+5141,Marionette_Doll,Marionette Doll,5,20,,400,,0,,1,0xFFFFFFFE,7,2,256,,30,1,212,{ bonus bStr,1; },{},{}
5142,Crescent_Helm,Crescent Helm,5,20,,3000,,8,,0,0x000444A2,7,2,768,,50,1,213,{ bonus bVit,1; bonus2 bSubRace,RC_DemiHuman,5; },{},{}
5143,Kabuki_Mask,Kabuki Mask,5,20,,1000,,5,,1,0xFFFFFFFE,7,1,769,,30,1,214,{ bonus2 bResEff,Eff_Silence,3000; },{},{}
-5144,Gambler_Hat,Gambler Hat,5,20,,200,,4,,0,0xFFFFFFFF,7,2,256,,0,1,16,{ bonus bLuk,5; },{},{}
+5144,Gambler_Hat,Gambler Hat,5,20,,200,,2,,0,0xFFFFFFFF,7,2,256,,0,1,16,{ bonus bLuk,5; },{},{}
5145,Carnival_Joker_Jester,Carnival Joker Jester,5,10,,100,,0,,0,0xFFFFFFFF,7,2,256,,0,1,89,{},{},{}
5146,Elephant_Hat,Elephant Hat,5,0,,500,,0,,0,0xFFFFFFFF,7,2,256,,0,1,215,{ bonus bVit,1; bonus2 bSubRace,RC_Brute,7; skill "WZ_WATERBALL",1; },{},{}
-5147,Baseball_Cap,Baseball Cap,5,0,,200,,5,,1,0xFFFFFFFF,7,2,256,,0,1,216,{},{},{}
+5147,Baseball_Cap,Baseball Cap,5,0,,200,,3,,1,0xFFFFFFFF,7,2,256,,0,1,216,{},{},{}
5148,Phrygian_Cap,Phrygian Cap,5,0,,500,,0,,0,0xFFFFFFFF,7,2,256,,0,1,217,{ bonus bInt,2; },{},{}
5149,Silver_Tiara,Silver Tiara,5,0,,100,,0,,0,0xFFFFFFFF,7,2,256,,0,1,218,{ bonus bInt,2; },{},{}
-5150,Joker_Jester_,Joker Jester,5,20,,100,,3,,0,0xFFFFFFFF,7,2,256,,0,0,219,{ bonus bSpeedRate,25; },{},{}
+5150,Joker_Jester_,Joker Jester,5,20,,100,,1,,0,0xFFFFFFFF,7,2,256,,0,0,219,{ bonus bSpeedRate,25; },{},{}
5151,Headset_OST,Note Headphones,5,20,,200,,4,,1,0xFFFFFFFF,7,2,768,,0,1,220,{ bonus bMdef,3; bonus2 bResEff,Eff_Stun,1000; bonus2 bResEff,Eff_Freeze,1000; },{},{}
5152,Chinese_Crown,Chinese Crown,5,20,,2000,,2,,0,0xFFFFFFFF,7,2,768,,1,1,221,{ bonus2 bResEff,Eff_Stun,1000; bonus bInt,1; },{},{}
-5153,Angeling_Hairpin,Angeling Hairpin,5,20,,700,,5,,0,0xFFFFFFFF,7,2,256,,0,1,222,{ bonus bFlee,5; if (isequipped(2358)) { bonus bLuk,6; bonus bFlee,5; bonus bInt,2; } },{},{}
-5154,Sunglasses_F,Father's Sunglasses,5,20,,100,,4,,0,0xFFFFFFFF,7,2,512,,0,0,12,{},{},{}
+5153,Angeling_Hairpin,Angeling Hairpin,5,20,,700,,3,,0,0xFFFFFFFF,7,2,256,,0,1,222,{ bonus bFlee,5; if (isequipped(2358)) { bonus bLuk,6; bonus bFlee,5; bonus bInt,2; } },{},{}
+5154,Sunglasses_F,Father's Sunglasses,5,20,,100,,3,,0,0xFFFFFFFF,7,2,512,,0,0,12,{},{},{}
5155,Granpa_Beard_F,Father's White Moustache,5,20,,100,,0,,0,0xFFFFFFFF,7,2,1,,0,0,25,{ bonus bBaseAtk,20; },{},{}
5156,Flu_Mask_F,Father's Mask,5,20,,100,,0,,0,0xFFFFFFFF,7,2,1,,0,0,8,{ bonus bMatkRate,1; },{},{}
-5157,Viking_Helm_,Orc Helm,5,20,,500,,9,,1,0x000654E2,7,2,256,,0,1,86,{},{},{}
-5158,Holy_Bonnet_,Monk Hat,5,30000,,100,,10,,1,0x00008110,7,2,256,,0,1,35,{ bonus bMdef,3; },{},{}
-5159,Golden_Gear_,Golden Gear,5,20,,900,,9,,1,0xFFFFFFFE,7,2,256,,40,1,30,{ bonus bUnbreakableHelm,0; },{},{}
-5160,Magestic_Goat_,Majestic Goat,5,20,,800,,9,,1,0x006444A2,7,2,256,,0,1,41,{ bonus bStr,1; },{},{}
-5161,Sharp_Gear_,Spiky Band,5,20,,1000,,12,,1,0x0066D5F2,7,2,256,,50,1,43,{},{},{}
-5162,Bone_Helm_,Bone Helm,5,20,,800,,15,,1,0x000444A2,7,2,256,,70,1,103,{ bonus2 bSubEle,Ele_Dark,-15; },{},{}
-5163,Corsair_,Corsair,5,20,,500,,10,,1,0xFFFFFFFE,7,2,256,,0,1,105,{ bonus bVit,1; },{},{}
-5164,Tiara_,Tiara,5,20,,400,,7,,1,0xFFFFFFFE,7,0,256,,45,1,19,{ bonus bInt,1; },{},{}
-5165,Crown_,Crown,5,20,,400,,7,,1,0xFFFFFFFE,7,1,256,,45,1,45,{ bonus bInt,1; },{},{}
+5157,Viking_Helm_,Orc Helm,5,20,,500,,5,,1,0x000654E2,7,2,256,,0,1,86,{},{},{}
+5158,Holy_Bonnet_,Monk Hat,5,30000,,100,,5,,1,0x00008110,7,2,256,,0,1,35,{ bonus bMdef,3; },{},{}
+5159,Golden_Gear_,Golden Gear,5,20,,900,,5,,1,0xFFFFFFFE,7,2,256,,40,1,30,{ bonus bUnbreakableHelm,0; },{},{}
+5160,Magestic_Goat_,Majestic Goat,5,20,,800,,5,,1,0x006444A2,7,2,256,,0,1,41,{ bonus bStr,1; },{},{}
+5161,Sharp_Gear_,Spiky Band,5,20,,1000,,6,,1,0x0066D5F2,7,2,256,,50,1,43,{},{},{}
+5162,Bone_Helm_,Bone Helm,5,20,,800,,7,,1,0x000444A2,7,2,256,,70,1,103,{ bonus2 bSubEle,Ele_Dark,-15; },{},{}
+5163,Corsair_,Corsair,5,20,,500,,5,,1,0xFFFFFFFE,7,2,256,,0,1,105,{ bonus bVit,1; },{},{}
+5164,Tiara_,Tiara,5,20,,400,,4,,1,0xFFFFFFFE,7,0,256,,45,1,19,{ bonus bInt,1; },{},{}
+5165,Crown_,Crown,5,20,,400,,4,,1,0xFFFFFFFE,7,1,256,,45,1,45,{ bonus bInt,1; },{},{}
5166,Spinx_Helm_,Sphinx Hat,5,20,,3000,,5,,1,0x00004082,7,2,257,,65,0,137,{ bonus bStr,2; },{},{}
5167,Munak_Turban_,Munak Hat,5,20,,300,,5,,1,0xFFFFFFFF,7,2,769,,0,0,51,{ bonus2 bSubRace,RC_Undead,10; },{},{}
5168,Bongun_Hat_,Bongun Hat,5,20,,300,,5,,1,0xFFFFFFFF,7,2,769,,0,0,139,{},{},{}
5169,Bride_Mask,Bride Mask,5,30000,,500,,4,,1,0xFFFFFFFF,7,2,768,,40,1,223,{ if(BaseClass==Job_Taekwon){ bonus bLuk,2; bonus bCritical,5; } },{},{}
5170,Feather_Beret,Feather Beret,5,30000,,600,,1,,0,0xFFFFFFFE,7,2,256,,0,1,224,{ bonus bMdef,1; bonus2 bSubRace,RC_DemiHuman,10; },{},{}
-5171,Valkyrie_Helm,Valkyrie Helm,5,100000,,1000,,10,,1,0xFFFFFFFE,2,2,256,,0,1,225,{ bonus bMdef,5; if(isequipped(2357,2421,2524)) bonus bAllStats,1; },{},{}
+5171,Valkyrie_Helm,Valkyrie Helm,5,100000,,1000,,5,,1,0xFFFFFFFE,2,2,256,,0,1,225,{ bonus bMdef,5; if(isequipped(2357,2421,2524)) bonus bAllStats,1; },{},{}
5172,Beret,Beret,5,30000,,700,,0,,0,0xFFFFFFFF,7,2,256,,0,0,226,{ bonus2 bSubRace,RC_DemiHuman,10; },{},{}
-5173,Satto_Hat,Magistrate Hat,5,30000,,400,,6,,1,0xFFFFFFFF,7,2,256,,60,1,227,{ if(BaseClass==Job_Taekwon){ bonus bAgi,1; bonus bHPrecovRate,3; } },{},{}
-5174,Ayam,Ayam,5,30000,,400,,6,,1,0xFFFFFFFF,7,2,256,,60,1,228,{ if(BaseClass==Job_Taekwon){ bonus bInt,1; bonus bSPrecovRate,3; } },{},{}
+5173,Satto_Hat,Magistrate Hat,5,30000,,400,,3,,1,0xFFFFFFFF,7,2,256,,60,1,227,{ if(BaseClass==Job_Taekwon){ bonus bAgi,1; bonus bHPrecovRate,3; } },{},{}
+5174,Ayam,Ayam,5,30000,,400,,3,,1,0xFFFFFFFF,7,2,256,,60,1,228,{ if(BaseClass==Job_Taekwon){ bonus bInt,1; bonus bSPrecovRate,3; } },{},{}
5175,Censor_Bar,Censor Bar,5,30000,,100,,0,,0,0xFFFFFFFF,7,2,512,,0,0,229,{ bonus2 bResEff,Eff_Curse,500; bonus bMdef,1; bonus bHit,-5; },{},{}
5176,Hahoe_Mask,Hahoe Mask,5,30000,,100,,2,,0,0xFFFFFFFF,7,2,513,,30,0,230,{ if(BaseClass==Job_Taekwon){ bonus bLuk,1; bonus bFlee2,2; } },{},{}
5177,Guardian_Lion_Mask,Mythical Lion Mask,5,30000,,500,,5,,1,0xFFFFFFFF,7,2,768,,40,1,231,{ if(BaseClass==Job_Taekwon){ bonus bDex,2; bonus bBaseAtk,2*getrefine(); bonus3 bAddEff,Eff_Stun,1000,ATF_SHORT; } },{},{}
5178,Candle_,Candle,5,20,,150,,0,,0,0xFFFFFFFF,7,2,256,,0,1,113,{ bonus bAllStats,1; },{},{}
5179,Gold_Tiara,Golden Tiara,5,0,,100,,0,,0,0xFFFFFFFF,7,2,256,,0,1,232,{ bonus bInt,2; },{},{}
-5180,Phrygian_Cap_,France Holiday Hat,5,20,,100,,2,,0,0xFFFFFFFF,7,2,256,,0,1,217,{ bonus bVit,1; },{},{}
-5181,Helm_Of_Darkness,Helm of Darkness,5,20,,500,,3,,1,0x000654E2,7,2,768,,50,1,233,{ bonus bStr,2; },{},{}
-5182,Puppy_Hat,Puppy Hat,5,20,,500,,4,,0,0xFFFFFFFF,7,2,256,,30,0,234,{ bonus bAgi,1; bonus3 bAutoSpell,"PR_GLORIA",1,10+20*(readparam(bAgi)>=77); },{},{}
-5183,Bird_Nest_Hat,Bird Nest Hat,5,20,,500,,4,,0,0xFFFFFFFF,7,2,256,,10,1,235,{ bonus bDex,1; bonus bAgi,1; bonus2 bResEff,Eff_Stun,1000; },{},{}
-5184,Captain_Hat,Captain's Hat,5,20,,500,,8,,0,0xFFFFFFFE,7,2,256,,30,1,236,{ bonus2 bSubEle,Ele_Water,5; },{},{}
-5185,Laurel_Wreath,Laurel Wreath,5,20,,100,,2,,1,0xFFFFFFFF,7,2,256,,10,1,237,{ bonus bLuk,3; bonus2 bResEff,Eff_Blind,500; bonus2 bResEff,Eff_Curse,500; },{},{}
-5186,Geographer_Band,Geographer Band,5,20,,500,,2,,0,0xFFFFFFFF,7,2,256,,30,0,238,{ bonus bInt,1; bonus3 bAutoSpellWhenHit,"AL_HEAL",1,50; },{},{}
-5187,Twin_Ribbon,Twin Ribbon,5,20,,200,,6,,1,0xFFFFFFFF,7,2,256,,30,1,239,{ bonus bMaxSP,30; bonus bMdef,3; bonus3 bAutoSpellWhenHit,"NPC_STONESKIN",6,10; bonus5 bAutoSpellWhenHit,"NPC_ANTIMAGIC",6,120,BF_MAGIC,0; },{},{}
-5188,Minstrel_Hat,Wandering Minstrel Hat,5,20,,500,,4,,0,0xFFFFFFFF,7,2,256,,50,1,240,{ bonus bInt,1; bonus bDex,1; },{},{}
+5180,Phrygian_Cap_,France Holiday Hat,5,20,,100,,1,,0,0xFFFFFFFF,7,2,256,,0,1,217,{ bonus bVit,1; },{},{}
+5181,Helm_Of_Darkness,Helm of Darkness,5,20,,2000,,3,,1,0x000654E2,7,2,768,,50,1,233,{ bonus bStr,2; },{},{}
+5182,Puppy_Hat,Puppy Hat,5,20,,500,,2,,0,0xFFFFFFFF,7,2,256,,30,0,234,{ bonus bAgi,1; bonus3 bAutoSpell,"PR_GLORIA",1,10+20*(readparam(bAgi)>=77); },{},{}
+5183,Bird_Nest_Hat,Bird Nest Hat,5,20,,500,,2,,0,0xFFFFFFFF,7,2,256,,10,1,235,{ bonus bDex,1; bonus bAgi,1; bonus2 bResEff,Eff_Stun,1000; },{},{}
+5184,Captain_Hat,Captain's Hat,5,20,,500,,4,,0,0xFFFFFFFE,7,2,256,,30,1,236,{ bonus2 bSubEle,Ele_Water,5; },{},{}
+5185,Laurel_Wreath,Laurel Wreath,5,20,,100,,1,,1,0xFFFFFFFF,7,2,256,,10,1,237,{ bonus bLuk,3; bonus2 bResEff,Eff_Blind,500; bonus2 bResEff,Eff_Curse,500; },{},{}
+5186,Geographer_Band,Geographer Band,5,20,,500,,1,,0,0xFFFFFFFF,7,2,256,,30,0,238,{ bonus bInt,1; bonus3 bAutoSpellWhenHit,"AL_HEAL",1,50; },{},{}
+5187,Twin_Ribbon,Twin Ribbon,5,20,,200,,0,,1,0xFFFFFFFF,7,2,256,,30,1,239,{ bonus bMaxSP,30; bonus bMdef,3; bonus3 bAutoSpellWhenHit,"NPC_STONESKIN",6,10; bonus5 bAutoSpellWhenHit,"NPC_ANTIMAGIC",6,120,BF_MAGIC,0; },{},{}
+5188,Minstrel_Hat,Wandering Minstrel Hat,5,20,,500,,2,,0,0xFFFFFFFF,7,2,256,,50,1,240,{ bonus bInt,1; bonus bDex,1; },{},{}
5189,Fallen_Leaves,Autumn Leaves,5,20,,100,,0,,0,0xFFFFFFFF,7,2,256,,0,1,241,{ bonus bMaxHP,40; bonus bMaxSP,40; },{},{}
-5190,Baseball_Cap_,Independence Memorial Hat,5,20,,20,,5,,1,0xFFFFFFFF,7,2,256,,0,1,216,{},{},{}
+5190,Baseball_Cap_,Independence Memorial Hat,5,20,,20,,3,,1,0xFFFFFFFF,7,2,256,,0,1,216,{},{},{}
5191,Ribbon_Black,Black Ribbon,5,800,,100,,1,,1,0xFFFFFFFF,7,0,256,,0,1,242,{ bonus bInt,1; bonus bMdef,3; },{},{}
5192,Ribbon_Yellow,Yellow Ribbon,5,800,,100,,1,,1,0xFFFFFFFF,7,0,256,,0,1,243,{ bonus bMdef,3; },{},{}
5193,Ribbon_Green,Green Ribbon,5,800,,100,,1,,1,0xFFFFFFFF,7,0,256,,0,1,244,{ bonus bMdef,3; },{},{}
@@ -2527,346 +2527,346 @@
5195,Ribbon_Red,Red Ribbon,5,800,,100,,1,,1,0xFFFFFFFF,7,0,256,,0,1,246,{ bonus bMdef,3; },{},{}
5196,Ribbon_Orange,Orange Ribbon,5,800,,100,,1,,1,0xFFFFFFFF,7,0,256,,0,1,247,{ bonus bMdef,3; },{},{}
5197,Ribbon_White,White Ribbon,5,800,,100,,1,,1,0xFFFFFFFF,7,0,256,,0,1,248,{ bonus bMdef,3; },{},{}
-5198,Drooping_Bunny,Drooping Bunny,5,10,,100,,3,,0,0xFFFFFFFF,7,2,256,,0,1,249,{ bonus bDex,1; bonus bFlee,2; },{},{}
-5199,Baseball_Cap_I,Baseball Cap,5,0,,200,,5,,0,0xFFFFFFFF,7,2,256,,0,1,216,{},{},{}
+5198,Drooping_Bunny,Drooping Bunny,5,10,,100,,1,,0,0xFFFFFFFF,7,2,256,,0,1,249,{ bonus bDex,1; bonus bFlee,2; },{},{}
+5199,Baseball_Cap_I,Baseball Cap,5,0,,200,,3,,0,0xFFFFFFFF,7,2,256,,0,1,216,{},{},{}
5200,Coppola,Coppola,5,10,,300,,0,,0,0xFFFFFFFF,7,2,256,,0,1,252,{},{},{}
-5201,Party_Hat_B,Party Hat,5,20,,300,,4,,0,0xFFFFFFFF,7,2,256,,0,1,144,{},{},{}
-5202,Pumpkin_Hat_,Fantastic Pumpkin-Head,5,20,,200,,3,,0,0xFFFFFFFF,7,2,256,,0,1,206,{ bonus2 bSubRace,RC_Demon,5; },{},{}
+5201,Party_Hat_B,Party Hat,5,20,,300,,3,,0,0xFFFFFFFF,7,2,256,,0,1,144,{},{},{}
+5202,Pumpkin_Hat_,Fantastic Pumpkin-Head,5,20,,200,,2,,0,0xFFFFFFFF,7,2,256,,0,1,206,{ bonus2 bSubRace,RC_Demon,5; },{},{}
5203,Tongue_Mask,Smiling Mask,5,20,,200,,2,,0,0xFFFFFFFF,7,2,513,,0,0,253,{ bonus bSpeedRate,25; },{},{}
5204,Event_Pierrot_Nose,Rudolph's Nose,5,20,,100,,0,,0,0xFFFFFFFF,7,2,1,,0,0,49,{ bonus2 bResEff,Eff_Blind,3000; bonus2 bAddMonsterDropItem,12130,30; },{},{}
5205,Wreath,Emperor's Laurel Crown,5,20,,1000,,3,,0,0xFFFFFFFF,7,2,768,,0,1,261,{ bonus bAllStats,1; bonus bMdef,3; },{},{}
5206,Romantic_White_Flower,Romantic White Flower,5,20,,100,,0,,0,0xFFFFFFFE,7,2,1,,0,0,259,{ bonus2 bSubRace,RC_Plant,3; },{},{}
5207,Gold_Spirit_Chain,Angel Blessing,5,20,,100,,0,,0,0xFFFFFFFF,7,2,256,,0,0,260,{ bonus bLuk,1; bonus2 bSubEle,Ele_Holy,5; },{},{}
-5208,Rideword_Hat,Rideword Hat,5,20,,300,,3,,1,0xFFFFFFFE,7,2,256,,40,1,262,{ bonus2 bHPDrainRate,50,8; bonus2 bSPDrainRate,10,4; bonus2 bHPLossRate,10,5000; },{},{}
-5209,Yellow_Baseball_Cap,Love Dad Cap,5,20,,300,,0,,0,0xFFFFFFFF,7,2,256,,0,1,263,{},{},{}
-5210,Flying_Angel,Flapping Angel Wing,5,20,,300,,3,,0,0xFFFFFFFF,7,2,256,,10,1,264,{ bonus bCastrate,-3; bonus bAspdRate,3; bonus bInt,1; bonus bAgi,1; },{},{}
-5211,Dress_Hat,Dress Hat,5,0,,200,,3,,1,0xFFFFFFFF,7,2,256,,20,1,265,{ bonus bMdef,7; bonus bStr,1; bonus bInt,1; bonus2 bAddRace,RC_NonBoss,2; bonus2 bAddRace,RC_Boss,2; bonus bMAtkRate,2; bonus bHealPower,5; if(getrefine() >= 7) { bonus2 bAddRace,RC_NonBoss,1; bonus2 bAddRace,RC_Boss,1; bonus bMAtkRate,1; bonus bHealPower,1; } },{},{}
-5212,Satellite_Hairband,Satellite Hairband,5,0,,1000,,6,,1,0xFFFFFFFF,7,2,256,,30,1,266,{ bonus bMaxHP,50; bonus bMaxSP,10; skill "AL_RUWACH",1; },{},{ sc_end SC_RUWACH; }
-5213,Black_Bunny_Band,Sheila Hairnet,5,0,,200,,4,,0,0xFFFFFFFF,7,2,256,,1,1,267,{ bonus bAgi,2; bonus bMdef,3; },{},{}
+5208,Rideword_Hat,Rideword Hat,5,20,,300,,2,,1,0xFFFFFFFE,7,2,256,,40,1,262,{ bonus2 bHPDrainRate,50,8; bonus2 bSPDrainRate,10,4; bonus2 bHPLossRate,10,5000; },{},{}
+5209,Yellow_Baseball_Cap,Love Dad Cap,5,20,,300,,2,,0,0xFFFFFFFF,7,2,256,,0,1,263,{},{},{}
+5210,Flying_Angel,Flapping Angel Wing,5,20,,300,,1,,0,0xFFFFFFFF,7,2,256,,10,1,264,{ bonus bCastrate,-3; bonus bAspdRate,3; bonus bInt,1; bonus bAgi,1; },{},{}
+5211,Dress_Hat,Dress Hat,5,0,,200,,2,,1,0xFFFFFFFF,7,2,256,,20,1,265,{ bonus bMdef,7; bonus bStr,1; bonus bInt,1; bonus2 bAddRace,RC_NonBoss,2; bonus2 bAddRace,RC_Boss,2; bonus bMAtkRate,2; bonus bHealPower,5; if(getrefine() >= 7) { bonus2 bAddRace,RC_NonBoss,1; bonus2 bAddRace,RC_Boss,1; bonus bMAtkRate,1; bonus bHealPower,1; } },{},{}
+5212,Satellite_Hairband,Satellite Hairband,5,0,,1000,,3,,1,0xFFFFFFFF,7,2,256,,30,1,266,{ bonus bMaxHP,50; bonus bMaxSP,10; skill "AL_RUWACH",1; },{},{ sc_end SC_RUWACH; }
+5213,Black_Bunny_Band,Sheila Hairnet,5,0,,200,,2,,0,0xFFFFFFFF,7,2,256,,1,1,267,{ bonus bAgi,2; bonus bMdef,3; },{},{}
5214,Moonlight_Flower_Hat,Moonlight Flower Hat,5,0,,200,,3,,0,0xFFFFFFFF,7,2,768,,1,1,268,{ bonus bDex,2; bonus3 bAutoSpell,"AL_INCAGI",1,50; },{},{}
-5215,Angelic_Chain_,Evolved Angel Wing,5,20,,100,,4,,0,0xFFFFFFFE,7,2,256,,0,1,38,{ bonus bMdef,3; bonus bDex,1; bonus bInt,1; bonus2 bSubRace,RC_Demon,3; },{},{}
-5216,Satanic_Chain_,Evolved Evil Wing,5,20,,100,,6,,0,0xFFFFFFFE,7,2,256,,0,1,39,{ bonus bStr,1; bonus bAgi,1; bonus bFlee,3; bonus2 bSubRace,RC_Angel,3; },{},{}
-5217,Magestic_Goat_TW,Evolved Majestic Goat,5,20,,800,,10,,0,0x006444A2,7,2,256,,0,1,41,{ bonus bStr,2; },{},{}
-5218,Bunny_Band_,Evolved Bunny Band,5,20,,100,,3,,0,0xFFFFFFFF,7,2,256,,0,1,15,{ bonus bInt,2; },{},{}
-5219,Drooping_Kitty_,Evolved Drooping Cat,5,250000,,500,,3,,0,0xFFFFFFFE,7,2,256,,0,1,142,{ bonus bMdef,18; bonus bFlee,3; },{},{}
+5215,Angelic_Chain_,Evolved Angel Wing,5,20,,100,,2,,0,0xFFFFFFFE,7,2,256,,0,1,38,{ bonus bMdef,3; bonus bDex,1; bonus bInt,1; bonus2 bSubRace,RC_Demon,3; },{},{}
+5216,Satanic_Chain_,Evolved Evil Wing,5,20,,100,,3,,0,0xFFFFFFFE,7,2,256,,0,1,39,{ bonus bStr,1; bonus bAgi,1; bonus bFlee,3; bonus2 bSubRace,RC_Angel,3; },{},{}
+5217,Magestic_Goat_TW,Evolved Majestic Goat,5,20,,800,,5,,0,0x006444A2,7,2,256,,0,1,41,{ bonus bStr,2; },{},{}
+5218,Bunny_Band_,Evolved Bunny Band,5,20,,100,,2,,0,0xFFFFFFFF,7,2,256,,0,1,15,{ bonus bInt,2; },{},{}
+5219,Drooping_Kitty_,Evolved Drooping Cat,5,250000,,500,,1,,0,0xFFFFFFFE,7,2,256,,0,1,142,{ bonus bMdef,18; bonus bFlee,3; },{},{}
5220,Smoking_Pipe_,Evolved Pipe,5,20,,100,,0,,0,0xFFFFFFFE,7,2,1,,0,0,55,{ bonus bVit,1; bonus2 bSubRace,RC_Brute,5; },{},{}
-5221,Pair_Of_Red_Ribbon_,Evolved Pair of Red Ribbon,5,20,,100,,2,,0,0xFFFFFFFF,7,0,512,,45,0,169,{ bonus bFlee,5; },{},{}
-5222,Fish_On_Head_,Evolved Blue Fish,5,20,,500,,4,,0,0xFFFFFFFF,7,2,256,,50,1,149,{ bonus bAgi,1; bonus bDex,1; },{},{}
+5221,Pair_Of_Red_Ribbon_,Evolved Pair of Red Ribbon,5,20,,100,,1,,0,0xFFFFFFFF,7,0,512,,45,0,169,{ bonus bFlee,5; },{},{}
+5222,Fish_On_Head_,Evolved Blue Fish,5,20,,500,,2,,0,0xFFFFFFFF,7,2,256,,50,1,149,{ bonus bAgi,1; bonus bDex,1; },{},{}
5223,Big_Golden_Bell_,Evolved Big Golden Bell,5,20,,200,,2,,0,0xFFFFFFFE,7,2,768,,35,1,175,{ bonus bAgi,2; },{},{}
5224,Orc_Hero_Helm_TW,Evolved Orc Hero Helm,5,500000,,900,,5,,0,0xFFFFFFFE,7,2,768,,55,1,178,{ bonus bStr,2; bonus bVit,1; bonus bMaxHPrate,10; },{},{}
-5225,Marcher_Hat,Parade Hat,5,20,,200,,4,,1,0xFFFFFFFF,7,2,256,,10,1,269,{ bonus bMdef,2; bonus bStr,2; bonus3 bAutoSpell,"AL_ANGELUS",5,30; },{},{}
-5226,Mini_Propeller_,Mini Propeller,5,20,,200,,4,,0,0xFFFFFFFF,7,2,256,,0,1,270,{ bonus bAgi,2; bonus bDex,1; bonus bFlee,10; bonus bCastrate,-getrefine(); },{},{}
-5227,Red_Deviruchi_Cap,Red Deviruchi Hat,5,20,,800,,4,,0,0xFFFFFFFE,7,2,256,,64,1,271,{ bonus bStr,1; bonus bInt,1; },{},{}
-5228,White_Deviruchi_Cap,Gray Deviruchi Hat,5,20,,800,,4,,0,0xFFFFFFFE,7,2,256,,64,1,272,{ bonus bStr,1; bonus bInt,1; },{},{}
-5229,Gray_Deviruchi_Cap,Brown Deviruchi Hat,5,20,,800,,4,,0,0xFFFFFFFE,7,2,256,,64,1,273,{ bonus bStr,1; bonus bInt,1; },{},{}
-5230,White_Drooping_Kitty,Gray Drooping Cat,5,250000,,500,,3,,0,0xFFFFFFFE,7,2,256,,0,1,274,{ bonus2 bResEff,Eff_Curse,3000; bonus bMdef,15; },{},{}
-5231,Gray_Drooping_Kitty,Brown Drooping Cat,5,250000,,500,,3,,0,0xFFFFFFFE,7,2,256,,0,1,275,{ bonus2 bResEff,Eff_Curse,3000; bonus bMdef,15; },{},{}
-5232,Pink_Drooping_Kitty,Pink Drooping Cat,5,250000,,500,,3,,0,0xFFFFFFFE,7,2,256,,0,1,276,{ bonus2 bResEff,Eff_Curse,3000; bonus bMdef,15; },{},{}
-5233,Blue_Drooping_Kitty,Blue Drooping Cat,5,250000,,500,,3,,0,0xFFFFFFFE,7,2,256,,0,1,277,{ bonus2 bResEff,Eff_Curse,3000; bonus bMdef,15; },{},{}
-5234,Yellow_Drooping_Kitty,Yellow Drooping Cat,5,250000,,500,,3,,0,0xFFFFFFFE,7,2,256,,0,1,278,{ bonus2 bResEff,Eff_Curse,3000; bonus bMdef,15; },{},{}
-5235,Gray_Fur_Hat,Brown Beanie,5,20,,350,,3,,0,0xFFFFFFFF,7,2,256,,0,1,279,{ bonus bLuk,1; },{},{}
-5236,Blue_Fur_Hat,Blue Beanie,5,20,,350,,3,,0,0xFFFFFFFF,7,2,256,,0,1,280,{ bonus bLuk,1; },{},{}
-5237,Pink_Fur_Hat,Pink Beanie,5,20,,350,,3,,0,0xFFFFFFFF,7,2,256,,0,1,281,{ bonus bLuk,1; },{},{}
-5238,Red_Wizardry_Hat,Red Mage Hat,5,20,,300,,2,,0,0x00810204,7,2,256,,0,1,282,{ bonus bInt,2; bonus bMaxSP,150; },{},{}
-5239,White_Wizardry_Hat,Gray Mage Hat,5,20,,300,,2,,0,0x00810204,7,2,256,,0,1,283,{ bonus bInt,2; bonus bMaxSP,150; },{},{}
-5240,Gray_Wizardry_Hat,Brown Mage Hat,5,20,,300,,2,,0,0x00810204,7,2,256,,0,1,284,{ bonus bInt,2; bonus bMaxSP,150; },{},{}
-5241,Blue_Wizardry_Hat,Blue Mage Hat,5,20,,300,,2,,0,0x00810204,7,2,256,,0,1,285,{ bonus bInt,2; bonus bMaxSP,150; },{},{}
-5242,Yellow_Wizardry_Hat,Yellow Mage Hat,5,20,,300,,2,,0,0x00810204,7,2,256,,0,1,286,{ bonus bInt,2; bonus bMaxSP,150; },{},{}
-5243,Chullos,Shafka,5,20,,800,,2,,1,0xFFFFFFFF,7,2,768,,1,1,287,{ bonus2 bResEff,Eff_Freeze,1000; },{},{}
+5225,Marcher_Hat,Parade Hat,5,20,,200,,2,,1,0xFFFFFFFF,7,2,256,,10,1,269,{ bonus bMdef,2; bonus bStr,2; bonus3 bAutoSpell,"AL_ANGELUS",5,30; },{},{}
+5226,Mini_Propeller_,Mini Propeller,5,20,,200,,2,,0,0xFFFFFFFF,7,2,256,,0,1,270,{ bonus bAgi,2; bonus bDex,1; bonus bFlee,10; bonus bCastrate,-getrefine(); },{},{}
+5227,Red_Deviruchi_Cap,Red Deviruchi Hat,5,20,,800,,2,,0,0xFFFFFFFE,7,2,256,,64,1,271,{ bonus bStr,1; bonus bInt,1; },{},{}
+5228,White_Deviruchi_Cap,Gray Deviruchi Hat,5,20,,800,,2,,0,0xFFFFFFFE,7,2,256,,64,1,272,{ bonus bStr,1; bonus bInt,1; },{},{}
+5229,Gray_Deviruchi_Cap,Brown Deviruchi Hat,5,20,,800,,2,,0,0xFFFFFFFE,7,2,256,,64,1,273,{ bonus bStr,1; bonus bInt,1; },{},{}
+5230,White_Drooping_Kitty,Gray Drooping Cat,5,250000,,500,,1,,0,0xFFFFFFFE,7,2,256,,0,1,274,{ bonus2 bResEff,Eff_Curse,3000; bonus bMdef,15; },{},{}
+5231,Gray_Drooping_Kitty,Brown Drooping Cat,5,250000,,500,,1,,0,0xFFFFFFFE,7,2,256,,0,1,275,{ bonus2 bResEff,Eff_Curse,3000; bonus bMdef,15; },{},{}
+5232,Pink_Drooping_Kitty,Pink Drooping Cat,5,250000,,500,,1,,0,0xFFFFFFFE,7,2,256,,0,1,276,{ bonus2 bResEff,Eff_Curse,3000; bonus bMdef,15; },{},{}
+5233,Blue_Drooping_Kitty,Blue Drooping Cat,5,250000,,500,,1,,0,0xFFFFFFFE,7,2,256,,0,1,277,{ bonus2 bResEff,Eff_Curse,3000; bonus bMdef,15; },{},{}
+5234,Yellow_Drooping_Kitty,Yellow Drooping Cat,5,250000,,500,,1,,0,0xFFFFFFFE,7,2,256,,0,1,278,{ bonus2 bResEff,Eff_Curse,3000; bonus bMdef,15; },{},{}
+5235,Gray_Fur_Hat,Brown Beanie,5,20,,350,,2,,0,0xFFFFFFFF,7,2,256,,0,1,279,{ bonus bLuk,1; },{},{}
+5236,Blue_Fur_Hat,Blue Beanie,5,20,,350,,2,,0,0xFFFFFFFF,7,2,256,,0,1,280,{ bonus bLuk,1; },{},{}
+5237,Pink_Fur_Hat,Pink Beanie,5,20,,350,,2,,0,0xFFFFFFFF,7,2,256,,0,1,281,{ bonus bLuk,1; },{},{}
+5238,Red_Wizardry_Hat,Red Mage Hat,5,20,,300,,1,,0,0x00810204,7,2,256,,0,1,282,{ bonus bInt,2; bonus bMaxSP,150; },{},{}
+5239,White_Wizardry_Hat,Gray Mage Hat,5,20,,300,,1,,0,0x00810204,7,2,256,,0,1,283,{ bonus bInt,2; bonus bMaxSP,150; },{},{}
+5240,Gray_Wizardry_Hat,Brown Mage Hat,5,20,,300,,1,,0,0x00810204,7,2,256,,0,1,284,{ bonus bInt,2; bonus bMaxSP,150; },{},{}
+5241,Blue_Wizardry_Hat,Blue Mage Hat,5,20,,300,,1,,0,0x00810204,7,2,256,,0,1,285,{ bonus bInt,2; bonus bMaxSP,150; },{},{}
+5242,Yellow_Wizardry_Hat,Yellow Mage Hat,5,20,,300,,1,,0,0x00810204,7,2,256,,0,1,286,{ bonus bInt,2; bonus bMaxSP,150; },{},{}
+5243,Chullos,Shafka,5,20,,800,,2,,1,0xFFFFFFFF,7,2,768,,0,1,287,{ bonus2 bResEff,Eff_Freeze,1000; },{},{}
5244,Elven_Blindfold,Elven Blindfold,5,20,,200,,1,,0,0xFFFFFFFF,7,2,512,,0,0,288,{ bonus2 bResEff,Eff_Blind,10000; },{},{}
5245,Elven_Sunglasses,Elven Sunglasses,5,20,,200,,1,,0,0xFFFFFFFF,7,2,512,,0,0,289,{ bonus2 bResEff,Eff_Blind,500; },{},{}
-5246,Angelic_Helm,Angelic Helm,5,20,,700,,7,,0,0xFFFFFFFF,7,2,256,,0,1,290,{ bonus bAgi,1; bonus bLuk,1; bonus bMdef,3; bonus2 bSubRace,RC_Demon,5; },{},{}
-5247,Satanic_Helm,Satanic Helm,5,20,,700,,8,,0,0xFFFFFFFF,7,2,256,,0,1,291,{ bonus bAgi,1; bonus bLuk,1; bonus bMdef,3; bonus2 bSubRace,RC_Demon,5; },{},{}
+5246,Angelic_Helm,Angelic Helm,5,20,,700,,3,,0,0xFFFFFFFF,7,2,256,,0,1,290,{ bonus bAgi,1; bonus bLuk,1; bonus bMdef,3; bonus2 bSubRace,RC_Demon,5; },{},{}
+5247,Satanic_Helm,Satanic Helm,5,20,,700,,4,,0,0xFFFFFFFF,7,2,256,,0,1,291,{ bonus bAgi,1; bonus bLuk,1; bonus bMdef,3; bonus2 bSubRace,RC_Demon,5; },{},{}
5248,Robotic_Blindfold,Robotic Blindfold,5,20,,200,,1,,0,0xFFFFFFFF,7,2,512,,0,0,292,{ bonus2 bResEff,Eff_Blind,10000; },{},{}
5249,Human_Blindfold,Human Blindfold,5,20,,200,,1,,0,0xFFFFFFFF,7,2,512,,0,0,293,{ bonus2 bResEff,Eff_Blind,10000; },{},{}
-5250,Robotic_Ears,Robotic Ears,5,20,,100,,0,,0,0xFFFFFFFF,7,2,512,,0,0,294,{},{},{}
-5251,Round_Ears,Round Ears,5,20,,100,,0,,0,0xFFFFFFFF,7,2,512,,0,0,295,{},{},{}
-5252,Drooping_Nine_Tail,Drooping Ninetail,5,20,,300,,2,,0,0xFFFFFFFF,7,2,256,,20,1,296,{ bonus bAgi,1; bonus bDex,1; bonus3 bAutoSpellWhenHit,"PR_GLORIA",1,30; },{},{}
-5253,Lif_Doll_Hat,Lif Doll Hat,5,20,,200,,2,,1,0xFFFFFFFF,7,2,256,,20,1,297,{ bonus bInt,1; bonus bMdef,getrefine(); bonus bDef,getrefine()*-1; },{},{}
-5254,Deviling_Hat,Deviling Hat,5,20,,500,,6,,1,0xFFFFFFFF,7,2,256,,0,1,298,{ bonus bStr,1; bonus bCritical,3; bonus2 bSubRace,RC_Angel,-20; if(getrefine()>=6){ bonus bCritical,getrefine()-5; } },{},{}
-5255,Triple_Poring_Hat,Triple Poring Hat,5,20,,600,,6,,0,0xFFFFFFFF,7,2,256,,20,0,299,{ bonus bLuk,3; bonus3 bAutoSpell,"BS_GREED",1,50; },{},{}
-5256,Valkyrie_Feather_Band,Valkyrie Feather Band,5,20,,100,,2,,1,0xFFFFFFFF,7,2,256,,20,1,300,{ bonus bInt,1; bonus3 bAutoSpellWhenHit,"AL_HEAL",1,10; },{},{}
-5257,Soulless_Wing,Soul Ring,5,20,,300,,3,,0,0xFFFFFFFE,7,2,256,,20,1,301,{ bonus bMdef,2; bonus3 bAutoSpellWhenHit,"HP_ASSUMPTIO",1,10; },{},{}
+5250,Robotic_Ears,Robotic Ears,5,20,,10,,0,,0,0xFFFFFFFF,7,2,512,,0,0,294,{},{},{}
+5251,Round_Ears,Round Ears,5,20,,10,,0,,0,0xFFFFFFFF,7,2,512,,0,0,295,{},{},{}
+5252,Drooping_Nine_Tail,Drooping Ninetail,5,20,,300,,1,,0,0xFFFFFFFF,7,2,256,,20,1,296,{ bonus bAgi,1; bonus bDex,1; bonus3 bAutoSpellWhenHit,"PR_GLORIA",1,30; },{},{}
+5253,Lif_Doll_Hat,Lif Doll Hat,5,20,,200,,1,,1,0xFFFFFFFF,7,2,256,,20,1,297,{ bonus bInt,1; bonus bMdef,getrefine(); bonus bDef,getrefine()*-1; },{},{}
+5254,Deviling_Hat,Deviling Hat,5,20,,500,,1,,1,0xFFFFFFFF,7,2,256,,20,1,298,{ bonus bStr,1; bonus bCritical,3; bonus2 bSubRace,RC_Angel,-20; if(getrefine()>=6){ bonus bCritical,getrefine()-5; } },{},{}
+5255,Triple_Poring_Hat,Triple Poring Hat,5,20,,600,,3,,0,0xFFFFFFFF,7,2,256,,20,0,299,{ bonus bLuk,3; bonus3 bAutoSpell,"BS_GREED",1,50; },{},{}
+5256,Valkyrie_Feather_Band,Valkyrie Feather Band,5,20,,100,,1,,1,0xFFFFFFFF,7,2,256,,20,1,300,{ bonus bInt,1; bonus3 bAutoSpellWhenHit,"AL_HEAL",1,10; },{},{}
+5257,Soulless_Wing,Soul Ring,5,20,,300,,2,,0,0xFFFFFFFE,7,2,256,,20,1,301,{ bonus bMdef,2; bonus3 bAutoSpellWhenHit,"HP_ASSUMPTIO",1,10; },{},{}
5258,Afro_Wig,Afro Wig,5,20,,100,,0,,1,0xFFFFFFFF,7,2,768,,10,1,302,{ bonus3 bAutoSpellWhenHit,"NV_FIRSTAID",1,300; bonus2 bSubEle,Ele_Neutral,1; },{},{}
-5259,Elephant_Hat_,Elephant Hat,5,20,,500,,6,,0,0xFFFFFFFF,7,2,256,,0,1,215,{ bonus bVit,1; bonus3 bAutoSpell,"WZ_WATERBALL",3,10; skill "AL_HOLYWATER",1; },{},{}
-5260,Cookie_Hat,Cookie Hat,5,20,,500,,4,,0,0xFFFFFFFF,7,2,256,,0,1,217,{ bonus bAgi,1; bonus bFlee2,5; bonus bCritAtkRate,5; },{},{}
-5261,Silver_Tiara_,Silver Tiara,5,20,,500,,5,,0,0xFFFFFFFF,7,2,256,,0,1,218,{ bonus bInt,2; if (BaseClass == Job_Mage) bonus bMatkRate,(JobLevel/20); if (Baseclass == Job_Acolyte) bonus bUseSPrate,-(JobLevel/10); if (BaseClass == Job_Archer) bonus bMaxSP,(JobLevel*2); },{},{}
-5262,Gold_Tiara_,Golden Tiara,5,20,,500,,5,,0,0xFFFFFFFF,7,2,256,,0,1,232,{ bonus bStr,2; bonus bUnbreakableHelm,0; if ((readparam(bDex) < 56) && (BaseClass == Job_Swordman || BaseClass == Job_Merchant || BaseClass == Job_Thief)) bonus bDex,JobLevel/7; },{},{}
+5259,Elephant_Hat_,Elephant Hat,5,20,,500,,3,,0,0xFFFFFFFF,7,2,256,,0,1,215,{ bonus bVit,1; bonus3 bAutoSpell,"WZ_WATERBALL",3,10; skill "AL_HOLYWATER",1; },{},{}
+5260,Cookie_Hat,Cookie Hat,5,20,,500,,2,,0,0xFFFFFFFF,7,2,256,,0,1,217,{ bonus bAgi,1; bonus bFlee2,5; bonus bCritAtkRate,5; },{},{}
+5261,Silver_Tiara_,Silver Tiara,5,20,,500,,2,,0,0xFFFFFFFF,7,2,256,,0,1,218,{ bonus bInt,2; if (BaseClass == Job_Mage) bonus bMatkRate,(JobLevel/20); if (Baseclass == Job_Acolyte) bonus bUseSPrate,-(JobLevel/10); if (BaseClass == Job_Archer) bonus bMaxSP,(JobLevel*2); },{},{}
+5262,Gold_Tiara_,Golden Tiara,5,20,,500,,2,,0,0xFFFFFFFF,7,2,256,,0,1,232,{ bonus bStr,2; bonus bUnbreakableHelm,0; if ((readparam(bDex) < 56) && (BaseClass == Job_Swordman || BaseClass == Job_Merchant || BaseClass == Job_Thief)) bonus bDex,JobLevel/7; },{},{}
5263,Ati_Atihan_Hat,Pagdayaw,5,20,,100,,1,,0,0xFFFFFFFE,7,2,769,,20,1,303,{ bonus2 bSubEle,Ele_Water,1; bonus2 bSubEle,Ele_Earth,1; bonus2 bSubEle,Ele_Fire,1; bonus2 bSubEle,Ele_Wind,1; bonus2 bAddEff,Eff_Curse,3; },{},{}
-5264,Aussie_Flag_Hat,Australian Flag Hat,5,20,,500,,8,,0,0xFFFFFFFF,7,2,256,,0,1,304,{ bonus bAllStats,2; },{},{}
-5265,Apple_Of_Archer_C,Apple of Archer,5,1,,0,,12,,0,0xFFFFFFFE,7,2,256,,1,0,72,{ bonus bDex,4; },{},{}
-5266,Bunny_Band_C,Bunny Band,5,1,,0,,10,,0,0xFFFFFFFF,7,2,256,,1,0,15,{ bonus bMdef,5; bonus2 bSubRace,RC_DemiHuman,10; },{},{}
-5267,Sahkkat_C,Sakkat,5,1,,0,,10,,0,0xFFFFFFFF,7,2,256,,1,0,67,{ bonus bAgi,3; },{},{}
-5268,Lord_Circlet_C,Grand Circlet,5,1,,0,,12,,0,0xFFFFFFFE,7,2,256,,1,0,93,{ bonus bStr,3; bonus bInt,3; bonus bLuk,3; bonus bMdef,4; },{},{}
-5269,Flying_Angel_,Flapping Angel Wing,5,20,,300,,3,,0,0xFFFFFFFF,7,2,256,,10,1,264,{ bonus bInt,1; bonus bAgi,1; bonus bAspdRate,3; bonus bSpeedRate,25; },{},{}
-5270,Fallen_Leaves_,Autumn Leaves,5,20,,100,,2,,1,0xFFFFFFFF,7,2,256,,0,1,241,{ bonus bFlee2,5; },{},{}
+5264,Aussie_Flag_Hat,Australian Flag Hat,5,20,,500,,4,,0,0xFFFFFFFF,7,2,256,,0,1,304,{ bonus bAllStats,2; },{},{}
+5265,Apple_Of_Archer_C,Apple of Archer,5,1,,0,,7,,0,0xFFFFFFFE,7,2,256,,1,0,72,{ bonus bDex,4; },{},{}
+5266,Bunny_Band_C,Bunny Band,5,1,,0,,9,,0,0xFFFFFFFF,7,2,256,,1,0,15,{ bonus bMdef,5; bonus2 bSubRace,RC_DemiHuman,10; },{},{}
+5267,Sahkkat_C,Sakkat,5,1,,0,,10,,0,0xFFFFFFFF,7,2,256,,0,0,67,{ bonus bAgi,3; },{},{}
+5268,Lord_Circlet_C,Grand Circlet,5,1,,0,,10,,0,0xFFFFFFFE,7,2,256,,1,0,93,{ bonus bStr,3; bonus bInt,3; bonus bLuk,3; bonus bMdef,4; },{},{}
+5269,Flying_Angel_,Flapping Angel Wing,5,20,,300,,1,,0,0xFFFFFFFF,7,2,256,,10,1,264,{ bonus bInt,1; bonus bAgi,1; bonus bAspdRate,3; bonus bSpeedRate,25; },{},{}
+5270,Fallen_Leaves_,Autumn Leaves,5,20,,100,,1,,1,0xFFFFFFFF,7,2,256,,0,1,241,{ bonus bFlee2,5; },{},{}
5271,Chinese_Crown_,Phoenix Crown,5,20,,500,,4,,1,0xFFFFFFFF,7,2,768,,0,1,221,{ bonus bMdef,3; bonus2 bSubRace,RC_Boss,getrefine(); },{},{}
5272,Tongue_Mask_,Tongue Mask,5,20,,100,,2,,0,0xFFFFFFFF,7,2,513,,0,0,253,{ bonus3 bAutoSpell,"SM_PROVOKE",5,50; },{},{}
5273,Happy_Wig,Happy Wig,5,20,,100,,1,,0,0xFFFFFFFF,7,2,768,,0,1,305,{ bonus bSpeedRate,25; bonus bDef,4; skill "TF_HIDING",1; },{},{ sc_end SC_HIDING; }
5274,Shiny_Wig,Shiny Wig,5,20,,100,,1,,0,0xFFFFFFFF,7,2,768,,0,1,306,{ bonus bSpeedRate,25; bonus bDef,4; skill "TF_HIDING",1; },{},{ sc_end SC_HIDING; }
5275,Marvelous_Wig,Marvelous Wig,5,20,,100,,1,,0,0xFFFFFFFF,7,2,768,,0,1,307,{ bonus bSpeedRate,25; bonus bDef,4; skill "TF_HIDING",1; },{},{ sc_end SC_HIDING; }
5276,Fantastic_Wig,Fantastic Wig,5,20,,100,,1,,0,0xFFFFFFFF,7,2,768,,0,1,308,{ bonus bSpeedRate,25; bonus bDef,4; skill "TF_HIDING",1; },{},{ sc_end SC_HIDING; }
-5277,Yellow_Bandana,Yellow Bandana,5,20,,100,,2,,0,0xFFFFFFFE,7,2,256,,20,1,309,{ bonus bLuk,2; bonus bVit,2; bonus bLongAtkDef,10; },{},{}
-5278,Yellow_Ribbon,Yellow Ribbon,5,20,,100,,2,,0,0xFFFFFFFE,7,2,256,,20,1,310,{ bonus bLuk,2; bonus bVit,2; bonus bLongAtkDef,10; },{},{}
-5279,Drooping_Kitty_C,Refined Drooping Cat,5,2,,0,,3,,0,0xFFFFFFFE,7,2,256,,0,0,142,{ bonus bMdef,15; bonus2 bResEff,Eff_Curse,3000; },{},{}
-5280,Magestic_Goat_C,Baphomet Horns,5,2,,0,,10,,0,0xFFFFFFFE,7,2,256,,0,0,41,{ bonus bStr,1; },{},{}
-5281,Deviruchi_Cap_C,Refined Deviruchi Hat,5,2,,0,,4,,0,0xFFFFFFFE,7,2,256,,0,0,123,{ bonus bStr,1; bonus bInt,1; },{},{}
-5282,euRO_Baseball_Cap,Europe Baseball Cap,5,0,,200,,5,,1,0xFFFFFFFF,7,2,256,,0,1,216,{},{},{}
-5283,Chick_Hat,Chick Hat,5,20,,100,,2,,0,0xFFFFFFFF,7,2,256,,10,0,311,{ bonus bLuk,2; bonus bMaxHP,50; bonus bMaxSP,50; bonus bDoubleRate,10; bonus2 bSubRace,RC_DemiHuman,3; },{},{}
+5277,Yellow_Bandana,Yellow Bandana,5,20,,100,,1,,0,0xFFFFFFFE,7,2,256,,20,1,309,{ bonus bLuk,2; bonus bVit,2; bonus bLongAtkDef,10; },{},{}
+5278,Yellow_Ribbon,Yellow Ribbon,5,20,,100,,1,,0,0xFFFFFFFE,7,2,256,,20,1,310,{ bonus bLuk,2; bonus bVit,2; bonus bLongAtkDef,10; },{},{}
+5279,Drooping_Kitty_C,Refined Drooping Cat,5,2,,0,,1,,0,0xFFFFFFFE,7,2,256,,0,0,142,{ bonus bMdef,15; bonus2 bResEff,Eff_Curse,3000; },{},{}
+5280,Magestic_Goat_C,Baphomet Horns,5,2,,0,,5,,0,0xFFFFFFFF,7,2,256,,0,0,41,{ bonus bStr,1; },{},{}
+5281,Deviruchi_Cap_C,Refined Deviruchi Hat,5,2,,0,,2,,0,0xFFFFFFFE,7,2,256,,0,0,123,{ bonus bStr,1; bonus bInt,1; },{},{}
+5282,euRO_Baseball_Cap,Europe Baseball Cap,5,0,,200,,3,,1,0xFFFFFFFF,7,2,256,,0,1,216,{},{},{}
+5283,Chick_Hat,Chick Hat,5,20,,100,,1,,0,0xFFFFFFFF,7,2,256,,10,0,311,{ bonus bLuk,2; bonus bMaxHP,50; bonus bMaxSP,50; bonus bDoubleRate,10; bonus2 bSubRace,RC_DemiHuman,3; },{},{}
5284,Water_Lily_Crown,Water Lily Crown,5,20,,200,,0,,1,0xFFFFFFFF,7,2,256,,30,0,312,{ bonus bDex,1; bonus bAgi,1; bonus bHPrecovRate,5; bonus bSPrecovRate,3; },{},{}
-5285,Vane_Hairpin,Vane Hairpin,5,20,,300,,4,,1,0xFFFFFFFF,7,2,256,,30,0,313,{ bonus bAgi,2; },{},{}
-5286,Pecopeco_Hairband,Pecopeco Hairband,5,20,,0,,6,,0,0xFFFFFFFF,7,2,256,,70,0,314,{ bonus bSpeedRate,25; bonus bAspdRate,-10; bonus bCastrate,25; },{},{}
-5287,Vacation_Hat,Vacation Hat,5,20,,200,,2,,1,0xFFFFFFFF,7,2,256,,30,0,315,{ bonus bVit,1; },{},{}
+5285,Vane_Hairpin,Vane Hairpin,5,20,,300,,3,,1,0xFFFFFFFF,7,2,256,,30,0,313,{ bonus bAgi,2; },{},{}
+5286,Pecopeco_Hairband,Pecopeco Hairband,5,20,,0,,3,,0,0xFFFFFFFF,7,2,256,,70,0,314,{ bonus bSpeedRate,25; bonus bAspdRate,-10; bonus bCastrate,25; },{},{}
+5287,Vacation_Hat,Vacation Hat,5,20,,200,,1,,1,0xFFFFFFFF,7,2,256,,30,0,315,{ bonus bVit,1; },{},{}
5288,Red_Glasses,Red Glasses,5,20,,0,,1,,0,0xFFFFFFFF,7,2,512,,0,0,316,{ bonus bInt,1; },{},{}
-5289,Vanilmirth_Hat,Vanilmirth Hat,5,20,,1000,,0,,0,0xFFFFFFFF,7,2,256,,30,0,317,{ bonus bUnbreakableHelm,0; bonus3 bAutoSpell,"MG_FIREBOLT",1,10; bonus3 bAutoSpell,"MG_COLDBOLT",1,10; bonus3 bAutoSpell,"MG_LIGHTNINGBOLT",1,10; bonus bMdef,5; },{},{}
-5290,Drooping_Bunny_,Drooping Bunny,5,20,,100,,3,,0,0xFFFFFFFF,7,2,256,,0,1,249,{ bonus bDex,1; bonus bFlee,2; },{},{}
-5291,Kettle_Hat,Kettle Hat,5,20,,600,,8,,0,0xFFFFFFFF,7,2,256,,30,1,318,{ bonus4 bAutoSpell,"SA_DELUGE",2,10,0; bonus3 bAutoSpell,"WZ_WATERBALL",3,10; },{},{}
-5292,Dragon_Skull,Dragon Skull,5,20,,800,,10,,0,0xFFFFFFFF,7,2,256,,50,1,319,{ bonus2 bSubRace,RC_Dragon,5; },{},{}
-5293,Ramen_Hat,Ramen Hat,5,20,,0,,3,,0,0xFFFFFFFF,7,2,256,,0,0,320,{ bonus bDex,4; bonus4 bAutoSpellWhenHit,"AL_DECAGI",1,30,1; },{},{}
+5289,Vanilmirth_Hat,Vanilmirth Hat,5,20,,100,,0,,0,0xFFFFFFFF,7,2,256,,30,0,317,{ bonus bUnbreakableHelm,0; bonus3 bAutoSpell,"MG_FIREBOLT",1,10; bonus3 bAutoSpell,"MG_COLDBOLT",1,10; bonus3 bAutoSpell,"MG_LIGHTNINGBOLT",1,10; bonus bMdef,5; },{},{}
+5290,Drooping_Bunny_,Drooping Bunny,5,20,,100,,1,,0,0xFFFFFFFF,7,2,256,,0,1,249,{ bonus bDex,1; bonus bFlee,2; },{},{}
+5291,Kettle_Hat,Kettle Hat,5,20,,600,,4,,0,0xFFFFFFFF,7,2,256,,30,1,318,{ bonus4 bAutoSpell,"SA_DELUGE",2,10,0; bonus3 bAutoSpell,"WZ_WATERBALL",3,10; },{},{}
+5292,Dragon_Skull,Dragon Skull,5,20,,800,,5,,0,0xFFFFFFFF,7,2,256,,50,1,319,{ bonus2 bSubRace,RC_Dragon,5; },{},{}
+5293,Ramen_Hat,Ramen Hat,5,20,,0,,1,,0,0xFFFFFFFF,7,2,256,,0,0,320,{ bonus bDex,4; bonus4 bAutoSpellWhenHit,"AL_DECAGI",1,30,1; },{},{}
5294,Whisper_Mask,Whisper Mask,5,20,,0,,0,,0,0xFFFFFFFF,7,2,769,,0,0,321,{ bonus bAgi,3; bonus2 bSubEle,Ele_Ghost,-10; },{},{}
5295,Golden_Bandana,Golden Bandana,5,20,,2400,,4,,0,0xFFFFFFFF,7,2,768,,0,0,138,{ bonus bMdef,4; },{},{}
-5296,Drooping_Nine_Tail_,Drooping Nine Tail,5,20,,300,,2,,1,0xFFFFFFFF,7,2,256,,0,1,296,{ bonus bAgi,1; bonus bCritical,1; },{},{}
-5297,Soulless_Wing_,Soul Wing,5,20,,300,,3,,1,0xFFFFFFFF,7,2,256,,0,1,301,{ bonus bAllStats,1; bonus2 bSPRegenRate,2,10000; },{},{}
+5296,Drooping_Nine_Tail_,Drooping Nine Tail,5,20,,300,,1,,1,0xFFFFFFFF,7,2,256,,0,1,296,{ bonus bAgi,1; bonus bCritical,1; },{},{}
+5297,Soulless_Wing_,Soul Wing,5,20,,300,,2,,1,0xFFFFFFFF,7,2,256,,0,1,301,{ bonus bAllStats,1; bonus2 bSPRegenRate,2,10000; },{},{}
5298,Marvelous_Wig_,Dokebi's Wig,5,20,,100,,1,,1,0xFFFFFFFF,7,2,768,,0,1,307,{ bonus2 bSubEle,Ele_Neutral,5; bonus2 bSubEle,Ele_Fire,-5; bonus2 bSubEle,Ele_Water,-5; },{},{}
5299,Ati_Atihan_Hat_,Pagdayaw,5,20,,100,,1,,1,0xFFFFFFFF,7,2,769,,0,0,303,{ bonus3 bAutoSpell,"DC_SCREAM",1,50; },{},{}
-5300,Bullock_Helm,Bullock Helm,5,20,,800,,4,,0,0xFFFFFFFE,7,2,256,,45,1,322,{ bonus bMaxHP,100; },{},{}
+5300,Bullock_Helm,Bullock Helm,5,20,,800,,2,,0,0xFFFFFFFE,7,2,256,,45,1,322,{ bonus bMaxHP,100; },{},{}
//5301,Russian_Ribbon,Victory Hairband,5,0,,100,,0,,0,0xFFFFFFFF,7,2,256,,0,1,323,{},{},{}
-5302,Lotus_Flower_Hat,Flower Lily,5,0,,100,,2,,0,0xFFFFFFFF,7,2,256,,30,1,324,{},{},{}
-5303,Flower_Coronet,Flower Crown,5,20,,300,,2,,0,0xFFFFFFFF,7,2,256,,0,1,325,{ bonus bMdef,5; bonus bMaxHP,50; },{},{}
+5302,Lotus_Flower_Hat,Flower Lily,5,0,,100,,1,,0,0xFFFFFFFF,7,2,256,,30,1,324,{},{},{}
+5303,Flower_Coronet,Flower Crown,5,20,,300,,1,,0,0xFFFFFFFF,7,2,256,,0,1,325,{ bonus bMdef,3; bonus bMaxHP,50; },{},{}
5304,Cap_Of_Blindness,Cap Of Blindness,5,20,,800,,4,,1,0xFFFFFFFF,7,2,769,,50,1,326,{ bonus2 bResEff,Eff_Curse,700; bonus2 bResEff,Eff_Blind,10000; },{},{}
5305,Pirate_Dagger,Pirate Dagger,5,20,,100,,0,,0,0xFFFFFFFF,7,2,1,,0,0,327,{ bonus bBaseAtk,5; },{},{}
-//5306,Freyja_Crown,Freya's Crown,5,0,,500,,20,,0,0xFFFFFFFE,7,2,256,,0,0,328,{ bonus2 bSubRace,RC_DemiHuman,5; },{},{}
-//5307,Carmen_Miranda's_Hat,Carmen Miranda's Hat,5,20,,400,,5,,0,0xFFFFFFFF,7,0,256,,0,1,329,{ bonus bMdef,3; bonus3 bAutoSpellWhenHit,"DC_WINKCHARM",1,50; },{},{}
-//5308,Brazilian_Flag_Hat,Brazil National Flag Hat,5,20,,300,,5,,1,0xFFFFFFFF,7,0,256,,0,1,330,{ bonus bSpeedAddRate,25; },{},{}
+//5306,Freyja_Crown,Freya's Crown,5,0,,500,,12,,0,0xFFFFFFFE,7,2,256,,0,0,328,{ bonus2 bSubRace,RC_DemiHuman,5; },{},{}
+//5307,Carmen_Miranda's_Hat,Carmen Miranda's Hat,5,20,,400,,3,,0,0xFFFFFFFF,7,0,256,,0,1,329,{ bonus bMdef,3; bonus3 bAutoSpellWhenHit,"DC_WINKCHARM",1,50; },{},{}
+//5308,Brazilian_Flag_Hat,Brazil National Flag Hat,5,20,,300,,3,,1,0xFFFFFFFF,7,0,256,,0,1,330,{ bonus bSpeedAddRate,25; },{},{}
//5309,Mahican,Wool Mask,5,20,,200,,1,,0,0xFFFFFFFF,7,0,769,,0,1,331,{ skill "RG_GRAFFITI",1; },{},{}
-//5310,Bulb_Hairband,Shining Electric Bulb Hairband,5,20,,100,,5,,1,0xFFFFFFFF,7,2,256,,0,1,332,{ bonus2 bSubEle,Ele_Dark,10; skill "MG_SIGHT",1; },{},{ sc_end SC_SIGHT; }
-//5311,Large_Hibiscus,Large Hisbiscus,5,20,,100,,2,,1,0xFFFFFFFF,7,2,256,,0,1,333,{ bonus bMdef,15; },{},{}
-//5312,Ayothaya_Hat,Ayothaya King's Hat,5,20,,100,,10,,1,0x000654E2,7,2,256,,0,1,334,{ bonus bStr,1; bonus2 bAddRace,RC_DemiHuman,5; },{},{}
+//5310,Bulb_Hairband,Shining Electric Bulb Hairband,5,20,,100,,3,,1,0xFFFFFFFF,7,2,256,,0,1,332,{ bonus2 bSubEle,Ele_Dark,10; skill "MG_SIGHT",1; },{},{ sc_end SC_SIGHT; }
+//5311,Large_Hibiscus,Large Hisbiscus,5,20,,100,,1,,1,0xFFFFFFFF,7,2,256,,0,1,333,{ bonus bMdef,15; },{},{}
+//5312,Ayothaya_Hat,Ayothaya King's Hat,5,20,,100,,5,,1,0x000654E2,7,2,256,,0,1,334,{ bonus bStr,1; bonus2 bAddRace,RC_DemiHuman,5; },{},{}
5313,Diadem,Diadem,5,20,,100,,3,,1,0xFFFFFFFF,7,2,768,,0,1,335,{ bonus bInt,1; bonus bMatkRate,3; bonus bCastrate,-3; },{},{}
-5314,Hockey_Mask,Hockey Mask,5,20,,0,,1,,0,0xFFFFFFFF,7,2,513,,50,0,336,{ bonus2 bAddRace,RC_DemiHuman,5; },{},{}
-5315,Observer,Observer,5,20,,0,,2,,0,0xFFFFFFFF,7,2,512,,35,0,337,{ skill "WZ_ESTIMATION",1; },{},{}
+5314,Hockey_Mask,Hockey Mask,5,20,,100,,1,,0,0xFFFFFFFF,7,2,513,,50,0,336,{ bonus2 bAddRace,RC_DemiHuman,5; },{},{}
+5315,Observer,Observer,5,20,,100,,1,,0,0xFFFFFFFF,7,2,512,,35,0,337,{ skill "WZ_ESTIMATION",1; },{},{}
//5316,Umbrella_Hat,Umbrella Hat,5,20,,100,,2,,0,0xFFFFFFFF,7,2,256,,50,1,338,{ bonus2 bSubEle,Ele_Water,3; },{},{}
-//5317,Fisherman_Hat,Fisherman's Hat,5,20,,100,,4,,0,0xFFFFFFFF,7,2,256,,50,1,339,{ bonus3 bAutoSpell,"WZ_WATERBALL",3,50; },{},{}
-5318,Poring_Party_Hat,Poring Party Hat,5,20,,0,,0,,0,0xFFFFFFFF,7,2,256,,0,1,340,{ bonus bAllStats,3; },{},{}
-//5319,Hellomother_Hat,Hello Mother Hat,5,20,,200,,4,,0,0xFFFFFFFE,7,2,256,,10,1,341,{ bonus bLuk,3; },{},{}
-5320,Champion_Wreath,Champion Wreath,5,20,,500,,8,,0,0xFFFFFFFE,7,2,256,,0,1,261,{ bonus bAllStats,2; bonus4 bAutoSpellWhenHit,"AL_HEAL",1,50,0; },{},{}
+//5317,Fisherman_Hat,Fisherman's Hat,5,20,,100,,2,,0,0xFFFFFFFF,7,2,256,,50,1,339,{ bonus3 bAutoSpell,"WZ_WATERBALL",3,50; },{},{}
+5318,Poring_Party_Hat,Poring Party Hat,5,20,,0,,2,,0,0xFFFFFFFF,7,2,256,,0,1,340,{ bonus bAllStats,3; },{},{}
+//5319,Hellomother_Hat,Hello Mother Hat,5,20,,200,,2,,0,0xFFFFFFFE,7,2,256,,10,1,341,{ bonus bLuk,3; },{},{}
+5320,Champion_Wreath,Champion Wreath,5,20,,500,,4,,0,0xFFFFFFFE,7,2,256,,0,1,261,{ bonus bAllStats,2; bonus4 bAutoSpellWhenHit,"AL_HEAL",1,50,0; },{},{}
//5321,Indonesian_Bandana,Bandana Merah Putih,5,20,,500,,4,,0,0xFFFFFFFF,7,2,256,,0,1,342,{ bonus2 bAddMonsterDropItem,518,100; },{},{}
-//5322,Scarf,Kerchief,5,20,,100,,4,,0,0xFFFFFFFF,7,2,256,,24,1,343,{ bonus bFlee,5; bonus bMdef,2; },{},{}
-5323,Misstrance_Crown,Misstrance Crown,5,20,,0,,14,,0,0xFFFFFFFF,7,2,256,,0,0,165,{ bonus bAllStats,2; },{},{}
-5324,Little_Angel_Doll,Little Angel Doll,5,20,,300,,4,,0,0xFFFFFFFF,7,2,256,,10,1,344,{ bonus bDex,3; bonus4 bAutoSpellWhenHit,"CR_GRANDCROSS",3,30,0; },{},{}
+//5322,Scarf,Kerchief,5,20,,100,,2,,0,0xFFFFFFFF,7,2,256,,24,1,343,{ bonus bFlee,5; bonus bMdef,2; },{},{}
+5323,Misstrance_Crown,Misstrance Crown,5,20,,0,,10,,0,0xFFFFFFFF,7,2,256,,0,0,165,{ bonus bAllStats,2; },{},{}
+5324,Little_Angel_Doll,Little Angel Doll,5,20,,300,,2,,0,0xFFFFFFFF,7,2,256,,10,1,344,{ bonus bDex,3; bonus4 bAutoSpellWhenHit,"CR_GRANDCROSS",3,30,0; },{},{}
5325,Robo_Eye,Robo Eye,5,20,,200,,2,,0,0xFFFFFFFF,7,2,512,,10,0,345,{ bonus2 bAddRace,RC_NonBoss,2; bonus2 bAddRace,RC_Boss,2; bonus bMatkRate,2; bonus bDex,1; },{},{}
5326,Masquerade_C,Masquerade C,5,1,,0,,1,,0,0xFFFFFFFF,7,2,512,,0,0,78,{ bonus2 bAddRace,RC_DemiHuman,7; },{},{}
5327,Orc_Hero_Helm_C,Refined Helmet of Orc Hero,5,1,,0,,10,,0,0xFFFFFFFE,7,2,768,,0,0,178,{ bonus bStr,5; bonus bVit,3; },{},{}
-5328,Evil_Wing_Ears_C,Evil Wing Ears C,5,1,,0,,4,,0,0xFFFFFFFF,7,2,512,,0,0,152,{ bonus bStr,1; },{},{}
+5328,Evil_Wing_Ears_C,Evil Wing Ears C,5,1,,0,,2,,0,0xFFFFFFFF,7,2,512,,0,0,152,{ bonus bStr,1; },{},{}
5329,Dark_Blindfold_C,Dark Blindfold C,5,1,,0,,1,,0,0xFFFFFFFF,7,2,512,,0,0,187,{ bonus2 bResEff,Eff_Blind,10000; bonus2 bResEff,Eff_Stun,500; },{},{}
-5330,kRO_Drooping_Kitty_C,kRO Drooping Kitty C,5,1,,0,,9,,0,0xFFFFFFFE,7,2,256,,0,0,142,{ bonus bMdef,15; bonus2 bResEff,Eff_Curse,4000; bonus2 bResEff,Eff_Curse,1000; },{},{}
-5331,Corsair_C,Corsair C,5,1,,0,,14,,0,0xFFFFFFFE,7,2,256,,0,0,105,{ bonus bVit,3; bonus bInt,3; },{},{}
-5332,Loki_Mask,Loki Mask,5,0,,200,,2,,0,0xFFFFFFFF,7,2,513,,20,0,346,{ bonus bFlee2,3; },{},{}
+5330,kRO_Drooping_Kitty_C,kRO Drooping Kitty C,5,1,,0,,6,,0,0xFFFFFFFE,7,2,256,,0,0,142,{ bonus bMdef,15; bonus2 bResEff,Eff_Curse,4000; bonus2 bResEff,Eff_Curse,1000; },{},{}
+5331,Corsair_C,Corsair C,5,1,,0,,10,,0,0xFFFFFFFE,7,2,256,,0,0,105,{ bonus bVit,3; bonus bInt,3; },{},{}
+5332,Loki_Mask,Loki Mask,5,0,,200,,0,,0,0xFFFFFFFF,7,2,513,,20,0,346,{ bonus bFlee2,3; },{},{}
5333,Radio_Antenna,Radio Antenna,5,0,,1500,,2,,0,0xFFFFFFFF,7,2,256,,50,1,347,{ bonus bMdef,5; bonus bCritical,5; bonus bFlee,5; skill "MG_LIGHTNINGBOLT",1; bonus4 bAutoSpellWhenHit,"MG_THUNDERSTORM",5,30,1; },{},{}
5334,Angeling_Wanna_Fly,Flapping Angeling,5,0,,700,,0,,0,0xFFFFFFFF,7,2,256,,38,0,348,{ bonus bLuk,2; bonus bMdef,2; },{},{}
-//5335,Jumping_Poring,Jumping Poring,5,0,,300,,3,,0,0xFFFFFFFF,7,2,256,,0,0,349,{ bonus bLuk,1; bonus bUnbreakableHelm,0; },{},{}
-5336,Guildsman_Recruiter,Guildsman Recruiter Hat,5,0,,0,,4,,0,0xFFFFFFFF,7,2,256,,10,1,350,{},{},{}
-5337,Party_Recruiter_Hat,Party Recruiter Hat,5,0,,0,,4,,0,0xFFFFFFFF,7,2,256,,10,1,351,{},{},{}
-5338,Bf_Recruiter_Hat,Bf Recruiter Hat,5,0,,0,,4,,0,0xFFFFFFFF,7,2,256,,10,1,352,{},{},{}
-5339,Friend_Recruiter_Hat,Friend Recruiter Hat,5,0,,0,,4,,0,0xFFFFFFFF,7,2,256,,10,1,353,{},{},{}
-5340,Deprotai_Doll_Hat,Defolty Doll Hat,5,0,,500,,1,,1,0xFFFFFFFF,7,2,256,,60,0,354,{ bonus2 bSubRace,RC_DemiHuman,5; bonus bStr,2; bonus3 bAutoSpellWhenHit,"AL_ANGELUS",10,20; },{},{}
-5341,Claris_Doll_Hat,Glaris Doll Hat,5,0,,500,,1,,1,0xFFFFFFFF,7,2,256,,60,0,355,{ bonus2 bSubRace,RC_DemiHuman,5; bonus bInt,2; bonus bMagicHPGainValue,50; },{},{}
-5342,Sorin_Doll_Hat,Sorin Doll Hat,5,0,,500,,1,,1,0xFFFFFFFF,7,2,256,,60,0,356,{ bonus2 bSubRace,RC_DemiHuman,5; bonus bDex,2; autobonus "{ bonus bBaseAtk,50; }",20,10000,0,"{ specialeffect2 EF_POTION_BERSERK; }"; },{},{}
-5343,Tayelin_Doll_Hat,Telling Doll Hat,5,0,,500,,1,,1,0xFFFFFFFF,7,2,256,,60,0,357,{ bonus2 bSubRace,RC_DemiHuman,5; bonus bAgi,2; bonus2 bAddItemHealRate,504,10; bonus2 bAddItemHealRate,547,10; },{},{}
-5344,Binit_Doll_Hat,Bennit Doll Hat,5,0,,500,,1,,1,0xFFFFFFFF,7,2,256,,60,0,358,{ bonus2 bSubRace,RC_DemiHuman,5; bonus bVit,2; autobonus "{ bonus bAspdRate,5; }",20,30000,0,"{ specialeffect2 EF_HASTEUP; }"; },{},{}
-5345,Debril_Doll_Hat,W Doll Hat,5,0,,500,,1,,1,0xFFFFFFFF,7,2,256,,60,0,359,{ bonus2 bSubRace,RC_DemiHuman,5; bonus bLuk,2; bonus2 bAddRace,RC_Undead,5; bonus2 bMagicAddRace,RC_Undead,5; bonus2 bSubRace,RC_Undead,5; },{},{}
-5346,Gf_Recruiter_Hat,Gf Recruiter Hat,5,0,,0,,4,,0,0xFFFFFFFF,7,2,256,,10,1,360,{},{},{}
-5347,Ph.D_Hat_,Ph.D Hat,5,20,,200,,5,,1,0xFFFFFFFE,7,2,256,,0,1,98,{},{},{}
-5348,Big_Sis'_Ribbon_,Big Ribbon,5,15000,,200,,3,,1,0xFFFFFFFE,7,2,256,,0,1,28,{ bonus bMdef,3; },{},{}
-5349,Boy's_Cap_,Boy's Cap,5,20,,100,,3,,1,0xFFFFFFFE,7,2,256,,0,1,102,{},{},{}
-5350,Pirate_Bandana_,Pirate Bandana,5,20,,100,,4,,1,0xFFFFFFFE,7,2,256,,0,1,74,{ bonus bStr,1; },{},{}
-5351,Sunflower_,Sunflower,5,20,,100,,2,,1,0xFFFFFFFF,7,2,256,,0,0,37,{ bonus2 bSubRace,RC_Insect,10; },{},{}
-5352,Poporing_Cap,Poporing Cap,5,20,,700,,4,,0,0xFFFFFFFE,7,2,256,,38,1,361,{},{},{}
+//5335,Jumping_Poring,Jumping Poring,5,0,,300,,2,,0,0xFFFFFFFF,7,2,256,,10,0,349,{ bonus bLuk,1; bonus bUnbreakableHelm,0; },{},{}
+5336,Guildsman_Recruiter,Guildsman Recruiter Hat,5,,,0,,2,,0,0xFFFFFFFF,7,2,256,,10,1,350,{},{},{}
+5337,Party_Recruiter_Hat,Party Recruiter Hat,5,0,,0,,2,,0,0xFFFFFFFF,7,2,256,,10,1,351,{},{},{}
+5338,Bf_Recruiter_Hat,Bf Recruiter Hat,5,0,,0,,2,,0,0xFFFFFFFF,7,2,256,,10,1,352,{},{},{}
+5339,Friend_Recruiter_Hat,Friend Recruiter Hat,5,0,,0,,2,,0,0xFFFFFFFF,7,2,256,,10,1,353,{},{},{}
+5340,Deprotai_Doll_Hat,Defolty Doll Hat,5,0,,500,,0,,1,0xFFFFFFFF,7,2,256,,60,0,354,{ bonus2 bSubRace,RC_DemiHuman,5; bonus bStr,2; bonus3 bAutoSpellWhenHit,"AL_ANGELUS",10,20; },{},{}
+5341,Claris_Doll_Hat,Glaris Doll Hat,5,0,,500,,0,,1,0xFFFFFFFF,7,2,256,,60,0,355,{ bonus2 bSubRace,RC_DemiHuman,5; bonus bInt,2; bonus bMagicHPGainValue,50; },{},{}
+5342,Sorin_Doll_Hat,Sorin Doll Hat,5,0,,500,,0,,1,0xFFFFFFFF,7,2,256,,60,0,356,{ bonus2 bSubRace,RC_DemiHuman,5; bonus bDex,2; autobonus "{ bonus bBaseAtk,50; }",20,10000,0,"{ specialeffect2 EF_POTION_BERSERK; }"; },{},{}
+5343,Tayelin_Doll_Hat,Telling Doll Hat,5,0,,500,,0,,1,0xFFFFFFFF,7,2,256,,60,0,357,{ bonus2 bSubRace,RC_DemiHuman,5; bonus bAgi,2; bonus2 bAddItemHealRate,504,10; bonus2 bAddItemHealRate,547,10; },{},{}
+5344,Binit_Doll_Hat,Bennit Doll Hat,5,0,,500,,0,,1,0xFFFFFFFF,7,2,256,,60,0,358,{ bonus2 bSubRace,RC_DemiHuman,5; bonus bVit,2; autobonus "{ bonus bAspdRate,5; }",20,30000,0,"{ specialeffect2 EF_HASTEUP; }"; },{},{}
+5345,Debril_Doll_Hat,W Doll Hat,5,0,,500,,0,,1,0xFFFFFFFF,7,2,256,,60,0,359,{ bonus2 bSubRace,RC_DemiHuman,5; bonus bLuk,2; bonus2 bAddRace,RC_Undead,5; bonus2 bMagicAddRace,RC_Undead,5; bonus2 bSubRace,RC_Undead,5; },{},{}
+5346,Gf_Recruiter_Hat,Gf Recruiter Hat,5,0,,0,,2,,0,0xFFFFFFFF,7,2,256,,10,1,360,{},{},{}
+5347,Ph.D_Hat_,Ph.D Hat,5,20,,200,,3,,1,0xFFFFFFFE,7,2,256,,0,1,98,{},{},{}
+5348,Big_Sis'_Ribbon_,Big Ribbon,5,15000,,200,,2,,1,0xFFFFFFFE,7,2,256,,0,1,28,{ bonus bMdef,3; },{},{}
+5349,Boy's_Cap_,Boy's Cap,5,20,,100,,2,,1,0xFFFFFFFE,7,2,256,,0,1,102,{},{},{}
+5350,Pirate_Bandana_,Pirate Bandana,5,20,,100,,3,,1,0xFFFFFFFE,7,2,256,,0,1,74,{ bonus bStr,1; },{},{}
+5351,Sunflower_,Sunflower,5,20,,100,,1,,1,0xFFFFFFFF,7,2,256,,0,0,37,{ bonus2 bSubRace,RC_Insect,10; },{},{}
+5352,Poporing_Cap,Poporing Cap,5,20,,700,,2,,0,0xFFFFFFFE,7,2,256,,38,1,361,{},{},{}
5353,Helm_Of_Sun_,Hat of the Sun God,5,20,,2400,,4,,1,0x00CFDF80,7,2,768,,0,1,138,{ bonus bStr,3; bonus bInt,2; },{},{}
-5354,Muslim_Hat_M,Muslim Hat M,5,0,,100,,4,,0,0xFFFFFFFF,7,1,256,,0,0,362,{ bonus bCastrate,-5; },{},{}
-5355,Muslim_Hat_F,Selendang,5,0,,100,,4,,0,0xFFFFFFFF,7,0,256,,0,0,363,{ bonus bCastrate,-5; },{},{}
-5356,Pumpkin_Hat_H,Festival Pumpkin Hat,5,20,,200,,3,,0,0xFFFFFFFF,7,2,256,,0,1,206,{ bonus2 bSubRace,RC_Demon,5; bonus2 bAddRace,RC_Demon,5; },{},{}
+5354,Muslim_Hat_M,Muslim Hat M,5,0,,100,,2,,0,0xFFFFFFFF,7,1,256,,0,0,362,{ bonus bCastrate,-5; },{},{}
+5355,Muslim_Hat_F,Selendang,5,0,,100,,2,,0,0xFFFFFFFF,7,0,256,,0,0,363,{ bonus bCastrate,-5; },{},{}
+5356,Pumpkin_Hat_H,Festival Pumpkin Hat,5,20,,200,,2,,0,0xFFFFFFFF,7,2,256,,0,1,206,{ bonus2 bSubRace,RC_Demon,5; bonus2 bAddRace,RC_Demon,5; },{},{}
5357,Wings_Of_Victory,Wings Of Victory,5,20,,200,,10,,0,0xFFFFFFFF,7,2,768,,0,0,365,{ bonus bMdef,10; bonus bUnbreakableHelm,0; },{},{}
-//5358,Pecopeco_Wing_Ears,Peco Ears,5,20,,100,,2,,0,0xFFFFFFFF,7,2,512,,70,0,366,{ bonus bAgi,1; bonus bMdef,2; },{},{}
-5359,J_Captain_Hat,Ship Captain Hat,5,20,,300,,7,,1,0xFFFFFFFF,7,2,256,,60,1,367,{ bonus bDex,1; bonus bLongAtkRate,7; bonus bMaxHP,100; },{},{}
-5360,Whikebain_Ears,Hyuke's Black Cat Ears,5,20,,200,,4,,0,0xFFFFFFFF,7,2,256,,45,1,368,{ bonus bFlee,10; bonus bCritical,3; bonus2 bCriticalAddRace,RC_Boss,10; bonus2 bCriticalAddRace,RC_NonBoss,10; bonus bDefRate,-50; bonus bDef2Rate,-50; },{},{}
+//5358,Pecopeco_Wing_Ears,Peco Ears,5,20,,100,,1,,0,0xFFFFFFFF,7,2,512,,70,0,366,{ bonus bAgi,1; bonus bMdef,2; },{},{}
+5359,J_Captain_Hat,Ship Captain Hat,5,20,,300,,3,,1,0xFFFFFFFF,7,2,256,,60,1,367,{ bonus bDex,1; bonus bLongAtkRate,7; bonus bMaxHP,100; },{},{}
+5360,Whikebain_Ears,Hyuke's Black Cat Ears,5,20,,200,,2,,0,0xFFFFFFFF,7,2,256,,45,1,368,{ bonus bFlee,10; bonus bCritical,3; bonus2 bCriticalAddRace,RC_Boss,10; bonus2 bCriticalAddRace,RC_NonBoss,10; bonus bDefRate,-50; bonus bDef2Rate,-50; },{},{}
5361,Gang_Scarf,Gangster Scarf,5,20,,100,,0,,0,0xFFFFFFFF,7,2,1,,60,0,369,{ bonus bBaseAtk,5; if(BaseJob == Job_Rogue) skill "RG_GANGSTER",1; },{},{}
5362,Ninja_Scroll,Ninja Scroll,5,20,,200,,0,,0,0xFFFFFFFF,7,2,1,,60,0,370,{ bonus bMatkRate,1; },{},{}
-5363,Helm_Of_Abyss,Helm Of Abyss,5,20,,1000,,9,,1,0x000654E2,7,2,256,,70,1,371,{ bonus2 bSubRace,RC_DemiHuman,-10; bonus2 bSubRace,RC_Boss,10; },{},{}
-5364,Dark_Snake_Lord_Hat,Evil Snake Lord Hat,5,20,,500,,4,,1,0xFFFFFFFF,7,2,256,,60,1,372,{ bonus bStr,1; bonus bInt,1; bonus bAgi,2; },{},{}
-5365,Fried_Egg,Magnolia Hat,5,20,,100,,2,,1,0xFFFFFFFF,7,2,256,,1,0,373,{ bonus2 bResEff,Eff_Stun,500; skill "HT_FLASHER",1; },{},{}
-//5366,Hat_0f_King,Love Dad Bandana,5,20,,200,,5,,0,0xFFFFFFFF,7,2,256,,0,1,374,{ bonus bAllStats,5; },{},{}
+5363,Helm_Of_Abyss,Helm Of Abyss,5,20,,1000,,2,,1,0x000654E2,7,2,256,,70,1,371,{ bonus2 bSubRace,RC_DemiHuman,-10; bonus2 bSubRace,RC_Boss,10; },{},{}
+5364,Dark_Snake_Lord_Hat,Evil Snake Lord Hat,5,20,,500,,2,,1,0xFFFFFFFF,7,2,256,,60,1,372,{ bonus bStr,1; bonus bInt,1; bonus bAgi,2; },{},{}
+5365,Fried_Egg,Magnolia Hat,5,20,,100,,3,,1,0xFFFFFFFF,7,2,256,,1,0,373,{ bonus2 bResEff,Eff_Stun,500; skill "HT_FLASHER",1; },{},{}
+//5366,Hat_0f_King,Love Dad Bandana,5,20,,200,,3,,0,0xFFFFFFFF,7,2,256,,0,1,374,{ bonus bAllStats,5; },{},{}
//5367,Hyegun_Hat,Hyegun Hat,5,20,,100,,5,,1,0xFFFFFFFF,7,2,769,,10,0,375,{ bonus bMdef,3; bonus2 bSubRace,RC_Demon,10; },{},{}
-5368,White_Wing,White Wing,5,20,,100,,4,,0,0xFFFFFFFF,7,2,256,,0,1,38,{ bonus2 bAddMonsterDropItem,12280,300; },{},{}
-5369,Dark_Wing,Dark Wing,5,20,,100,,4,,0,0xFFFFFFFF,7,2,256,,0,1,39,{ bonus2 bAddMonsterDropItem,12279,300; },{},{}
+5368,White_Wing,White Wing,5,20,,100,,2,,0,0xFFFFFFFF,7,2,256,,0,1,38,{ bonus2 bAddMonsterDropItem,12280,300; },{},{}
+5369,Dark_Wing,Dark Wing,5,20,,100,,1,,0,0xFFFFFFFF,7,2,256,,0,1,39,{ bonus2 bAddMonsterDropItem,12279,300; },{},{}
//5370,Orchid_Hairband,Orchid Hairband,5,20,,200,,1,,0,0xFFFFFFFF,7,2,256,,0,1,376,{ bonus bInt,1; },{},{}
5371,Hat_Of_Judge,Judge Hat,5,20,,300,,2,,0,0xFFFFFFFF,7,2,768,,0,1,377,{ bonus bLuk,1; bonus bMaxSP,30; },{},{}
-5372,Drooping_White_Kitty,Koneko Hat,5,20,,500,,3,,0,0xFFFFFFFF,7,2,256,,0,1,378,{ bonus bInt,1; bonus bDelayRate,-3; bonus bMatkRate,3; bonus bMaxSPrate,3; bonus bMdef,3; },{},{}
+5372,Drooping_White_Kitty,Koneko Hat,5,20,,500,,1,,0,0xFFFFFFFF,7,2,256,,0,1,378,{ bonus bInt,1; bonus bDelayRate,-3; bonus bMatkRate,3; bonus bMaxSPrate,3; bonus bMdef,3; },{},{}
5373,Darkness_Helm,Dark Randgris Helm,5,20,,300,,2,,1,0xFFFFFFFF,7,2,768,,0,1,379,{ bonus bDex,3; bonus bMdef,1; },{},{}
-5374,L_Magestic_Goat,Gigantic Majestic Goat,5,20,,800,,10,,0,0xFFFFFFFF,7,2,256,,0,1,380,{ bonus2 bAddRace,RC_DemiHuman,12; bonus bBaseAtk,(JobLevel*2)/7; },{},{}
+5374,L_Magestic_Goat,Gigantic Majestic Goat,5,20,,800,,5,,0,0xFFFFFFFF,7,2,256,,0,1,380,{ bonus2 bAddRace,RC_DemiHuman,12; bonus bBaseAtk,(JobLevel*2)/7; },{},{}
5375,L_Orc_Hero_Helm,Orc Hero Headdress,5,20,,900,,5,,1,0xFFFFFFFF,7,2,768,,0,1,381,{ bonus bStr,2; bonus3 bAutoSpellWhenHit,"BS_WEAPONPERFECT",3,10; },{},{}
-5376,Satanic_Chain_P,Flying Evil Wing,5,20,,100,,6,,1,0xFFFFFFFF,7,2,256,,0,1,382,{ bonus bMaxSP,120; bonus3 bAddEffWhenHit,Eff_Curse,100,ATF_SELF; },{},{}
+5376,Satanic_Chain_P,Flying Evil Wing,5,20,,100,,3,,1,0xFFFFFFFF,7,2,256,,0,1,382,{ bonus bMaxSP,120; bonus3 bAddEffWhenHit,Eff_Curse,100,ATF_SELF; },{},{}
5377,Antique_Pipe,Gentleman's Pipe,5,20,,100,,0,,0,0xFFFFFFFF,7,2,1,,0,0,383,{ bonus2 bSubRace,RC_DemiHuman,2; },{},{}
5378,Rabbit_Ear_Hat,Bunny Top Hat,5,20,,300,,0,,0,0xFFFFFFFF,7,2,256,,0,1,384,{ bonus bAgi,3; bonus3 bAutoSpellWhenHit,"AL_INCAGI",5,10; },{},{}
-5379,Balloon_Hat,Tam,5,0,,800,,5,,1,0xFFFFFFFF,7,2,256,,50,1,385,{ bonus bMdef,2; bonus bMatkRate,2+(getrefine()/2); },{},{}
-5380,Fish_Head_Hat,Fish Head Hat,5,20,,400,,2,,0,0xFFFFFFFF,7,2,256,,0,1,386,{ bonus3 bAutoSpell,"SA_FROSTWEAPON",1,5; },{},{}
-5381,Santa_Poring_Hat,Santa Poring Hat,5,20,,100,,4,,1,0xFFFFFFFF,7,2,256,,0,0,387,{ bonus bMdef,2; bonus2 bAddEle,Ele_Dark,3; bonus2 bSubEle,Ele_Dark,3; },{},{}
-5382,Bell_Ribbon,Bell Ribbon,5,20,,200,,5,,1,0xFFFFFFFF,7,2,256,,0,1,388,{ bonus bVit,1; skill "AL_ANGELUS",1; },{},{ sc_end SC_ANGELUS; }
-5383,Hunting_Cap,Hunter's Cap,5,20,,250,,6,,1,0xFFFFFFFE,7,2,256,,50,1,389,{ bonus bLuk,1; bonus2 bAddRace,RC_Brute,10; bonus2 bAddRace,RC_DemiHuman,5; },{},{}
-5384,Santa_Hat_1,Twin Pompom By JB,5,20,,200,,4,,1,0xFFFFFFFF,7,2,256,,20,1,390,{ bonus bLuk,3; skill "WZ_ESTIMATION",1; bonus3 bAutoSpell,"AL_INCAGI",1,500; },{},{}
-//5385,Yoyo_Hat,Yoyo Hat,5,20,,300,,2,,0,0xFFFFFFFF,7,2,256,,20,1,391,{ skill "TF_HIDING",1; },{},{ sc_end SC_HIDING; }
+5379,Balloon_Hat,Tam,5,0,,800,,3,,1,0xFFFFFFFF,7,2,256,,50,1,385,{ bonus bMdef,2; bonus bMatkRate,2+(getrefine()/2); },{},{}
+5380,Fish_Head_Hat,Fish Head Hat,5,20,,400,,1,,0,0xFFFFFFFF,7,2,256,,0,1,386,{ bonus3 bAutoSpell,"SA_FROSTWEAPON",1,5; },{},{}
+5381,Santa_Poring_Hat,Santa Poring Hat,5,20,,100,,2,,1,0xFFFFFFFF,7,2,256,,0,0,387,{ bonus bMdef,2; bonus2 bAddEle,Ele_Dark,3; bonus2 bSubEle,Ele_Dark,3; },{},{}
+5382,Bell_Ribbon,Bell Ribbon,5,20,,200,,3,,1,0xFFFFFFFF,7,2,256,,0,1,388,{ bonus bVit,1; skill "AL_ANGELUS",1; },{},{ sc_end SC_ANGELUS; }
+5383,Hunting_Cap,Hunter's Cap,5,20,,250,,3,,1,0xFFFFFFFE,7,2,256,,50,1,389,{ bonus bLuk,1; bonus2 bAddRace,RC_Brute,10; bonus2 bAddRace,RC_DemiHuman,5; },{},{}
+5384,Santa_Hat_1,Twin Pompom By JB,5,20,,200,,1,,1,0xFFFFFFFF,7,2,256,,20,1,390,{ bonus bLuk,3; skill "WZ_ESTIMATION",1; bonus3 bAutoSpell,"AL_INCAGI",1,500; },{},{}
+//5385,Yoyo_Hat,Yoyo Hat,5,20,,300,,1,,0,0xFFFFFFFF,7,2,256,,20,1,391,{ skill "TF_HIDING",1; },{},{ sc_end SC_HIDING; }
5386,Ayam_,Ayam,5,0,,70,,7,,0,0xFFFFFFFF,7,2,256,,1,0,228,{ bonus bMdef,7; bonus bFlee,7; bonus2 bAddMonsterDropItem,12198,200; },{},{}
5387,Neko_Mimi_Kafra,Neko Mimi Kafra,5,20,,200,,1,,1,0xFFFFFFFF,7,2,256,,30,1,392,{ bonus bMdef,5; },{},{}
-//5388,Snake_Head,Snake Head Hat,5,20,,200,,2,,1,0xFFFFFFFF,7,2,256,,30,1,393,{ bonus bDoubleRate,25; },{},{}
+//5388,Snake_Head,Snake Head Hat,5,20,,200,,1,,1,0xFFFFFFFF,7,2,256,,30,1,393,{ bonus bDoubleRate,25; },{},{}
5389,Angel_Spirit,Angel Spirit,5,20,,200,,0,,0,0xFFFFFFFF,7,2,512,,30,0,394,{ bonus bStr,2; bonus bHit,15; },{},{}
-//5390,Santa_Hat_2,Frozen Twin Pompom,5,20,,100,,4,,0,0xFFFFFFFF,7,2,256,,0,1,395,{ bonus2 bResEff,Eff_Freeze,3000; },{},{}
-5391,Toast_C,Toast,5,20,,0,,1,,0,0xFFFFFFFF,7,2,1,,0,0,188,{ bonus bMaxHP,100; bonus2 bAddMonsterDropItem,617,10; },{},{}
-//5392,Louyang_Cap,Louyang NewYear Hat,5,20,,300,,6,,1,0xFFFFFFFF,7,2,256,,0,1,396,{ bonus bLuk,2; bonus2 bAddMonsterDropItem,668,3; },{},{}
-//5393,Valentine_Hat,Love Valentine's Hat,5,20,,200,,4,,0,0xFFFFFFFF,7,2,256,,0,0,397,{ bonus bMaxSPrate,7; bonus bMaxHPrate,7; },{},{}
+//5390,Santa_Hat_2,Frozen Twin Pompom,5,20,,100,,2,,0,0xFFFFFFFF,7,2,256,,0,1,395,{ bonus2 bResEff,Eff_Freeze,3000; },{},{}
+5391,Toast_C,Toast,5,20,,0,,0,,0,0xFFFFFFFF,7,2,1,,0,0,188,{ bonus bMaxHP,100; bonus2 bAddMonsterDropItem,617,10; },{},{}
+//5392,Louyang_Cap,Louyang NewYear Hat,5,20,,300,,3,,1,0xFFFFFFFF,7,2,256,,0,1,396,{ bonus bLuk,2; bonus2 bAddMonsterDropItem,668,3; },{},{}
+//5393,Valentine_Hat,Love Valentine's Hat,5,20,,200,,2,,0,0xFFFFFFFF,7,2,256,,0,0,397,{ bonus bMaxSPrate,7; bonus bMaxHPrate,7; },{},{}
5394,Bubblegum_Lower,Bubblegum,5,0,,0,,0,,0,0xFFFFFFFF,7,2,1,,0,0,0,{},{},{}
-5395,Tiraya_Bonnet,Striped Hat,5,20,,500,,6,,1,0xFFFFFFFF,7,2,256,,50,1,398,{ bonus bMaxHP,100+(getrefine()*20); bonus bLuk,3; },{},{}
-5396,Jasper_Crest,Jasper Crest,5,20,,700,,6,,1,0xFFFFFFFF,7,2,256,,0,1,399,{ bonus bDex,3; bonus bVit,1; },{},{}
+5395,Tiraya_Bonnet,Striped Hat,5,20,,500,,2,,1,0xFFFFFFFF,7,2,256,,50,1,398,{ bonus bMaxHP,100+(getrefine()*20); bonus bLuk,3; },{},{}
+5396,Jasper_Crest,Jasper Crest,5,20,,700,,2,,1,0xFFFFFFFF,7,2,256,,0,1,399,{ bonus bDex,3; bonus bVit,1; },{},{}
//5397,Scuba_Mask,Scuba Gear,5,20,,100,,0,,0,0xFFFFFFFF,7,2,512,,0,0,400,{ bonus2 bSubEle,Ele_Water,10; },{},{}
-5398,Bone_Head,Bone Head,5,20,,1200,,10,,1,0x000444A2,2,2,256,,85,1,401,{ bonus bStr,2; bonus bMdef,5; bonus2 bResEff,Eff_Stun,500; bonus2 bResEff,Eff_Bleeding,500; },{},{}
-5399,Mandragora_Cap,Mandragora Cap,5,20,,300,,5,,1,0x00CFFF80,2,2,256,,85,0,402,{ bonus bVit,3; bonus3 bAutoSpellWhenHit,"DC_SCREAM",5,30; },{},{}
+5398,Bone_Head,Bone Head,5,20,,1200,,5,,1,0x000444A2,2,2,256,,85,1,401,{ bonus bStr,2; bonus bMdef,5; bonus2 bResEff,Eff_Stun,500; bonus2 bResEff,Eff_Bleeding,500; },{},{}
+5399,Mandragora_Cap,Mandragora Cap,5,20,,300,,1,,1,0x00CFFF80,2,2,256,,85,0,402,{ bonus bVit,3; bonus3 bAutoSpellWhenHit,"DC_SCREAM",5,30; },{},{}
//5400,Fox_Hat,Fox Hat,5,20,,200,,1,,0,0xFFFFFFFF,7,0,769,,0,1,403,{ bonus bLuk,1; },{},{}
-//5401,Black_Glasses,Black Frame Glasses,5,20,,200,,2,,0,0xFFFFFFFF,7,2,512,,70,0,404,{ bonus bInt,1; bonus bMdef,2; },{},{}
-//5402,Mischievous_Fairy,Mischievous Fairy,5,10,,200,,2,,0,0xFFFFFFFF,7,2,512,,70,0,405,{ bonus bFlee2,3; },{},{}
+//5401,Black_Glasses,Black Frame Glasses,5,20,,200,,1,,0,0xFFFFFFFF,7,2,512,,70,0,404,{ bonus bInt,1; bonus bMdef,2; },{},{}
+//5402,Mischievous_Fairy,Mischievous Fairy,5,10,,200,,1,,0,0xFFFFFFFF,7,2,512,,70,0,405,{ bonus bFlee2,3; },{},{}
5403,Fish_In_Mouth,Fish In Mouth,5,10,,200,,0,,0,0xFFFFFFFF,7,2,1,,30,0,406,{ bonus2 bAddMonsterDropItem,579,500; bonus2 bAddItemHealRate,579,25; },{},{}
-//5404,Blue_Ribbon,Blue Ribbon,5,10,,100,,2,,1,0xFFFFFFFF,7,2,256,,45,1,407,{ bonus4 bAutoSpellWhenHit,"AC_CONCENTRATION",2,7,0; },{},{}
-//5405,Filir_Hat,Filir Hat,5,10,,200,,2,,0,0xFFFFFFFF,7,2,256,,80,0,408,{ bonus bShortWeaponDamageReturn,1; },{},{}
-//5406,Academy_Freshman_Hat,Academy Freshman Hat,5,0,,500,,5,,0,0xFFFFFFFF,7,2,256,,0,1,409,{ bonus bInt,1; bonus bVit,1; bonus bDex,2; bonus bMaxHP,80; bonus bMaxSP,10; },{},{}
+//5404,Blue_Ribbon,Blue Ribbon,5,10,,100,,1,,1,0xFFFFFFFF,7,2,256,,45,1,407,{ bonus4 bAutoSpellWhenHit,"AC_CONCENTRATION",2,7,0; },{},{}
+//5405,Filir_Hat,Filir Hat,5,10,,200,,0,,0,0xFFFFFFFF,7,2,256,,80,0,408,{ bonus bShortWeaponDamageReturn,1; },{},{}
+//5406,Academy_Freshman_Hat,Academy Freshman Hat,5,0,,500,,0,,0,0xFFFFFFFF,7,2,256,,0,1,409,{ bonus bInt,1; bonus bVit,1; bonus bDex,1; bonus bMaxHP,80; bonus bMaxSP,10; },{},{}
//5407,Academy_Graduating_Cap,Academy Completion Hat,5,0,,500,,5,,0,0xFFFFFFFF,7,2,256,,0,1,410,{ bonus bInt,2; bonus bDex,2; bonus bMaxSP,30; },{},{}
-5408,Old_Bandanna,Old Bandana,5,0,,0,,10,,0,0xFFFFFFFF,7,2,256,,0,0,6,{ bonus bInt,2; bonus bMaxSP,50; bonus bCastrate,10; },{},{}
-5409,New_Cowboy_Hat,Purple Cowboy Hat,5,20,,500,,8,,1,0xFFFFFFFF,7,2,256,,0,1,411,{ bonus bInt,2; bonus bVit,2; bonus bMaxSP,50; },{},{}
+5408,Old_Bandanna,Old Bandana,5,0,,0,,5,,0,0xFFFFFFFF,7,2,256,,0,0,6,{ bonus bInt,2; bonus bMaxSP,50; bonus bCastrate,10; },{},{}
+5409,New_Cowboy_Hat,Purple Cowboy Hat,5,20,,500,,4,,1,0xFFFFFFFF,7,2,256,,0,1,411,{ bonus bInt,2; bonus bVit,2; bonus bMaxSP,50; },{},{}
//5410,Bread_Bag2,Brown Paperbag Hat,5,20,,200,,6,,0,0xFFFFFFFF,7,2,769,,0,1,412,{ bonus bMaxHP,100; bonus2 bResEff,Eff_Stun,400; bonus2 bSubRace,RC_DemiHuman,4; },{},{}
-//5411,White_Snake_Hat,White Snake Hat,5,20,,500,,4,,0,0xFFFFFFFF,7,2,256,,0,1,413,{ bonus bDex,2; },{},{}
+//5411,White_Snake_Hat,White Snake Hat,5,20,,500,,2,,0,0xFFFFFFFF,7,2,256,,0,1,413,{ bonus bDex,2; },{},{}
//5412,Sweet_Candy,Sweet Candy,5,20,,100,,1,,0,0xFFFFFFFF,7,2,1,,0,0,414,{},{},{}
-//5413,Popcorn_Hat,Pop Corn Hat,5,20,,300,,4,,0,0xFFFFFFFF,7,2,256,,0,0,415,{ bonus2 bSubEle,Ele_Wind,10; },{},{}
-//5414,Campfire_Hat,Camp Fire Hat,5,20,,300,,4,,0,0xFFFFFFFF,7,2,256,,0,0,416,{ bonus4 bAutoSpellWhenHit,"MG_FIREBALL",5,100,1; bonus2 bSubEle,Ele_Fire,10; },{},{}
-5415,Poring_Cake_Cap,Poring Cake Hat,5,20,,1000,,10,,0,0xFFFFFFFF,7,2,256,,40,1,417,{ bonus bMdef,5; bonus bCritical,5; bonus bFlee,5; bonus bFlee2,5; bonus bAspdRate,5; bonus bCastrate,-5; bonus bDelayRate,-5; },{},{}
-//5416,Beer_Cap,Beer Hat,5,20,,600,,4,,0,0xFFFFFFFE,7,2,256,,18,1,418,{ bonus bFlee2,5; skill "SM_RECOVERY",3; skill "MG_SRECOVERY",3; },{},{}
-//5417,Crown_Parrot,Crown Parrots,5,20,,200,,2,,1,0xFFFFFFFF,7,2,256,,0,0,419,{ bonus2 bResEff,Eff_Silence,10000; bonus3 bAutoSpell,"DC_SCREAM",1,50; bonus bInt,1; },{},{}
-//5418,Soldier_Hat,Legionnaire Hat,5,20,,400,,8,,1,0xFFFFFFFF,7,2,256,,0,1,420,{ bonus bStr,1; bonus2 bAddRace,RC_NonBoss,3; bonus2 bAddRace,RC_Boss,3; },{},{}
+//5413,Popcorn_Hat,Pop Corn Hat,5,20,,300,,2,,0,0xFFFFFFFF,7,2,256,,0,0,415,{ bonus2 bSubEle,Ele_Wind,10; },{},{}
+//5414,Campfire_Hat,Camp Fire Hat,5,20,,300,,2,,0,0xFFFFFFFF,7,2,256,,0,0,416,{ bonus4 bAutoSpellWhenHit,"MG_FIREBALL",5,100,1; bonus2 bSubEle,Ele_Fire,10; },{},{}
+5415,Poring_Cake_Cap,Poring Cake Hat,5,20,,1000,,5,,0,0xFFFFFFFF,7,2,256,,40,1,417,{ bonus bMdef,5; bonus bCritical,5; bonus bFlee,5; bonus bFlee2,5; bonus bAspdRate,5; bonus bCastrate,-5; bonus bDelayRate,-5; },{},{}
+//5416,Beer_Cap,Beer Hat,5,20,,600,,2,,0,0xFFFFFFFE,7,2,256,,18,1,418,{ bonus bFlee2,5; skill "SM_RECOVERY",3; skill "MG_SRECOVERY",3; },{},{}
+//5417,Crown_Parrot,Crown Parrots,5,20,,200,,1,,1,0xFFFFFFFF,7,2,256,,0,0,419,{ bonus2 bResEff,Eff_Silence,10000; bonus3 bAutoSpell,"DC_SCREAM",1,50; bonus bInt,1; },{},{}
+//5418,Soldier_Hat,Legionnaire Hat,5,20,,400,,4,,1,0xFFFFFFFF,7,2,256,,0,1,420,{ bonus bStr,1; bonus2 bAddRace,RC_NonBoss,3; bonus2 bAddRace,RC_Boss,3; },{},{}
5419,Evolved_Leaf,Leaves Of Grass,5,20,,100,,0,,0,0xFFFFFFFF,7,2,1,,0,0,57,{ bonus bVit,1; bonus2 bSubRace,RC_Plant,5; },{},{}
5420,Mask_Of_Ifrit,Mask Of Ifrit,5,,,0,,8,,0,0xFFFFFFFE,7,2,769,,70,0,421,{ bonus bStr,1; bonus bInt,1; bonus bMdef,5; bonus2 bSubEle,Ele_Fire,10; bonus2 bSubEle,Ele_Water,-10; skill "MG_SIGHT",1; bonus3 bAutoSpellWhenHit,"WZ_METEOR",3,50; bonus3 bAutoSpell,"MG_FIREBOLT",3,50; },{},{ sc_end SC_SIGHT; }
5421,Ifrit's_Ear,Ears Of Ifrit,5,20,,0,,0,,0,0xFFFFFFFE,7,2,512,,70,0,422,{ bonus bStr,1; bonus bMdef,3; bonus2 bSkillAtk,"MG_FIREBOLT",2; bonus2 bSkillAtk,"WZ_FIREPILLAR",2; bonus2 bSkillAtk,"WZ_METEOR",2; bonus2 bSkillAtk,"SM_BASH",2; bonus2 bSkillAtk,"SM_MAGNUM",2; bonus2 bSkillAtk,"KN_PIERCE",2; bonus2 bSubEle,Ele_Fire,5; bonus2 bSubEle,Ele_Water,-5; },{},{}
//5422,Linguistic_Book_Cap,Linguistic Book Hat,5,20,,70,,0,,0,0xFFFFFFFF,7,2,256,,0,1,423,{ bonus bInt,1; bonus bMdef,2; },{},{}
-//5423,Lovecap_China,I Love China,5,20,,250,,10,,0,0xFFFFFFFF,7,2,256,,0,0,424,{ bonus bDex,3; bonus2 bSubRace,RC_DemiHuman,10; },{},{}
-//5424,Fanta_Orange_Can,Fanta Orange Can Hat,5,20,,100,,3,,1,0xFFFFFFFF,7,2,256,,0,1,425,{},{},{}
-//5425,Fanta_Grape_Can,Fanta Grape Can Hat,5,20,,100,,3,,1,0xFFFFFFFF,7,2,256,,0,1,426,{},{},{}
-//5426,Karada_Meguri_Tea_Hat,Karada Meguricha Hat,5,20,,100,,3,,1,0xFFFFFFFF,7,2,256,,0,1,427,{ bonus bLuk,1; },{},{}
-//5427,Royal_Milk_Tea_Hat,Black Tea Kochakaden Hat,5,20,,100,,3,,1,0xFFFFFFFF,7,2,256,,0,1,428,{ bonus bAgi,1; },{},{}
+//5423,Lovecap_China,I Love China,5,20,,250,,5,,0,0xFFFFFFFF,7,2,256,,0,0,424,{ bonus bDex,3; bonus2 bSubRace,RC_DemiHuman,10; },{},{}
+//5424,Fanta_Orange_Can,Fanta Orange Can Hat,5,20,,100,,2,,1,0xFFFFFFFF,7,2,256,,0,1,425,{},{},{}
+//5425,Fanta_Grape_Can,Fanta Grape Can Hat,5,20,,100,,2,,1,0xFFFFFFFF,7,2,256,,0,1,426,{},{},{}
+//5426,Karada_Meguri_Tea_Hat,Karada Meguricha Hat,5,20,,100,,2,,1,0xFFFFFFFF,7,2,256,,0,1,427,{ bonus bLuk,1; },{},{}
+//5427,Royal_Milk_Tea_Hat,Black Tea Kochakaden Hat,5,20,,100,,2,,1,0xFFFFFFFF,7,2,256,,0,1,428,{ bonus bAgi,1; },{},{}
5428,Bread_Bag1,RWC Anniversary Bread Envelope,5,,,100,,0,,0,0xFFFFFFFF,7,2,769,,0,1,429,{ bonus2 bSubRace,RC_DemiHuman,12; },{},{}
-//5429,Bogy_Cap,Bogy Cap,5,20,,100,,4,,1,0xFFFFFFFF,7,2,256,,0,1,430,{ bonus bHPrecovRate,5; bonus bSPrecovRate,5; },{},{}
-//5430,Sacred_Torch_Coronet,Torch Cap,5,20,,250,,6,,0,0xFFFFFFFF,7,2,256,,0,0,431,{ bonus2 bSubEle,Ele_Fire,20; skill "MG_FIREBOLT",5; },{},{}
+//5429,Bogy_Cap,Bogy Cap,5,20,,100,,2,,1,0xFFFFFFFF,7,2,256,,0,1,430,{ bonus bHPrecovRate,5; bonus bSPrecovRate,5; },{},{}
+//5430,Sacred_Torch_Coronet,Torch Cap,5,20,,250,,3,,0,0xFFFFFFFF,7,2,256,,0,0,431,{ bonus2 bSubEle,Ele_Fire,20; skill "MG_FIREBOLT",5; },{},{}
5431,Chicken_Hat,Chicken Hat,5,20,,1000,,0,,1,0xFFFFFFFF,7,2,256,,30,1,432,{ bonus3 bAutoSpell,"MC_LOUD",1,30; bonus bAspdRate,5; },{},{}
//5432,Brazil_Baseball_Cap,bRO 4th Anniversary Hat,5,20,,100,,0,,0,0xFFFFFFFF,7,2,256,,0,0,433,{ bonus bAllStats,4; },{},{}
//5433,Golden_Wreath,Golden Laurel,5,20,,100,,0,,0,0xFFFFFFFF,7,2,256,,0,0,434,{},{},{}
-//5434,Cola_Can,Cola Can,5,20,,100,,3,,1,0xFFFFFFFF,7,2,256,,0,1,435,{},{},{}
-5435,Coke_Hat,Red Minstrel Hat,5,20,,100,,2,,1,0xFFFFFFFF,7,2,256,,40,1,436,{ bonus bInt,1; bonus bMaxSP,80; bonus bMdef,3; if(getrefine()>5) { bonus bMdef,getrefine()-5; bonus bMaxSP,(getrefine()-5)*10; } },{},{}
+//5434,Cola_Can,Cola Can,5,20,,100,,2,,1,0xFFFFFFFF,7,2,256,,0,1,435,{},{},{}
+5435,Coke_Hat,Red Minstrel Hat,5,20,,100,,1,,1,0xFFFFFFFF,7,2,256,,40,1,436,{ bonus bInt,1; bonus bMaxSP,80; bonus bMdef,3; if(getrefine()>5) { bonus bMdef,getrefine()-5; bonus bMaxSP,(getrefine()-5)*10; } },{},{}
5436,Bride's_Corolla,Bride's Corolla,5,20,,200,,1,,0,0xFFFFFFFF,7,2,256,,0,1,437,{ bonus bLuk,3; bonus bMdef,2; },{},{}
-5437,Flower_Of_Fairy,Fairy Flower,5,20,,200,,2,,1,0xFFFFFFFF,7,2,256,,0,1,438,{ bonus bInt,1; bonus bMdef,1; bonus2 bSubRace,RC_Insect,5; },{},{}
+5437,Flower_Of_Fairy,Fairy Flower,5,20,,200,,1,,1,0xFFFFFFFF,7,2,256,,0,1,438,{ bonus bInt,1; bonus bMdef,1; bonus2 bSubRace,RC_Insect,5; },{},{}
5438,Fillet_Green,Cute Green Ribbon,5,500,,100,,1,,0,0xFFFFFFFE,7,2,256,,0,0,439,{ bonus bMaxSP,20; },{},{}
5439,Fillet_Red,Cute Red Ribbon,5,500,,100,,1,,0,0xFFFFFFFE,7,2,256,,0,0,440,{ bonus bMaxSP,20; },{},{}
5440,Fillet_Blue,Cute Blue Ribbon,5,500,,100,,1,,0,0xFFFFFFFE,7,2,256,,0,0,441,{ bonus bMaxSP,20; },{},{}
5441,Fillet_White,Cute White Ribbon,5,500,,100,,1,,0,0xFFFFFFFE,7,2,256,,0,0,442,{ bonus bMaxSP,20; },{},{}
-5442,Necktie,Necktie,5,20,,100,,6,,1,0xFFFFFFFF,7,2,256,,70,1,443,{ bonus bVit,1; bonus bHit,-5; bonus bUseSPrate,5; if(isequipped(5040)) { bonus bAspdRate,3; bonus bCastrate,3; } },{},{}
-5443,Status_Of_Baby_Angel,Statue Of Baby Angel,5,20,,600,,6,,1,0xFFFFFFFF,7,2,256,,70,1,444,{ bonus bMdef,2; bonus4 bAutoSpellWhenHit,"PR_STRECOVERY",1,20,0; },{},{}
+5442,Necktie,Necktie,5,20,,100,,3,,1,0xFFFFFFFF,7,2,256,,70,1,443,{ bonus bVit,1; bonus bHit,-5; bonus bUseSPrate,5; if(isequipped(5040)) { bonus bAspdRate,3; bonus bCastrate,3; } },{},{}
+5443,Status_Of_Baby_Angel,Statue Of Baby Angel,5,20,,600,,3,,1,0xFFFFFFFF,7,2,256,,70,1,444,{ bonus bMdef,2; bonus4 bAutoSpellWhenHit,"PR_STRECOVERY",1,20,0; },{},{}
5444,Hair_Brush,Hair Brush,5,20,,100,,0,,0,0xFFFFFFFF,7,2,256,,0,1,445,{ bonus bCritical,6; },{},{}
5445,Candy_Cane_In_The_Mouth,Candy Cane In Mouth,5,20,,100,,0,,0,0xFFFFFFFF,7,2,1,,0,0,446,{ bonus bMaxSP,5; },{},{}
5446,Cat_Foot_Hairpin,Catfoot Hairpin,5,20,,200,,0,,1,0xFFFFFFFF,7,2,256,,0,1,447,{ bonus bFlee,5; bonus bFlee2,3; },{},{}
-5447,Frog_Cap,Frog Hat,5,20,,500,,6,,0,0xFFFFFFFF,7,2,256,,70,1,448,{ bonus bMdef,1; bonus2 bAddRace,RC_Insect,12; bonus2 bMagicAddRace,RC_Insect,12; },{},{}
+5447,Frog_Cap,Frog Hat,5,20,,500,,3,,0,0xFFFFFFFF,7,2,256,,70,1,448,{ bonus bMdef,1; bonus2 bAddRace,RC_Insect,12; bonus2 bMagicAddRace,RC_Insect,12; },{},{}
5448,Solo_Play_Box1,Soloplay Box1,5,,,300,,0,,1,0xFFFFFFFF,7,2,769,,0,1,449,{},{},{}
5449,Solo_Play_Box2,Soloplay Box2,5,,,300,,0,,1,0xFFFFFFFF,7,2,769,,0,1,450,{},{},{}
//5450,Sun_Cap,Solar Hat,5,20,,1000,,0,,0,0xFFFFFFFE,7,2,256,,20,1,451,{},{},{}
-5451,Dragonhelm_Gold,RWC 2008 Dragon Helm Gold,5,20,,1500,,14,,1,0xFFFFFFFF,7,2,256,,1,0,452,{ bonus bAspdRate,10; bonus bAllStats,3; bonus2 bAddRace,RC_DemiHuman,5; },{},{}
-5452,Dragonhelm_Silver,RWC 2008 Dragon Helm Silver,5,20,,1500,,10,,1,0xFFFFFFFF,7,2,256,,1,0,453,{ bonus bAspdRate,7; bonus bAllStats,2; bonus2 bAddRace,RC_DemiHuman,3; },{},{}
-5453,Dragonhelm_Copper,RWC 2008 Dragon Helm Copper,5,20,,1500,,5,,1,0xFFFFFFFF,7,2,256,,1,0,454,{ bonus bAspdRate,5; bonus bAllStats,2; bonus2 bAddRace,RC_DemiHuman,1; },{},{}
-5454,Dog_Cap_,Puppy Hat,5,20,,500,,4,,1,0xFFFFFFFF,7,2,256,,0,1,234,{ bonus bStr,1; bonus bInt,1; autobonus "{ bonus bCritical,100; }",10,3000,BF_WEAPON,"{ specialeffect2 EF_ENHANCE; }"; autobonus "{ bonus bIgnoreMdefRate,100; }",10,3000,BF_MAGIC,"{ specialeffect2 EF_MAGICALATTHIT; }"; },{},{}
+5451,Dragonhelm_Gold,RWC 2008 Dragon Helm Gold,5,20,,2500,,7,,0,0xFFFFFFFF,7,2,256,,1,0,452,{ bonus bAspdRate,10; bonus bAllStats,3; bonus2 bAddRace,RC_DemiHuman,5; },{},{}
+5452,Dragonhelm_Silver,RWC 2008 Dragon Helm Silver,5,20,,2500,,5,,0,0xFFFFFFFF,7,2,256,,1,0,453,{ bonus bAspdRate,7; bonus bAllStats,2; bonus2 bAddRace,RC_DemiHuman,3; },{},{}
+5453,Dragonhelm_Copper,RWC 2008 Dragon Helm Copper,5,20,,2500,,0,,0,0xFFFFFFFF,7,2,256,,1,0,454,{ bonus bAspdRate,5; bonus bAllStats,2; bonus2 bAddRace,RC_DemiHuman,1; },{},{}
+5454,Dog_Cap_,Puppy Hat,5,20,,500,,3,,1,0xFFFFFFFF,7,2,256,,0,1,234,{ bonus bStr,1; bonus bInt,1; autobonus "{ bonus bCritical,100; }",10,3000,BF_WEAPON,"{ specialeffect2 EF_ENHANCE; }"; autobonus "{ bonus bIgnoreMdefRate,100; }",10,3000,BF_MAGIC,"{ specialeffect2 EF_MAGICALATTHIT; }"; },{},{}
5455,Geographer_Band_,Decorative Geographer,5,20,,500,,1,,1,0xFFFFFFFF,7,2,256,,0,1,238,{ bonus bInt,1; bonus3 bAutoSpell,"AL_HEAL",5,50; bonus3 bAutoSpellWhenHit,"AL_HEAL",5,30; },{},{}
-5456,Vacation_Hat_,Summer Hat,5,20,,200,,0,,0,0xFFFFFFFF,7,2,256,,0,1,315,{ bonus bVit,5; bonus bHPrecovRate,20; bonus bSPrecovRate,15; },{},{}
+5456,Vacation_Hat_,Summer Hat,5,20,,200,,0,,1,0xFFFFFFFF,7,2,256,,0,1,315,{ bonus bVit,5; bonus bHPrecovRate,20; bonus bSPrecovRate,15; },{},{}
5457,Spring_Rabbit_Hat,Moon Rabbit Hat,5,20,,300,,2,,1,0xFFFFFFFF,7,2,256,,1,1,455,{ bonus bAgi,3; bonus bBaseAtk,5; bonus bMatkRate,5; if (getrefine()>4) { bonus bBaseAtk,getrefine()-4; bonus bMatkRate,getrefine()-4; } },{},{}
-//5458,Pinwheel_Cap,Pinwheel Hat,5,20,,200,,3,,0,0xFFFFFFFF,7,2,256,,0,1,456,{ bonus bHPrecovRate,5; bonus bHPrecovRate,5; },{},{}
-5459,Drooping_Bunny_Chusuk,Drooping Bunny,5,0,,100,,3,,0,0xFFFFFFFF,7,2,256,,0,1,249,{ bonus bDex,1; bonus bFlee,2; },{},{}
-//5460,Adv_Dragon_Skull,Evolved Dragon Skull Hat,5,20,,1000,,14,,0,0xFFFFFFFF,7,2,256,,60,1,457,{ bonus bAllStats,2; bonus bMaxHPrate,3; },{},{}
+//5458,Pinwheel_Cap,Pinwheel Hat,5,20,,200,,2,,0,0xFFFFFFFF,7,2,256,,0,1,456,{ bonus bHPrecovRate,5; bonus bHPrecovRate,5; },{},{}
+5459,Drooping_Bunny_Chusuk,Drooping Bunny,5,0,,100,,1,,0,0xFFFFFFFF,7,2,256,,0,1,249,{ bonus bDex,1; bonus bFlee,2; },{},{}
+//5460,Adv_Dragon_Skull,Evolved Dragon Skull Hat,5,20,,1000,,7,,0,0xFFFFFFFF,7,2,256,,60,1,457,{ bonus bAllStats,2; bonus bMaxHPrate,3; },{},{}
//5461,Adv_Whisper_Mask,Evolved Whisper Mask,5,,,300,,1,,0,0xFFFFFFFF,7,2,769,,50,1,458,{ bonus bDex,3; bonus2 bSubEle,Ele_Ghost,20; },{},{}
-5462,Spiked_Scarf,Spiked Scarf,5,20,,100,,0,,0,0xFFFFFFFF,7,2,1,,90,0,459,{ bonus bVit,1; bonus2 bAddRace,RC_DemiHuman,1; bonus2 bSubRace,RC_DemiHuman,1; },{},{}
-5463,Rainbow_Scarf,Rainbow Scarf,5,20,,100,,0,,0,0xFFFFFFFF,7,2,1,,90,0,460,{ bonus bInt,1; bonus bMdef,2; bonus bMatkRate,1; },{},{}
+5462,Spiked_Scarf,Spiked Scarf,5,20,,100,,1,,0,0xFFFFFFFF,7,2,1,,90,0,459,{ bonus bVit,1; bonus2 bAddRace,RC_DemiHuman,1; bonus2 bSubRace,RC_DemiHuman,1; },{},{}
+5463,Rainbow_Scarf,Rainbow Scarf,5,20,,100,,1,,0,0xFFFFFFFF,7,2,1,,90,0,460,{ bonus bInt,1; bonus bMdef,2; bonus bMatkRate,1; },{},{}
//5464,Zaha_Doll_Hat,Zaha Doll Hat,5,20,,0,,1,,0,0xFFFFFFFF,7,2,256,,0,0,461,{ bonus bInt,2; skill "PR_MAGNIFICAT",3; },{},{}
-//5465,Celestial_Hat,Hat Of Fortune,5,20,,500,,6,,1,0xFFFFFFFF,7,2,256,,40,1,462,{ bonus bLuk,2; bonus bMdef,5; if(getrefine()>4) bonus bLuk,getrefine()-4; },{},{}
-//5466,Wind_Milestone,Wind Milestone,5,20,,100,,4,,1,0xFFFFFFFF,7,2,256,,30,1,463,{ bonus bAgi,2; skill "AL_TELEPORT",1; },{},{}
-//5467,Helm_Of_Dragoon,Helm Of Dragon,5,20,,2000,,10,,0,0xFFFFFFFF,7,2,256,,50,1,464,{ bonus2 bAddRace,RC_Dragon,20; bonus3 bAutoSpell,"NPC_DRAGONFEAR",1,30; },{},{}
-//5468,Parade_Cap,Parade Hat,5,20,,800,,5,,1,0xFFFFFFFF,7,2,256,,0,1,465,{ bonus bDelayRate,-5; bonus bMdef,2; if(getrefine()>5) bonus bCastrate,-(getrefine()-5); },{},{}
-//5469,Noble_Hat,Musketeer Hat,5,20,,300,,4,,0,0xFFFFFFFF,7,2,256,,30,1,466,{ bonus bStr,2; bonus3 bAutoSpellWhenHit,"BS_ADRENALINE",1,7; },{},{}
-//5470,Eyes_Of_Darkness,Eye Of Darkness,5,20,,100,,2,,0,0xFFFFFFFF,7,2,512,,50,0,467,{ bonus bDex,1; bonus2 bResEff,Eff_Blind,10000; },{},{}
-//5471,Hairband_Of_Reginleif,Hairband Of Reginleif,5,20,,800,,2,,0,0xFFFFFFFF,7,2,512,,50,0,468,{ bonus2 bSubEle,Ele_Water,3; bonus2 bSubEle,Ele_Fire,3; bonus2 bSubEle,Ele_Undead,3; bonus2 bSubEle,Ele_Ghost,3; },{},{}
+//5465,Celestial_Hat,Hat Of Fortune,5,20,,500,,3,,1,0xFFFFFFFF,7,2,256,,40,1,462,{ bonus bLuk,2; bonus bMdef,5; if(getrefine()>4) bonus bLuk,getrefine()-4; },{},{}
+//5466,Wind_Milestone,Wind Milestone,5,20,,100,,2,,1,0xFFFFFFFF,7,2,256,,30,1,463,{ bonus bAgi,2; skill "AL_TELEPORT",1; },{},{}
+//5467,Helm_Of_Dragoon,Helm Of Dragon,5,20,,2000,,5,,0,0xFFFFFFFF,7,2,256,,50,1,464,{ bonus2 bAddRace,RC_Dragon,20; bonus3 bAutoSpell,"NPC_DRAGONFEAR",1,30; },{},{}
+//5468,Parade_Cap,Parade Hat,5,20,,800,,3,,1,0xFFFFFFFF,7,2,256,,0,1,465,{ bonus bDelayRate,-5; bonus bMdef,2; if(getrefine()>5) bonus bCastrate,-(getrefine()-5); },{},{}
+//5469,Noble_Hat,Musketeer Hat,5,20,,300,,2,,0,0xFFFFFFFF,7,2,256,,30,1,466,{ bonus bStr,2; bonus3 bAutoSpellWhenHit,"BS_ADRENALINE",1,7; },{},{}
+//5470,Eyes_Of_Darkness,Eye Of Darkness,5,20,,100,,1,,0,0xFFFFFFFF,7,2,512,,50,0,467,{ bonus bDex,1; bonus2 bResEff,Eff_Blind,10000; },{},{}
+//5471,Hairband_Of_Reginleif,Hairband Of Reginleif,5,20,,800,,1,,0,0xFFFFFFFF,7,2,512,,50,0,468,{ bonus2 bSubEle,Ele_Water,3; bonus2 bSubEle,Ele_Fire,3; bonus2 bSubEle,Ele_Undead,3; bonus2 bSubEle,Ele_Ghost,3; },{},{}
//5472,Red_White_Hat,Red Hat,5,20,,100,,0,,0,0xFFFFFFFF,7,2,256,,0,1,469,{ bonus3 bAddMonsterDropItem,550,RC_DemiHuman,3; },{},{}
-//5473,Forceps_Hairpin,Nipper Crab Hairpin,5,20,,500,,8,,0,0xFFFFFFFF,7,2,256,,30,1,470,{ bonus3 bAutoSpellWhenHit,"MG_COLDBOLT",1,100; bonus3 bAddMonsterDropItem,991,RC_Fish,3; },{},{}
-//5474,Notice_Board,AFK Hat,5,20,,700,,4,,0,0xFFFFFFFF,7,2,256,,10,0,471,{},{},{}
+//5473,Forceps_Hairpin,Nipper Crab Hairpin,5,20,,500,,4,,0,0xFFFFFFFF,7,2,256,,30,1,470,{ bonus3 bAutoSpellWhenHit,"MG_COLDBOLT",1,100; bonus3 bAddMonsterDropItem,991,RC_Fish,3; },{},{}
+//5474,Notice_Board,AFK Hat,5,20,,700,,2,,0,0xFFFFFFFF,7,2,256,,10,0,471,{},{},{}
//5475,Cube_Mask,Mask Cube,5,20,,100,,1,,0,0xFFFFFFFF,7,2,513,,0,0,472,{},{},{}
-5476,Hairband_Of_Grandpeco,Grand Peco Hairband,5,20,,800,,5,,0,0xFFFFFFFF,7,2,768,,30,1,473,{ bonus bStr,2; bonus bMaxHPrate,-10; bonus2 bAddRace2,3,15; },{},{}
-//5477,Bro_Flag,Brazilian Flag Hat,5,20,,100,,2,,1,0xFFFFFFFF,7,2,256,,30,1,474,{ skill "SM_BASH",1; },{},{}
-//5478,Classic_Hat,Classic Hat,5,20,,500,,4,,0,0xFFFFFFFF,7,2,256,,0,1,475,{ bonus bStr,2; bonus bMaxHP,300; },{},{}
-5479,Shaman's_Hair_Ornament,Shaman's Hair Decoration,5,20,,300,,2,,0,0xFFFFFFFF,7,2,256,,30,1,476,{ bonus bMdef,3; bonus bMaxHP,50; bonus2 bSubEle,Ele_Neutral,5; if(isequipped(2777,2778)) { bonus bMaxHP,300; bonus bMatkRate,5; bonus2 bSubEle,Ele_Neutral,5; } },{},{}
-5480,Bizofnil_Wing_Deco,Bijofnil Wings,5,20,,1000,,6,,0,0xFFFFFFFF,7,2,256,,30,1,477,{ bonus bAllStats,2; bonus3 bAutoSpell,"PR_IMPOSITIO",3,3; },{},{}
-5481,Hermose_Cap,Hermode Cap,5,20,,1000,,2,,1,0xFFFFFFFF,7,2,256,,1,1,478,{ bonus bAspdRate,10; bonus bBaseAtk,-20; bonus bMatkRate,-10; },{},{}
+5476,Hairband_Of_Grandpeco,Grand Peco Hairband,5,20,,800,,2,,0,0xFFFFFFFF,7,2,768,,30,1,473,{ bonus bStr,2; bonus bMaxHPrate,-10; bonus2 bAddRace2,3,15; },{},{}
+//5477,Bro_Flag,Brazilian Flag Hat,5,20,,100,,1,,1,0xFFFFFFFF,7,2,256,,30,1,474,{ skill "SM_BASH",1; },{},{}
+//5478,Classic_Hat,Classic Hat,5,20,,500,,3,,0,0xFFFFFFFF,7,2,256,,0,1,475,{ bonus bStr,2; bonus bMaxHP,300; },{},{}
+5479,Shaman's_Hair_Ornament,Shaman's Hair Decoration,5,20,,300,,1,,0,0xFFFFFFFF,7,2,256,,30,1,476,{ bonus bMdef,3; bonus bMaxHP,50; bonus2 bSubEle,Ele_Neutral,5; if(isequipped(2777,2778)) { bonus bMaxHP,300; bonus bMatkRate,5; bonus2 bSubEle,Ele_Neutral,5; } },{},{}
+5480,Bizofnil_Wing_Deco,Bijofnil Wings,5,20,,1000,,3,,0,0xFFFFFFFF,7,2,256,,30,1,477,{ bonus bAllStats,2; bonus3 bAutoSpell,"PR_IMPOSITIO",3,3; },{},{}
+5481,Hermose_Cap,Hermode Cap,5,20,,1000,,1,,1,0xFFFFFFFF,7,2,256,,1,1,478,{ bonus bAspdRate,10; bonus bBaseAtk,-20; bonus bMatkRate,-10; },{},{}
5482,Dark_Knight_Mask,Dark Knight Mask,5,,,3000,,5,,0,0xFFFFFFFF,7,2,769,,80,1,479,{ bonus bStr,3; if(isequipped(2779,2780)) { bonus bMatkRate,10; bonus bInt,5; bonus2 bSubRace,RC_Angel,10; } },{},{}
5483,Odin_Mask,Odin Mask,5,20,,100,,1,,0,0xFFFFFFFF,7,2,513,,50,0,480,{ bonus bHit,-10; bonus2 bAddRace,RC_Demihuman,6; },{},{}
-//5484,Taiwan_Flag_Hat,Holidays Hat,5,20,,500,,8,,0,0xFFFFFFFF,7,2,256,,0,0,482,{ bonus bAllStats,5; bonus2 bResEff,Eff_Stun,500; },{},{}
+//5484,Taiwan_Flag_Hat,Holidays Hat,5,20,,500,,4,,0,0xFFFFFFFF,7,2,256,,0,0,482,{ bonus bAllStats,5; bonus2 bResEff,Eff_Stun,500; },{},{}
//5485,Tiger_Face,Tiger Face,5,,,1000,,3,,0,0xFFFFFFFF,7,2,769,,60,1,483,{ bonus2 bSubRace,RC_Brute,5; bonus2 bAddRace,RC_Brute,5; bonus2 bMagicAddRace,RC_Brute,5; },{},{}
//5486,J_Anniversary_Hat,Anniversary Hat,5,20,,300,,3,,0,0xFFFFFFFF,7,2,256,,0,1,395,{ bonus bAllStats,2; },{},{}
5487,J_Poringcake_Hat,Poring Cake Hat,5,20,,500,,1,,0,0xFFFFFFFF,7,2,256,,0,1,417,{ bonus bLuk,2; },{},{}
5488,J_Twin_Santahat,Twin Santa Hat,5,20,,100,,1,,0,0xFFFFFFFF,7,2,256,,0,1,390,{ bonus bLuk,1; bonus bMdef,1; },{},{}
//5489,Love_Daddy,Love Daddy Hat,5,20,,100,,0,,0,0xFFFFFFFF,7,2,256,,0,1,484,{ bonus bDex,2; },{},{}
-//5490,Anubis_Helm,Anubis Helm,5,20,,0,,8,,0,0xFFFFFFFF,7,2,768,,65,0,485,{ bonus bMdef,5; bonus2 bSubRace,RC_Boss,10; bonus bHealpower2,10; bonus bAddItemHealRate,10; },{},{}
-//5491,Hat_Of_Outlaw,Bandit Hat,5,20,,800,,6,,1,0xFFFFFFFF,7,2,256,,0,1,486,{ bonus bStr,2; bonus2 bSubEle,Ele_Fire,10; },{},{}
-5492,Boy's_Cap_I,Student Cap,5,0,,0,,10,,0,0xFFFFFFFE,7,2,256,,0,0,102,{ bonus bMdef,3; bonus2 bAddRace,RC_DemiHuman,5; },{},{}
-5493,Ulle_Cap_I,Ulle's Cap,5,0,,0,,12,,0,0xFFFFFFFE,7,2,256,,0,0,254,{ bonus bDex,2; bonus bAgi,1; if(isequipped(2353) && readparam(bDex)>=70) bonus bUseSPrate,-10; },{},{}
-5494,Spinx_Helm_I,Sphinx Hat,5,0,,0,,10,,0,0x00004082,7,2,257,,0,0,137,{ bonus bStr,5; },{},{}
-5495,Power_Of_Thor,Power Of Thor,5,20,,100,,5,,1,0xFFFFFFFF,7,2,256,,75,1,493,{ bonus bInt,1; bonus bDex,1; bonus bMdef,3; bonus bFlee,5; },{},{}
-//5496,Dice_Hat,Dice Hat,5,20,,300,,6,,0,0xFFFFFFFF,7,2,256,,50,0,494,{ bonus bLuk,4; },{},{}
-//5497,King_Tiger_Doll_Hat,King Tiger Doll Hat,5,20,,400,,6,,1,0xFFFFFFFE,7,2,256,,30,1,495,{ bonus bStr,2; },{},{}
+//5490,Anubis_Helm,Anubis Helm,5,20,,0,,3,,0,0xFFFFFFFF,7,2,768,,65,0,485,{ bonus bMdef,5; bonus2 bSubRace,RC_Boss,10; bonus bHealpower2,10; bonus bAddItemHealRate,10; },{},{}
+//5491,Hat_Of_Outlaw,Bandit Hat,5,20,,800,,3,,1,0xFFFFFFFF,7,2,256,,0,1,486,{ bonus bStr,2; bonus2 bSubEle,Ele_Fire,10; },{},{}
+5492,Boy's_Cap_I,Student Cap,5,0,,0,,5,,0,0xFFFFFFFE,7,2,256,,0,0,102,{ bonus bMdef,3; bonus2 bAddRace,RC_DemiHuman,5; },{},{}
+5493,Ulle_Cap_I,Ulle's Cap,5,0,,0,,3,,0,0xFFFFFFFE,7,2,256,,0,0,254,{ bonus bDex,2; bonus bAgi,1; if(isequipped(2353) && readparam(bDex)>=70) bonus bUseSPrate,-10; },{},{}
+5494,Spinx_Helm_I,Sphinx Hat,5,0,,0,,5,,0,0x00004082,7,2,257,,0,0,137,{ bonus bStr,5; },{},{}
+5495,Power_Of_Thor,Power Of Thor,5,20,,100,,6,,1,0xFFFFFFFF,7,2,256,,75,1,493,{ bonus bInt,1; bonus bDex,1; bonus bMdef,3; bonus bFlee,5; },{},{}
+//5496,Dice_Hat,Dice Hat,5,20,,300,,3,,0,0xFFFFFFFF,7,2,256,,50,0,494,{ bonus bLuk,4; },{},{}
+//5497,King_Tiger_Doll_Hat,King Tiger Doll Hat,5,20,,400,,3,,1,0xFFFFFFFE,7,2,256,,30,1,495,{ bonus bStr,2; },{},{}
//5498,Wondering_Wolf_Helm,Wandering Wolf Helm,5,20,,600,,5,,0,0xFFFFFFFF,7,2,768,,20,0,490,{ bonus bFlee,10; bonus bVit,5; },{},{}
-//5499,Pizza_Hat,Pizza Hat,5,20,,600,,0,,0,0xFFFFFFFF,7,2,256,,0,0,487,{ skill "SM_PROVOKE",1; },{},{}
-//5500,Icecream_Hat,Icecream Hat,5,20,,300,,6,,0,0xFFFFFFFF,7,2,256,,30,1,488,{ skill "MG_FROSTDIVER",3; bonus bMdef,3; },{},{}
-//5501,Pirate's_Pride,Pirate's Pride,5,0,,100,,6,,1,0xFFFFFFFF,7,2,256,,10,0,496,{ bonus2 bAddRace2,6,5; bonus2 bSubRace2,6,5; },{},{}
-5502,Necromencer's_Hood,Necromancer's Hood,5,0,,500,,6,,0,0xFFFFFFFF,7,2,768,,1,1,491,{ bonus5 bAutoSpellWhenHit,"NPC_DARKSTRIKE",5,5,BF_WEAPON|BF_MAGIC,1; },{},{}
-5503,Rabbit_Magic_Hat,Magic Rabit Hat,5,0,,800,,4,,0,0xFFFFFFFF,7,2,256,,0,1,497,{ bonus bDex,2; bonus bAgi,2; bonus bMdef,1; bonus bMaxSP,50; bonus3 bAutoSpellWhenHit,"MG_FIREBOLT",1,10; bonus3 bAutoSpellWhenHit,"MG_COLDBOLT",1,10; bonus3 bAutoSpellWhenHit,"MG_LIGHTNINGBOLT",1,10; },{},{}
+//5499,Pizza_Hat,Pizza Hat,5,20,,6000,,0,,0,0xFFFFFFFF,7,2,256,,0,0,487,{ skill "SM_PROVOKE",1; },{},{}
+//5500,Icecream_Hat,Icecream Hat,5,20,,300,,1,,0,0xFFFFFFFF,7,2,256,,30,1,488,{ skill "MG_FROSTDIVER",3; bonus bMdef,3; },{},{}
+//5501,Pirate's_Pride,Pirate's Pride,5,0,,100,,3,,1,0xFFFFFFFF,7,2,256,,10,0,496,{ bonus2 bAddRace2,6,5; bonus2 bSubRace2,6,5; },{},{}
+5502,Necromencer's_Hood,Necromancer's Hood,5,0,,500,,2,,0,0xFFFFFFFF,7,2,768,,1,1,491,{ bonus5 bAutoSpellWhenHit,"NPC_DARKSTRIKE",5,5,BF_WEAPON|BF_MAGIC,1; },{},{}
+5503,Rabbit_Magic_Hat,Magic Rabit Hat,5,0,,800,,2,,0,0xFFFFFFFF,7,2,256,,0,1,497,{ bonus bDex,2; bonus bAgi,2; bonus bMdef,1; bonus bMaxSP,50; bonus3 bAutoSpellWhenHit,"MG_FIREBOLT",1,10; bonus3 bAutoSpellWhenHit,"MG_COLDBOLT",1,10; bonus3 bAutoSpellWhenHit,"MG_LIGHTNINGBOLT",1,10; },{},{}
//5504,China_Wedding_Veil,Wedding Weil,5,20,,500,,1,,0,0xFFFFFFFF,7,2,768,,70,1,489,{ bonus bMdef,10; },{},{}
5505,Asara_Fairy_Hat,Asara Fairy Hat,5,0,,500,,2,,0,0xFFFFFFFF,7,2,768,,50,1,492,{ skill "DC_DONTFORGETME",1; bonus bDex,2; bonus bLuk,2; },{},{}
-//5506,Blue_Pajamas_Hat,Blue Night Cap,5,0,,100,,4,,1,0xFFFFFFFF,7,2,256,,0,1,501,{ bonus bBaseAtk,5; bonus bMatkRate,5; },{},{}
-//5507,Pink_Pajamas_Hat,Pink Night Cap,5,0,,100,,4,,1,0xFFFFFFFF,7,2,256,,0,1,502,{ bonus bBaseAtk,5; bonus bMatkRate,5; },{},{}
-5508,Shark_Hat,Shark Hat,5,20,,500,,6,,0,0xFFFFFFFF,7,2,256,,0,1,503,{ bonus bStr,1; bonus bAgi,2; bonus bMdef,1; bonus2 bAddEle,Ele_Water,5; bonus2 bSubEle,Ele_Water,10; },{},{}
-5509,Sting_Hat,Sting hat,5,20,,1000,,10,,0,0xFFFFFFFF,7,2,256,,0,1,504,{ bonus bStr,2; bonus bVit,1; bonus bMdef,3; bonus2 bAddEle,Ele_fire,5; bonus2 bSubEle,Ele_earth,5; bonus3 bAutoSpell,"WZ_EARTHSPIKE",1,10; },{},{}
-//5510,Shower_Cap,Shower Cap,5,20,,0,,4,,0,0xFFFFFFFF,7,2,256,,0,1,507,{ bonus bMdef,3; bonus bFlee,3; bonus2 bAddEle,Ele_Water,10; bonus2 bSubRace,rc_fish,10; },{},{}
+//5506,Blue_Pajamas_Hat,Blue Night Cap,5,0,,100,,2,,1,0xFFFFFFFF,7,2,256,,0,1,501,{ bonus bBaseAtk,5; bonus bMatkRate,5; },{},{}
+//5507,Pink_Pajamas_Hat,Pink Night Cap,5,0,,100,,2,,1,0xFFFFFFFF,7,2,256,,0,1,502,{ bonus bBaseAtk,5; bonus bMatkRate,5; },{},{}
+5508,Shark_Hat,Shark Hat,5,20,,500,,3,,0,0xFFFFFFFF,7,2,256,,0,1,503,{ bonus bStr,1; bonus bAgi,2; bonus bMdef,1; bonus2 bAddEle,Ele_Water,5; bonus2 bSubEle,Ele_Water,10; },{},{}
+5509,Sting_Hat,Sting hat,5,20,,1000,,5,,0,0xFFFFFFFF,7,2,256,,0,1,504,{ bonus bStr,2; bonus bVit,1; bonus bMdef,3; bonus2 bAddEle,Ele_fire,5; bonus2 bSubEle,Ele_earth,5; bonus3 bAutoSpell,"WZ_EARTHSPIKE",1,10; },{},{}
+//5510,Shower_Cap,Shower Cap,5,20,,0,,2,,0,0xFFFFFFFF,7,2,256,,0,1,507,{ bonus bMdef,3; bonus bFlee,3; bonus2 bAddEle,Ele_Water,10; bonus2 bSubRace,rc_fish,10; },{},{}
5511,Samambaia,Samambaia,5,20,,200,,5,,1,0xFFFFFFFF,7,2,768,,30,1,508,{ bonus bSPrecovRate,8; },{},{}
-//5512,Aquarius_Diadem,Aquarius Diadem,5,20,,300,,6,,0,0xFFFFFFFF,7,2,256,,70,1,509,{ bonus bStr,2; bonus bFlee,10; bonus2 bSubEle,Ele_Wind,5; if(getrefine()>6) { bonus bDef,1; bonus bBaseAtk,15; } },{},{}
-//5513,Aquarius_Crown,Aquarius Crown,5,20,,300,,6,,0,0xFFFFFFFF,7,2,256,,70,1,510,{ bonus bStr,2; bonus bFlee,10; bonus2 bSubEle,Ele_Wind,5; if(getrefine()>6) { bonus bDef,1; bonus bBaseAtk,15; } },{},{}
-//5514,Pisces_Diadem,Pisces Diadem,5,20,,300,,6,,0,0xFFFFFFFF,7,2,256,,70,1,511,{ bonus bInt,2; bonus bMdef,5; bonus2 bSubEle,Ele_water,5; if(getrefine()>6) { bonus bDef,1; bonus bMatkRate,2; } },{},{}
-//5515,Pisces_Crown,Pisces Crown,5,20,,300,,6,,0,0xFFFFFFFF,7,2,256,,70,1,512,{ bonus bInt,2; bonus bMdef,5; bonus2 bSubEle,Ele_water,5; if(getrefine()>6) { bonus bDef,1; bonus bMatkRate,2; } },{},{}
+//5512,Aquarius_Diadem,Aquarius Diadem,5,20,,300,,3,,0,0xFFFFFFFF,7,2,256,,70,1,509,{ bonus bStr,2; bonus bFlee,10; bonus2 bSubEle,Ele_Wind,5; if(getrefine()>6) { bonus bDef,1; bonus bBaseAtk,15; } },{},{}
+//5513,Aquarius_Crown,Aquarius Crown,5,20,,300,,3,,0,0xFFFFFFFF,7,2,256,,70,1,510,{ bonus bStr,2; bonus bFlee,10; bonus2 bSubEle,Ele_Wind,5; if(getrefine()>6) { bonus bDef,1; bonus bBaseAtk,15; } },{},{}
+//5514,Pisces_Diadem,Pisces Diadem,5,20,,300,,3,,0,0xFFFFFFFF,7,2,256,,70,1,511,{ bonus bInt,2; bonus bMdef,5; bonus2 bSubEle,Ele_water,5; if(getrefine()>6) { bonus bDef,1; bonus bMatkRate,2; } },{},{}
+//5515,Pisces_Crown,Pisces Crown,5,20,,300,,3,,0,0xFFFFFFFF,7,2,256,,70,1,512,{ bonus bInt,2; bonus bMdef,5; bonus2 bSubEle,Ele_water,5; if(getrefine()>6) { bonus bDef,1; bonus bMatkRate,2; } },{},{}
5516,Hawk_Eyes01,hawk Eyes,5,10,,100,,0,,0,0x00000800,2,2,512,,60,0,23,{ bonus bDex,1; },{},{}
5517,Hawk_Eyes02,Hawk Eyes,5,10,,100,,0,,0,0x00080808,7,2,512,,60,0,23,{ bonus bDex,1; },{},{}
-5518,L_Magestic_Goat2,Gigantic Majestic Goat,5,20,,800,,10,,0,0xFFFFFFFF,7,2,256,,50,1,513,{ bonus2 bSubRace,RC_DemiHuman,12; bonus bBaseAtk,(JobLevel*2)/7; },{},{}
-//5519,Peacock_Feather,Peacock Feather,5,20,,800,,4,,1,0xFFFFFFFF,7,2,256,,1,1,514,{ bonus bInt,2; },{},{}
-5520,Rabbit_Earplug,Rabbit Earplugs,5,20,,400,,0,,1,0xFFFFFFFF,7,2,768,,1,1,515,{ bonus2 bAddRace,RC_NonBoss,4; bonus2 bAddRace,RC_Boss,4; bonus bMatkRate,4; },{},{}
+5518,L_Magestic_Goat2,Gigantic Majestic Goat,5,20,,800,,5,,0,0xFFFFFFFF,7,2,256,,50,1,513,{ bonus2 bSubRace,RC_DemiHuman,12; bonus bBaseAtk,(JobLevel*2)/7; },{},{}
+//5519,Peacock_Feather,Peacock Feather,5,20,,800,,2,,1,0xFFFFFFFF,7,2,256,,1,1,514,{ bonus bInt,2; },{},{}
+5520,Rabbit_Earplug,Rabbit Earplugs,5,,,400,,0,,1,0xFFFFFFFF,7,2,768,,1,1,515,{ bonus2 bAddRace,RC_NonBoss,4; bonus2 bAddRace,RC_Boss,4; bonus bMatkRate,4; },{},{}
5521,Angry_Mouth_C,Angry Mouth,5,0,,0,,0,,0,0xFFFFFFFF,7,2,1,,0,0,194,{ bonus bDelayRate,-3; },{},{}
-//5522,Fanta_Zero_Lemon_Hat,Fanta Zero Lemon Hat,5,20,,100,,4,,1,0xFFFFFFFF,7,2,256,,1,1,516,{},{},{}
-//5523,Sakura_Mist_Hat,Sakura Mist Hat,5,20,,100,,4,,1,0xFFFFFFFF,7,2,256,,1,1,517,{ bonus bDex,1; },{},{}
-//5524,Sakura_Milk_Tea_Hat,Sakura Milk Tea Hat,5,20,,100,,4,,1,0xFFFFFFFF,7,2,256,,1,1,518,{ bonus bVit,1; },{},{}
-//5525,First_Leaf_Tea_Hat,Flower Hat,5,20,,100,,4,,1,0xFFFFFFFF,7,2,256,,1,1,519,{ bonus bMaxHP,80; bonus bMaxSP,20; },{},{}
-//5526,Lady_Tanee_Doll,Tanigumi Girl Doll,5,20,,300,,4,,0,0xFFFFFFFF,7,2,256,,60,0,520,{ bonus bAgi,2; bonus bFlee,3; bonus2 bAddEle,Ele_Wind,-5; bonus2 bAddMonsterDropItem,513,200; },{},{}
-5527,Lunatic_Hat,Lunatic Hat,5,20,,300,,2,,0,0xFFFFFFFF,7,2,256,,1,1,521,{ bonus bLuk,3; bonus bMdef,2; bonus bFlee2,5; bonus2 bAddMonsterDropItem,622,50; },{},{}
-//5528,King_Frog_Hat,Frog King Hat,5,20,,500,,4,,1,0xFFFFFFFE,7,2,256,,30,0,522,{ bonus bAgi,1; },{},{}
-5529,Evil's_Bone_Hat,Satanic Bone Helm,5,20,,600,,12,,1,0xFFFFFFFF,7,2,768,,70,1,523,{ bonus bDex,3; bonus2 bSubEle,Ele_Neutral,5; skill "WZ_FROSTNOVA",1; },{},{}
-//5530,Raven_Cap,Raven Cap,5,20,,100,,6,,1,0xFFFFFFFF,7,2,256,,30,1,524,{},{},{}
-//5531,B_Dragon_Hat,Baby Dragon Hat,5,20,,100,,6,,1,0xFFFFFFFF,7,2,256,,0,1,525,{},{},{}
-5532,Pirate_Dagger_J,Pirate Dagger,5,20,,100,,0,,0,0xFFFFFFFF,7,2,1,,30,0,327,{ bonus bShortWeaponDamageReturn,1; },{},{}
-5533,Emperor_Wreath_J,Emperor Wreath,5,20,,800,,6,,1,0xFFFFFFFF,7,2,256,,80,1,261,{ bonus bAllStats,1; },{},{}
-5534,Fox_Hat_J,Fox Hat,5,20,,100,,1,,0,0xFFFFFFFF,7,2,513,,70,0,403,{ bonus bAgi,1; bonus bFlee2,2; },{},{}
-5535,Side_Cap,Side Cap,5,0,,500,,6,,0,0xFFFFFFFF,7,2,256,,0,1,529,{ bonus bVit,1; bonus bDex,1; bonus bMdef,3; bonus2 bSubRace,RC_DemiHuman,5; bonus2 bAddRace,RC_DemiHuman,3; },{},{}
-5536,Spare_Card,Spare Card,5,20,,0,,1,,0,0xFFFFFFFF,7,2,1,,1,0,526,{ bonus2 bAddMonsterDropItem,6187,1000; },{},{}
-//5537,Quati_Hat,Kwati Hat,5,20,,700,,2,,1,0xFFFFFFFF,7,2,256,,45,0,527,{ bonus bAgi,3; },{},{}
+//5522,Fanta_Zero_Lemon_Hat,Fanta Zero Lemon Hat,5,20,,100,,2,,1,0xFFFFFFFF,7,2,256,,1,1,516,{},{},{}
+//5523,Sakura_Mist_Hat,Sakura Mist Hat,5,20,,100,,2,,1,0xFFFFFFFF,7,2,256,,1,1,517,{ bonus bDex,1; },{},{}
+//5524,Sakura_Milk_Tea_Hat,Sakura Milk Tea Hat,5,20,,100,,2,,1,0xFFFFFFFF,7,2,256,,1,1,518,{ bonus bVit,1; },{},{}
+//5525,First_Leaf_Tea_Hat,Flower Hat,5,20,,100,,2,,1,0xFFFFFFFF,7,2,256,,1,1,519,{ bonus bMaxHP,80; bonus bMaxSP,20; },{},{}
+//5526,Lady_Tanee_Doll,Tanigumi Girl Doll,5,20,,300,,2,,0,0xFFFFFFFF,7,2,256,,60,0,520,{ bonus bAgi,2; bonus bFlee,3; bonus2 bAddEle,Ele_Wind,-5; bonus2 bAddMonsterDropItem,513,200; },{},{}
+5527,Lunatic_Hat,Lunatic Hat,5,20,,300,,2,,0,0xFFFFFFFF,7,2,256,,1,1,521,{ bonus bLuk,5; bonus bMdef,2; bonus bFlee2,5; bonus2 bAddMonsterDropItem,622,50; },{},{}
+//5528,King_Frog_Hat,Frog King Hat,5,20,,500,,2,,1,0xFFFFFFFE,7,2,256,,30,0,522,{ bonus bAgi,1; },{},{}
+5529,Evil's_Bone_Hat,Satanic Bone Helm,5,20,,600,,6,,1,0xFFFFFFFF,7,2,768,,70,1,523,{ bonus bDex,3; bonus2 bSubEle,Ele_Neutral,5; skill "WZ_FROSTNOVA",1; },{},{}
+//5530,Raven_Cap,Raven Cap,5,20,,100,,3,,1,0xFFFFFFFF,7,2,256,,30,1,524,{},{},{}
+//5531,B_Dragon_Hat,Baby Dragon Hat,5,20,,100,,3,,1,0xFFFFFFFF,7,2,256,,0,1,525,{},{},{}
+5532,Pirate_Dagger_J,Pirate Dagger,5,20,,100,,0,,0,0xFFFFFFFF,7,2,1,,0,1,327,{ bonus bShortWeaponDamageReturn,1; },{},{}
+5533,Emperor_Wreath_J,Emperor Wreath,5,20,,800,,3,,1,0xFFFFFFFF,7,2,256,,80,1,261,{ bonus bAllStats,1; },{},{}
+//5534,Fox_Hat_J,Fox Hat,5,20,,100,,1,,0,0xFFFFFFFF,7,2,513,,70,0,403,{ bonus bAgi,1; bonus bFlee2,2; },{},{}
+5535,Side_Cap,Side Cap,5,0,,500,,3,,0,0xFFFFFFFF,7,2,256,,0,1,529,{ bonus bVit,1; bonus bDex,1; bonus bMdef,3; bonus2 bSubRace,RC_DemiHuman,5; bonus2 bAddRace,RC_DemiHuman,3; },{},{}
+5536,Spare_Card,Spare Card,5,20,,10,,1,,0,0xFFFFFFFF,7,2,1,,1,0,526,{ bonus2 bAddMonsterDropItem,6187,1000; },{},{}
+//5537,Quati_Hat,Kwati Hat,5,20,,700,,1,,1,0xFFFFFFFF,7,2,256,,45,0,527,{ bonus bAgi,3; },{},{}
//5538,Tucan_Hat,Tucan Hat,5,20,,600,,2,,1,0xFFFFFFFF,7,2,768,,45,0,528,{ bonus bDex,3; },{},{}
//5539,Jaguar_Hat,Jaguar Hat,5,20,,400,,4,,1,0xFFFFFFFF,7,2,769,,25,1,530,{ bonus bMdef,2; skill "MC_LOUD",1; },{},{}
//5540,Freyja_SCirclet7,Freyja SCirclet7,5,20,,700,,8,,0,0xFFFFFFFF,7,2,256,,20,0,18,{ bonus bStr,1; bonus bInt,1; bonus bDex,1; },{},{}
@@ -2874,55 +2874,55 @@
//5542,Freyja_SCirclet60,Freyja SCirclet60,5,20,,700,,8,,0,0xFFFFFFFF,7,2,256,,20,0,18,{ bonus bStr,1; bonus bInt,1; bonus bDex,1; },{},{}
//5543,Freyja_SCirclet90,Freyja SCirclet90,5,20,,700,,8,,0,0xFFFFFFFF,7,2,256,,20,0,18,{ bonus bStr,1; bonus bInt,1; bonus bDex,1; },{},{}
5544,Time_Keeper_Hat,Time Keeper Hat,5,30000,,0,,6,,0,0xFFFFFFFF,7,2,256,,1,1,240,{ bonus bInt,2; bonus bMaxSP,50; },{},{}
-5545,Aries_Diadem,Aries Diadem,5,20,,400,,6,,0,0xFFFFFFFF,7,2,256,,70,1,531,{ bonus bVit,2; bonus2 bSubEle,Ele_fire,5; if(getrefine()>6) { bonus bDef,1; bonus bVit,1; } },{},{}
-5546,Aries_Crown,Aries Crown,5,20,,400,,6,,0,0xFFFFFFFF,7,2,256,,70,1,532,{ bonus bVit,2; bonus2 bSubEle,Ele_fire,5; if(getrefine()>6) { bonus bDef,1; bonus bVit,1; } },{},{}
+5545,Aries_Diadem,Aries Diadem,5,20,,400,,3,,0,0xFFFFFFFF,7,2,256,,70,1,531,{ bonus bVit,2; bonus2 bSubEle,Ele_fire,5; if(getrefine()>6) { bonus bDef,1; bonus bVit,1; } },{},{}
+5546,Aries_Crown,Aries Crown,5,20,,400,,3,,0,0xFFFFFFFF,7,2,256,,70,1,532,{ bonus bVit,2; bonus2 bSubEle,Ele_fire,5; if(getrefine()>6) { bonus bDef,1; bonus bVit,1; } },{},{}
//5547,RJC_Katusa,RJC Katusa Flower,5,20,,200,,1,,1,0xFFFFFFFF,7,2,256,,0,1,533,{ bonus2 bSkillAtk,"WZ_HEAVENDRIVE",15+getequiprefinerycnt(EQI_HAND_R); bonus2 bSkillAtk,"WZ_HEAVENDRIVE",15+getequiprefinerycnt(EQI_HAND_R); bonus bCastRate,-25; },{},{}
//5548,Scarlet_Rose,Scarlet Rose,5,20,,100,,0,,0,0xFFFFFFFF,7,2,256,,50,1,534,{ bonus bLuk,1; },{},{}
-5549,Taurus_Diadem,Taurus Diadem,5,20,,300,,6,,0,0xFFFFFFFF,7,2,256,,70,1,535,{ bonus bDex,2; bonus bDelayRate,-2; bonus2 bSubEle,Ele_earth,5; if(getrefine()>6) { bonus bDex,1; bonus bMatkRate,1; } },{},{}
-5550,Taurus_Crown,Taurus Crown,5,20,,300,,6,,0,0xFFFFFFFF,7,2,256,,70,1,536,{ bonus bDex,2; bonus bDelayRate,-2; bonus2 bSubEle,Ele_earth,5; if(getrefine()>6) { bonus bDex,1; bonus bMatkRate,1; } },{},{}
-//5551,Holy_Egg_Hat,Holy Egg Hat,5,20,,0,,4,,0,0xFFFFFFFF,7,2,256,,0,1,537,{},{},{}
-5552,Fest_Lord_Circlet,Festival Grand Circlet,5,0,,0,,10,,0,0xFFFFFFFF,7,2,256,,0,0,93,{ bonus bStr,3; bonus bInt,3; bonus bMdef,3; },{},{}
-5553,Fest_Bunny_Band,Festival Bunny Band,5,0,,0,,14,,0,0xFFFFFFFF,7,2,256,,0,0,15,{ bonus bMdef,4; bonus2 bSubRace,RC_DemiHuman,9; },{},{}
-5554,Octopus_Hat,Octopus Hat,5,20,,200,,6,,0,0xFFFFFFFF,7,2,256,,20,1,538,{ bonus3 bAutoSpell,"SM_PROVOKE",5,10; bonus bUnbreakableHelm,0; },{},{}
-5555,Leaf_Cat_Hat,Leaf Cat Hat,5,20,,100,,6,,0,0xFFFFFFFF,7,2,256,,0,1,539,{ bonus bAgi,2; bonus3 bAutoSpellWhenHit,"AL_HEAL",3,10; },{},{}
-5556,Fur_Seal_Hat,Seal Hat,5,20,,500,,5,,0,0xFFFFFFFF,7,2,769,,55,1,540,{ bonus bInt,1; bonus3 bAutoSpell,"WZ_FROSTNOVA",1,30; },{},{}
-//5557,Wild_Rose_Hat,Wild Rose Hat,5,20,,500,,6,,1,0xFFFFFFFE,7,2,256,,20,1,541,{ bonus bAgi,3; },{},{}
-//5558,Saci_Hat,Luxury Hat,5,20,,100,,6,,1,0xFFFFFFFF,7,2,256,,30,1,542,{ bonus3 bAddMonsterDropItem,510,RC_Plant,500; },{},{}
-5559,Piece_Of_White_Cloth_E,Piece Of White Cloth,5,0,,0,,5,,0,0xFFFFFFFF,7,2,256,,0,1,543,{},{},{}
-5560,Bullock_Helm_J,Bullock Helm,5,20,,3000,,6,,0,0xFFFFFFFF,7,2,256,,75,1,322,{ bonus bMaxHP,100; bonus bNoKnockback,0; bonus2 bSubEle,Ele_Neutral,-20; bonus2 bSubEle,Ele_Fire,-20; bonus2 bSubEle,Ele_Water,-20; bonus2 bSubEle,Ele_Wind,-20; bonus2 bSubEle,Ele_Earth,-20; bonus2 bSubEle,Ele_Dark,-20; bonus2 bSubEle,Ele_Holy,-20; bonus2 bSubEle,Ele_Ghost,-20; },{},{}
+5549,Taurus_Diadem,Taurus Diadem,5,20,,300,,3,,0,0xFFFFFFFF,7,2,256,,70,1,535,{ bonus bDex,2; bonus bDelayRate,-2; bonus2 bSubEle,Ele_earth,5; if(getrefine()>6) { bonus bDex,1; bonus bMatkRate,1; } },{},{}
+5550,Taurus_Crown,Taurus Crown,5,20,,300,,3,,0,0xFFFFFFFF,7,2,256,,70,1,536,{ bonus bDex,2; bonus bDelayRate,-2; bonus2 bSubEle,Ele_earth,5; if(getrefine()>6) { bonus bDex,1; bonus bMatkRate,1; } },{},{}
+//5551,Holy_Egg_Hat,Holy Egg Hat,5,20,,0,,1,,0,0xFFFFFFFF,7,2,256,,0,1,537,{},{},{}
+5552,Fest_Lord_Circlet,Festival Grand Circlet,5,0,,0,,8,,0,0xFFFFFFFF,7,2,256,,0,0,93,{ bonus bStr,3; bonus bInt,3; bonus bMdef,3; },{},{}
+5553,Fest_Bunny_Band,Festival Bunny Band,5,0,,0,,7,,0,0xFFFFFFFF,7,2,256,,0,0,15,{ bonus bMdef,4; bonus2 bSubRace,RC_DemiHuman,9; },{},{}
+5554,Octopus_Hat,Octopus Hat,5,20,,200,,3,,0,0xFFFFFFFF,7,2,256,,20,1,538,{ bonus3 bAutoSpell,"SM_PROVOKE",5,10; bonus bUnbreakableHelm,0; },{},{}
+5555,Leaf_Cat_Hat,Leaf Cat Hat,5,20,,100,,3,,0,0xFFFFFFFF,7,2,256,,0,1,539,{ bonus bAgi,1; bonus3 bAutoSpellWhenHit,"AL_HEAL",3,10; },{},{}
+5556,Fur_Seal_Hat,Seal Hat,5,20,,500,,3,,0,0xFFFFFFFF,7,2,769,,55,1,540,{ bonus bInt,1; bonus3 bAutoSpell,"WZ_FROSTNOVA",1,30; },{},{}
+//5557,Wild_Rose_Hat,Wild Rose Hat,5,20,,500,,3,,1,0xFFFFFFFE,7,2,256,,20,1,541,{ bonus bAgi,3; },{},{}
+//5558,Saci_Hat,Luxury Hat,5,20,,100,,3,,1,0xFFFFFFFF,7,2,256,,30,1,542,{ bonus3 bAddMonsterDropItem,510,RC_Plant,500; },{},{}
+5559,Piece_Of_White_Cloth_E,Piece Of White Cloth,5,0,,0,,1,,0,0xFFFFFFFF,7,2,256,,0,1,543,{},{},{}
+5560,Bullock_Helm_J,Bullock Helm,5,20,,3000,,3,,0,0xFFFFFFFF,7,2,256,,75,1,322,{ bonus bMaxHP,100; bonus bNoKnockback,0; bonus2 bSubEle,Ele_Neutral,-20; bonus2 bSubEle,Ele_Fire,-20; bonus2 bSubEle,Ele_Water,-20; bonus2 bSubEle,Ele_Wind,-20; bonus2 bSubEle,Ele_Earth,-20; bonus2 bSubEle,Ele_Dark,-20; bonus2 bSubEle,Ele_Holy,-20; bonus2 bSubEle,Ele_Ghost,-20; },{},{}
5561,Rabbit_Magic_Hat_J,Magic Rabbit Hat,5,0,,800,,1,,0,0xFFFFFFFF,7,2,256,,0,1,497,{ bonus bInt,1; bonus bMaxSP,50; bonus4 bAutoSpellWhenHit,"MG_FIREBOLT",3,10,3; bonus4 bAutoSpellWhenHit,"MG_COLDBOLT",3,10,3; bonus4 bAutoSpellWhenHit,"MG_LIGHTNINGBOLT",3,10,3; bonus3 bAutoSpellWhenHit,"AL_HEAL",1,10; },{},{}
//5562,Good_Wedding_Veil_J,Luxurious Wedding Veil,5,0,,500,,0,,1,0xFFFFFFFF,7,2,768,,45,0,489,{ bonus bCastRate,-3; bonus bDelayRate,-3; bonus bMdef,10; },{},{}
-//5563,Dolor_Hat,Dolor Hat,5,20,,100,,6,,1,0xFFFFFFFF,7,2,256,,0,0,547,{},{},{}
-//5564,Crown_Of_Deceit,Crown of Deceit,5,20,,300,,3,,1,0xFFFFFFFF,7,2,768,,85,1,544,{ bonus bInt,4; bonus bMdef,10; bonus bCastRate,-10; },{},{}
+//5563,Dolor_Hat,Dolor Hat,5,20,,100,,1,,1,0xFFFFFFFF,7,2,256,,0,0,547,{},{},{}
+//5564,Crown_Of_Deceit,Crown of Deceit,5,20,,300,,3,,1,0xFFFFFFFF,7,2,768,,85,1,544,{ bonus bInt,4; bonus bMdef,4; bonus bCastRate,-10; },{},{}
//5565,Dragon_Arhat_Mask,Dragon Arhat Mask,5,0,,0,,5,,0,0xFFFFFFFF,7,2,513,,0,0,545,{ bonus2 bAddRace,RC_DemiHuman,10; },{},{}
//5566,Tiger_Arhat_Mask,Tiger Arhat Mask,5,0,,0,,1,,0,0xFFFFFFFF,7,2,513,,0,0,546,{ bonus bStr,1; bonus2 bAddRace,RC_DemiHuman,2; },{},{}
-5567,Bright_Fury,Bright Fury,5,20,,300,,5,,1,0xFFFFFFFF,7,2,256,,1,1,548,{ bonus bStr,1; bonus2 bAddRace,RC_NonBoss,2; bonus2 bAddRace,RC_Boss,2; bonus bAspdRate,2; },{},{}
-5568,Rabbit_Bonnet,Rabbit Bonnet,5,20,,1000,,4,,1,0xFFFFFFFF,7,2,768,,0,1,549,{ bonus bInt,2; },{},{}
-5569,Gemini_Diadem,Gemini Diadem,5,20,,300,,6,,0,0xFFFFFFFF,7,2,256,,70,1,550,{ bonus bAgi,2; bonus bMatkRate,2; if(getrefine()>6) { bonus bMdef,7; bonus bMAtkRate,8; bonus2 bSubEle,Ele_Wind,5; } },{},{}
-5570,Gemini_Crown,Gemini Crown,5,20,,300,,6,,0,0xFFFFFFFF,7,2,256,,70,1,551,{ bonus bAgi,2; bonus bAtk,2; bonus bMdef,5; if(getrefine()>6) { bonus bDef,1; bonus bEquipmentMatk,15; bonus bFlee,10; bonus2 bSubEle,Ele_Wind,5; } },{},{}
-//5571,Rasta_Wig,Rasta_Wig,5,20,,100,,2,,0,0xFFFFFFFF,7,2,256,,0,1,552,{ bonus bStr,1; },{},{}
-5572,Savage_Baby_Hat,Savage Babe Hat,5,20,,100,,2,,1,0xFFFFFFFF,7,2,256,,1,1,553,{ bonus bVit,2; },{},{}
-5573,Bogy_Horn,Dokebi Horn,5,20,,100,,6,,1,0xFFFFFFFF,7,2,256,,0,1,554,{},{},{}
+5567,Bright_Fury,Bright Fury,5,20,,300,,1,,1,0xFFFFFFFF,7,2,256,,1,1,548,{ bonus bStr,1; bonus2 bAddRace,RC_NonBoss,2; bonus2 bAddRace,RC_Boss,2; bonus bAspdRate,2; },{},{}
+5568,Rabbit_Bonnet,Rabbit Bonnet,5,20,,1000,,1,,1,0xFFFFFFFF,7,2,768,,0,1,549,{ bonus bInt,2; },{},{}
+5569,Gemini_Diadem,Gemini Diadem,5,20,,300,,4,,0,0xFFFFFFFF,7,2,256,,70,1,550,{ bonus bAgi,2; bonus bMatkRate,2; if(getrefine()>6) { bonus bMdef,7; bonus bMAtkRate,8; bonus2 bSubEle,Ele_Wind,5; } },{},{}
+5570,Gemini_Crown,Gemini Crown,5,20,,300,,4,,0,0xFFFFFFFF,7,2,256,,70,1,551,{ bonus bAgi,2; bonus bAtk,2; bonus bMdef,5; if(getrefine()>6) { bonus bDef,1; bonus bMAtk,15; bonus bFlee,10; bonus2 bSubEle,Ele_Wind,5; } },{},{}
+//5571,Rasta_Wig,Rasta_Wig,5,20,,100,,1,,0,0xFFFFFFFF,7,2,256,,0,1,552,{ bonus bStr,1; },{},{}
+5572,Savage_Baby_Hat,Savage Babe Hat,5,20,,100,,1,,1,0xFFFFFFFF,7,2,256,,1,1,553,{ bonus bVit,2; },{},{}
+5573,Bogy_Horn,Dokebi Horn,5,20,,100,,1,,1,0xFFFFFFFF,7,2,256,,0,1,554,{},{},{}
5574,Pencil_in_Mouth,Well-Chewed Pencil,5,20,,100,,0,,0,0xFFFFFFFF,7,2,1,,10,0,555,{ bonus bdex,2; bonus bHitRate,3; },{},{}
-//5575,Onigiri_Hat,Rice Ball Hat,5,20,,100,,6,,1,0xFFFFFFFF,7,2,256,,30,0,556,{},{},{}
-//5576,Japan_Winecup,Wine Cup,5,20,,100,,0,,0,0xFFFFFFFF,7,2,1,,0,0,557,{},{},{}
+//5575,Onigiri_Hat,Rice Ball Hat,5,20,,100,,1,,1,0xFFFFFFFF,7,2,256,,30,0,556,{},{},{}
+//5576,Japan_Winecup,Wine Cup,5,20,,100,,1,,0,0xFFFFFFFF,7,2,1,,0,0,557,{},{},{}
5577,Dark_Knight_Mask_,Dark Knight Mask,5,,,3000,,5,,0,0xFFFFFFFF,7,2,769,,80,1,479,{ bonus bStr,3; if(isequipped(2779,2780)) { bonus bMatkRate,10; bonus bInt,5; bonus2 bSubRace,RC_Angel,10; } },{},{}
5578,Voyage_Hat,Voyage_Hat,5,200,,10,,1,,0,0xFFFFFFFF,7,2,256,,0,1,236,{ bonus bAgi,2; },{},{}
5579,Wanderer's_Sakkat,Wanderer's Sakkat,5,20,,300,,2,,1,0xFFFFFFFF,7,2,768,,70,1,558,{ bonus bAgi,2; },{},{}
-//5580,Red_Beret,Red Beret,5,20,,100,,3,,0,0xFFFFFFFF,7,2,256,,0,0,559,{ bonus bAllStats,3; bonus bMdef,3; },{},{}
+//5580,Red_Beret,Red Beret,5,20,,100,,1,,0,0xFFFFFFFF,7,2,256,,0,0,559,{ bonus bAllStats,3; bonus bMdef,3; },{},{}
//5581,Cancer_Diadem,Cancer Diadem,5,20,,300,,3,,0,0xFFFFFFFF,7,2,256,,70,1,560,{ bonus bInt,2; bonus2 bSubEle,Ele_water,5; if(getrefine()>6) { bonus bMdef,1; bonus bHealPower,3; bonus bMatkRate,2; } },{},{}
//5582,Cancer_Crown,Cancer Crown,5,20,,300,,3,,0,0xFFFFFFFF,7,2,256,,70,1,561,{ bonus bStr,2; bonus2 bSubEle,Ele_water,5; if(getrefine()>6) { bonus bDef,1; bonus bHealPower,3; bonus bFlee,10; } },{},{}
-5583,Para_Team_Hat,Eden Team Hat,5,0,,0,,5,,0,0xFFFFFFFF,7,2,256,,12,1,465,{},{},{}
-5584,Majestic_Evil_Horn,Majestic Evil Horns,5,0,,400,,2,,0,0xFFFFFFFF,7,2,256,,1,1,562,{ bonus2 bSubRace,RC_Demon,3; bonus2 bHPDrainRate,3,15; bonus2 bSPDrainRate,1,7; },{},{}
-5585,Rune_Hairband,Rune Cloth Circlet,5,20,,400,,5,,1,0xFFFFFFFF,7,2,768,,1,1,564,{},{},{}
-5586,Mosquito_Coil,Mosquito Coil,5,20,,100,,5,,1,0xFFFFFFFF,7,2,256,,1,1,563,{},{},{}
-5587,Mosquito_Coil_1Use,Mosquito Coil,5,0,,100,,5,,0,0xFFFFFFFF,7,2,256,,1,1,563,{},{},{}
+5583,Para_Team_Hat,Eden Team Hat,5,0,,0,,1,,0,0xFFFFFFFF,7,2,256,,12,1,465,{},{},{}
+5584,Majestic_Evil_Horn,Majestic Evil Horns,5,0,,400,,1,,0,0xFFFFFFFF,7,2,256,,1,1,562,{ bonus2 bSubRace,RC_Demon,3; bonus2 bHPDrainRate,3,15; bonus2 bSPDrainRate,1,7; },{},{}
+5585,Rune_Hairband,Rune Cloth Circlet,5,20,,400,,1,,1,0xFFFFFFFF,7,2,768,,1,1,564,{},{},{}
+5586,Mosquito_Coil,Mosquito Coil,5,20,,100,,1,,1,0xFFFFFFFF,7,2,256,,1,1,563,{},{},{}
+5587,Mosquito_Coil_1Use,Mosquito Coil,5,0,,100,,1,,0,0xFFFFFFFF,7,2,256,,1,1,563,{},{},{}
//5588,Leo_Crown,Leo Crown,5,20,,300,,3,,0,0xFFFFFFFF,7,2,256,,70,1,565,{ bonus bStr,2; bonus2 bSubEle,Ele_Fire,5; if(getrefine()>6) { bonus bDef,1; bonus bFlee,10; bonus3 bAutoSpell,"TK_SEVENWIND",4,50; } },{},{}
//5589,Leo_Diadem,Leo Diadem,5,20,,300,,3,,0,0xFFFFFFFF,7,2,256,,70,1,566,{ bonus bDex,2; bonus2 bSubEle,Ele_Fire,5; if(getrefine()>6) { bonus bFlee,10; bonus bAspdRate,3; autobonus "{ bonus bSplashRange,1; }",10,10000,BF_WEAPON,"{ specialeffect2 EF_ENHANCE; }"; } },{},{}
-5590,K_Poring_Cake_Cap,Poring Cake Hat,5,20,,200,,5,,0,0xFFFFFFFF,7,2,256,,0,1,417,{},{},{}
-//5591,Desert_Prince,Desert Prince,5,20,,100,,3,,1,0xFFFFFFFF,7,2,256,,30,0,567,{},{},{}
+5590,K_Poring_Cake_Cap,Poring Cake Hat,5,20,,200,,1,,0,0xFFFFFFFF,7,2,256,,0,1,417,{},{},{}
+//5591,Desert_Prince,Desert Prince,5,20,,100,,1,,1,0xFFFFFFFF,7,2,256,,30,0,567,{},{},{}
5592,Sigrun's_Wings,Sigrun's Wings,5,20,,100,,2,,0,0xFFFFFFFF,7,2,512,,80,0,568,{ if(BaseClass==Job_Swordman||BaseClass==Job_Merchant||BaseClass==Job_Thief||(BaseJob==Job_Taekwon&&Class!=Job_Soul_Linker)) bonus bStr,1; else if(BaseClass==Job_Mage||BaseClass==Job_Acolyte||class==Job_Ninja||class==Job_Soul_Linker) bonus bInt,1; else if(BaseClass==Job_Archer||BaseClass==Job_Gunslinger) bonus bDex,1; else if (BaseJob==Job_Novice||BaseJob==Job_SuperNovice) { bonus bMaxHP,80; bonus bMaxSP,30; } },{},{}
-5593,Rabbit_Bonnet_,Rabbit Bonnet,5,20,,200,,10,,1,0xFFFFFFFF,7,2,768,,1,1,549,{},{},{}
+5593,Rabbit_Bonnet_,Rabbit Bonnet,5,20,,200,,1,,1,0xFFFFFFFF,7,2,768,,1,1,549,{},{},{}
5594,Donut_In_Mouth,Donut In Mouth,5,20,,50,,1,,0,0xFFFFFFFF,7,2,1,,1,0,569,{},{},{}
//5595,Eye_Of_Juno,Eye Of Juno,5,20,,400,,2,,1,0xFFFFFFFF,7,2,256,,1,1,570,{ bonus bMdef,2; },{},{}
5596,4Leaf_Clover_In_Mouth,4Leaf Clover In Mouth,5,20,,0,,2,,0,0xFFFFFFFF,7,2,1,,1,0,571,{ bonus bMdef,2; },{},{}
@@ -2932,9 +2932,9 @@
5600,Br_Twin_Ribbon,Brazil Twin Ribbon,5,20,,100,,1,,0,0xFFFFFFFF,7,2,256,,1,1,575,{ bonus bAllStats,3; bonus bMdef,1; },{},{}
//5601,Br_Beret,Brazil Beret,5,20,,100,,1,,0,0xFFFFFFFF,7,2,256,,1,1,576,{ bonus bAllStats,3; bonus bMdef,1; },{},{}
//5602,Jaguar_Hat_J,Jaguar Hat J,5,20,,300,,0,,1,0xFFFFFFFF,7,2,513,,50,0,530,{},{},{}
-//5603,RTC_Winner_Only,RTC First Place,5,0,,2500,,8,,1,0xFFFFFFFF,7,2,256,,1,1,577,{ bonus bAllStats,3; },{},{}
-//5604,RTC_Second_Best,RTC Second Place,5,0,,2500,,6,,1,0xFFFFFFFF,7,2,256,,1,1,578,{ bonus bAllStats,2; },{},{}
-//5605,RTC_Third_Best,RTC Third Place,5,0,,2500,,4,,1,0xFFFFFFFF,7,2,256,,1,1,579,{ bonus bAllStats,1; },{},{}
+//5603,RTC_Winner_Only,RTC First Place,5,0,,2500,,1,,1,0xFFFFFFFF,7,2,256,,1,1,577,{ bonus bAllStats,3; },{},{}
+//5604,RTC_Second_Best,RTC Second Place,5,0,,2500,,1,,1,0xFFFFFFFF,7,2,256,,1,1,578,{ bonus bAllStats,2; },{},{}
+//5605,RTC_Third_Best,RTC Third Place,5,0,,2500,,1,,1,0xFFFFFFFF,7,2,256,,1,1,579,{ bonus bAllStats,1; },{},{}
//5606,Campume_Hat,Champune Hat,5,500,,1200,,4,,1,0xFFFFFFFF,7,2,256,,3,1,580,{ bonus bAllStats,1; },{},{}
//5607,Lyria_Doll_Hat,Lyria Doll Hat,5,0,,500,,0,,1,0xFFFFFFFF,7,2,256,,60,0,581,{},{},{}
//5608,Dorothy_Doll_Hat,Dorothy Doll Hat,5,0,,500,,0,,1,0xFFFFFFFF,7,2,256,,60,0,582,{},{},{}
@@ -2994,9 +2994,9 @@
//5662,Libra_Crown,Libra Crown,5,10,,300,,3,,0,0xFFFFFFFF,7,2,256,,1,1,593,{ bonus bDex,3; },{},{}
//5663,Libra_Diadem,Libra Diadem,5,10,,300,,3,,0,0xFFFFFFFF,7,2,256,,1,1,594,{ bonus bDex,3; },{},{}
5664,Filir_Wing,Filir's Pinions,5,20,,100,,1,,0,0xFFFFFFFF,7,2,512,,70,1,595,{ bonus bAspdRate,2; bonus bCastRate,-2; },{},{}
-5665,Shaman_Hat,Shaman Hat,5,20,,400,,5,,1,0xFFFFFFFF,7,2,256,,1,1,596,{ bonus bMdef,5; bonus2 bSubEle,Ele_Neutral,3; bonus2 bSubEle,Ele_Water,3; bonus2 bSubEle,Ele_Earth,3; bonus2 bSubEle,Ele_Fire,3; bonus2 bSubEle,Ele_Wind,3; bonus2 bSubEle,Ele_Poison,3; bonus2 bSubEle,Ele_Holy,3; bonus2 bSubEle,Ele_Dark,3; bonus2 bSubEle,Ele_Ghost,3; bonus2 bSubEle,Ele_Undead,3; },{},{}
+5665,Shaman_Hat,Shaman Hat,5,20,,400,,1,,1,0xFFFFFFFF,7,2,256,,1,1,596,{ bonus2 bSubEle,Ele_Neutral,3; bonus2 bSubEle,Ele_Water,3; bonus2 bSubEle,Ele_Earth,3; bonus2 bSubEle,Ele_Fire,3; bonus2 bSubEle,Ele_Wind,3; bonus2 bSubEle,Ele_Poison,3; bonus2 bSubEle,Ele_Holy,3; bonus2 bSubEle,Ele_Dark,3; bonus2 bSubEle,Ele_Ghost,3; bonus2 bSubEle,Ele_Undead,3; },{},{}
5666,Golden_Crown,Golden Crown,5,20,,500,,8,,1,0xFFFFFFFF,7,2,256,,1,1,597,{ bonus bInt,1; bonus bDex,1; bonus bLuk,1; },{},{}
-5667,Skull_Hood,Skull Hood,5,20,,0,,2,,1,0xFFFFFFFF,7,2,768,,30,1,598,{},{},{}
+5667,Skull_Hood,Skull Hood,5,20,,100,,1,,1,0xFFFFFFFF,7,2,768,,30,1,598,{},{},{}
5668,Weird_Pumpkin_Hat,Weird Pumpkin Hat,5,20,,0,,5,,0,0xFFFFFFFF,7,2,256,,1,1,206,{ bonus bMdef,5; },{},{}
//5669,Poring_Party_Hat_J,Poring Party Hat J,5,20,,300,,1,,0,0xFFFFFFFF,7,2,256,,1,1,340,{},{},{}
//5670,Aniv_Star_Hat,Aniv Star Hat,5,20,,300,,0,,0,0xFFFFFFFF,7,2,256,,1,1,599,{},{},{}
@@ -3075,21 +3075,21 @@
//5743,Orange_Stem_Hat,Orange Stem Hat,5,20,,100,,0,,0,0x00000000,7,2,256,,1,0,620,{ bonus bLuk,3; },{},{}
//5744,Capricon_Crown,Capricon Crown,5,20,,300,,3,,1,0xFFFFFFFF,7,2,256,,1,1,621,{ bonus bVit,2; bonus bDex,2; },{},{}
//5745,Capricon_Diadem,Capricon Diadem,5,20,,300,,3,,0,0xFFFFFFFF,7,2,256,,1,1,622,{ bonus bDex,2; bonus bMdef,5; },{},{}
-5746,Rune_Circlet,Rune Circlet,5,20,,100,,12,,1,0x00000080,7,2,256,,100,1,623,{ bonus bStr,1; bonus bInt,1; bonus bMdef,5; },{},{}
-5747,Mitra,Mitra,5,20,,100,,12,,1,0x00000100,7,2,256,,100,1,624,{ bonus bInt,1; bonus bVit,1; bonus bMdef,5; },{},{}
-5748,Sniper_Goggle,Sniper Goggles,5,20,,100,,12,,1,0x00000800,7,2,768,,100,1,625,{ bonus bDex,1;bonus bAgi,1;bonus bMdef,5; },{},{}
-5749,Driver_Band,Driver Band,5,20,,100,,12,,1,0x00000400,7,2,256,,100,1,626,{ bonus bStr,1; bonus bDex,1; bonus bMdef,5; },{},{}
-5750,Shadow_Handicraft,Shadow Handicraft,5,20,,100,,12,,1,0x00020000,7,2,256,,100,1,627,{ bonus bInt,1; bonus bAgi,1; bonus bMdef,5; },{},{}
-5751,Minstrel_Song_Hat,Minstrel Song Hat,5,20,,100,,12,,1,0x00080000,7,1,256,,100,1,628,{ bonus bInt,1; bonus bLuk,1; bonus bMdef,5; },{},{}
-5752,Midas_Whisper,Midas Whisper,5,20,,100,,12,,1,0x00040000,7,2,256,,100,1,629,{ bonus bStr,1; bonus bDex,1; bonus bMdef,5; },{},{}
-5753,Magic_Stone_Hat,Magic Stone Hat,5,20,,100,,12,,1,0x00000200,7,2,256,,100,1,630,{ bonus bInt,1; bonus bDex,1; bonus bMdef,5; },{},{}
-5754,Blazing_Soul,Blazing Soul,5,20,,100,,12,,1,0x00008000,7,2,256,,100,1,631,{ bonus bStr,1; bonus bVit,1; bonus bMdef,5; },{},{}
-5755,Silent_Executer,Silence Executer,5,20,,100,,6,,0,0x00001000,,2,513,,100,0,632,{ bonus bAgi,1;bonus bMdef,5; },{},{}
-5756,Wind_Whisper,Wind Whisper,5,20,,100,,12,,1,0x00010000,7,2,256,,100,1,633,{ bonus bInt,1; bonus bDex,1; bonus bMdef,5; },{},{}
-5757,Schmidt_Helm,Dip Schmidt Helm,5,20,,100,,17,,1,0x00004000,7,2,768,,100,1,634,{ bonus bInt,1;bonus bVit,2;bonus bMdef,5; },{},{}
-5758,Dying_Swan,Dying Swan,5,20,,100,,12,,1,0x00080000,7,0,256,,100,1,635,{ bonus bInt,1; bonus bLuk,1; bonus bMdef,5; },{},{}
+5746,Rune_Circlet,Rune Circlet,5,20,,100,,12,,1,0x00000080,8,2,256,,100,1,623,{ bonus bStr,1; bonus bInt,1; bonus bMdef,5; if(readparam(bStr)>=120){ bonus bAtk,10; bonus bMatk,5; } },{},{}
+5747,Mitra,Mitra,5,20,,100,,12,,1,0x00000100,8,2,256,,100,1,624,{ bonus bVit,1; bonus bInt,1; bonus bMdef,5; bonus bHealPower,5; if(readparam(bInt)>=120){ bonus bMatk,10; } },{},{}
+5748,Sniper_Goggles,Sniper Goggles,5,20,,100,,12,,1,0x00000800,8,2,768,,100,1,625,{ bonus bAgi,1; bonus bDex,1; bonus bMdef,5; if(readparam(bAgi)>=120){ bonus bLongAtkRate,4; bonus bAspd,1; } },{},{}
+5749,Driver_Band_M,Driver Band,5,20,,100,,12,,1,0x00000400,8,1,256,,100,1,626,{ bonus bStr,1; bonus bDex,1; bonus bMdef,5; if(readparam(bStr)>=120){ bonus bAtk,10; bonus bCritical,3; } },{},{}
+5750,Shadow_Crown,Shadow Crown,5,20,,100,,12,,1,0x00020000,8,2,256,,100,1,627,{ bonus bAgi,1; bonus bInt,1; bonus bMdef,1; if(readparam(bAgi)>=120){ bonus bAtk,10; bonus bFlee,3; } },{},{}
+5751,Minstrel_Song_Hat,Minstrel Song Hat,5,20,,100,,12,,1,0x00080000,8,1,256,,100,1,628,{ bonus bInt,1; bonus bLuk,1; bonus bMdef,5; bonus bLongAtkRate,4; bonus bUseSPrate,-10; },{},{}
+5752,Midas_Whispers,Midas Whispers,5,20,,100,,12,,1,0x00040000,8,2,256,,100,1,629,{ bonus bStr,1; bonus bDex,1; bonus bMdef,5; if(readparam(bStr)>=120){ bonus bAtk,5; bonus bAspd,1; } },{},{}
+5753,Magic_Stone_Hat,Magic Stone Hat,5,20,,100,,12,,1,0x00000200,8,2,256,,100,1,630,{ bonus bInt,1; bonus bDex,1; bonus bMdef,5; if(readparam(bDex)>=120){ bonus bMatkRate,10; bonus bCastrate,-2; } },{},{}
+5754,Burning_Spirit,Burning Spirit,5,20,,100,,12,,1,0x00008000,8,2,256,,100,1,631,{ bonus bStr,1; bonus bVit,1; bonus bMdef,5; if(readparam(bStr)>=120){ bonus bAtk,10; bonus bHit,3; } },{},{}
+5755,Silent_Enforcer,Silent Enforcer,5,20,,100,,12,,0,0x00001000,8,2,513,,100,1,632,{ bonus bAgi,1; bonus bMdef,5; if(readparam(bAgi)>=120){ bonus bAtk,10; bonus bFlee2,5; } },{},{}
+5756,Wispers_of_Wind,Wispers of Wind,5,20,,100,,12,,1,0x00010000,8,2,256,,100,1,633,{ bonus bInt,1; bonus bDex,1; bonus bMdef,5; if(readparam(bInt)>=120){ bonus bMatkRate,10; bonus bFlee,3; } },{},{}
+5757,Reissue_Schmitz_Helm,Reissue Schmitz Helm,5,20,,100,,12,,1,0x00004000,8,2,768,,100,1,634,{ bonus bVit,2; bonus bInt,1; bonus bMdef,5; if(readparam(bInt)>=120){ bonus bMatkRate,10; bonus bDef,5; } },{},{}
+5758,Resting_Swan,Resting Swan,5,20,,100,,17,,1,0x00080000,8,0,256,,100,1,635,{ bonus bInt,1; bonus bLuk,1; bonus bMdef,5; bonus bAtkRate,5; bonus bUseSPrate,-10; },{},{}
//5759,Noah_Hat,Noah Hat,5,20,,500,,1,,1,0xFFFFFFFF,7,2,256,,1,1,636,{ bonus bMdef,3; },{},{}
-5760,Driver_Band_,Driver Band,5,20,,100,,12,,1,0x00000000,7,2,256,,100,1,637,{ bonus bStr,1; bonus bDex,1; bonus bMdef,5; },{},{}
+5760,Driver_Band_F,Driver Band,5,20,,100,,12,,1,0x00000400,8,0,256,,100,1,637,{ bonus bStr,1; bonus bDex,1; bonus bMdef,5; if(readparam(bStr)>=120){ bonus bAtk,10; bonus bCritical,3; } },{},{}
//5761,Sloth_Hat,Sloth Hat,5,20,,800,,3,,1,0xFFFFFFFF,7,2,256,,1,1,638,{ bonus bAgi,2; },{},{}
//5762,Duneyrr_Helm,Duneyrr Helm,5,20,,100,,5,,0,0xFFFFFFFF,7,2,256,,1,1,639,{ bonus bAllStats,1; bonus bMdef,5; },{},{}
//5763,Red_Bunny_Band,Red Bunny Band,5,0,,200,,4,,0,0xFFFFFFFF,7,2,256,,1,1,640,{ bonus bAgi,2; bonus bMdef,3; },{},{}
@@ -3129,17 +3129,17 @@
5798,Cheer_Scarf3,Cheer Scarf3,5,0,,0,,0,,0,0xFFFFFFFF,7,2,1,,1,0,369,{},{},{}
5799,Cheer_Scarf4,Cheer Scarf4,5,0,,0,,0,,0,0xFFFFFFFF,7,2,1,,1,0,369,{},{},{}
5800,Blush_Of_Groom,Blush of Groom,5,20,,50,,0,,0,0xFFFFFFFF,7,2,512,,0,0,125,{ bonus2 bSubRace,RC_DemiHuman,3; },{},{}
-5801,Ribbon_Of_Bride,Red Tailed Ribbon,5,20,,100,,10,,0,0xFFFFFFFF,7,2,256,,0,1,167,{ bonus bAllStats,2; bonus2 bSubRace,RC_DemiHuman,10; if (getskilllv("AL_HEAL") == 10) { bonus3 bAutoSpellWhenHit,"AL_HEAL",10,20; } else { bonus3 bAutoSpellWhenHit,"AL_HEAL",5,20; } },{},{}
-5802,Upgrade_Elephant_Hat,Upgraded Elephant Hat,5,0,,500,,6,,1,0xFFFFFFFF,7,2,256,,0,1,215,{},{},{}
-5803,Flower_Love_Hat,Love Flower Hat,5,20,,100,,4,,0,0xFFFFFFFF,7,2,256,,0,1,5,{ bonus2 bAddMonsterDropItem,608,100; },{},{}
+5801,Ribbon_Of_Bride,Red Tailed Ribbon,5,20,,100,,5,,0,0xFFFFFFFF,7,2,256,,0,1,167,{ bonus bAllStats,2; bonus2 bSubRace,RC_DemiHuman,10; if (getskilllv("AL_HEAL") == 10) { bonus3 bAutoSpellWhenHit,"AL_HEAL",10,20; } else { bonus3 bAutoSpellWhenHit,"AL_HEAL",5,20; } },{},{}
+5802,Upgrade_Elephant_Hat,Upgraded Elephant Hat,5,0,,500,,3,,1,0xFFFFFFFF,7,2,256,,0,1,215,{},{},{}
+5803,Flower_Love_Hat,Love Flower Hat,5,20,,100,,2,,0,0xFFFFFFFF,7,2,256,,0,1,5,{ bonus2 bAddMonsterDropItem,608,100; },{},{}
5804,Pirate_Eyepatch,Pirate Eye Bandage,5,1000,,100,,0,,0,0xFFFFFFFF,7,2,512,,0,0,13,{},{},{}
-5805,Victorious_Coronet,Victorious Coronet,5,0,,150,,2,,0,0xFFFFFFFF,7,2,256,,70,0,43,{ bonus bMaxHPrate,15; bonus bSPrecovRate,5; },{},{}
-5806,Poem_Natalia_Hat,Poet Natalie's Hat,5,20,,300,,9,,0,0xFFFFFFFF,7,2,256,,0,0,67,{},{},{}
-5807,October_Fest_Cap,October Fest Cap,5,20,,100,,2,,0,0xFFFFFFFE,7,2,256,,50,1,104,{},{},{}
+5805,Victorious_Coronet,Victorious Coronet,5,0,,150,,1,,0,0xFFFFFFFF,7,2,256,,70,0,43,{ bonus bMaxHPrate,15; bonus bSPrecovRate,5; },{},{}
+5806,Poem_Natalia_Hat,Poet Natalie's Hat,5,20,,300,,5,,0,0xFFFFFFFF,7,2,256,,0,0,67,{},{},{}
+5807,October_Fest_Cap,October Fest Cap,5,20,,100,,1,,0,0xFFFFFFFE,7,2,256,,50,1,104,{},{},{}
5808,Diabolus_Helmet,Dark Bacilium,5,20,,250,,5,,1,0x000FDF80,2,2,769,,0,1,364,{ bonus2 bResEff,Eff_Stone,2000+(getrefine()*200); bonus2 bResEff,Eff_Freeze,2000+(getrefine()*200); bonus2 bResEff,Eff_Stun,2000+(getrefine()*200); },{},{}
5809,Boom_Boom_Hat,Boom Boom Hat,5,0,,100,,6,,0,0xFFFFFFFF,7,2,256,,0,0,216,{ bonus bAllStats,5; },{},{}
-5810,Ph.D_Hat_V,Ph.D Hat V,5,20,,100,,5,,0,0xFFFFFFFE,7,2,256,,0,1,98,{ bonus bInt,5; bonus bVit,3; bonus bDex,3; },{},{}
-5811,Santa_Beard,Santa's Beard,5,20,,100,,0,,0,0xFFFFFFFF,7,2,1,,0,0,25,{},{},{}
+5810,Ph.D_Hat_V,Ph.D Hat V,5,20,,100,,3,,0,0xFFFFFFFE,7,2,256,,0,1,98,{ bonus bInt,5; bonus bVit,3; bonus bDex,3; },{},{}
+5811,Santa_Beard,Santa's Beard,5,20,,100,,5,,0,0xFFFFFFFF,7,2,1,,0,0,25,{},{},{}
5812,Hat_Of_Expert,Hat Of Expert,5,0,,0,,2,,0,0xFFFFFFFF,7,2,256,,0,1,16,{},{},{}
//5813,Red_Ph.D_Hat,Red Ph.D Hat,5,1000,,500,,0,,0,0xFFFFFFFF,7,2,256,,0,1,481,{ bonus bInt,1; },{},{}
//5814,Ati_Atihan_Hat3
@@ -3233,8 +3233,8 @@
6043,Letter_From_Lugen,Letter from Lugen,3,0,,10,,,,,,,,,,,,,{},{},{}
6044,Letter_From_Otto,Letter from Otto,3,0,,10,,,,,,,,,,,,,{},{},{}
6045,Supply_Box,Supply Box,3,0,,0,,,,,,,,,,,,,{},{},{}
-6046,Clothing_Dye_Coupon,New Clothing Dye Coupon,3,0,,0,,,,,,,,,,,,,{},{},{}
-6047,Clothing_Dye_Coupon2,Original Clothing Dye Coupon,3,0,,0,,,,,,,,,,,,,{},{},{}
+6046,Clothing_Dye_Coupon,Clothing Dye Coupon,2,0,,0,,,,,0xFFFFFFFF,7,2,,,,,,{ callfunc "SetPalete",1; },{},{}
+6047,Clothing_Dye_Coupon_II,Clothing Dye Coupon II,2,0,,0,,,,,0xFFFFFFFF,7,2,,,,,,{ callfunc "SetPalete",2; },{},{}
6048,Unidentified_Mineral,Unidentified Mineral,3,0,,10,,,,,,,,,,,,,{},{},{}
6049,Marlin,Marlin,3,0,,10,,,,,,,,,,,,,{},{},{}
6050,Mercenary_Contract,Mercenary Contract,3,0,,10,,,,,,,,,,,,,{},{},{}
@@ -4659,7 +4659,7 @@
11053,SN_Book_Practice,SN Book Practice,3,20,,10,,,,,,,,,,,,,{},{},{}
11054,SN_Book_Misc,SN Book Misc,3,20,,10,,,,,,,,,,,,,{},{},{}
11055,Basic_Adventure,Basic Adventure,3,20,,10,,,,,,,,,,,,,{},{},{}
-//11056,Spiritualism_Guide,
+11056,Elemental_Spirit_Guide,Elemental Spirit Guide,3,1000,,10,,,,,,,,,,,,,{},{},{}
// More Usable Items
//===================================================================
11500,Light_Yellow_Pot,Light Yellow Potion,0,550,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ itemheal rand(175,235),0; },{},{}
@@ -5015,7 +5015,7 @@
12308,Magic_Castle,Magic Magic Powder,2,0,,0,,,,,0xFFFFFFFF,7,2,,,,,,{ setfont 8; },{},{}
12309,Bulging_Head,JJangu Magic Powder,2,0,,0,,,,,0xFFFFFFFF,7,2,,,,,,{ setfont 9; },{},{}
12310,Spray_Of_Flowers,Spray Of Flowers,2,0,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_INCFLEE,600000,10; },{},{}
-12311,Large_Spray_Of_Flowers,Huge Spray Of Flowers,11,0,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "ALL_PARTYFLEE",1; },{},{}
+12311,Large_Spray_Of_Flowers,Huge Spray Of Flowers,11,0,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
12312,Thick_Manual50,Thick Battle Manual,2,0,,0,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_EXPBOOST,3600000,50; },{},{}
12313,Protection_Of_Angel,Guardian Angel,2,0,,0,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
12314,Noive_Box,Noive Box,2,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
@@ -5045,7 +5045,7 @@
12338,Grilled_Corn,Grilled Corn,2,100,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_INCSTR,180000,2; sc_start SC_INCINT,180000,2; sc_start SC_INCAGI,180000,2; },{},{}
12339,Cherish_Box_Ori,Treasure Edition Box,2,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem groupranditem(IG_Cherish_Box_Ori),1; },{},{}
12340,Mysterious_Rice_Powder,Chewy Rice Powder,2,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ pet 1815; },{},{}
-12341,Special_Alloy_Trap_Box,Special Alloy Trap Box,2,20000,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
+12341,Special_Alloy_Trap_Box,Special Alloy Trap Box,2,,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 7940,100; },{},{}
12342,Manuk's_Opportunity,Manuk's Opportunity,2,0,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ specialeffect2 EF_POTION_BERSERK; sc_start SC_MANU_ATK,600000,10; },{},{}
12343,Manuk's_Courage,Manuk's Courage,2,0,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ specialeffect2 EF_GUARD; sc_start SC_MANU_DEF,600000,10; },{},{}
12344,Pinguicula's_fruit_Jam,Pinguicula's Fruit Jam,2,0,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ specialeffect2 EF_POTION_BERSERK; sc_start SC_SPL_ATK,600000,10; },{},{}
@@ -5096,9 +5096,9 @@
12389,Runstone_Storm,Pertz Runestone For Apprentice,11,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ /* getmapxy .@map$,.@x,.@y,0; if(.@map$ == "job3_rune02") { itemskill "RK_STORMBLAST",1; } */ },{},{}
12390,Runstone_Millennium,Verkana Runestone For Apprentice,11,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ /* getmapxy .@map$,.@x,.@y,0; if(.@map$ == "job3_rune02") { itemskill "RK_MILLENNIUMSHIELD",1; } */ },{},{}
12391,Lucky_Egg_C,Lucky Egg,2,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12392,RepairA,Repair A,2,220,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12393,RepairB,Repair B,2,500,,140,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12394,RepairC,Repair C,2,1100,,180,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
+12392,Repair_A,Repair A,0,220,,70,,,,,0x00000400,8,2,,,,,,{/* madoheal rand(200,300),0; */},{},{}
+12393,Repair_B,Repair B,0,500,,70,,,,,0x00000400,8,2,,,,,,{/* madoheal rand(300,400),0; */},{},{}
+12394,Repair_C,Repair C,0,1100,,70,,,,,0x00000400,8,2,,,,,,{/* madoheal rand(400,500),0; */},{},{}
12395,Tantanmen,Tantan Noodle,2,20,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ pet 1519; },{},{}
12396,Fools_Day_Box,Gift Box?,11,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ if(rand(1,10)==1) itemskill "AL_TELEPORT",1; else if(rand(1,10)==2) itemskill "AL_TELEPORT",3; else if(rand(1,10)==3) percentheal 50,0; else if(rand(1,10)==4) percentheal 0,50; else if(rand(1,10)==5) end; else if(rand(1,10)==6) getitem 512,1; else if(rand(1,10)==7) itemskill "ALL_REVERSEORCISH",1; else if(rand(1,10)==8) specialeffect2 247; else if(rand(1,10)==9) specialeffect2 338; else specialeffect2 10; },{},{}
12397,Fools_Day_Box2,Gift Box?,11,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ if(rand(1,10)==1) itemskill "TF_DETOXIFY",1; else if(rand(1,10)==2) itemskill "TF_PICKSTONE",1; else if(rand(1,10)==3) itemskill "BA_FROSTJOKER",1; else if(rand(1,10)==4) itemskill "DC_SCREAM",1; else if(rand(1,10)==5) end; else if(rand(1,10)==6) getitem 909,1; else if(rand(1,10)==7) itemskill "AL_RUWACH",1; else if(rand(1,10)==8) specialeffect2 328; else if(rand(1,10)==9) specialeffect2 68; else specialeffect2 196; },{},{}
@@ -5125,23 +5125,27 @@
12418,Full_SwingK,Full SwingK,2,100,,50,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
12419,Mana_Plus,Mana Plus,2,100,,50,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
12420,Stamina_Up_M,Stamina Up M,2,100,,50,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12421,Digestive_F,Digestive F,2,100,,50,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12422,HP_Increase_PotionS,HP Increase PotionS,2,100,,20,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12423,HP_Increase_PotionM,HP Increase PotionM,2,100,,40,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12424,HP_Increase_PotionL,HP Increase PotionL,2,100,,80,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12425,SP_Increase_PotionS,SP Increase PotionS,2,100,,20,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12426,SP_Increase_PotionM,SP Increase PotionM,2,100,,40,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12427,SP_Increase_PotionL,SP Increase PotionL,2,100,,80,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12428,Enrich_White_PotionZ,Enrich White PotionZ,2,100,,70,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12429,Savage_BBQ,Savage BBQ,2,1000,,50,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12430,Wug_Blood_Cocktail,Wug Blood Cocktail,2,1000,,50,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12431,Minor_Brisket,Minor Brisket,2,1000,,50,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12432,Siroma_Icetea,Siroma Icetea,2,1000,,50,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12433,Drocera_Herb_Stew,Drocera Herb Stew,2,1000,,50,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12434,Petti_Tail_Noodle,Petti Tail Noodle,2,1000,,50,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12435,Black_Thing,Black Thing,2,1000,,50,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12436,Vitata500,Vitata500,2,100,,50,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12437,Enrich_Celermine_Juice,Enrich Celermine Juice,2,100,,50,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
+12417,Boost_500,Boost 500,2,10,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_BOOST500,500000,20; },{},{}
+12418,Full_Swing_K,Full Swing K,3,10,,10,,,,,,,,,,,,,{},{},{}
+12419,Manaplus,Manaplus,3,10,,10,,,,,,,,,,,,,{},{},{}
+12420,Muramura_M,Muramura M,3,10,,10,,,,,,,,,,,,,{},{},{}
+12421,Falmons_F,Falmons F,3,10,,10,,,,,,,,,,,,,{},{},{}
+12422,HP_Increase_Potion_(Small),HP Increase Potion (Small),0,10,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_INCMHPRATE,500000,1; percentheal 2,0; },{},{}
+12423,HP_Increase_Potion_(Medium),HP Increase Potion (Medium),0,10,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_INCMHPRATE,500000,2; percentheal 3,0; },{},{}
+12424,HP_Increase_Potion_(Large),HP Increase Potion (Large),0,10,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_INCMHPRATE,500000,5; percentheal 5,0; },{},{}
+12425,SP_Increase_Potion_(Small),SP Increase Potion (Small),0,10,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_INCMSPRATE,500000,2; percentheal 0,2; },{},{}
+12426,SP_Increase_Potion_(Medium),SP Increase Potion (Medium),0,10,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_INCMSPRATE,500000,4; percentheal 0,4; },{},{}
+12427,SP_Increase_Potion_(Large),SP Increase Potion (Large),0,10,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_INCMSPRATE,500000,8; percentheal 0,8; },{},{}
+12428,Concentrated_White_Potion_Z,Concentrated White Potion Z,0,10,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_WHITEPOTIONZ,500000,0; itemheal rand(1500,1600),0; },{},{}
+12429,Savage_Full_Roast,Savage Full Roast,2,,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_SAVAGE_STEAK, 300000, 20; },{},{}
+12430,Cocktail_Warg_Blood,Cocktail Warg Blood,2,,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_COCKTAIL_WARG_BLOOD, 300000, 20; },{},{}
+12431,Minor_Stew,Minor Stew,2,,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_MINOR_BBQ, 300000, 20; },{},{}
+12432,Siroma_Iced_Tea,Siroma Iced Tea,2,,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_SIROMA_ICE_TEA, 300000, 20; },{},{}
+12433,Drosera_Herb_Salad,Drosera Herb Salad,2,,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_DROCERA_HERB_STEAMED, 300000, 20; },{},{}
+12434,Petite_Tail_Noodles,Petite Tail Noodles,2,,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_PUTTI_TAILS_NOODLES, 300000, 20; },{},{}
+12435,Black_Mass,Black Mass,2,,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_STOMACHACHE, 60000, rand(5,10); },{},{}
+12436,Vitata_500,Vitata 500,0,10,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
+12437,Concentrated_Ceromain_Soup,Concentrated Ceromain Soup,2,10,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ itemheal rand(1500,1600),0; },{},{}
12438,F_Giant_Fly_Wing,F Giant Fly Wing,2,2,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
12439,F_Battle_Manual,F Battle Manual,2,2,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
12440,F_Insurance,F Insurance,2,2,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
@@ -5285,7 +5289,7 @@
12580,Vending_Search_Scroll,Universal Catalog Silver,2,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ searchstores 10,0; },{},{}
12581,Vending_Search_Scroll2,Universal Catalog Gold,2,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ searchstores 10,1; },{},{}
12591,Vending_Search_Scroll3,Universal Catalog Bronze,2,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ searchstores 10,1; },{},{}
-//12622,Halter_Lead,Halter Lead,2,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_ALL_RIDING,900000,200; },{},{}
+12622,Reins_Of_Mount,Reins Of Mount,11,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "ALL_RIDING",1; },{},{}
12701,Old_Blue_Box_F,Old Blue Box,2,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
12702,Old_Bleu_Box,Old Navy Box,2,0,,200,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem groupranditem(IG_BleuBox),1; getitem groupranditem(IG_BleuBox),1; },{},{}
12703,Holy_Egg_2,Holy Egg,11,0,,50,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
@@ -5302,28 +5306,34 @@
12714,Easter_Scroll,Easter Scroll,2,1,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem groupranditem(IG_Easter_Scroll),1; },{},{}
12715,Black_Treasure_Box,Black Treasure Box,2,0,,0,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
12716,Indian_Rice_Cake,Indian Rice Cake,2,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12717,Poison_Paralysis,Paralysis,2,2,,20,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12718,Poison_Leech,Leech End,2,2,,20,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12719,Poison_Oblivion,Oblivion Curse,2,2,,20,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12720,Poison_Contamination,Death Hurt,2,2,,20,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12721,Poison_Numb,Toxin,2,2,,20,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12722,Poison_Fever,Pyrexia,2,2,,20,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12723,Poison_Laughing,Magic Mushroom,2,2,,20,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12724,Poison_Fatigue,Venom Bleed,2,2,,20,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12725,Runstone_Nosiege,Nosiege Runestone,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ if (SuccessRuneUse(12725)) { itemskill "RK_REFRESH",1; } else { delitem 12725,1; } },{},{}
-12726,Runstone_Rhydo,Rydo Runestone,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ if (SuccessRuneUse(12726)) { itemskill "RK_CRUSHSTRIKE",1; } else { delitem 12726,1; } },{},{}
-12727,Runstone_Verkana,Verkana Runestone,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ if (SuccessRuneUse(12727)) { itemskill "RK_MILLENNIUMSHIELD",1; } else { delitem 12727,1; } },{},{}
-12728,Runstone_Isia,Isia Runestone,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ if (SuccessRuneUse(12728)) { itemskill "RK_VITALITYACTIVATION",1; } else { delitem 12728,1; } },{},{}
-12729,Runstone_Asir,Asir Runestone,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ if (SuccessRuneUse(12729)) { itemskill "RK_FIGHTINGSPIRIT",1; } else { delitem 12729,1; } },{},{}
-12730,Runstone_Urj,Urj Runestone,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ if (SuccessRuneUse(12730)) { itemskill "RK_ABUNDANCE",1; } else { delitem 12730,1; } },{},{}
-12731,Runstone_Turisus,Tursius Runestone,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ if (SuccessRuneUse(12731)) { itemskill "RK_GIANTGROWTH",1; } else { delitem 12731,1; } },{},{}
-12732,Runstone_Pertz,Pertz Runestone,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ if (SuccessRuneUse(12732)) { itemskill "RK_STORMBLAST",1; } else { delitem 12732,1; } },{},{}
-12733,Runstone_Hagalas,Hagalas Runestone,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ if (SuccessRuneUse(12733)) { itemskill "RK_STONEHARDSKIN",1; } else { delitem 12733,1; } },{},{}
-12734,Runstone_Quality,Quality Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ produce Produce_Runestone,Runestone_Quality; },{},{}
-12735,Runstone_Ancient,Ancient Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ produce Produce_Runestone,Runestone_Ancient; },{},{}
-12736,Runstone_Mystic,Mystic Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ produce Produce_Runestone,Runestone_Mystic; },{},{}
-12737,Runstone_Ordinary,General Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ produce Produce_Runestone,Runestone_Ordinary; },{},{}
-12738,Runstone_Rare,Rare Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ produce Produce_Runestone,Runestone_Rare; },{},{}
+// Guillotine Cross Poisons
+12717,Poison_Paralysis,Paralyze,0,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ if(rand(10000) < 10) sc_start SC_PARALYSE,300000,0; },{},{}
+12718,Poison_Leech,Leech End,0,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ if(rand(10000) < 10) sc_start SC_LEECHESEND,300000,0; },{},{}
+12719,Poison_Oblivion,Oblivion Curse,0,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ if(rand(10000) < 10) sc_start SC_OBLIVIONCURSE,300000,0; },{},{}
+12720,Poison_Disheart,Disheart,0,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ if(rand(10000) < 10) sc_start SC_DEATHHURT,300000,0; },{},{}
+12721,Poison_Numb,Toxin,0,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ if(rand(10000) < 10) sc_start SC_TOXIN,300000,0; },{},{}
+12722,Poison_Fever,Pyrexia,0,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ if(rand(10000) < 10) sc_start SC_PYREXIA,300000,0; },{},{}
+12723,Poison_Laughing,Magic Mushroom,0,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ if(rand(10000) < 10) sc_start SC_MAGICMUSHROOM,300000,0; },{},{}
+12724,Poison_Fatigue,Venom Bleed,0,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ if(rand(10000) < 10) sc_start SC_VENOMBLEED,15000,0; },{},{}
+
+// Rune Knight's Rune Stones
+12725,Runstone_Nosiege,Nauthiz Rune,11,100,,100,,,,,0xFFFFFFFF,8,2,,,,,,{ itemskill "RK_REFRESH",1; },{},{}
+12726,Runstone_Rhydo,Raido Rune,11,100,,100,,,,,0xFFFFFFFF,8,2,,,,,,{ itemskill "RK_CRUSHSTRIKE",1; },{},{}
+12727,Runstone_Verkana,Berkana Rune,11,100,,100,,,,,0xFFFFFFFF,8,2,,,,,,{ itemskill "RK_MILLENNIUMSHIELD",1; },{},{}
+12728,Runstone_Isia,Isa Rune,11,100,,100,,,,,0xFFFFFFFF,8,2,,,,,,{ itemskill "RK_VITALITYACTIVATION",1; },{},{}
+12729,Runstone_Asir,Othila Rune,11,100,,100,,,,,0xFFFFFFFF,8,2,,,,,,{ itemskill "RK_FIGHTINGSPIRIT",1; },{},{}
+12730,Runstone_Urj,Uruz Rune,11,100,,100,,,,,0xFFFFFFFF,8,2,,,,,,{ itemskill "RK_ABUNDANCE",1; },{},{}
+12731,Runstone_Turisus,Thurisaz Rune,11,100,,100,,,,,0xFFFFFFFF,8,2,,,,,,{ itemskill "RK_GIANTGROWTH",1; },{},{}
+12732,Runstone_Pertz,Wyrd Rune,11,100,,100,,,,,0xFFFFFFFF,8,2,,,,,,{ itemskill "RK_STORMBLAST",1; },{},{}
+12733,Runstone_Hagalas,Hagalaz Rune,11,100,,100,,,,,0xFFFFFFFF,8,2,,,,,,{ itemskill "RK_STONEHARDSKIN",1; },{},{}
+
+// Rune Knight Rune Ores
+12734,Runstone_Quality,Luxurious Rune,0,2,,100,,,,,0x00000080,8,2,,,,,,{ makerune 1; },{},{}
+12735,Runstone_Ancient,Ancient Rune,0,2,,100,,,,,0x00000080,8,2,,,,,,{ makerune 2; },{},{}
+12736,Runstone_Mystic,Mystic Rune,0,2,,100,,,,,0x00000080,8,2,,,,,,{ makerune 3; },{},{}
+12737,Runstone_Ordinary,General Rune,0,2,,100,,,,,0x00000080,8,2,,,,,,{ makerune 4; },{},{}
+12738,Runstone_Rare,Rare Rune,0,2,,100,,,,,0x00000080,8,2,,,,,,{ makerune 5; },{},{}
+
12739,Snow_Flower,Snow Flowers,2,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
12740,Inc_Str_Scroll,Amplification Scroll,2,1,,0,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
12741,Inc_Int_Scroll,Intellect Amplification Scroll,2,1,,0,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
@@ -5472,8 +5482,8 @@
13007,Jitte,Jitte,4,20000,,400,70,,1,0,0x02000000,7,2,2,2,35,1,1,{ bonus bBreakWeaponRate,200; },{},{}
13008,Jitte_,Jitte,4,20000,,400,70,,1,1,0x02000000,7,2,2,2,35,1,1,{ bonus bBreakWeaponRate,200; },{},{}
13009,Kamaitachi,Kamaitachi,4,48000,,900,125,,2,0,0x02000000,7,2,2,4,70,1,1,{ bonus bAtkEle,Ele_Wind; bonus bCritical,3; bonus bAspdRate,3; },{},{}
-13010,Asura,Asura,4,3000,,600,50,,1,2,0x02000000,7,2,2,1,12,1,1,{ bonus bWeaponMatk,50; },{},{}
-13011,Asura_,Asura,4,3000,,600,50,,1,3,0x02000000,7,2,2,1,12,1,1,{ bonus bWeaponMatk,50; },{},{}
+13010,Asura,Asura,4,3000,,600,50,,1,2,0x02000000,7,2,2,1,12,1,1,{ bonus bMatkRate,10; },{},{}
+13011,Asura_,Asura,4,3000,,600,50,,1,3,0x02000000,7,2,2,1,12,1,1,{ bonus bMatkRate,10; },{},{}
13012,Murasame,Murasame,4,20,,700,95,,1,1,0x02000000,7,2,2,2,24,1,1,{ bonus bAtkEle,Ele_Water; bonus2 bCriticalAddRace,RC_DemiHuman,10; },{},{}
13013,Murasame_,Murasame,4,20,,700,95,,1,2,0x02000000,7,2,2,2,24,1,1,{ bonus bAtkEle,Ele_Water; bonus2 bCriticalAddRace,RC_DemiHuman,10; },{},{}
13014,Hakujin,Hakujin,4,20,,800,120,,1,0,0x02000000,7,2,2,3,42,1,1,{ bonus bInt,2; bonus3 bAutoSpell,"AL_HEAL",1,10; },{},{}
@@ -5485,7 +5495,7 @@
13020,Warrior_Balmung_,Warrior's Balmung,4,20,,1000,170,,1,0,0xFFFFFFFF,7,2,2,4,48,1,1,{ bonus bAllStats,5; },{},{}
13021,Combat_Knife_C,Combat Knife,4,1,,0,129,,1,0,0x028F5EEE,7,2,2,4,1,0,1,{ bonus bIgnoreDefRace,RC_DemiHuman; bonus2 bSubRace,RC_DemiHuman,10; bonus2 bSubRace,RC_Demon,-10; bonus bMaxSPrate,10; bonus bSPDrainValue,3; },{},{}
13022,Counter_Dagger_C,Dagger of Counter,4,1,,0,209,,1,0,0x00810204,7,2,2,4,1,0,1,{ bonus bCritical,90; },{},{}
-13023,Asura_C,Ashura,4,1,,0,120,,1,0,0x02000000,7,2,2,1,1,0,1,{ bonus bWeaponMatk,98; },{},{}
+13023,Asura_C,Ashura,4,1,,0,120,,1,0,0x02000000,7,2,2,1,1,0,1,{ bonus bMatkRate,15; },{},{}
13024,Sword_Breaker_C,Refined Swordbreaker,4,2,,0,105,,1,0,0x028F5EEE,7,2,2,4,0,0,1,{ bonus bBreakWeaponRate,500; },{},{}
13025,Mail_Breaker_C,Refined Mailbreaker,4,2,,0,105,,1,0,0x028F5EEE,7,2,2,4,0,0,1,{ bonus bBreakArmorRate,500; },{},{}
13026,Moonlight_Sword_C,Moonlight Dagger,4,2,,0,85,,1,0,0x028F5EEE,7,2,2,4,0,0,1,{ bonus bMaxSPrate,10; bonus bSPDrainValue,3; },{},{}
@@ -5512,8 +5522,8 @@
13047,Weihna,Weihna,4,20,,500,135,,1,2,0x00021040,2,2,2,3,50,1,1,{ bonus3 bAddEffOnSkill,"RG_RAID",Eff_Poison,1000; autobonus "{ bonus2 bAddRace,RC_NonBoss,10; bonus2 bAddRace,RC_Boss,10; }",5,5000,BF_WEAPON|BF_SHORT,"{ specialeffect2 EF_POTION_BERSERK; }"; },{},{}
13048,Damascus_C,Damascus,4,0,,0,153,,1,0,0x028F5EEE,7,2,2,3,1,0,1,{},{},{}
13049,Lacma,Lacma,4,20,,650,45,,1,1,0xFE9F7EEF,7,2,2,3,1,1,1,{},{},{}
-13050,P_Dagger1,Eden Dagger I,4,0,,0,124,,1,0,0xFE9F7EEF,7,2,2,2,26,0,1,{ bonus bWeaponMatk,60; },{},{}
-13051,P_Dagger2,Eden Dagger II,4,0,,0,158,,1,0,0xFE9F7EEF,7,2,2,2,40,0,1,{ bonus bWeaponMatk,70; },{},{}
+13050,P_Dagger1,Eden Dagger I,4,0,,0,124,,1,0,0xFE9F7EEF,7,2,2,2,26,0,1,{ /* bonus bMAtk,60; */ },{},{}
+13051,P_Dagger2,Eden Dagger II,4,0,,0,158,,1,0,0xFE9F7EEF,7,2,2,2,40,0,1,{ /* bonus bMAtk,70; */ },{},{}
13052,Tourist_Dagger,Tourist Dagger,4,0,,500,51,,1,0,0xFE9F7EEF,7,2,2,1,1,0,1,{ bonus bAgi,2; },{},{}
13053,F_Moonlight_Sword_C,Moonlight Sword,4,2,,0,85,,1,0,0x028F5EEE,7,2,2,4,0,0,1,{},{},{}
13054,F_Combat_Knife_C,Combat Knife,4,1,,0,129,,1,0,0x028F5EEE,7,2,2,4,1,0,1,{},{},{}
@@ -5524,7 +5534,7 @@
13059,E_Asura_C,Asura,4,1,,0,120,,1,0,0x02000000,7,2,2,1,1,0,1,{},{},{}
13060,E_Counter_Dagger_C,Counter Dagger,4,1,,0,209,,1,0,0x00810204,7,2,2,4,1,0,1,{},{},{}
13061,Black_Wing,Black Wing,4,20,,600,142,,1,1,124,7,2,2,3,102,1,1,{},{},{}
-13062,Ancient_Dagger,Ancient Dagger,4,20,,600,107,,0,0,0x028F5EEE,2,2,2,4,120,1,1,{ bonus bWeaponMatk,120; },{},{}
+13062,Ancient_Dagger,Ancient Dagger,4,20,,600,107,,0,0,0x028F5EEE,2,2,2,4,120,1,1,{ /* bonus bMAtk,120; */ },{},{}
// Guns
13100,Six_Shooter,Six Shooter,4,4500,,400,30,,7,1,0x01000000,7,2,34,1,10,1,17,{ bonus bHit,-10; },{},{}
13101,Six_Shooter_,Six Shooter,4,4500,,400,30,,7,2,0x01000000,7,2,34,1,10,1,17,{ bonus bHit,-10; },{},{}
@@ -5590,38 +5600,37 @@
13257,Kunai_Of_Furious_Wind,High Wind Kunai,10,10,,20,30,,,,0x02000000,7,2,32768,,1,,7,{ bonus bAtkEle,Ele_Wind; },{},{}
13258,Kunai_Of_Fierce_Flame,Heat Wave Kunai,10,10,,20,30,,,,0x02000000,7,2,32768,,1,,7,{ bonus bAtkEle,Ele_Fire; },{},{}
13259,Kunai_Of_Deadly_Poison,Fell Poison Kunai,10,10,,20,30,,,,0x02000000,7,2,32768,,1,,7,{ bonus bAtkEle,Ele_Poison; bonus2 bAddEff,Eff_Poison,500; },{},{}
-// TODO: Update job for Cenetics only
-13260,Apple_Bomb,Apple Bomb,10,100,,1,0,,,,0x0000000,7,2,32768,,99,,7,{},{},{}
-13261,Coconut_Bomb,Coconut Bomb,10,100,,1,0,,,,0x0000000,7,2,32768,,99,,7,{},{},{}
-13262,Melon_Bomb,Melon Bomb,10,100,,1,0,,,,0x0000000,7,2,32768,,99,,7,{},{},{}
-13263,Pineapple_Bomb,Pineapple Bomb,10,100,,1,0,,,,0x0000000,7,2,32768,,99,,7,{},{},{}
-13264,Banana_Bomb,Banana Bomb,10,100,,1,0,,,,0x0000000,7,2,32768,,99,,7,{},{},{}
-13265,Black_Lump,Black Lump,10,100,,50,0,,,,0x0000000,7,2,32768,,99,,7,{},{},{}
-13266,Black_Hard_Lump,Black Hard Lump,10,100,,50,0,,,,0x0000000,7,2,32768,,99,,7,{},{},{}
-13267,Very_Hard_Lump,Very Hard Lump,10,100,,50,0,,,,0x0000000,7,2,32768,,99,,7,{},{},{}
-13268,Mysterious_Powder,Mysterious Powder,10,100,,10,0,,,,0x0000000,7,2,32768,,99,,7,{},{},{}
-13269,Throwing_Boost500,Throwing Boost500,10,100,,10,0,,,,0x0000000,7,2,32768,,99,,7,{},{},{}
-13270,Full_SwingK_Throw,Full SwingK Throw,10,100,,50,0,,,,0x0000000,7,2,32768,,99,,7,{},{},{}
-13271,Mana_Plus_to_Throw,Mana + Throw,10,100,,50,0,,,,0x0000000,7,2,32768,,99,,7,{},{},{}
-13272,Cure_Free_Throw,Cure Free Throw,10,100,,50,0,,,,0x0000000,7,2,32768,,99,,7,{},{},{}
-13273,Stamina_Up_M_To_Throw,Stamina Up M To Throw,10,100,,10,0,,,,0x0000000,7,2,32768,,99,,7,{},{},{}
-13274,Digestive_F_To_Throw,Digestive Up F To Throw,10,100,,10,0,,,,0x0000000,7,2,32768,,99,,7,{},{},{}
-13275,HP_Inc_PotS_To_Throw,HP Increase Potion(Small) Throw,10,100,,20,0,,,,0x0000000,7,2,32768,,99,,7,{},{},{}
-13276,HP_Inc_PotM_To_Throw,HP Increase Potion(Mid) Throw,10,100,,40,0,,,,0x0000000,7,2,32768,,99,,7,{},{},{}
-13277,HP_Inc_PotL_To_Throw,HP Increase Potion(Large) Throw,10,100,,80,0,,,,0x0000000,7,2,32768,,99,,7,{},{},{}
-13278,SP_Inc_PotS_To_Throw,HP_Increase Potion(Small) Throw,10,100,,20,0,,,,0x0000000,7,2,32768,,99,,7,{},{},{}
-13279,SP_Inc_PotM_To_Throw,SP_Increase Potion(Mid) Throw,10,100,,40,0,,,,0x0000000,7,2,32768,,99,,7,{},{},{}
-13280,SP_Inc_PotL_To_Throw,SP_Increase Potion(Large) Throw,10,100,,80,0,,,,0x0000000,7,2,32768,,99,,7,{},{},{}
-13281,En_White_PotZ_To_Throw,Enriched White PotionZ Throw,10,100,,70,0,,,,0x0000000,7,2,32768,,99,,7,{},{},{}
-13282,Vitata500_To_Throw,Vitata50 Throw0,10,100,,50,0,,,,0x0000000,7,2,32768,,99,,7,{},{},{}
-13283,En_Cel_Juice_To_Throw,Enrich Celermine Juice Throw,10,100,,50,0,,,,0x0000000,7,2,32768,,99,,7,{},{},{}
-13284,Savage_BBQ_To_Throw,Savage BBQ Throw,10,100,,50,0,,,,0x0000000,7,2,32768,,99,,7,{},{},{}
-13285,Wug_Cocktail_To_Throw,Wug Cocktail To Throw,10,100,,50,0,,,,0x0000000,7,2,32768,,99,,7,{},{},{}
-13286,M_Brisket_To_Throw,Brisket To Throw,10,100,,50,0,,,,0x0000000,7,2,32768,,99,,7,{},{},{}
-13287,Siroma_Iced_Tea_To_Throw,Siroma Iced Tea To Throw,10,100,,50,0,,,,0x0000000,7,2,32768,,99,,7,{},{},{}
-13288,Drosera_Stew_To_Throw,Drosera Stew To Throw,10,100,,50,0,,,,0x0000000,7,2,32768,,99,,7,{},{},{}
-13289,Petite_Noodle_To_Throw,Petite Noodle To Throw,10,100,,50,0,,,,0x0000000,7,2,32768,,99,,7,{},{},{}
-13290,Black_Thing_To_Throw,Black Thing To Throw,10,100,,50,0,,,,0x0000000,7,2,32768,,99,,7,{},{},{}
+13260,Apple_Bomb,Apple Bomb,17,10,,1,100,,,,0xFFFFFFFF,7,2,32768,,1,,9,{},{},{}
+13261,Coconut_Bomb,Coconut Bomb,17,1,,10,100,,,,0xFFFFFFFF,7,2,32768,,1,,9,{},{},{}
+13262,Melon_Bomb,Melon Bomb,17,10,,1,100,,,,0xFFFFFFFF,7,2,32768,,1,,9,{},{},{}
+13263,Pineapple_Bomb,Pineapple Bomb,17,10,,1,100,,,,0xFFFFFFFF,7,2,32768,,1,,9,{},{},{}
+13264,Banana_Bomb,Banana Bomb,17,10,,1,100,,,,0xFFFFFFFF,7,2,32768,,1,,9,{},{},{}
+13265,Black_Lump,Black Lump,17,10,,50,100,,,,0xFFFFFFFF,7,2,32768,,1,,9,{},{},{}
+13266,Hard_Black_Lump,Hard Black Lump,17,10,,50,100,,,,0xFFFFFFFF,7,2,32768,,1,,9,{},{},{}
+13267,Extremely_Hard_Black_Lump,Extremely Hard Black Lump,17,10,,50,100,,,,0xFFFFFFFF,7,2,32768,,1,,9,{},{},{}
+13268,Mysterious_Powder,Mysterious Powder,17,10,,10,100,,,,0xFFFFFFFF,7,2,32768,,1,,9,{ sc_start SC_MYSTERIOUS_POWDER,10000,2; },{},{}
+13269,Throwing_Boost_500,Throwing Boost 500,17,10,,100,0,,,,0xFFFFFFFF,7,2,32768,,1,,9,{},{},{}
+13270,Throwing_Full_Swing_K,Throwing Full Swing K,17,10,,100,0,,,,0xFFFFFFFF,7,2,32768,,1,,9,{},{},{}
+13271,Throwing_Manaplus,Throwing Manaplus,17,10,,100,0,,,,0xFFFFFFFF,7,2,32768,,1,,9,{},{},{}
+13272,Throwing_Cure_Free,Throwing Cure Free,17,10,,100,0,,,,0xFFFFFFFF,7,2,32768,,1,,9,{},{},{}
+13273,Throwing_Muramura_M,Throwing Muramura M,17,10,,100,0,,,,0xFFFFFFFF,7,2,32768,,1,,9,{},{},{}
+13274,Throwing_Falmons_F,Throwing Falmons F,17,10,,100,0,,,,0xFFFFFFFF,7,2,32768,,1,,9,{},{},{}
+13275,Throwing_Increase_HP_Potion_(Small),Throwing Increase HP Potion (Small),17,10,,100,0,,,,0xFFFFFFFF,7,2,32768,,1,,9,{ sc_start SC_INCMHPRATE,500000,1; itemheal 840,0; },{},{}
+13276,Throwing_Increase_HP_Potion_(Medium),Throwing Increase HP Potion (Medium),17,10,,100,0,,,,0xFFFFFFFF,7,2,32768,,1,,9,{ sc_start SC_INCMHPRATE,500000,2; itemheal 1040,0; },{},{}
+13277,Throwing_Increase_HP_Potion_(Large),Throwing Increase HP Potion (Large),17,10,,100,0,,,,0xFFFFFFFF,7,2,32768,,1,,9,{ sc_start SC_INCMHPRATE,500000,5; itemheal 1240,0; },{},{}
+13278,Throwing_Increase_SP_Potion_(Small),Throwing Increase SP Potion (Small),17,10,,100,0,,,,0xFFFFFFFF,7,2,32768,,1,,9,{ sc_start SC_INCMSPRATE,500000,2; itemheal 0,200; },{},{}
+13279,Throwing_Increase_SP_Potion_(Medium),Throwing Increase SP Potion (Medium),17,10,,100,0,,,,0xFFFFFFFF,7,2,32768,,1,,9,{ sc_start SC_INCMSPRATE,500000,4; itemheal 0,300; },{},{}
+13280,Throwing_Increase_SP_Potion_(Large),Throwing Increase SP Potion (Large),17,10,,100,0,,,,0xFFFFFFFF,7,2,32768,,1,,9,{ sc_start SC_INCMSPRATE,500000,8; itemheal 0,400; },{},{}
+13281,Throwing_Concentrated_White_Potion_Z,Throwing Concentrated White Potion Z,17,10,,100,0,,,,0xFFFFFFFF,7,2,32768,,1,,9,{},{},{}
+13282,Throwing_Vitata_500,Throwing Vitata 500,17,10,,100,0,,,,0xFFFFFFFF,7,2,32768,,1,,9,{},{},{}
+13283,Throwing_Ceromain_Soup,Throwing Ceromain Soup,17,10,,100,0,,,,0xFFFFFFFF,7,2,32768,,1,,9,{},{},{}
+13284,Throwing_Savage_Full_Roast,Throwing Savage Full Roast,17,10,,100,0,,,,0xFFFFFFFF,7,2,32768,,1,,9,{},{},{}
+13285,Throwing_Cocktail_Warg_Blood,Throwing Cocktail Warg Blood,17,10,,100,0,,,,0xFFFFFFFF,7,2,32768,,1,,9,{},{},{}
+13286,Throwing_Minor_Stew,Throwing Minor Stew,17,10,,100,0,,,,0xFFFFFFFF,7,2,32768,,1,,9,{},{},{}
+13287,Throwing_Siroma_Iced_Tea,Throwing Siroma Iced Tea,17,10,,100,0,,,,0xFFFFFFFF,7,2,32768,,1,,9,{},{},{}
+13288,Throwing_Drosera_Herb_Salad,Throwing Drosera Herb Salad,17,10,,100,0,,,,0xFFFFFFFF,7,2,32768,,1,,9,{},{},{}
+13289,Throwing_Petite_Tail_Soup,Throwing Petite Tail Soup,17,10,,100,0,,,,0xFFFFFFFF,7,2,32768,,1,,9,{},{},{}
+13290,Throwing_Black_Mass,Throwing Black Mass,17,10,,100,0,,,,0xFFFFFFFF,7,2,32768,,1,,9,{},{},{}
// Ninja Fuuma Shurikens
13300,Huuma_Bird_Wing,Huuma Wing Shuriken,4,90000,,3000,150,,1,0,0x02000000,7,2,34,4,65,1,22,{ bonus bUnbreakableWeapon,0; bonus bAtkEle,Ele_Wind; bonus bDex,-2; bonus bAgi,-1; },{},{}
13301,Huuma_Giant_Wheel,Huuma Giant Wheel Shuriken,4,40000,,2500,50,,1,3,0x02000000,7,2,34,4,42,1,22,{ bonus bUnbreakableWeapon,0; bonus2 bAddEff,Eff_Bleeding,100; },{},{}
@@ -5630,7 +5639,7 @@
13304,Huuma_Calm_Mind,Huuma Calm Mind,4,20,,1550,112,,1,2,0x02000000,7,2,34,3,70,1,22,{ bonus bUnbreakableWeapon,0; bonus2 bSkillAtk,"NJ_HUUMA",30; bonus bNoCastCancel,0; },{},{}
13305,BF_Huuma_Shuriken1,Brave Huuma Front Shuriken,4,20,,0,55,,1,0,0x02000000,7,2,34,3,80,1,22,{ bonus bStr,2; bonus bDex,1; bonus2 bAddRace,RC_DemiHuman,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus bUnbreakableWeapon,0; },{},{}
13306,BF_Huuma_Shuriken2,Valorous Huuma Front Shuriken,4,20,,0,55,,1,0,0x02000000,7,2,34,3,80,1,22,{ bonus bStr,2; bonus bDex,1; bonus2 bAddRace,RC_DemiHuman,95; autobonus "{ bonus2 bSkillAtk,\"NJ_HUUMA\",100; bonus2 bSkillAtk,\"NJ_ISSEN\",100; }",50,10000,BF_WEAPON,"{specialeffect2 EF_POTION_BERSERK; }"; bonus bUnbreakableWeapon,0; },{},{}
-13307,Krieger_Huuma_Shuriken1,Glorious Shuriken,4,20,,0,55,,1,0,0x02000000,7,2,34,4,80,1,22,{ bonus bWeaponMatk,90; bonus2 bAddRace,RC_DemiHuman,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; autobonus "{ bonus2 bSkillAtk,\"NJ_HUUMA\",10; bonus2 bSkillAtk,\"NJ_ISSEN\",10; }",50,10000; bonus bUnbreakableWeapon,0; if(getrefine() > 5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-3)*(getrefine()-3); bonus2 bIgnoreDefRate,RC_DemiHuman,5; } if(getrefine() > 8) { bonus5 bAutoSpellOnSkill,"NJ_ISSEN","AL_HEAL",10,1000,1; bonus4 bAutoSpellOnSkill,"NJ_HUUMA","NPC_CRITICALWOUND",2,200; } },{},{}
+13307,Krieger_Huuma_Shuriken1,Glorious Shuriken,4,20,,0,55,,1,0,0x02000000,7,2,34,4,80,1,22,{ bonus2 bAddRace,RC_DemiHuman,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus bMatkRate,15; autobonus "{ bonus2 bSkillAtk,\"NJ_HUUMA\",10; bonus2 bSkillAtk,\"NJ_ISSEN\",10; }",50,10000; bonus bUnbreakableWeapon,0; if(getrefine() > 5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-3)*(getrefine()-3); bonus2 bIgnoreDefRate,RC_DemiHuman,5; } if(getrefine() > 8) { bonus5 bAutoSpellOnSkill,"NJ_ISSEN","AL_HEAL",10,1000,1; bonus4 bAutoSpellOnSkill,"NJ_HUUMA","NPC_CRITICALWOUND",2,200; } },{},{}
13308,Huuma_Blaze_I,Huuma Blaze Shuriken,4,0,,0,230,,1,0,0x02000000,7,2,34,4,0,0,22,{ bonus bUnbreakableWeapon,0; bonus bAtkEle,Ele_Fire; bonus bDex,2; },{},{}
13309,Huuma_Giant_Wheel_C,Huuma Giant Wheel Shuriken,4,0,,0,99,,1,0,0x02000000,7,2,34,4,1,0,22,{},{},{}
13400,Cutlas_,Cutlus,4,20,,900,150,,1,1,0x000654E2,7,2,2,4,40,1,2,{ skill "SM_BASH",5; bonus bStr,2; bonus bDef,1; },{},{}
@@ -5644,14 +5653,14 @@
13408,Fire_Brand_C,Refined Fireblend,4,1,,0,120,,1,0,0x000654E2,7,2,2,4,0,0,2,{ bonus bAtkEle,Ele_Fire; bonus bInt,2; skill "MG_FIREBOLT",5; bonus3 bAutoSpell,"MG_FIREBOLT",5,100; },{},{}
13409,Immaterial_Sword_C,Refined Immaterial Sword,4,1,,0,160,,1,0,0x000654E2,7,2,2,4,0,0,2,{ bonus bAtkEle,Ele_Ghost; bonus2 bSPVanishRate,45,30; bonus bSPDrainValue,-1; bonus bUnbreakableWeapon,0; },{},{}
13410,BF_Sword1,Valorous Gladiator Blade,4,20,,0,115,,1,0,0x000654E3,7,2,2,3,80,1,2,{ bonus bStr,1; bonus bDex,1; bonus2 bAddRace,RC_DemiHuman,75; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus bUnbreakableWeapon,0; },{},{}
-13411,BF_Sword2,Brave Gladiator Blade,4,20,,0,115,,1,0,0x000654E3,7,2,2,3,80,1,2,{ bonus bWeaponMatk,74; bonus bStr,1; bonus bDex,1; bonus2 bAddRace,RC_DemiHuman,75; bonus bUnbreakableWeapon,0; },{},{}
+13411,BF_Sword2,Brave Gladiator Blade,4,20,,0,115,,1,0,0x000654E3,7,2,2,3,80,1,2,{ bonus bStr,1; bonus bDex,1; bonus2 bAddRace,RC_DemiHuman,75; bonus bMatkRate,10; bonus bUnbreakableWeapon,0; },{},{}
13412,Twin_Edge_B,Twin Edge of Naght Sieger,4,20,,1500,150,,1,3,0x000654E2,2,2,2,4,75,1,2,{ bonus bAtkEle,Ele_Water; skill "MG_FROSTDIVER",5; autobonus "{ bonus bIgnoreDefRace,RC_NonBoss; }",50,5000; },{},{}
13413,Twin_Edge_R,Twin Edge of Naght Sieger,4,20,,1500,160,,1,3,0x000654E2,2,2,2,4,75,1,2,{ bonus bAtkEle,Ele_Fire; skill "WZ_METEOR",3; autobonus "{ bonus bIgnoreDefRace,RC_NonBoss; }",50,5000; },{},{}
-13414,Elemental_Sword,Elemental Sword,4,20,,1200,105,,1,3,0x000654E2,2,2,2,3,70,1,2,{ bonus bWeaponMatk,95; bonus bStr,2; bonus bInt,4; bonus bDex,1; bonus2 bAddEle,Ele_Neutral,10; bonus3 bAutoSpell,"MG_COLDBOLT",3,50; bonus4 bAutoSpellOnSkill,"MG_COLDBOLT","MG_FIREBOLT",3,1000; bonus4 bAutoSpellOnSkill,"MG_FIREBOLT","MG_LIGHTNINGBOLT",3,10000; bonus4 bAutoSpellOnSkill,"MG_LIGHTNINGBOLT","WZ_EARTHSPIKE",3,10000; },{},{}
+13414,Elemental_Sword,Elemental Sword,4,20,,1200,105,,1,3,0x000654E2,2,2,2,3,70,1,2,{ bonus bStr,2; bonus bInt,4; bonus bDex,1; bonus bMatkRate,5; bonus2 bAddEle,Ele_Neutral,10; bonus3 bAutoSpell,"MG_COLDBOLT",3,50; bonus4 bAutoSpellOnSkill,"MG_COLDBOLT","MG_FIREBOLT",3,1000; bonus4 bAutoSpellOnSkill,"MG_FIREBOLT","MG_LIGHTNINGBOLT",3,10000; bonus4 bAutoSpellOnSkill,"MG_LIGHTNINGBOLT","WZ_EARTHSPIKE",3,10000; },{},{}
13415,N_Falchion,Novice Falchion,4,0,,0,59,,1,3,0x000654E3,7,2,2,1,2,0,2,{},{},{}
13416,Krieger_Onehand_Sword1,Glorious Flamberge,4,20,,0,130,,1,0,0x000654E3,7,2,2,4,80,1,2,{ bonus2 bAddRace,RC_DemiHuman,75; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus bUnbreakableWeapon,0; if(getrefine() > 5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; } if(getrefine() > 6) bonus bAspdRate,5; if(getrefine() > 8) { bonus bAspdRate,5; bonus4 bAutoSpellOnSkill,"SM_BASH","NPC_CRITICALWOUND",2,200; } },{},{}
-13417,Krieger_Onehand_Sword2,Glorious Rapier,4,20,,0,130,,1,0,0x000654E3,7,2,2,4,80,1,2,{ bonus bWeaponMatk,80; bonus bInt,getrefine()-5; bonus bUnbreakableWeapon,0; if(getrefine() > 5) bonus bUseSPrate,-10; if(getrefine() > 8) bonus bInt,5; },{},{}
-13418,Krieger_Onehand_Sword3,Glorious Holy Avenger,4,20,,0,130,,1,0,0x000444A2,7,2,2,4,80,1,2,{ bonus bWeaponMatk,80; bonus bInt,getrefine()-5; bonus bUnbreakableWeapon,0; if(getrefine() > 5) bonus bUseSPrate,-10; if(getrefine() > 8) bonus4 bAutoSpellOnSkill,"PA_PRESSURE","PR_LEXDIVINA",1,1000; if(getrefine() > 9) bonus bInt,5; },{},{}
+13417,Krieger_Onehand_Sword2,Glorious Rapier,4,20,,0,130,,1,0,0x000654E3,7,2,2,4,80,1,2,{ bonus bInt,getrefine()-5; bonus bMatkRate,10; bonus bUnbreakableWeapon,0; if(getrefine() > 5) bonus bUseSPrate,-10; if(getrefine() > 8) bonus bInt,5; },{},{}
+13418,Krieger_Onehand_Sword3,Glorious Holy Avenger,4,20,,0,130,,1,0,0x000444A2,7,2,2,4,80,1,2,{ bonus bInt,getrefine()-5; bonus bMatkRate,10; bonus bUnbreakableWeapon,0; if(getrefine() > 5) bonus bUseSPrate,-10; if(getrefine() > 8) bonus4 bAutoSpellOnSkill,"PA_PRESSURE","PR_LEXDIVINA",1,1000; if(getrefine() > 9) bonus bInt,5; },{},{}
13419,Holy_Saber,Holy saber,4,20,,0,160,,1,0,0x000654E2,7,2,2,3,0,0,2,{},{},{}
13420,Honglyun's_Sword,Honglyun's Sword,4,20,,1200,160,,1,1,0x000654E2,7,2,2,4,70,1,2,{ bonus bAtkEle,Ele_Fire; bonus bStr,2; bonus bInt,2; },{},{}
13421,Ruber,Ruber,4,20,,1500,170,,1,1,0x000444A2,2,2,2,3,50,1,2,{ autobonus "{ bonus2 bSkillAtk,\"KN_BOWLINGBASH\",20; bonus2 bSkillAtk,\"SM_BASH\",20; }",5,15000,BF_WEAPON,"{ specialeffect2 EF_ENHANCE; }"; },{},{}
@@ -6094,15 +6103,15 @@
//13925,Year_Of_Mouse_Scroll,... GoodLuck Scroll,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
13926,Crusader_Card_Box,Crusader Card Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 4371,1; getitem 4311,1; getitem 4319,1; getitem 4331,1; },{},{}
13927,Alchemist_Card_Box,Alchemist Card Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 4281,1; getitem 4233,1; getitem 4343,1; getitem 4186,1; getitem 4036,1; },{},{}
-13928,Rogue_Card_Box,Bard Dancer Card Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 4039,1; getitem 4210,1; getitem 4257,1; getitem 4230,1; getitem 4348,1; },{},{}
-13929,Bard_Dancer_Card_Box,Rogue Card Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 4297,1; getitem 4234,1; getitem 4178,1; getitem 4381,1; getitem 4252,1; },{},{}
+13928,Rogue_Card_Box,Rogue Card Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 4039,1; getitem 4210,1; getitem 4257,1; getitem 4230,1; getitem 4348,1; },{},{}
+13929,Bard_Dancer_Card_Box,Bard Dancer Card Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 4297,1; getitem 4234,1; getitem 4178,1; getitem 4381,1; getitem 4252,1; },{},{}
13930,Sage_Card_Box,Sage card box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 4382,1; getitem 4258,1; getitem 4325,1; getitem 4208,1; getitem 4327,1; },{},{}
13931,Monk_Card_Box,Monk Card Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 4312,1; getitem 4332,1; getitem 4185,1; getitem 4293,1; },{},{}
13932,Sylph_Box,Sylph Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 4345,4; },{},{}
13933,Undine_Box,Undine Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 4350,4; },{},{}
13934,Salamander_Box,Salamander Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 4380,4; },{},{}
13935,Soul_Box,Soul Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 4388,4; },{},{}
-13936,Noum_Bpx,Gnome Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 4335,4; },{},{}
+13936,Noum_Box,Gnome Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 4335,4; },{},{}
13937,Robo_Eye_Box,Robo Eye Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 5325,1; },{},{}
13938,Twin_Ribbon_Box,Maiden's Twin Ribbon Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 5187,1; },{},{}
//13939,Diadem_Box,Diadem Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 5313,1; },{},{}
@@ -6599,7 +6608,7 @@
14609,Spoiled_Cuisine,Spoiled Cuisine,2,0,,0,,,,,0xFFFFFFFF,7,2,,,,,,{ percentheal 10,10; },{},{}
15000,Bone_Plate,Bone Plate,5,20,,1000,,7,,1,0x00021040,2,2,16,,85,1,0,{ bonus bStr,1; bonus bMdef,3; bonus2 bIgnoreDefRate,RC_DemiHuman,10; bonus2 bIgnoreDefRate,RC_Brute,10; bonus3 bAutoSpellWhenHit,"NPC_WIDEBLEEDING",1,10; },{},{}
15001,Odin's_Blessing_I,Odin's Blessing,5,0,,0,,10,,0,0xFFFFFFFE,7,2,16,,0,0,0,{},{},{}
-15002,Rune_Plate,Rune Plate,5,0,,0,,95,,1,0x00000000,7,2,16,,99,1,0,{ bonus bmaxSPRate,2; },{},{}
+15002,Rune_Plate,Rune Plate,5,0,,0,,95,,1,0x00000000,7,2,16,,99,1,0,{},{},{}
//15003,Freyja_SRobe7,Freyja SRobe7,5,0,,300,,7,,0,0xFFFFFFFF,7,2,16,,20,0,0,{},{},{}
//15004,Freyja_SRobe30,Freyja SRobe30,5,0,,300,,7,,0,0xFFFFFFFF,7,2,16,,20,0,0,{},{},{}
//15005,Freyja_SRobe60,Freyja SRobe60,5,0,,300,,7,,0,0xFFFFFFFF,7,2,16,,20,0,0,{},{},{}
@@ -6609,7 +6618,7 @@
15009,Para_Team_Uniform1,Eden Team Uniform I,5,0,,0,,35,,0,0xFFFFFFFF,7,2,16,,12,0,0,{ bonus bMaxHP,100; bonus bMaxSP,10; },{},{}
15010,Para_Team_Uniform2,Eden Team Uniform II,5,0,,0,,46,,0,0xFFFFFFFF,7,2,16,,26,0,0,{ bonus bMaxHP,200; bonus bMaxSP,20; },{},{}
15011,Para_Team_Uniform3,Eden Team Uniform III,5,0,,0,,58,,0,0xFFFFFFFF,7,2,16,,40,0,0,{ bonus bMaxHP,300; bonus bMaxSP,30; bonus bMdef,5; },{},{}
-15012,Puente_Robe,Puente Robe,5,12000,,400,,42,,1,0xFFFFFFFF,7,2,16,,22,1,0,{ bonus bFixedCastRate,-3; },{},{}
+15012,Puente_Robe,Puente Robe,5,12000,,400,,42,,1,0xFFFFFFFF,7,2,16,,22,1,0,{ /* bonus bFixedCastRate,-30; */ },{},{}
15013,Claire_Suits,Claire Suits,5,28000,,2800,,58,,1,0xFFFFFFFE,2,2,16,,22,1,0,{},{},{}
15014,Ebone_Armor,Ebon Armor,5,40000,,4500,,93,,1,0x00000000,7,2,16,,100,1,0,{},{},{}
15015,Upg_Adv_Suit,Upg Adv Suit,5,20,,150,,25,,1,0xFFFFFFFF,7,2,16,,1,1,0,{},{},{}
@@ -6650,7 +6659,7 @@
16007,Mjolnir_C,Mjolnir,4,20,,0,250,,1,0,0x000444A2,7,2,2,4,95,0,8,{ bonus bAtkEle,Ele_Wind; bonus bStr,15; bonus bDex,40; },{},{}
16008,F_Spanner_C,Spanner,4,2,,0,150,,1,0,0x00008110,7,2,2,3,0,0,8,{},{},{}
16009,E_Spanner_C,Spanner,4,2,,0,150,,1,0,0x00008110,7,2,2,3,0,0,8,{},{},{}
-16010,Red_Ether_Bag,Red Ether Bag,4,20,,0,15,,1,1,0x0004C5B2,7,2,2,3,102,1,8,{ bonus bWeaponMatk,100; },{},{}
+16010,Red_Ether_Bag,Red Ether Bag,4,20,,0,15,,1,1,0x0004C5B2,7,2,2,3,102,1,8,{ /* bonus bMatk,100; */ },{},{}
//
16134,King_Frog_Hat_Box,Frog King Hat Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 5528,1; },{},{}
16135,Evil's_Bone_Hat_Box,Satanic Bone Helm Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 5529,1; },{},{}
@@ -6736,16 +6745,16 @@
16776,Universal_Catalog_Gold_Box10,Universal Catalog Gold 10 Box,2,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 12581,10; },{},{}
16777,Universal_Catalog_Gold_Box50,Universal Catalog Gold 50 Box,2,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 12581,50; },{},{}
16998,Archangel_Wings_Box,Archangel Wings Box,2,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 2573,1; },{},{}
-// TODO: Update job for Mechanic only.
-18000,Cannon_Ball,Cannon Ball,10,100,,10,100,,,,0x000A1848,7,2,32768,,1,,1,{},{},{}
-18001,Holy_Cannon_Ball,Holy Cannon Ball,10,200,,100,120,,,,0x000A1848,7,2,32768,,1,,1,{},{},{}
-18002,Dark_Cannon_Ball,Dark Cannon Ball,10,200,,100,120,,,,0x000A1848,7,2,32768,,1,,1,{},{},{}
-18003,Soul_Cannon_Ball,Soul Cannon Ball,10,200,,100,120,,,,0x000A1848,7,2,32768,,1,,1,{},{},{}
-18004,Iron_Cannon_Ball,Iron Cannon Ball,10,500,,100,250,,,,0x000A1848,7,2,32768,,1,,1,{},{},{}
+//Mechanic Cannon Balls
+18000,Cannon_Ball,Cannon Ball,10,100,,10,100,,,,0x00000400,8,2,32768,,1,,8,{},{},{}
+18001,Holy_Cannon_Ball,Holy Cannon Ball,10,200,,100,120,,,,0x00000400,8,2,32768,,1,,8,{ bonus bAtkEle,Ele_Holy; },{},{}
+18002,Dark_Cannon_Ball,Dark Cannon Ball,10,200,,100,120,,,,0x00000400,8,2,32768,,1,,8,{ bonus bAtkEle,Ele_Dark; },{},{}
+18003,Soul_Cannon_Ball,Soul Cannon Ball,10,200,,100,120,,,,0x00000400,8,2,32768,,1,,8,{ bonus bAtkEle,Ele_Ghost; },{},{}
+18004,Iron_Cannon_Ball,Iron Cannon Ball,10,500,,100,250,,,,0x00000400,8,2,32768,,1,,8,{ bonus bAtkEle,Ele_Neutral; },{},{}
//18100,Shooting_Star_C,
18101,F_Bow_Of_Rudra_C,Rudra Bow,4,2,,0,185,,5,0,0x000A0848,7,2,34,4,0,0,11,{ bonus bAtkEle,Ele_Holy; bonus bInt,5; skill "AL_CURE",1; skill "AL_HEAL",1; bonus2 bResEff,Eff_Poison,5000; bonus2 bResEff,Eff_Curse,5000; bonus2 bResEff,Eff_Silence,5000; bonus2 bResEff,Eff_Confusion,5000; bonus2 bResEff,Eff_Blind,5000; },{},{}
18102,E_Bow_Of_Rudra_C,Rudra Bow,4,2,,0,185,,5,0,0x000A0848,7,2,34,4,0,0,11,{ bonus bAtkEle,Ele_Holy; bonus bInt,5; skill "AL_CURE",1; skill "AL_HEAL",1; bonus2 bResEff,Eff_Poison,5000; bonus2 bResEff,Eff_Curse,5000; bonus2 bResEff,Eff_Silence,5000; bonus2 bResEff,Eff_Confusion,5000; bonus2 bResEff,Eff_Blind,5000; },{},{}
-18103,Mystic_Bow,Mystic Bow,4,0,,1700,75,,5,0,0x000A0848,7,2,34,3,105,1,11,{ bonus bInt,4; },{},{}
+18103,Mystic_Bow,Mystic Bow,4,0,,1700,75,,5,0,0x00000400,8,2,34,3,105,1,11,{ bonus bInt,4; },{},{}
//18500,Cheer_Scarf6,
//18501,Cheer_Scarf8,
//18502,Cheer_Scarf10,
@@ -6754,7 +6763,6 @@
//18505,Umbala_Spirit,
//18506,Hattah_Black,
//18507,Elven_Ears_,
-//18580,Yggdrasil_Crown,Yggdrasil Crown,5,20,,200,,4,,0,0xFFFFFFF$,7,2,256,,70,1,724,{ bonus bVit,2; bonus bInt,2; bonus bHealPower,1+(getrefine()*((getrefine()<6)?1:2)); },{},{}
//19500,T_Mr_Smile
//19501,T_Spinx_Helm
//19502,T_Goggle
diff --git a/db/item_db_re.txt b/db/item_db_re.txt
new file mode 100644
index 000000000..86340e2d1
--- /dev/null
+++ b/db/item_db_re.txt
@@ -0,0 +1,304 @@
+// Renewal-Specific Database
+// specially for renewal-modified items, when compiled in RRMODE entries in this file override item_db.txt and are overriden by item_db2.txt
+//
+// Structure of Database:
+// ID,Name,Name,Type,Price,Sell,Weight,ATK:MATK,DEF,Range,Slot,Job,Upper,Gender,Loc,wLV,eLV,Refineable,View,{ Script },{ OnEquip_Script },{ OnUnequip_Script }
+//
+// Note (ATK field)
+// - in RE this field is able to store a optional value, for the weapons' matk
+// - You may use, for example: 10:25 for a item to give 10 atk and 25 weapon matk.
+
+//ASPD in RE they give a fixed +4/+6/+9 ASPD
+645,Center_Potion,Concentration Potion,2,800,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_ASPDPOTION0,1800000,4; },{},{}
+656,Awakening_Potion,Awakening Potion,2,1500,,150,,,,,0xFFF7FEEF,7,2,,,40,,,{ sc_start SC_ASPDPOTION1,1800000,6; },{},{}
+657,Berserk_Potion,Berserk Potion,2,3000,,200,,,,,0x01E646A6,7,2,,,85,,,{ sc_start SC_ASPDPOTION2,1800000,9; },{},{}
+
+// Matk updates. Work in progress.
+// Daggers
+13010,Asura,Asura,4,3000,,600,50:50,,1,2,0x02000000,7,2,2,1,12,1,1,{},{},{}
+13011,Asura_,Asura,4,3000,,600,50:50,,1,3,0x02000000,7,2,2,1,12,1,1,{},{},{}
+1231,Bazerald,Bazerald,4,20,,500,70:105,,1,0,0x028F5EEE,7,2,2,4,36,1,1,{ bonus bAtkEle,Ele_Fire; bonus bInt,5; },{},{}
+
+// Staffs
+1472,Staff_Of_Soul,Soul Staff,4,20,,1400,25:200,,1,0,0x00810204,7,2,34,3,73,1,10,{ bonus bInt,5; bonus bAgi,2; if(isequipped(2677) || isequipped(2711)){ bonus bMatkRate,6; bonus bDex,2; bonus bCastrate,-getrefine(); } },{},{}
+1601,Rod,Rod,4,50,,400,15:30,,1,3,0x00818315,7,2,2,1,1,1,10,{},{},{}
+1602,Rod_,Rod,4,50,,400,15:30,,1,4,0x00818315,7,2,2,1,1,1,10,{},{},{}
+1603,Rod__,Rod,4,50,,400,15:30,,1,0,0x00818315,7,2,2,1,1,1,10,{},{},{}
+1604,Wand,Wand,4,2500,,400,25:45,,1,2,0x00818315,7,2,2,2,12,1,10,{},{},{}
+1605,Wand_,Wand,4,2500,,400,25:45,,1,3,0x00818315,7,2,2,2,12,1,10,{},{},{}
+1606,Wand__,Wand,4,2500,,400,25:45,,1,0,0x00818315,7,2,2,2,12,1,10,{ bonus bInt,1; },{},{}
+1607,Staff,Staff,4,9500,,400,40:70,,1,2,0x00818314,7,2,2,2,12,1,10,{ bonus bInt,2; },{},{}
+1608,Staff_,Staff,4,9500,,400,40:70,,1,3,0x00818314,7,2,2,2,12,1,10,{ bonus bInt,2; },{},{}
+1609,Staff__,Staff,4,9500,,400,40:70,,1,0,0x00818314,7,2,2,2,12,1,10,{ bonus bInt,2; },{},{}
+1610,Arc_Wand,Arc Wand,4,45000,,400,60:95,,1,1,0x00818314,7,2,2,3,24,1,10,{ bonus bInt,3; },{},{}
+1611,Arc_Wand_,Arc Wand,4,45000,,400,60:95,,1,2,0x00818314,7,2,2,3,24,1,10,{ bonus bInt,3; },{},{}
+1612,Arc_Wand__,Arc Wand,4,45000,,400,60:95,,1,0,0x00818314,7,2,2,3,24,1,10,{ bonus bInt,3; },{},{}
+1613,Mighty_Staff,Mighty Staff,4,20,,700,130:100,,1,0,0x00818314,7,2,2,3,24,1,10,{ bonus bStr,10; bonus bSPDrainValue,-2; },{},{}
+1614,Blessed_Wand,Wand of Occult,4,20,,700,75:105,,1,0,0x00818314,7,2,2,3,24,1,10,{ bonus bInt,3; },{},{}
+1616,Staff_Of_Wing,Wing Staff,4,20,,500,60:115,,1,0,0x00810204,7,2,2,4,40,1,10,{ bonus bCastrate,-5; },{},{}
+1617,Survival_Rod,Survivor's Rod,4,85000,,1000,50:120,,1,0,0x00818314,7,2,2,3,24,1,10,{ bonus bDex,2; bonus bMaxHP,300; },{},{}
+1618,Survival_Rod_,Survivor's Rod,4,85000,,1000,50:120,,1,1,0x00818314,7,2,2,3,24,1,10,{ bonus bDex,3; bonus bMaxHP,400; },{},{}
+1619,Survival_Rod2,Survivor's Rod,4,85000,,1000,50:120,,1,0,0x00818314,7,2,2,3,24,1,10,{ bonus bInt,2; bonus bMaxHP,300; },{},{}
+1620,Survival_Rod2_,Survivor's Rod,4,85000,,1000,50:120,,1,1,0x00818314,7,2,2,3,24,1,10,{ bonus bInt,3; bonus bMaxHP,400; },{},{}
+1621,Hypnotist's_Staff,Hypnotist's Staff,4,43000,,500,70:120,,1,1,0x00000001,7,2,2,3,30,1,10,{ bonus bInt,1; },{},{}
+1622,Hypnotist's_Staff_,Hypnotist's Staff,4,20,,500,70:120,,1,2,0x00000001,7,2,2,3,30,1,10,{ bonus bInt,1; },{},{}
+1624,Lich_Bone_Wand,Lich's Bone Wand,4,20,,800,60:170,,1,2,0x00018314,2,2,2,3,70,1,10,{ bonus bInt,1; bonus bDex,1; bonus bAtkEle,Ele_Undead; bonus3 bAutoSpellWhenHit,"NPC_WIDECURSE",5,10+getrefine(); if(getrefine()>=9){ bonus bMatkRate,3; bonus bMaxSP,300; } },{},{}
+1625,Healing_Staff,Healing Staff,4,20,,400,10:105,,1,0,0x00008110,7,2,2,3,55,1,10,{ bonus bAtkEle,Ele_Holy; bonus bHealPower,(getrefine()*3/2); },{},{}
+1626,Piercing_Staff,Piercing Staff,4,20,,500,80:145,,1,0,0x00018314,2,2,2,3,70,1,10,{ bonus bInt,4; bonus bIgnoreMdefRate,10+getrefine(); },{},{}
+1629,Walking_Stick,Gentleman's Staff,4,20,,500,40:125,,1,1,0x00818314,7,2,2,4,50,1,10,{ bonus bDex,1; if (isequipped(5045)) { bonus bDex,2; bonus bInt,2; bonus bSPrecovRate,5; bonus bMatkRate,getrefine(); } },{},{}
+1630,Release_Of_Wish,Release of Wish,4,20,,500,30:125,,1,0,0x00810204,7,2,2,3,50,1,10,{ bonus bInt,3; bonus bHealPower,5; autobonus "{ bonus2 bSPRegenRate,100,2000; bonus2 bHPRegenRate,50,2000; }",10,10000,BF_MAGIC,"{ specialeffect2 EF_HEAL; }"; },{},{}
+1636,Thorn_Staff,Thorn Staff of Darkness,4,20,,700,60:160,,1,0,0x00018314,2,2,2,4,75,1,10,{ bonus bInt,3; bonus bDex,3; bonus bIgnoreMdefRate,getrefine(); bonus bDelayRate,-(getrefine()*3/2); },{},{}
+1637,Eraser,Eraser,4,20,,500,80:170,,1,0,0x00018314,2,2,2,4,70,1,10,{ bonus bInt,3; bonus bDex,2; bonus bSPrecovRate,8; if( getrefine() > 9 ) bonus5 bAutoSpell,"NPC_WIDESOULDRAIN",3,5,BF_MAGIC,0; else bonus5 bAutoSpell,"NPC_WIDESOULDRAIN",1,5,BF_MAGIC,0; },{},{}
+2000,Destruction_Rod,Staff of Destruction,4,20,,2500,130:280,,1,1,0x00000200,2,2,34,4,80,1,23,{ bonus bInt,3; bonus bAgi,10; bonus bUseSPrate,(getrefine()*2); bonus3 bAutoSpellWhenHit,"WZ_JUPITEL",5,(getrefine()*20); bonus2 bCastrate,366,-50; },{},{}
+2001,Divine_Cross,Divine Cross,4,20,,1500,120:210,,1,0,0x00008100,7,2,34,4,70,1,23,{ bonus bAtkEle,Ele_Holy; bonus bDex,4; bonus2 bSubRace,RC_Demon,15; bonus2 bSubRace,RC_Undead,15; if (isequipped(2677) || isequipped(2711)) { bonus bMatkRate,10; bonus bDex,2; bonus2 bSubRace,RC_Demon,10; bonus2 bSubRace,RC_Undead,10; }; },{},{}
+
+// Books
+1560,Diary_Of_Great_Sage,Sage's Diary,4,20,,1100,100:120,,1,2,0x00410100,7,2,2,3,60,1,15,{ if(readparam(bStr)>=50) bonus bAspdRate,5; if(readparam(bInt)>=70) bonus bMatkRate,5; },{},{}
+1561,Hardback,Hardcover Book,4,20,,1500,140,,1,1,0x00410100,7,2,2,4,55,1,15,{ bonus bStr,3; bonus bDex,2; },{},{}
+1572,Principles_Of_Magic,Principles of Magic,4,20,,300,60:160,,1,2,0x00410100,7,2,2,3,60,1,15,{ bonus bInt,3; bonus bSPrecovRate,5; },{},{}
+1573,Ancient_Magic,Ancient Magic,4,20,,700,30:140,,1,2,0x00410100,7,2,2,3,70,1,15,{ if (isequipped(2334) || isequipped(2372)) { bonus bMdef,8; bonus bMaxSPRate,10; bonus bInt,4; }; },{},{}
+1564,Encyclopedia,Encyclopedia,4,20,,2000,110:100,,1,2,0x00410100,7,2,2,3,70,1,15,{ bonus bInt,3; bonus bDex,2; bonus bCritical,20+((readparam(bLuk)*2)/10); },{},{}
+
+// DEF updates
+// Headgears - Work in progress.
+2208,Ribbon,Ribbon,5,800,,100,,1,,0,0xFFFFFFFF,7,0,256,,0,1,17,{ bonus bMdef,3; },{},{}
+2209,Ribbon_,Ribbon,5,800,,100,,1,,1,0xFFFFFFFF,7,0,256,,0,1,17,{ bonus bMdef,3; },{},{}
+2216,Biretta,Biretta,5,9000,,100,,8,,0,0x00008110,7,2,256,,0,1,11,{},{},{}
+2217,Biretta_,Biretta,5,9000,,100,,8,,1,0x00008110,7,2,256,,0,1,11,{},{},{}
+2252,Star_Sparkling,Wizard Hat,5,20,,300,,7,,0,0x00810204,7,2,256,,0,1,36,{ bonus bMaxSP,100; },{},{}
+2266,Iron_Cane,Iron Cain,5,20,,300,,4,,0,0x00004082,7,2,1,,50,0,53,{},{},{}
+2280,Sahkkat,Sakkat,5,20,,300,,4,,0,0xFFFFFFFF,7,2,256,,0,1,67,{ bonus bAgi,1; },{},{}
+2285,Apple_Of_Archer,Apple of Archer,5,20,,200,,1,,0,0xFFFFFFFE,7,2,256,,30,1,72,{ bonus bDex,3; },{},{}
+2287,Pirate_Bandana,Pirate Bandana,5,20,,100,,4,,0,0xFFFFFFFE,7,2,256,,0,1,74,{ bonus bStr,1; },{},{}
+2299,Viking_Helm,Orc Helm,5,20,,500,,9,,0,0x000654E2,7,2,256,,0,1,86,{},{},{}
+5007,Loard_Circlet,Grand Circlet,5,20,,200,,7,,0,0xFFFFFFFE,7,2,256,,55,1,93,{ bonus bStr,1; bonus bInt,1; bonus bLuk,1; bonus bMdef,4; },{},{}
+5010,Indian_Hair_Piece,Indian Fillet,5,20,,100,,5,,0,0xFFFFFFFF,7,2,256,,0,1,96,{},{},{}
+5015,Egg_Shell,Egg Shell,5,20,,200,,6,,0,0xFFFFFFFF,7,2,256,,0,0,101,{},{},{}
+5017,Bone_Helm,Bone Helm,5,20,,800,,15,,0,0x000444A2,7,2,256,,70,1,103,{ bonus2 bSubEle,Ele_Dark,-15; },{},{}
+5058,Drooping_Kitty,Drooping Cat,5,250000,,500,,3,,0,0xFFFFFFFE,7,2,256,,0,1,142,{ bonus bMdef,15; bonus2 bResEff,Eff_Curse,3000; },{},{}
+5111,Galapago_Cap,Galapago Cap,5,20,,500,,4,,0,0xFFFFFFFF,7,2,256,,55,1,192,{ bonus2 bAddMonsterDropItem,605,100; },{},{}
+5118,Ear_Of_Puppy,Puppy Headband,5,20,,100,,3,,0,0xFFFFFFFF,7,2,256,,0,1,199,{},{},{}
+5122,Magni_Cap,Magni's Cap,5,30000,,1000,,9,,0,0xFFFFFFFE,7,2,256,,65,1,250,{ bonus bStr,2; },{},{}
+5128,Goibne's_Helmet,Goibne's Helm,5,30000,,500,,10,,0,0xFFFFFFFE,7,2,256,,54,1,258,{ bonus bVit,3; bonus bMdef,3; if(isequipped(2354,2419,2520)) { bonus bVit,5; bonus bMaxHPrate,15; bonus bMaxSPrate,5; bonus bDef,5; bonus bMdef,15; bonus2 bSubEle,Ele_Water,10; bonus2 bSubEle,Ele_Earth,10; bonus2 bSubEle,Ele_Fire,10; bonus2 bSubEle,Ele_Wind,10; } },{},{}
+5157,Viking_Helm_,Orc Helm,5,20,,500,,9,,1,0x000654E2,7,2,256,,0,1,86,{},{},{}
+5350,Pirate_Bandana_,Pirate Bandana,5,20,,100,,4,,1,0xFFFFFFFE,7,2,256,,0,1,74,{ bonus bStr,1; },{},{}
+
+// Shields
+2101,Guard,Guard,5,500,,300,,20,,0,0xFFFFFFFF,7,2,32,,0,1,1,{},{},{}
+2102,Guard_,Guard,5,500,,300,,20,,1,0xFFFFFFFF,7,2,32,,0,1,1,{},{},{}
+2103,Buckler,Buckler,5,14000,,600,,40,,0,0x000ED5F2,7,2,32,,0,1,2,{},{},{}
+2104,Buckler_,Buckler,5,14000,,600,,40,,1,0x000ED5F2,7,2,32,,0,1,2,{},{},{}
+2105,Shield,Shield,5,56000,,1300,,60,,0,0x00004082,7,2,32,,0,1,3,{},{},{}
+2106,Shield_,Shield,5,56000,,1300,,60,,1,0x00004082,7,2,32,,0,1,3,{},{},{}
+2107,Mirror_Shield,Mirror Shield,5,60000,,1000,,45,,0,0x00404082,7,2,32,,0,1,4,{ bonus bMdef,5; },{},{}
+2108,Mirror_Shield_,Mirror Shield,5,60000,,1000,,45,,1,0x00404082,7,2,32,,0,1,4,{ bonus bMdef,5; },{},{}
+2109,Memorize_Book,Memory Book,5,20,,1000,,25,,0,0x00810204,7,2,32,,0,1,5,{ bonus bInt,1; bonus bMdef,2; if (isequipped(2717,2239)) { bonus bHPrecovRate,15; bonus bSPrecovRate,15; bonus bMatkRate,7; }; },{},{}
+2110,Holy_Guard,Holy Guard,5,85000,,1400,,110,,0,0x00004000,7,2,32,,68,0,4,{ bonus bVit,2; bonus bMdef,2; },{},{}
+2111,Herald_Of_GOD,Sacred Mission,5,128000,,1600,,120,,0,0x00004000,7,2,32,,83,1,4,{ bonus bVit,3; bonus bInt,2; bonus bMdef,3; bonus bUnbreakableShield,0; },{},{}
+2112,Novice_Guard,Novice Guard,5,1,,1,,20,,0,0x00000001,7,2,32,,0,0,1,{},{},{}
+2113,Novice_Shield,Novice Shield,5,5000,,1000,,20,,1,0x00000001,7,2,32,,40,1,3,{ bonus2 bSubEle,Ele_Water,20; bonus2 bSubEle,Ele_Earth,20; bonus2 bSubEle,Ele_Fire,20; bonus2 bSubEle,Ele_Wind,20; bonus2 bSubEle,Ele_Poison,20; bonus2 bSubEle,Ele_Ghost,20; bonus2 bSubEle,Ele_Undead,20; },{},{}
+2114,Stone_Buckler,Stone Buckler,5,30000,,1500,,45,,1,0xFFFFFFFE,7,2,32,,65,1,2,{ bonus2 bSubSize,2,5; if (isequipped(2353,5122)) { bonus bStr,2; bonus bDef,5; bonus bMdef,5; if(BaseClass == Job_Swordman) bonus bDef,6; } },{},{}
+2115,Valkyrja's_Shield,Valkyrja's Shield,5,30000,,500,,80,,1,0xFFFFFFFE,7,2,32,,65,1,4,{ bonus2 bSubEle,Ele_Water,20; bonus2 bSubEle,Ele_Fire,20; bonus2 bSubEle,Ele_Dark,20; bonus2 bSubEle,Ele_Undead,20; bonus bMdef,5; if(isequipped(2353,5124)) { bonus bDef,2-getrefine()-getequiprefinerycnt(EQI_HEAD_TOP); bonus bMdef,5+getrefine()+getequiprefinerycnt(EQI_HEAD_TOP); } },{},{}
+2116,Angel's_Safeguard,Angelic Guard,5,10000,,400,,30,,1,0x00000001,7,2,32,,20,1,1,{ bonus2 bSubRace,RC_Demon,5; },{},{}
+2117,Arm_Guard,Arm Guard,5,10000,,150,,50,,0,0x02000000,7,2,32,,20,1,1,{},{},{}
+2118,Arm_Guard_,Arm Guard,5,10000,,150,,50,,1,0x02000000,7,2,32,,20,1,1,{},{},{}
+2119,Improved_Arm_Guard,Advanced Arm Guard,5,40000,,150,,45,,0,0x02000000,7,2,32,,50,1,1,{ bonus bMdef,5; },{},{}
+2120,Improved_Arm_Guard_,Advanced Arm Guard,5,40000,,150,,45,,1,0x02000000,7,2,32,,50,1,1,{ bonus bMdef,5; },{},{}
+2121,Memorize_Book_,Memory Book,5,20,,1000,,25,,1,0x00810204,7,2,32,,0,1,5,{ bonus bInt,1; bonus bMdef,2; if (isequipped(2717,2239)) { bonus bHPrecovRate,15; bonus bSPrecovRate,15; bonus bMatkRate,7; }; },{},{}
+2122,Platinum_Shield,Platinum Shield,5,20,,1200,,95,,0,0xFFFFFFFE,2,2,32,,68,1,4,{ bonus bMdef,5; bonus2 bSubSize,1,15; bonus2 bSubSize,2,15; bonus2 bSubRace,RC_Undead,10; bonus5 bAutoSpellWhenHit,NPC_MAGICMIRROR,2,150,BF_MAGIC,0; },{},{}
+2123,Orleans_Server,Orleans's Server,5,20,,1000,,75,,1,0xFFFFFFFE,2,2,32,,55,1,4,{ bonus bMdef,2; bonus bMagicDamageReturn,5; if (isequipped(2701)) bonus bCastrate,-10; },{},{}
+2124,Thorny_Buckler,Thorny Buckler,5,20,,1000,,85,,1,0xFFFFFFFE,2,2,32,,55,1,2,{ bonus bMdef,2; if (isequipped(2702)) { bonus bAspdRate,10; bonus bShortWeaponDamageReturn,5; } },{},{}
+2125,Strong_Shield,Strong Shield,5,20,,2500,,90,,1,0xFFFFFFFE,2,2,32,,75,1,4,{ bonus bNoKnockback,0; bonus2 bSubEle,Ele_Neutral,-20; bonus2 bSubEle,Ele_Fire,-20; bonus2 bSubEle,Ele_Water,-20; bonus2 bSubEle,Ele_Wind,-20; bonus2 bSubEle,Ele_Earth,-20; bonus2 bSubEle,Ele_Dark,-20; bonus2 bSubEle,Ele_Holy,-20; bonus2 bSubEle,Ele_Ghost,-20; },{},{}
+2128,Herald_Of_GOD_,Sacred Mission,5,128000,,1600,,120,,1,0x00004000,7,2,32,,83,1,4,{ bonus bVit,3; bonus bInt,2; bonus bMdef,3; bonus bUnbreakableShield,0; },{},{}
+2129,Exorcism_Bible,Exorcism Bible,5,20,,600,,80,,0,0x00008100,7,2,32,,50,1,5,{ bonus bHPrecovRate,3; bonus bSPrecovRate,3; bonus bInt,1; if(isequipped(1631)) { bonus2 bSkillAtk,"PR_MAGNUS",20; bonus3 bAutoSpellWhenHit,"PR_TURNUNDEAD",1,20; } },{},{}
+2130,Cross_Shield,Cross Shield,5,20,,2000,,130,,1,0x00004000,7,2,32,,80,1,4,{ bonus bStr,1; bonus2 bSkillAtk,PA_SHIELDCHAIN,30; bonus2 bSkillAtk,CR_SHIELDBOOMERANG,30; bonus bUseSPrate,10; },{},{}
+2131,Magic_Study_Vol1,Magic Bible Vol1,5,20,,1000,,18,,1,0x00810204,2,2,32,,70,1,5,{ bonus bMdef,3; bonus bInt,2; bonus2 bAddEffWhenHit,Eff_Stun,1000; },{},{}
+2133,Tournament_Shield,Tournament Shield,5,20,,1000,,105,,1,0x00004082,2,2,32,,50,1,4,{ bonus2 bAddRace,RC_NonBoss,1; bonus2 bAddRace,RC_Boss,1; if( Class == Job_Lord_Knight ) bonus bAspdRate,-5; if( isequipped(1420) || isequipped(1421) || isequipped(1422) ) { bonus2 bAddRace,RC_NonBoss,4; bonus2 bAddRace,RC_Boss,4; bonus bDef,2; } },{},{}
+2134,Shield_Of_Naga,Shield of Naga,5,20,,500,,35,,1,0x00CFFF80,2,2,32,,70,1,2,{ bonus bMdef,3; autobonus2 "{ bonus bShortWeaponDamageReturn,(getrefine()*3); }",10,5000,BF_WEAPON,"{ specialeffect2 EF_GUARD; }"; },{},{}
+2135,Shadow_Guard,Shadow Guard,5,20,,800,,52,,1,0x00020000,2,2,32,,70,1,2,{ if( isequipped(2426) ) { bonus2 bAddEff,Eff_Blind,500; autobonus "{ bonus bFlee,20; }",200,10000,BF_WEAPON,"{ specialeffect2 EF_INCAGILITY; }"; } },{},{}
+2138,Bradium_Shield,Bradium Shield,5,20,,1800,,98,,1,0x00CFFF80,2,2,32,,65,1,3,{ bonus2 bSkillAtk,CR_SHIELDBOOMERANG,60; bonus bAgi,-1; bonus bMaxHP,500; },{},{}
+2139,Flame_Thrower,Flame Thrower,5,20000,,2000,,60,,0,0xFFFFFFFF,7,2,32,,99,0,1,{},{},{}
+
+// Footgear
+2401,Sandals,Sandals,5,400,,200,,5,,0,0xFFFFFFFF,7,2,64,,0,1,0,{},{},{}
+2402,Sandals_,Sandals,5,400,,200,,5,,1,0xFFFFFFFF,7,2,64,,0,1,0,{},{},{}
+2403,Shoes,Shoes,5,3500,,400,,10,,0,0xFFFFFFFE,7,2,64,,0,1,0,{},{},{}
+2404,Shoes_,Shoes,5,3500,,400,,10,,1,0xFFFFFFFE,7,2,64,,0,1,0,{},{},{}
+2405,Boots,Boots,5,18000,,600,,16,,0,0x016E5CEA,7,2,64,,0,1,0,{},{},{}
+2406,Boots_,Boots,5,18000,,600,,16,,1,0x016E5CEA,7,2,64,,0,1,0,{},{},{}
+2407,Chrystal_Pumps,Crystal Pumps,5,20,,100,,5,,0,0xFFFFFFFE,7,0,64,,0,1,0,{ bonus bMdef,10; bonus bLuk,5; },{},{}
+2408,Cuffs,Shackles,5,5000,,3000,,15,,0,0xFFFFFFFF,7,2,64,,0,1,0,{ if (isequipped(2655)) { bonus bBaseAtk,50; bonus2 bAddDefClass,1196,20; bonus2 bAddDefClass,1197,20; } },{},{}
+2409,Spiky_Heel,High Heels,5,8500,,600,,4,,0,0xFFFFFFFE,7,2,64,,0,1,0,{ bonus bMdef,5; },{},{}
+2410,Sleipnir,Sleipnir,5,20,,3500,,40,,0,0xFFFFFFFF,7,2,64,,94,0,0,{ bonus bMdef,10; bonus bMaxHPrate,20; bonus bMaxSPrate,20; bonus bSPrecovRate,15; bonus bSpeedRate,25; },{},{}
+2411,Grave,Greaves,5,48000,,750,,27,,0,0x00004080,7,2,64,,65,1,0,{},{},{}
+2412,Grave_,Greaves,5,54000,,750,,15,,1,0x00004080,7,2,64,,65,1,0,{},{},{}
+2414,Novice_Boots,Novice Slippers,5,1,,1,,5,,0,0x00000001,7,2,64,,0,0,0,{},{},{}
+2416,Novice_Shoes,Novice Shoes,5,35000,,500,,8,,1,0x00000001,7,2,64,,40,1,0,{ bonus bMaxHPrate,5; },{},{}
+2417,Fricco_Shoes,Fricco's Shoes,5,30000,,500,,12,,0,0xFFFFFFFE,7,2,64,,65,1,0,{ bonus bAgi,2; bonus2 bAddItemHealRate,IG_Potion,20; if(isequipped(2353,2516)){ bonus bAgi,3; bonus bMaxHPrate,5; bonus bMaxSPrate,5; } },{},{}
+2418,Vidar's_Boots,Vidar's Boots,5,30000,,650,,13,,0,0xFFFFFFFE,7,2,64,,65,1,0,{ bonus bMaxHPrate,9; bonus bMaxSPrate,9; if(isequipped(2353,2517)){ bonus bVit,5; bonus bHPrecovRate,10; bonus bSPrecovRate,10; } },{},{}
+2419,Goibne's_Combat_Boots,Goibne's Greaves,5,30000,,700,,13,,0,0xFFFFFFFE,7,2,64,,54,1,0,{ bonus bMdef,3; bonus bMaxHPrate,5; bonus bMaxSPrate,5; },{},{}
+2420,Angel's_Arrival,Angel's Reincarnation,5,10000,,300,,8,,1,0x00000001,7,2,64,,25,1,0,{ bonus bMaxHP,100; },{},{}
+2421,Valkyrie_Shoes,Valkyrian Shoes,5,0,,500,,13,,1,0xFFFFFFFE,2,2,64,,1,1,0,{ bonus bUnbreakableShoes,0; if(BaseClass==Job_Mage||BaseClass==Job_Archer||BaseClass==Job_Acolyte) bonus bMaxHP,(BaseLevel*5); else if(BaseClass==Job_Swordman||BaseClass==Job_Merchant||BaseClass==Job_Thief) bonus bMaxSP,(JobLevel*2); },{},{}
+2422,High_Fashion_Sandals,High Fashion Sandals,5,24000,,200,,7,,1,0x00818314,7,2,64,,40,1,0,{ bonus bMdef,10; },{},{}
+2423,Variant_Shoes,Variant Shoes,5,20,,500,,13,,0,0xFFFFFFFE,2,2,64,,85,1,0,{ bonus bMaxHPRate,20-getrefine(); bonus bMaxSPRate,20-getrefine(); bonus bDef,getrefine()/2; },{},{}
+2424,Tidal_Shoes,Tidal Shoes,5,20,,300,,13,,1,0xFFFFFFFE,2,2,64,,55,1,0,{ bonus2 bSubEle,Ele_Water,5; if (isequipped(2528)) { bonus bHPrecovRate,5; bonus bMaxHPrate,10; } },{},{}
+2425,Black_Leather_Boots,Black Leather Boots,5,20,,500,,16,,0,0xFFFFFFFE,2,2,64,,55,1,0,{ bonus bAgi,1; if(getrefine() >= 9) bonus bAgi,2; },{},{}
+2426,Shadow_Walk,Shadow Walk,5,20,,2000,,0,,0,0xFFFFFFFE,2,2,64,,75,1,0,{ bonus bMdef,10; if(getskilllv("AS_CLOAKING") < 3){ bonus5 bAutoSpellWhenHit,"AS_CLOAKING",3,100,BF_MAGIC,0; } else bonus5 bAutoSpellWhenHit,"AS_CLOAKING",getskilllv("AS_CLOAKING"),100,BF_MAGIC,0; },{},{}
+2432,Spiky_Heel_,High Heels,5,8500,,600,,10,,1,0xFFFFFFFE,7,2,64,,0,1,0,{ bonus bMdef,5; },{},{}
+2433,Diabolus_Boots,Diabolus Boots,5,20,,250,,15,,1,0x00CFFF80,2,2,64,,0,1,0,{ bonus bMaxHP,(BaseLevel*10); },{},{}
+2434,Black_Leather_Boots_,Black Leather Boots,5,20,,500,,16,,1,0xFFFFFFFE,2,2,64,,55,1,0,{ bonus bAgi,1; if(getrefine() >= 9) bonus bAgi,2; },{},{}
+2435,Battle_Greave,Battle Greaves,5,10,,0,,15,,1,0x026654E2,7,2,64,,80,1,0,{ bonus bMaxHP,100; bonus bMdef,1; bonus2 bSubRace,RC_DemiHuman,1; },{},{}
+2436,Combat_Boots,Combat Boots,5,10,,0,,9,,1,0x00898B1C,7,2,64,,80,1,0,{ bonus bMaxHP,100; bonus bMdef,1; bonus2 bSubRace,RC_DemiHuman,1; },{},{}
+2437,Battle_Boots,Battle Boots,5,10,,0,,9,,1,0x01000000,7,2,64,,80,1,0,{ bonus bMaxHP,100; bonus bMdef,1; bonus2 bSubRace,RC_DemiHuman,1; },{},{}
+2440,Sprint_Shoes,Sprint Shoes,5,20,,300,,10,,1,0x00CFFF80,2,2,64,,70,1,0,{ bonus bAgi,1; bonus bSPrecovRate,5; },{},{}
+2444,Krieger_Shoes1,Glorious Shoes,5,20,,0,,0,,0,0xFFFFFFFE,7,2,64,,81,1,0,{ bonus bMaxHPRate,10; bonus2 bSubRace,RC_DemiHuman,4; bonus3 bAutoSpellWhenHit,"AL_INCAGI",1,10; },{},{}
+2445,Krieger_Shoes2,Glorious Popularized Shoes,5,20,,0,,0,,0,0xFFFFFFFE,7,2,64,,61,1,0,{ bonus bMaxHPRate,5; bonus bMaxSPRate,5; },{},{}
+2446,Krieger_Shoes3,Glorious Mass-Production Shoes,5,20,,0,,10,,0,0xFFFFFFFE,7,2,64,,0,1,0,{ bonus bMaxHPRate,5; },{},{}
+2447,Military_Boots,Army Boots,5,0,,1000,,5,,0,0xFFFFFFFE,7,2,64,,0,1,0,{},{},{}
+2450,Vital_Tree_Shoes,Vital Tree Shoes,5,20,,500,,16,,0,0xFFFFFFFE,2,2,64,,60,1,0,{ bonus bMaxHPrate,10; bonus2 bHPRegenRate,30,10000; bonus bHealpower2,5; bonus bAddItemHealRate,5; bonus bMdef,3; bonus bVit,2; },{},{}
+2456,Para_Team_Boots1,Eden Team Boots I,5,0,,0,,14,,0,0xFFFFFFFF,7,2,64,,12,0,0,{ bonus bHPrecovRate,10; bonus bSPrecovRate,2; },{},{}
+2457,Para_Team_Boots2,Eden Team Boots II,5,0,,0,,16,,0,0xFFFFFFFF,7,2,64,,26,0,0,{ bonus bHPrecovRate,12; bonus bSPrecovRate,4; },{},{}
+2458,Para_Team_Boots3,Eden Team Boots III,5,0,,0,,18,,0,0xFFFFFFFF,7,2,64,,40,0,0,{ bonus bHPrecovRate,14; bonus bSPrecovRate,6; },{},{}
+2463,Feral_Boots,Feral Boots,5,20,,0,,12,,0,0xFFFFFFFF,7,2,64,,75,0,0,{ bonus bMdef,2; },{},{}
+
+// Armor
+2301,Cotton_Shirt,Cotton Shirt,5,10,,100,,10,,0,0xFFFFFFFF,7,2,16,,0,1,0,{},{},{}
+2302,Cotton_Shirt_,Cotton Shirt,5,10,,100,,10,,1,0xFFFFFFFF,7,2,16,,0,1,0,{},{},{}
+2303,Leather_Jacket,Jacket,5,200,,200,,15,,0,0xFFFFFFFF,7,2,16,,0,1,0,{},{},{}
+2304,Leather_Jacket_,Jacket,5,200,,200,,15,,1,0xFFFFFFFF,7,2,16,,0,1,0,{},{},{}
+2305,Adventure_Suit,Adventurer's Suit,5,1000,,300,,20,,0,0xFFFFFFFF,7,2,16,,0,1,0,{},{},{}
+2306,Adventurere's_Suit_,Adventurer's Suit,5,1000,,300,,20,,1,0xFFFFFFFF,7,2,16,,0,1,0,{},{},{}
+2307,Mantle,Mantle,5,10000,,600,,37,,0,0xFFFFFFFE,7,2,16,,0,1,0,{},{},{}
+2308,Mantle_,Mantle,5,10000,,600,,37,,1,0xFFFFFFFE,7,2,16,,0,1,0,{},{},{}
+2309,Coat,Coat,5,22000,,1200,,42,,0,0xFFFFFFFE,7,2,16,,0,1,0,{},{},{}
+2310,Coat_,Coat,5,22000,,1200,,42,,1,0xFFFFFFFE,7,2,16,,0,1,0,{},{},{}
+2311,Mink_Coat,Mink Coat,5,20,,2300,,30,,1,0xFFFFFFFE,7,2,16,,30,1,0,{},{},{}
+2312,Padded_Armor,Padded Armor,5,48000,,2800,,35,,0,0x000654E2,7,2,16,,0,1,0,{ if(isequipped(2656)) { bonus bDef,5; bonus bMaxHP,150; } },{},{}
+2313,Padded_Armor_,Padded Armor,5,48000,,2800,,35,,1,0x000654E2,7,2,16,,0,1,0,{ if(isequipped(2656)) { bonus bDef,5; bonus bMaxHP,150; } },{},{}
+2314,Chain_Mail,Chain Mail,5,65000,,3300,,55,,0,0x000654E2,7,2,16,,0,1,0,{},{},{}
+2315,Chain_Mail_,Chain Mail,5,65000,,3300,,55,,1,0x000654E2,7,2,16,,0,1,0,{},{},{}
+2316,Plate_Armor,Full Plate,5,80000,,4500,,70,,0,0x00004082,7,2,16,,40,1,0,{},{},{}
+2317,Plate_Armor_,Full Plate,5,80000,,4500,,70,,1,0x00004082,7,2,16,,40,1,0,{},{},{}
+2318,Clothes_Of_The_Lord,Lord's Clothes,5,20,,2500,,59,,1,0x00040420,7,2,16,,70,1,0,{ bonus bMdef,5; bonus bInt,1; },{},{}
+2319,Glittering_Clothes,Glittering Jacket,5,20,,2500,,58,,1,0xFFFFFFFE,7,2,16,,60,1,0,{ bonus bMdef,5; bonus2 bAddEff,Eff_Blind,300; },{},{}
+2320,Formal_Suit,Formal Suit,5,20,,300,,40,,1,0xFFFFFFFE,7,2,16,,0,1,0,{},{},{}
+2321,Silk_Robe,Silk Robe,5,8000,,400,,20,,0,0x0085C7B6,7,2,16,,0,1,0,{ bonus bMdef,10; },{},{}
+2322,Silk_Robe_,Silk Robe,5,8000,,400,,20,,1,0x0085C7B6,7,2,16,,0,1,0,{ bonus bMdef,10; },{},{}
+2323,Scapulare,Scapulare,5,6500,,400,,24,,0,0x00008110,7,2,16,,0,1,0,{},{},{}
+2324,Scapulare_,Scapulare,5,6500,,400,,24,,1,0x00008110,7,2,16,,0,1,0,{},{},{}
+2325,Saint_Robe,Saint's Robe,5,54000,,600,,50,,0,0x00048530,7,2,16,,0,1,0,{ bonus bMdef,5; },{},{}
+2326,Saint_Robe_,Saint's Robe,5,54000,,600,,50,,1,0x00048530,7,2,16,,0,1,0,{ bonus bMdef,5; },{},{}
+2327,Holy_Robe,Holy Robe,5,20,,1700,,57,,0,0x00008110,7,2,16,,60,1,0,{ bonus bMdef,5; bonus2 bSubRace,RC_Demon,15; bonus2 bSubEle,Ele_Dark,10; },{},{}
+2328,Wooden_Mail,Wooden Mail,5,5500,,1000,,25,,0,0x000444A2,7,2,16,,0,1,0,{},{},{}
+2329,Wooden_Mail_,Wooden Mail,5,5500,,1000,,25,,1,0x000444A2,7,2,16,,0,1,0,{},{},{}
+2330,Tights,Tights,5,71000,,500,,27,,0,0x00080808,7,2,16,,45,1,0,{ bonus bDex,1; },{},{}
+2331,Tights_,Tights,5,71000,,500,,27,,1,0x00080808,7,2,16,,45,1,0,{ bonus bDex,1; },{},{}
+2332,Silver_Robe,Silver Robe,5,7000,,700,,23,,0,0x00810204,7,2,16,,0,1,0,{},{},{}
+2333,Silver_Robe_,Silver Robe,5,7000,,700,,23,,1,0x00810204,7,2,16,,0,1,0,{},{},{}
+2334,Mage_Coat,Mage Coat,5,20,,600,,40,,0,0x00810204,7,2,16,,50,1,0,{ bonus bMdef,5; bonus bInt,1; },{},{}
+2335,Thief_Clothes,Thief Clothes,5,74000,,100,,40,,0,0x02021040,7,2,16,,0,1,0,{ bonus bAgi,1; },{},{}
+2336,Thief_Clothes_,Thief Clothes,5,74000,,100,,40,,1,0x02021040,7,2,16,,0,1,0,{ bonus bAgi,1; },{},{}
+2337,Ninja_Suit,Ninja Suit,5,20,,1500,,58,,0,0x02021040,7,2,16,,50,1,0,{ bonus bAgi,1; bonus bMdef,3; if(isequipped(2654)) { bonus bUseSPrate,-20; bonus bMaxHP,300; } },{},{}
+2338,Wedding_Dress,Wedding Dress,5,43000,,500,,10,,0,0xFFFFFFFE,7,2,16,,0,1,0,{ bonus bMdef,15; },{},{}
+2339,G_Strings,Pantie,5,1000,,100,,22,,0,0xFFFFFFFF,7,2,16,,0,1,0,{},{},{}
+2341,Full_Plate_Armor,Legion Plate Armor,5,94000,,5500,,79,,0,0x00004000,7,2,16,,70,1,0,{},{},{}
+2342,Full_Plate_Armor_,Legion Plate Armor,5,102500,,5500,,79,,1,0x00004000,7,2,16,,70,1,0,{},{},{}
+2343,Robe_Of_Casting,Robe of Cast,5,124800,,1100,,40,,0,0x00810200,7,2,16,,75,1,0,{ bonus bCastrate,-3; bonus bMdef,4; },{},{}
+2344,Flame_Sprits_Armor,Lucius's Fierce Armor of Volcano,5,136000,,2200,,25,,0,0x000444A2,7,2,16,,45,1,0,{ bonus bDefEle,Ele_Fire; },{},{}
+2345,Flame_Sprits_Armor_,Lucius's Fierce Armor of Volcano,5,136000,,2200,,25,,1,0xFFFFFFFE,7,2,16,,45,1,0,{ bonus bDefEle,Ele_Fire; },{},{}
+2346,Water_Sprits_Armor,Saphien's Armor of Ocean,5,136000,,2200,,25,,0,0x000444A2,7,2,16,,45,1,0,{ bonus bDefEle,Ele_Water; },{},{}
+2347,Water_Sprits_Armor_,Saphien's Armor of Ocean,5,136000,,2200,,25,,1,0xFFFFFFFE,7,2,16,,45,1,0,{ bonus bDefEle,Ele_Water; },{},{}
+2348,Wind_Sprits_Armor,Aebecee's Raging Typhoon Armor,5,136000,,2200,,25,,0,0x000444A2,7,2,16,,45,1,0,{ bonus bDefEle,Ele_Wind; },{},{}
+2349,Wind_Sprits_Armor_,Aebecee's Raging Typhoon Armor,5,136000,,2200,,25,,1,0xFFFFFFFE,7,2,16,,45,1,0,{ bonus bDefEle,Ele_Wind; },{},{}
+2350,Earth_Sprits_Armor,Claytos Cracking Earth Armor,5,136000,,2200,,25,,0,0x000444A2,7,2,16,,45,1,0,{ bonus bDefEle,Ele_Earth; },{},{}
+2351,Earth_Sprits_Armor_,Claytos Cracking Earth Armor,5,136000,,2200,,25,,1,0xFFFFFFFE,7,2,16,,45,1,0,{ bonus bDefEle,Ele_Earth; },{},{}
+2352,Novice_Plate,Tattered Novice Ninja Suit,5,1,,1,,25,,0,0x00000001,7,2,16,,0,0,0,{},{},{}
+2353,Odin's_Blessing,Odin's Blessing,5,30000,,2500,,53,,1,0xFFFFFFFE,7,2,16,,65,1,0,{},{},{}
+2354,Goibne's_Armor,Goibne's Armor,5,50000,,3500,,58,,0,0xFFFFFFFE,7,2,16,,54,1,0,{ bonus bVit,2; bonus bMaxHPrate,10; },{},{}
+2355,Angel's_Protection,Angelic Protection,5,10000,,600,,25,,1,0x00000001,7,2,16,,40,1,0,{ bonus bMdef,20; if(isequipped(2116,2420,2521,5125)) { bonus bMaxHP,900; bonus bMaxSP,100; bonus3 bAutoSpellWhenHit,HP_ASSUMPTIO,1,30; } },{},{}
+2356,Vestment_Of_Grace,Blessed Holy Robe,5,20,,2500,,45,,1,0x00008100,7,2,16,,70,1,0,{ bonus bMdef,5; bonus2 bResEff,Eff_Blind,8000; },{},{}
+2357,Valkyrie_Armor,Valkyrian Armor,5,0,,2800,,55,,1,0xFFFFFFFE,2,2,16,,1,1,0,{ bonus bAllStats,1; bonus bUnbreakableArmor,0; if(BaseClass==Job_Mage||BaseClass==Job_Archer||BaseClass==Job_Acolyte) bonus2 bResEff,Eff_Silence,5000; else if(BaseClass==Job_Swordman||BaseClass==Job_Merchant||BaseClass==Job_Thief) bonus2 bResEff,Eff_Stun,5000; },{},{}
+2359,Ninja_Suit_,Ninja Suit,5,20,,1500,,58,,1,0x02021040,7,2,16,,50,1,0,{ bonus bAgi,1; bonus bMdef,3; if(isequipped(2654)) { bonus bUseSPrate,-20; bonus bMaxHP,300; } },{},{}
+2360,Robe_Of_Casting_,Robe of Cast,5,124800,,1100,,40,,1,0x00810200,7,2,16,,75,1,0,{ bonus bCastrate,-3; bonus bMdef,4; },{},{}
+2364,Meteo_Plate_Armor,Meteo Plate Armor,5,20,,3000,,85,,1,0x000444A2,2,2,16,,55,1,0,{ bonus2 bResEff,Eff_Stun,3000; bonus2 bResEff,Eff_Freeze,3000; },{},{}
+2365,Orleans_Gown,Orleans's Gown,5,20,,300,,15,,1,0xFFFFFFFE,2,2,16,,55,1,0,{ bonus bCastrate,15; bonus bNoCastCancel,0; },{},{}
+2366,Divine_Cloth,Divine Cloth,5,20,,1500,,50,,1,0xFFFFFFFE,2,2,16,,55,1,0,{ bonus2 bResEff,Eff_Curse,500; bonus2 bResEff,Eff_Silence,500; bonus2 bResEff,Eff_Stun,500; bonus2 bResEff,Eff_Stone,500; bonus2 bResEff,Eff_Sleep,500; },{},{}
+2367,Sniping_Suit,Sniping Suit,5,20,,750,,42,,1,0x00000800,2,2,16,,50,1,0,{ bonus bMdef,5; bonus bCritical,6+(readparam(bLuk)/10); bonus bDelayRate,-23; },{},{}
+2371,G_Strings_,Pantie,5,1000,,100,,22,,1,0xFFFFFFFF,7,2,16,,0,1,0,{},{},{}
+2372,Mage_Coat_,Mage Coat,5,20,,600,,40,,1,0x00810204,7,2,16,,50,1,0,{ bonus bMdef,5; bonus bInt,1; },{},{}
+2373,Holy_Robe_,Holy Robe,5,20,,1700,,57,,1,0x00008110,7,2,16,,60,1,0,{ bonus bMdef,5; bonus2 bSubRace,RC_Demon,15; bonus2 bSubEle,Ele_Dark,10; },{},{}
+2374,Diabolus_Robe,Diabolus Robe,5,20,,300,,57,,1,0x00098B1C,2,2,16,,55,1,0,{ bonus bMaxSP,150; bonus bMdef,5; bonus bHealPower,6; bonus bDelayRate,-10; if (isequipped(2729)) { bonus2 bAddRace,RC_NonBoss,3; bonus2 bAddRace,RC_Boss,3; bonus bMatkRate,3; } },{},{}
+2375,Diabolus_Armor,Diabolus Armor,5,20,,600,,79,,1,0x000654E2,2,2,16,,55,1,0,{ bonus bStr,2; bonus bDex,1; bonus bMaxHP,150; bonus2 bResEff,Eff_Stun,500; bonus2 bResEff,Eff_Stone,500; if (isequipped(2729)) { bonus2 bAddRace,RC_NonBoss,3; bonus2 bAddRace,RC_Boss,3; bonus bMatkRate,3; } },{},{}
+2376,Assaulter_Plate,Assaulter Plate,5,10,,0,,57,,1,0x006444A2,7,2,16,,80,1,0,{ bonus bMaxHP,150; bonus bMdef,2; bonus2 bSubRace,RC_DemiHuman,2; if (isequipped(2538,2435)) { bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bVit,3; bonus bMaxHPRate,12; bonus bHealpower2,10; bonus bAddItemHealRate,10; autobonus2 "{ bonus2 bHPRegenRate,600,1000; }",5,10000,BF_WEAPON,"{ specialeffect2 EF_HEAL; }"; }; },{},{}
+2377,Elite_Engineer_Armor,Elite Engineer Armor,5,10,,0,,50,,1,0x00040420,7,2,16,,80,1,0,{ bonus bMaxHP,150; bonus bMdef,2; bonus2 bSubRace,RC_DemiHuman,2; if (isequipped(2538,2435)) { bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bStr,3; bonus bMaxHPRate,12; bonus2 bSkillAtk,"MC_MAMMONITE",20; bonus2 bSkillHeal,"AM_POTIONPITCHER",10; bonus2 bSkillHeal2,"AM_POTIONPITCHER",10; bonus2 bSkillHeal2,"AL_HEAL",10; bonus bUnbreakableArmor,0; }; },{},{}
+2378,Assassin_Robe,Assassin Robe,5,10,,0,,41,,1,0x02021040,7,2,16,,80,1,0,{ bonus bMaxHP,150; bonus bMdef,2; bonus2 bSubRace,RC_DemiHuman,2; if (isequipped(2538,2435)) { bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bAgi,3; bonus bMaxHPRate,12; bonus bCritical,5; bonus bAspdRate,5; autobonus "{ bonus2 bHPRegenRate,300,1000; }",10,10000,BF_WEAPON,"{ specialeffect2 EF_HEAL; }"; }; },{},{}
+2379,Warlock_Battle_Robe,Warlock's Battle Robe,5,10,,0,,36,,1,0x00810204,7,2,16,,80,1,0,{ bonus bMaxHP,150; bonus bMdef,2; bonus2 bSubRace,RC_DemiHuman,2; if (isequipped(2539,2436)) { bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bInt,3; bonus bMaxHPRate,12; bonus2 bResEff,Eff_Stun,2000; autobonus2 "{ bonus bDefEle,Ele_Ghost; }",30,10000,BF_WEAPON,"{ specialeffect2 EF_ENERGYCOAT; }"; }; },{},{}
+2380,Medic_Robe,Medic's Robe,5,10,,0,,25,,1,0x00008110,7,2,16,,80,1,0,{ bonus bMaxHP,150; bonus bMdef,2; bonus2 bSubRace,RC_DemiHuman,2; if (isequipped(2539,2436)) { bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bInt,3; bonus bMaxHPRate,12; bonus2 bCastrate,156,-50; bonus bHealPower,6; autobonus2 "{ bonus bDefEle,Ele_Ghost; }",30,10000,BF_WEAPON,"{ specialeffect2 EF_ENERGYCOAT; }"; }; },{},{}
+2381,Elite_Archer_Suit,Elite Archer Suit,5,10,,0,,35,,1,0x00080808,7,2,16,,80,1,0,{ bonus bMaxHP,150; bonus bMdef,2; bonus2 bSubRace,RC_DemiHuman,2; if (isequipped(2539,2436)) { bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bDex,3; bonus bMaxHPRate,12; bonus bLongAtkDef,10; bonus bDelayRate,-25; }; },{},{}
+2382,Elite_Shooter_Suit,Elite Shooter Suit,5,10,,0,,25,,1,0x01000000,7,2,16,,80,1,0,{ bonus bMaxHP,150; bonus bMdef,2; bonus2 bSubRace,RC_DemiHuman,2; if (isequipped(2540,2437)) { bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bDex,3; bonus bMaxHPRate,12; bonus bLongAtkDef,10; bonus bDelayRate,-25; }; },{},{}
+2383,Brynhild,Brynhild,5,20,,400,,120,,0,0xFFFFFFFF,7,2,16,,94,0,0,{ bonus bMdef,10; bonus bMaxHP,20*BaseLevel; bonus bMaxSP,5*BaseLevel; bonus2 bAddRace,RC_NonBoss,10; bonus2 bAddRace,RC_Boss,10; bonus bMatkRate,10; bonus bUnbreakableArmor,0; bonus bNoKnockback,0; },{},{}
+2386,Chameleon_Armor,Chameleon Armor,5,20,,1700,,55,,0,0x00CFFF80,2,2,16,,70,1,0,{ bonus bMaxHP,(BaseLevel*7); bonus bMaxSP,(BaseLevel/2); autobonus2 "{ bonus bNoMagicDamage,100; }",10,2000,BF_MAGIC,"{ specialeffect2 EF_ENERGYCOAT; }"; if( BaseClass == Job_Mage || BaseClass == Job_Archer || BaseClass == Job_Acolyte ) bonus bMdef,5; else if( BaseClass == Job_Swordman || BaseClass == Job_Merchant || BaseClass == Job_Thief ) bonus bDef,3; },{},{}
+2387,Sprint_Mail,Sprint Mail,5,20,,1000,,20,,1,0x00CFFF80,2,2,16,,70,1,0,{ bonus bVit,1; bonus bHPrecovRate,5; bonus bAddItemHealRate,3; bonus2 bSkillHeal,AL_HEAL,3; if( isequipped(2440,2744) ) { bonus bMaxHPrate,7; bonus bMaxSPrate,7; bonus bCastrate,-3; bonus bDelayrate,-15; } },{},{}
+2388,Kandura,Kandura,5,20,,300,,36,,1,0x00001000,2,2,16,,70,1,0,{ bonus bAgi,1; bonus bFlee,5; bonus bAspdRate,2; },{},{}
+2389,Armor_Of_Naga,Armor of Naga,5,20,,1000,,45,,1,0x00CFFF80,2,2,16,,70,1,0,{ bonus bMdef,2; autobonus "{ bonus bBaseAtk,20; }",10,10000,BF_WEAPON,"{ specialeffect2 EF_ENHANCE; }"; },{},{}
+2390,Improved_Tights,Improved Tights,5,20,,400,,38,,1,0x00080808,2,2,16,,75,1,0,{ bonus bMdef,2; bonus bFlee2,3; },{},{}
+2391,Life_Link,Life Link,5,20,,3500,,75,,1,0x00004082,2,2,16,,82,1,0,{ bonus bVit,2; bonus bMdef,5; bonus bHPrecovRate,50; },{},{}
+
+// Garment
+2501,Hood,Hood,5,1000,,200,,4,,0,0xFFFFFFFF,7,2,4,,0,1,0,{},{},{}
+2502,Hood_,Hood,5,1000,,200,,4,,1,0xFFFFFFFF,7,2,4,,0,1,0,{},{},{}
+2503,Muffler,Muffler,5,5000,,400,,8,,0,0xFFFFFFFE,7,2,4,,0,1,0,{},{},{}
+2504,Muffler_,Muffler,5,5000,,400,,8,,1,0xFFFFFFFE,7,2,4,,0,1,0,{},{},{}
+2505,Manteau,Manteau,5,32000,,600,,13,,0,0x006654E2,7,2,4,,0,1,0,{},{},{}
+2506,Manteau_,Manteau,5,32000,,600,,13,,1,0x006654E2,7,2,4,,0,1,0,{},{},{}
+2507,Cape_Of_Ancient_Lord,Ancient Cape,5,82000,,600,,9,,0,0xFFFFFFFE,7,2,4,,40,1,0,{ bonus bAgi,1; },{},{}
+2508,Ragamuffin_Cape,Ragamuffin Manteau,5,56000,,500,,4,,0,0xFFFFFFFE,7,2,4,,0,1,0,{ bonus bUnbreakableGarment,0; bonus bMdef,10; },{},{}
+2509,Clack_Of_Servival,Survivor's Manteau,5,20000,,550,,10,,0,0x00810204,7,2,4,,75,1,0,{ bonus bMdef,5; bonus bVit,10; if(isequipped(1618) || isequipped(1620)){ bonus bMaxHP,300; bonus bMatkRate,getequiprefinerycnt(EQI_HAND_R)-5; bonus2 bSubEle,Ele_Neutral,getrefine()*3; } },{},{}
+2510,Novice_Hood,Somber Novice Hood,5,1,,1,,4,,0,0x00000001,7,2,4,,0,0,0,{ bonus2 bSubEle,Ele_Neutral,20; },{},{}
+2512,Novice_Manteau,Novice Manteau,5,50000,,500,,7,,1,0x00000001,7,2,4,,40,1,0,{ bonus2 bSubEle,Ele_Neutral,10; },{},{}
+2513,Celestial_Robe,Heavenly Maiden Robe,5,20,,500,,18,,1,0xFFFFFFFE,7,2,4,,80,1,0,{},{},{}
+2514,Pauldron,Pauldron,5,20,,800,,25,,1,0x000654E2,7,2,4,,80,1,0,{},{},{}
+2515,Wing_Of_Eagle,Eagle Wing,5,20000,,300,,12,,1,0x00810204,7,2,4,,85,1,0,{ if(isequipped(1616)) bonus bSpeedRate,25; },{},{}
+2516,Falcon_Robe,Falcon Muffler,5,30000,,400,,8,,0,0xFFFFFFFE,7,2,4,,65,1,0,{ bonus bFlee,15; bonus bFlee2,5; },{},{}
+2517,Vali's_Manteau,Vali's Manteau,5,30000,,600,,13,,0,0xFFFFFFFE,7,2,4,,65,1,0,{ bonus2 bSubEle,Ele_Neutral,15; },{},{}
+2518,Morpheus's_Shawl,Morpheus's Shawl,5,30000,,600,,8,,0,0xFFFFFFFE,7,2,4,,33,1,0,{ bonus bMaxSPrate,10; bonus bMdef,3; },{},{}
+2519,Morrigane's_Manteau,Morrigane's Manteau,5,30000,,600,,9,,0,0xFFFFFFFE,7,2,4,,61,1,0,{ bonus bLuk,2; bonus bFlee2,8; },{},{}
+2520,Goibne's_Shoulder_Arms,Goibne's Spaulders,5,30000,,700,,11,,0,0xFFFFFFFE,7,2,4,,54,1,0,{ bonus bLongAtkDef,10; bonus bMdef,2; bonus bVit,1; },{},{}
+2521,Angel's_Warmth,Angelic Cardigan,5,10000,,400,,5,,1,0x00000001,7,2,4,,20,1,0,{ bonus bHPrecovRate,5; },{},{}
+2522,Undershirt,Undershirt,5,20000,,150,,5,,0,0xFFFFFFFF,7,2,4,,1,1,0,{ bonus bMdef,1; if(isequipped(2339) || isequipped(2371)) { bonus bAgi,5; bonus bFlee,10; } },{},{}
+2523,Undershirt_,Undershirt,5,20000,,150,,5,,1,0xFFFFFFFF,7,2,4,,1,1,0,{ bonus bMdef,1; if(isequipped(2339) || isequipped(2371)) { bonus bAgi,5; bonus bFlee,10; } },{},{}
+2524,Valkyrie_Manteau,Valkyrian Manteau,5,0,,500,,10,,1,0xFFFFFFFE,2,2,4,,1,1,0,{ bonus bUnbreakableGarment,0; if(BaseClass==Job_Mage||BaseClass==Job_Archer||BaseClass==Job_Acolyte) bonus bFlee2,5+(getequiprefinerycnt(EQI_GARMENT)*2); else if(BaseClass==Job_Swordman||BaseClass==Job_Merchant||BaseClass==Job_Thief) bonus bShortWeaponDamageReturn,5+(getequiprefinerycnt(EQI_GARMENT)*2); },{},{}
+2525,Cape_Of_Ancient_Lord_,Ancient Cape,5,82000,,600,,9,,1,0xFFFFFFFE,7,2,4,,40,1,0,{ bonus bAgi,1; },{},{}
+2527,Dragon_Breath,Dragon Breath,5,20,,600,,16,,1,0xFFFFFFFE,2,2,4,,48,1,0,{ bonus2 bSubRace,RC_Dragon,15; if (isequipped(1166) || isequipped(13001) || isequipped(1474)) bonus2 bAddRace,RC_Dragon,5; },{},{}
+2528,Wool_Scarf,Wool Scarf,5,20,,500,,11,,1,0xFFFFFFFE,2,2,4,,55,1,0,{ bonus bMdef,4; },{},{}
+2529,Rider_Insignia,Rider Insignia,5,20,,500,,13,,0,0xFFFFFFFE,2,2,4,,55,1,0,{ bonus bAgi,2; if (isequipped(2425) || isequipped(2434)) bonus bFlee,10; },{},{}
+2530,Rider_Insignia_,Rider Insignia,5,20,,500,,13,,1,0xFFFFFFFE,2,2,4,,55,1,0,{ bonus bAgi,2; if (isequipped(2425) || isequipped(2434)) bonus bFlee,10; },{},{}
+2531,Ulfhedinn,Ulfhedinn,5,20,,700,,13,,1,0x000654E2,2,2,4,,70,1,0,{ bonus3 bAutoSpellWhenHit,NPC_STONESKIN,1,20; },{},{}
+2532,Mithril_Magic_Cape,Mithril Magic Cape,5,20,,400,,8,,1,0x00098B1C,2,2,4,,70,1,0,{ bonus bMdef,3; bonus5 bAutoSpellWhenHit,NPC_ANTIMAGIC,1,200,BF_MAGIC,0; },{},{}
+2536,Skin_Of_Ventus,Skin of Ventus,5,20,,250,,7,,1,0xFFFFFFFE,7,2,4,,60,1,0,{ bonus bMdef,2; bonus bMaxHP,200; bonus bFlee,10; },{},{}
+2537,Diabolus_Manteau,Diabolus Manteau,5,20,,250,,15,,1,0x00CFFF80,2,2,4,,0,1,0,{ bonus2 bSubEle,Ele_Neutral,5; bonus bMaxHP,100; bonus2 bAddDamageClass,1916,10; bonus2 bAddDamageClass,1917,10; if (isequipped(2433)) bonus bMaxHPRate,6; },{},{}
+2538,Commander_Manteau,Captain's Manteau,5,10,,0,,28,,1,0x026654E2,7,2,4,,80,1,0,{ bonus bMaxHP,50; bonus bMdef,1; bonus2 bSubRace,RC_DemiHuman,1; },{},{}
+2539,Commander_Manteau_,Commander's Manteau,5,10,,0,,20,,1,0x00898B1C,7,2,4,,80,1,0,{ bonus bMaxHP,50; bonus bMdef,1; bonus2 bSubRace,RC_DemiHuman,1; },{},{}
+2540,Sheriff_Manteau,Sheriff's Manteau,5,10,,0,,20,,1,0x01000000,7,2,4,,80,1,0,{ bonus bMaxHP,50; bonus bMdef,1; bonus2 bSubRace,RC_DemiHuman,1; },{},{}
+2541,Asprika,Asprika,5,20,,400,,40,,0,0xFFFFFFFF,7,2,4,,94,0,0,{ bonus bMdef,5; bonus3 bSubEle,Ele_Neutral,30,BF_SHORT; bonus3 bSubEle,Ele_Water,30,BF_SHORT; bonus3 bSubEle,Ele_Earth,30,BF_SHORT; bonus3 bSubEle,Ele_Fire,30,BF_SHORT; bonus3 bSubEle,Ele_Wind,30,BF_SHORT; bonus3 bSubEle,Ele_Poison,30,BF_SHORT; bonus3 bSubEle,Ele_Holy,30,BF_SHORT; bonus3 bSubEle,Ele_Dark,30,BF_SHORT; bonus3 bSubEle,Ele_Ghost,30,BF_SHORT; bonus3 bSubEle,Ele_Undead,30,BF_SHORT; bonus bFlee,30; skill "AL_TELEPORT",1; bonus bUnbreakableGarment,0; },{},{}
+2542,Flame_Manteau,Flame Manteau of Naght Sieger,5,20,,70,,16,,1,0xFFFFFFFE,2,2,4,,70,1,0,{ bonus bMaxHPRate,5; bonus bMdef,2; bonus bMatkRate,1; bonus2 bAddEle,Ele_Fire,2; },{},{}
+2544,Leather_Of_Tendrilion,Leather of Tendrilion,5,20,,300,,14,,1,0x00CFDF80,2,2,4,,0,1,0,{ bonus2 bSubEle,Ele_Water,5; bonus2 bSubEle,Ele_Earth,5; bonus2 bSubRace,RC_Plant,5; bonus2 bSubRace,RC_Brute,5; },{},{}
+2545,Musika,Musika,5,20,,500,,10,,1,0x00008100,2,2,4,,70,1,0,{ bonus bMdef,3; bonus3 bAutoSpellwhenhit,AL_HEAL,getskilllv("AL_HEAL") ? getskilllv("AL_HEAL") : 1,20; },{},{}
+2548,Muffler_C,Neo Muffler,5,0,,0,,5,,0,0xFFFFFFFE,2,2,4,,95,0,0,{ bonus2 bSubRace,RC_DemiHuman,10; bonus bMaxHPrate,10; bonus2 bSubEle,Ele_Water,5; bonus2 bSubEle,Ele_Fire,5; bonus2 bSubEle,Ele_Holy,5; bonus2 bSubEle,Ele_Dark,5; },{},{}
+2549,Krieger_Muffler1,Glorious Muffler,5,20,,0,,0,,0,0xFFFFFFFE,7,2,4,,81,1,0,{ bonus bMaxHPRate,5; bonus2 bSubRace,RC_DemiHuman,5; },{},{}
+2553,Dragon_Manteau,Dragon Manteau,5,20,,1000,,14,,1,0xFFFFFFFE,2,2,4,,0,1,0,{ bonus bAgi,1; bonus bMdef,5; },{},{}
+2554,Piece_Of_Angent_Skin,Nydhorgg's Shadow Garb,5,20,,400,,25,,1,0xFFFFFFFE,2,2,4,,90,1,0,{ bonus2 bSubEle,Ele_Neutral,7; bonus2 bSubEle,Ele_Water,7; bonus2 bSubEle,Ele_Earth,7; bonus2 bSubEle,Ele_Fire,7; bonus2 bSubEle,Ele_Wind,7; bonus2 bSubEle,Ele_Poison,7; bonus2 bSubEle,Ele_Holy,7; bonus2 bSubEle,Ele_Dark,7; bonus2 bSubEle,Ele_Ghost,7; bonus2 bSubEle,Ele_Undead,7; bonus bMaxSP,(BaseLevel/3)+(getrefine()*10); bonus3 bSPDrainRate,1,1,0; bonus bMdef,3; },{},{}
+2560,Para_Team_Manteau,Eden Team Manteau,5,0,,0,,14,,0,0xFFFFFFFF,7,2,4,,12,0,0,{ bonus2 bSubEle,Ele_Neutral,10; },{},{}
+2564,Feral_Tail,Feral Tail,5,20,,0,,16,,0,0xFFFFFFFF,7,2,4,,75,0,0,{},{},{}
+
+
+//[Ind] keeping these 2 here until we confirm: these ids are conflicting, I think they're wrong.
+// Minstrel And Wanderer Cough Drop
+//11513,Cough_Drop,Cough Drop,3,200,,10,,,,,,,,,,,,,{},{},{}
+
+// Genetic Cure Free
+//11518,Cure_Free,Cure Free,0,10,,30,,,,,0xFFFFFFFF,7,2,,,,,,{ itemheal rand(1000,1200),0; sc_end SC_Silence; sc_end SC_Bleeding; sc_end SC_Curse; },{},{}
+
+
+// Unknown Item. Rune Knight Armor???
+//15002,Rune_Plate,Rune Plate,3,10,,10,,,,,,,,,,,,,{},{},{}
diff --git a/db/item_delay.txt b/db/item_delay.txt
index b8641cb09..a0b1389bd 100644
--- a/db/item_delay.txt
+++ b/db/item_delay.txt
@@ -12,14 +12,5 @@
//12207,60000 //Vit_Dish10_
12208,60000 //Battle_Manual
12210,60000 //Bubble_Gum
-//12596,180000 // Magic_Candy
14538,300000 //Glass_Of_Illusion
14586,180000 //Spark_Candy
-// Third Jobs
-// Rune Knight Runestones.
-// Cooldowns are controlled internally by the skill's cooldown.
-// This was done to 'save' the duration on log out in a future update.
-//12725,120000 //Runstone_Nosiege
-//12726,30000 //Runstone_Rhydo
-//12727,60000 //Runstone_Verkana
-//12732,1000 //Runstone_Pertz
diff --git a/db/item_group_db.txt b/db/item_group_db.txt
index 723c18a75..97a3f6b25 100644
--- a/db/item_group_db.txt
+++ b/db/item_group_db.txt
@@ -4,5 +4,4 @@ import: db/item_cardalbum.txt
import: db/item_cookie_bag.txt
import: db/item_findingore.txt
import: db/item_giftbox.txt
-import: db/item_scroll.txt
import: db/item_misc.txt
diff --git a/db/item_misc.txt b/db/item_misc.txt
index 206342698..050254a94 100644
--- a/db/item_misc.txt
+++ b/db/item_misc.txt
@@ -80,7 +80,7 @@
19,526,5 // Royal_Jelly
19,12042,10 // Str_Dish02
19,12057,10 // Agi_Dish02
-19,12068,10 // Vit_Dish03
+19,12053,10 // Vit_Dish03
19,12062,10 // Dex_Dish02
19,12068,10 // Luk_Dish03
19,12047,10 // Int_Dish02
diff --git a/db/item_scroll.txt b/db/item_scroll.txt
deleted file mode 100644
index 178510f7d..000000000
--- a/db/item_scroll.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-// Worn-Out Scroll Obtainable Items Database
-//
-// Structure of Database:
-// GroupID,ItemID,Rate
-
-5,909,1 //Jellopy
diff --git a/db/item_stack.txt b/db/item_stack.txt
deleted file mode 100644
index b2932b56b..000000000
--- a/db/item_stack.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-// Item Stacking Restriction File
-// Prevents an item to be stacked more than x times in given
-// inventory types. Generally used by 3rd class related skill items.
-// Format: <item id>,<stack limit amount>,<type>
-// Type mask values:
-// &1: Character inventory restriction
-// &2: Character cart restriction
-// &4: Account storage restriction
-// &8: Guild storage restriction
-// Example:
-// 512,4,12 // Will not allow more than 4 Apples in storages.
-// Note:
-// Stack limit of 0 will disable a restriction.
-
-// Rune Knight
-12725,20,1 // Nauthiz Rune
-12726,20,1 // Raido Rune
-12727,20,1 // Berkana Rune
-12728,20,1 // Isa Rune
-12729,20,1 // Othila Rune
-12730,20,1 // Uruz Rune
-12731,20,1 // Thurisaz Rune
-12732,20,1 // Wyrd Rune
-12733,20,1 // Hagalaz Rune
-
-// Arch Bishop
-12333,3,1 // Ancilla
diff --git a/db/job_db1.txt b/db/job_db1.txt
index d2c91f465..10f2ff922 100644
--- a/db/job_db1.txt
+++ b/db/job_db1.txt
@@ -1,257 +1,226 @@
// Job-specific Values Database
//
// Structure of Database:
-//JobID,Weight,HPFactor,HPMultiplicator,SPFactor,Unarmed,Dagger,1HSword,2HSword,1HSpear,2HSpear,1HAxe,2HAxe,1HMace,2HMace(unused),Rod,Bow,Knuckle,Instrument,Whip,Book,Katar,Revolver,Rifle,GatlingGun,Shotgun,GrenadeLauncher,FuumaShuriken,2HStaff,Shield
+// JobID,Weight,HPFactor,HPMultiplicator,SPFactor,Unarmed,Dagger,1HSword,2HSword,1HSpear,2HSpear,1HAxe,2HAxe,1HMace,2HMace(unused),Rod,Bow,Knuckle,Instrument,Whip,Book,Katar,Revolver,Rifle,Gatling Gun,Shotgun,Grenade Launcher,Fuuma Shuriken,2HStaff
//
// Novice
-0, 20000,0 ,500 ,100 ,400 ,550 ,570 ,2000 ,2000 ,2000 ,500 ,2000 ,500 ,550 ,650 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,650 ,100
+0, 20000,0 ,500 ,100 ,500 ,650 ,700 ,2000 ,2000 ,2000 ,800 ,2000 ,700 ,700 ,650 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 650
// Swordman
-1, 28000,70 ,500 ,200 ,400 ,470 ,470 ,540 ,570 ,650 ,550 ,600 ,500 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,50
+1, 28000,70 ,500 ,200 ,400 ,500 ,550 ,600 ,650 ,700 ,700 ,750 ,650 ,700 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Magician
-2, 22000,30 ,500 ,600 ,500 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,550 ,100
+2, 22000,30 ,500 ,600 ,500 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,700 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 700
// Archer
-3, 26000,50 ,500 ,200 ,400 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,90
+3, 26000,50 ,500 ,200 ,400 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,700 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Acolyte
-4, 24000,40 ,500 ,500 ,400 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,450 ,500 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,600 ,70
+4, 24000,40 ,500 ,500 ,400 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,600 ,600 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 600
// Merchant
-5, 28000,40 ,500 ,300 ,400 ,520 ,520 ,2000 ,2000 ,2000 ,480 ,550 ,500 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,50
+5, 28000,40 ,500 ,300 ,400 ,600 ,700 ,2000 ,2000 ,2000 ,700 ,750 ,700 ,700 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Thief
-6, 24000,50 ,500 ,200 ,400 ,480 ,500 ,2000 ,2000 ,2000 ,600 ,2000 ,2000 ,2000 ,2000 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,60
+6, 24000,50 ,500 ,200 ,400 ,500 ,650 ,2000 ,2000 ,2000 ,800 ,2000 ,2000 ,2000 ,2000 ,800 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Knight
-7, 28000,150 ,500 ,300 ,400 ,490 ,450 ,520 ,550 ,600 ,500 ,550 ,450 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,50
+7, 28000,150 ,500 ,300 ,400 ,500 ,500 ,550 ,600 ,600 ,700 ,700 ,650 ,700 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Priest
-8, 26000,75 ,500 ,800 ,400 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,430 ,480 ,600 ,2000 ,600 ,2000 ,2000 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,600 ,50
+8, 26000,75 ,500 ,800 ,400 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,600 ,600 ,600 ,2000 ,2000 ,2000 ,2000 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 600
// Wizard
-9, 24000,55 ,500 ,900 ,500 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530 ,80
+9, 24000,55 ,500 ,900 ,500 ,575 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,625 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 625
// Blacksmith
-10, 30000,90 ,500 ,400 ,400 ,500 ,500 ,2000 ,2000 ,2000 ,460 ,530 ,480 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,50
+10, 30000,90 ,500 ,400 ,400 ,600 ,650 ,2000 ,2000 ,2000 ,650 ,650 ,675 ,675 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Hunter
-11, 27000,85 ,500 ,400 ,400 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,90
+11, 27000,85 ,500 ,400 ,400 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Assassin
-12, 24000,110 ,500 ,400 ,400 ,420 ,500 ,2000 ,2000 ,2000 ,510 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,420 ,2000 ,2000 ,2000 ,2000 ,2000 ,1100 ,2000 ,60
+12, 24000,110 ,500 ,400 ,400 ,500 ,650 ,2000 ,2000 ,2000 ,800 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Knight (Peco)
-13, 28000,150 ,500 ,300 ,400 ,490 ,450 ,520 ,550 ,600 ,500 ,550 ,450 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,50
+13, 28000,150 ,500 ,300 ,400 ,500 ,500 ,550 ,600 ,600 ,700 ,700 ,650 ,700 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Crusader
-14, 28000,110 ,700 ,470 ,400 ,480 ,430 ,550 ,530 ,520 ,500 ,550 ,450 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,50
+14, 28000,110 ,700 ,470 ,400 ,500 ,500 ,550 ,600 ,600 ,700 ,700 ,650 ,700 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Monk
-15, 26000,90 ,650 ,470 ,400 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,430 ,480 ,600 ,2000 ,400 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,580 ,50
+15, 26000,90 ,650 ,470 ,400 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,575 ,575 ,575 ,2000 ,475 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 575
// Sage
-16, 24000,75 ,500 ,700 ,450 ,530 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,550 ,2000 ,2000 ,2000 ,2000 ,430 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,550 ,50
+16, 24000,75 ,500 ,700 ,450 ,525 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,625 ,2000 ,2000 ,2000 ,2000 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 625
// Rogue
-17, 24000,85 ,500 ,500 ,400 ,450 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,50
+17, 24000,85 ,500 ,500 ,400 ,500 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,650 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Alchemist
-18, 30000,90 ,500 ,400 ,400 ,500 ,450 ,2000 ,2000 ,2000 ,450 ,520 ,450 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,40
+18, 30000,90 ,500 ,400 ,400 ,550 ,575 ,2000 ,2000 ,2000 ,675 ,700 ,650 ,650 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Bard
-19, 27000,75 ,300 ,600 ,400 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,480 ,2000 ,450 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,70
+19, 27000,75 ,300 ,600 ,400 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,650 ,2000 ,575 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Dancer
-20, 27000,75 ,300 ,600 ,400 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,480 ,2000 ,2000 ,450 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,70
+20, 27000,75 ,300 ,600 ,400 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,650 ,2000 ,2000 ,575 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Crusader (Peco)
-21, 28000,110 ,700 ,470 ,400 ,480 ,430 ,550 ,530 ,520 ,500 ,550 ,450 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,50
+21, 28000,110 ,700 ,470 ,400 ,500 ,500 ,550 ,600 ,600 ,700 ,700 ,650 ,700 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Wedding
-22, 20000,0 ,500 ,100 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
+22, 20000,0 ,500 ,100 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Super Novice
-23, 20000,0 ,500 ,100 ,400 ,550 ,570 ,2000 ,2000 ,2000 ,500 ,2000 ,500 ,550 ,650 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,650 ,100
+23, 20000,0 ,500 ,100 ,500 ,650 ,700 ,2000 ,2000 ,2000 ,800 ,2000 ,700 ,700 ,650 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 650
// Gunslinger
-24, 28000,88 , 0 ,450 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,450 ,550 ,500 ,90 0 ,1000 ,2000 ,2000 ,60
+24, 28000,88 , 0 ,450 ,500 ,2000, 2000, 2000, 2000, 2000, 2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 700 , 750 , 700 ,1500 ,1500 ,2000 ,2000
// Ninja
-25, 26000,80 , 0 ,515 ,400 ,430 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,550 ,2000 ,60
+25, 26000,80 , 0 ,515 ,400 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 750 ,2000
// Novice High
-4001, 20000,0 ,500 ,100 ,400 ,550 ,570 ,2000 ,2000 ,2000 ,500 ,2000 ,500 ,550 ,650 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,650 ,100
+4001, 20000,0 ,500 ,100 ,500 ,650 ,700 ,2000 ,2000 ,2000 ,800 ,2000 ,700 ,700 ,650 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 650
// Swordman High
-4002, 28000,70 ,500 ,200 ,400 ,470 ,470 ,540 ,570 ,650 ,550 ,600 ,500 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,50
+4002, 28000,70 ,500 ,200 ,400 ,500 ,550 ,600 ,650 ,700 ,700 ,750 ,650 ,700 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Magician High
-4003, 22000,30 ,500 ,600 ,500 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,550 ,100
+4003, 22000,30 ,500 ,600 ,500 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,700 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 700
// Archer High
-4004, 26000,50 ,500 ,200 ,400 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,90
+4004, 26000,50 ,500 ,200 ,400 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,700 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Acolyte High
-4005, 24000,40 ,500 ,500 ,400 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,450 ,500 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,600 ,70
+4005, 24000,40 ,500 ,500 ,400 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,600 ,600 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 600
// Merchant High
-4006, 28000,40 ,500 ,300 ,400 ,520 ,520 ,2000 ,2000 ,2000 ,480 ,550 ,500 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,50
+4006, 28000,40 ,500 ,300 ,400 ,600 ,700 ,2000 ,2000 ,2000 ,700 ,750 ,700 ,700 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Thief High
-4007, 24000,50 ,500 ,200 ,400 ,480 ,500 ,2000 ,2000 ,2000 ,600 ,2000 ,2000 ,2000 ,2000 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,60
+4007, 24000,50 ,500 ,200 ,400 ,500 ,650 ,2000 ,2000 ,2000 ,800 ,2000 ,2000 ,2000 ,2000 ,800 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Lord Knight
-4008, 28000,150 ,500 ,300 ,400 ,490 ,450 ,520 ,550 ,600 ,500 ,550 ,450 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,50
+4008, 28000,150 ,500 ,300 ,400 ,500 ,500 ,550 ,600 ,600 ,700 ,700 ,650 ,700 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// High Priest
-4009, 26000,75 ,500 ,800 ,400 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,430 ,480 ,600 ,2000 ,600 ,2000 ,2000 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,600 ,50
+4009, 26000,75 ,500 ,800 ,400 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,600 ,600 ,600 ,2000 ,2000 ,2000 ,2000 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 600
// High Wizard
-4010, 24000,55 ,500 ,900 ,500 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530 ,80
+4010, 24000,55 ,500 ,900 ,500 ,575 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,625 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 625
// Whitesmith
-4011, 30000,90 ,500 ,400 ,400 ,500 ,500 ,2000 ,2000 ,2000 ,460 ,530 ,480 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,50
+4011, 30000,90 ,500 ,400 ,400 ,600 ,650 ,2000 ,2000 ,2000 ,650 ,650 ,675 ,675 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Sniper
-4012, 27000,85 ,500 ,400 ,400 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,90
+4012, 27000,85 ,500 ,400 ,400 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Assassin Cross
-4013, 24000,110 ,500 ,400 ,400 ,420 ,500 ,2000 ,2000 ,2000 ,510 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,420 ,2000 ,2000 ,2000 ,2000 ,2000 ,1100 ,2000 ,60
+4013, 24000,110 ,500 ,400 ,400 ,500 ,650 ,2000 ,2000 ,2000 ,800 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Lord Knight (Peco)
-4014, 28000,150 ,500 ,300 ,400 ,490 ,450 ,520 ,550 ,600 ,500 ,550 ,450 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,50
+4014, 28000,150 ,500 ,300 ,400 ,500 ,500 ,550 ,600 ,600 ,700 ,700 ,650 ,700 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Paladin
-4015, 28000,110 ,700 ,470 ,400 ,480 ,430 ,550 ,530 ,520 ,500 ,550 ,450 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,50
+4015, 28000,110 ,700 ,470 ,400 ,500 ,500 ,550 ,600 ,600 ,700 ,700 ,650 ,700 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Champion
-4016, 26000,90 ,650 ,470 ,400 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,430 ,480 ,600 ,2000 ,400 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,580 ,50
+4016, 26000,90 ,650 ,470 ,400 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,575 ,575 ,575 ,2000 ,475 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 575
// Professor
-4017, 24000,75 ,500 ,700 ,450 ,530 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,550 ,2000 ,2000 ,2000 ,2000 ,430 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,550 ,50
+4017, 24000,75 ,500 ,700 ,450 ,525 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,625 ,2000 ,2000 ,2000 ,2000 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 625
// Stalker
-4018, 24000,85 ,500 ,500 ,400 ,450 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,50
+4018, 24000,85 ,500 ,500 ,400 ,500 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,650 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Creator
-4019, 30000,90 ,500 ,400 ,400 ,500 ,450 ,2000 ,2000 ,2000 ,450 ,520 ,450 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,40
+4019, 30000,90 ,500 ,400 ,400 ,550 ,575 ,2000 ,2000 ,2000 ,675 ,700 ,650 ,650 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Clown
-4020, 27000,75 ,300 ,600 ,400 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,480 ,2000 ,450 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,70
+4020, 27000,75 ,300 ,600 ,400 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,650 ,2000 ,575 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Gypsy
-4021, 27000,75 ,300 ,600 ,400 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,480 ,2000 ,2000 ,450 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,70
+4021, 27000,75 ,300 ,600 ,400 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,650 ,2000 ,2000 ,575 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Paladin (Peco)
-4022, 28000,110 ,700 ,470 ,400 ,480 ,430 ,550 ,530 ,520 ,500 ,550 ,450 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,50
+4022, 28000,110 ,700 ,470 ,400 ,500 ,500 ,550 ,600 ,600 ,700 ,700 ,650 ,700 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Baby Novice
-4023, 20000,0 ,500 ,100 ,400 ,550 ,570 ,2000 ,2000 ,2000 ,500 ,2000 ,500 ,550 ,650 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,650 ,100
+4023, 20000,0 ,500 ,100 ,500 ,650 ,700 ,2000 ,2000 ,2000 ,800 ,2000 ,700 ,700 ,650 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 650
// Baby Swordman
-4024, 28000,70 ,500 ,200 ,400 ,470 ,470 ,540 ,570 ,650 ,550 ,600 ,500 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,50
+4024, 28000,70 ,500 ,200 ,400 ,500 ,550 ,600 ,650 ,700 ,700 ,750 ,650 ,700 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Baby Magician
-4025, 22000,30 ,500 ,600 ,500 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,550 ,100
+4025, 22000,30 ,500 ,600 ,500 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,700 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 700
// Baby Archer
-4026, 26000,50 ,500 ,200 ,400 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,90
+4026, 26000,50 ,500 ,200 ,400 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,700 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Baby Acolyte
-4027, 24000,40 ,500 ,500 ,400 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,450 ,500 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,600 ,70
+4027, 24000,40 ,500 ,500 ,400 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,600 ,600 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 600
// Baby Merchant
-4028, 28000,40 ,500 ,300 ,400 ,520 ,520 ,2000 ,2000 ,2000 ,480 ,550 ,500 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,50
+4028, 28000,40 ,500 ,300 ,400 ,600 ,700 ,2000 ,2000 ,2000 ,700 ,750 ,700 ,700 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Baby Thief
-4029, 24000,50 ,500 ,200 ,400 ,480 ,500 ,2000 ,2000 ,2000 ,600 ,2000 ,2000 ,2000 ,2000 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,60
+4029, 24000,50 ,500 ,200 ,400 ,500 ,650 ,2000 ,2000 ,2000 ,800 ,2000 ,2000 ,2000 ,2000 ,800 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Baby Knight
-4030, 28000,150 ,500 ,300 ,400 ,490 ,450 ,520 ,550 ,600 ,500 ,550 ,450 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,50
+4030, 28000,150 ,500 ,300 ,400 ,500 ,500 ,550 ,600 ,600 ,700 ,700 ,650 ,700 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Baby Priest
-4031, 26000,75 ,500 ,800 ,400 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,430 ,480 ,600 ,2000 ,600 ,2000 ,2000 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,600 ,50
+4031, 26000,75 ,500 ,800 ,400 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,600 ,600 ,600 ,2000 ,2000 ,2000 ,2000 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 600
// Baby Wizard
-4032, 24000,55 ,500 ,900 ,500 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530 ,80
+4032, 24000,55 ,500 ,900 ,500 ,575 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,625 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 625
// Baby Blacksmith
-4033, 30000,90 ,500 ,400 ,400 ,500 ,500 ,2000 ,2000 ,2000 ,460 ,530 ,480 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,50
+4033, 30000,90 ,500 ,400 ,400 ,600 ,650 ,2000 ,2000 ,2000 ,650 ,650 ,675 ,675 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Baby Hunter
-4034, 27000,85 ,500 ,400 ,400 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,90
+4034, 27000,85 ,500 ,400 ,400 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Baby Assassin
-4035, 24000,110 ,500 ,400 ,400 ,420 ,500 ,2000 ,2000 ,2000 ,510 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,420 ,2000 ,2000 ,2000 ,2000 ,2000 ,1100 ,2000 ,60
+4035, 24000,110 ,500 ,400 ,400 ,500 ,650 ,2000 ,2000 ,2000 ,800 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Baby Knight (Peco)
-4036, 28000,150 ,500 ,300 ,400 ,490 ,450 ,520 ,550 ,600 ,500 ,550 ,450 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,50
+4036, 28000,150 ,500 ,300 ,400 ,500 ,500 ,550 ,600 ,600 ,700 ,700 ,650 ,700 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Baby Crusader
-4037, 28000,110 ,700 ,470 ,400 ,480 ,430 ,550 ,530 ,520 ,500 ,550 ,450 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,50
+4037, 28000,110 ,700 ,470 ,400 ,500 ,500 ,550 ,600 ,600 ,700 ,700 ,650 ,700 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Baby Monk
-4038, 26000,90 ,650 ,470 ,400 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,430 ,480 ,600 ,2000 ,400 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,580 ,50
+4038, 26000,90 ,650 ,470 ,400 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,575 ,575 ,575 ,2000 ,475 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 575
// Baby Sage
-4039, 24000,75 ,500 ,700 ,450 ,530 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,550 ,2000 ,2000 ,2000 ,2000 ,430 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,550 ,50
+4039, 24000,75 ,500 ,700 ,450 ,525 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,625 ,2000 ,2000 ,2000 ,2000 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 625
// Baby Rogue
-4040, 24000,85 ,500 ,500 ,400 ,450 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,50
+4040, 24000,85 ,500 ,500 ,400 ,500 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,650 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Baby Alchemist
-4041, 30000,90 ,500 ,400 ,400 ,500 ,450 ,2000 ,2000 ,2000 ,450 ,520 ,450 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,40
+4041, 30000,90 ,500 ,400 ,400 ,550 ,575 ,2000 ,2000 ,2000 ,675 ,700 ,650 ,650 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Baby Bard
-4042, 27000,75 ,300 ,600 ,400 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,480 ,2000 ,450 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,70
+4042, 27000,75 ,300 ,600 ,400 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,650 ,2000 ,575 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Baby Dancer
-4043, 27000,75 ,300 ,600 ,400 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,480 ,2000 ,2000 ,450 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,70
+4043, 27000,75 ,300 ,600 ,400 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,650 ,2000 ,2000 ,575 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Baby Crusader (Peco)
-4044, 28000,110 ,700 ,470 ,400 ,480 ,430 ,550 ,530 ,520 ,500 ,550 ,450 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,50
+4044, 28000,110 ,700 ,470 ,400 ,500 ,500 ,550 ,600 ,600 ,700 ,700 ,650 ,700 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Baby Super Novice
-4045, 20000,0 ,500 ,100 ,400 ,550 ,570 ,2000 ,2000 ,2000 ,500 ,2000 ,500 ,550 ,650 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,650 ,100
+4045, 20000,0 ,500 ,100 ,500 ,650 ,700 ,2000 ,2000 ,2000 ,800 ,2000 ,700 ,700 ,650 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 650
// Taekwon
-4046, 28000,70 ,500 ,200 ,400 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,60
+4046, 28000,70 ,500 ,200 ,400 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Star Knight
-4047, 28000,90 ,650 ,470 ,400 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,60
+4047, 28000,90 ,650 ,470 ,400 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Star Knight (flying)
-4048, 28000,90 ,650 ,470 ,400 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,500 ,60
+4048, 28000,90 ,650 ,470 ,400 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Soul Linker
-4049, 24000,75 ,500 ,900 ,500 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,550 ,80
-// Rune Knight
-4054, 28000,150 ,500 ,300 ,400 ,500 ,520 ,550 ,600 ,580 ,480 ,520 ,450 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,50
-// Warlock
-4055, 24000,55 ,500 ,900 ,450 ,520 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,560 ,50
-// Ranger
-4056, 27000,85 ,500 ,400 ,400 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,80
-// Archbishop
-4057, 26000,75 ,500 ,800 ,450 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,450 ,450 ,600 ,2000 ,500 ,2000 ,2000 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,550 ,50
-// Mechanic
-4058, 30000,90 ,500 ,400 ,400 ,600 ,650 ,2000 ,2000 ,2000 ,450 ,480 ,480 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,60
-// Guillotine Cross
-4059, 24000,110 ,500 ,400 ,400 ,420 ,650 ,2000 ,2000 ,2000 ,800 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,420 ,2000 ,950 ,1200 ,900 ,1000 ,1100 ,2000 ,90
-// Rune Knight H
-4060, 28000,150 ,500 ,300 ,400 ,500 ,520 ,550 ,600 ,580 ,480 ,520 ,450 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,50
-// Warlock H
-4061, 25000,55 ,500 ,900 ,450 ,520 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,560 ,50
-// Ranger H
-4062, 27000,85 ,500 ,400 ,400 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,80
-// Archbishop H
-4063, 26000,75 ,500 ,800 ,450 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,450 ,450 ,600 ,2000 ,500 ,2000 ,2000 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,550 ,50
-// Mechanic H
-4064, 30000,90 ,500 ,400 ,400 ,600 ,650 ,2000 ,2000 ,2000 ,450 ,480 ,480 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,60
-// Guillotine Cross H
-4065, 24000,110 ,500 ,400 ,400 ,420 ,650 ,2000 ,2000 ,2000 ,800 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,420 ,2000 ,950 ,1200 ,900 ,1000 ,1100 ,2000 ,90
-// Royal Guard
-4066, 28000,110 ,700 ,400 ,400 ,470 ,450 ,530 ,500 ,500 ,480 ,520 ,440 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,50
-// Sorcerer
-4067, 24000,75 ,500 ,900 ,400 ,500 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,450 ,2000 ,2000 ,2000 ,2000 ,450 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,550 ,50
-// Minstrel
-4068, 27000,75 ,300 ,400 ,400 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490 ,2000 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,70
-// Wanderer
-4069, 27000,75 ,300 ,400 ,400 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490 ,2000 ,2000 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,70
-// Sura
-4070, 26000,90 ,650 ,400 ,380 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,430 ,450 ,480 ,2000 ,390 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500 ,50
-// Genetic
-4071, 30000,90 ,500 ,900 ,400 ,500 ,440 ,2000 ,2000 ,2000 ,480 ,510 ,440 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,40
-// Shadow Chaser
-4072, 24000,85 ,500 ,400 ,400 ,430 ,470 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,470 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,40
-// Royal Guard H
-4073, 28000,110 ,700 ,400 ,400 ,470 ,450 ,530 ,500 ,500 ,480 ,520 ,440 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,50
-// Sorcerer H
-4074, 24000,75 ,500 ,900 ,400 ,500 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,450 ,2000 ,2000 ,2000 ,2000 ,450 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,550 ,50
-// Minstrel H
-4075, 27000,75 ,300 ,400 ,400 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490 ,2000 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,70
-// Wanderer H
-4076, 27000,75 ,300 ,400 ,400 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490 ,2000 ,2000 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,70
-// Sura H
-4077, 26000,90 ,650 ,400 ,380 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,430 ,450 ,480 ,2000 ,390 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500 ,50
-// Genetic H
-4078, 30000,90 ,500 ,900 ,400 ,500 ,440 ,2000 ,2000 ,2000 ,480 ,510 ,440 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,40
-// Shadow Chaser H
-4079, 24000,85 ,500 ,400 ,400 ,430 ,470 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,470 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,40
-// Rune Knight2
-4080, 28000,150 ,500 ,300 ,400 ,500 ,520 ,550 ,600 ,580 ,480 ,520 ,450 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,50
-// Rune Knight H2
-4081, 28000,150 ,500 ,300 ,400 ,500 ,520 ,550 ,600 ,580 ,480 ,520 ,450 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,50
-// Royal Guard2
-4082, 28000,110 ,700 ,400 ,400 ,470 ,450 ,530 ,500 ,500 ,480 ,520 ,440 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,50
-// Royal Guard H2
-4083, 28000,110 ,700 ,400 ,400 ,470 ,450 ,530 ,500 ,500 ,480 ,520 ,440 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,50
-// Ranger2
-4084, 27000,85 ,500 ,400 ,400 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,80
-// Ranger H2
-4085, 27000,85 ,500 ,400 ,400 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,80
-// Mechanic2
-4086, 30000,90 ,500 ,400 ,400 ,600 ,650 ,2000 ,2000 ,2000 ,450 ,480 ,480 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,60
-// Mechanic H2
-4087, 30000,90 ,500 ,400 ,400 ,600 ,650 ,2000 ,2000 ,2000 ,450 ,480 ,480 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,60
-// Baby Rune
-4096, 28000,150 ,500 ,300 ,400 ,500 ,520 ,550 ,600 ,580 ,480 ,520 ,450 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,50
-// Baby Warlock
-4097, 24000,55 ,500 ,900 ,450 ,520 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,560 ,50
-// Baby Ranger
-4098, 27000,85 ,500 ,400 ,400 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,80
-// Baby Bishop
-4099, 26000,75 ,500 ,800 ,450 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,450 ,450 ,600 ,2000 ,500 ,2000 ,2000 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,550 ,50
-// Baby Mechanic
-4100, 30000,90 ,500 ,400 ,400 ,600 ,650 ,2000 ,2000 ,2000 ,450 ,480 ,480 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,60
-// Baby Cross
-4101, 24000,110 ,500 ,400 ,400 ,420 ,650 ,2000 ,2000 ,2000 ,800 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,420 ,2000 ,950 ,1200 ,900 ,1000 ,1100 ,2000 ,90
-// Baby Guard
-4102, 28000,110 ,700 ,400 ,400 ,470 ,450 ,530 ,500 ,500 ,480 ,520 ,440 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,50
-// Baby Sorcerer
-4103, 24000,75 ,500 ,900 ,400 ,500 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,450 ,2000 ,2000 ,2000 ,2000 ,450 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,550 ,50
-// Baby Minstrel
-4104, 27000,75 ,300 ,400 ,400 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490 ,2000 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,70
-// Baby Wanderer
-4105, 27000,75 ,300 ,400 ,400 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490 ,2000 ,2000 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,70
-// Baby Sura
-4106, 26000,90 ,650 ,400 ,380 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,430 ,450 ,480 ,2000 ,390 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500 ,50
-// Baby Genetic
-4107, 30000,90 ,500 ,400 ,400 ,500 ,440 ,2000 ,2000 ,2000 ,480 ,510 ,440 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,40
-// Baby Chaser
-4108, 24000,85 ,500 ,400 ,400 ,430 ,470 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,470 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,40
-// Baby Rune2
-4109, 28000,150 ,500 ,300 ,400 ,500 ,520 ,550 ,600 ,580 ,480 ,520 ,450 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,50
-// Baby Guard2
-4110, 28000,110 ,700 ,400 ,400 ,470 ,450 ,530 ,500 ,500 ,480 ,520 ,440 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,50
-// Baby Ranger2
-4111, 27000,85 ,500 ,400 ,400 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,80
-// Baby Mechanic2
-4112, 30000,90 ,500 ,400 ,400 ,600 ,650 ,2000 ,2000 ,2000 ,450 ,480 ,480 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,60
+4049, 24000,75 ,500 ,900 ,500 ,575 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,625 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 625
+//*************************************************************
+//* 3rds (base 650 3CeAM)
+//*************************************************************
+// Rune Knight (Base 2nd to 3rd)
+4054, 28000,150 ,500 ,300 ,400 ,500 ,500 ,550 ,600 ,600 ,700 ,700 ,650 ,700 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
+// Warlock (Base 2nd to 3rd)
+4055, 24000,55 ,500 ,900 ,500 ,575 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,625 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 625
+// Ranger (Base 2nd to 3rd)
+4056, 27000,85 ,500 ,400 ,400 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
+// Arch Bishop (Base 2nd to 3rd)
+4057, 26000,75 ,500 ,800 ,400 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,600 ,600 ,600 ,2000 ,2000 ,2000 ,2000 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 600
+// Mechanic (Base 2nd to 3rd)
+4058, 30000,90 ,500 ,400 ,400 ,600 ,650 ,2000 ,2000 ,2000 ,650 ,650 ,675 ,675 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
+// Guillotine Cross(Base 2nd to 3rd)
+4059, 24000,110 ,500 ,400 ,400 ,500 ,650 ,2000 ,2000 ,2000 ,800 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
+// Rune Knight (Trans 2nd to 3rd)
+4060, 28000,150 ,500 ,300 ,400 ,500 ,500 ,550 ,600 ,600 ,700 ,700 ,650 ,700 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
+// Warlock (Trans 2nd to 3rd)
+4061, 24000,55 ,500 ,900 ,500 ,575 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,625 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 625
+// Ranger (Trans 2nd to 3rd)
+4062, 27000,85 ,500 ,400 ,400 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
+// Arch Bishop (Trans 2nd to 3rd)
+4063, 26000,75 ,500 ,800 ,400 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,600 ,600 ,600 ,2000 ,2000 ,2000 ,2000 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 600
+// Mechanic (Trans 2nd to 3rd)
+4064, 30000,90 ,500 ,400 ,400 ,600 ,650 ,2000 ,2000 ,2000 ,650 ,650 ,675 ,675 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
+// Guillotine Cross(Trans 2nd to 3rd)
+4065, 24000,110 ,500 ,400 ,400 ,500 ,650 ,2000 ,2000 ,2000 ,800 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
+// Royal Guard (Base 2nd to 3rd)
+4066, 28000,110 ,700 ,470 ,400 ,500 ,500 ,550 ,600 ,600 ,700 ,700 ,650 ,700 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
+// Sorcerer (Base 2nd to 3rd)
+4067, 24000,75 ,500 ,700 ,450 ,525 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,625 ,2000 ,2000 ,2000 ,2000 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 625
+// Minstrel (Base 2nd to 3rd)
+4068, 27000,75 ,300 ,600 ,400 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,650 ,2000 ,575 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
+// Wanderer (Base 2nd to 3rd)
+4069, 27000,75 ,300 ,600 ,400 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,650 ,2000 ,2000 ,575 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
+// Sura (Base 2nd to 3rd)
+4070, 26000,90 ,650 ,470 ,400 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,575 ,575 ,575 ,2000 ,475 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 575
+// Genetic (Base 2nd to 3rd)
+4071, 30000,90 ,500 ,400 ,400 ,550 ,575 ,2000 ,2000 ,2000 ,675 ,700 ,650 ,650 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
+// Shadow Chaser (Base 2nd to 3rd)
+4072, 24000,85 ,500 ,500 ,400 ,500 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,650 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
+// Royal Guard (Trans 2nd to 3rd)
+4073, 28000,110 ,700 ,470 ,400 ,500 ,500 ,550 ,600 ,600 ,700 ,700 ,650 ,700 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
+// Sorcerer (Trans 2nd to 3rd)
+4074, 24000,75 ,500 ,700 ,450 ,525 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,625 ,2000 ,2000 ,2000 ,2000 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 625
+// Minstrel (Trans 2nd to 3rd)
+4075, 27000,75 ,300 ,600 ,400 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,650 ,2000 ,575 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
+// Wanderer (Trans 2nd to 3rd)
+4076, 27000,75 ,300 ,600 ,400 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,650 ,2000 ,2000 ,575 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
+// Sura (Trans 2nd to 3rd)
+4077, 26000,90 ,650 ,470 ,400 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,575 ,575 ,575 ,2000 ,475 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 575
+// Genetic (Trans 2nd to 3rd)
+4078, 30000,90 ,500 ,400 ,400 ,550 ,575 ,2000 ,2000 ,2000 ,675 ,700 ,650 ,650 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
+// Shadow Chaser (Trans 2nd to 3rd)
+4079, 24000,85 ,500 ,500 ,400 ,500 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,650 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
+// Rune Knight Mount (Base 2nd to 3rd)
+4080, 28000,150 ,500 ,300 ,400 ,500 ,500 ,550 ,600 ,600 ,700 ,700 ,650 ,700 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
+// Rune Knight Mount (Trans 2nd to 3rd)
+4081, 28000,150 ,500 ,300 ,400 ,500 ,500 ,550 ,600 ,600 ,700 ,700 ,650 ,700 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
+// Royal Guard Mount (Base 2nd to 3rd)
+4082, 28000,110 ,700 ,470 ,400 ,500 ,500 ,550 ,600 ,600 ,700 ,700 ,650 ,700 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
+// Royal Guard Mount (Trans 2nd to 3rd)
+4083, 28000,110 ,700 ,470 ,400 ,500 ,500 ,550 ,600 ,600 ,700 ,700 ,650 ,700 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
+// Ranger Mount (Base 2nd to 3rd)
+4084, 27000,85 ,500 ,400 ,400 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
+// Ranger Mount (Trans 2nd to 3rd)
+4085, 27000,85 ,500 ,400 ,400 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
+// Mechanic Mount (Base 2nd to 3rd)
+4086, 30000,90 ,500 ,400 ,400 ,600 ,650 ,2000 ,2000 ,2000 ,650 ,650 ,675 ,675 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
+// Mechanic Mount (Trans 2nd to 3rd)
+4087, 30000,90 ,500 ,400 ,400 ,600 ,650 ,2000 ,2000 ,2000 ,650 ,650 ,675 ,675 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 \ No newline at end of file
diff --git a/db/job_db2.txt b/db/job_db2.txt
index 14f6c7553..a0c88121d 100644
--- a/db/job_db2.txt
+++ b/db/job_db2.txt
@@ -161,58 +161,74 @@
4048,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2
// Soul Linker
4049,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5
-//
-// Third Classes (normal, trans/high, baby)
-//
-// Rune Knight
+//*************************************************************
+//* 3rds (base 650 3CeAM)
+//*************************************************************
+// Rune Knight (Base 2nd to 3rd)
4054,4,4,5,3,4,0,0,0,0,1,1,4,4,3,5,0,0,0,5,2,2,4,3,5,0,0,0,0,0,4,5,3,1,0,0,0,0,0,4,5,2,0,0,5,3,4,6,6,6,4
-4060,4,4,5,3,4,0,0,0,0,1,1,4,4,3,5,0,0,0,5,2,2,4,3,5,0,0,0,0,0,4,5,3,1,0,0,0,0,0,4,5,2,0,0,5,3,4,6,6,6,4
-4096,4,4,5,3,4,0,0,0,0,1,1,4,4,3,5,0,0,0,5,2,2,4,3,5,0,0,0,0,0,4,5,3,1,0,0,0,0,0,4,5,2,0,0,5,3,4,6,6,6,4
-// Warlock
-4055,4,4,5,0,0,5,4,2,0,0,0,4,5,0,3,0,0,3,5,2,0,0,4,3,3,0,0,5,2,0,6,0,0,1,4,4,0,0,5,2,4,0,0,4,4,0,2,0,0,4
-4061,4,4,5,0,0,5,4,2,0,0,0,4,5,0,3,0,0,3,5,2,0,0,4,3,3,0,0,5,2,0,6,0,0,1,4,4,0,0,5,2,4,0,0,4,4,0,2,0,0,4
-4097,4,4,5,0,0,5,4,2,0,0,0,4,5,0,3,0,0,3,5,2,0,0,4,3,3,0,0,5,2,0,6,0,0,1,4,4,0,0,5,2,4,0,0,4,4,0,2,0,0,4
-// Ranger
+// Warlock (Base 2nd to 3rd)
+4055,4,4,5,0,0,5,4,2,0,0,0,0,5,0,3,0,0,3,5,2,0,0,4,3,3,0,0,5,2,0,6,0,0,1,4,4,0,0,5,2,4,0,0,4,4,0,2,0,0,4
+// Ranger (Base 2nd to 3rd)
4056,5,4,4,2,0,0,2,5,4,0,0,3,3,3,0,0,5,2,0,0,4,3,5,0,0,1,1,0,0,5,2,3,0,0,0,4,4,4,2,0,0,0,2,5,2,0,0,0,4,2
-4062,5,4,4,2,0,0,2,5,4,0,0,3,3,3,0,0,5,2,0,0,4,3,5,0,0,1,1,0,0,5,2,3,0,0,0,4,4,4,2,0,0,0,2,5,2,0,0,0,4,2
-4098,5,4,4,2,0,0,2,5,4,0,0,3,3,3,0,0,5,2,0,0,4,3,5,0,0,1,1,0,0,5,2,3,0,0,0,4,4,4,2,0,0,0,2,5,2,0,0,0,4,2
-// Archbishop
+// Arch Bishop (Base 2nd to 3rd)
4057,4,0,3,0,5,0,4,4,0,3,3,0,0,5,5,0,0,1,1,0,0,4,0,1,0,2,2,1,0,0,0,4,0,3,0,5,0,2,2,4,4,0,0,5,3,1,0,0,4,5
-4063,4,0,3,0,5,0,4,4,0,3,3,0,0,5,5,0,0,1,1,0,0,4,0,1,0,2,2,1,0,0,0,4,0,3,0,5,0,2,2,4,4,0,0,5,3,1,0,0,4,5
-4099,4,0,3,0,5,0,4,4,0,3,3,0,0,5,5,0,0,1,1,0,0,4,0,1,0,2,2,1,0,0,0,4,0,3,0,5,0,2,2,4,4,0,0,5,3,1,0,0,4,5
-// Mechanic
+// Mechanic (Base 2nd to 3rd)
4058,6,1,0,0,1,0,6,2,5,4,0,0,4,6,0,0,2,0,3,3,4,5,0,0,3,6,0,0,3,0,1,1,3,6,0,0,4,4,0,0,0,3,3,1,1,0,0,5,2,0
-4064,6,1,0,0,1,0,6,2,5,4,0,0,4,6,0,0,2,0,3,3,4,5,0,0,3,6,0,0,3,0,1,1,3,6,0,0,4,4,0,0,0,3,3,1,1,0,0,5,2,0
-4100,6,1,0,0,1,0,6,2,5,4,0,0,4,6,0,0,2,0,3,3,4,5,0,0,3,6,0,0,3,0,1,1,3,6,0,0,4,4,0,0,0,3,3,1,1,0,0,5,2,0
-// Guillotine Cross
+// Guillotine Cross (Base 2nd to 3rd)
4059,2,5,0,1,1,0,0,0,1,2,5,0,0,3,3,1,0,0,3,1,0,0,2,2,5,0,0,4,4,1,3,0,0,0,2,5,5,0,0,0,4,3,2,2,0,0,0,4,5,5
+// Rune Knight (Trans 2nd to 3rd)
+4060,4,4,5,3,4,0,0,0,0,1,1,4,4,3,5,0,0,0,5,2,2,4,3,5,0,0,0,0,0,4,5,3,1,0,0,0,0,0,4,5,2,0,0,5,3,4,6,6,6,4
+// Warlock (Trans 2nd to 3rd)
+4061,4,4,5,0,0,5,4,2,0,0,0,0,5,0,3,0,0,3,5,2,0,0,4,3,3,0,0,5,2,0,6,0,0,1,4,4,0,0,5,2,4,0,0,4,4,0,2,0,0,4
+// Ranger (Trans 2nd to 3rd)
+4062,5,4,4,2,0,0,2,5,4,0,0,3,3,3,0,0,5,2,0,0,4,3,5,0,0,1,1,0,0,5,2,3,0,0,0,4,4,4,2,0,0,0,2,5,2,0,0,0,4,2
+// Arch Bishop (Trans 2nd to 3rd)
+4063,4,0,3,0,5,0,4,4,0,3,3,0,0,5,5,0,0,1,1,0,0,4,0,1,0,2,2,1,0,0,0,4,0,3,0,5,0,2,2,4,4,0,0,5,3,1,0,0,4,5
+// Mechanic (Trans 2nd to 3rd)
+4064,6,1,0,0,1,0,6,2,5,4,0,0,4,6,0,0,2,0,3,3,4,5,0,0,3,6,0,0,3,0,1,1,3,6,0,0,4,4,0,0,0,3,3,1,1,0,0,5,2,0
+// Guillotine Cross (Trans 2nd to 3rd)
4065,2,5,0,1,1,0,0,0,1,2,5,0,0,3,3,1,0,0,3,1,0,0,2,2,5,0,0,4,4,1,3,0,0,0,2,5,5,0,0,0,4,3,2,2,0,0,0,4,5,5
-4101,2,5,0,1,1,0,0,0,1,2,5,0,0,3,3,1,0,0,3,1,0,0,2,2,5,0,0,4,4,1,3,0,0,0,2,5,5,0,0,0,4,3,2,2,0,0,0,4,5,5
-// Royal Guard
-4066,0,3,4,1,4,5,0,0,3,0,4,0,1,5,0,6,0,0,4,5,0,0,2,4,0,4,3,0,0,1,5,0,6,2,0,0,4,4,0,1,3,3,0,5,1,4,0,1,5,0
-4073,0,3,4,1,4,5,0,0,3,0,4,0,1,5,0,6,0,0,4,5,0,0,2,4,0,4,3,0,0,1,5,0,6,2,0,0,4,4,0,1,3,3,0,5,1,4,0,1,5,0
-4102,0,3,4,1,4,5,0,0,3,0,4,0,1,5,0,6,0,0,4,5,0,0,2,4,0,4,3,0,0,1,5,0,6,2,0,0,4,4,0,1,3,3,0,5,1,4,0,1,5,0
-// Sorcerer
+// Royal Guard (Base 2nd to 3rd)
+4066,5,5,5,5,5,0,0,0,2,2,2,2,2,0,0,0,1,1,1,1,1,0,0,0,0,6,6,6,6,6,0,0,0,0,0,3,3,3,3,3,0,0,0,0,0,4,4,4,4,4
+// Sorcerer (Base 2nd to 3rd)
4067,4,4,5,3,4,0,0,0,0,1,1,4,4,3,5,0,0,0,5,2,2,4,3,5,0,0,0,0,0,4,5,3,1,0,0,0,0,0,4,5,2,0,0,5,3,4,6,6,6,4
-4074,4,4,5,3,4,0,0,0,0,1,1,4,4,3,5,0,0,0,5,2,2,4,3,5,0,0,0,0,0,4,5,3,1,0,0,0,0,0,4,5,2,0,0,5,3,4,6,6,6,4
-4103,4,4,5,3,4,0,0,0,0,1,1,4,4,3,5,0,0,0,5,2,2,4,3,5,0,0,0,0,0,4,5,3,1,0,0,0,0,0,4,5,2,0,0,5,3,4,6,6,6,4
-// Minstrel
-4068,4,0,3,0,5,0,4,4,0,3,3,0,0,5,5,0,0,1,1,0,0,4,0,1,0,2,2,1,0,0,0,4,0,3,0,5,0,2,2,4,4,0,0,5,3,1,0,0,4,5
-4075,4,0,3,0,5,0,4,4,0,3,3,0,0,5,5,0,0,1,1,0,0,4,0,1,0,2,2,1,0,0,0,4,0,3,0,5,0,2,2,4,4,0,0,5,3,1,0,0,4,5
-4104,4,0,3,0,5,0,4,4,0,3,3,0,0,5,5,0,0,1,1,0,0,4,0,1,0,2,2,1,0,0,0,4,0,3,0,5,0,2,2,4,4,0,0,5,3,1,0,0,4,5
-// Wanderer
+// Minstrel (Base 2nd to 3rd)
+4068,0,0,3,0,5,0,4,4,0,3,3,0,0,5,5,0,0,1,1,0,0,4,0,1,0,2,2,1,0,0,0,4,0,3,0,5,0,2,0,4,4,0,0,5,3,1,0,0,4,5
+// Wanderer (Base 2nd to 3rd)
4069,5,4,4,2,0,0,2,5,4,0,0,3,3,3,0,0,5,2,0,0,4,3,5,0,0,1,1,0,0,5,2,3,0,0,0,4,4,4,2,0,0,0,2,5,2,0,0,0,4,2
-4076,5,4,4,2,0,0,2,5,4,0,0,3,3,3,0,0,5,2,0,0,4,3,5,0,0,1,1,0,0,5,2,3,0,0,0,4,4,4,2,0,0,0,2,5,2,0,0,0,4,2
-4105,5,4,4,2,0,0,2,5,4,0,0,3,3,3,0,0,5,2,0,0,4,3,5,0,0,1,1,0,0,5,2,3,0,0,0,4,4,4,2,0,0,0,2,5,2,0,0,0,4,2
-// Sura
+// Sura (Base 2nd to 3rd)
4070,2,5,0,1,1,0,0,0,1,2,5,0,0,3,3,1,0,0,3,1,0,0,2,2,5,0,0,4,4,1,3,0,0,0,2,5,5,0,0,0,4,3,2,2,0,0,0,4,5,5
-4077,2,5,0,1,1,0,0,0,1,2,5,0,0,3,3,1,0,0,3,1,0,0,2,2,5,0,0,4,4,1,3,0,0,0,2,5,5,0,0,0,4,3,2,2,0,0,0,4,5,5
-4106,2,5,0,1,1,0,0,0,1,2,5,0,0,3,3,1,0,0,3,1,0,0,2,2,5,0,0,4,4,1,3,0,0,0,2,5,5,0,0,0,4,3,2,2,0,0,0,4,5,5
-// Genetic
-4071,4,4,5,0,0,5,4,2,0,0,0,4,5,0,3,0,0,3,5,2,0,0,4,3,3,0,0,5,2,0,6,0,0,1,4,4,0,0,5,2,4,0,0,4,4,0,2,0,0,4
-4078,4,4,5,0,0,5,4,2,0,0,0,4,5,0,3,0,0,3,5,2,0,0,4,3,3,0,0,5,2,0,6,0,0,1,4,4,0,0,5,2,4,0,0,4,4,0,2,0,0,4
-4107,4,4,5,0,0,5,4,2,0,0,0,4,5,0,3,0,0,3,5,2,0,0,4,3,3,0,0,5,2,0,6,0,0,1,4,4,0,0,5,2,4,0,0,4,4,0,2,0,0,4
-// Shadow Chaser
+// Genetic (Base 2nd to 3rd)
+4071,4,4,5,0,0,5,4,2,0,0,0,4,5,0,0,0,0,3,5,2,0,0,4,3,3,0,0,5,2,0,6,0,0,0,4,4,1,0,5,2,4,0,0,4,4,0,2,0,0,4
+// Shadow Chaser (Base 2nd to 3rd)
4072,6,1,0,0,1,0,6,2,5,4,0,0,4,6,0,0,2,0,3,3,4,5,0,0,3,6,0,0,3,0,1,1,3,6,0,0,4,4,0,0,0,3,3,1,1,0,0,5,2,0
+// Royal Guard (Trans 2nd to 3rd)
+4073,5,5,5,5,5,0,0,0,2,2,2,2,2,0,0,0,1,1,1,1,1,0,0,0,0,6,6,6,6,6,0,0,0,0,0,3,3,3,3,3,0,0,0,0,0,4,4,4,4,4
+// Sorcerer (Trans 2nd to 3rd)
+4074,4,4,5,3,4,0,0,0,0,1,1,4,4,3,5,0,0,0,5,2,2,4,3,5,0,0,0,0,0,4,5,3,1,0,0,0,0,0,4,5,2,0,0,5,3,4,6,6,6,4
+// Minstrel (Trans 2nd to 3rd)
+4075,0,0,3,0,5,0,4,4,0,3,3,0,0,5,5,0,0,1,1,0,0,4,0,1,0,2,2,1,0,0,0,4,0,3,0,5,0,2,0,4,4,0,0,5,3,1,0,0,4,5
+// Wanderer (Trans 2nd to 3rd)
+4076,5,4,4,2,0,0,2,5,4,0,0,3,3,3,0,0,5,2,0,0,4,3,5,0,0,1,1,0,0,5,2,3,0,0,0,4,4,4,2,0,0,0,2,5,2,0,0,0,4,2
+// Sura (Trans 2nd to 3rd)
+4077,2,5,0,1,1,0,0,0,1,2,5,0,0,3,3,1,0,0,3,1,0,0,2,2,5,0,0,4,4,1,3,0,0,0,2,5,5,0,0,0,4,3,2,2,0,0,0,4,5,5
+// Genetic (Trans 2nd to 3rd)
+4078,4,4,5,0,0,5,4,2,0,0,0,4,5,0,0,0,0,3,5,2,0,0,4,3,3,0,0,5,2,0,6,0,0,0,4,4,1,0,5,2,4,0,0,4,4,0,2,0,0,4
+// Shadow Chaser (Trans 2nd to 3rd)
4079,6,1,0,0,1,0,6,2,5,4,0,0,4,6,0,0,2,0,3,3,4,5,0,0,3,6,0,0,3,0,1,1,3,6,0,0,4,4,0,0,0,3,3,1,1,0,0,5,2,0
-4108,6,1,0,0,1,0,6,2,5,4,0,0,4,6,0,0,2,0,3,3,4,5,0,0,3,6,0,0,3,0,1,1,3,6,0,0,4,4,0,0,0,3,3,1,1,0,0,5,2,0
+// Rune Knight Mount (Base 2nd to 3rd)
+4080,4,4,5,3,4,0,0,0,0,1,1,4,4,3,5,0,0,0,5,2,2,4,3,5,0,0,0,0,0,4,5,3,1,0,0,0,0,0,4,5,2,0,0,5,3,4,6,6,6,4
+// Rune Knight Mount (Trans 2nd to 3rd)
+4081,4,4,5,3,4,0,0,0,0,1,1,4,4,3,5,0,0,0,5,2,2,4,3,5,0,0,0,0,0,4,5,3,1,0,0,0,0,0,4,5,2,0,0,5,3,4,6,6,6,4
+// Royal Guard Mount (Base 2nd to 3rd)
+4082,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+// Royal Guard Mount (Trans 2nd to 3rd)
+4083,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+// Ranger Mount (Base 2nd to 3rd)
+4084,5,4,4,2,0,0,2,5,4,0,0,3,3,3,0,0,5,2,0,0,4,3,5,0,0,1,1,0,0,5,2,3,0,0,0,4,4,4,2,0,0,0,2,5,2,0,0,0,4,2
+// Ranger Mount (Trans 2nd to 3rd)
+4085,5,4,4,2,0,0,2,5,4,0,0,3,3,3,0,0,5,2,0,0,4,3,5,0,0,1,1,0,0,5,2,3,0,0,0,4,4,4,2,0,0,0,2,5,2,0,0,0,4,2
+// Mechanic Mount (Base 2nd to 3rd)
+4086,6,1,0,0,1,0,6,2,5,4,0,0,4,6,0,0,2,0,3,3,4,5,0,0,3,6,0,0,3,0,1,1,3,6,0,0,4,4,0,0,0,3,3,1,1,0,0,5,2,0
+// Mechanic Mount (Trans 2nd to 3rd)
+4087,6,1,0,0,1,0,6,2,5,4,0,0,4,6,0,0,2,0,3,3,4,5,0,0,3,6,0,0,3,0,1,1,3,6,0,0,4,4,0,0,0,3,3,1,1,0,0,5,2,0
diff --git a/db/magicmushroom_db.txt b/db/magicmushroom_db.txt
new file mode 100644
index 000000000..1d145bd45
--- /dev/null
+++ b/db/magicmushroom_db.txt
@@ -0,0 +1,26 @@
+// Magic Mushroom DB.
+// Database for skills that are randomly used trough Magic Mushroom status change.
+// Format: SkillID
+
+7 //SM_MAGNUM
+8 //SM_ENDURE
+10 //MG_SIGHT
+24 //AL_RUWACH
+32 //AL_CRUCIS
+33 //AL_ANGELUS
+45 //AC_CONCENTRATION
+61 //KN_AUTOCOUNTER
+74 //PR_MAGNIFICAT
+110 //BS_HAMMERFALL
+114 //BS_MAXIMIZE
+142 //NV_FIRSTAID
+150 //TF_BACKSLIDING
+151 //TF_PICKSTONE
+157 //MG_ENERGYCOAT
+249 //CR_AUTOGUARD
+261 //MO_CALLSPIRITS
+256 //CR_PROVIDENCE
+318 //BA_FROSTJOKER
+500 //GS_GLITTERING
+527 //NJ_TATAMIGAESHI
+531 //NJ_UTSUSEMI
diff --git a/db/mob_penalty_db.txt b/db/mob_penalty_db.txt
deleted file mode 100644
index 6e1ef849c..000000000
--- a/db/mob_penalty_db.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-// This database is currently unused, and is not read by the server.
-// It is here only to illistrate design, with known information.
-// Recommended formatting to handle the level penalty system.
-//
-// Mob Level Penalty Database
-//
-// Structure of Database :
-// Type or MOD ID,Level Difference:Percentage{,Level Difference:Percentage{,...}}
-//
-// 01:
-// 0 Normal Mob EXP penalty. penalty or bonus to EXP from normal monsters relative to level.
-// 1 Boss Mob EXP penalty. penalty or bonus to EXP from boss monsters relative to level.
-// 2 Normal Mob Damage Penlty. penalty or bonus to damage done to normal monsters relative to level.
-// 3 Boss Mob Damage Penlty. penalty or bonus to damage done to boss monsters relative to level.
-// 4 Normal Mob Drop penalty. penalty or bonus to drops from normal monsters relative to level.
-// 5 Boss Mob Drop penalty. penalty or bonus to drops from boss monsters relative to level.
-//
-// 02:
-// Level Difference:Percentage Adustment.
-// All levels below the highest or lowest value given will carry that adjustment to reamining levels.
-// For example:
-// If only 0:100 is given, all levels will receieve the 100% rate.
-// Another example would be:
-// If 0,13:0,12:25,11:50,10:100 is given, then a level difference of 13 levels and higher recievce 0 exp.
-// While a 12 level difference will give 25% of the exp the monster would give normally.
-// with a level difference of 11, 50%...and if you are 10 levels lower, 100%.
-//
-
-// Normal Mob EXP penalty.
-0,13:40,12:50,11:60,10:140,9:135,8:130,7:125,6:120,5:115,4:110,3:105,0:100,-1:100,-6:95,-11:90,-16:85,-21:60,-26:35,-31:10
-// Boss Mob EXP penalty.
-1,0:100
-// Normal Mob Damage Penlty.
-2,0:100
-// Boss Mob Damage Penlty.
-3,0:100
-// Normal Mob Drop penalty.
-4,71:50,61:60,51:70,41:80,31:90,0:100,-31:90,-41:80,-51:70,-61:60,-71:50
-// Boss Mob Drop penalty.
-5,0:100
diff --git a/db/mob_skill_db.txt b/db/mob_skill_db.txt
index ba0bd9028..eda483906 100644
--- a/db/mob_skill_db.txt
+++ b/db/mob_skill_db.txt
@@ -5704,11 +5704,32 @@
2027,Dark Shadow@NPC_FIREATTACK,attack,186,3,500,500,5000,no,target,always,0,,,,,,,
2027,Dark Shadow@NPC_DARKNESSBREATH,attack,658,1,500,1000,5000,no,target,always,0,,,,,,,
+//****
+// NC Mechanic Summons
+2042,Silver Sniper@AL_HEAL,chase,28,10,10000,0,1000,no,self,myhpltmaxrate,99,,,,,,,
+2042,Silver Sniper@AL_HEAL,idle,28,10,10000,0,1000,no,self,myhpltmaxrate,99,,,,,,,
+2042,Silver Sniper@AL_HEAL,attack,28,10,10000,0,1000,no,self,myhpltmaxrate,99,,,,,,,
2042,Silver Sniper@NPC_REVENGE,idle,333,1,10000,0,0,yes,self,always,0,,,,,,,
-2043,Magic Decoy@MG_FIREBOLT,idle,19,10,10000,800,3500,yes,randomtarget,always,0,,,,,,,
-2044,Magic Decoy@MG_COLDBOLT,idle,14,10,10000,800,3500,yes,randomtarget,always,0,,,,,,,
-2045,Magic Decoy@WZ_EARTHSPIKE,idle,90,10,10000,800,3500,yes,randomtarget,always,0,,,,,,,
-2046,Magic Decoy@MG_LIGHTNINGBOLT,idle,20,10,10000,800,3500,yes,randomtarget,always,0,,,,,,,
+2043,Magic Decoy Fire@MG_FIREBOLT,attack,19,10,10000,800,3500,no,target,always,0,,,,,,,
+2043,Magic Decoy Fire@MG_FIREBOLT,chase,19,10,10000,800,3500,no,target,always,0,,,,,,,
+2043,Magic Decoy Fire@AL_HEAL,chase,28,10,10000,0,1000,no,self,myhpltmaxrate,99,,,,,,,
+2043,Magic Decoy Fire@AL_HEAL,idle,28,10,10000,0,1000,no,self,myhpltmaxrate,99,,,,,,,
+2043,Magic Decoy Fire@AL_HEAL,attack,28,10,10000,0,1000,no,self,myhpltmaxrate,99,,,,,,,
+2044,Magic Decoy Water@MG_COLDBOLT,attack,14,10,10000,800,3500,no,target,always,0,,,,,,,
+2044,Magic Decoy Water@MG_COLDBOLT,chase,14,10,10000,800,3500,no,target,always,0,,,,,,,
+2044,Magic Decoy Water@AL_HEAL,chase,28,10,10000,0,1000,no,self,myhpltmaxrate,99,,,,,,,
+2044,Magic Decoy Water@AL_HEAL,idle,28,10,10000,0,1000,no,self,myhpltmaxrate,99,,,,,,,
+2044,Magic Decoy Water@AL_HEAL,attack,28,10,10000,0,1000,no,self,myhpltmaxrate,99,,,,,,,
+2045,Magic Decoy Earth@WZ_EARTHSPIKE,attack,90,10,10000,800,3500,no,target,always,0,,,,,,,
+2045,Magic Decoy Earth@WZ_EARTHSPIKE,chase,90,10,10000,800,3500,no,target,always,0,,,,,,,
+2045,Magic Decoy Earth@AL_HEAL,chase,28,10,10000,0,1000,no,self,myhpltmaxrate,99,,,,,,,
+2045,Magic Decoy Earth@AL_HEAL,idle,28,10,10000,0,1000,no,self,myhpltmaxrate,99,,,,,,,
+2045,Magic Decoy Earth@AL_HEAL,attack,28,10,10000,0,1000,no,self,myhpltmaxrate,99,,,,,,,
+2046,Magic Decoy Wind@MG_LIGHTNINGBOLT,attack,20,10,10000,800,3500,no,target,always,0,,,,,,,
+2046,Magic Decoy Wind@MG_LIGHTNINGBOLT,chase,20,10,10000,800,3500,no,target,always,0,,,,,,,
+2046,Magic Decoy Wind@AL_HEAL,chase,28,10,10000,0,1000,no,self,myhpltmaxrate,99,,,,,,,
+2046,Magic Decoy Wind@AL_HEAL,idle,28,10,10000,0,1000,no,self,myhpltmaxrate,99,,,,,,,
+2046,Magic Decoy Wind@AL_HEAL,attack,28,10,10000,0,1000,no,self,myhpltmaxrate,99,,,,,,,
//2053,Dimik@NPC_ATTRICHANGE,idle,161,1,500,2000,50000,no,self,always,0,,,,,,10,
//2053,Dimik@NPC_EMOTION_ON,idle,474,1,100,0,60000,yes,self,always,0,20,0x81,,,,,
diff --git a/db/packet_db.txt b/db/packet_db.txt
index 34c488295..a9517e0c0 100644
--- a/db/packet_db.txt
+++ b/db/packet_db.txt
@@ -1,13 +1,39 @@
+// Client<->Map Packet Database
+//
+// Structure of Database:
+// PacketType,PacketLength[,Name,FieldIndex1:FieldIndex2:FieldIndex3:...]
+//
+// 01. PacketType ID of the packet.
+// 02. PacketLength Length of the packet. If 0, packet is disabled in current packet version. If -1, packet has variable size.
+// 03. Name Name of the packet parser function (optional, for incoming packets only).
+// 04. FieldIndex Specifies the offset of a packet field in bytes from the begin of the packet (only specified when Name is given).
+// Can be 0, when the layout is not known.
+// ...
+//
+// NOTE: Up to MAX_PACKET_POS (typically 20) field indexes may be used.
+//
// The packet database allows you to add support for new clients,
// because packets change every release.
+//
// Note: Every packet version needs a wanttoconnection specification, since
// that is the packet used to identify a client's version.
// If multiple versions have the same connection packet, the higher version
// will be used (unless the lower one is specified as the default)
-
+//
+// Incoming packets have their parser function and layout specified, which enables
+// them for the current and all higher versions, unless explicitely disabled.
+//
+// Outgoing packets must be specified in order to enable them for the current
+// and all higher versions, unless explocitely disabled. Packets that are not
+// enabled for a packet version are silently discarded when sent as multicast.
+//
+// Every packet version inherits packet definitions from the previous (lower)
+// packet version.
+//
// Main packet version of the DB to use (default = max available version)
// Client detection is faster when all clients use this version.
// Version 23 is the latest Sakexe (above versions are for Renewal clients)
+//packet_db_ver: 23
packet_db_ver: default
@@ -767,10 +793,10 @@ packet_ver: 18
0x0249,3
0x024a,70
0x024b,4,auctioncancelreg,2
-0x024c,8,auctionsetitem,0
+0x024c,8,auctionsetitem,2:4
0x024d,14
-0x024e,6,auctioncancel,0
-0x024f,10,auctionbid,0
+0x024e,6,auctioncancel,2
+0x024f,10,auctionbid,2:6
0x0250,3
0x0251,2
0x0252,-1
@@ -825,7 +851,7 @@ packet_ver: 19
//2005-10-13aSakexe
0x007a,6
0x0251,32
-0x025c,4,auctionbuysell,0
+0x025c,4,auctionbuysell,2
//2005-10-17aSakexe
0x007a,58
@@ -837,8 +863,7 @@ packet_ver: 19
0x0260,6
//2005-11-07aSakexe
-0x024e,6,auctioncancel,0
-0x0251,34,auctionsearch,0
+0x0251,34,auctionsearch,2:4:8:32
//2006-01-09aSakexe
0x0261,11
diff --git a/db/produce_db.txt b/db/produce_db.txt
index f24d1ba93..78252447c 100644
--- a/db/produce_db.txt
+++ b/db/produce_db.txt
@@ -396,32 +396,49 @@
//==============================================
-//===== Third Class === ItemLV=?? ==============
-
-//---- Rune Kight ------------------------------
-//--- Tursius Runestone <-- RK_RUNEMASTERY & Elder_Branch 1, Cobold_Hair 1, Claw_Of_Desert_Wolf 1
-12731,24,2010,1,7939,1,1034,1,7030,1
-//--- Isia Runestone <-- RK_RUNEMASTERY & Elder_Branch 1, Burning_Heart 1
-12728,24,2010,2,7939,1,7097,1
-//--- Pertz Runestone <-- RK_RUNEMASTERY & Elder_Branch 1, Light_Granule 1, Tangled_Chain 1, Dragon_Canine 1
-12732,24,2010,3,7939,1,7938,1,7221,1,1035,1
-//--- Hagalas Runestone <-- RK_RUNEMASTERY & Elder_Branch 1, Round_Shell 1, Dragon's_Skin 1
-12733,24,2010,4,7939,1,1096,1,7123,1
-//--- Asir Runestone <-- RK_RUNEMASTERY & Elder_Branch 1, Light_Granule 1, Ogre_Tooth 1
-12729,24,2010,5,7939,1,7938,1,7002,1
-//--- Urj Runestone <-- RK_RUNEMASTERY & Elder_Branch 1, Slender_Snake 1, Honey 1
-12730,24,2010,6,7939,1,1048,1,518,1
-//--- Rhydo Runestone <-- RK_RUNEMASTERY & Elder_Branch 1, Light_Granule 1, Red_Gemstone 1
-12726,24,2010,7,7939,1,7938,1,716,1
-//--- Noseige Runestone <-- RK_RUNEMASTERY & Elder_Branch 1, Light_Granule 1, Broken_Armor_Piece 1, Old_Magic_Circle 1
-12725,24,2010,8,7939,2,7938,2,7069,1,618,1
-//--- Verkana Runestone <-- RK_RUNEMASTERY & Elder_Branch 1, Dullahan_Armor 1
-12727,24,2010,9,7939,1,7210,1
-//----------------------------------------------
-
-//---- Arch Bishop -----------------------------
+//===== Ancilla And Runes === ItemLV=24 ========
+//---- Ancilla ---------------------------------
//-- Ancilla <-- AB_ANCILLA & 1 Blue Gemstone
-12333,22,2039,1,717,1
-//----------------------------------------------
+12333,24,2039,1,717,1
+
+//---- Rune Stones -----------------------------
+//-- Runstone Nosiege <-- RK_RUNEMASTERY Lv8, 1 Broken Armor Piece, 1 Old Magic Circle, 1 Light Granule, 1 Elder Branch
+12725,24,2010,8,7069,1,7099,1,7938,1,7939,1
+//-- Runstone Rhydo <-- RK_RUNEMASTERY Lv7, 1 Red Gemstone, 1 Light Granule, 1 Elder Branch
+12726,24,2010,7,716,1,7938,1,7939,1
+//-- Runstone Verkana <-- RK_RUNEMASTERY Lv9, 1 Dullahan Armor, 1 Elder Branch
+12727,24,2010,9,7210,1,7939,1
+//-- Runstone Isia <-- RK_RUNEMASTERY Lv2, 1 Burning Heart, 1 Elder Branch
+12728,24,2010,2,7097,1,7939,1
+//-- Runstone Asir <-- RK_RUNEMASTERY Lv5, 1 Ogre Tooth, 1 Light Granule, 1 Elder Branch
+12729,24,2010,5,7002,1,7938,1,7939,1
+//-- Runstone Urj <-- RK_RUNEMASTERY Lv6, 1 Honey, 1 Slender Snake, 1 Elder Branch
+12730,24,2010,6,518,1,1048,1,7939,1
+//-- Runstone Turisus <-- RK_RUNEMASTERY Lv1, 1 Cobold Hair, 1 Claw Of Desert Wolf, 1 Elder Branch
+12731,24,2010,1,1034,1,7030,1,7939,1
+//-- Runstone Pertz <-- RK_RUNEMASTERY Lv3, 1 Dragon Canine, 1 Tangled Chain, 1 Light Granule, 1 Elder Branch
+12732,24,2010,3,1035,1,7221,1,7938,1,7939,1
+//-- Runstone Hagalas <-- RK_RUNEMASTERY Lv4, 1 Round Shell, 1 Dragon's Skin, 1 Elder Branch
+12733,24,2010,4,1096,1,7123,1,7939,1
+//==============================================
+//===== Guillotine Cross Poisons === ItemLv=25 =
+//-- Guillotine Antidote <-- GC_RESEARCHNEWPOISON Lv5, 1 White Herb, 1 Blue Herb, 2 Green Herb
+6128,25,2024,5,509,1,510,1,511,2
+//-- Poison Paralysis <-- GC_RESEARCHNEWPOISON Lv1, 1 Medicine Bowl, 20 Poison Toad's Skin, 1 Poison Kit, 1 Poison Herb Amoena
+12717,25,2024,1,7134,1,7155,20,7931,1,7937,1
+//-- Poison Leech <-- GC_RESEARCHNEWPOISON Lv4, 1 Medicine Bowl, 1 Poison Kit, 1 Poison Herb Nerium, 1 Poison Herb Scopolia
+12718,25,2024,4,7134,1,7931,1,7932,1,7936,1
+//-- Poison Oblivion <-- GC_RESEARCHNEWPOISON Lv9, 1 Izidor, 10 Heart Of Mermaid, 1 Medicine Bowl, 1 Poison Kit
+12719,25,2024,9,709,1,950,10,7134,1,7931,1
+//-- Poison Contamination <-- GC_RESEARCHNEWPOISON Lv3, 25 Decayed Nail, 1 Medicine Bowl, 1 Poison Kit, 1 Poison Herb Seratum
+12720,25,2024,3,957,25,7134,1,7931,1,7935,1
+//-- Poison Numb <-- GC_RESEARCHNEWPOISON Lv8, 1 Medicine Bowl, 10 Sticky Poison, 1 Poison Kit, 1 Poison Herb Nerium
+12721,25,2024,8,7134,1,7565,10,7931,1,7932,1
+//-- Poison Fever <-- GC_RESEARCHNEWPOISON Lv2, 20 Anolian Skin, 1 Medicine Bowl, 1 Poison Kit, 1 Poison Herb Rantana
+12722,25,2024,2,7003,20,7134,1,7931,1,7933,1
+//-- Poison Laughing <-- GC_RESEARCHNEWPOISON Lv7, 10 Poison Spore, 1 Medicine Bowl, 1 Poison Kit, 1 Poison Herb Makulata
+12723,25,2024,7,7033,10,7134,1,7931,1,7934,1
+//-- Poison Fatigue <-- GC_RESEARCHNEWPOISON Lv6, 1 Izidor, 1 Medicine Bowl, 10 Sticky Poison, 1 Poison Kit
+12724,25,2024,6,709,1,7134,1,7565,10,7931,1
//==============================================
diff --git a/db/quest_db.txt b/db/quest_db.txt
index 888708195..6932de5dd 100644
--- a/db/quest_db.txt
+++ b/db/quest_db.txt
@@ -354,7 +354,7 @@
3217,0,0,0,0,0,0,0,"Job changes to Rune knight - The final test"
3218,0,0,0,0,0,0,0,"Job changes to Rune knight - Pass the final test"
3219,0,0,0,0,0,0,0,"Job changes to Rune knight - The end of all tes"
-3220,600,0,0,0,0,0,0,"Job changes to Rune knight - Waiting time of test"
+3220,0,0,0,0,0,0,0,"Job changes to Rune knight - Waiting time of test"
3250,0,1041,30,0,0,0,0,"Request - What is this bandage for?"
3251,0,1271,30,0,0,0,0,"Request - An alligator of Counterattack"
@@ -1161,24 +1161,24 @@
11114,0,1004,10,0,0,0,0,"Request : Hunt Honet"
11115,0,1009,20,0,0,0,0,"Request : Hunt Condor"
-11116,0,1052,10,0,0,0,0,"Request : Hunt grasshopper's leg"
+11116,0,1052,10,0,0,0,0,"Request : Hunt Grasshopper's Leg"
11117,0,1024,20,0,0,0,0,"Request : Hunt Worm tail"
11118,0,1014,30,0,0,0,0,"Request : Hunt Spore"
-11119,0,1048,20,0,0,0,0,"Request : Pest control"
+11119,0,1048,20,0,0,0,0,"Request : Pest Control"
11120,0,1055,20,0,0,0,0,"Request : Hunt Muka"
11121,0,1005,20,0,0,0,0,"Request : Hunt Farmiliar"
-11122,0,1019,30,0,0,0,0,"Request : Collect feather"
-11123,0,1077,30,0,0,0,0,"Request : Collect Poison spore"
-11124,86400,0,0,0,0,0,0,"Request : Hunt honet - Complete"
-11125,86400,0,0,0,0,0,0,"Request : Hunt condor - Complete"
-11126,86400,0,0,0,0,0,0,"Request : Hunt grasshopper's leg - Complete"
-11127,86400,0,0,0,0,0,0,"Request : Hunt Worm tail - Complete"
-11128,86400,0,0,0,0,0,0,"Request : Hunt spore - Complete"
-11129,86400,0,0,0,0,0,0,"Request : Pest control - Complete"
-11130,86400,0,0,0,0,0,0,"Request : Hunt muka - Complete"
+11122,0,1019,30,0,0,0,0,"Request : Collect Feather"
+11123,0,1077,30,0,0,0,0,"Request : Collect Poison Spore"
+11124,86400,0,0,0,0,0,0,"Request : Hunt Honet - Complete"
+11125,86400,0,0,0,0,0,0,"Request : Hunt Condor - Complete"
+11126,86400,0,0,0,0,0,0,"Request : Hunt Grasshopper's Leg - Complete"
+11127,86400,0,0,0,0,0,0,"Request : Hunt Worm Tail - Complete"
+11128,86400,0,0,0,0,0,0,"Request : Hunt Spore - Complete"
+11129,86400,0,0,0,0,0,0,"Request : Pest Control - Complete"
+11130,86400,0,0,0,0,0,0,"Request : Hunt Muka - Complete"
11131,86400,0,0,0,0,0,0,"Request : Hunt Farmiliar - Complete"
-11132,86400,0,0,0,0,0,0,"Request : Collect feather - Complete"
-11133,86400,0,0,0,0,0,0,"Request : Collect Poison spore - Complete"
+11132,86400,0,0,0,0,0,0,"Request : Collect Feather - Complete"
+11133,86400,0,0,0,0,0,0,"Request : Collect Poison Spore - Complete"
11135,0,0,0,0,0,0,0,"Looking for Maestro Song"
11136,0,0,0,0,0,0,0,"Looking for Maestro Song"
diff --git a/db/re_job_db.txt b/db/re_job_db.txt
new file mode 100644
index 000000000..e8ce9ef74
--- /dev/null
+++ b/db/re_job_db.txt
@@ -0,0 +1,230 @@
+// Job-specific values database,
+// Used for Renewal-exclusive values, such as the shield ASPD penalty
+// Job ID, Shield ASPD Penalty (value / 10)
+
+//Novice
+0,100
+//Swordman
+1,50
+//Mage
+2,50
+//Archer
+3,50
+//Acolyte
+4,50
+//Merchant
+5,50
+//Thief
+6,60
+//Knight
+7,50
+//Priest
+8,50
+//Wizard
+9,50
+//Blacksmith
+10,50
+//Hunter
+11,90
+//Assassin
+12,60
+//Knight2
+13,50
+//Crusader
+14,50
+//Monk
+15,50
+//Sage
+16,50
+//Rogue
+17,50
+//Alchem
+18,50
+//Alchemist
+18,50
+//Bard
+19,70
+//Dancer
+20,70
+//Crusader2
+21,50
+//Wedding
+22,50
+//SuperNovice
+23,50
+//Gunslinger
+24,60
+//Ninja
+25,60
+//Xmas
+26,50
+//Summer
+27,50
+//NoviceHigh
+4001,100
+//SwordmanHigh
+4002,50
+//MageHigh
+4003,50
+//ArcherHigh
+4004,50
+//AcolyteHigh
+4005,50
+//MerchantHigh
+4006,50
+//ThiefHigh
+4007,60
+//LordKnight
+4008,50
+//HighPriest
+4009,50
+//HighWizard
+4010,50
+//Whitesmith
+4011,50
+//Sniper
+4012,90
+//AssassinCross
+4013,60
+//LordKnight2
+4014,50
+//Paladin
+4015,50
+//Champion
+4016,50
+//Professor
+4017,50
+//Stalker
+4018,50
+//Creator
+4019,50
+//Clown
+4020,70
+//Gypsy
+4021,70
+//Paladin2
+4022,50
+//Baby
+4023,100
+//BabySwordman
+4024,50
+//BabyMage
+4025,50
+//BabyArcher
+4026,50
+//BabyAcolyte
+4027,50
+//BabyMerchant
+4028,50
+//BabyThief
+4029,60
+//BabyKnight
+4030,50
+//BabyPriest
+4031,50
+//BabyWizard
+4032,50
+//BabyBlacksmith
+4033,50
+//BabyHunter
+4034,90
+//BabyAssassin
+4035,60
+//BabyKnight2
+4036,50
+//BabyCrusader
+4037,50
+//BabyMonk
+4038,50
+//BabySage
+4039,50
+//BabyRogue
+4040,50
+//BabyAlchem
+4041,50
+//BabyAlchemist
+4041,50
+//BabyBard
+4042,70
+//BabyDancer
+4043,70
+//BabyCrusader2
+4044,50
+//SuperBaby
+4045,50
+//Taekwon
+4046,50
+//StarGladiator
+4047,50
+//StarGladiator2
+4048,50
+//SoulLinker
+4049,80
+//RuneKnight
+4054,50
+//Warlock
+4055,50
+//Ranger
+4056,80
+//ArchBishop
+4057,100
+//Mechanic
+4058,60
+//GuillotineCross
+4059,90
+//RuneKnightT
+4060,50
+//WarlockT
+4061,50
+//RangerT
+4062,80
+//ArchBishopT
+4063,100
+//MechanicT
+4064,60
+//GuillotineCrossT
+4065,90
+//RoyalGuard
+4066,50
+//Sorcerer
+4067,50
+//Minstrel
+4068,70
+//Wanderer
+4069,70
+//Sura
+4070,50
+//Genetic
+4071,50
+//ShadowChaser
+4072,40
+//RoyalGuardT
+4073,50
+//SorcererT
+4074,50
+//MinstrelT
+4075,50
+//WandererT
+4076,50
+//SuraT
+4077,50
+//GeneticT
+4078,50
+//ShadowChaserT
+4079,40
+//RuneKnight2
+4080,50
+//RuneKnightT2
+4081,50
+//RoyalGuard2
+4082,50
+//RoyalGuardT2
+4083,50
+//Ranger2
+4084,50
+//RangerT2
+4085,50
+//Mechanic2
+4086,50
+//MechanicT2
+4087,50
diff --git a/db/refine_db.txt b/db/refine_db.txt
index 1626fa6d8..9a1292fdd 100644
--- a/db/refine_db.txt
+++ b/db/refine_db.txt
@@ -3,8 +3,8 @@
// Armor defense is done in percentage (ie 70 = .7 def)
// Weapons are whole numbers (ie 3 = 3 atk)
- 100, 200, 4, 100,100,100,100, 60, 40, 40, 20, 20, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, // Armor
- 2, 3, 7, 100,100,100,100,100,100,100, 60, 40, 20, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, // Lv.1 Weapons
- 3, 5, 6, 100,100,100,100,100,100, 60, 40, 20, 20, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, // Lv.2 Weapons
- 5, 8, 5, 100,100,100,100,100, 60, 50, 20, 20, 20, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, // Lv.3 Weapons
- 7, 13, 4, 100,100,100,100, 60, 40, 40, 20, 20, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, // Lv.4 Weapons
+ 70, 4,4, 100,100,100,100, 60, 40, 40, 20, 20, 10, // Armor
+ 2, 3,7, 100,100,100,100,100,100,100, 60, 40, 20, // Lv.1 Weapons
+ 3, 5,6, 100,100,100,100,100,100, 60, 40, 20, 20, // Lv.2 Weapons
+ 5, 8,5, 100,100,100,100,100, 60, 50, 20, 20, 20, // Lv.3 Weapons
+ 7,13,4, 100,100,100,100, 60, 40, 40, 20, 20, 10, // Lv.4 Weapons
diff --git a/db/skill_cast_db.txt b/db/skill_cast_db.txt
index d72d7cca9..05e44e02b 100644
--- a/db/skill_cast_db.txt
+++ b/db/skill_cast_db.txt
@@ -1,1262 +1,1860 @@
// Skill Times Database
//
// Structure of Database:
-// SkillID,CastingTime,FixedCastingTime,AfterCastActDelay,Cooldown,AfterCastWalkDelay,Duration1,Duration2
-//
-//==========================================
-// Rough list of Contents:
-//==========================================
-// 1. 1st Jobs Skills
-// 2. 2-1 Jobs Skills
-// 3. 1st Jobs Quest Skills
-// 4. NPC Skills (1)
-// 5. 2-2 Jobs Skills
-// 6. Wedding Skills
-// 7. NPC Skills (2)
-// 8. Advanced Jobs Skills (1)
-// 9. Adoption Skills
-// 10. Taekwon Jobs Skills (1)
-// 11. Advanced Jobs Skills (2)
-// 12. Taekwon Jobs Skills (2)
-// 13. 2nd Jobs Quest Skills
-// 14. Homunculus Skills
-// 15. Mercenary Skills
-// 16. Guild Skills
+// SkillID,CastingTime,AfterCastActDelay,AfterCastWalkDelay,Duration1,Duration2,Cool Down
+//== Explained:
+// CastingTime : time to cast this skill, in miliseconds
+// AfterCastActDelay : "normal" delay, character cannot use skills, in miliseconds
+// AfterCastWalkDleay : amount of time before character can move again, in miliseconds
+// Duration1 / Duration2 : usually the durations used by the skill, at special cases it is used to hold special data
+// Cool Down : amount of time until character can re-use this skill, in miliseconds
+//== Extra
+// On all fields you can use ':' as a delimiter to level-specific values,
+// - Example using SM_PROVOKE
+// - Original:6,0,0,0,30000,0,1000
+// - ModifiedTo:6,0,0,0,30000,0,1000:2500:3000:etc
+// - Makes lvl 1 have 1000 (1s) cool down, lvl 2 2500 (2.5s), lvl 3 3000, and so on.
//==========================================
-// This is just a rough overview to help
-// giving an overview on the document and
-// help navigating through it. (Vedurin)
-//==========================================
-
-
-
//===== Swordman ===========================
//-- SM_PROVOKE
-6,0,0,0,0,0,30000,0
+6,0,0,0,30000,0,1000
//-- SM_MAGNUM
-7,0,0,2000,0,0,2000,10000
+7,0,0,0,2000,10000,2000
//-- SM_ENDURE
-8,0,0,0,10000,0,10000:13000:16000:19000:22000:25000:28000:31000:34000:37000,10000
+8,0,0,0,10000:13000:16000:19000:22000:25000:28000:31000:34000:37000,10000,10000
//==========================================
//===== Mage ===============================
//-- MG_SIGHT
-10,0,0,0,0,0,10000,0
+10,0,0,0,10000,0,0
//-- MG_NAPALMBEAT
-11,400,100,1000:1000:1000:900:900:800:800:700:600:500,0,0,0,0
+11,1000,1000:1000:1000:900:900:800:800:700:600:500,0,0,0,0
//-- MG_SAFETYWALL
-12,3200:2880:2560:2240:1920:1600:1280:960:640:320,800:720:640:560:480:400:320:240:160:80,0,0,0,5000:10000:15000:20000:25000:30000:35000:40000:45000:50000,0
+12,4000:3500:3500:2500:2000:1500:1000:1000:1000:1000,0,0,5000:10000:15000:20000:25000:30000:35000:40000:45000:50000,0,0
//-- MG_SOULSTRIKE
-13,400,100,1200:1200:1600:1600:2000:2000:2400:2400:2800:2500,0,0,0,0
+13,500,1200:1000:1400:1200:1600:1400:1800:1600:2000:1800,0,0,0,0
//-- MG_COLDBOLT
-14,640:960:1280:1600:1920:2100:1560:2880:3200:3520,160:240:320:400:480:700:640:720:800:880,1000:1200:1400:1600:1800:2000:2200:2400:2600:2800,0,0,0,0
+14,700:1400:2100:2800:3500:4200:4900:5600:6300:7000,1000:1200:1400:1600:1800:2000:2200:2400:2600:2800,0,0,0,0
//-- MG_FROSTDRIVER
-15,640,160,1500,0,0,0,3000:6000:9000:12000:15000:18000:21000:24000:27000:30000
+15,800,1500,0,0,3000:6000:9000:12000:15000:18000:21000:24000:27000:30000,0
//-- MG_STONECURSE
-16,800,100,0,0,0,5000,20000
+16,1000,0,0,5000,20000,0
//-- MG_FIREBALL
-17,1280:1280:1280:1280:1280:800:800:800:800:800,320:320:320:320:320:200:200:200:200:200,1500:1500:1500:1500:1500:1000:1000:1000:1000:1000,0,0,0,0
+17,1500:1500:1500:1500:1500:1000:1000:1000:1000:1000,1500:1500:1500:1500:1500:1000:1000:1000:1000:1000,0,0,0,0
//-- MG_FIREWALL
-18,1600:1440:1280:1120:960:880:800:720:640:560,400:360:320:280:240:220:200:180:160:140,0,0,0,5000:6000:7000:8000:9000:10000:11000:12000:13000:14000,0
+18,2000:1850:1700:1550:1400:1250:1100:950:800:650,0,0,5000:6000:7000:8000:9000:10000:11000:12000:13000:14000,0,0
//-- MG_FIREBOLT
-19,640:960:1280:1600:1920:2100:1560:2880:3200:3520,160:240:320:400:480:700:640:720:800:880,1000:1200:1400:1600:1800:2000:2200:2400:2600:2800,0,0,0,0
+19,700:1400:2100:2800:3500:4200:4900:5600:6300:7000,1000:1200:1400:1600:1800:2000:2200:2400:2600:2800,0,0,0,0
//-- MG_LIGHTNINGBOLT
-20,640:960:1280:1600:1920:2100:1560:2880:3200:3520,160:240:320:400:480:700:640:720:800:880,1000:1200:1400:1600:1800:2000:2200:2400:2600:2800,0,0,0,0
+20,700:1400:2100:2800:3500:4200:4900:5600:6300:7000,1000:1200:1400:1600:1800:2000:2200:2400:2600:2800,0,0,0,0
//-- MG_THUNDERSTORM
-21,640:1280:1920:2560:3200:3840:4480:5120:5760:6400,160:320:480:640:800:960:1120:1280:1440:1600,2000,0,0,500,0
+21,1000:2000:3000:4000:5000:6000:7000:8000:9000:10000,2000,0,500,0,0
//==========================================
//===== Acolyte ============================
//-- AL_RUWACH
-24,0,0,0,0,0,10000,0
+24,0,0,0,10000,0,0
//-- AL_PNEUMA
-25,0,0,0,0,0,10000,0
+25,0,0,0,10000,0,0
//-- AL_TELEPORT
-26,0,0,0,0,0,0,0
+26,0,0,0,0,0,0
//-- AL_WARP
-27,0,1000,0,0,0,5000:10000:15000:20000:25000:30000:35000:40000:45000:50000,0
+27,1000,0,0,5000:10000:15000:20000:25000:30000:35000:40000:45000:50000,0,0
//-- AL_HEAL
-28,0,0,1000,0,0,0,0
+28,0,1000,0,0,0,0
//-- AL_INCAGI
-29,800,200,1000,0,0,60000:80000:100000:120000:140000:160000:180000:200000:220000:240000,0
+29,1000,1000,0,60000:80000:100000:120000:140000:160000:180000:200000:220000:240000,0,0
//-- AL_DECAGI
-30,750,250,1000,0,0,40000:50000:60000:70000:80000:90000:100000:110000:120000:130000,0
+30,1000,1000,0,40000:50000:60000:70000:80000:90000:100000:110000:120000:130000,0,0
//-- AL_HOLYWATER
-31,800,400,500,0,0,0,0
+31,1000,500,0,0,0,0
//-- AL_CRUCIS
-32,350,150,2000,0,0,60000,0
+32,500,2000,0,0,0,0
//-- AL ANGELUS
-33,350,150,3500,0,0,30000:60000:90000:120000:150000:180000:210000:240000:270000:300000,0
+33,500,3500,0,30000:60000:90000:120000:150000:180000:210000:240000:270000:300000,0,0
//-- AL_BLESSING
-34,0,0,0,0,0,60000:80000:100000:120000:140000:160000:180000:200000:220000:240000,0
+34,0,0,0,60000:80000:100000:120000:140000:160000:180000:200000:220000:240000,0,0
//-- AL_CURE
-35,0,0,1000,0,0,0,6000
+35,0,1000,0,0,6000,0
//==========================================
//===== Archer =============================
//-- AC_CONCENTRATION
-45,0,0,0,0,0,60000:80000:100000:120000:140000:160000:180000:200000:220000:240000,0
+45,0,0,0,60000:80000:100000:120000:140000:160000:180000:200000:220000:240000,0,0
//-- AC_DOUBLE
-46,0,0,100,0,100,0,0
+46,0,0,0,100,0,0
//-- AC_SHOWER
-47,0,0,100,0,0,100,0
+47,0,0,0,100,0,0
//==========================================
//===== Thief ==============================
//-- TF_HIDING
-51,0,0,0,0,0,30000:60000:90000:120000:150000:180000:210000:240000:270000:300000,0
+51,0,0,0,30000:60000:90000:120000:150000:180000:210000:240000:270000:300000,0,0
//-- TF_POISON
-52,0,0,0,0,0,0,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000
+52,0,0,0,0,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000,0
//==========================================
//===== First planned to be shared =========
//-- ALL_RESURRECTION
-54,4800:3200:1600:0,1200:800:400:0,0:1000:2000:3000,0,0,0,0
+54,6000:4000:2000:0,0:1000:2000:3000,0,0,0,0
//==========================================
//===== Knight =============================
//-- KN_BRANDISHSPEAR
-57,350,350,0,0,0,0,0
+57,700,0,0,0,0,0
//-- KN_SPEARBOOMERANG
-59,0,0,1000,0,0,0,0
+59,0,1000,0,0,0,0
//-- KN_TWOHANDQUICKEN
-60,0,0,0,0,0,30000:60000:90000:120000:150000:180000:210000:240000:270000:300000,0
+60,0,0,0,30000:60000:90000:120000:150000:180000:210000:240000:270000:300000,0,0
//-- KN_AUTOCOUNTER
-61,0,0,0,0,0,400:800:1200:1600:2000,0
+61,0,0,0,400:800:1200:1600:2000,0,0
//-- KN_BOWLINGBASH
-62,350,350,0,0,0,0,0
+62,700,0,0,0,0,0
//==========================================
//===== Priest =============================
//-- PR_IMPOSITIO
-66,0,0,3000,0,0,60000,0
+66,0,3000,0,60000,0,0
//-- PR_SUFFRAGIUM
-67,0,0,2000,0,0,30000:20000:10000,0
+67,0,2000,0,30000:20000:10000,0,0
//-- PR_ASPERSIO
-68,0,0,2000,0,0,60000:90000:120000:150000:180000,0
+68,0,2000,0,60000:90000:120000:150000:180000,0,0
//-- PR_BENEDICTIO
-69,0,0,0,0,0,40000:80000:120000:160000:200000,0
+69,0,0,0,40000:80000:120000:160000:200000,0,0
//-- PR_SANCTUARY
-70,4000,1000,0,0,0,4000:7000:10000:13000:16000:19000:22000:25000:28000:31000,0
+70,5000,0,0,4000:7000:10000:13000:16000:19000:22000:25000:28000:31000,0,0
//-- PR_SLOWPOISON
-71,0,0,0,0,0,10000:20000:30000:40000,0
+71,0,0,0,10000:20000:30000:40000,0,0
//-- PR_STRECOVERY
-72,0,0,2000,0,0,0,30000
+72,0,2000,0,0,30000,0
//-- PR_KYRIE
-73,1600,400,2000,0,0,120000,0
+73,2000,2000,0,120000,0,0
//-- PR_MAGNIFICAT
-74,3200,800,2000,0,0,30000:45000:60000:75000:90000,0
+74,4000,2000,0,30000:45000:60000:75000:90000,0,0
//-- PR_GLORIA
-75,0,0,2000,0,0,10000:15000:20000:25000:30000,0
+75,0,2000,0,10000:15000:20000:25000:30000,0,0
//-- PR_LEXDIVINA
-76,0,0,3000,0,0,30000:35000:40000:45000:50000:60000:60000:60000:60000:60000,0
+76,0,3000,0,30000:35000:40000:45000:50000:60000:60000:60000:60000:60000,0,0
//-- PR_TURNUNDEAD
-77,800,200,3000,0,0,0,0
+77,1000,3000,0,0,0,0
//-- PR_LEXAETERNA
-78,0,0,3000,0,0,600000,0
+78,0,3000,0,600000,0,0
//-- PR_MAGNUS
-79,12000,3000,4000,0,0,5000:6000:7000:8000:9000:10000:11000:12000:13000:14000,0
+79,15000,4000,0,5000:6000:7000:8000:9000:10000:11000:12000:13000:14000,0,0
//==========================================
//===== Wizard =============================
//-- WZ_FIREPILLAR
-80,1920:1728:1536:1344:1152:960:768:576:384:192,480:432:384:336:288:240:192:144:96:48,1000,0,0,30000,600:800:1000:1200:1400:1600:1800:2000:2200:2400
+80,3000:2700:2400:2100:1800:1500:1200:900:600:300,1000,0,30000,600:800:1000:1200:1400:1600:1800:2000:2200:2400,0
//-- WZ_SIGHTRASHER
-81,320,80,2000,0,0,500,0
-
+81,700,2000,0,500,0,0
+//-- WZ_FIREIVY
+82,5000:4500:4000:3500:3000:2500:2000:1500:1000:500,800,600,5000,5000,0
//-- WZ_METEOR
-83,9600,2400,2000:3000:3000:4000:4000:5000:5000:6000:6000:7000,0,0,500,5000
+83,15000,2000:3000:3000:4000:4000:5000:5000:6000:6000:7000,0,500,5000,0
//-- WZ_JUPITEL
-84,1600:1920:2240:2560:2880:3200:3520:3840:4160:4480,400:480:560:640:720:800:880:960:1040:1120,0,0,0,0,0
+84,2500:3000:3500:4000:4500:5000:5500:6000:6500:7000,0,0,0,0,0
//-- WZ_VERMILION
-85,9600:9280:8960:8640:8320:8000:7680:7360:7040:6720,2400:2320:2240:2160:2080:2000:1920:1840:1760:1680,5000,0,0,4000,5500:6000:6500:7000:7500:8000:8500:9000:9500:10000
+85,15000:14500:14000:13500:13000:12500:12000:11500:11000:10500,5000,0,4000,5500:6000:6500:7000:7500:8000:8500:9000:9500:10000,0
//-- WZ_WATERBALL
-86,640:1280:1920:2560:3200:3200:3200:3200:3200:3200,160:320:480:640:800:800:800:800:800:800,0,0,0,0,0
+86,1000:2000:3000:4000:5000:6000:7000:8000:9000:10000,0,0,0,0,0
//-- WZ_ICEWALL
-87,0,0,0,0,0,5000:10000:15000:20000:25000:30000:35000:40000:45000:50000,0
+87,0,0,0,5000:10000:15000:20000:25000:30000:35000:40000:45000:50000,0,0
//-- WZ_FROSTNOVA
-88,640:640:576:576:512:512:448:448:384:384,160:160:144:144:128:128:112:112:96:96,200,0,0,0,1500:3000:4500:6000:7500:9000:10500:12000:13500:15000
+88,5000:4700:4400:4100:3800:3500:3200:2900:2700:2500,1000,0,0,1500:3000:4500:6000:7500:9000:10500:12000:13500:15000,0
//-- WZ_STORMGUST
-89,3840:4480:5120:5760:6400:7040:7680:8320:8960:9600,960:1120:1280:1440:1600:1760:1920:2080:2240:2400,5000,0,0,4600,12000
+89,6000:7000:8000:9000:10000:11000:12000:13000:14000:15000,5000,0,4600,12000,0
//-- WZ_EARTHSPIKE
-90,448:896:1344:1792:2240,112:224:336:448:560,1000:1200:1400:1600:1800:2000:2200:2400:2600:2800,0,0,0,0
+90,1000:2000:3000:4000:5000,700,0,0,0,0
//-- WZ_HEAVENDRIVE
-91,640:1280:1920:2560:3200,160:320:480:640:800,1000,0,0,500,0
+91,1000:2000:3000:4000:5000,700,0,500,0,0
//-- WZ_QUAGMIRE
-92,0,0,1000,0,0,5000:10000:15000:20000:25000,5000:10000:15000:20000:25000
+92,0,1000,0,5000:10000:15000:20000:25000,5000:10000:15000:20000:25000,0
//==========================================
//===== Blacksmith =========================
//-- BS_REPAIRWEAPON
-108,2500,2500,0,0,0,0,0
+108,7500,0,0,0,0,0
//-- BS_HAMMERFALL
-110,0,0,0,0,0,0,5000
+110,0,0,0,0,5000,0
//-- BS_ADRENALINE
-111,0,0,0,0,0,30000:60000:90000:120000:150000,0
+111,0,0,0,30000:60000:90000:120000:150000,0,0
//-- BS_WEAPONPEFECT
-112,0,0,0,0,0,10000:20000:30000:40000:50000,0
+112,0,0,0,10000:20000:30000:40000:50000,0,0
//-- BS_OVERTHRUST
-113,0,0,0,0,0,20000:40000:60000:80000:100000,0
+113,0,0,0,20000:40000:60000:80000:100000,0,0
//-- BS_MAXIMIZE
-114,0,0,0,0,0,1000:2000:3000:4000:5000,0
+114,0,0,0,1000:2000:3000:4000:5000,0,0
//==========================================
//===== Hunter =============================
//-- HT_SKIDTRAP
-115,0,0,0,0,0,300000:240000:180000:120000:60000,0
+115,0,0,0,300000:240000:180000:120000:60000,0,0
//-- HT_LANDMINE
-116,0,0,0,0,0,200000:160000:120000:80000:40000,5000
+116,0,0,0,200000:160000:120000:80000:40000,5000,0
//-- HT_ANKLESNARE
-117,0,0,0,0,0,250000:200000:150000:100000:50000,4000:8000:12000:16000:20000
+117,0,0,0,250000:200000:150000:100000:50000,4000:8000:12000:16000:20000,0
//-- HT_SHOCKWAVE
-118,0,0,0,0,0,200000:160000:120000:80000:40000,0
+118,0,0,0,200000:160000:120000:80000:40000,0,0
//-- HT_SANDMAN
-119,0,0,0,0,0,150000:120000:90000:60000:30000,12000:14000:16000:18000:20000
+119,0,0,0,150000:120000:90000:60000:30000,12000:14000:16000:18000:20000,0
//-- HT_FLASHER
-120,0,0,0,0,0,150000:120000:90000:60000:30000,10000:11000:12000:13000:14000
+120,0,0,0,150000:120000:90000:60000:30000,10000:11000:12000:13000:14000,0
//-- HT_FREEZINGTRAP
-121,0,0,0,0,0,150000:120000:90000:60000:30000,3000:6000:9000:12000:15000
+121,0,0,0,150000:120000:90000:60000:30000,3000:6000:9000:12000:15000,0
//-- HT_BLASTMINE
-122,0,0,0,0,0,25000:20000:15000:10000:5000,0
+122,0,0,0,25000:20000:15000:10000:5000,0,0
//-- HT_CLAYMORETRAP
-123,0,0,0,0,0,20000:40000:60000:80000:100000,0
+123,0,0,0,20000:40000:60000:80000:100000,0,0
//-- HT_TALKIEBOX
-125,0,0,0,0,0,600000,0
+125,0,0,0,600000,0,0
//-- HT_BLITZBEAT
-129,800,200,1000,0,0,0,0
+129,1500,1000,0,0,0,0
//==========================================
//===== Assassin ===========================
//-- AS_CLOAKING
-135,0,0,0,0,0,500:1000:2000:3000:4000:5000:6000:7000:8000:9000,0
+135,0,0,0,500:1000:2000:3000:4000:5000:6000:7000:8000:9000,0,0
//-- AS_SONICBLOW
-136,0,0,2000,0,2000,0,5000
+136,0,2000,2000,0,5000,0
//-- AS_ENCHANTPOISON
-138,0,0,0,0,0,30000:45000:60000:75000:90000:105000:120000:135000:150000:165000,10000:20000:30000:40000:50000:60000:70000:80000:90000:100000
+138,0,0,0,30000:45000:60000:75000:90000:105000:120000:135000:150000:165000,10000:20000:30000:40000:50000:60000:70000:80000:90000:100000,0
//-- AS_POISONREACT
-139,0,0,0,0,0,20000:25000:30000:35000:40000:45000:50000:55000:60000:65000,0
+139,0,0,0,20000:25000:30000:35000:40000:45000:50000:55000:60000:65000,0,0
//-- AS_VENOMDUST
-140,0,0,0,0,0,5000:10000:15000:20000:25000:30000:35000:40000:45000:50000,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000
+140,0,0,0,5000:10000:15000:20000:25000:30000:35000:40000:45000:50000,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000,0
//-- AS_SPLASHER
-141,500,500,0,7500:8000:8500:9000:9500:10000:10500:11000:11500:12000,0,5000:5500:6000:6500:7000:7500:8000:8500:9000:9500,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000
+141,1000,0,0,5000:5500:6000:6500:7000:7500:8000:8500:9000:9500,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000,0
//==========================================
//===== 1st Jobs Quest Skills===============
//-- NV_TRICKDEAD
-143,0,0,0,0,0,600000,0
+143,0,0,0,600000,0,0
//-- SM_FATALBLOW
-145,0,0,0,0,0,0,5000
+145,0,0,0,0,5000,0
//-- AC_CHARGEARROW
-148,0,1500,0,0,0,0,0
+148,1500,0,0,0,0,0
//-- TF_SPRINKLESAND
-149,0,0,0,0,0,0,10000
+149,0,0,0,0,10000,0
//-- TF_PICKSTONE
-151,0,500,0,0,0,0,0
+151,500,0,0,0,0,0
//-- TF_THROWSTONE
-152,0,0,100,0,0,5000,8000
+152,0,0,0,5000,8000,0
//-- MC_LOUD
-155,0,0,0,0,0,300000,0
+155,0,0,0,300000,0,0
//-- AL_HOLYLIGHT
-156,1600,400,0,0,0,0,0
+156,2000,0,0,0,0,0
//-- MG_ENERGYCOAT
-157,0,5000,0,0,0,300000,0
+157,5000,0,0,300000,0,0
//==========================================
//===== NPC Skills Part 1 ==================
//-- NPC_ATTRICHANGE
-161,0,0,0,0,0,1800000,0
+161,0,0,0,1800000,0,0
//-- NPC_CHANGEWATER
-162,0,0,0,0,0,1800000,0
+162,0,0,0,1800000,0,0
//-- NPC_CHANGEGROUND
-163,0,0,0,0,0,1800000,0
+163,0,0,0,1800000,0,0
//-- NPC_CHANGEFIRE
-164,0,0,0,0,0,1800000,0
+164,0,0,0,1800000,0,0
//-- NPC_CHANGEWIND
-165,0,0,0,0,0,1800000,0
+165,0,0,0,1800000,0,0
//-- NPC_CHANGEPOISON
-166,0,0,0,0,0,1800000,0
+166,0,0,0,1800000,0,0
//-- NPC_CHANGEHOLY
-167,0,0,0,0,0,1800000,0
+167,0,0,0,1800000,0,0
//-- NPC_CHANGEDARKNESS
-168,0,0,0,0,0,1800000,0
+168,0,0,0,1800000,0,0
//-- NPC_CHANGETELEKINESIS
-169,0,0,0,0,0,1800000,0
+169,0,0,0,1800000,0,0
//-- NPC_SELFDESTRUCTION
-173,0,0,0,0,0,3500,0
+173,0,0,0,3500,0,0
//-- NPC_POISON
-176,0,0,0,0,0,0,60000
+176,0,0,0,0,60000,0
//-- NPC_BLINDATTACK
-177,0,0,0,0,0,0,30000
+177,0,0,0,0,30000,0
//-- NPC_SILENCEATTACK
-178,0,0,0,0,0,0,30000
-//-- NPC_STUNATTACK
-179,0,0,0,0,0,0,5000
+178,0,0,0,0,30000,0
+//-- NPC0,_STUNATTACK
+179,0,0,0,0,5000,0
//-- NPC_PETRIFYATTACK
-180,0,0,0,0,0,0,20000
+180,0,0,0,0,20000,0
//-- NPC_CURSEATTACK
-181,0,0,0,0,0,0,30000
+181,0,0,0,0,30000,0
//-- NPC_SLEEPATTACK
-182,0,0,0,0,0,0,30000
+182,0,0,0,0,30000,0
//-- NPC_MAGICALATTACK
-192,0,0,0,0,0,15000,0
+192,0,0,0,15000,0,0
//-- NPC_KEEPING
-201,0,0,0,0,0,60000:70000:80000:90000:100000:110000:120000:130000:140000:150000,0
+201,0,0,0,60000:70000:80000:90000:100000:110000:120000:130000:140000:150000,0,0
//-- NPC_BARRIER
-204,0,0,0,0,0,60000:70000:80000:90000:100000:110000:120000:130000:140000:150000,0
+204,0,0,0,60000:70000:80000:90000:100000:110000:120000:130000:140000:150000,0,0
//-- NPC_DEFENDER
-205,0,0,0,0,0,60000:70000:80000:90000:100000:110000:120000:130000:140000:150000,0
+205,0,0,0,60000:70000:80000:90000:100000:110000:120000:130000:140000:150000,0,0
//-- NPC_LICK
-206,0,0,0,0,0,0,3000
+206,0,0,0,0,3000,0
//-- NPC_HALLUCINATION
-207,0,0,0,0,0,30000:40000:50000:60000:70000:80000:90000:100000:110000:120000,0
+207,0,0,0,30000:40000:50000:60000:70000:80000:90000:100000:110000:120000,0,0
//==========================================
//===== Rogue ==============================
-//-- RG_STEALCOIN
-211,0,0,500,0,0,0,0
-//-- RG_BACKSTAP
-212,0,0,500,0,0,0,0
+//-- RG_BACKSTAB
+212,0,500,0,0,0,0
//-- RG_RAID
-214,0,0,0,0,0,5000,8000:9000:10000:11000:12000
+214,0,0,0,5000,8000:9000:10000:11000:12000,0
//-- RG_STRIPEWEAPON
-215,560:720:880:1140:1200,140:180:220:260:300,1000,0,0,75000:90000:105000:120000:135000,0
+215,1000,1000,0,75000:90000:105000:120000:135000,0,0
//-- RG_STRIPSHIELD
-216,560:720:880:1140:1200,140:180:220:260:300,1000,0,0,75000:90000:105000:120000:135000,0
+216,1000,1000,0,75000:90000:105000:120000:135000,0,0
//-- RG_STRIPWEAPON
-217,560:720:880:1140:1200,140:180:220:260:300,1000,0,0,75000:90000:105000:120000:135000,0
+217,1000,1000,0,75000:90000:105000:120000:135000,0,0
//-- RG_STRIPHELM
-218,560:720:880:1140:1200,140:180:220:260:300,1000,0,0,75000:90000:105000:120000:135000,0
+218,1000,1000,0,75000:90000:105000:120000:135000,0,0
//-- RG_GRAFITTI
-220,0,0,0,0,0,180000,0
+220,0,0,0,180000,0,0
//==========================================
//===== Alchemist ==========================
//-- AM_DEMONSTRATION
-229,800,200,500,0,0,40000:45000:50000:55000:60000,0
+229,1000,0,0,40000:45000:50000:55000:60000,0,0
//-- AM_ACIDTERROR
-230,500,500,500,0,0,3:7:10:12:13,120000
+230,1000,0,0,3:7:10:12:13,120000,0
//-- AM_POTIONPITCHER
-231,0,0,500,0,0,0,0
+231,0,500,0,0,0,0
//-- AM_CANNIBALIZE
-232,1600,400,500,0,0,300000:240000:180000:120000:60000,0
+232,2000,500,0,300000:240000:180000:120000:60000,0,0
//-- AM_SPHEREMINE
-233,1600,400,500,0,0,30000,0
+233,2000,500,0,30000,0,0
//-- AM_CP_WEAPON
-234,0,2000,500,0,0,120000:240000:360000:480000:600000,0
+234,2000,0,0,120000:240000:360000:480000:600000,0,0
//-- AM_CP_SHIELD
-235,0,2000,500,0,0,120000:240000:360000:480000:600000,0
+235,2000,0,0,120000:240000:360000:480000:600000,0,0
//-- AM_CP_ARMOR
-236,0,2000,500,0,0,120000:240000:360000:480000:600000,0
+236,2000,0,0,120000:240000:360000:480000:600000,0,0
//-- AM_CP_HELM
-237,0,2000,500,0,0,120000:240000:360000:480000:600000,0
-//-- AM_HEALHOMUN
-//246,800,200,500,0,0,0,0
+237,2000,0,0,120000:240000:360000:480000:600000,0,0
//-- AM_RESURRECTHOMUN
-247,2000,1000,0,0,0,0,0
+247,2000,0,0,0,0,0
//==========================================
//===== Crusader ===========================
//-- CR_AUTOGUARD
-249,0,0,0,0,0,300000,0
+249,0,0,0,300000,0,0
//-- CR_SHIELDCHARGE
-250,0,0,0,0,0,0,5000
+250,0,0,0,0,5000,0
//-- CR_SHIELDBOOMERANG
-251,0,0,700,0,0,0,0
+251,0,700,0,0,0,0
//-- CR_REFLECTSHIELD
-252,0,0,0,0,0,300000,0
+252,0,0,0,300000,0,0
//-- CR_HOLYCROSS
-253,0,0,0,0,0,0,10000:11000:12000:13000:14000:15000:16000:17000:18000:19000
+253,0,0,0,0,10000:11000:12000:13000:14000:15000:16000:17000:18000:19000,0
//-- CR_GRANDCROSS
-254,1500,1500,1500,0,900,900,10000:11000:12000:13000:14000:15000:16000:17000:18000:19000
+254,2000,1500,900,900,10000:11000:12000:13000:14000:15000:16000:17000:18000:19000,0
//-- CR_DEVOTION
-255,1500,1500,0,0,0,0,30000:45000:60000:75000:90000
+255,3000,0,0,0,30000:45000:60000:75000:90000,0
//-- CR_PROVIDENCE
-256,1500,1500,0,0,0,180000,0
+256,3000,0,0,180000,0,0
//-- CR_DEFENDER
-257,0,0,800,0,0,180000,0
+257,0,800,0,180000,0,0
//-- CR_SPEARQUICKEN
-258,0,0,0,0,0,30000:60000:90000:120000:150000:180000:210000:240000:270000:300000,0
+258,0,0,0,30000:60000:90000:120000:150000:180000:210000:240000:270000:300000,0,0
//==========================================
//===== Monk ===============================
//-- MO_CALLSPIRITS
-261,500,500,0,0,0,600000,0
+261,1000,0,0,600000,0,0
//-- MO_ABSORBSPIRITS
-262,1000,1000,0,0,0,0,0
+262,2000,0,0,0,0,0
//-- MO_TRIPLEATTACK
-263,0,0,1000,0,0,0,0
+263,0,1000,0,0,0,0
//-- MO_INVESTIGATE
-266,500,500,500,0,0,0,0
+266,1000,500,0,0,0,0
//-- MO_FINGEROFFENSIVE
-267,500,500,500,0,0:200:400:600:800,0,0
+267,1000,500,0:200:400:600:800,0,0,0
//-- MO_STEELBODY
-268,2500,2500,0,0,0,30000:60000:90000:120000:150000,0
+268,5000,0,0,30000:60000:90000:120000:150000,0,0
//-- MO_BLADESTOP
-269,0,0,500,0,0,500:700:900:1100:1300,20000:30000:40000:50000:60000
+269,0,0,0,500:700:900:1100:1300,20000:30000:40000:50000:60000,0
//-- MO_EXPLOSIONSPIRITS
-270,0,0,0,0,0,180000,0
+270,0,0,0,180000,0,0
//-- MO_EXTREMITYFIST
-271,2000:1750:1500:1250:1000:500:1000,2000:1750:1500:1250:1000:500:1000,3000:2500:2000:1500:1000,0,0,0,300000
+271,4000:3500:3000:2500:2000,3000:2500:2000:1500:1000,0,0,300000,0
//-- MO_CHAINCOMBO
-272,0,0,1000,0,0,0,0
+272,0,1000,0,0,0,0
//-- MO_COMBOFINISH
-273,0,0,700,0,0,0,0
+273,0,700,0,0,0,0
//==========================================
//===== Sage ===============================
//-- SA_MAGICROD
-276,0,0,1000,0,0,400:600:800:1000:1200,0
+276,0,0,0,400:600:800:1000:1200,0,0
//-- SA_SPELLBREAKER
-277,560,140,0,0,0,0,0
+277,700,0,0,0,0,0
//-- SA_AUTOSPELL
-279,0,3000,0,0,0,120000:150000:180000:210000:240000:270000:300000:330000:360000:390000,0
+279,3000,0,0,120000:150000:180000:210000:240000:270000:300000:330000:360000:390000,0,0
//-- SA_FLAMELAUNCHER
-280,0,3000,0,0,0,1200000:1200000:1200000:1200000:1800000,0
+280,3000,0,0,1200000:1200000:1200000:1200000:1800000,0,0
//-- SA_FROSTWEAPON
-281,0,3000,0,0,0,1200000:1200000:1200000:1200000:1800000,0
+281,3000,0,0,1200000:1200000:1200000:1200000:1800000,0,0
//-- SA_LIGHTNINGLOADER
-282,0,3000,0,0,0,1200000:1200000:1200000:1200000:1800000,0
+282,3000,0,0,1200000:1200000:1200000:1200000:1800000,0,0
//-- SA_SEISMICWEAPON
-283,0,3000,0,0,0,1200000:1200000:1200000:1200000:1800000,0
+283,3000,0,0,1200000:1200000:1200000:1200000:1800000,0,0
//-- SA_VOLCANO
-285,4000,1000,0,0,0,60000:120000:180000:240000:300000,0
+285,5000,0,0,60000:120000:180000:240000:300000,0,0
//-- SA_DELUGE
-286,4000,1000,0,0,0,60000:120000:180000:240000:300000,0
+286,5000,0,0,60000:120000:180000:240000:300000,0,0
//-- SA_VIOLENTGALE
-287,4000,1000,0,0,0,60000:120000:180000:240000:300000,0
+287,5000,0,0,60000:120000:180000:240000:300000,0,0
//-- SA_LANDPROTECTOR
-288,4000,1000,0,0,0,165000:210000:255000:300000:345000,0
+288,5000,0,0,165000:210000:255000:300000:345000,0,0
//-- SA_DISPELL
-289,1600,400,0,0,0,0,0
+289,2000,0,0,0,0,0
//-- SA_REVERSEORCISH
-294,0,0,0,0,0,1200000,0
+294,0,0,0,1200000,0,0
//==========================================
//===== Bard & Dancer (Ensemble Skills) ====
//-- BD_ADAPTATION
-304,0,0,0,0,0,0,5000
+304,0,0,0,0,5000,0
//-- BD_LULLABY
-306,0,0,0,0,0,60000,15000
+306,0,0,0,60000,15000,0
//-- BD_RICHMANKIM
-307,0,0,0,0,0,60000,60000
+307,0,0,0,60000,60000,0
//-- BD_ETERNALCHAOS
-308,0,0,0,0,0,60000,60000
+308,0,0,0,60000,60000,0
//-- BD_DRUMBATTLEFIELD
-309,0,0,0,0,0,60000,60000
+309,0,0,0,60000,60000,0
//-- BD_RINGNIBELUNGEN
-310,0,0,0,0,0,60000,60000
+310,0,0,0,60000,60000,0
//-- BD_ROKISWEIL
-311,0,0,0,0,0,60000,60000
+311,0,0,0,60000,60000,0
//-- BD_INTOABYSS
-312,0,0,0,0,0,60000,60000
+312,0,0,0,60000,60000,0
//-- BD_SIEGFRIED
-313,0,0,0,0,0,60000,60000
+313,0,0,0,60000,60000,0
//==========================================
//===== Bard ===============================
//-- BA_MUSICALSTRIKE
-316,1200,300,0,0,0,0,0
+316,1500,0,0,0,0,0
//-- BA_DISSONANCE
-317,0,0,0,0,0,30000,3000
+317,0,0,0,30000,3000,0
//-- BA_FROSTJOKE
-318,0,0,4000,0,0,0,10000:11000:12000:13000:14000
+318,0,3000,0,0,10000:11000:12000:13000:14000,0
//-- BA_WHISTLE
-319,0,0,0,0,0,60000,20000
+319,0,0,0,60000,20000,0
//-- BA_ASSASSINCROSS
-320,0,0,0,0,0,120000,20000
+320,0,0,0,120000,20000,0
//-- BA_POEMBRAGI
-321,0,0,0,0,0,180000,20000
+321,0,0,0,180000,20000,0
//-- BA_APPLEIDUN
-322,0,0,0,0,0,180000,20000
+322,0,0,0,180000,20000,0
//==========================================
//===== Dancer =============================
//-- DC_THROWARROW
-324,1200,300,0,0,0,0,0
+324,1500,0,0,0,0,0
//-- DC_UGLYDANCE
-325,0,0,0,0,0,30000,3000
+325,0,0,0,30000,3000,0
//-- DC_SCREAM
-326,0,0,4000,0,0,0,5000
+326,0,3000,0,0,5000,0
//-- DC_HUMMING
-327,0,0,0,0,0,60000,20000
+327,0,0,0,60000,20000,0
//-- DC_DONTFORGETME
-328,0,0,0,0,0,180000,20000
+328,0,0,0,180000,20000,0
//-- DC_FORTUNEKISS
-329,0,0,0,0,0,120000,20000
+329,0,0,0,120000,20000,0
//-- DC_SERVICEFORYOU
-330,0,0,0,0,0,180000,20000
+330,0,0,0,180000,20000,0
//==========================================
//===== Wedding Skills =====================
//-- WE_MALE
-334,1500,1500,0,0,0,0,0
+334,3000,0,0,0,0,0
//-- WE_FEMALE
-335,1500,1500,0,0,0,0,0
+335,3000,0,0,0,0,0
//-- WE_CALLPARTNER
-336,0,0,0,0,0,20000,0
+336,0,0,0,20000,0,0
//==========================================
//===== NPC Skills Part 2 ==================
//-- NPC_GRANDDARKNESS
-339,2000,0,1500,0,900,900,10000:11000:12000:13000:14000:15000:16000:17000:18000:19000
+339,2000,1500,900,900,10000:11000:12000:13000:14000:15000:16000:17000:18000:19000,0
//-- NPC_STOP
-342,0,0,0,0,0,10000,0
+342,0,0,0,10000,0,0
//-- NPC_CHANGEUNDEAD
-348,0,0,0,0,0,30000,0
+348,0,0,0,30000,0,0
//-- NPC_POWERUP
-349,0,0,0,0,0,10000:15000:20000:25000:30000,0
+349,0,0,0,10000:15000:20000:25000:30000,0,0
//-- NPC_AGIUP
-350,0,0,0,0,0,10000:15000:20000:25000:30000,0
+350,0,0,0,10000:15000:20000:25000:30000,0,0
//-- NPC_INVISIBLE
-353,0,0,0,0,0,30000,0
+353,0,0,0,30000,0,0
//-- NPC_RUN
-354,0,0,0:500:1000:1500:2000:2500,0,0,0,0
+354,0,0:500:1000:1500:2000:2500,0,0,0,0
//==========================================
//===== Lord Knight ========================
//-- LK_AURABLADE
-355,0,0,0,0,0,40000:60000:80000:100000:120000,0
+355,0,0,0,40000:60000:80000:100000:120000,0,0
//-- LK_PARRYING
-356,0,0,0,0,0,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000,0
+356,0,0,0,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000,0,0
//-- LK_CONCENTRATION
-357,0,0,0,0,0,25000:30000:35000:40000:45000,0
+357,0,0,0,25000:30000:35000:40000:45000,0,0
//-- LK_TENSIONRELAX
-358,0,0,0,0,0,180000,0
+358,0,0,0,180000,0,0
//-- LK_BERSERK
-359,0,0,0,0,0,300000,15000
+359,0,0,0,300000,15000,0
//-- LK_FURY
-360,0,0,0,0,0,300000,0
+360,0,0,0,300000,0,0
//==========================================
//===== High Priest ========================
//-- HP_ASSUMPTIO
-361,800:1200:1600:2000:2400,200:300:400:500:600,1100:1200:1300:1400:1500,0,0,20000:40000:60000:80000:100000,0
+361,1000:1500:2000:2500:3000,1100:1200:1300:1400:1500,0,20000:40000:60000:80000:100000,0,0
//-- HP_BASILICA
-362,0,5000:6000:7000:8000:9000,2000:3000:4000:5000:6000,0,0,20000:25000:30000:35000:40000,20000:25000:30000:35000:40000
+362,5000:6000:7000:8000:9000,2000:3000:4000:5000:6000,0,20000:25000:30000:35000:40000,20000:25000:30000:35000:40000,0
//==========================================
//===== High Wzard =========================
//-- HW_MAGICCRASHER
-365,240,60,300,0,0,0,0
+365,300,300,0,0,0,0
//-- HW_MAGICPOWER
-366,700,0,0,0,0,30000,0
+366,700,0,0,30000,0,0
//==========================================
//===== Paladin ============================
//-- PA_PRESSURE
-367,1600,0,2000:2500:3000:3500:4000,400,0,0,2000:3000:4000:5000:6000
+367,2000:2500:3000:3500:4000,2000:2500:3000:3500:4000,0,0,2000:3000:4000:5000:6000,0
//-- PA_SACRIFICE
-368,0,0,2000,0,0,0,0
+368,0,2000,0,0,0,0
//-- PA_GOSPEL
-369,0,0,0,0,0,60000,60000
+369,0,0,0,60000,60000,0
//==========================================
//===== Champion ===========================
//-- CH_PALMSTRIKE
-370,0,0,300,0,0,0,0
+370,0,300,0,0,0,0
//-- CH_TIGERFIST
-371,0,0,700,0,0,0,2000:4000:6000:8000:10000
+371,0,700,0,0,2000:4000:6000:8000:10000,0
//-- CH_CHAINCRUSH
-372,0,0,800:800:800:800:800:1000:1000:1000:1000:1000,0,0,0,0
+372,0,800:800:800:800:800:1000:1000:1000:1000:1000,0,0,0,0
//==========================================
//===== Professor ==========================
//-- PF_HPCONVERSION
-373,0,0,1000:1200:1400:1600:1800,0,0,0,0
+373,0,1000:1200:1400:1600:1800,0,0,0,0
//-- PF_SOULCHANGE
-374,0,3000,5000,0,0,0,0
+374,3000,5000,0,0,0,0
//-- PF_SOULBURN
-375,0,0,0,10000:10000:10000:10000:15000,0,0,0
+375,0,0,0,0,0,10000:10000:10000:10000:15000
//==========================================
//===== Assassin Cross =====================
//-- ASC_EDP
-378,0,0,2000,0,0,40000:45000:50000:55000:60000,20000:30000:40000:50000:60000
+378,0,2000,0,40000:45000:50000:55000:60000,20000:30000:40000:50000:60000,0
//-- ASC_BREAKER
-379,250,250,1000:1200:1400:1600:1800:2000:2200:2400:2600:2800,0,0,0,0
+379,700,1000:1200:1400:1600:1800:2000:2200:2400:2600:2800,0,0,0,0
//==========================================
//===== Sniper =============================
//-- SN_SIGHT
-380,0,0,0,0,0,30000,0
+380,0,0,0,30000,0,0
//-- SN_FALCONASSAULT
-381,500,500,3000,0,0,0,0
+381,1000,3000,0,0,0,0
//-- SN_SHARPSHOOTING
-382,1000,1000,1500,0,0,0,0
+382,2000,1500,0,0,0,0
//-- SN_WINDWALK
-383,1500:1800:2100:2400:2700:3000:3300:3600:3900:4200,500:600:700:800:900:1000:1100:1200:1300:1400,2000,0,0,130000:160000:190000:220000:250000:280000:310000:340000:370000:400000,0
+383,2000:2400:2800:3200:3600:4000:4400:4800:5200:5600,2000,0,130000:160000:190000:220000:250000:280000:310000:340000:370000:400000,0,0
//==========================================
//===== Whitesmith =========================
//-- WS_MELTDOWN
-384,0,500:500:600:600:700:700:800:800:900:1000,0,0,0,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000,5000
-//-- WS_CREATECOIN
-//385,0,10:20:30:30:30:30:30:30:30:30,0,0,0,0,0
-//-- WS_CREATENUGGET
-//386,0,10:20:30:30:30:30:30:30:30:30,0,0,0,0,0
+384,500:500:600:600:700:700:800:800:900:1000,0,0,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000,5000,0
//-- WS_CARTBOOST
-387,0,0,0,0,0,60000,0
+387,0,0,0,60000,0,0
//==========================================
//===== Stalker ============================
//-- ST_CHASEWALK
-389,500,500,0,0,0,10000,30000
+389,1200,0,0,10000,30000,0
//-- ST_REJECTSWORD
-390,0,0,0,0,0,300000,0
+390,0,0,0,300000,0,0
//==========================================
//===== Clown / Gypsy ======================
//-- CG_ARROWVULCAN
-394,1600:1760:1920:2080:2240:2400:2560:2720:2880:3040,400:440:480:520:560:600:640:680:720:760,2000,0,2000,0,0
+394,2000:2200:2400:2600:2800:3000:3200:3400:3600:3800,2800:2800:2800:2800:2800:3000:3000:3000:3000:3000,2000,0,0,0
//-- CG_MOONLIT
-395,0,0,0,0,0,20000:25000:30000:35000:40000,0
+395,0,0,0,20000:25000:30000:35000:40000,0,0
//-- CG_MARIONETTE
-396,0,0,0,0,0,1000,0
+396,0,0,0,1000,0,0
//==========================================
//===== Mixed Advanced Skills ==============
//-- LK_SPIRALPIERCE
-397,150:250:350:450:500,150:250:350:450:500,1200:1400:1600:1800:2000,0,0,0,1000
+397,300:500:700:900:1000,1200:1400:1600:1800:2000,0,0,1000,0
//-- LK_HEADCRUSH
-398,0,0,500,0,0,0,120000
+398,0,500,0,0,120000,0
//-- LK_JOINTBEAT
-399,0,0,800:800:800:800:800:1000:1000:1000:1000:1000,0,0,0,30000
+399,0,800:800:800:800:800:1000:1000:1000:1000:1000,0,0,30000,0
//-- HW_NAPALMVULCAN
-400,800,200,1000,0,0,0,45000
+400,1000,1000,0,0,45000,0
//-- CH_SOULCOLLECT
-401,0,2000,0,0,0,600000,0
+401,2000,0,0,600000,0,0
//-- PF_MINDBREAKER
-402,0,0,800:900:1000:1100:1200,0,0,30000,0
+402,0,800:900:1000:1100:1200,0,30000,0,0
//-- PF_MEMORIZE
-403,0,5000,0,0,0,0,0
+403,5000,0,0,0,0,0
//-- PF_FOGWALL
-404,0,0,0,0,0,20000,10000
+404,0,0,0,20000,10000,0
//-- PF_SPIDERWEB
-405,0,0,0,0,0,30000,8000
+405,0,0,0,30000,8000,0
//-- ASC_METEORASSAULT (Upkeep2 times are duration of: blind(lv1), stun(lv2) or bleeding (lv3))
-406,250,250,500,0,0,0,10000:5000:120000
+406,500,500,0,0,10000:5000:120000,0
//-- ASC_CDP
-407,0,0,5000,0,0,0,0
+407,0,500,0,0,0,0
//==========================================
//===== Adoption Skills ====================
//-- WE_BABY
-408,0,2000,0,0,0,300000,0
+408,3000,0,0,300000,0,0
//-- WE_CALLPARENT
-409,0,0,0,0,0,20000,0
+409,0,0,0,20000,0,0
//-- WE_CALLBABY
-410,0,0,0,0,0,20000,0
+410,0,0,0,20000,0,0
//==========================================
//===== Taekwon ============================
//-- TK_RUN
-411,3000:2500:2000:1500:100:500:0:0:0:0,3000:2500:2000:1500:1000:500:0:0:0:0,300,0,0,1000,150000
+411,6000:5000:4000:3000:2000:1000:0:0:0:0,0,0,1000,150000,0
//-- TK_DOWNKICK
-415,0,0,0,0,0,0,3000
+415,0,0,0,0,3000,0
//-- TK_TURNKICK
-417,0,0,0,0,0,0,2000
+417,0,0,0,0,2000,0
//-- TK_SPTIME
-423,0,0,0,0,0,1800000,0
+423,0,0,0,1800000,0,0
//-- TK_SEVENWIND
-425,0,0,0,0,0,300000,0
+425,0,0,0,300000,0,0
//-- TK_HIGHJUMP
-426,2500:2000:1500:1000:500:500:500:500:500:500,2500:2000:1500:1000:500:500:500:500:500:500,0,0,0,0,0
+426,5000:4000:3000:2000:1000,0,0,0,0,0
//==========================================
//===== Star Gladiator =====================
//-- SG_FEEL
-427,0,3000,0,0,0,0,0
+427,1000,0,0,0,0,0
//SG_SUN_WARM
-428,0,0,1000,0,0,10000:20000:60000,0
+428,0,1000,0,10000:20000:60000,0,0
//SG_MOON_WARM
-429,0,0,1000,0,0,10000:20000:60000,0
+429,0,1000,0,10000:20000:60000,0,0
//SG_STAR_WARM
-430,0,0,1000,0,0,10000:20000:60000,0
+430,0,1000,0,10000:20000:60000,0,0
//SG_SUN_COMFORT
-431,0,0,1000,0,0,80000:160000:240000:320000,0
+431,0,1000,0,80000:160000:240000:320000,0,0
//SG_MOON_COMFORT
-432,0,0,1000,0,0,80000:160000:240000:320000,0
+432,0,1000,0,80000:160000:240000:320000,0,0
//SG_STAR_COMFORT
-433,0,0,1000,0,0,80000:160000:240000:320000,0
+433,0,1000,0,80000:160000:240000:320000,0,0
//-- SG_HATE
-434,0,3000,0,0,0,0,0
+434,1000,0,0,0,0,0
//SG_FRIEND
-442,0,0,0,0,0,10000,0
+442,0,0,0,10000,0,0
//SG_KNOWLEDGE
-443,0,0,0,0,0,600000,0
+443,0,0,0,600000,0,0
//SG_FUSION
-444,0,0,1000,0,0,600000,0
+444,0,1000,0,600000,0,0
//==========================================
//===== Soul Linker ========================
//-- SL_ALCHEMIST
-445,0,1000,500,0,0,150000:200000:250000:300000:350000,0
+445,1000,500,0,150000:200000:250000:300000:350000,0,0
//-- AM_BERSERKPITCHER - Copy of AM_POTIONPITCHER for now
-446,0,1000,500,0,0,0,0
+446,0,500,0,0,0,0
//-- SL_MONK
-447,0,1000,500,0,0,150000:200000:250000:300000:350000,0
+447,1000,500,0,150000:200000:250000:300000:350000,0,0
//-- SL_STAR
-448,800,1000,500,0,0,150000:200000:250000:300000:350000,0
+448,1000,500,0,150000:200000:250000:300000:350000,0,0
//-- SL_SAGE
-449,0,1000,500,0,0,150000:200000:250000:300000:350000,0
+449,1000,500,0,150000:200000:250000:300000:350000,0,0
//-- SL_CRUSADER
-450,0,1000,500,0,0,150000:200000:250000:300000:350000,0
+450,1000,500,0,150000:200000:250000:300000:350000,0,0
//-- SL_SUPERNOVICE
-451,0,1000,500,0,0,150000:200000:250000:300000:350000,0
+451,1000,500,0,150000:200000:250000:300000:350000,0,0
//-- SL_KNIGHT
-452,0,1000,500,0,0,150000:200000:250000:300000:350000,0
+452,1000,500,0,150000:200000:250000:300000:350000,0,0
//-- SL_WIZARD
-453,0,1000,500,0,0,150000:200000:250000:300000:350000,0
+453,1000,500,0,150000:200000:250000:300000:350000,0,0
//-- SL_PRIEST
-454,0,1000,500,0,0,150000:200000:250000:300000:350000,0
+454,1000,500,0,150000:200000:250000:300000:350000,0,0
//-- SL_BARDDANCER
-455,0,1000,500,0,0,150000:200000:250000:300000:350000,0
+455,1000,500,0,150000:200000:250000:300000:350000,0,0
//-- SL_ROGUE
-456,0,1000,500,0,0,150000:200000:250000:300000:350000,0
+456,1000,500,0,150000:200000:250000:300000:350000,0,0
//-- SL_ASSASSIN
-457,0,1000,500,0,0,150000:200000:250000:300000:350000,0
+457,1000,500,0,150000:200000:250000:300000:350000,0,0
//-- SL_BLACKSMITH
-458,0,1000,500,0,0,150000:200000:250000:300000:350000,0
+458,1000,500,0,150000:200000:250000:300000:350000,0,0
//-- BS_ADRENALINE2
-459,0,0,0,0,0,150000,0
+459,0,0,0,150000,0,0
//-- SL_HUNTER
-460,0,0,500,0,0,150000:200000:250000:300000:350000,0
+460,1000,500,0,150000:200000:250000:300000:350000,0,0
//-- SL_SOULLINKER
-461,0,0,500,0,0,150000:200000:250000:300000:350000,0
+461,1000,500,0,150000:200000:250000:300000:350000,0,0
//-- SL_KAIZEL
-462,3600:3200:2800:2400:2000:2000:2000,900:800:700:600:500:500:500,0,0,0,1800000,2000
+462,4500:4000:3500:3000:2500:2000:1500,0,0,1800000,2000,0
//-- SL_KAAHI
-463,0,0,500,0,0,1800000,500
+463,0,500,0,1800000,500,0
//-- SL_KAUPE
-464,400,100,500,0,0,600000,0
+464,500,500,0,600000,0,0
//-- SL_KAITE
-465,4800:4400:4000:3600:3200:2800:2400,1200:1100:1000:900:800:700:600,0,0,0,60000:120000:180000:240000:300000:360000:600000,0
+465,6000:5500:5000:4500:4000:3500:3000,0,0,60000:120000:180000:240000:300000:360000:600000,0,0
//-- SL_STIN
-467,80,20,500,0,0,0,0
+467,100,500,0,0,0,0
//-- SL_STUN
-468,80,20,500,0,0,2000,0
+468,100,500,0,2000,0,0
//-- SL_SMA
-469,1600,400,500,0,0,3000,0
+469,2000,500,0,3000,0,0
//-- SL_SWOO
-470,800,200,500,0,0,1000:2000:3000:4000:5000:6000:7000,0
+470,1000,500,0,1000:2000:3000:4000:5000:6000:7000,0,0
//-- SL_SKE
-471,2400:1600:800,600:400:200,500,0,0,10000:20000:30000,3000
+471,3000:2000:1000,500,0,10000:20000:30000,3000,0
//-- SL_SKA
-472,2400:1600:800,600:400:200,500,0,0,10000:20000:30000,0
+472,3000:2000:1000,500,0,10000:20000:30000,0,0
//==========================================
//-- SM_SELFPROVOKE
-473,0,0,0,0,0,30000,0
+473,0,0,0,30000,0,0
//===== Mixed Advanced Skills ==============
//-- ST_PRESERVE
-475,0,1000,0,0,0,600000,0
+475,1000,0,0,600000,0,0
//-- ST_FULLSTRIP
-476,0,0,1000,0,0,75000:90000:105000:120000:135000,0
+476,0,1000,0,75000:90000:105000:120000:135000,0,0
//-- CR_SLIMPITCHER
-478,1000,1000,1000,0,0,0,0
+478,1000,1000,0,0,0,0
//-- CR_FULLPROTECTION
-479,0,1000,500,0,0,120000:240000:360000:480000:600000,0
+479,2000,0,0,120000:240000:360000:480000:600000,0,0
//-- PA_SHIELDCHAIN
-480,800,200,1000,0,0,0,0
+480,1000,1000,0,0,0,0
//-- PF_DOUBLECASTING
-482,1600,400,0,0,0,90000,0
+482,2000,0,0,90000,0,0
//-- HW_GANBANTEIN
-483,0,3000,5000,0,0,0,0
+483,3000,2000,0,0,0,0
//-- HW_GRAVITATION
-484,0,5000,2000,5000:6000:7000:8000:9000,0,5000:6000:7000:8000:9000,0
+484,5000,2000,0,5000:6000:7000:8000:9000,0,0
//-- WS_CARTTERMINATION
-485,0,0,0,0,0,0,5000
+485,0,0,0,0,5000,0
//-- WS_OVERTHRUSTMAX
-486,0,0,0,0,0,180000,0
+486,0,0,0,180000,0,0
//-- CG_LONGINGFREEDOM
-487,0,0,0,0,0,180000,0
+487,0,0,0,180000,0,0
//-- CG_HERMODE
-488,0,0,0,0,0,10000:15000:20000:25000:30000,10000:15000:20000:25000:30000
+488,0,0,0,10000:15000:20000:25000:30000,10000:15000:20000:25000:30000,0
//-- CG_TAROTCARD
-489,500,500,3000,0,0,0,30000
+489,1000,3000,0,0,30000,0
//-- CR_ACIDDEMONSTRATION
-490,0,1000,1000,0,0,0,0
+490,1000,1000,0,0,0,0
//-- CR_CULTIVATION
-491,0,0,0,0,0,300000,0
+491,0,0,0,300000,0,0
//==========================================
//-- ITEM_ENCHANTARMS
-492,0,0,0,0,0,180000,0
+492,0,0,0,180000,0,0
//===== Mixed Taekwon Skills ===============
//-- TK_MISSION
-493,0,1000,0,0,0,0,0
+493,1000,0,0,0,0,0
//-- SL_HIGH
-494,1000,0,500,0,0,150000:200000:250000:300000:350000,0
+494,1000,500,0,150000:200000:250000:300000:350000,0,0
//-- KN_ONEHAND
-495,0,0,0,0,0,300000,0
+495,0,0,0,300000,0,0
//-- AM_TWILIGHT1
-496,3000,3000,10000,0,0,0,0
+496,3000,10000,0,0,0,0
//-- AM_TWILIGHT2
-497,3000,3000,10000,0,0,0,0
+497,3000,10000,0,0,0,0
//-- AM_TWILIGHT3
-498,3000,3000,10000,0,0,0,0
+498,3000,10000,0,0,0,0
//-- HT_POWER
-499,0,0,100,0,0,0,0
+499,0,0,0,100,0,0
//==========================================
//===== Gunslinger =========================
//-- GS_GLITTERING
-500,0,0,0,0,0,600000,0
+500,0,0,0,600000,0,0
//-- GS_FLING
-501,0,0,0,0,0,30000,0
-//-- GS_TRIPLEACTION
-502,0,0,1000,0,0,0,0
+501,0,0,0,30000,0,0
//-- GS_BULLSEYE
-503,800,200,1000,0,0,0,0
+503,500,0,0,0,0,0
//-- GS_MADNESSCANCEL
-504,1600,400,3000,0,0,15000,0
+504,3000,4000,0,15000,0,0
//-- GS_ADJUSTMENT
-505,800,200,2000,0,0,30000,0
+505,1000,1000,0,30000,0,0
//-- GS_INCREASING
-506,0,0,1000,0,0,60000,0
-//-- GS_MAGICALBULLET
-507,0,0,500,0,0,0,0
+506,0,1000,0,60000,0,0
//-- GS_CRACKER
-508,0,0,1000,0,0,0,5000
+508,0,1000,0,0,5000,0
//-- GS_TRACKING
-512,600:700:800:900:1000:1100:1200:1300:1400:1500,600:700:800:900:1000:1100:1200:1300:1400:1500,1500,0,0,0,0
+512,1200:1400:1600:1800:2000:2200:2400:2600:2800:3000,0,0,0,0,0
//-- GS_DISARM
-513,1600,400,1000,0,0,30000,0
+513,0,0,0,30000,0,0
//-- GS_PIERCINGSHOT
-514,1200,200,500,0,0,0,120000
+514,1500,0,0,0,120000,0
//-- GS_RAPIDSHOWER
-515,0,0,1500,0,0,0,0
+515,0,1000,0,0,0,0
//-- GS_DESPERADO
-516,0,0,1000,0,1000,1000,0
+516,0,1000,1000,1000,0,0
//-- GS_GATLINGFEVER
-517,800,200,1000,0,0,30000:45000:60000:75000:90000:105000:120000:135000:150000:165000,0
+517,0,0,0,30000:45000:60000:75000:90000:105000:120000:135000:150000:165000,0,0
//-- GS_DUST
-518,1200,300,1000,0,0,0,0
+518,1000,1000,0,0,0,0
//-- GS_FULLBUSTER
-519,800,200,1200:1400:1600:1800:2000:2200:2400:2600:2800:3000,0,0,0,10000
-//-- GS_SPREADATTACK
-520,800,200,1000,0,0,0,0
+519,0,1200:1400:1600:1800:2000:2200:2400:2600:2800:3000,0,0,10000,0
//-- GS_GROUNDDRIFT
-521,800,200,1000,0,0,3000:6000:9000:12000:15000:18000:21000:24000:27000:30000,10000
+521,2000,0,0,3000:6000:9000:12000:15000:18000:21000:24000:27000:30000,10000,0
//==========================================
//===== Ninja ==============================
//-- NJ_KUNAI
-524,0,0,1000,0,0,0,0
+524,0,1000,0,0,0,0
//-- NJ_HUUMA
-525,2400,600,2000,0,0,0,0
+525,3000,2000,0,0,0,0
//-- NJ_ZENYNAGE
-526,0,0,5000,0,0,0,0
+526,0,5000,0,0,0,0
//-- NJ_TATAMIGAESHI
-527,0,0,3000,0,0,3000,3000
+527,0,3000,0,3000,3000,0
//-- NJ_KASUMIKIRI
-528,0,0,1000,0,0,30000:60000:90000:120000:150000:180000:210000:240000:270000:300000,0
+528,0,1000,0,30000:60000:90000:120000:150000:180000:210000:240000:270000:300000,0,0
//-- NJ_SHADOWJUMP
-529,0,0,1000,0,0,0,0
-//-- NJ_KIRIKAGE
-530,0,0,0,0,0,0,0
+529,0,1000,0,0,0,0
+//-- NJ_KIRIKAGE // Seems to have no delay (English Translation Project)
+530,0,0,0,0,0,0
//-- NJ_UTSUSEMI
-531,0,0,1000,0,0,20000:30000:40000:50000:60000,0
+531,0,1000,0,20000:30000:40000:50000:60000,0,0
//-- NJ_BUNSINJYUTSU
-532,3200:2800:2400:2000:1600:1200:800:800:800:800,800:700:600:500:400:300:200:200:200:200,2000,0,0,60000:80000:100000:120000:140000:160000:180000:200000:220000:240000,0
+532,4000:3500:3000:2500:2000:1500:1000:1000:1000:1000,1000,0,60000:80000:100000:120000:140000:160000:180000:200000:220000:240000,0,0
//-- NJ_KOUENKA
-534,560:1120:1680:2240:2800:3360:3840:4480:5040:5600,140:280:420:560:700:840:960:1120:1260:1400,0,0,0,0,0
+534,700:1400:2100:2800:3500:4200:4900:5600:6300:7000,0,0,0,0,0
//-- NJ_KAENSIN
-535,4800:4400:4000:3600:3200:2800:2400:2000:1600:1200,1200:1100:1000:900:800:700:600:500:400:300,1000,0,0,20000,0
+535,6000:5500:5000:4500:4000:3500:3000:2500:2000:1500,1000,0,20000,0,0
//-- NJ_BAKUENRYU
-536,2400,600,2000,0,0,0,0
+536,3000,2000,0,0,0,0
//-- NJ_HYOUSENSOU
-537,560:1120:1680:2240:2800:3360:3840:4480:5040:5600,140:280:420:560:700:840:960:1120:1260:1400,0,0,0,0,0
+537,700:1400:2100:2800:3500:4200:4900:5600:6300:7000,0,0,0,0,0
//-- NJ_SUITON
-538,2400,600,2000,0,0,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000
+538,3000,0,0,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000,0
//-- NJ_HYOUSYOURAKU
-539,1600:2000:2400:2800:3200:3200:3200:3200:3200:3200,400:500:600:700:800:800:800:800:800:800,2000,0,0,0,10000:11000:12000:13000:14000:15000:16000:17000:18000:19000
+539,2000:2500:3000:3500:4000,2000,0,0,10000:11000:12000:13000:14000:15000:16000:17000:18000:19000,0
//-- NJ_HUUJIN
-540,800:1200:1600:2000:2400:2800:3200:3600:4000:4400,200:300:400:500:600:700:800:900:1000:1100,1000,0,0,0,0
+540,1000:1500:2000:2500:3000:3500:4000:5000:5500:6000,1000,0,0,0,0
//-- NJ_RAIGEKISAI
-541,3200,800,0,0,0,0,0
+541,4000,0,0,0,0,0
//-- NJ_KAMAITACHI
-542,3200,800,0,0,0,0,0
+542,4000,0,0,0,0,0
//-- NJ_NEN
-543,4000:3200:2400:1600:800,800:600:400:200,0,0,0,30000:45000:60000:75000:90000,0
-//-- NJ_ISSEN
-544,0,0,3000,0,0,0,0
+543,5000:4000:3000:2000:1000,0,0,30000:45000:60000:75000:90000,0,0
+//==========================================
+
+//===== Gangsi Branch and Other Skills =====
+//-- MB_PETPITCHER
+//551,1000:1000:1000:1000:1000:500:500:500:500:500,0,0,0,0,0
+
+//-- MB_B_GAIN
+//556,2200:2000:1800:1600:1400:1200:1000,0,0,0,0,0
+
+//-- MB_MUNAKBALL
+//560,1500:1500:1500:1500:1000:1000:1000:1000:500:500,0,0,0,0,0
+
+//-- MB_B_GATHERING
+//562,10000,0,0,0,0,0
+
+//-- MB_B_EXCLUDE
+//564,30000:25000:20000:15000:10000,0,0,0,0,0
+
+//-- MB_B_WALLSHIFT
+//568,1000:800:600:400:200,0,0,0,0,0
+
+//-- SL_DEATHKNIGHT
+572,1000,500,0,150000:200000:250000:300000:350000,0,0
+//-- SL_COLLECTOR
+573,1000,500,0,150000:200000:250000:300000:350000,0,0
+//-- SL_NINJA
+574,1000,500,0,150000:200000:250000:300000:350000,0,0
+//-- SL_GUNNER
+575,1000,500,0,150000:200000:250000:300000:350000,0,0
+//-- AM_TWILIGHT4
+//576,3000,10000,0,0,0,0
+
+//-- DE_WINDATTACK
+//617,1000:1000:1000:1000:1000:0:0:0:0:0,0,0,0,0,0
+
+//-- DA_EXPLOSION
+//625,7000:6000:5000:4000:3000,0,0,0,0,0
+
+//-- DA_MAGICCART
+//640,5000:4000:3000:2000:1000,0,0,0,0,0
+//-- DA_COPY
+//641,20000,0,0,0,0,0
+
+//-- DA_EDARKNESS
+//647,13000:11000:9000:7000:5000,0,0,0,0,0
+
+//-- DA_TIMEOUT
+//649,5000:3000:1000,0,0,0,0,0
+//-- ALL_TIMEIN
+//650,0,0,0,0,0,0,1000
//==========================================
//===== New Monster Skills =================
//-- NPC_ICEBREATH
-655,0,0,0,0,0,0,12000
+655,0,0,0,0,12000,0
//-- NPC_ACIDBREATH
-657,0,0,0,0,0,0,60000
+657,0,0,0,0,60000,0
//-- NPC_DRAGONFEAR (Upkeep2 times are duration of: Stun(lv1), Silence(lv2), Confusion(lv3) and Bleeding(lv4))
-659,0,0,0,0,0,0,5000:30000:30000:120000
+659,0,0,0,0,5000:30000:30000:120000,0
//-- NPC_BLEEDING
-660,0,0,0,0,0,0,120000
+660,0,0,0,0,120000,0
//-- NPC_HELLJUDGEMENT
-662,0,0,0,0,0,0,30000
+662,0,0,0,0,30000,0
//-- NPC_WIDESILENCE
-663,0,0,0,0,0,0,30000
+663,0,0,0,0,30000,0
//-- NPC_WIDEFREEZE
-664,0,0,0,0,0,0,12000
+664,0,0,0,0,12000,0
//-- NPC_WIDEBLEEDING
-665,0,0,0,0,0,0,120000
+665,0,0,0,0,120000,0
//-- NPC_WIDESTONE
-666,0,0,0,0,0,0,20000
+666,0,0,0,0,20000,0
//-- NPC_WIDECONFUSE
-667,0,0,0,0,0,0,30000
+667,0,0,0,0,30000,0
//-- NPC_WIDESLEEP
-668,0,0,0,0,0,0,30000
+668,0,0,0,0,30000,0
//-- NPC_WIDESIGHT
-669,0,0,0,0,0,10000,0
+669,0,0,0,10000,0,0
//-- NPC_EVILLAND
-670,0,0,0,0,0,30000,30000
+670,0,0,0,30000,30000,0
//-- NPC_MAGICMIRROR
-671,0,0,0,0,0,30000,0
+671,0,0,0,30000,0,0
//-- NPC_SLOWCAST
-672,0,0,0,0,0,0,30000
+672,0,0,0,0,30000,0
//-- NPC_CRITICALWOUND
-673,0,0,0,0,0,0,30000
+673,0,0,0,0,30000,0
//-- NPC_STONESKIN
-675,0,0,0,0,0,30000,0
+675,0,0,0,30000,0,0
//-- NPC_ANTIMAGIC
-676,0,0,0,0,0,30000,0
+676,0,0,0,30000,0,0
//-- NPC_WIDECURSE
-677,0,0,0,0,0,0,30000
+677,0,0,0,0,30000,0
//-- NPC_WIDESTUN
-678,0,0,0,0,0,0,5000
+678,0,0,0,0,5000,0
//==========================================
//===== New Monster Skills (12.1) ==========
//-- NPC_HELLPOWER
-683,0,0,0,0,0,0,300000
+683,0,0,0,0,300000,0
//-- NPC_WIDEHELLDIGNITY
-684,0,0,0,0,0,0,300000
+684,0,0,0,0,300000,0
//-- NPC_INVINCIBLE
-685,0,0,0,0,0,-1,0
+685,0,0,0,-1,0,0
//-- NPC_INVINCIBLEOFF
-686,0,0,0,0,0,60000,0
+686,0,0,0,60000,0,0
//===== Item Use-Only Skills ===============
//-- CASH_BLESSING
-689,0,0,0,0,0,60000:80000:100000:120000:140000:160000:180000:200000:220000:240000,0
+689,0,0,0,60000:80000:100000:120000:140000:160000:180000:200000:220000:240000,0,0
//-- CASH_INCAGI
-690,0,0,0,0,0,60000:80000:100000:120000:140000:160000:180000:200000:220000:240000,0
+690,0,0,0,60000:80000:100000:120000:140000:160000:180000:200000:220000:240000,0,0
//-- CASH_ASSUMPTIO
-691,0,0,0,0,0,20000:40000:60000:80000:100000,0
+691,0,0,0,20000:40000:60000:80000:100000,0,0
//-- ALL_CATCRY
-//692,0,0,5000,0,0,0,0
-//-- ALL_PARTYFLEE
-693,0,0,0,0,0,300000,0
+692,0,5000,0,0,0,0
+
//-- ALL_DREAM_SUMMERNIGHT
-//695,0,0,12000,0,0,0,0
+695,0,12000,0,0,0,0
+
//-- ALL_WEWISH
-698,0,0,20000,0,0,0,0
+698,0,20000,0,0,0,0
//==========================================
//===== 2nd Jobs Quest Skills ==============
//-- KN_CHARGEATK
-1001,250,250,300,0,0,0,0
+1001,300,300,0,0,0,0
//-- CR_SHRINK
-1002,0,0,0,0,0,300000,0
+1002,0,0,0,300000,0,0
//-- AS_VENOMKNIFE
-1004,0,0,0,0,0,0,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000
+1004,0,0,0,0,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000,0
//-- RG_CLOSECONFINE
-1005,0,0,0,0,0,10000,0
+1005,0,0,0,10000,0,0
//-- WZ_SIGHTBLASTER
-1006,1280,320,0,0,0,120000,0
+1006,2000,0,0,120000,0,0
//-- SA_ELEMENTWATER
-1008,2000,0,1000,0,0,1800000,0
+1008,2000,1000,0,1800000,0,0
//-- HT_PHANTASMIC
-1009,0,0,0,0,0,0,0
+1009,0,0,0,0,0,0
//-- BA_PANGVOICE
-1010,800,200,2000,0,0,17000,0
-//-- DC_WINKCHARM (time1: Charm,time2: Confusion)
-1011,800,200,2000,0,0,10000,17000
+1010,1000,2000,0,17000,0,0
+//-- DC_WINKCHARM (time1: Charm, time2: Confusion)
+1011,1000,2000,0,10000,17000,0
//-- BS_GREED
-1013,0,0,1000,0,0,0,0
+1013,0,1000,0,0,0,0
//-- PR_REDEMPTIO
-1014,3200,800,0,0,0,0,0
+1014,4000,0,0,0,0,0
//-- MO_KITRANSLATION
-1015,1000,1000,1000,0,0,600000,0
+1015,2000,1000,0,600000,0,0
//-- MO_BALKYOUNG
-1016,0,0,2000,0,0,0,2000
+1016,0,2000,0,0,2000,0
//-- SA_ELEMENTGROUND
-1017,2000,2000,1000,0,0,1800000,0
+1017,2000,1000,0,1800000,0,0
//-- SA_ELEMENTFIRE
-1018,2000,2000,1000,0,0,1800000,0
+1018,2000,1000,0,1800000,0,0
//-- SA_ELEMENTWIND
-1019,2000,2000,1000,0,0,1800000,0
+1019,2000,1000,0,1800000,0,0
//==========================================
//===== Rune Knight ========================
//-- RK_ENCHANTBLADE
-2001,1000,0,0,0,0,300000,0
+2001,1000,0,0,300000,0,0
//-- RK_SONICWAVE
-2002,0,0,1000,2000,0,0,0
+2002,0,1000,0,0,0,2000
//-- RK_DEATHBOUND
-2003,0,0,2000,3000,0,2000,0
+2003,0,2000,0,2000,0,3000
//-- RK_HUNDREDSPEAR
-2004,1000:900:800:700:600:500:400:300:200:100,0,500,3000,0,0,0
-//-- RK_WINDCUTTER - Duration1: Fear status duration
-2005,0,0,0,2000,0,15000,0
+2004,1000,500,0,0,0,0
+//-- RK_WINDCUTTER //CHECK duration 1
+2005,0,0,0,0,0,2000
//-- RK_IGNITIONBREAK
-2006,1000,0,0,2000,0,0,0
-
-//-- RK_DRAGONBREATH - Duration1: Burning status duration
-2008,0:0:0:1000:1000:1000:1500:1500:2000:2000,500,2000,0,0,10000,0
-//-- RK_DRAGONHOWLING - Duration1: FIT/FLEE Reduction duration; Duration2: Fear status duration
-2009,0,0,0,10000,0,15000,2000
+2006,1000,0,0,0,0,2000
+//-- RK_DRAGONBREATH //CHECK duration 1 burning
+2008,500:500:500:1500:1500:1500:2000:2000:2500:2500,2000,0,5000,0,0
+//-- RK_DRAGONHOWLING
+2009,0,0,0,15000,0,60000
-//-- RK_MILLENNIUMSHIELD
-2011,0,0,1000,60000,0,180000,0
+//-- RK_MILLENNIUMSHIELD //CHECK duration 2
+2011,0,1000,0,300000,0,60000
//-- RK_CRUSHSTRIKE
-2012,0,1000,0,30000,0,30000,0
-//-- RK_REFRESH
-2013,0,1000,0,120000,0,60000,0
+2012,1000,0,0,0,0,30000
+//-- RK_REFRESH //CHECK duration 1
+2013,1000,0,0,30000,0,120000
//-- RK_GIANTGROWTH
-2014,0,1000,0,0,0,180000,0
-//-- RK_STONEHARDSKIN
-2015,0,2000,0,0,0,180000,0
+2014,1000,0,0,300000,0,0
+//-- RK_STONEHARDSKIN //CHECK duration 2
+2015,2000,0,0,300000,10000,0
//-- RK_VITALITYACTIVATION
-2016,0,0,0,0,0,180000,0
-//-- RK_STORMBLAST
-2017,2000,1000,0,1000,0,0,0
+2016,0,0,0,30000,0,0
+//-- RK_STORMBLAST //CHECK duration 1
+2017,2000,1000,0,1000,0,0
//-- RK_FIGHTINGSPIRIT
-2018,0,0,0,0,0,180000,0
+2018,0,0,0,300000,0,0
//-- RK_ABUNDANCE
-2019,0,0,0,0,0,180000,0
+2019,0,0,0,300000,0,0
+//==========================================
+
+//===== Gillotine Cross ====================
+//-- GC_VENOMIMPRESS
+2021,0,3000:2500:2000:1500:1000,0,10000:20000:30000:40000:50000,0,0
+//-- GC_CROSSIMPACT
+2022,0,2500:2000:1500:1000:500,2000,0,0,0
+//-- GC_DARKILLUSION
+2023,0,1500,0,0,0,0
+
+//-- GC_CREATENEWPOISON
+2025,0,500,0,0,0,0
+//-- GC_ANTIDOTE
+2026,0,0,0,0,0,0
+//-- GC_POISONINGWEAPON -- VenomBleed Note : As poison says 15 seconds, on kRO is doing 300 seconds.
+2027,0,1000,0,60000:120000:180000:240000:300000,300000:300000:300000:300000:0:300000:300000:300000:300000:0,0
+//-- GC_WEAPONBLOCKING
+2028,0,2000,0,180000,0,0
+//-- GC_COUNTERSLASH
+2029,0,2000,0,0,0,0
+//-- GC_WEAPONCRUSH //CHECK duration 1 devist
+2030,0,1000,0,40000:80000:120000:160000:200000,0,0
+//-- GC_VENOMPRESSURE
+2031,0,1000,0,0,0,0
+//-- GC_POISONSMOKE //CHECK Cast time is said 2 second fixed, but no variable. Check duration 1 (was added / thought to be AoE duration)
+2032,2000,2000,0,6000:8000:10000:12000:14000,0,0
+//-- GC_CLOAKINGEXCEED
+2033,0,2000,0,0,0,0
+//-- GC_PHANTOMMENACE
+2034,0,1000,0,0,0,0
+//-- GC_HALLUCINATIONWALK
+2035,0,0,0,30000:35000:40000:45000:50000,25000,300000
+//-- GC_ROLLINGCUTTER //CHECK duration 1 (should be as long as esma status?)
+2036,0,200,0,4000,0,0
+//-- GC_CROSSRIPPERSLASHER
+2037,0,1000,0,0,0,0
+//==========================================
-//===== Archbishop =========================
+//===== Arch Bishop ========================
//-- AB_JUDEX
-2038,2000,500,500,0,0,0,0
+2038,2500,500,0,0,0,0
//-- AB_ANCILLA
-2039,1000,0,1000,0,0,0,0
-//-- AB_ADORAMUS
-//Duration1 - Lifetime of SC_BLIND; Duration2 - Lifetime of SC_ADORAMUS;
-2040,2000,0,500,2000,0,6000:7000:8000:9000:10000:11000:12000:13000:14000:15000,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000
+2039,1000,1000,0,0,0,0
+//-- AB_ADORAMUS //CHECK Duration 1 is blindness and duration 2 is reduced AGI. FIX ME!!!!
+2040,2000,500,0,6000:7000:8000:9000:10000:11000:12000:13000:14000:15000,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000,2000
//-- AB_CLEMENTIA
-2041,3000,1000,0,0,0,120000:180000:240000,0
+2041,4000,0,0,120000:180000:240000,0,0
//-- AB_CANTO
-2042,3000,1000,0,0,0,120000:180000:240000,0
+2042,4000,0,0,120000:180000:240000,0,0
//-- AB_CHEAL
-2043,3000,1000:500:0,0,1000:2000:3000,0,0,0
+2043,4000:3500:3000,0,0,0,0,1000:2000:3000
//-- AB_EPICLESIS
-2044,4000:4500:5000:5500:6000,2000,2000,60000,0,18000:21000:24000:27000:30000,0
+2044,4000:4500:5000:5500:6000,2000,0,18000:21000:24000:27000:30000,0,60000
//-- AB_PRAEFATIO
-2045,2000,1000,0,13000:16000:19000:22000:25000:28000:31000:34000:37000:40000,0,120000,0
+2045,3000,0,0,120000,0,13000:16000:19000:22000:25000:28000:31000:34000:37000:40000
//-- AB_ORATIO
-2046,4000,1000,0,2000,0,30000,0
+2046,5000,0,0,30000,0,2000
//-- AB_LAUDAAGNUS
-2047,1000,0,0,3000,0,60000,0
+2047,1000,0,0,60000,0,3000
//-- AB_LAUDARAMUS
-2048,1000,0,0,3000,0,60000,0
+2048,1000,0,0,60000,0,3000
+
//-- AB_RENOVATIO
-2050,3000,2000,0,1000,0,90000,0
+2050,5000,0,0,90000,0,1000
//-- AB_HIGHNESSHEAL
-2051,1000,0,1000,3000:6000:9000:12000:15000,0,0,0
+2051,1000,1000,0,0,0,3000:6000:9000:12000:15000
//-- AB_CLEARANCE
-2052,4000,0,0,10000,0,0,0
+2052,4000,0,0,0,0,10000
//-- AB_EXPIATIO
-2053,1000,1000,0,0,0,150000:180000:210000:240000:270000,0
+2053,2000,0,0,150000:180000:210000:240000:270000,0,0
//-- AB_DUPLELIGHT
-2054,2000,2000,1000,0,0,90000:120000:150000:180000:210000:240000:270000:300000:330000:360000,0
+2054,4000,1000,0,90000:120000:150000:180000:210000:240000:270000:300000:330000:360000,0,0
+
//-- AB_SILENTIUM
-2057,4000,0,0,15000,0,20000:30000:40000:50000:60000,0
+2057,4000,0,0,20000:30000:40000:50000:60000,0,15000
+//==========================================
+
+//===== Warlock ============================
+//-- WL_WHITEIMPRISON //CHECK Is reuse delay hard coded to work only if successful? Duration 1 may be incorrect. Is duration 2 for if casted on self?
+2201,0,0,0,10000:12000:14000:16000:18000,5000,0
+//-- WL_SOULEXPANSION
+2202,2000,500,0,0,0,0
+//-- WL_FROSTMISTY
+2203,2500,2000,0,40000,0,8000
+//-- WL_JACKFROST
+2204,3000,2000,0,10000:15000:20000:25000:30000,0,0
+//-- WL_MARSHOFABYSS //CHECK Duration 1 time
+2205,500,1000,0,20000,0,2500:3000:3500:4000:4500
+//-- WL_RECOGNIZEDSPELL
+2206,2000,1000,0,20000:30000:40000:50000:60000,0,60000
+//-- WL_SIENNAEXECRATE // Duration of the status for this skill appears to be hard coded. Fix later????
+2207,2000,2000,0,10000:12000:14000:16000:18000,0,0
+
+//-- WL_STASIS // Duration for the status will need to be hard coded soon to make stats reduce the duration.
+2209,4000,2000,0,20000:30000:40000:50000:60000,0,180000:190000:200000:210000:220000
+//-- WL_DRAINLIFE
+2210,5000,0,0,0,0,2000
+//-- WL_CRIMSONROCK //CHECK Whats duration 1 for?
+2211,6000,2000,0,3000:4000:5000:6000:7000,0,5000
+//-- WL_HELLINFERNO
+2212,4000,1000,0,20000:30000:40000:50000:60000,0,0
+//-- WL_COMET //CHECK Is burning on duration 1 correct?
+2213,11000:12500:14000:15500:17000,5000,0,20000,0,180000
+//-- WL_CHAINLIGHTNING //CHECK Whats duration 1 used for?
+2214,4500:5000:5500:6000:6500,3000,0,1000,0,0
+
+//-- WL_EARTHSTRAIN //CHECK What is duration 2 used for?
+2216,3000:4000:5000:6000:7000,1000,0,500,60000,10000
+//-- WL_TETRAVORTEX //CHECK Duration 1 might be correct?
+2217,6000:7000:8000:9000:10000,2000,0,20000,0,15000
+
+//-- WL_SUMMONFB
+2222,2000,0,0,30000:40000:50000:60000:70000,0,0
+//-- WL_SUMMONBL
+2223,2000,0,0,30000:40000:50000:60000:70000,0,0
+//-- WL_SUMMONWB
+2224,2000,0,0,30000:40000:50000:60000:70000,0,0
+
+//-- WL_SUMMONSTONE
+2229,2000,0,0,30000:40000:50000:60000:70000,0,0
+
+//-- WL_READING_SB //CHECK Is duration 1 how long the spell will be stored for?
+2231,4000,500,0,30000,0,5000
+//==========================================
+//===== Ranger =============================
+//-- RA_ARROWSTORM
+2233,2500,0,0,0,0,3000
+//-- RA_FEARBREEZE
+2234,2000,0,0,60000:90000:120000:150000:180000,0,0
+
+//-- RA_AIMEDBOLT
+2236,5000,1000,0,0,0,0
+//-- RA_DETONATOR //CHECK Is this timer needed for this skill at all???
+2237,0,0,0,1000,0,0
+//-- RA_ELECTRICSHOCKER //CHECK Is duration 1 and 2 what I think it is?
+2238,0,0,0,15000,20000,0
+//-- RA_CLUSTERBOMB //CHECK Thinking the same for this one too.
+2239,0,0,0,15000,0,0
+//-- RA_WUGMASTERY
+2240,0,1000,0,0,0,0
+//-- RA_WUGRIDER
+2241,0,500,0,0,0,0
+//-- RA_WUGDASH
+2242,0,2000,0,0,0,0
+
+//-- RA_WUGBITE //CHECK Its found that the no movement duration is bugged. Keeping this at 10 sec for now.
+2244,0,2000,0,10000,0,5000
+
+//-- RA_SENSITIVEKEEN
+2246,0,3000,0,0,0,0
+//-- RA_CAMOUFLAGE
+2247,0,0,0,10000,0,0
+
+//-- RA_MAGENTATRAP //CHECK Duration 1 and 2 should be correct?
+2249,0,2000,0,15000,10000,0
+//-- RA_COBALTTRAP
+2250,0,2000,0,15000,10000,0
+//-- RA_MAIZETRAP
+2251,0,2000,0,15000,10000,0
+//-- RA_VERDURETRAP
+2252,0,2000,0,15000,10000,0
+//-- RA_FIRINGTRAP
+2253,0,0,0,15000,25000,0
+//-- RA_ICEBOUNDTRAP
+2254,0,0,0,15000,25000,0
+//==========================================
+
+//===== Mechanic ===========================
+//-- NC_BOOSTKNUCKLE
+2256,1000:1200:1400:1600:1800,0,0,0,0,0
+//-- NC_PILEBUNKER
+2257,0,2000,0,0,0,5000
+//-- NC_VULCANARM
+2258,0,500:300:100,0,0,0,0
+//-- NC_FLAMELAUNCHER
+2259,1500:1900:2300,1500:1000:500,0,7000:14000:21000,0,0
+//-- NC_COLDSLOWER //CHECK Are freezing and frozen durations correct?
+2260,1000,1000:2000:3000,0,5000:10000:15000,10000:15000:20000,0
+// -- NC_ARMSCANNON
+2261,1400:1600:1800,500:1000:2000,0,0,0,0
+//-- NC_ACCELERATION
+2262,0,0,0,30000:60000:90000,0,0
+//-- NC_HOVERING
+2263,0,0,0,30000,0,0
+//-- NC_F_SIDESLIDE
+2264,0,500,0,0,0,0
+//-- NC_B_SIDESLIDE
+2265,0,500,0,0,0,0
+
+//-- NC_SELFDESTRUCTION
+2267,3500:3000:2500,0,0,0,0,0
+//-- NC_SHAPESHIFT
+2268,2000,2000,0,300000,0,0
+//-- NC_EMERGENCYCOOL
+2269,0,500,0,0,0,5000
+//-- NC_INFRAREDSCAN
+2270,1000,500,0,10000,0,15000
+//-- NC_ANALYZE
+2271,1000,1000,0,20000,0,0
+//-- NC_MAGNETICFIELD
+2272,500:1000:1500,0,0,15000,0,300000
+//-- NC_NEUTRALBARRIER
+2273,500:1000:1500,0,0,30000:45000:60000,0,120000
+//-- NC_STEALTHFIELD
+2274,500:1000:1500,0,0,15000:20000:25000,0,120000
+//-- NC_REPAIR
+2275,500,1000,0,0,0,0
+
+//-- NC_AXEBOOMERANG
+2278,0,0,0,0,0,5000
+//-- NC_POWERSWING //CHECK Duration 1 is stun?
+2279,0,1000,0,3000,0,0
+//-- NC_AXETORNADO
+2280,0,500,0,0,0,4000:3500:3000:2500:2000
+//-- NC_SILVERSNIPER
+2281,1800:1600:1400:1200:1000,0,0,10000:15000:20000:25000:30000,0,0
+//-- NC_MAGICDECOY
+2282,1800:1600:1400:1200:1000,0,0,10000:15000:20000:25000:30000,0,0
+//-- NC_DISJOINT
+2283,2000,0,0,0,0,0
+//==========================================
+
+//===== Shadow Chaser ======================
+//-- SC_FATALMENACE
+2284,0,500,0,0,0,0
+//-- SC_REPRODUCE //CHECK Does a duration limit still exist, or it just stays on until reused?
+2285,0,1000,0,60000,0,0
+//-- SC_AUTOSHADOWSPELL
+2286,6000:5600:5200:4800:4400:4000:3600:3200:2800:2400,0,0,60000:80000:100000:120000:140000:160000:180000:200000:220000:300000,0,0
+//-- SC_SHADOWFORM
+2287,0,1000,0,30000:40000:50000:60000:70000,0,0
+//-- SC_TRIANGLESHOT
+2288,1000,500,0,0,0,0
+//-- SC_BODYPAINT //CHECK Whats duration 2 do?
+2289,0,1000,0,5000:7000:9000:11000:13000,5000,2000
+//-- SC_INVISIBILITY //CHECK Is duration 1 needed for this or it lasts until your out of SP?
+2290,1000,1000,0,20000,0,300000
+//-- SC_DEADLYINFECT
+2291,0,1000,0,10000:15000:20000:25000:30000,0,2000
+//-- SC_ENERVATION
+2292,2000,1000,0,10000:15000:20000,0,2000
+//-- SC_GROOMY
+2293,2000,1000,0,10000:15000:20000,0,2000
+//-- SC_IGNORANCE
+2294,2000,1000,0,10000:15000:20000,0,2000
+//-- SC_LAZINESS
+2295,2000,1000,0,10000:15000:20000,0,2000
+//-- SC_UNLUCKY
+2296,2000,1000,0,10000:15000:20000,0,2000
+//-- SC_WEAKNESS
+2297,2000,1000,0,10000:15000:20000,0,2000
+//-- SC_STRIPACCESORY
+2298,1000,1000,0,60000:70000:80000:90000:100000,0,0
+//-- SC_MANHOLE
+2299,1000,2000,0,5000:1000:15000,5000:1000:15000,0
+//-- SC_DIMENSIONDOOR
+2300,1000,2000,0,4000:8000:12000,0,0
+//-- SC_CHAOSPANIC
+2301,2000,2000,0,5000:10000:15000,30000,0
+//-- SC_MAELSTROM
+2302,2000,2000,0,7000:14000:21000,0,0
+//-- SC_BLOODYLUST
+2303,2000,2000,0,10000:20000:30000,30000,0
+//-- SC_FEINTBOMB
+2304,1000,0,0,1000,0,5000
+//==========================================
+
+//==== Royal Guard skills ==================
+//-- LG_CANNONSPEAR
+2307,0,0,0,0,0,2000
+
+//-- LG_TRAMPLE
+2309,0,1000,0,0,0,0
+//-- LG_SHIELDPRESS
+2310,0,0,0,5500:6000:6500:7000:7500,0,2000
+//-- LG_REFLECTDAMAGE
+2311,0,0,0,300000,0,0
+//-- LG_PINPOINTATTACK //CHECK Whats duration 1 for?
+2312,0,1000,0,5000,0,5000
+//-- LG_FORCEOFVANGUARD
+2313,1000,1000,0,120000,0,0
+//-- LG_RAGEBURST
+2314,0,3000,0,0,0,0
+//-- LG_SHIELDSPELL //CHECK Shound spells the shield casts use the original duration of that skill?
+2315,1000,1000,0,3000:30000:30000,0,2000
+//-- LG_EXEEDBREAK
+2316,5000:5500:6000:6500:7000,1000,0,300000,0,0
+//-- LG_OVERBRAND
+2317,500,2000,0,0,0,0
+//-- LG_PRESTIGE
+2318,3000,0,0,30000:45000:60000:75000:90000,0,60000
+//-- LG_BANDING
+2319,0,0,0,-1,2000:4000:6000:8000:10000,0
+//-- LG_MOONSLASHER
+2320,1000,1000,0,0,0,6000:5000:4000:3000:2000
+//-- LG_RAYOFGENESIS
+2321,2500:3000:3500:4000:4500,2000,0,10000,0,5000
+//-- LG_PIETY
+2322,3000:2500:2000:1500:1000,0,0,60000:80000:100000:120000:140000,0,0
+//-- LG_EARTHDRIVE
+2323,1000,1000,0,3000:6000:9000:12000:15000,0,7000:6000:5000:4000:3000
+//-- LG_HESPERUSLIT
+2324,1000,3000,0,0,0,20000
+//-- LG_INSPIRATION
+2325,3000,2000,0,30000:45000:60000:75000:90000,0,540000:480000:420000:360000:300000
+//==========================================
+
+//===== Sura Skills ========================
+//-- SR_DRAGONCOMBO //CHECK Is stun on duration 1 correct?
+2326,0,0,0,3000,0,0
+//-- SR_SKYNETBLOW
+2327,0,500,0,0,0,0
+//-- SR_EARTHSHAKER //CHECK Duration 1 is correct, but is the stun working?
+2328,0,0,0,1000:2000:2000:3000:3000,0,3000
+//-- SR_FALLENEMPIRE //CHECK The immoble is working?
+2329,0,0,0,500:1000:1500:2000:2500,0,0
+//-- SR_TIGERCANNON
+2330,1100:1200:1300:1400:1500:1600:1700:1800:1900:2000,1000,0,0,0,5000
+
+//-- SR_RAMPAGEBLASTER
+2332,0,1000,0,0,0,10000
+//-- SR_CRESCENTELBOW
+2333,0,1000,0,10000:15000:20000:25000:30000,0,5000
+//-- SR_CURSEDCIRCLE
+2334,0,1000,0,3000:4000:5000:6000:7000,0,10000
+//-- SR_LIGHTNINGWALK
+2335,0,1000,0,10000:15000:20000:25000:30000,0,5000
+//-- SR_KNUCKLEARROW
+2336,0,1000,0,0,0,0
+//-- SR_WINDMILL
+2337,1000,500,0,0,0,3000
+//-- SR_RAISINGDRAGON //CHECK Whats the set 5 seconds in the last column for?
+2338,0,1000,0,30000:45000:60000:75000:90000:105000:120000:135000:150000:165000,5000,30000
+
+//-- SR_ASSIMILATEPOWER
+2340,0,1000,0,0,0,5000
+//-- SR_POWERVELOCITY
+2341,2000,0,0,0,0,0
+
+//-- SR_GATEOFHELL
+2343,1000:1200:1400:1600:1800:2000:2200:2400:2600:2800,100:200:300:400:500:600:700:800:900:1000,0,0,0,5000
+//-- SR_GENTLETOUCH_QUIET
+2344,0,0,0,5000:7000:9000:11000:13000,0,1000:1500:2000:2500:3000
+//-- SR_GENTLETOUCH_CURE
+2345,0,1000,0,0,0,0
+//-- SR_GENTLETOUCH_ENERGYGAIN //CHECK Desc shows these durations. Are they good as is?
+2346,1000,1000,0,60000:120000:180000:240000:300000,0,0
+//-- SR_GENTLETOUCH_CHANGE
+2347,1000,1000,0,60000:120000:180000:240000:300000,0,0
+//-- SR_GENTLETOUCH_REVITALIZE
+2348,1000,1000,0,60000:120000:180000:240000:300000,0,0
+//==========================================
+
+//==== Wanderer skills =====================
+//-- WA_SWING_DANCE
+2350,1000,2000,0,60000,0,0
+//-- WA_SYMPHONY_OF_LOVER
+2351,1000,2000,0,60000,0,0
+//-- WA_MOONLIT_SERENADE
+2352,1000,2000,0,60000,0,0
+//==========================================
+
+//==== Minstresl skills ====================
+//-- MI_RUSH_WINDMILL
+2381,1000,2000,0,60000,0,0
+//-- MI_ECHOSONG
+2382,1000,2000,0,60000,0,0
+//-- MI_HARMONIZE
+2383,1000,1000,0,60000,0,5000
+//==========================================
+
+//==== Minstrel/Wanderer skills ============
+//-- WM_METALICSOUND
+2413,1000:1500:2000:2500:3000,1000,0,0,0,2000:2500:3000:3500:4000
+//-- WM_REVERBERATION
+2414,1100:1200:1300:1400:1500,1000,0,9000:10000:11000:12000:13000,0,0
+
+//-- WM_DOMINION_IMPULSE
+2417,0,1000,0,0,0,0
+//-- WM_SEVERE_RAINSTORM
+2418,2000:2500:3000:3500:4000,1000,0,900:1500:2100:2700:3000,0,5000
+//-- WM_POEMOFNETHERWORLD
+2419,3000,0,0,9000:11000:13000:15000:17000,8000:10000:12000:14000:16000,0
+//-- WM_VOICEOFSIREN
+2420,2000:2200:2400:2600:2800,1000,0,15000:18000:21000:24000:27000,0,5000
+//-- WM_DEADHILLHERE
+2421,4000:3500:3000:2500:2000,1000,0,0,0,0
+//-- WM_LULLABY_DEEPSLEEP
+2422,3000,1000,0,12000:14000:16000:18000:20000,0,10000
+//-- WM_SIRCLEOFNATURE
+2423,2000,1000,0,60000,0,15000
+//-- WM_RANDOMIZESPELL
+2424,0,1000,0,0,0,3000
+//-- WM_GLOOMYDAY
+2425,1500,1000,0,30000:45000:60000:75000:90000,0,3000
+//-- WM_GREAT_ECHO
+2426,2500:2700:2900:3100:3300,1000,0,0,0,10000
+//-- WM_SONG_OF_MANA
+2427,1500,1000,0,30000:60000:90000:120000:150000,0,90000
+//-- WM_DANCE_WITH_WUG
+2428,2000:2500:3000:3500:4000,1000,0,30000:60000:90000:120000:150000,0,90000
+//-- WM_SOUND_OF_DESTRUCTION
+2429,500:1000:1500:2000:2500,1000,0,0,0,20000
+//-- WM_SATURDAY_NIGHT_FEVER
+2430,2000:3000:4000:5000:6000,1000,0,20000:30000:40000:50000:60000,3000,180000
+//-- WM_LERADS_DEW
+2431,1500,1000,0,20000:30000:40000:50000:60000,0,180000
+//-- WM_MELODYOFSINK
+2432,1500,1000,0,20000:30000:40000:50000:60000,0,180000
+//-- WM_BEYOND_OF_WARCRY
+2433,1500,1000,0,20000:30000:40000:50000:60000,0,180000
+//-- WM_UNLIMITED_HUMMING_VOICE
+2434,1500,1000,0,20000:30000:40000:50000:60000,0,180000
+//==========================================
+
+//==== Sorcerer skills =====================
+//-- SO_FIREWALK //CHECK Duration 2 needs to be added for the PROPERTYWALK status ID. Ask me for more info. [Rytech]
+2443,1000,1000,0,12000,0,0
+//-- SO_ELECTRICWALK //CHECK Duration 2 needs to be added for the PROPERTYWALK status ID. Ask me for more info. [Rytech]
+2444,1000,1000,0,12000,0,0
+//-- SO_SPELLFIST
+2445,0,1000,0,20000:25000:30000:35000:40000,0,0
+//-- SO_EARTHGRAVE
+2446,2200:2400:2600:2800:3000,1000,0,500,8000:11000:14000:17000:20000,5000
+//-- SO_DIAMONDDUST
+2447,5500:6000:6500:7000:7500,1000,0,500,12000:14000:16000:18000:20000,5000
+//-- SO_POISON_BUSTER
+2450,2000:3000:4000:5000:6000,1000,0,0,0,2000
+//-- SO_PSYCHIC_WAVE
+2449,9000:9900:10800:11700:12600,1000,0,1200:1700:2200:2700:3200,0,5000
+//-- SO_CLOUD_KILL
+2450,3300:3500:3700:3900:4100,1000,0,8000:10000:12000:14000:16000,10000:15000:20000:25000:30000,5000
+//-- SO_STRIKING
+2451,3000,1000,0,60000,0,2000
+//-- SO_WARMER
+2452,1700:1900:2100:2300:2500,1000,0,40000:45000:50000:55000:60000,30000,60000
+//-- SO_VACUUM_EXTREME //CHECK Whats duration 2 used for? Is it part of holding the player in place until duration 1 ends?
+2453,1000:1500:2000:2500:3000,1000,0,4000:6000:8000:10000:12000,1000,5000
+//-- SO_VARETYR_SPEAR //CHECK Duration 2 is used for the stun?
+2454,1700:1900:2100:2300:2500,1000,0,0,3000,2000
+//-- SO_ARULLO
+2455,1500:2000:2500:3000:3500,1000,0,8000:10000:12000:14000:16000,0,5000:6000:7000:8000:9000
+//-- SO_EL_CONTROL
+2456,2000,0,0,0,0,5000
+//-- SO_SUMMON_AGNI //CHECK Yoyo says the cooldown is 5 seconds. Need to confirm.
+2457,3000:4000:5000,0,0,600000:900000:1200000,0,60000
+//-- SO_SUMMON_AQUA //CHECK Yoyo says the cooldown is 5 seconds. Need to confirm.
+2458,3000:4000:5000,0,0,600000:900000:1200000,0,60000
+//-- SO_SUMMON_VENTUS //CHECK Yoyo says the cooldown is 5 seconds. Need to confirm.
+2459,3000:4000:5000,0,0,600000:900000:1200000,0,60000
+//-- SO_SUMMON_TERA //CHECK Yoyo says the cooldown is 5 seconds. Need to confirm.
+2460,3000:4000:5000,0,0,600000:900000:1200000,0,60000
+//-- SO_EL_ACTION
+2461,0,0,0,0,0,5000
+//-- SO_EL_ANALYSIS
+2462,2000,0,0,0,0,0
+
+//-- SO_EL_CURE
+2464,2000,1000,0,0,0,0
+//-- SO_FIRE_INSIGNIA
+2465,2000,0,0,60000,0,60000
+//-- SO_WATER_INSIGNIA
+2466,2000,0,0,60000,0,60000
+//-- SO_WIND_INSIGNIA
+2467,2000,0,0,60000,0,60000
+//-- SO_EARTH_INSIGNIA
+2468,2000,0,0,60000,0,60000
+//==========================================
+
+//==== Genetic skills ======================
+//-- GN_CART_TORNADO //CHECK Duration 1 used for stun?
+2476,0,500,0,5000,0,0:500:1000:1500:2000
+//-- GN_CARTCANNON
+2477,1000:1500:2000:2500:3000,500,0,0,0,0
+//-- GN_CARTBOOST
+2478,1500,500,0,90000,0,0
+//-- GN_THORNS_TRAP
+2479,1500,500,0,10000:12000:14000:16000:18000,20000,0
+//-- GN_BLOOD_SUCKER
+2480,1500,500,0,20000:22000:24000:26000:28000,0,0
+//-- GN_SPORE_EXPLOSION
+2481,1500,500,0,2000:2000:3000:3000:4000,0,5000
+//-- GN_WALLOFTHORN
+2482,1500,500,0,10000:11000:12000:13000:14000,0,5000
+//-- GN_CRAZYWEED //CHECK Will need to recheck this skill later if durations needs to be set.
+2483,3000:3500:4000:4500:5000:5500:6000:6500:7000:7500,500,0,0,0,5000
+
+//-- GN_DEMONIC_FIRE //CHECK Is duration 2 the burning?
+2485,3000:3500:4000:4500:5000,500,0,10000:12000:14000:16000:18000,10000,5000
+//-- GN_FIRE_EXPANSION
+2486,2000,500,0,0,0,0
+//-- GN_FIRE_EXPANSION_SMOKE_POWDER
+2487,0,0,0,10000:12000:14000:16000:18000,0,0
+//-- GN_FIRE_EXPANSION_TEAR_GAS
+2488,0,0,0,10000:12000:14000:16000:18000,0,0
+
+//-- GN_HELLS_PLANT
+2490,3000:3500:4000:4500:5000,500,0,40000,0,0
+//-- GN_HELLS_PLANT_ATK //CHECK Guessing durations 1 and 2 are for stun and bleeding.
+2491,0,0,0,6000,16000,0
+//-- GN_MANDRAGORA
+2492,1000,500,0,30000,0,10000
+//-- GN_SLINGITEM //CHECK Whats durations 1 and 2 used for?
+2493,0,0,0,77000,10000,1000
+
+//-- GN_SLINGITEM_RANGEMELEEATK //CHECK Whats duration 1 used for?
+2498,0,0,0,3000,0,0
+//==========================================
+
+//===== Extra 3rd Class Skills =============
//-- AB_SECRAMENT
-2515,1000,0,500,0,0,60000:90000:120000:150000:180000,0
+2515,2000,500,0,60000:90000:120000:150000:180000,0,0
+
+//-- SR_HOWLINGOFLION //CHECK Is duration 1 correct for fear?
+2517,1500,0,0,10000,0,10000
+//-- SR_RIDEINLIGHTNING
+2518,0,200,0,0,0,1000
//==========================================
+//===== Misc. Skills =======================
+//-- ALL_ODINS_RECALL
+2533,10000,0,0,0,0,300000
+//-- RETURN_TO_ELDICASTES
+2534,2000,0,0,0,2000,300000
+
+//-- ALL_GUARDIAN_RECALL
+//2536,2000,0,0,0,2000,300000
+//==========================================
//===== Homunculus Skills ==================
//-- HLIF_HEAL
-8001,0,0,2000,0,0,0,0
+8001,0,2000,0,0,0,0
//-- HLIF_AVOID
-8002,0,0,35000,0,0,40000:35000:30000:25000:20000,0
+8002,0,35000,0,40000:35000:30000:25000:20000,0,0
//-- HLIF_CHANGE
-8004,0,0,600000:900000:1200000,0,0,60000:120000:180000,0
+8004,0,600000:900000:1200000,0,60000:120000:180000,0,0
//-- HAMI_CASTLE
-8005,0,0,0,0,0,0,60000:70000:80000:90000:129000
+8005,0,0,0,0,60000:70000:80000:90000:129000,0
//-- HAMI_DEFENCE
-8006,0,0,0,0,0,40000:35000:30000:25000:20000,0
+8006,0,0,0,40000:35000:30000:25000:20000,0,0
//-- HAMI_BLOODLUST
-8008,0,0,0,0,0,60000:180000:300000,300000:600000:900000
+8008,0,0,0,60000:180000:300000,300000:600000:900000,0
//-- HFLI_MOON
-8009,0,0,0,0,1000,0,0
+8009,0,0,1000,0,0,0
//-- HFLI_FLEET
-8010,0,0,0,0,0,60000:55000:50000:45000:40000,60000:70000:80000:90000:120000
+8010,0,0,0,60000:55000:50000:45000:40000,60000:70000:80000:90000:120000,0
//-- HFLI_SPEED
-8011,0,0,0,0,0,60000:55000:50000:45000:40000,60000:70000:80000:90000:120000
+8011,0,0,0,60000:55000:50000:45000:40000,60000:70000:80000:90000:120000,0
//-- HVAN_CAPRICE
-8013,0,0,1000:1200:1400:1600:1800,0,0,0,0
+8013,0,1000:1200:1400:1600:1800,0,0,0,0
//-- HVAN_CHAOTIC
-8014,0,0,1000,0,1000,0,0
+8014,0,1000,1000,0,0,0
//-- HVAN_EXPLOSION
-8016,0,0,0,0,1000,0,0
-//==========================================
-// global skill delays - homun skills
-//HAMI_CASTLE 1000:1000:1000:1000:1000
-//HAMI_DEFENCE 30000:30000:30000:30000:30000
-//HAMI_SKIN 1000:1000:1000:1000:1000
-//HAMI_BLOODLUST 300000:600000:900000
-//HFLI_MOON 2000:2000:2000:2000:2000
-//HFLI_FLEET 60000:75000:90000:105000:120000
-//HFLI_SPEED 60000:75000:90000:105000:120000
-//HFLI_SBR44 1000:1000:1000
-//HLIF_HEAL 20000:20000:20000:20000:20000
-//HLIF_AVOID 35000:35000:35000:35000:35000
-//HLIF_CHANGE 600000:900000:1200000
-//HVAN_CAPRICE 2000:2200:2400:2600:2800
-//HVAN_CHAOTIC 3000:3000:3000:3000:3000
-//HVAN_EXPLOSION 1000:1000:1000
+8016,0,0,1000,0,0,0
+//==========================================
+
+//===== Mutated Homunculus Skills ========== CHECK - Need Aftercast and Cooldown times for these skills [Rytech]
+//-- MH_SUMMON_LEGION
+8018,2000,0,0,20000:30000:40000:50000:60000,0,0
+//-- MH_NEEDLE_OF_PARALYZE = Whats the duration of the paralyze status? [Rytech]
+8019,1500,0,0,0,0,0
+//-- MH_POISON_MIST
+8020,1000:1200:1400:1600:1800,0,0,12000:14000:16000:18000:20000,0,0
+//-- MH_PAIN_KILLER
+8021,2000,0,0,20000:30000:40000:50000:60000,0,0
+//-- MH_LIGHT_OF_REGENE
+8022,1600:1400:1200:1000:800,0,0,360000:420000:480000:540000:600000,0,0
+//-- MH_OVERED_BOOST
+8023,1000,0,0,30000:45000:60000:75000:90000,0,0
+//-- MH_ERASER_CUTTER
+8024,1000:1500:2000:2500:3000,0,0,0,0,0
+//-- MH_XENO_SLASHER - CHECK Whats the duration of bleeding status? [Rytech]
+8025,2000:3000:4000:5000:6000,0,0,500,0,0
+//-- MH_SILENT_BREEZE
+8026,2000,0,0,9000:12000:15000:18000:21000,0,0
+//-- MH_STYLE_CHANGE
+//8027,0,0,0,0,0,0,0
+//-- MH_SONIC_CRAW
+//8028,0,0,0,0,0,0,0
+//-- MH_SILVERVEIN_RUSH
+//8029,0,0,0,0,0,0,0
+//-- MH_MIDNIGHT_FRENZY
+//8030,0,0,0,0,0,0,0
+//-- MH_STAHL_HORN - CHECK Stun duration is the same as regular stun? [Rytech]
+8031,1000,0,0,0,0,0
+//-- MH_GOLDENE_FERSE
+8032,1000:1200:1400:1600:1800,0,0,30000:45000:60000:75000:90000,0,0
+//-- MH_STEINWAND
+8033,1000,0,0,30000:45000:60000:75000:90000,0,0
+//-- MH_HEILIGE_STANGE
+8034,2000,0,0,0,0,0
+//-- MH_ANGRIFFS_MODUS
+8035,200:400:600:800:1000,0,0,30000:45000:60000:75000:90000,0,0
+//-- MH_TINDER_BREAKER
+//8036,0,0,0,0,0,0,0
+//-- MH_CBC
+//8037,0,0,0,0,0,0,0
+//-- MH_EQC
+//8038,0,0,0,0,0,0,0
+//-- MH_MAGMA_FLOW
+8039,4000,0,0,30000:45000:60000:75000:90000,0,0
+//-- MH_GRANITIC_ARMOR
+8040,6000:5500:5000:4500:4000,0,0,0,0,0
+//-- MH_LAVA_SLIDE
+8041,6000:5500:5000:4500:4000,0,0,12000:14000:16000:18000:20000,0,0
+//-- MH_PYROCLASTIC
+8042,6000:5500:5000:4500:4000,0,0,60000:90000:120000:150000:180000,0,0
+//-- MH_VOLCANIC_ASH
+8043,5000:4500:4000:3500:3000,0,0,12000:14000:16000:18000:20000,0,0
+//==========================================
//===== Mercenary Skills ===================
-//-- MS_BASH
-8201,0,0,800,0,0,0,0
//-- MS_MAGNUM
-8202,0,0,1500,0,0,2000,10000
-//-- MS_BOWLINGBASH
-8203,400,100,2500,0,0,0,0
-//-- MS_PARRYING
-8204,0,0,0,0,0,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000,0
-//-- MS_REFLECTSHIELD
-8205,0,0,0,0,0,300000,0
+8202,0,0,2000,2000,10000,0
+//-- KN_BOWLINGBASH
+8203,700,0,0,0,0,0
+//-- LK_PARRYING
+8204,0,0,0,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000,0,0
+//-- CR_REFLECTSHIELD
+8205,0,0,0,300000,0,0
//-- MS_BERSERK
-8206,0,0,0,0,0,300000,15000
+8206,0,0,0,300000,15000,0
//-- MA_DOUBLE
-8207,0,0,1000,0,100,0,0
+8207,0,0,0,100,0,0
//-- MA_SHOWER
-8208,0,0,1200,0,0,100,0
+8208,0,0,0,100,0,0
//-- MA_SKIDTRAP
-8209,0,0,0,0,0,300000:240000:180000:120000:60000,0
+8209,0,0,0,300000:240000:180000:120000:60000,0,0
//-- MA_LANDMINE
-8210,0,0,0,0,0,200000:160000:120000:80000:40000,5000
+8210,0,0,0,200000:160000:120000:80000:40000,5000,0
//-- MA_SANDMAN
-8211,0,0,0,0,0,150000:120000:90000:60000:30000,12000:14000:16000:18000:20000
+8211,0,0,0,150000:120000:90000:60000:30000,12000:14000:16000:18000:20000,0
//-- MA_FREEZINGTRAP
-8212,0,0,0,0,0,150000:120000:90000:60000:30000,3000:6000:9000:12000:15000
+8212,0,0,0,150000:120000:90000:60000:30000,3000:6000:9000:12000:15000,0
//-- MA_CHARGEARROW
-8214,750,750,1000,0,0,0,0
+8214,1500,0,0,0,0,0
//-- MA_SHARPSHOOTING
-8215,1000,1000,2500,0,0,0,0
-//-- ML_PIERCE
-8216,0,0,1000,0,0,0,0
+8215,2000,1500,0,0,0,0
//-- ML_BRANDISHSPEAR
-8217,350,350,1200,0,0,0,0
+8217,700,0,0,0,0,0
//-- ML_SPIRALPIERCE
-8218,150:250:350:450:500,150:250:350:450:500,2500,0,0,0,1000
+8218,300:500:700:900:1000,1200:1400:1600:1800:2000,0,0,1000,0
//-- ML_DEFENDER
-8219,0,1500,800,0,0,180000,0
+8219,0,800,0,180000,0,0
//-- ML_AUTOGUARD
-8220,0,0,0,0,0,300000,0
+8220,0,0,0,300000,0,0
//-- ML_DEVOTION
-8221,1500,0,0,0,0,0,30000:45000:60000:75000:90000
+8221,3000,0,0,0,30000:45000:60000:75000:90000,0
//-- MER_MAGNIFICAT
-8222,3200,800,2000,0,0,30000:45000:60000:75000:90000,0
+8222,4000,2000,0,30000:45000:60000:75000:90000,0,0
//-- MER_QUICKEN
-8223,0,0,0,0,0,30000:60000:90000:120000:150000:180000:210000:240000:270000:300000,0
+8223,0,0,0,30000:60000:90000:120000:150000:180000:210000:240000:270000:300000,0,0
//-- MER_SIGHT
-8224,0,0,0,0,0,10000,0
+8224,0,0,0,10000,0,0
//-- MER_CRASH
-8225,1000,0,2000,0,0,0,5000
+8225,1000,2000,0,0,5000,0
//-- MER_PROVOKE
-8232,0,0,0,0,0,30000,0
+8232,0,0,0,30000,0,0
//-- MER_DECAGI
-8234,800,200,1000,0,0,40000:50000:60000:70000:80000:90000:100000:110000:120000:130000,0
+8234,1000,1000,0,40000:50000:60000:70000:80000:90000:100000:110000:120000:130000,0,0
//-- MER_SCAPEGOAT
-8235,3000,0,0,0,0,0,0
+8235,3000,0,0,0,0,0
//-- MER_LEXDIVINA
-8236,0,0,3000,0,0,30000:35000:40000:45000:50000:60000:60000:60000:60000:60000,0
+8236,0,3000,0,30000:35000:40000:45000:50000:60000:60000:60000:60000:60000,0,0
//-- MER_KYRIE
-8238,2000,0,2000,0,0,120000,0
+8238,2000,2000,0,120000,0,0
//-- MER_BLESSING
-8239,0,0,0,0,0,60000:80000:100000:120000:140000:160000:180000:200000:220000:240000,0
+8239,0,0,0,60000:80000:100000:120000:140000:160000:180000:200000:220000:240000,0,0
//-- MER_INCAGI
-8240,1000,0,1000,0,0,60000:80000:100000:120000:140000:160000:180000:200000:220000:240000,0
+8240,1000,1000,0,60000:80000:100000:120000:140000:160000:180000:200000:220000:240000,0,0
+//==========================================
+
+//===== Elemental Skills =======================
+//-- EL_CIRCLE_OF_FIRE
+8401,0,0,0,-1,0,0
+//-- EL_FIRE_CLOAK
+8402,0,0,0,-1,0,0
+//-- EL_FIRE_MANTLE
+8403,0,0,0,15000,0,0
+//-- EL_WATER_SCREEN
+8404,0,0,0,-1,0,0
+//-- EL_WATER_DROP
+8405,0,0,0,-1,0,0
+//-- EL_WATER_BARRIER
+8406,1000,0,0,15000,0,0
+//-- EL_WIND_STEP
+8407,0,0,0,-1,0,0
+//-- EL_WIND_CURTAIN
+8408,0,0,0,-1,0,0
+//-- EL_ZEPHYR
+8409,0,0,0,15000,0,0
+//-- EL_STONE_SHIELD
+8411,0,0,0,-1,0,0
+//-- EL_POWER_OF_GAIA
+8412,0,0,0,15000,0,0
+//-- EL_PYROTECHNIC
+8413,0,0,0,-1,0,0
+//-- EL_HEATER
+8414,0,0,0,-1,0,0
+//-- EL_TROPIC
+8415,0,0,0,-1,0,0
+//-- EL_AQUAPLAY
+8416,0,0,0,-1,0,0
+//-- EL_COOLER
+8417,0,0,0,-1,0,0
+//-- EL_CHILLY_AIR
+8418,0,0,0,-1,0,0
+//-- EL_GUST
+8419,0,0,0,-1,0,0
+//-- EL_BLAST
+8420,0,0,0,-1,0,0
+//-- EL_WILD_STORM
+8421,0,0,0,-1,0,0
+//-- EL_PETROLOGY
+8422,0,0,0,-1,0,0
+//-- EL_CURSED_SOIL
+8423,0,0,0,-1,0,0
+//-- EL_UPHEAVAL
+8424,0,0,0,-1,0,0
+//-- EL_TIDAL_WEAPON
+8433,0,0,0,-1,0,0
+//-- EL_TYPOON_MIS
+8437,0,0,0,15000,0,0
+//-- EL_STONE_HAMMER
+8439,0,0,0,5000,0,0
+//-- EL_ROCK_CRUSHER
+8440,0,0,0,15000,0,0
+//-- EL_ROCK_CRUSHER_ATK
+8441,0,0,0,15000,0,0
//==========================================
//===== Guild Skills =======================
//-- GD_LEADERSHIP
-10006,0,0,0,0,0,300000,0
+10006,0,0,0,300000,0,0
//-- GD_GLORYWOUNDS
-10007,0,0,0,0,0,300000,0
+10007,0,0,0,300000,0,0
//-- GD_SOULCOLD
-10008,0,0,0,0,0,300000,0
+10008,0,0,0,300000,0,0
//-- GD_HAWKEYES
-10009,0,0,0,0,0,300000,0
+10009,0,0,0,300000,0,0
//-- GD_BATTLEORDER
-10010,0,0,0,0,0,60000,300000
+10010,0,0,0,60000,300000,0
//-- GD_REGENERATION
-10011,0,0,0,0,0,60000,300000
+10011,0,0,0,60000,300000,0
//-- GD_RESTORE
-10012,0,10000,0,0,0,0,300000
+10012,10000,0,0,0,300000,0
//-- GD_EMERGENCYCALL
-10013,0,5000,0,0,0,0,300000
+10013,5000,0,0,0,300000,0
//==========================================
-
-//-- ALL_TIMEIN
-//xxx,0,1000,0,0,0,0,0 \ No newline at end of file
diff --git a/db/skill_db.txt b/db/skill_db.txt
index 1986b4551..eba695928 100644
--- a/db/skill_db.txt
+++ b/db/skill_db.txt
@@ -124,7 +124,8 @@
79,9,8,2,6,0,0,10,1:2:3:4:5:6:7:8:9:10,yes,0,0,0,magic,0, PR_MAGNUS,Magnus Exorcismus
80,9,8,2,3,0x20,1:1:1:1:1:2:2:2:2:2:2,10,3:4:5:6:7:8:9:10:11:12:12,yes,0,0x80,5,magic,0, WZ_FIREPILLAR,Fire Pillar
81,0,6,4,3,0,3,10,1,yes,0,0,0,magic,5, WZ_SIGHTRASHER,Sightrasher
-//82,9,6,2,3,0,0,10,1,yes,0,0,0,magic,0, WZ_FIREIVY,Fire Ivy
+82,9,8,2,4,0,0,10,1:2:3:4:5:6:7:8:9:10,yes,0,0,0,magic,0, WZ_FIREIVY,Fire Ivy
+//82,9,6,2,3,0,0,10,1,yes,0,0x200,1,magic,0, WZ_FIREIVY,Fire Ivy
83,9,8,2,3,0,3:3:3:3:3:3:3:3:3:3:14,10,1:1:2:2:3:3:4:4:5:5:15,yes,0,0,0,magic,0, WZ_METEOR,Meteor Storm
84,9,8,1,4,0,0,10,3:4:5:6:7:8:9:10:11:12,yes,0,0,0,magic,2:3:3:4:4:5:5:6:6:7, WZ_JUPITEL,Jupitel Thunder
85,9,8,2,4,0,0,10,-10,yes,0,0,0,magic,0, WZ_VERMILION,Lord of Vermilion
@@ -634,14 +635,14 @@
689,0,6,4,0,0x3,-1,10,1,yes,0,0x2,0,magic,0, CASH_BLESSING,Party Blessing
690,0,6,4,0,0x3,-1,10,1,yes,0,0x2,0,magic,0, CASH_INCAGI,Party Increase AGI
691,0,6,4,0,0x3,-1,5,1,yes,0,0x2,0,magic,0, CASH_ASSUMPTIO,Party Assumptio
-//692,0,0,0,0,0,0,9,0,no,0,0x2,0,none,0, ALL_CATCRY,Cat Cry
-693,0,6,4,0,0x3,-1,1,1,yes,0,0x2,0,magic,0, ALL_PARTYFLEE,Party Flee
-//694,0,0,0,0,0,0,9,0,no,0,0x2,0,none,0, ALL_ANGEL_PROTECT,Angel's Protection
-//695,0,0,0,0,0,0,9,0,no,0,0x2,0,none,0, ALL_DREAM_SUMMERNIGHT,Summer Night Dream
-//696,0,0,0,0,0,0,9,0,no,0,0x2,0,none,0, NPC_CHANGEUNDEAD2,Change Undead
+//692,0,0,0,0,0,0,9,0,no,0,0x2,0,none,0, ALL_CATCRY,Cat Cry
+//693,0,0,0,0,0,0,9,0,no,0,0x2,0,none,0, ALL_PARTYFLEE,Party Flee
+//694,0,0,0,0,0,0,9,0,no,0,0x2,0,none,0, ALL_ANGEL_PROTECT,Angel's Protection
+//695,0,0,0,0,0,0,9,0,no,0,0x2,0,none,0, ALL_DREAM_SUMMERNIGHT,Summer Night Dream
+//696,0,0,0,0,0,0,9,0,no,0,0x2,0,none,0, NPC_CHANGEUNDEAD2,Change Undead
//697,9,6,4,0,0x1,0,1,1,yes,0,0x2,0,magic,0, ALL_REVERSEORCISH,Reverse Orcish
-698,0,6,4,0,0x01,0,1,1,no,0,0x2,0,none,0, ALL_WEWISH,Christmas Carol
-//699,0,0,0,0,0,0,9,0,no,0,0x2,0,none,0, ALL_SONKRAN,ALL_SONKRAN
+698,0,6,4,0,0x01,0,1,1,no,0,0x2,0,none,0, ALL_WEWISH,Christmas Carol
+//699,0,0,0,0,0,0,9,0,no,0,0x2,0,none,0, ALL_SONKRAN,ALL_SONKRAN
1001,9,6,1,-1,0,0,1,1,no,0,0x1,0,weapon,0, KN_CHARGEATK,Charge Attack
1002,0,6,4,0,0x1,0,1,0,no,0,0x1,0,weapon,2, CR_SHRINK,Shrink
@@ -663,296 +664,402 @@
1018,9,6,1,3,0x1,0,1,1,yes,0,0x1,0,magic,0, SA_ELEMENTFIRE,Elemental Change Fire
1019,9,6,1,4,0x1,0,1,1,yes,0,0x1,0,magic,0, SA_ELEMENTWIND,Elemental Change Wind
-// Third Job Skills
-2001,-1,6,4,0,0x1,0,5,1,yes,0,0,0,none,0, RK_ENCHANTBLADE,RK_ENCHANTBLADE
-2002,7:8:9:10:11,6,1,-1,0,0,5,1,yes,0,0,0,weapon,0, RK_SONICWAVE,RK_SONICWAVE
-2003,0,0,4,0,0x1,0,10,1,no,0,0,0,weapon,3, RK_DEATHBOUND,RK_DEATHBOUND
-2004,-1,8,1,-1,0,0,10,5,no,0,0,0,weapon,0, RK_HUNDREDSPEAR,RK_HUNDREDSPEAR
-2005,-1,6,2,4,0x2,2,5,1,no,0,0,0,weapon,3, RK_WINDCUTTER,RK_WINDCUTTER
-2006,0,6,4,-1,0x2,5,5,1,no,0,0,0,weapon,0, RK_IGNITIONBREAK,RK_IGNITIONBREAK
-2007,0,0,0,0,0,0,5,0,no,0,0,0,none,0, RK_DRAGONTRAINING,RK_DRAGONTRAINING
-2008,9,6,2,3,0xC0,1:1:1:2:2:2:3:3:4:4,10,1,no,0,0,0,misc,0, RK_DRAGONBREATH,RK_DRAGONBREATH
-2009,0,6,4,0,0x1,0,5,1,yes,0,0,0,weapon,0, RK_DRAGONHOWLING,RK_DRAGONHOWLING
-2010,0,0,0,0,0,0,10,0,no,0,0,0,none,0, RK_RUNEMASTERY,RK_RUNEMASTERY
-2011,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0, RK_MILLENNIUMSHIELD,RK_MILLENNIUMSHIELD
-2012,-1,6,4 ,-1,0,0,1,1,no,0,0,0,weapon,0, RK_CRUSHSTRIKE,RK_CRUSHSTRIKE
-2013,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0, RK_REFRESH,RK_REFRESH
-2014,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0, RK_GIANTGROWTH,RK_GIANTGROWTH
-2015,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0, RK_STONEHARDSKIN,RK_STONEHARDSKIN
-2016,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0, RK_VITALITYACTIVATION,RK_VITALITYACTIVATION
-2017,0,6,4,3,0x2,3,1,1,no,0,0,0,weapon,7, RK_STORMBLAST,RK_STORMBLAST
-2018,0,0,4,0,0x1,0,1,1,no,0,0,0,none,0, RK_FIGHTINGSPIRIT,RK_FIGHTINGSPIRIT
-2019,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0, RK_ABUNDANCE,RK_ABUNDANCE
-2020,5:6:7:8:9,6,16,-1,0,0,5,1,no,0,0,0,misc,0, RK_PHANTOMTHRUST,RK_PHANTOMTHRUST
-2021,9,6,1,0,0x1,0,5,1,yes,0,0,0,none,0, GC_VENOMIMPRESS,GC_VENOMIMPRESS
-2022,3,8,1,0,0,0,5,7,no,0,0,0,weapon,0, GC_CROSSIMPACT,GC_CROSSIMPACT
-2023,3:4:5:6:7,6,1,0,0,0,5,1,no,0,0,0,weapon,0, GC_DARKILLUSION,GC_DARKILLUSION
-2024,0,0,0,0,0,0,10,0,no,0,0,0,none,0, GC_RESEARCHNWPOISON,GC_RESEARCHNWPOISON
-2025,0,6,4,0,0x1,0,10,0,no,0,0,0,none,0, GC_CREATENEWPOISON,GC_CREATENEWPOISON
-2026,9,6,16,5,0x1,0,1,1,no,0,0,0,weapon,0, GC_ANTIDOTE,GC_ANTIDOTE
-2027,0,6,4,0,0x1,0,5,0,no,0,0,0,none,0, GC_POISONINGWEAPON,GC_POISONINGWEAPON
-2028,0,6,4,0,0x1,0,5,1,yes,0,0,0,none,0, GC_WEAPONBLOCKING,GC_WEAPONBLOCKING
-2029,0,6,4,0,0,0,5,1,no,0,0,0,weapon,0, GC_COUNTERSLASH,GC_COUNTERSLASH
-2030,-1,6,4,0,0x1,0,5,1,no,0,0,0,none,0, GC_WEAPONCRUSH,GC_WEAPONCRUSH
-2031,-1,6,1,5,0,0,5,1,no,0,0,0,weapon,0, GC_VENOMPRESSURE,GC_VENOMPRESSURE
-2032,5,6,2,5,0x1,0,5,1,no,0,0,0,weapon,0, GC_POISONSMOKE,GC_POISONSMOKE
-2033,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0, GC_CLOAKINGEXCEED,GC_CLOAKINGEXCEED
-2034,0,6,4,0,0,0,1,1,no,0,0,0,weapon,0, GC_PHANTOMMENACE,GC_PHANTOMMENACE
-2035,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0, GC_HALLUCINATIONWALK,GC_HALLUCINATIONWALK
-2036,0,6,4,0,0,0,5,1,no,0,0,0,weapon,0, GC_ROLLINGCUTTER,GC_ROLLINGCUTTER
-2037,7,8,1,0,0,0,5,1,no,0,0,0,weapon,0, GC_CROSSRIPPERSLASHER,GC_CROSSRIPPERSLASHER
-2038,11,8,1,6,0x2,2,5,-3,yes,0,0,0,magic,0, AB_JUDEX,Judex
+//****
+// RK Rune Knight
+//****
+2001,1,6,16,0,0x1,0,5,1,yes,0,0,0,none,0, RK_ENCHANTBLADE,Enchant Blade
+2002,7:8:9:10:11,6,1,-1,0,0,5,1,no,0,0,0,weapon,0, RK_SONICWAVE,Sonic Wave
+2003,0,6,4,0,0x1,0,10,1,no,0,0,0,weapon,0, RK_DEATHBOUND,Death Bound
+2004,1,8,1,-1,0,0,10,-5,no,0,0,0,weapon,0, RK_HUNDREDSPEAR,Hundred Spear
+2005,1,6,2,4,0x2,2,5,1,no,0,0,0,weapon,3, RK_WINDCUTTER,Wind Cutter
+2006,0,6,4,-1,0x2,5,5,1,no,0,0,0,weapon,0, RK_IGNITIONBREAK,Ignition Break
+2007,0,0,0,0,0,0,5,0,no,0,0,0,weapon,0, RK_DRAGONTRAINING,Dragon Training
+2008,9,6,2,3,0xC2,1:1:1:2:2:2:3:3:4:4,10,1,no,0,0,0,misc,0, RK_DRAGONBREATH,Dragon Breath //CHECK May have to change this back to a weapon type attack.
+2009,0,6,4,0,0x3,3:4:5:6:7,5,1,yes,0,0,0,weapon,0, RK_DRAGONHOWLING,Dragon Howling
+2010,0,0,0,0,0,0,10,0,no,0,0,0,none,0, RK_RUNEMASTERY,Rune Mastery
+2011,0,6,4,0,0x1,0,1,1,yes,0,0,0,none,0, RK_MILLENNIUMSHIELD,Millenium Shield
+2012,1,6,1,-1,0,0x8,1,1,yes,0,0,0,weapon,0, RK_CRUSHSTRIKE,Crush Strike
+2013,0,6,4,0,0x1,0,1,1,yes,0,0,0,none,0, RK_REFRESH,Refresh
+2014,0,6,4,0,0x1,0,1,1,yes,0,0,0,none,0, RK_GIANTGROWTH,Giant Growth
+2015,0,6,4,0,0x1,0,1,1,yes,0,0,0,none,0, RK_STONEHARDSKIN,Stone Hard Skin
+2016,0,6,4,0,0x1,0,1,1,yes,0,0,0,none,0, RK_VITALITYACTIVATION,Vitality Activation
+2017,0,6,4,-1,0x2,3,1,1,no,0,0,0,weapon,7, RK_STORMBLAST,Storm Blast
+2018,0,6,4,0,0x3,-1,1,1,yes,0,0,0,none,0, RK_FIGHTINGSPIRIT,Fighting Spirit //CHECK Is this splash needed?
+2019,9,6,4,6,0x1,0,1,1,yes,0,0,0,none,0, RK_ABUNDANCE,Abundance
+2020,5:6:7:8:9,6,1,-1,0,0,5,1,yes,0,0,0,weapon,0, RK_PHANTOMTHRUST,Phantom Thrust
+
+//****
+// WL Warlock
+//****
+2201,11,6,16,0,0,0,5,1,yes,0,0,0,magic,0, WL_WHITEIMPRISON,White Imprison
+2202,11,8,1,8,0x2,1:1:1:2:2,5,-2,yes,0,0,0,magic,0, WL_SOULEXPANSION,Soul Expansion
+2203,0,8,4,1,0x2,13,5,-3:-4:-5:-6:-7,yes,0,0,0,magic,0, WL_FROSTMISTY,Frosty Misty
+2204,0,8,4,1,0x2,13,5,-5,yes,0,0,0,magic,0, WL_JACKFROST,Jack Frost
+2205,11,6,1,0,0x1,0,5,1,yes,0,0,0,magic,0, WL_MARSHOFABYSS,Marsh of Abyss
+2206,0,6,4,0,0x1,0,5,1,yes,0,0,0,magic,0, WL_RECOGNIZEDSPELL,Recognized Spell
+2207,7,6,1,2,0x3,1:2:2:3:3,5,1,yes,0,0,0,magic,0, WL_SIENNAEXECRATE,Sienna Execrate
+2208,0,0,0,0,0,0,3,0,no,0,0,0,none,0, WL_RADIUS,Radius
+2209,0,6,4,0,0x3,9:10:11:12:13,5,1,yes,0,0,0,magic,0, WL_STASIS,Stasis
+2210,11,6,1,0,0,0,5,1,yes,0,0,0,magic,0, WL_DRAINLIFE,Drain Life
+2211,11,8,1,3,0x2,3,5,-7,yes,0,0,0,magic,3, WL_CRIMSONROCK,Crimson Rock
+2212,11,6,1,3,0,0,5,1,yes,0,0,0,magic,0, WL_HELLINFERNO,Hell Inferno
+2213,11,8,2,0,0x2,15,5,-20,yes,0,0,0,magic,2, WL_COMET,Comet //CHECK AoE in official code appears to be 15 x 15, yet casting circle is much bigger then that.
+2214,11,6,1,0,0,3,5,1,yes,0,0,0,magic,0, WL_CHAINLIGHTNING,Chain Lightning //CHECK Is the splash being used for the target search?
+2215,11,6,1,4,0,0,5,1,no,0,0,0,magic,0, WL_CHAINLIGHTNING_ATK,Chain Lightning Attack
+2216,3,8,2,2,0,0,5,-6:-7:-8:-9:-10,yes,0,0,0,magic,0, WL_EARTHSTRAIN,Earth Strain
+2217,11,6,1,0,0,0,5,1,yes,0,0,0,magic,0, WL_TETRAVORTEX,Tetra Vortex
+2218,11,6,1,3,0,0,5,1,no,0,0,0,magic,0, WL_TETRAVORTEX_FIRE,Tetra Vortex Fire
+2219,11,6,1,1,0,0,5,1,no,0,0,0,magic,0, WL_TETRAVORTEX_WATER,Tetra Vortex Water
+2220,11,6,1,4,0,0,5,1,no,0,0,0,magic,0, WL_TETRAVORTEX_WIND,Tetra Vortex Wind
+2221,11,6,1,2,0,0,5,1,no,0,0,0,magic,0, WL_TETRAVORTEX_GROUND,Tetra Vortex Earth
+2222,0,6,4,3,0x1,0,5,1,yes,0,0,0,magic,0, WL_SUMMONFB,Summon Fire Ball
+2223,0,6,4,4,0x1,0,5,1,yes,0,0,0,magic,0, WL_SUMMONBL,Summon Lightning Ball
+2224,0,6,4,1,0x1,0,5,1,yes,0,0,0,magic,0, WL_SUMMONWB,Summon Water Ball
+2225,11,6,1,3,0,0,5,1,no,0,0,1,magic,0, WL_SUMMON_ATK_FIRE,Summon Attack Fire //CHECK Summon attack ID's dont appear to have a range.
+2226,11,6,1,4,0,0,5,1,no,0,0,1,magic,0, WL_SUMMON_ATK_WIND,Summon Attack Wind
+2227,11,6,1,1,0,0,5,1,no,0,0,1,magic,0, WL_SUMMON_ATK_WATER,Summon Attack Water
+2228,11,6,1,2,0,0,5,1,no,0,0,1,magic,0, WL_SUMMON_ATK_GROUND,Summon Attack Earth
+2229,0,6,4,2,0x1,0,5,1,yes,0,0,0,magic,0, WL_SUMMONSTONE,Summon Stone
+2230,11,8,1,0,0,0,2,1,yes,0,0,0,magic,0, WL_RELEASE,Release //CHECK Should it be left to do multi hit or single hit?
+2231,0,6,4,0,0x1,0,1,1,yes,0,0,0,magic,0, WL_READING_SB,Reading Spellbook
+2232,0,0,0,0,0,0,5,0,no,0,0,0,none,0, WL_FREEZE_SP,Freeze Spell
+
+
+//****
+// GC Guillotine Cross
+//****
+
+//****
+// AB Arch Bishop
+//****
+2038,11,8,1,6,0x2,3,5,-3,yes,0,0,0,magic,0, AB_JUDEX,Judex
2039,0,6,4,0,0x1,0,1,1,yes,0,0,0,magic,0, AB_ANCILLA,Ancilla
2040,11,8,1,6,0,0,10,-10,yes,0,0,0,magic,0, AB_ADORAMUS,Adoramus
-2041,0,6,4,0,0x3,3:7:15,3,1,yes,0,0,0,magic,0, AB_CLEMENTIA,Clementia
-2042,0,6,4,0,0x3,3:7:15,3,1,yes,0,0,0,magic,0, AB_CANTO,Canto Candidus
-2043,0,6,4,0,0x1,3:7:15,3,1,yes,0,0,0,magic,0, AB_CHEAL,Coluceo Heal
-2044,11,6,2,0,0x1,5,5,1,yes,0,0,0,magic,1, AB_EPICLESIS,Epiclesis
-2045,0,6,4,0,0x3,15,10,1,yes,0,0,0,magic,0, AB_PRAEFATIO,Praefatio
+2041,0,6,4,6,0x3,3:7:15,3,1,yes,0,0,0,magic,0, AB_CLEMENTIA,Crementia
+2042,0,6,4,6,0x3,3:7:15,3,1,yes,0,0,0,magic,0, AB_CANTO,Canto Candidus
+2043,0,6,4,6,0x3,3:7:15,3,1,yes,0,0,0,magic,0, AB_CHEAL,Coluceo Heal
+2044,11,6,2,6,0x1,0,5,1,yes,0,0,1,magic,0, AB_EPICLESIS,Epiclesis
+2045,0,6,4,6,0x3,15,10,1,yes,0,0,0,magic,0, AB_PRAEFATIO,Praefatio
2046,0,6,4,6,0x3,15,10,1,yes,0,0,0,magic,0, AB_ORATIO,Oratio
-2047,0,6,4,0,0x3,15,4,1,yes,0,0,0,magic,0, AB_LAUDAAGNUS,Lauda Agnus
-2048,0,6,4,0,0x3,15,4,1,yes,0,0,0,magic,0, AB_LAUDARAMUS,Lauda Ramus
+2047,0,6,4,6,0x3,15,4,1,yes,0,0,0,magic,0, AB_LAUDAAGNUS,Lauda Agnus
+2048,0,6,4,6,0x3,15,4,1,yes,0,0,0,magic,0, AB_LAUDARAMUS,Lauda Ramus
2049,0,0,0,0,0,0,10,0,no,0,0,0,none,0, AB_EUCHARISTICA,Eucharistica
2050,11,6,16,6,0x1,0,1,1,yes,0,0,0,magic,0, AB_RENOVATIO,Renovatio
-2051,11,6,16,6,0x1,0,5,1,yes,0,0,0,magic,0, AB_HIGHNESSHEAL,High Heal
-2052,11,6,1,0,0x1,0,5,1,yes,0,0x600,0,magic,0, AB_CLEARANCE,Clearance
-2053,11,6,16,0,0x1,0,5,0,yes,0,0x1000,0,none,0, AB_EXPIATIO,Exipatio
-2054,11,6,4,0,0x1,0,10,1,yes,0,0,0,none,0, AB_DUPLELIGHT,Duple Light
-2055,11,6,1,0,0,0,10,1,yes,0,0,0,weapon,0, AB_DUPLELIGHT_MELEE,Duple Light (Melee)
-2056,11,6,1,0,0,0,10,1,yes,0,0,0,magic,0, AB_DUPLELIGHT_MAGIC,Duple Light (Magic)
-2057,0 ,4,4,0,0x3,4:5:6:7:8,5,1,yes,0,0,0,none,0, AB_SILENTIUM,Silentium
-2201,11,6,16,8,0x1,0,5,1,yes,0,0,0,magic,0, WL_WHITEIMPRISON,WL_WHITEIMPRISON
-2202,11,8,1,8,0,0,5,2,yes,0,0,0,magic,0, WL_SOULEXPANSION,WL_SOULEXPANSION
-2203,11,8,4,1,0x6,0,5,3:4:5:6:7,yes,0,0,0,magic,0, WL_FROSTMISTY,WL_FROSTMISTY
-2204,11,8,4,1,0x6,0,5,5,yes,0,0,0,magic,0, WL_JACKFROST,WL_JACKFROST
-2205,11,6,1,2,0x1,0,5,1,yes,0,0,0,magic,0, WL_MARSHOFABYSS,WL_MARSHOFABYSS
-2206,11,6,4,0,0x1,0,5,1,yes,0,0,0,magic,0, WL_RECOGNIZEDSPELL,WL_RECOGNIZEDSPELL
-2207,7,6,1,2,0x1,0,5,1,yes,0,0,0,magic,0, WL_SIENNAEXECRATE,WL_SIENNAEXECRATE
-2208,0,0,0,0,0,0,3,0,no,0,0,0,none,0, WL_RADIUS,WL_RADIUS
-2209,11,6,4,0,5,0,5,1,yes,0,0,0,magic,0, WL_STASIS,WL_STASIS
-2210,11,6,1,0,0,0,5,1,yes,0,0,0,magic,0, WL_DRAINLIFE,WL_DRAINLIFE
-2211,11,8,1,3,6,0,5,7,yes,0,0,0,magic,3, WL_CRIMSONROCK,WL_CRIMSONROCK
-2212,11,6,1,3,0,0,5,1,yes,0,0,0,magic,0, WL_HELLINFERNO,WL_HELLINFERNO
-2213,11,8,2,0,0,0,5,20,yes,0,0,0,magic,0, WL_COMET,WL_COMET
-2214,11,6,1,4,0,0,5,1,yes,0,0,0,magic,0, WL_CHAINLIGHTNING,WL_CHAINLIGHTNING
-2215,11,6,1,4,0x6,0,5,1,yes,0,0,0,magic,0, WL_CHAINLIGHTNING_ATK,WL_CHAINLIGHTNING_ATK
-2216,3,8,2,2,0x6,0,5,6:7:8:9:10,yes,0,0,0,magic,0, WL_EARTHSTRAIN,WL_EARTHSTRAIN
-2217,11,6,1,0,0x1,0,5,1,yes,0,0,0,magic,0, WL_TETRAVORTEX,WL_TETRAVORTEX
-2218,9,6,1,3,0,0,5,1,yes,0,0,0,magic,0, WL_TETRAVORTEX_FIRE,WL_TETRAVORTEX_FIRE
-2219,9,6,1,1,0,0,5,1,yes,0,0,0,magic,0, WL_TETRAVORTEX_WATER,WL_TETRAVORTEX_WATER
-2220,9,6,1,4,0,0,5,1,yes,0,0,0,magic,0, WL_TETRAVORTEX_WIND,WL_TETRAVORTEX_WIND
-2221,9,6,1,2,0,0,5,1,yes,0,0,0,magic,0, WL_TETRAVORTEX_GROUND,WL_TETRAVORTEX_GROUND
-2222,0,6,4,3,0x1,0,5,1,yes,0,0,0,magic,0, WL_SUMMONFB,WL_SUMMONFB
-2223,0,6,4,4,0x1,0,5,1,yes,0,0,0,magic,0, WL_SUMMONBL,WL_SUMMONBL
-2224,0,6,4,1,0x1,0,5,1,yes,0,0,0,magic,0, WL_SUMMONWB,WL_SUMMONWB
-2225,9,6,1,3,0,0,5,1,yes,0,0,0,magic,0, WL_SUMMON_ATK_FIRE,WL_SUMMON_ATK_FIRE
-2226,9,6,1,4,0,0,5,1,yes,0,0,0,magic,0, WL_SUMMON_ATK_WIND,WL_SUMMON_ATK_WIND
-2227,9,6,1,1,0,0,5,1,yes,0,0,0,magic,0, WL_SUMMON_ATK_WATER,WL_SUMMON_ATK_WATER
-2228,9,6,1,2,0,0,5,1,yes,0,0,0,magic,0, WL_SUMMON_ATK_GROUND,WL_SUMMON_ATK_GROUND
-2229,0,6,4,2,0x1,0,5,1,yes,0,0,0,magic,0, WL_SUMMONSTONE,WL_SUMMONSTONE
-2230,11,6,1,0,0x1,0,2,1,yes,0,0,0,magic,0, WL_RELEASE,WL_RELEASE
-2231,0,6,4,0,0x1,0,1,1,yes,0,0,0,magic,0, WL_READING_SB,WL_READING_SB
-2232,0,0,0,0,0,0,5,0,no,0,0,0,none,0, WL_FREEZE_SP,WL_FREEZE_SP
-2233,9,8,1,0,0,0,10,3,no,0,0,0,weapon,0, RA_ARROWSTORM,RA_ARROWSTORM
-2234,0,6,4,0,0x1,0,5,1,no,0,0,0,weapon,0, RA_FEARBREEZE,RA_FEARBREEZE
-2235,0,0,0,0,0,0,10,0,no,0,0,0,none,0, RA_RANGERMAIN,RA_RANGERMAIN
-2236,9,8,1,0,0,0,10,1,no,0,0,0,weapon,0, RA_AIMEDBOLT,RA_AIMEDBOLT
-2237,9,6,2,0,0x1,0,1,1,no,0,0,0,weapon,0, RA_DETONATOR,RA_DETONATOR
-2238,3,6,2,0,0x1,0,5,1,no,0,0,3,misc,0, RA_ELECTRICSHOCKER,RA_ELECTRICSHOCKER
-2239,3,6,2,0,0x1,0,5,1,no,0,0,3,misc,0, RA_CLUSTERBOMB,RA_CLUSTERBOMB
-2240,0,6,4,0,0x1,0,1,1,no,0,0,0,misc,0, RA_WUGMASTERY,RA_WUGMASTERY
-2241,0,6,4,0,0x1,0,3,1,no,0,0,0,misc,0, RA_WUGRIDER,RA_WUGRIDER
-2242,9,6,4,0,0x1,0,1,1,no,0,0,0,weapon,0, RA_WUGDASH,RA_WUGDASH
-2243,9,6,1,0,0,0,5,1,no,0,0,0,weapon,0, RA_WUGSTRIKE,RA_WUGSTRIKE
-2244,9,6,1,0,0,0,5,1,no,0,0,0,weapon,0, RA_WUGBITE,RA_WUGBITE
-2245,0,0,0,0,0,0,10,0,no,0,0,0,none,0, RA_TOOTHOFWUG,RA_TOOTHOFWUG
-2246,0,6,4,0,0,0,5,1,no,0,0,0,weapon,0, RA_SENSITIVEKEEN,RA_SENSITIVEKEEN
-2247,0,6,4,0,0x1,0,5,1,no,0,0,0,weapon,0, RA_CAMOUFLAGE,RA_CAMOUFLAGE
-2248,0,0,0,0,0,0,5,0,no,0,0,0,none,0, RA_RESEARCHTRAP,RA_RESEARCHTRAP
-2249,3,6,2,0,0x1,0,1,1,no,0,0,1,misc,0, RA_MAGENTATRAP,RA_MAGENTATRAP
-2250,3,6,2,0,0x1,0,1,1,no,0,0,1,misc,0, RA_COBALTTRAP,RA_COBALTTRAP
-2251,3,6,2,0,0x1,0,1,1,no,0,0,1,misc,0, RA_MAIZETRAP,RA_MAIZETRAP
-2252,3,6,2,0,0x1,0,1,1,no,0,0,1,misc,0, RA_VERDURETRAP,RA_VERDURETRAP
-2253,3,6,2,0,0x1,0,5,1,no,0,0,1,misc,0, RA_FIRINGTRAP,RA_FIRINGTRAP
-2254,3,6,2,0,0x1,0,5,1,no,0,0,1,misc,0, RA_ICEBOUNDTRAP,RA_ICEBOUNDTRAP
-2255,0,0,0,0,0,0,5,0,no,0,0,0,none,0, NC_MADOLICENCE,NC_MADOLICENCE
-2256,11,6,1,0,4,0,5,1,no,0,0,0,weapon,0, NC_BOOSTKNUCKLE,NC_BOOSTKNUCKLE
-2257,3,6,1,0,0,0,3,1,no,0,0,0,weapon,0, NC_PILEBUNKER,NC_PILEBUNKER
-2258,13,8,1,0,0x6,0,3,5,no,0,0,0,weapon,0, NC_VULCANARM,NC_VULCANARM
-2259,5,6,1,3,0x6,0,3,1,no,0,0,0,weapon,0, NC_FLAMELAUNCHER,NC_FLAMELAUNCHER
-2260,7,6,2,1,0x6,0,3,1,no,0,0,0,weapon,0, NC_COLDSLOWER,NC_COLDSLOWER
-2261,7,6,2,0,0x6,0,3,1,no,0,0,0,weapon,0, NC_ARMSCANNON,NC_ARMSCANNON
-2262,0,6,4,0,0x1,0,3,1,no,0,0,0,weapon,0, NC_ACCELERATION,NC_ACCELERATION
-2263,0,6,4,0,0x1,0,1,1,no,0,0,0,weapon,0, NC_HOVERING,NC_HOVERING
-2264,0,6,4,0,0x1,0,1,1,no,0,0,0,weapon,7, NC_F_SIDESLIDE,NC_F_SIDESLIDE
-2265,0,6,4,0,0x1,0,1,1,no,0,0,0,weapon,7, NC_B_SIDESLIDE,NC_B_SIDESLIDE
-2266,0,0,0,0,0,0,4,0,no,0,0,0,none,0, NC_MAINFRAME,NC_MAINFRAME
-2267,0,6,4,0,0,0,3,1,no,0,0,0,weapon,0, NC_SELFDESTRUCTION,NC_SELFDESTRUCTION
-2268,0,6,4,0,0x1,0,4,1,no,0,0,0,weapon,0, NC_SHAPESHIFT,NC_SHAPESHIFT
-2269,0,6,4,0,0x1,0,1,1,no,0,0,0,weapon,0, NC_EMERGENCYCOOL,NC_EMERGENCYCOOL
-2270,0,6,4,0,0x1,0,1,1,no,0,0,0,weapon,0, NC_INFRAREDSCAN,NC_INFRAREDSCAN
-2271,9,6,1,0,0x1,0,3,1,no,0,0,0,weapon,0, NC_ANALYZE,NC_ANALYZE
-2272,0,6,4,0,0x1,0,3,1,no,0,0,0,weapon,0, NC_MAGNETICFIELD,NC_MAGNETICFIELD
-2273,0,6,4,0,0x1,0,3,1,no,0,0,0,weapon,0, NC_NEUTRALBARRIER,NC_NEUTRALBARRIER
-2274,0,6,4,0,0x1,0,3,1,no,0,0,0,weapon,0, NC_STEALTHFIELD,NC_STEALTHFIELD
-2275,5,6,16,0,0x1,0,5,1,no,0,0,0,weapon,0, NC_REPAIR,NC_REPAIR
-2276,0,0,0,0,0,0,10,0,no,0,0,0,none,0, NC_TRAININGAXE,NC_TRAININGAXE
-2277,0,0,0,0,0,0,5,0,no,0,0,0,none,0, NC_RESEARCHFE,NC_RESEARCHFE
-2278,4:5:6:7:8,6,1,0,0,0,5,1,no,0,0,0,weapon,2:3:4:5:6, NC_AXEBOOMERANG,NC_AXEBOOMERANG
-2279,-1,6,1,0,0,0,5,1,no,0,0,0,weapon,0, NC_POWERSWING,NC_POWERSWING
-2280,0,8,4,0,0,0,5,5,no,0,0,0,weapon,0, NC_AXETORNADO,NC_AXETORNADO
-2281,2,6,2,0,0x1,0,5,1,no,0,0,2,weapon,0, NC_SILVERSNIPER,NC_SILVERSNIPER
-2282,2,6,2,0,0x1,0,5,1,no,0,0,2,weapon,0, NC_MAGICDECOY,NC_MAGICDECOY
-2283,2,6,1,0,0,0,1,1,no,0,0,0,weapon,0, NC_DISJOINT,NC_DISJOINT
-2284,-1,6,1,0,0,0,5,1,no,0,0,0,weapon,0, SC_FATALMENACE,SC_FATALMENACE
-2285,0,6,4,0,0x1,0,10,0,yes,0,0,0,magic,0, SC_REPRODUCE,SC_REPRODUCE
-2286,0,6,4,0,0x1,0,10,1,yes,0,0,0,magic,0, SC_AUTOSHADOWSPELL,SC_AUTOSHADOWSPELL
-2287,5,6,16,0,0x1,0,5,1,yes,0,0x200,0,magic,0, SC_SHADOWFORM,SC_SHADOWFORM
-2288,7:7:7:9:9:9:9:11:11:11,8,1,0,0,0,10,3,no,0,0,0,weapon,0, SC_TRIANGLESHOT,SC_TRIANGLESHOT
-2289,1,6,4,0,0x1,0,5,1,yes,0,0,0,weapon,0, SC_BODYPAINT,SC_BODYPAINT
-2290,1,6,4,0,0x1,0,5,1,yes,0,0,0,weapon,0, SC_INVISIBILITY,SC_INVISIBILITY
-2291,1,6,4,0,0x1,0,5,1,yes,0,0,0,weapon,0, SC_DEADLYINFECT,SC_DEADLYINFECT
-2292,3,6,1,0,0x1,0,3,1,yes,0,0,0,weapon,0, SC_ENERVATION,SC_ENERVATION
-2293,3,6,1,0,0x1,0,3,1,yes,0,0,0,weapon,0, SC_GROOMY,SC_GROOMY
-2294,3,6,1,0,0x1,0,3,1,yes,0,0,0,weapon,0, SC_IGNORANCE,SC_IGNORANCE
-2295,3,6,1,0,0x1,0,3,1,yes,0,0,0,weapon,0, SC_LAZINESS,SC_LAZINESS
-2296,3,6,1,0,0x1,0,3,1,yes,0,0,0,weapon,0, SC_UNLUCKY,SC_UNLUCKY
-2297,3,6,1,0,0x1,0,3,1,yes,0,0,0,weapon,0, SC_WEAKNESS,SC_WEAKNESS
-2298,3,6,1,0,0x1,0,5,1,yes,0,0,0,weapon,0, SC_STRIPACCESSARY,SC_STRIPACCESSARY
-2299,7,6,2,0,0x1,0,3,1,yes,0,0,3,weapon,0, SC_MANHOLE,SC_MANHOLE
-2300,7,6,2,0,0x1,0,3,1,yes,0,0,0,weapon,0, SC_DIMENSIONDOOR,SC_DIMENSIONDOOR
-2301,7,6,2,0,0x1,0,3,1,yes,0,0,0,weapon,0, SC_CHAOSPANIC,SC_CHAOSPANIC
-2302,7,6,2,0,0x1,0,3,1,yes,0,0,1,weapon,0, SC_MAELSTROM,SC_MAELSTROM
-2303,7,6,2,0,0x1,0,3,1,yes,0,0,0,weapon,0, SC_BLOODYLUST,SC_BLOODYLUST
-2304,1,6,4,0,0x1,0,3,1,yes,0,0,0,weapon,6, SC_FEINTBOMB,SC_FEINTBOMB
-2307,11,6,1,0,0,0,5,1,yes,0,0,0,weapon,0, LG_CANNONSPEAR,LG_CANNONSPEAR
-2308,7,6,1,0,0,0,10,1,yes,0,0,0,weapon,0, LG_BANISHINGPOINT,LG_BANISHINGPOINT
-2309,0,6,4,0,0x1,0,3,1,yes,0,0,0,weapon,0, LG_TRAMPLE,LG_TRAMPLE
-2310,2,6,1,0,0x2,0,5,1,yes,0,0,0,weapon,0, LG_SHIELDPRESS,LG_SHIELDPRESS
-2311,0,6,4,0,0x1,0,5,1,yes,0,0,0,weapon,0, LG_REFLECTDAMAGE,LG_REFLECTDAMAGE
-2312,5,6,1,0,0,0,5,1,yes,0,0,0,weapon,0, LG_PINPOINTATTACK,LG_PINPOINTATTACK
-2313,0,6,4,0,0x1,0,5,1,yes,0,0,0,weapon,0, LG_FORCEOFVANGUARD,LG_FORCEOFVANGUARD
-2314,1,6,1,0,0,0,1,1,yes,0,0,0,weapon,0, LG_RAGEBURST,LG_RAGEBURST
-2315,0,6,4,0,0x1,0,3,1,yes,0,0,0,magic,0, LG_SHIELDSPELL,LG_SHIELDSPELL
-2316,0,6,4,0,0x1,0,5,1,yes,0,0,0,magic,0, LG_EXEEDBREAK,LG_EXEEDBREAK
-2317,1,6,2,0,0,0,5,1,yes,0,0,0,weapon,0, LG_OVERBRAND,LG_OVERBRAND
-2318,0,6,4,0,0x1,0,5,1,yes,0,0,0,magic,0, LG_PRESTIGE,LG_PRESTIGE
-2319,0,6,4,0,0x1,0,5,1,yes,0,0,0,magic,0, LG_BANDING,LG_BANDING
-2320,0,6,4,0,0,0,5,1,yes,0,0,0,weapon,0, LG_MOONSLASHER,LG_MOONSLASHER
-2321,1,8,2,6,0,0,5,7,yes,0,0,0,magic,0, LG_RAYOFGENESIS,LG_RAYOFGENESIS
-2322,9,6,16,0,0x1,0,5,1,yes,0,0xC00,0,magic,0, LG_PIETY,LG_PIETY
-2323,0,8,4,2,0,0,5,5,yes,0,0,0,weapon,0, LG_EARTHDRIVE,LG_EARTHDRIVE
-2324,3,8,1,0,0,0,5,3,yes,0,0,0,weapon,0, LG_HESPERUSLIT,LG_HESPERUSLIT
-2325,0,6,4,0,0x1,0,5,1,yes,0,0,0,magic,0, LG_INSPIRATION,LG_INSPIRATION
-2326,-1,8,1,0,0,0,10,2,yes,0,0,0,weapon,0, SR_DRAGONCOMBO,SR_DRAGONCOMBO
-2327,0,8,4,0,0,0,5,3,yes,0,0,0,weapon,3, SR_SKYNETBLOW,SR_SKYNETBLOW
-2328,0,6,4,0,0,0,5,1,yes,0,0,0,weapon,0, SR_EARTHSHAKER,SR_EARTHSHAKER
-2329,-1,8,4,0,0,0,5,2,yes,0,0,0,weapon,0, SR_FALLENEMPIRE,SR_FALLENEMPIRE
-2330,1,6,4,0,0,0,10,1,yes,0,0,0,weapon,0, SR_TIGERCANNON,SR_TIGERCANNON
-//2331,3,8,1,0,0,0,10,7,yes,0,0,0,weapon,0, SR_HELLGATE,SR_HELLGATE
-2332,0,6,4,0,0,0,5,1,yes,0,0,0,weapon,0, SR_RAMPAGEBLASTER,SR_RAMPAGEBLASTER
-2333,0,6,4,0,0x1,0,5,1,yes,0,0,0,weapon,0, SR_CRESCENTELBOW,SR_CRESCENTELBOW
-2334,0,6,4,0,0x1,0,5,1,yes,0,0,0,weapon,0, SR_CURSEDCIRCLE,SR_CURSEDCIRCLE
-2335,0,6,4,0,0x1,0,5,1,yes,0,0,0,weapon,0, SR_LIGHTNINGWALK,SR_LIGHTNINGWALK
-2336,7:8:9:10:11:12,6,1,0,0x2,0,5,1,yes,0,0,0,weapon,2:3:4:5:6, SR_KNUCKLEARROW,SR_KNUCKLEARROW
-2337,0,6,4,0,0,0,5,1,yes,0,0,0,weapon,0, SR_WINDMILL,SR_WINDMILL
-2338,0,6,4,0,0x1,0,10,1,yes,0,0,0,weapon,0, SR_RAISINGDRAGON,SR_RAISINGDRAGON
-//2339,0,6,4,0,0x1,0,5,1,yes,0,0,0,magic,0, SR_GENTLETOUCH,SR_GENTLETOUCH
-2340,0,6,4,0,0x1,0,1,1,yes,0,0,0,weapon,0, SR_ASSIMILATEPOWER,SR_ASSIMILATEPOWER
-2341,3,6,16,0,0x1,0,1,1,yes,0,0,0,weapon,0, SR_POWERVELOCITY,SR_POWERVELOCITY
-2342,0,6,1,0,0x2,0,5,1,yes,0,0,0,weapon,7, SR_CRESCENTELBOW_AUTOSPELL,SR_CRESCENTELBOW_AUTOSPELL
-2343,1:2:3:3:4:4:5:5:6:7,8,4,0,0,0,10,7,yes,0,0,0,weapon,0, SR_GATEOFHELL,SR_GATEOFHELL
-2344,2,6,1,0,0,0,5,1,yes,0,0,0,weapon,0, SR_GENTLETOUCH_QUIET,SR_GENTLETOUCH_QUIET
-2345,2,6,16,0,0x1,0,5,1,yes,0,0,0,magic,0, SR_GENTLETOUCH_CURE,SR_GENTLETOUCH_CURE
-2346,0,6,4,0,0x1,0,5,1,yes,0,0,0,magic,0, SR_GENTLETOUCH_ENERGYGAIN,SR_GENTLETOUCH_ENERGYGAIN
-2347,2,6,16,0,0x1,0,5,1,yes,0,0,0,magic,0, SR_GENTLETOUCH_CHANGE,SR_GENTLETOUCH_CHANGE
-2348,2,6,16,0,0x1,0,5,1,yes,0,0,0,magic,0, SR_GENTLETOUCH_REVITALIZE,SR_GENTLETOUCH_REVITALIZE
-2350,1,6,4,0,0x1,0,5,1,yes,0,0,0,misc,0, WA_SWING_DANCE,WA_SWING_DANCE
-2351,1,6,4,0,0x1,0,5,1,yes,0,0,0,misc,0, WA_SYMPHONY_OF_LOVE,WA_SYMPHONY_OF_LOVE
-2352,1,6,4,0,0x1,0,5,1,yes,0,0,0,misc,0, WA_MOONLIT_SERENADE,WA_MOONLIT_SERENADE
-2381,1,6,4,0,0x1,0,5,1,yes,0,0,0,misc,0, MI_RUSH_WINDMILL,MI_RUSH_WINDMILL
-2382,1,6,4,0,0x1,0,5,1,yes,0,0,0,misc,0, MI_ECHOSONG,MI_ECHOSONG
-2383,9,6,16,0,0x1,0,5,1,yes,0,0,0,misc,0, MI_HARMONIZE,MI_HARMONIZE
-2412,0,0,0,0,0,0,10,0,no,0,0,0,none,0, WM_LESSON,WM_LESSON
-2413,9,8,1,0,0,0,5,2:2:3:3:4,yes,0,0,0,magic,0, WM_METALICSOUND,WM_METALICSOUND
-2414,9,6,2,0,0,0,5,1,yes,0,0,3,misc,0, WM_REVERBERATION,WM_REVERBERATION
-2415,1,6,1,0,0,0,5,1,yes,0,0,0,weapon,0, WM_REVERBERATION_MELEE,WM_REVERBERATION_MELEE
-2416,1,6,1,0,0,0,5,1,yes,0,0,0,magic,0, WM_REVERBERATION_MAGIC,WM_REVERBERATION_MAGIC
-2417,11,6,2,0,0,0,5,1,yes,0,0,0,misc,0, WM_DOMINION_IMPULSE,WM_DOMINION_IMPULSE
-2418,9,6,2,0,0,0,5,1,yes,0,0,0,weapon,0, WM_SEVERE_RAINSTORM,WM_SEVERE_RAINSTORM
-2419,9,6,2,0,0,0,5,1,yes,0,0,5,misc,0, WM_POEMOFNETHERWORLD,WM_POEMOFNETHERWORLD
-2420,1,6,4,0,0x1,0,5,1,yes,0,0,0,misc,0, WM_VOICEOFSIREN,WM_VOICEOFSIREN
-2421,7,6,16,0,0x1,0,5,1,yes,0,0,0,misc,0, WM_DEADHILLHERE,WM_DEADHILLHERE
-2422,7,6,2,0,0x1,0,5,1,yes,0,0,0,misc,0, WM_LULLABY_DEEPSLEEP,WM_LULLABY_DEEPSLEEP
-2423,1,6,4,0,0x1,0,5,1,yes,0,0,0,misc,0, WM_SIRCLEOFNATURE,WM_SIRCLEOFNATURE
-2424,9,6,4,0,0x1,0,5,1,yes,0,0,0,misc,0, WM_RANDOMIZESPELL,WM_RANDOMIZESPELL
-2425,9,6,16,0,0x1,0,5,1,yes,0,0,0,misc,0, WM_GLOOMYDAY,WM_GLOOMYDAY
-2426,9,6,2,0,0x1,0,5,1,yes,0,0,0,weapon,0, WM_GREAT_ECHO,WM_GREAT_ECHO
-2427,1,6,4,0,0x1,0,5,1,yes,0,0,0,misc,0, WM_SONG_OF_MANA,WM_SONG_OF_MANA
-2428,1,6,4,0,0x1,0,5,1,yes,0,0,0,misc,0, WM_DANCE_WITH_WUG,WM_DANCE_WITH_WUG
-2429,9,6,1,0,0,0,5,1,yes,0,0,0,weapon,0, WM_SOUND_OF_DESTRUCTION,WM_SOUND_OF_DESTRUCTION
-2430,1,6,4,0,0x1,0,5,1,yes,0,0,0,misc,0, WM_SATURDAY_NIGHT_FEVER,WM_SATURDAY_NIGHT_FEVER
-2431,1,6,4,0,0x1,0,5,1,yes,0,0,0,misc,0, WM_LERADS_DEW,WM_LERADS_DEW
-2432,1,6,4,0,0x1,0,5,1,yes,0,0,0,misc,0, WM_MELODYOFSINK,WM_MELODYOFSINK
-2433,1,6,4,0,0x1,0,5,1,yes,0,0,0,misc,0, WM_BEYOND_OF_WARCRY,WM_BEYOND_OF_WARCRY
-2434,1,6,4,0,0x1,0,5,1,yes,0,0,0,misc,0, WM_UNLIMITED_HUMMING_VOICE,WM_UNLIMITED_HUMMING_VOICE
-2443,0,6,4,3,0x1,0,5,1,yes,0,0,8:10:12:14:16,magic,0, SO_FIREWALK,SO_FIREWALK
-2444,0,6,4,4,0x1,0,5,1,yes,0,0,8:10:12:14:16,magic,0, SO_ELECTRICWALK,SO_ELECTRICWALK
-2445,0,6,4,0,0x1,0,5,1,yes,0,0,0,magic,0, SO_SPELLFIST,SO_SPELLFIST
-2446,9,8,2,2,0,0,5,3,yes,0,0,0,magic,0, SO_EARTHGRAVE,SO_EARTHGRAVE
-2447,9,8,2,1,0,0,5,5,yes,0,0,0,magic,0, SO_DIAMONDDUST,SO_DIAMONDDUST
-2448,9,6,1,5,0,0,5,1,yes,0,0,0,magic,0, SO_POISON_BUSTER,SO_POISON_BUSTER
-2449,9,6,2,0,0,0,5,1,yes,0,0,0,magic,0, SO_PSYCHIC_WAVE,SO_PSYCHIC_WAVE
-2450,9,6,2,5,0,0,5,1,yes,0,0,0,magic,0, SO_CLOUD_KILL,SO_CLOUD_KILL
-2451,9,6,16,0,0x1,0,5,1,yes,0,0,0,magic,0, SO_STRIKING,SO_STRIKING
-2452,9,6,2,3,0x1,0,5,1,yes,0,0,0,magic,0, SO_WARMER,SO_WARMER
-2453,9,6,2,0,0x1,0,5,1,yes,0,0,0,magic,0, SO_VACUUM_EXTREME,SO_VACUUM_EXTREME
-2454,9,6,1,4,0,0,5,1,yes,0,0,0,magic,0, SO_VARETYR_SPEAR,SO_VARETYR_SPEAR
-2455,9,6,1,0,0x1,0,5,1,yes,0,0,0,magic,0, SO_ARRULLO,SO_ARRULLO
-2456,0,0,0,0,0,0,10,0,yes,0,0,0,weapon,0, SO_EL_CONTROL,SO_EL_CONTROL
-2457,0,0,0,0,0,0,10,0,yes,0,0,0,weapon,0, SO_SUMMON_AGNI,SO_SUMMON_AGNI
-2458,0,0,0,0,0,0,10,0,yes,0,0,0,weapon,0, SO_SUMMON_AQUA,SO_SUMMON_AQUA
-2459,0,0,0,0,0,0,10,0,yes,0,0,0,weapon,0, SO_SUMMON_VENTUS,SO_SUMMON_VENTUS
-2460,0,0,0,0,0,0,10,0,yes,0,0,0,weapon,0, SO_SUMMON_TERA,SO_SUMMON_TERA
-2461,0,0,0,0,0,0,10,0,yes,0,0,0,weapon,0, SO_EL_ACTION,SO_EL_ACTION
-2462,0,0,0,0,0,0,10,0,yes,0,0,0,weapon,0, SO_EL_ANALYSIS,SO_EL_ANALYSIS
-2463,0,0,0,0,0,0,10,0,yes,0,0,0,weapon,0, SO_EL_SYMPATHY,SO_EL_SYMPATHY
-2464,0,0,0,0,0,0,10,0,yes,0,0,0,weapon,0, SO_EL_CURE,SO_EL_CURE
-2465,9,0,0,0,0,0,10,0,yes,0,0,0,weapon,0, SO_FIRE_INSIGNIA,SO_FIRE_INSIGNIA
-2466,9,0,0,0,0,0,10,0,yes,0,0,0,weapon,0, SO_WATER_INSIGNIA,SO_WATER_INSIGNIA
-2467,9,0,0,0,0,0,10,0,yes,0,0,0,weapon,0, SO_WIND_INSIGNIA,SO_WIND_INSIGNIA
-2468,9,0,0,0,0,0,10,0,yes,0,0,0,weapon,0, SO_EARTH_INSIGNIA,SO_EARTH_INSIGNIA
-2474,0,0,0,0,0,0,10,0,no,0,0,0,none,0, GN_TRAINING_SWORD,GN_TRAINING_SWORD
-2475,0,0,0,0,0,0,10,0,no,0,0,0,none,0, GN_REMODELING_CART,GN_REMODELING_CART
-2476,0,6,4,0,0x2,0,5,1,yes,0,0,0,weapon,2, GN_CART_TORNADO,GN_CART_TORNADO
-2477,7:8:9:10:11,6,1,0,0,0,5,1,yes,0,0,0,weapon,0, GN_CARTCANNON,GN_CARTCANNON
-2478,0,6,4,0,0x1,0,5,1,yes,0,0,0,weapon,0, GN_CARTBOOST,GN_CARTBOOST
-2479,9,6,2,0,0,0,5,1,yes,0,0,5,misc,0, GN_THORNS_TRAP,GN_THORNS_TRAP
-2480,11,6,1,0,0x1,0,5,1,yes,0,0,0,misc,0, GN_BLOOD_SUCKER,GN_BLOOD_SUCKER
-2481,11,6,1,0,0x1,0,5,1,yes,0,0,0,magic,0, GN_SPORE_EXPLOSION,GN_SPORE_EXPLOSION
-2482,11,6,16,0,0x1,0,5,1,yes,0,0,1,weapon,2, GN_WALLOFTHORN,GN_WALLOFTHORN
-2483,11,6,2,2,0,0,10,3:4:4:5:5:6:6:7:7:8,yes,0,0,0,weapon,0, GN_CRAZYWEED,GN_CRAZYWEED
-2484,0,6,1,2,0,0,10,1,yes,0,0,0,weapon,0, GN_CRAZYWEED_ATK,GN_CRAZYWEED_ATK
-2485,9,6,2,3,0,0,5,1,yes,0,0,0,weapon,0, GN_DEMONIC_FIRE,GN_DEMONIC_FIRE
-2486,9,6,2,0,0,0,5,1,yes,0,0,0,weapon,0, GN_FIRE_EXPANSION,GN_FIRE_EXPANSION
-2487,9,6,2,0,0,0,5,1,yes,0,0,0,weapon,0, GN_FIRE_EXPANSION_SMOKE_POWDER,GN_FIRE_EXPANSION_SMOKE_POWDER
-2488,9,6,2,0,0,0,5,1,yes,0,0,0,weapon,0, GN_FIRE_EXPANSION_TEAR_GAS,GN_FIRE_EXPANSION_TEAR_GAS
-2489,11,8,1,0,0,0,10,1:2:3:4:5:6:7:8:9:10,yes,0,0,0,weapon,0, GN_FIRE_EXPANSION_ACID,GN_FIRE_EXPANSION_ACID
-2490,9,6,2,0,0,0,5,1,yes,0,0,2:3:4:5:6,misc,0, GN_HELLS_PLANT,GN_HELLS_PLANT
-2491,0,6,1,0,0,0,5,1,yes,0,0,0,misc,0, GN_HELLS_PLANT_ATK,GN_HELLS_PLANT_ATK
-2492,0,6,4,0,0x1,0,5,1,yes,0,0,0,weapon,0, GN_MANDRAGORA,GN_MANDRAGORA
-2493,11,6,16,0,0x1,0,5,1,yes,0,0,0,weapon,0, GN_SLINGITEM,GN_SLINGITEM
-2494,0,6,4,0,0x1,0,1,0,yes,0,0,0,none,0, GN_CHANGEMATERIAL,GN_CHANGEMATERIAL
-2495,0,6,4,0,0x1,0,2,0,yes,0,0,0,none,0, GN_MIX_COOKING,GN_MIX_COOKING
-2496,0,6,4,0,0x1,0,2,0,yes,0,0,0,none,0, GN_MAKEBOMB,GN_MAKEBOMB
-2497,0,6,4,0,0x1,0,10,0,yes,0,0,0,none,0, GN_S_PHARMACY,GN_S_PHARMACY
-2498,11,6,1,0,0,0,5,1,yes,0,0,0,weapon,0, GN_SLINGITEM_RANGEMELEEATK,GN_SLINGITEM_RANGEMELEEATK
-2515,11,6,16,0,0x1,0,5,1,yes,0,0,0,magic,0, AB_SECRAMENT,AB_SECRAMENT
-2516,0,6,1,0,0,0,5,1,yes,0,0,0,weapon,0, WM_SEVERE_RAINSTORM_MELEE,WM_SEVERE_RAINSTORM_MELEE
-2517,0,6,4,0,0,0,5,1,yes,0,0,0,weapon,0, SR_HOWLINGOFLION,SR_HOWLINGOFLION
-2518,11,6,2,0,0,0,5,1,yes,0,0,0,weapon,0, SR_RIDEINLIGHTNING,SR_RIDEINLIGHTNING
-2519,0,6,1,0,0,0,5,1,yes,0,0,0,weapon,3:4:5:6:7, LG_OVERBRAND_BRANDISH,LG_OVERBRAND_BRANDISH
-2520,0,6,1,0,0,0,5,1,yes,0,0,0,weapon,0, LG_OVERBRAND_PLUSATK,LG_OVERBRAND_PLUSATK
+2051,11,6,16,6,0x21,0,5,1,yes,0,0,0,magic,0, AB_HIGHNESSHEAL,Highness Heal //CHECK Info shows this has magic attack.
+2052,11,6,1,0,0x1,0,5,1,yes,0,0xA00,0,magic,0, AB_CLEARANCE,Clearance //CHECK Also shows this as a magic attack. Why?
+2053,0,6,4,0,0x1,0,5,1,yes,0,0,0,magic,0, AB_EXPIATIO,Expiatio //CHECK Does this also give the buff to party members?
+2054,0,6,4,6,0x1,0,10,1,yes,0,0,0,none,0, AB_DUPLELIGHT,Duple Light //CHECK Had issues adding a skill level check to make the % go higher with the skills level. Will do later.
+2055,-1,6,1,-1,0,0,10,1,no,0,0,0,weapon,0, AB_DUPLELIGHT_MELEE,Duple Light Melee
+2056,-1,6,1,0,0,0,10,1,no,0,0,0,magic,0, AB_DUPLELIGHT_MAGIC,Duple Light Magic
+2057,0,6,4,6,0x3,4:5:6:7:8,5,1,yes,0,0,0,magic,0, AB_SILENTIUM,Silentium //CHECk Marked magic attack as well. Hmmmm....
+
+2515,11,6,16,0,0x1,0,5,1,yes,0,0,0,magic,0, AB_SECRAMENT,Secrament
+
+//****
+// RA Ranger
+//****
+2233,9,8,1,-1,0x2,2:2:2:2:2:3:3:3:3:4,10,3,yes,0,0,0,weapon,0, RA_ARROWSTORM,Arrow Storm
+2234,0,6,4,0,0,0,5,1,yes,0,0,0,none,0, RA_FEARBREEZE,Fear Breeze
+2235,0,0,0,0,0,0,10,0,no,0,0,0,none,0, RA_RANGERMAIN,Ranger Main
+2236,9,8,1,-1,0,0,10,1,yes,0,0,0,weapon,0, RA_AIMEDBOLT,Aimed Bolt
+2237,9,6,2,0,0x3,3,1,1,no,0,0,0,none,0, RA_DETONATOR,Detonator
+2238,3,6,2,0,0x3,2,5,1,no,0,0x80,3,misc,0, RA_ELECTRICSHOCKER,Electric Shocker
+2239,3,6,2,0,0x42,3,5,1,no,0,0x80,3,misc,0, RA_CLUSTERBOMB,Cluster Bomb
+2240,0,6,4,0,0,0,1,1,no,0,0,0,none,0, RA_WUGMASTERY,Warg Mastery
+2241,0,6,4,0,0,0,3,1,no,0,0,0,none,0, RA_WUGRIDER,Warg Rider
+2242,0,6,4,-1,0x2,1,1,0,no,0,0,0,weapon,0, RA_WUGDASH,Warg Dash
+2243,9,6,1,-1,0,0,5,1,no,0,0,0,weapon,0, RA_WUGSTRIKE,Warg Strike
+2244,9,6,1,-1,0,0,5,1,no,0,0,0,weapon,0, RA_WUGBITE,Warg Bite
+2245,0,0,0,0,0,0,10,0,no,0,0,0,none,0, RA_TOOTHOFWUG,Tooth of Warg
+2246,0,6,4,0,0x2,3:4:5:6:7,5,1,no,0,0,0,weapon,0, RA_SENSITIVEKEEN,Sensitive Keen
+2247,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0, RA_CAMOUFLAGE,Camouflage
+2248,0,0,0,0,0,0,5,0,no,0,0,0,none,0, RA_RESEARCHTRAP,Research Trap
+2249,3,6,2,3,0x43,2,1,1,no,0,0x80,1,misc,0, RA_MAGENTATRAP,Magenta Trap
+2250,3,6,2,1,0x43,2,1,1,no,0,0x80,1,misc,0, RA_COBALTTRAP,Cobalt Trap
+2251,3,6,2,2,0x43,2,1,1,no,0,0x80,1,misc,0, RA_MAIZETRAP,Maize Trap
+2252,3,6,2,4,0x43,2,1,1,no,0,0x80,1,misc,0, RA_VERDURETRAP,Verdure Trap
+2253,3,6,2,0,0x42,2,5,1,no,0,0x80,2,misc,0, RA_FIRINGTRAP,Firing Trap
+2254,3,6,2,0,0x42,2,5,1,no,0,0x80,2,misc,0, RA_ICEBOUNDTRAP,Icebound Trap
+
+//****
+// NC Mechanic
+2255,0,0,0,0,0,0,5,0,no,0,0,0,none,0, NC_MADOLICENCE,Mado License
+2256,11,6,1,-1,0,0,5,1,no,0,0,0,weapon,0, NC_BOOSTKNUCKLE,Boost Knuckle
+2257,3,6,1,-1,0,0,3,1,no,0,0,0,weapon,0, NC_PILEBUNKER,Pile Bunker
+2258,13,6,1,-1,0,0,3,1,no,0,0,0,weapon,0, NC_VULCANARM,Vulcan Arm
+2259,5,6,1,3,0,2,3,1,no,0,0,5,weapon,0, NC_FLAMELAUNCHER,Flame Launcher
+2260,7,6,2,1,0x2,2:3:4,3,1,no,0,0,0,weapon,0, NC_COLDSLOWER,Cold Slower
+2261,7,6,2,-1,0x42,3:2:1,3,1,no,0,0,0,weapon,0, NC_ARMSCANNON,Arm Cannon
+2262,0,6,4,0,0x1,0,3,1,no,0,0,0,none,0, NC_ACCELERATION,Acceleration
+2263,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0, NC_HOVERING,Hovering
+2264,0,6,4,0,0x1,0,1,1,no,0,0,0,none,7, NC_F_SIDESLIDE,Front-Side Slide
+2265,0,6,4,0,0x1,0,1,1,no,0,0,0,none,7, NC_B_SIDESLIDE,Back-Side Slide
+2266,0,0,0,0,0,0,4,0,no,0,0,0,none,0, NC_MAINFRAME,Mainframe Restructure // Check me. Part of the code notes translated to "The amount of fuel have".
+2267,0,6,4,-1,0x42,2:3:4,3,1,no,0,0,0,misc,5, NC_SELFDESTRUCTION,Self Destruction
+2268,0,6,4,0,0x1,0,4,1,yes,0,0,0,none,0, NC_SHAPESHIFT,Shape Shift
+2269,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0, NC_EMERGENCYCOOL,Emergency Cool
+2270,0,6,4,0,0x3,7,1,1,yes,0,0,0,none,0, NC_INFRAREDSCAN,Infrared Scan
+2271,9,6,1,0,0x1,0,3,1,yes,0,0,0,none,0, NC_ANALYZE,Analyze
+2272,0,6,4,0,0x3,1:2:3,3,1,yes,0,0,0,none,0, NC_MAGNETICFIELD,Magnetic Field
+2273,0,6,4,0,0x1,0,3,1,yes,0,0,0,none,0, NC_NEUTRALBARRIER,Neutral Barrier
+2274,0,6,4,0,0x1,0,3,1,yes,0,0,0,none,0, NC_STEALTHFIELD,Stealth Field
+2275,5,6,16,0,0x1,0,5,1,yes,0,0,0,magic,0, NC_REPAIR,Repair
+2276,0,0,0,0,0,0,10,0,no,0,0,0,none,0, NC_TRAININGAXE,Axe Training
+2277,0,0,0,0,0,0,5,0,no,0,0,0,none,0, NC_RESEARCHFE,Research Fire/Earth
+2278,4:5:6:7:8,6,1,-1,0,0,5,1,no,0,0,0,weapon,2:3:4:5:6, NC_AXEBOOMERANG,Axe Boomerang
+2279,1,6,1,-1,0,0,5,1,no,0,0,0,weapon,0, NC_POWERSWING,Power Swing
+2280,0,8,4,-1,0x2,2:2:3:3:3,5,-6,no,0,0,0,weapon,0, NC_AXETORNADO,Axe Tornado // Check me. Takes 20 * Skill LV amount of HP each use.
+2281,2,6,2,0,0x1,0,5,1,yes,0,0,2,none,0, NC_SILVERSNIPER,FAW - Silver Sniper
+2282,2,6,2,0,0x1,0,5,1,yes,0,0,2,none,0, NC_MAGICDECOY,FAW - Magic Decoy //CHECK FIX ME!!!! Wind and Earth stones spawning opposite decoys.
+2283,2,6,1,0,0x1,0,1,1,no,0,0,0,none,0, NC_DISJOINT,FAW Removal
+
+//2021,0,0,0,0,0,0,9,0,no,0,0,0,none,0 GC_VENOMIMPRESS,
+//2022,0,0,0,0,0,0,9,0,no,0,0,0,none,0 GC_CROSSIMPACT,
+//2023,0,0,0,0,0,0,9,0,no,0,0,0,none,0 GC_DARKILLUSION,
+//2024,0,0,0,0,0,0,9,0,no,0,0,0,none,0 GC_RESEARCHNEWPOISON,
+//2025,0,0,0,0,0,0,9,0,no,0,0,0,none,0 GC_CREATENEWPOISON,
+//2026,0,0,0,0,0,0,9,0,no,0,0,0,none,0 GC_ANTIDOTE,
+//2027,0,0,0,0,0,0,9,0,no,0,0,0,none,0 GC_POISONINGWEAPON,
+//2028,0,0,0,0,0,0,9,0,no,0,0,0,none,0 GC_WEAPONBLOCKING,
+//2029,0,0,0,0,0,0,9,0,no,0,0,0,none,0 GC_COUNTERSLASH,
+//2030,0,0,0,0,0,0,9,0,no,0,0,0,none,0 GC_WEAPONCRUSH,
+//2031,0,0,0,0,0,0,9,0,no,0,0,0,none,0 GC_VENOMPRESSURE,
+//2032,0,0,0,0,0,0,9,0,no,0,0,0,none,0 GC_POISONSMOKE,
+//2033,0,0,0,0,0,0,9,0,no,0,0,0,none,0 GC_CLOAKINGEXCEED,
+//2034,0,0,0,0,0,0,9,0,no,0,0,0,none,0 GC_PHANTOMMENACE,
+//2035,0,0,0,0,0,0,9,0,no,0,0,0,none,0 GC_HALLUCINATIONWALK,
+//2036,0,0,0,0,0,0,9,0,no,0,0,0,none,0 GC_ROLLINGCUTTER,
+//2037,0,0,0,0,0,0,9,0,no,0,0,0,none,0 GC_CROSSRIPPERSLASHER,
+//2038,0,0,0,0,0,0,9,0,no,0,0,0,none,0 AB_JUDEX,
+//2039,0,0,0,0,0,0,9,0,no,0,0,0,none,0 AB_ANCILLA,
+//2040,0,0,0,0,0,0,9,0,no,0,0,0,none,0 AB_ADORAMUS,
+//2041,0,0,0,0,0,0,9,0,no,0,0,0,none,0 AB_CLEMENTIA,
+//2042,0,0,0,0,0,0,9,0,no,0,0,0,none,0 AB_CANTO,
+//2043,0,0,0,0,0,0,9,0,no,0,0,0,none,0 AB_CHEAL,
+//2044,0,0,0,0,0,0,9,0,no,0,0,0,none,0 AB_EPICLESIS,
+//2045,0,0,0,0,0,0,9,0,no,0,0,0,none,0 AB_PRAEFATIO,
+//2046,0,0,0,0,0,0,9,0,no,0,0,0,none,0 AB_ORATIO,
+//2047,0,0,0,0,0,0,9,0,no,0,0,0,none,0 AB_LAUDAAGNUS,
+//2048,0,0,0,0,0,0,9,0,no,0,0,0,none,0 AB_LAUDARAMUS,
+//2049,0,0,0,0,0,0,9,0,no,0,0,0,none,0 AB_EUCHARISTICA,
+//2050,0,0,0,0,0,0,9,0,no,0,0,0,none,0 AB_RENOVATIO,
+//2051,0,0,0,0,0,0,9,0,no,0,0,0,none,0 AB_HIGHNESSHEAL,
+//2052,0,0,0,0,0,0,9,0,no,0,0,0,none,0 AB_CLEARANCE,
+//2053,0,0,0,0,0,0,9,0,no,0,0,0,none,0 AB_EXPIATIO,
+//2054,0,0,0,0,0,0,9,0,no,0,0,0,none,0 AB_DUPLELIGHT,
+//2055,0,0,0,0,0,0,9,0,no,0,0,0,none,0 AB_DUPLELIGHT_MELEE,
+//2056,0,0,0,0,0,0,9,0,no,0,0,0,none,0 AB_DUPLELIGHT_MAGIC,
+//2057,0,0,0,0,0,0,9,0,no,0,0,0,none,0 AB_SILENTIUM,
+//2201,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WL_WHITEIMPRISON,
+//2202,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WL_SOULEXPANSION,
+//2203,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WL_FROSTMISTY,
+//2204,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WL_JACKFROST,
+//2205,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WL_MARSHOFABYSS,
+//2206,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WL_RECOGNIZEDSPELL,
+//2207,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WL_SIENNAEXECRATE,
+//2208,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WL_RADIUS,
+//2209,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WL_STASIS,
+//2210,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WL_DRAINLIFE,
+//2211,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WL_CRIMSONROCK,
+//2212,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WL_HELLINFERNO,
+//2213,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WL_COMET,
+//2214,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WL_CHAINLIGHTNING,
+//2216,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WL_EARTHSTRAIN,
+//2217,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WL_TETRAVORTEX,
+//2222,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WL_SUMMONFB,
+//2223,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WL_SUMMONBL,
+//2224,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WL_SUMMONWB,
+//2229,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WL_SUMMONSTONE,
+//2230,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WL_RELEASE,
+//2231,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WL_READING_SB,
+//2232,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WL_FREEZE_SP,
+//2233,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RA_ARROWSTORM,
+//2234,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RA_FEARBREEZE,
+//2235,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RA_RANGERMAIN,
+//2236,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RA_AIMEDBOLT,
+//2237,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RA_DETONATOR,
+//2238,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RA_ELECTRICSHOCKER,
+//2239,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RA_CLUSTERBOMB,
+//2240,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RA_WUGMASTERY,
+//2241,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RA_WUGRIDER,
+//2242,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RA_WUGDASH,
+//2243,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RA_WUGSTRIKE,
+//2244,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RA_WUGBITE,
+//2245,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RA_TOOTHOFWUG,
+//2246,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RA_SENSITIVEKEEN,
+//2247,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RA_CAMOUFLAGE,
+//2248,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RA_RESEARCHTRAP,
+//2249,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RA_MAGENTATRAP,
+//2250,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RA_COBALTTRAP,
+//2251,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RA_MAIZETRAP,
+//2252,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RA_VERDURETRAP,
+//2253,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RA_FIRINGTRAP,
+//2254,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RA_ICEBOUNDTRAP,
+//2255,0,0,0,0,0,0,9,0,no,0,0,0,none,0 NC_MADOLICENCE,
+//2256,0,0,0,0,0,0,9,0,no,0,0,0,none,0 NC_BOOSTKNUCKLE,
+//2257,0,0,0,0,0,0,9,0,no,0,0,0,none,0 NC_PILEBUNKER,
+//2258,0,0,0,0,0,0,9,0,no,0,0,0,none,0 NC_VULCANARM,
+//2259,0,0,0,0,0,0,9,0,no,0,0,0,none,0 NC_FLAMELAUNCHER,
+//2260,0,0,0,0,0,0,9,0,no,0,0,0,none,0 NC_COLDSLOWER,
+//2261,0,0,0,0,0,0,9,0,no,0,0,0,none,0 NC_ARMSCANNON,
+//2262,0,0,0,0,0,0,9,0,no,0,0,0,none,0 NC_ACCELERATION,
+//2263,0,0,0,0,0,0,9,0,no,0,0,0,none,0 NC_HOVERING,
+//2264,0,0,0,0,0,0,9,0,no,0,0,0,none,0 NC_F_SIDESLIDE,
+//2265,0,0,0,0,0,0,9,0,no,0,0,0,none,0 NC_B_SIDESLIDE,
+//2266,0,0,0,0,0,0,9,0,no,0,0,0,none,0 NC_MAINFRAME,
+//2267,0,0,0,0,0,0,9,0,no,0,0,0,none,0 NC_SELFDESTRUCTION,
+//2268,0,0,0,0,0,0,9,0,no,0,0,0,none,0 NC_SHAPESHIFT,
+//2269,0,0,0,0,0,0,9,0,no,0,0,0,none,0 NC_EMERGENCYCOOL,
+//2270,0,0,0,0,0,0,9,0,no,0,0,0,none,0 NC_INFRAREDSCAN,
+//2271,0,0,0,0,0,0,9,0,no,0,0,0,none,0 NC_ANALYZE,
+//2272,0,0,0,0,0,0,9,0,no,0,0,0,none,0 NC_MAGNETICFIELD,
+//2273,0,0,0,0,0,0,9,0,no,0,0,0,none,0 NC_NEUTRALBARRIER,
+//2274,0,0,0,0,0,0,9,0,no,0,0,0,none,0 NC_STEALTHFIELD,
+//2275,0,0,0,0,0,0,9,0,no,0,0,0,none,0 NC_REPAIR,
+//2276,0,0,0,0,0,0,9,0,no,0,0,0,none,0 NC_TRAININGAXE,
+//2277,0,0,0,0,0,0,9,0,no,0,0,0,none,0 NC_RESEARCHFE,
+//2278,0,0,0,0,0,0,9,0,no,0,0,0,none,0 NC_AXEBOOMERANG,
+//2279,0,0,0,0,0,0,9,0,no,0,0,0,none,0 NC_POWERSWING,
+//2280,0,0,0,0,0,0,9,0,no,0,0,0,none,0 NC_AXETORNADO,
+//2281,0,0,0,0,0,0,9,0,no,0,0,0,none,0 NC_SILVERSNIPER,
+//2282,0,0,0,0,0,0,9,0,no,0,0,0,none,0 NC_MAGICDECOY,
+//2283,0,0,0,0,0,0,9,0,no,0,0,0,none,0 NC_DISJOINT,
+//2284,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SC_FATALMENACE,
+//2285,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SC_REPRODUCE,
+//2286,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SC_AUTOSHADOWSPELL,
+//2287,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SC_SHADOWFORM,
+//2288,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SC_TRIANGLESHOT,
+//2289,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SC_BODYPAINT,
+//2290,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SC_INVISIBILITY,
+//2291,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SC_DEADLYINFECT,
+//2292,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SC_ENERVATION,
+//2293,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SC_GROOMY,
+//2294,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SC_IGNORANCE,
+//2295,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SC_LAZINESS,
+//2296,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SC_UNLUCKY,
+//2297,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SC_WEAKNESS,
+//2298,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SC_STRIPACCESSARY,
+//2299,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SC_MANHOLE,
+//2300,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SC_DIMENSIONDOOR,
+//2301,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SC_CHAOSPANIC,
+//2302,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SC_MAELSTROM,
+//2303,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SC_BLOODYLUST,
+//2304,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SC_FEINTBOMB,
+//2307,0,0,0,0,0,0,9,0,no,0,0,0,none,0 LG_CANNONSPEAR,
+//2308,0,0,0,0,0,0,9,0,no,0,0,0,none,0 LG_BANISHINGPOINT,
+//2309,0,0,0,0,0,0,9,0,no,0,0,0,none,0 LG_TRAMPLE,
+//2310,0,0,0,0,0,0,9,0,no,0,0,0,none,0 LG_SHIELDPRESS,
+//2311,0,0,0,0,0,0,9,0,no,0,0,0,none,0 LG_REFLECTDAMAGE,
+//2312,0,0,0,0,0,0,9,0,no,0,0,0,none,0 LG_PINPOINTATTACK,
+//2313,0,0,0,0,0,0,9,0,no,0,0,0,none,0 LG_FORCEOFVANGUARD,
+//2314,0,0,0,0,0,0,9,0,no,0,0,0,none,0 LG_RAGEBURST,
+//2315,0,0,0,0,0,0,9,0,no,0,0,0,none,0 LG_SHIELDSPELL,
+//2316,0,0,0,0,0,0,9,0,no,0,0,0,none,0 LG_EXEEDBREAK,
+//2317,0,0,0,0,0,0,9,0,no,0,0,0,none,0 LG_OVERBRAND,
+//2318,0,0,0,0,0,0,9,0,no,0,0,0,none,0 LG_PRESTIGE,
+//2319,0,0,0,0,0,0,9,0,no,0,0,0,none,0 LG_BANDING,
+//2320,0,0,0,0,0,0,9,0,no,0,0,0,none,0 LG_MOONSLASHER,
+//2321,0,0,0,0,0,0,9,0,no,0,0,0,none,0 LG_RAYOFGENESIS,
+//2322,0,0,0,0,0,0,9,0,no,0,0,0,none,0 LG_PIETY,
+//2323,0,0,0,0,0,0,9,0,no,0,0,0,none,0 LG_EARTHDRIVE,
+//2324,0,0,0,0,0,0,9,0,no,0,0,0,none,0 LG_HESPERUSLIT,
+//2325,0,0,0,0,0,0,9,0,no,0,0,0,none,0 LG_INSPIRATION,
+//2326,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SR_DRAGONCOMBO,
+//2327,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SR_SKYNETBLOW,
+//2328,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SR_EARTHSHAKER,
+//2329,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SR_FALLENEMPIRE,
+//2330,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SR_TIGERCANNON,
+//2332,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SR_RAMPAGEBLASTER,
+//2333,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SR_CRESCENTELBOW,
+//2334,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SR_CURSEDCIRCLE,
+//2335,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SR_LIGHTNINGWALK,
+//2336,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SR_KNUCKLEARROW,
+//2337,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SR_WINDMILL,
+//2338,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SR_RAISINGDRAGON,
+//2340,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SR_ASSIMILATEPOWER,
+//2341,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SR_POWERVELOCITY,
+//2343,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SR_GATEOFHELL,
+//2344,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SR_GENTLETOUCH_QUIET,
+//2345,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SR_GENTLETOUCH_CURE,
+//2346,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SR_GENTLETOUCH_ENERGYGAIN,
+//2347,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SR_GENTLETOUCH_CHANGE,
+//2348,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SR_GENTLETOUCH_REVITALIZE,
+//2350,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WA_SWING_DANCE,
+//2351,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WA_SYMPHONY_OF_LOVER,
+//2352,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WA_MOONLIT_SERENADE,
+//2381,0,0,0,0,0,0,9,0,no,0,0,0,none,0 MI_RUSH_WINDMILL,
+//2382,0,0,0,0,0,0,9,0,no,0,0,0,none,0 MI_ECHOSONG,
+//2383,0,0,0,0,0,0,9,0,no,0,0,0,none,0 MI_HARMONIZE,
+//2412,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WM_LESSON,
+//2413,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WM_METALICSOUND,
+//2414,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WM_REVERBERATION,
+//2417,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WM_DOMINION_IMPULSE,
+//2418,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WM_SEVERE_RAINSTORM,
+//2419,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WM_POEMOFNETHERWORLD,
+//2420,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WM_VOICEOFSIREN,
+//2421,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WM_DEADHILLHERE,
+//2422,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WM_LULLABY_DEEPSLEEP,
+//2423,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WM_SIRCLEOFNATURE,
+//2424,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WM_RANDOMIZESPELL,
+//2425,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WM_GLOOMYDAY,
+//2426,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WM_GREAT_ECHO,
+//2427,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WM_SONG_OF_MANA,
+//2428,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WM_DANCE_WITH_WUG,
+//2429,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WM_SOUND_OF_DESTRUCTION,
+//2430,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WM_SATURDAY_NIGHT_FEVER,
+//2431,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WM_LERADS_DEW,
+//2432,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WM_MELODYOFSINK,
+//2433,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WM_BEYOND_OF_WARCRY,
+//2434,0,0,0,0,0,0,9,0,no,0,0,0,none,0 WM_UNLIMITED_HUMMING_VOICE,
+//2443,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SO_FIREWALK,
+//2444,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SO_ELECTRICWALK,
+//2445,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SO_SPELLFIST,
+//2446,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SO_EARTHGRAVE,
+//2447,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SO_DIAMONDDUST,
+//2448,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SO_POISON_BUSTER,
+//2449,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SO_PSYCHIC_WAVE,
+//2450,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SO_CLOUD_KILL,
+//2451,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SO_STRIKING,
+//2452,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SO_WARMER,
+//2453,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SO_VACUUM_EXTREME,
+//2454,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SO_VARETYR_SPEAR,
+//2455,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SO_ARRULLO,
+//2456,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SO_EL_CONTROL,
+//2457,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SO_SUMMON_AGNI,
+//2458,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SO_SUMMON_AQUA,
+//2459,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SO_SUMMON_VENTUS,
+//2460,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SO_SUMMON_TERA,
+//2461,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SO_EL_ACTION,
+//2462,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SO_EL_ANALYSIS,
+//2463,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SO_EL_SYMPATHY,
+//2464,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SO_EL_CURE,
+//2465,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SO_FIRE_INSIGNIA,
+//2466,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SO_WATER_INSIGNIA,
+//2467,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SO_WIND_INSIGNIA,
+//2468,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SO_EARTH_INSIGNIA,
+//2535,0,0,0,0,0,0,9,0,no,0,0,0,none,0 ALL_BUYING_STORE,
+//2474,0,0,0,0,0,0,9,0,no,0,0,0,none,0 GN_TRAINING_SWORD,
+//2475,0,0,0,0,0,0,9,0,no,0,0,0,none,0 GN_REMODELING_CART,
+//2476,0,0,0,0,0,0,9,0,no,0,0,0,none,0 GN_CART_TORNADO,
+//2477,0,0,0,0,0,0,9,0,no,0,0,0,none,0 GN_CARTCANNON,
+//2478,0,0,0,0,0,0,9,0,no,0,0,0,none,0 GN_CARTBOOST,
+//2479,0,0,0,0,0,0,9,0,no,0,0,0,none,0 GN_THORNS_TRAP,
+//2480,0,0,0,0,0,0,9,0,no,0,0,0,none,0 GN_BLOOD_SUCKER,
+//2481,0,0,0,0,0,0,9,0,no,0,0,0,none,0 GN_SPORE_EXPLOSION,
+//2482,0,0,0,0,0,0,9,0,no,0,0,0,none,0 GN_WALLOFTHORN,
+//2483,0,0,0,0,0,0,9,0,no,0,0,0,none,0 GN_CRAZYWEED,
+//2485,0,0,0,0,0,0,9,0,no,0,0,0,none,0 GN_DEMONIC_FIRE,
+//2486,0,0,0,0,0,0,9,0,no,0,0,0,none,0 GN_FIRE_EXPANSION,
+//2490,0,0,0,0,0,0,9,0,no,0,0,0,none,0 GN_HELLS_PLANT,
+//2492,0,0,0,0,0,0,9,0,no,0,0,0,none,0 GN_MANDRAGORA,
+//2493,0,0,0,0,0,0,9,0,no,0,0,0,none,0 GN_SLINGITEM,
+//2494,0,0,0,0,0,0,9,0,no,0,0,0,none,0 GN_CHANGEMATERIAL,
+//2495,0,0,0,0,0,0,9,0,no,0,0,0,none,0 GN_MIX_COOKING,
+//2496,0,0,0,0,0,0,9,0,no,0,0,0,none,0 GN_MAKEBOMB,
+//2497,0,0,0,0,0,0,9,0,no,0,0,0,none,0 GN_S_PHARMACY,
+//2515,0,0,0,0,0,0,9,0,no,0,0,0,none,0 AB_SECRAMENT,
+//2517,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SR_HOWLINGOFLION,
+//2518,0,0,0,0,0,0,9,0,no,0,0,0,none,0 SR_RIDEINLIGHTNING,
// Unknown
//2533,0,0,0,0,0,0,9,0,no,0,0,0,none,0 ALL_ODINS_RECALL,
@@ -963,8 +1070,6 @@
// Buying Store
2535,0,0,4,0,0x1,0,1,0,no,0,0x1,0,none,0, ALL_BUYING_STORE,Open Buying Store
-//2538,0,0,4,0,0x1,0,1,0,no,0,0x1,0,none,0, ALL_RIDING,Riding Mount
-
8001,9,6,4,0,0x1,0,5,1,no,0,0,0,magic,0, HLIF_HEAL,Healing Touch
8002,0,6,4,0,0x3,-1,5,1,no,0,0,0,none,0, HLIF_AVOID,Avoid
8003,0,0,0,0,0,1,5,0,no,0,0,0,none,0, HLIF_BRAIN,Brain Surgery
diff --git a/db/skill_nocast_db.txt b/db/skill_nocast_db.txt
index 24d7b4c38..fe7702560 100644
--- a/db/skill_nocast_db.txt
+++ b/db/skill_nocast_db.txt
@@ -39,7 +39,7 @@
491,4 //CR_CULTIVATION
530,4 //NJ_KIRIKAGE
691,4 //CASH_ASSUMPTIO
-1013,4 //BS_GREED
+1013,2048 //BS_GREED
//BATTLEGROUND
26,8 //AL_TELEPORT
@@ -94,7 +94,6 @@
357,32 //LK_CONCENTRATION
359,32 //LK_BERSERK
362,32 //HP_BASILICA
-387,32 //WS_CARTBOOST
389,32 //ST_CHASEWALK
395,32 //CG_MOONLIT
diff --git a/db/skill_require_db.txt b/db/skill_require_db.txt
index 79a4f96cc..08ea26839 100644
--- a/db/skill_require_db.txt
+++ b/db/skill_require_db.txt
@@ -19,9 +19,6 @@
// explosionspirits = Requires Fury skill activated
// cartboost = Requires a Pushcart and Cart Boost skill activated
// shield = Requires a 0,shield equipped
-// dragon = requires Rune Knight dragon mount.
-// warg = requires Sniper Warg.
-// madogear = requires Mechanic Mado Gear.
5,0,0,8:8:8:8:8:15:15:15:15:15,0,0,0,0:1:2:3:4:5:6:7:8:9:10:12:13:14:15:16:17:18:19:20:21:22,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SM_BASH#ƒoƒbƒVƒ…#
6,0,0,4:5:6:7:8:9:10:11:12:13,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SM_PROVOKE#ƒvƒƒ{ƒbƒN#
@@ -92,7 +89,7 @@
79,0,0,40:42:44:46:48:50:52:54:56:58,0,0,0,99,0,0,none,0,717,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //PR_MAGNUS#ƒ}ƒOƒkƒXƒGƒNƒ\ƒVƒYƒ€#
80,0,0,75,0,0,0,99,0,0,none,0,717,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WZ_FIREPILLAR#ƒtƒ@ƒCƒA?ƒsƒ‰?#
81,0,0,35:37:39:41:43:45:47:49:51:53,0,0,0,99,0,0,sight,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WZ_SIGHTRASHER#ƒTƒCƒgƒ‰ƒbƒVƒƒ?#
-
+82,0,0,12:14:16:18:20:22:24:26:28:30,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WZ_FIREIVY#ƒ†ƒsƒeƒ‹ƒTƒ“ƒ_?#
83,0,0,20:24:30:34:40:44:50:54:60:64,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WZ_METEOR#ƒƒeƒIƒXƒg?ƒ€#
84,0,0,20:23:26:29:32:35:38:41:44:47,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WZ_JUPITEL#ƒ†ƒsƒeƒ‹ƒTƒ“ƒ_?#
85,0,0,60:64:68:72:76:80:84:88:92:96,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WZ_VERMILION#ƒ?ƒhƒIƒuƒ”ƒ@?ƒ~ƒŠƒIƒ“#
@@ -457,249 +454,163 @@
1018,0,0,30,0,0,0,99,0,0,none,0,12114,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SA_ELEMENTFIRE
1019,0,0,30,0,0,0,99,0,0,none,0,12117,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SA_ELEMENTWIND
-2001,0,0,40:45:50:55:60,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_ENCHANTBLADE
-2002,0,0,30:35:40:45:50,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_SONICWAVE
-2003,0,0,28:31:34:37:40:43:46:49:52:55,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_DEATHBOUND
-2004,0,0,60,0,0,0,4:5,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_HUNDREDSPEAR
-2005,0,0,20:24:28:32:36,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_WINDCUTTER
-2006,0,0,35:40:45:50:55,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_IGNITIONBREAK
-2008,0,0,5:10:15:20:25:30:35:40:45:50,0,0,0,99,0,0,dragon,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_DRAGONBREATH
-2009,0,0,5:10:15:20:25:30:35:40:45:50,0,0,0,99,0,0,dragon,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_DRAGONHOWLING
-2012,0,0,0,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_CRUSHSTRIKE
-2020,0,0,15:18:21:24:27,0,0,0,4:5,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_PHANTOMTHRUST
-
-2021,0,0,12:16:20:24:28,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GC_VENOMIMPRESS
-2022,0,0,25,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GC_CROSSIMPACT
-2023,0,0,40,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GC_DARKILLUSION
-2025,0,0,5,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GC_CREATENEWPOISON
-2026,0,0,10,0,0,0,99,0,0,none,0,6128,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GC_ANTIDOTE
-2027,0,0,20:24:28:32:36,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GC_POISONINGWEAPON
-2028,0,0,40:36:32:28:24,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GC_WEAPONBLOCKING
-2029,0,0,5:8:11:14:17,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GC_COUNTERSLASH
-2030,0,0,20,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GC_WEAPONCRUSH
-2031,0,0,30:40:50:60:70,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GC_VENOMPRESSURE
-2032,0,0,30:40:50:60:70,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GC_POISONSMOKE
-2033,0,0,45,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GC_CLOAKINGEXCEED
-2034,0,0,30,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GC_PHANTOMMENACE
-2035,0,0,100,10,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GC_HALLUCINATIONWALK
-2036,0,0,5,0,0,0,16,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GC_ROLLINGCUTTER
-2037,0,0,20:24:28:32:36,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GC_CROSSRIPPERSLASHER
-
-2038,0,0,30:33:36:39:42,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_JUDEX
-2039,0,0,30,0,-30,0,99,0,0,none,0,717,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_ANCILLA
-//2039,0,0,0,0,-30,0,99,0,0,none,0,717,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_ANCILLA
-2040,0,0,22:28:34:40:46:52:58:64:70:76,0,0,0,99,0,0,none,0,717,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_ADORAMUS
-2041,0,0,280:320:360,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_CLEMENTIA
-2042,0,0,200:220:240,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_CANTO
-2043,0,0,200:220:240,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_CHEAL
-2044,0,0,300,0,0,0,99,0,0,none,0,12333,1,523,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_EPICLESIS
-2045,0,0,90:100:110:120:130:140:150:160:170:180,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_PRAEFATIO
-2046,0,0,35:38:41:44:47:50:53:56:59:62,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_ORATIO
-2047,0,0,50:60:70:80,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_LAUDAAGNUS
-2048,0,0,50:60:70:80,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_LAUDARAMUS
-2050,0,0,70,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_RENOVATIO
-2051,0,0,70:100:130:160:190,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_HIGHNESSHEAL
-2052,0,0,54:60:66:72:78,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_CLEARANCE
-2053,0,0,35:40:45:50:55,0,0,0,1:2:3:4:5:6:7:8:9:10:11:12:13:14:15:16:17:18:19:20:21:22,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_EXPIATIO
-2054,0,0,55:60:65:70:75:80:85:90:95:100,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_DUPLELIGHT
-2057,0,0,64:68:72:76:80,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_SILENTIUM
-
-2201,0,0,50:55:60:65:70,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_WHITEIMPRISON
-2202,0,0,30:35:40:45:50,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_SOULEXPANSION
-2203,0,0,40:48:56:64:72,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_FROSTMISTY
-2204,0,0,50:60:70:80:90,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_JACKFROST
-2205,0,0,40:42:44:46:48,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_MARSHOFABYSS
-2206,0,0,50:60:70:80:90,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_RECOGNIZEDSPELL
-2207,0,0,32:34:36:38:40,0,0,0,99,0,0,none,0,716,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_SIENNAEXECRATE
-2209,0,0,70:90:110:130:150,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_STASIS
-2210,0,0,20:24:28:32:36,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_DRAINLIFE
-2211,0,0,60:70:80:90:100,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_CRIMSONROCK
-2212,0,0,35:40:45:50:55,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_HELLINFERNO
-2213,0,0,240:280:320:360:400,0,0,0,99,0,0,none,0,716,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_COMET
-2214,0,0,80:90:100:110:120,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_CHAINLIGHTNING
-2216,0,0,70:78:86:94:102,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_EARTHSTRAIN
-2217,0,0,120:150:180:210:240,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_TETRAVORTEX
-2222,0,0,10:12:14:16:18,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_SUMMONFB
-2223,0,0,10:12:14:16:18,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_SUMMONBL
-2224,0,0,10:12:14:16:18,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_SUMMONWB
-2229,0,0,10:12:14:16:18,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_SUMMONSTONE
-2230,0,0,3:20,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_RELEASE
-2231,0,0,8:12:16:20:24,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_READING_SB
-
-2233,0,0,30:32:34:36:38:40:42:44:46:48,0,0,0,11,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_ARROWSTORM
-2234,0,0,36:40:44:48:52,0,0,0,11,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_FEARBREEZE
-2236,0,0,30:32:34:36:38:40:42:44:46:48,0,0,0,11,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_AIMEDBOLT
-2237,0,0,15,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_DETONATOR
-2238,0,0,35,0,0,0,99,0,0,none,0,7940,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_ELECTRICSHOCKER
-2239,0,0,20,0,0,0,99,0,0,none,0,7940,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_CLUSTERBOMB
-2240,0,0,5,0,0,0,99,0,0,none,0,6124,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_WUGMASTERY
-2241,0,0,20,0,0,0,99,0,0,warg,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_WUGRIDER
-2242,0,0,40,0,0,0,99,0,0,warg,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_WUGDASH
-2243,0,0,30:32:34:36:38,0,0,0,99,0,0,warg,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_WUGSTRIKE
-2244,0,0,40:44:46:48:50,0,0,0,99,0,0,warg,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_WUGBITE
-2246,0,0,10,0,0,0,99,0,0,wolf,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_SENSITIVEKEEN
-2247,0,0,40,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_CAMOUFLAGE
-2249,0,0,10,0,0,0,99,0,0,none,0,7940,1,990,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_MAGENTATRAP
-2250,0,0,10,0,0,0,99,0,0,none,0,7940,1,991,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_COBALTTRAP
-2251,0,0,10,0,0,0,99,0,0,none,0,7940,1,993,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_MAIZETRAP
-2252,0,0,10,0,0,0,99,0,0,none,0,7940,1,992,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_VERDURETRAP
-2253,0,0,10,0,0,0,99,0,0,none,0,7940,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_FIRINGTRAP
-2254,0,0,10,0,0,0,99,0,0,none,0,7940,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_ICEBOUNDTRAP
-
-2256,0,0,3:6:9:12:15,0,0,0,99,0,0,madogear,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_BOOSTKNUCKLE
-2257,0,0,50,0,0,0,99,0,0,madogear,0,1549,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_PILEBUNKER
-2258,0,0,2,0,0,0,99,0,0,madogear,0,6145,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_VULCANARM
-2259,0,0,20,0,0,0,99,0,0,madogear,0,2139,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_FLAMELAUNCHER
-2260,0,0,20,0,0,0,99,0,0,madogear,0,6147,1,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_COLDSLOWER
-2261,0,0,30:45:60,0,0,0,99,0,0,madogear,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_ARMSCANNON
-2262,0,0,20:40:60,0,0,0,99,0,0,madogear,0,2800,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_ACCELERATION
-2263,0,0,25,0,0,0,99,0,0,madogear,0,2801,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_HOVERING
-2264,0,0,20,0,0,0,99,0,0,madogear,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_F_SIDESLIDE
-2265,0,0,20,0,0,0,99,0,0,madogear,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_B_SIDESLIDE
-2267,0,0,200,0,0,0,99,0,0,madogear,0,2802,0,6146,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_SELFDESTRUCTION
-2268,0,0,100,0,0,0,99,0,0,madogear,0,2803,0,6146,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_SHAPESHIFT
-2269,0,0,20,0,0,0,99,0,0,madogear,0,2804,0,6146,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_EMERGENCYCOOL
-2270,0,0,45,0,0,0,99,0,0,madogear,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_INFRAREDSCAN
-2271,0,0,30,0,0,0,99,0,0,madogear,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_ANALYZE
-2272,0,0,90,0,0,0,99,0,0,madogear,0,2805,0,6146,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_MAGNETICFIELD
-2273,0,0,90,0,0,0,99,0,0,madogear,0,2806,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_NEUTRALBARRIER
-2274,0,0,100:150:200,0,0,0,99,0,0,madogear,0,2808,0,6146,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_STEALTHFIELD
-2275,0,0,25:30:35:40:45,0,0,0,99,0,0,madogear,0,2807,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_REPAIR
-2278,0,0,20:22:24:26:28,0,0,0,6:7:,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_AXEBOOMERANG
-2279,0,0,10:12:14:16:18,0,0,0,6:7,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_POWERSWING
-2280,20:40:60:80:100,0,18:20:22:24:26,0,0,0,6:7,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_AXETORNADO
-2281,0,0,25:30:35:40:45,0,0,0,99,0,0,none,0,999,2,998,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_SILVERSNIPER
-2282,0,0,40:45:50:55:60,0,0,0,99,0,0,none,0,998,2,7054,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_MAGICDECOY
-2283,0,0,15,0,0,0,99,0,0,none,0,6186,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_DISJOINT
-
-2284,0,0,40:45:50:55:60,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SC_FATALMENACE
-2285,0,0,40:45:50:55:60:65:70:75:80:85,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SC_REPRODUCE
-2286,0,0,40:45:50:55:60:65:70:75:80:85,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SC_AUTOSHADOWSPELL
-2287,0,0,40:50:60:70:80,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SC_SHADOWFORM
-2288,0,0,22:24:26:28:30:32:34:36:38:40,0,0,0,11,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SC_TRIANGLESHOT
-2289,0,0,10:15:20:25:30,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SC_BODYPAINT
-2290,0,0,100,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SC_INVISIBILITY
-2291,0,0,40:44:48:52:56,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SC_DEADLYINFECT
-2292,0,0,30:40:50,0,0,0,99,0,0,none,0,6121,0,6120,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SC_ENERVATION
-2293,0,0,30:40:50,0,0,0,99,0,0,none,0,6121,0,6120,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SC_GROOMY
-2294,0,0,30:40:50,0,0,0,99,0,0,none,0,6121,0,6120,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SC_IGNORANCE
-2295,0,0,30:40:50,0,0,0,99,0,0,none,0,6121,0,6120,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SC_LAZINESS
-2296,0,0,30:40:50,0,0,0,99,0,0,none,0,6121,0,6120,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SC_UNLUCKY
-2297,0,0,30:40:50,0,0,0,99,0,0,none,0,6121,0,6120,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SC_WEAKNESS
-2298,0,0,15:18:21:24:27,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SC_STRIPACCESSARY
-2299,0,0,20:25:30,0,0,0,99,0,0,none,0,6122,0,6123,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SC_MANHOLE
-2300,0,0,30:36:42,0,0,0,99,0,0,none,0,6122,0,6123,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SC_DIMENSIONDOOR
-2301,0,0,30:36:42,0,0,0,99,0,0,none,0,6122,0,6123,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SC_CHAOSPANIC
-2302,0,0,50:55:60,0,0,0,99,0,0,none,0,6122,0,6123,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SC_MAELSTROM
-2303,0,0,60:70:80,0,0,0,99,0,0,none,0,6122,0,6123,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SC_BLOODYLUST
-2304,0,0,24:28:32,0,0,0,99,0,0,none,0,6122,0,6123,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SC_FEINTBOMB
-
-2307,0,0,12:16:20:24:28,0,0,0,4:5,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //LG_CANNONSPEAR
-2308,0,0,20:20:20:20:20:25:25:25:25:25,0,0,0,4:5,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //LG_BANISHINGPOINT
-2309,0,0,30:45:60,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //LG_TRAMPLE
-2310,0,0,10:12:14:16:18,0,0,0,99,0,0,shield,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //LG_SHIELDPRESS
-2311,0,0,40:50:60:70:80,0,0,0,99,0,0,shield,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //LG_REFLECTDAMAGE
-2312,0,0,30,0,0,0,4:5,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //LG_PINPOINTATTACK
-2313,0,0,30,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //LG_FORCEOFVANGUARD
-2314,0,0,50,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //LG_RAGEBURST
-2315,0,0,50,0,0,0,99,0,0,shield,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //LG_SHIELDSPELL
-2316,0,0,24:28:32:36:40,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //LG_EXEEDBREAK
-2317,0,0,42:44:46:48:50,0,0,0,4:5,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //LG_OVERBRAND
-2318,0,0,24:28:32,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //LG_PRESTIGE
-2319,0,0,75:80:85:90:95,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //LG_BANDING
-2320,0,0,20:24:28:32:36,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //LG_MOONSLASHER
-2321,0,0,60,3:6:9:12:15,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //LG_RAYOFGENESIS
-2322,0,0,40:45:50:55:60,0,0,0,99,0,0,none,0,523,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //LG_PIETY
-2323,0,0,52:60:68:76:84,0,0,0,99,0,0,shield,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //LG_EARTHDRIVE
-2324,0,0,80:90:100:110:120,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //LG_HESPERUSLIT
-2325,0,0,100,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //LG_INSPIRATION
-
-2326,0,0,3:4:5:6:7:8:9:10:11:12,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_DRAGONCOMBO
-2327,0,0,8:9:10:11:12,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_SKYNETBLOW
-2328,0,0,36:40:44:48:52,0,0,0,99,0,0,none,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_EARTHSHAKER
-2329,0,0,20:30:40:50:60,0,0,0,99,0,0,none,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_FALLENEMPIRE
-2330,0,0,1,0,0,0,99,0,0,explosionspirits,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_TIGERCANNON
-2332,0,0,150,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_RAMPAGEBLASTER
-2333,0,0,80,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_CRESCENTELBOW
-2334,0,0,40:60:80:100:120,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_CURSEDCIRCLE
-2335,0,0,80:70:60:50:40,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_LIGHTNINGWALK
-2336,0,0,10:15:20:25:30,0,0,0,99,0,0,none,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_KNUCKLEARROW
-2337,0,0,45,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_WINDMILL
-2338,0,0,120,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_RAISINGDRAGON
-2340,0,0,10,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_ASSIMILATEPOWER
-2341,0,0,50,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_POWERVELOCITY
-2343,0,0,10,0,0,0,99,0,0,explosionspirits,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_GATEOFHELL
-2344,0,0,20:25:30:35:40,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_QUIET
-2345,0,0,40:50:60:70:80,0,0,0,99,0,0,none,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CURE
-2346,0,0,40:50:60:70:80,1:2:3:4:5,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_ENERGYGAIN
-2347,0,0,40:50:60:70:80,1:2:3:4:5,0,0,99,0,0,none,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CHANGE
-2348,0,0,40:50:60:70:80,0,0,0,99,0,0,none,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_REVITALIZE
-
-2350,0,0,96:112:128:144:160,0,0,0,13:14,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WA_SWING_DANCE
-2351,0,0,60:69:78:87:96,0,0,0,13:14,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WA_SYMPHONY_OF_LOVE
-2352,0,0,84:96:108:120:134,0,0,0,13:14,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WA_MOONLIT_SERENADE
-
-2381,0,0,82:88:94:100:106,0,0,0,13:14,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //MI_RUSH_WINDMILL
-2382,0,0,86:92:98:104:110,0,0,0,13:14,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //MI_ECHOSONG
-2383,0,0,70:75:80:85:90,0,0,0,13:14,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //MI_HARMONIZE
-
-2413,0,0,64:68:72:76:80,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WM_METALICSOUND
-2414,0,0,28:32:38:42:48,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WM_REVERBERATION
-2417,0,0,10,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WM_DOMINION_IMPULSE
-2418,0,0,80:90:100:110:120,0,0,0,11,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WM_SEVERE_RAINSTORM
-2419,0,0,12:16:20:24:28,0,0,0,13:14,0,0,none,0,11513,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WM_POEMOFNETHERWORLD
-2420,0,0,48:56:64:72:80,0,0,0,13:14,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WM_VOICEOFSIREN
-2421,0,0,50:53:56:59:62,0,0,0,13:14,0,0,none,0,6144,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WM_DEADHILLHERE
-2422,0,0,80:90:100:110:120,0,0,0,13:14,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WM_LULLABY_DEEPSLEEP
-2423,0,0,42:46:50:54:58,0,0,0,13:14,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WM_SIRCLEOFNATURE
-2424,0,0,40:45:50:55:60,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WM_RANDOMIZESPELL
-2425,0,0,60,0,0,0,13:14,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WM_GLOOMYDAY
-2426,0,0,80:90:100:110:120,0,0,0,99,0,0,none,0,11513,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WM_GREAT_ECHO
-2427,0,0,120:140:160:180:200,0,0,0,13:14,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WM_SONG_OF_MANA
-2428,0,0,120:140:160:180:200,0,0,0,13:14,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WM_DANCE_WITH_WUG
-2429,0,0,50:60:70:80:90,0,0,0,13:14,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WM_SOUND_OF_DESTRUCTION
-2430,0,0,150:160:170:180:190,0,0,0,13:14,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WM_SATURDAY_NIGHT_FEVER
-2431,0,0,120:130:140:150:160,0,0,0,13:14,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WM_LERADS_DEW
-2432,0,0,120:130:140:150:160,0,0,0,13:14,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WM_MELODYOFSINK
-2433,0,0,120:130:140:150:160,0,0,0,13:14,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WM_BEYOND_OF_WARCRY
-2434,0,0,120:130:140:150:160,0,0,0,13:14,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WM_UNLIMITED_HUMMING_VOICE
-
-2443,0,0,30:34:38:42:46,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SO_FIREWALK
-2444,0,0,30:34:38:42:46,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SO_ELECTRICWALK
-2445,0,0,40:44:48:52:56,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SO_SPELLFIST
-2446,0,0,62:70:78:86:94,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SO_EARTHGRAVE
-2447,0,0,50:56:62:68:74,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /SO_DIAMONDDUST
-2448,0,0,70:90:110:130:150,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SO_POISON_BUSTER
-2449,0,0,48:56:64:72:80,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SO_PSYCHIC_WAVE
-2450,0,0,48:56:64:72:80,0,0,0,99,0,0,none,0,716,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SO_CLOUD_KILL
-2451,0,0,50:55:60:65:70,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SO_STRIKING
-2452,0,0,40:52:64:76:88,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SO_WARMER
-2453,0,0,34:42:50:58:66,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SO_VACUUM_EXTREME
-2454,0,0,55:62:69:76:83,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SO_VARETYR_SPEAR
-2455,0,0,30:35:40:45:50,0,0,0,99,0,0,none,0,715,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SO_ARRULLO
-
-2476,0,0,30,0,0,0,99,0,0,cart,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GN_CART_TORNADO
-2477,0,0,40:42:44:46:48,0,0,0,99,0,0,cart,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GN_CARTCANNON
-2478,0,0,20:24:28:32:36,0,0,0,99,0,0,cart,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GN_CARTBOOST
-2479,0,0,22:26:30:34:38,0,0,0,99,0,0,none,0,6210,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GN_THORNS_TRAP
-2480,0,0,30:35:40:45:50,0,0,0,99,0,0,none,0,6211,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GN_BLOOD_SUCKER
-2481,0,0,55:60:65:70:75,0,0,0,99,0,0,none,0,6212,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GN_SPORE_EXPLOSION
-2482,0,0,40:50:60:70:80,0,0,0,99,0,0,none,0,6210,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GN_WALLOFTHORN
-2483,0,0,24:28:32:36:40:44:48:52:56:60,0,0,0,99,0,0,none,0,6210,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GN_CRAZYWEED
-2485,0,0,24:28:32:36:40,0,0,0,99,0,0,none,0,7135,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GN_DEMONIC_FIRE
-2486,0,0,30:35:40:45:50,0,0,0,99,0,0,none,0,6216,1,6213,1,6214,1,6215,1,7136,1,0,0,0,0,0,0,0,0,0,0 //GN_FIRE_EXPANSION
-2490,0,0,40:45:50:55:60,0,0,0,99,0,0,none,0,7137,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GN_HELLS_PLANT
-2492,0,0,40:45:50:55:60,0,0,0,99,0,0,none,0,6217,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GN_MANDRAGORA
-2493,0,0,4,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GN_SLINGITEM
-2494,0,0,5,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GN_CHANGEMATERIAL
-2495,0,0,5:40,0,0,0,99,0,0,none,0,6248,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GN_MIX_COOKING
-2496,0,0,5:40,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GN_MAKEBOMB
-2497,0,0,12,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GN_S_PHARMACY
-
-2515,0,0,100:120:140:160:180,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_SECRAMENT
-
-2517,0,0,40:45:50:55:60,0,0,0,99,0,0,none,1:2:3:4:5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_HOWLINGOFLION
-2518,0,0,22:24:26:28:30,0,0,0,99,0,0,none,1:2:3:4:5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_RIDEINLIGHTNING
+//*****
+// RK Rune Knight
+2001,0,0,40:45:50:55:60,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_ENCHANTBLADE#Enchant Blade#
+2002,0,0,30:35:40:45:50,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_SONICWAVE#Sonic Wave#
+2003,0,0,55:60:65:70:75:80:85:90:95:100,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_DEATHBOUND#Death Bound#
+2004,0,0,60,0,0,0,4:5,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_HUNDREDSPEAR#Hundred Spear#
+2005,0,0,20:24:28:32:36,0,0,0,1:2:3:4:5,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_WINDCUTTER#Wind Cutter#
+2006,0,0,35:40:45:50:55,0,0,0,1:2:3:4:5,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_IGNITIONBREAK#Ignition Break#
+2008,0,0,30:35:40:45:50:55:60:65:70:75,0,0,0,99,0,0,dragon,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_DRAGONBREATH#Dragon Breath#
+2009,0,0,70,0,0,0,99,0,0,dragon,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_DRAGONHOWLING#Dragon Howling#
+2011,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_MILLENNIUMSHIELD#Millenium Shield#
+2012,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_CRUSHSTRIKE#Crush Strike#
+2013,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_REFRESH#Refresh#
+2014,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_GIANTGROWTH#Giant Growth#
+2015,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_STONEHARDSKIN#Stone Hard Skin#
+2016,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_VITALITYACTIVATION#Vitality Activation#
+2017,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_STORMBLAST#Storm Blast#
+2018,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_FIGHTINGSPIRIT#Fighting Spirit#
+2019,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_ABUNDANCE#Abundance#
+2020,0,0,15:18:21:24:27,0,0,0,4:5,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_PHANTOMTHRUST#Phantom Thrust#
+
+//****
+// GC Guilottine Cross
+2021,0,0,12:16:20:24:28,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GC_VENOMIMPRESS#Venom Impress#
+2022,0,0,25,0,0,0,99,0,0,move_enable,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GC_CROSSIMPACT#Cross Impact# //CHECK Is this move_enable needed?
+2023,0,0,40,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GC_DARKILLUSION#Dark Illusion#
+
+2025,0,0,10,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GC_CREATENEWPOISON#Create New Poison#
+2026,0,0,10,0,0,0,99,0,0,none,0,6128,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GC_ANTIDOTE#Antidote#
+2027,0,0,20:24:28:32:36,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GC_POISONINGWEAPON#Poisoning Weapon#
+2028,0,0,40:36:32:28:24,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GC_WEAPONBLOCKING#Weapon Blocking#
+2029,0,0,5:8:11:14:17,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GC_COUNTERSLASH#Counter Slash#
+2030,0,0,20,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GC_WEAPONCRUSH#Weapon Crush#
+2031,0,0,30:40:50:60:70,0,0,0,99,0,0,poisonweapon,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GC_VENOMPRESSURE#Venom Pressure#
+2032,0,0,40,0,0,0,99,0,0,poisonweapon,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GC_POISONSMOKE#Poison Smoke#
+2033,0,0,45,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GC_CLOAKINGEXCEED#Cloaking Exceed#
+2034,0,0,30,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GC_PHANTOMMENACE#Phantom Menace#
+2035,0,0,100,10,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GC_HALLUCINATIONWALK#Hallucination Walk#
+2036,0,0,5,0,0,0,16,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GC_ROLLINGCUTTER#Rolling Cutter#
+2037,0,0,20:24:28:32:36,0,0,0,16,0,0,rollingcutter,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GC_CROSSRIPPERSLASHER#Cross Ripper Slasher#
+
+
+//****
+// WL Warlock
+2201,0,0,50:55:60:65:70,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_WHITEIMPRISON#White Imprison#
+2202,0,0,30:35:40:45:50,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_SOULEXPANSION#Soul Expansion#
+2203,0,0,40:48:56:64:72,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_FROSTMISTY#Frosty Misty#
+2204,0,0,50:60:70:80:90,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_JACKFROST#Jack Frost#
+2205,0,0,40:42:44:46:48,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_MARSHOFABYSS#Marsh of Abyss#
+2206,0,0,50:60:70:80:90,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_RECOGNIZEDSPELL#Recognized Spell#
+2207,0,0,32:34:36:38:40,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_SIENNAEXECRATE#Sienna Execrate#
+
+2209,0,0,50:60:70:80:90,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_STASIS#Stasis#
+2210,0,0,20:24:28:32:36,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_DRAINLIFE#Drain Life#
+2211,0,0,60:70:80:90:100,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_CRIMSONROCK#Crimson Rock#
+2212,0,0,35:40:45:50:55,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_HELLINFERNO#Hell Inferno#
+2213,0,0,240:280:320:360:400,0,0,0,99,0,0,none,0,716,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_COMET#Comet#
+2214,0,0,80:90:100:110:120,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_CHAINLIGHTNING#Chain Lightning#
+2215,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_CHAINLIGHTNING_ATK#Chain Lightning Attack#
+2216,0,0,70:78:86:94:102,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_EARTHSTRAIN#Earth Strain#
+2217,0,0,120:150:180:210:240,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_TETRAVORTEX#Tetra Vortex#
+2218,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_TETRAVORTEX_FIRE#Tetra Vortex Fire#
+2219,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_TETRAVORTEX_WATER#Tetra Vortex Water#
+2220,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_TETRAVORTEX_WIND#Tetra Vortex Wind#
+2221,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_TETRAVORTEX_GROUND#Tetra Vortex Earth#
+2222,0,0,10:12:14:16:18,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_SUMMONFB#Summon Fire Ball#
+2223,0,0,10:12:14:16:18,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_SUMMONBL#Summon Lightning Ball#
+2224,0,0,10:12:14:16:18,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_SUMMONWB#Summon Water Ball#
+2225,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_SUMMON_ATK_FIRE#Summon Attack Fire#
+2226,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_SUMMON_ATK_WIND#Summon Attack Wind#
+2227,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_SUMMON_ATK_WATER#Summon Attack Water#
+2228,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_SUMMON_ATK_GROUND#Summon Attack Earth#
+2229,0,0,10:12:14:16:18,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_SUMMONSTONE#Summon Stone#
+2230,0,0,3:20,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_RELEASE#Release#
+2231,0,0,40,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_READING_SB#Reading Spellbook#
+//2232,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_FREEZE_SP#Freeze Spell# (Passive Skill)
+
+
+//****
+// AB Arch Bishop
+2038,0,0,20:23:26:29:32,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_JUDEX#Judex#
+2039,0,0,30,0,-30,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_ANCILLA#Ancilla#
+2040,0,0,20:24:28:32:36:40:44:48:52:56,0,0,0,99,0,0,none,0,717,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_ADORAMUS#Adoramus#
+2041,0,0,200:220:240,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_CLEMENTIA#Crementia#
+2042,0,0,145:160:175,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_CANTO#Canto Candidus#
+2043,0,0,130:145:160,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_CHEAL#Coluceo Heal#
+2044,0,0,300,0,0,0,99,0,0,none,0,12333,1,523,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_EPICLESIS#Epiclesis#
+2045,0,0,60:70:80:90:100:110:120:130:140:150,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_PRAEFATIO#Praefatio#
+2046,0,0,35:38:41:44:47:50:53:56:59:62,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_ORATIO#Oratio#
+2047,0,0,50:60:70:80,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_LAUDAAGNUS#Lauda Agnus#
+2048,0,0,50:60:70:80,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_LAUDARAMUS#Lauda Ramus#
+
+2050,0,0,70,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_RENOVATIO#Renovatio#
+2051,0,0,70:100:130:160:190,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_HIGHNESSHEAL#Highness Heal#
+2052,0,0,54:60:66:72:78,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_CLEARANCE#Clearance#
+2053,0,0,35:40:45:50:55,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_EXPIATIO#Expiatio#
+2054,0,0,55:60:65:70:75:80:85:90:95:100,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_DUPLELIGHT#Duple Light#
+2055,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_DUPLELIGHT_MELEE#Duple Light Melee#
+2056,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_DUPLELIGHT_MAGIC#Duple Light Magic#
+2057,0,0,64:68:72:76:80,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_SILENTIUM#Silentium#
+
+2515,0,0,100:120:140:160:180,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_SECRAMENT#Sacrament#
+
+//****
+// RA Ranger
+2233,0,0,30:32:34:36:38:40:42:44:46:48,0,0,0,11,1,10,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_ARROWSTORM#Arrow Storm#
+2234,0,0,36:40:44:48:52,0,0,0,11,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_FEARBREEZE#Fear Breeze#
+
+2236,0,0,30:32:34:36:38:40:42:44:46:48,0,0,0,11,1,1,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_AIMEDBOLT#Aimed Bolt# //How many arrows does it require???
+2237,0,0,15,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_DETONATOR#Detonator#
+2238,0,0,35,0,0,0,99,0,0,none,0,7940,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_ELECTRICSHOCKER#Electric Shocker#
+2239,0,0,20,0,0,0,99,0,0,none,0,7940,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_CLUSTERBOMB#Cluster Bomb#
+2240,0,0,5,0,0,0,99,0,0,none,0,6124,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_WUGMASTERY#Warg Mastery#
+2241,0,0,20,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_WUGRIDER#Warg Rider#
+2242,0,0,40,0,0,0,99,0,0,move_enable,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_WUGDASH#Warg Dash#
+2243,0,0,20:22:24:26:28,0,0,0,99,0,0,ridingwarg,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_WUGSTRIKE#Warg Strike#
+2244,0,0,42:44:46:48:50,0,0,0,99,0,0,warg,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_WUGBITE#Warg Bite#
+
+2246,0,0,12,0,0,0,99,0,0,warg,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_SENSITIVEKEEN#Sensitive Keen#
+2247,0,0,40,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_CAMOUFLAGE#Camouflage#
+
+2249,0,0,10,0,0,0,99,0,0,none,0,7940,1,990,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_MAGENTATRAP#Magenta Trap#
+2250,0,0,10,0,0,0,99,0,0,none,0,7940,1,991,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_COBALTTRAP#Cobalt Trap#
+2251,0,0,10,0,0,0,99,0,0,none,0,7940,1,993,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_MAIZETRAP#Maize Trap#
+2252,0,0,10,0,0,0,99,0,0,none,0,7940,1,992,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_VERDURETRAP#Verdure Trap#
+2253,0,0,10,0,0,0,99,0,0,none,0,7940,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_FIRINGTRAP#Firing Trap#
+2254,0,0,10,0,0,0,99,0,0,none,0,7940,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_ICEBOUNDTRAP#Icebound Trap#
+
+//****
+// NC Mechanic
+2256,0,0,3:6:9:12:15,0,0,0,99,0,0,mado,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_BOOSTKNUCKLE#Boost Knuckle#
+2257,0,0,50,0,0,0,99,0,0,mado,0,1549,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_PILEBUNKER#Pile Bunker#
+2258,0,0,2,0,0,0,99,0,0,mado,0,6145,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_VULCANARM#Vulcan Arm#
+2259,0,0,20,0,0,0,99,0,0,mado,0,2139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_FLAMELAUNCHER#Flame Launcher#
+2260,0,0,20,0,0,0,99,0,0,mado,0,6147,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_COLDSLOWER#Cold Slower#
+2261,0,0,30:45:60,0,0,0,99,8,1,mado,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_ARMSCANNON#Arm Cannon#
+2262,0,0,20:40:60,0,0,0,99,0,0,mado,0,6146,1,2800,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_ACCELERATION#Acceleration#
+2263,0,0,25,0,0,0,99,0,0,mado,0,6146,1,2801,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_HOVERING#Hovering#
+2264,0,0,5,0,0,0,99,0,0,mado,0,6146,1,,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_F_SIDESLIDE#Front - Side Slide#
+2265,0,0,5,0,0,0,99,0,0,mado,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_B_SIDESLIDE#Back - Side Slide#
+
+2267,0,0,200,0,0,0,99,0,0,mado,0,6146,5,2802,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_SELFDESTRUCTION#Self Destruction#
+2268,0,0,100,0,0,0,99,0,0,mado,0,994,1,997,1,996,1,995,1,6146,2,2803,0,0,0,0,0,0,0,0,0 //NC_SHAPESHIFT#Shape Shift# //CHECK Shouldnt the different stones all be in the same slot?
+2269,0,0,20,0,0,0,99,0,0,mado,0,6146,2,2804,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_EMERGENCYCOOL#Emergency Cool#
+2270,0,0,45,0,0,0,99,0,0,mado,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_INFRAREDSCAN#Infrared Scan#
+2271,0,0,30,0,0,0,99,0,0,mado,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_ANALYZE#Analyze#
+2272,0,0,90,0,0,0,99,0,0,mado,0,6146,3,2805,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_MAGNETICFIELD#Magnetic Field#
+2273,0,0,90,0,0,0,99,0,0,mado,0,6146,1,2806,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_NEUTRALBARRIER#Neutral Barrier#
+2274,0,0,100:150:200,0,0,0,99,0,0,mado,0,6146,2,2808,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_STEALTHFIELD#Stealth Field#
+2275,0,0,25:30:35:40:45,0,0,0,99,0,0,mado,0,2807,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_REPAIR#Repair#
+
+2278,0,0,20:22:24:26:28,0,0,0,6:7,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_AXEBOOMERANG#Axe Boomerang#
+2279,0,0,10:12:14:16:18,0,0,0,6:7,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_POWERSWING#Power Swing#
+2280,0,0,18:20:22:24:26,0,0,0,6:7,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_AXETORNADO#Axe Tornado#
+2281,0,0,25:30:35:40:45,0,0,0,99,0,0,none,0,998,1,999,2,612,0,615,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_SILVERSNIPER#FAW - Silver Sniper#
+2282,0,0,40:45:50:55:60,0,0,0,99,0,0,none,0,998,2,7054,1,612,0,615,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_MAGICDECOY#FAW - Magic Decoy#
+2283,0,0,15,0,0,0,99,0,0,none,0,6186,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_DISJOINT#FAW Removal#
2535,0,0,1,0,0,0,99,0,0,none,0,6377,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store
diff --git a/db/skill_tree.txt b/db/skill_tree.txt
index 364d85acd..51c30f181 100644
--- a/db/skill_tree.txt
+++ b/db/skill_tree.txt
@@ -127,7 +127,7 @@
7,64,5,63,1,0,0,0,0,0,0,0,0 //KN_CAVALIERMASTERY#Cavalier Mastery#
7,1001,1,0,0,0,0,0,0,0,0,0,0 //KN_CHARGEATK#Charge Attack#
7,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-7,495,1,60,10,0,0,0,0,0,0,0,0 //KN_ONEHAND#Onehand Quicken#
+7,495,1,60,10,0,0,0,0,0,0,0,0 //KN_ONEHAND#Onehand Quicken#
7,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
//Priest
8,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
@@ -187,7 +187,7 @@
9,157,1,0,0,0,0,0,0,0,0,0,0 //MG_ENERGYCOAT#Energy Coat#
9,80,10,18,1,0,0,0,0,0,0,0,0 //WZ_FIREPILLAR#Fire Pillar#
9,81,10,20,1,10,1,0,0,0,0,0,0 //WZ_SIGHTRASHER#Sightrasher#
-//9,82,10,0,0,0,0,0,0,0,0,0,0 //WZ_FIREIVY#Fire Ivy#
+9,82,10,19,3,0,0,0,0,0,0,0,0 //WZ_FIREIVY#Fire Ivy#
9,83,10,81,2,21,1,0,0,0,0,0,0 //WZ_METEOR#Meteor Storm#
9,84,10,11,1,20,1,0,0,0,0,0,0 //WZ_JUPITEL#Jupiter Thunder#
9,85,10,21,1,84,5,0,0,0,0,0,0 //WZ_VERMILION#Lord of Vermilion#
@@ -239,7 +239,7 @@
10,1012,1,0,0,0,0,0,0,0,0,0,0 //BS_UNFAIRLYTRICK#Unfair Trick#
10,1013,1,0,0,0,0,0,0,0,0,0,0 //BS_GREED#Greed#
10,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-10,459,1,111,5,0,0,0,0,0,0,0,0 //BS_ADRENALINE2#Full Adrenaline Rush#
+10,459,1,111,5,0,0,0,0,0,0,0,0 //BS_ADRENALINE2#Full Adrenaline Rush#
10,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
10,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store#
//Hunter
@@ -271,7 +271,7 @@
11,131,5,124,1,127,1,0,0,0,0,0,0 //HT_SPRINGTRAP#Spring Trap#
11,1009,1,0,0,0,0,0,0,0,0,0,0 //HT_PHANTASMIC#Phantasmic Arrow#
11,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-11,499,1,46,10,0,0,0,0,0,0,0,0 //HT_POWER#Beast Strafing#
+11,499,1,46,10,0,0,0,0,0,0,0,0 //HT_POWER#Beast Strafing#
11,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
//Assassin
12,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
@@ -325,7 +325,7 @@
13,64,5,63,1,0,0,0,0,0,0,0,0 //KN_CAVALIERMASTERY#Cavalier Mastery#
13,1001,1,0,0,0,0,0,0,0,0,0,0 //KN_CHARGEATK#Charge Attack#
13,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-13,495,1,60,10,0,0,0,0,0,0,0,0 //KN_ONEHAND#Onehand Quicken#
+13,495,1,60,10,0,0,0,0,0,0,0,0 //KN_ONEHAND#Onehand Quicken#
13,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
//Crusader
14,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
@@ -508,10 +508,10 @@
18,244,1,238,1,0,0,0,0,0,0,0,0 //AM_REST#Peaceful Rest#
18,247,5,243,1,0,0,0,0,0,0,0,0 //AM_RESURRECTHOMUN#Ressurect Homunculus#
18,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-18,446,1,0,0,0,0,0,0,0,0,0,0 //AM_BERSERKPITCHER#Berserk Pitcher#
-18,496,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT1#Twilight Alchemy 1#
-18,497,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT2#Twilight Alchemy 2#
-18,498,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT3#Twilight Alchemy 3#
+18,446,1,0,0,0,0,0,0,0,0,0,0 //AM_BERSERKPITCHER#Berserk Pitcher#
+18,496,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT1#Twilight Alchemy 1#
+18,497,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT2#Twilight Alchemy 2#
+18,498,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT3#Twilight Alchemy 3#
18,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
18,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store#
//Bard
@@ -863,7 +863,7 @@
4008,398,5,55,9,63,1,0,0,0,0,0,0 //LK_HEADCRUSH#Traumatic Blow#
4008,399,10,55,9,64,3,398,3,0,0,0,0 //LK_JOINTBEAT#Vital Strike#
4008,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4008,495,1,60,10,0,0,0,0,0,0,0,0 //KN_ONEHAND#Onehand Quicken#
+4008,495,1,60,10,0,0,0,0,0,0,0,0 //KN_ONEHAND#Onehand Quicken#
4008,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
//HighPriest
4009,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
@@ -992,7 +992,7 @@
4011,485,10,42,10,110,5,387,1,0,0,0,0 //WS_CARTTERMINATION#Cart Termination#
4011,486,5,113,5,0,0,0,0,0,0,0,0 //WS_OVERTHRUSTMAX#Maximum Power Thrust#
4011,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4011,459,1,111,5,0,0,0,0,0,0,0,0 //BS_ADRENALINE2#Full Adrenaline Rush#
+4011,459,1,111,5,0,0,0,0,0,0,0,0 //BS_ADRENALINE2#Full Adrenaline Rush#
4011,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
4011,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store#
//Sniper
@@ -1028,7 +1028,7 @@
4012,382,5,45,10,46,5,0,0,0,0,0,0 //SN_SHARPSHOOTING#Focused Arrow Strike#
4012,383,10,45,9,0,0,0,0,0,0,0,0 //SN_WINDWALK#Wind Walker#
4012,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4012,499,1,46,10,0,0,0,0,0,0,0,0 //HT_POWER#Beast Strafing#
+4012,499,1,46,10,0,0,0,0,0,0,0,0 //HT_POWER#Beast Strafing#
4012,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
//AssassinCross
4013,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
@@ -1095,7 +1095,7 @@
4014,398,5,55,9,63,1,0,0,0,0,0,0 //LK_HEADCRUSH#Traumatic Blow#
4014,399,10,55,9,64,3,398,3,0,0,0,0 //LK_JOINTBEAT#Vital Strike#
4014,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4014,495,1,60,10,0,0,0,0,0,0,0,0 //KN_ONEHAND#Onehand Quicken#
+4014,495,1,60,10,0,0,0,0,0,0,0,0 //KN_ONEHAND#Onehand Quicken#
4014,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
//Paladin
4015,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
@@ -1304,10 +1304,10 @@
4019,490,10,229,5,230,5,0,0,0,0,0,0 //CR_ACIDDEMONSTRATION#Acid Demonstration#
4019,491,2,0,0,0,0,0,0,0,0,0,0 //CR_CULTIVATION#Cultivation#
4019,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4019,446,1,0,0,0,0,0,0,0,0,0,0 //AM_BERSERKPITCHER#Berserk Pitcher#
-4019,496,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT1#Twilight Alchemy 1#
-4019,497,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT2#Twilight Alchemy 2#
-4019,498,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT3#Twilight Alchemy 3#
+4019,446,1,0,0,0,0,0,0,0,0,0,0 //AM_BERSERKPITCHER#Berserk Pitcher#
+4019,496,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT1#Twilight Alchemy 1#
+4019,497,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT2#Twilight Alchemy 2#
+4019,498,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT3#Twilight Alchemy 3#
4019,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
4019,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store#
//Clown
@@ -1558,7 +1558,7 @@
4030,63,1,8,1,0,0,0,0,0,0,0,0 //KN_RIDING#Peco Peco Riding#
4030,64,5,63,1,0,0,0,0,0,0,0,0 //KN_CAVALIERMASTERY#Cavalier Mastery#
4030,1001,1,0,0,0,0,0,0,0,0,0,0 //KN_CHARGEATK#Charge Attack#
-4030,495,1,60,10,0,0,0,0,0,0,0,0 //KN_ONEHAND#Onehand Quicken#
+4030,495,1,60,10,0,0,0,0,0,0,0,0 //KN_ONEHAND#Onehand Quicken#
4030,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
//Baby Priest
4031,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
@@ -1672,7 +1672,7 @@
4033,114,5,112,3,113,2,0,0,0,0,0,0 //BS_MAXIMIZE#Maximize Power#
4033,1012,1,0,0,0,0,0,0,0,0,0,0 //BS_UNFAIRLYTRICK#Unfair Trick#
4033,1013,1,0,0,0,0,0,0,0,0,0,0 //BS_GREED#Greed#
-4033,459,1,111,5,0,0,0,0,0,0,0,0 //BS_ADRENALINE2#Full Adrenaline Rush#
+4033,459,1,111,5,0,0,0,0,0,0,0,0 //BS_ADRENALINE2#Full Adrenaline Rush#
4033,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
4033,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store#
//Baby Hunter
@@ -1705,7 +1705,7 @@
4034,130,4,45,1,127,1,0,0,0,0,0,0 //HT_DETECTING#Detect#
4034,131,5,124,1,127,1,0,0,0,0,0,0 //HT_SPRINGTRAP#Spring Trap#
4034,1009,1,0,0,0,0,0,0,0,0,0,0 //HT_PHANTASMIC#Phantasmic Arrow#
-4034,499,1,46,10,0,0,0,0,0,0,0,0 //HT_POWER#Beast Strafing#
+4034,499,1,46,10,0,0,0,0,0,0,0,0 //HT_POWER#Beast Strafing#
4034,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
//Baby Assassin
4035,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
@@ -1761,7 +1761,7 @@
4036,63,1,8,1,0,0,0,0,0,0,0,0 //KN_RIDING#Peco Peco Riding#
4036,64,5,63,1,0,0,0,0,0,0,0,0 //KN_CAVALIERMASTERY#Cavalier Mastery#
4036,1001,1,0,0,0,0,0,0,0,0,0,0 //KN_CHARGEATK#Charge Attack#
-4036,495,1,60,10,0,0,0,0,0,0,0,0 //KN_ONEHAND#Onehand Quicken#
+4036,495,1,60,10,0,0,0,0,0,0,0,0 //KN_ONEHAND#Onehand Quicken#
4036,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
//Baby Crusader
4037,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
@@ -1949,10 +1949,10 @@
4041,243,1,244,1,0,0,0,0,0,0,0,0 //AM_CALLHOMUN#Call Homunculus#
4041,244,1,238,1,0,0,0,0,0,0,0,0 //AM_REST#Peaceful Rest#
4041,247,5,243,1,0,0,0,0,0,0,0,0 //AM_RESURRECTHOMUN#Ressurect Homunculus#
-4041,446,1,0,0,0,0,0,0,0,0,0,0 //AM_BERSERKPITCHER#Berserk Pitcher#
-4041,496,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT1#Twilight Alchemy 1#
-4041,497,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT2#Twilight Alchemy 2#
-4041,498,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT3#Twilight Alchemy 3#
+4041,446,1,0,0,0,0,0,0,0,0,0,0 //AM_BERSERKPITCHER#Berserk Pitcher#
+4041,496,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT1#Twilight Alchemy 1#
+4041,497,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT2#Twilight Alchemy 2#
+4041,498,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT3#Twilight Alchemy 3#
4041,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
4041,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store#
//Baby Bard
@@ -2152,24 +2152,25 @@
4047,425,7,422,5,423,5,424,5,0,0,0,0 //TK_SEVENWIND#Warm Wind#
4047,426,5,0,0,0,0,0,0,0,0,0,0 //TK_HIGHJUMP#High Jump#
4047,493,1,424,5,0,0,0,0,0,0,0,0 //TK_MISSION#Taekwon Mission#
-4047,427,3,0,0,0,0,0,0,0,0,0,0 //SG_FEEL#Feeling the Sun, Moon and Stars#
-4047,428,3,427,1,0,0,0,0,0,0,0,0 //SG_SUN_WARM#Warmth of the Sun#
-4047,429,3,427,2,0,0,0,0,0,0,0,0 //SG_MOON_WARM#Warmth of the Moon#
-4047,430,3,427,3,0,0,0,0,0,0,0,0 //SG_STAR_WARM#Warmth of the Star#
-4047,431,4,427,1,0,0,0,0,0,0,0,0 //SG_SUN_COMFORT#Comfort of the Sun#
-4047,432,4,427,2,0,0,0,0,0,0,0,0 //SG_MOON_COMFORT#Comfort of the Moon#
-4047,433,4,427,3,0,0,0,0,0,0,0,0 //SG_STAR_COMFORT#Comfort of the Star#
-4047,434,3,0,0,0,0,0,0,0,0,0,0 //SG_HATE#Hatred of the Sun, Moon and Stars#
-4047,435,3,434,1,0,0,0,0,0,0,0,0 //SG_SUN_ANGER#Sun's Wrath#
-4047,436,3,434,2,0,0,0,0,0,0,0,0 //SG_MOON_ANGER#Moon's Wrath#
-4047,437,3,434,3,0,0,0,0,0,0,0,0 //SG_STAR_ANGER#Stars's Wrath#
-4047,438,5,427,1,434,1,0,0,0,0,0,0 //SG_SUN_BLESS#Blessing of the Sun#
-4047,439,5,427,2,434,2,0,0,0,0,0,0 //SG_MOON_BLESS#Blessing of the Moon#
-4047,440,5,427,3,434,3,0,0,0,0,0,0 //SG_STAR_BLESS#Blessing of the Star#
-4047,441,10,0,0,0,0,0,0,0,0,0,0 //SG_DEVIL#Demon of the Sun, Moon and Stars#
-4047,442,3,0,0,0,0,0,0,0,0,0,0 //SG_FRIEND#Friend of the Sun, Moon and Stars#
-4047,443,10,0,0,0,0,0,0,0,0,0,0 //SG_KNOWLEDGE#Knowledge of the Sun, Moon and Stars#
-4047,444,1,443,9,0,0,0,0,0,0,0,0 //SG_FUSION#Union of the Sun, Moon and Stars#
+4047,427,3,0,0,0,0,0,0,0,0,0,0 //SG_FEEL#Feeling the Sun, Moon and Stars#
+4047,428,3,427,1,0,0,0,0,0,0,0,0 //SG_SUN_WARM#Warmth of the Sun#
+4047,429,3,427,2,0,0,0,0,0,0,0,0 //SG_MOON_WARM#Warmth of the Moon#
+4047,430,3,427,3,0,0,0,0,0,0,0,0 //SG_STAR_WARM#Warmth of the Star#
+4047,431,4,427,1,0,0,0,0,0,0,0,0 //SG_SUN_COMFORT#Comfort of the Sun#
+4047,432,4,427,2,0,0,0,0,0,0,0,0 //SG_MOON_COMFORT#Comfort of the Moon#
+4047,433,4,427,3,0,0,0,0,0,0,0,0 //SG_STAR_COMFORT#Comfort of the Star#
+4047,434,3,0,0,0,0,0,0,0,0,0,0 //SG_HATE#Hatred of the Sun, Moon and Stars#
+4047,435,3,434,1,0,0,0,0,0,0,0,0 //SG_SUN_ANGER#Sun's Wrath#
+4047,436,3,434,2,0,0,0,0,0,0,0,0 //SG_MOON_ANGER#Moon's Wrath#
+4047,437,3,434,3,0,0,0,0,0,0,0,0 //SG_STAR_ANGER#Stars's Wrath#
+4047,438,5,427,1,434,1,0,0,0,0,0,0 //SG_SUN_BLESS#Blessing of the Sun#
+4047,439,5,427,2,434,2,0,0,0,0,0,0 //SG_MOON_BLESS#Blessing of the Moon#
+4047,440,5,427,3,434,3,0,0,0,0,0,0 //SG_STAR_BLESS#Blessing of the Star#
+4047,441,10,0,0,0,0,0,0,0,0,0,0 //SG_DEVIL#Demon of the Sun, Moon and Stars#
+4047,442,3,0,0,0,0,0,0,0,0,0,0 //SG_FRIEND#Friend of the Sun, Moon and Stars#
+4047,443,10,0,0,0,0,0,0,0,0,0,0 //SG_KNOWLEDGE#Knowledge of the Sun, Moon and Stars#
+4047,444,1,443,9,0,0,0,0,0,0,0,0
+//SG_FUSION#Union of the Sun, Moon and Stars#
4047,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
4047,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
//Star Gladiator (Flying)
@@ -2192,24 +2193,25 @@
4048,425,7,422,5,423,5,424,5,0,0,0,0 //TK_SEVENWIND#Warm Wind#
4048,426,5,0,0,0,0,0,0,0,0,0,0 //TK_HIGHJUMP#High Jump#
4048,493,1,424,5,0,0,0,0,0,0,0,0 //TK_MISSION#Taekwon Mission#
-4048,427,3,0,0,0,0,0,0,0,0,0,0 //SG_FEEL#Feeling the Sun, Moon and Stars#
-4048,428,3,427,1,0,0,0,0,0,0,0,0 //SG_SUN_WARM#Warmth of the Sun#
-4048,429,3,427,2,0,0,0,0,0,0,0,0 //SG_MOON_WARM#Warmth of the Moon#
-4048,430,3,427,3,0,0,0,0,0,0,0,0 //SG_STAR_WARM#Warmth of the Star#
-4048,431,4,427,1,0,0,0,0,0,0,0,0 //SG_SUN_COMFORT#Comfort of the Sun#
-4048,432,4,427,2,0,0,0,0,0,0,0,0 //SG_MOON_COMFORT#Comfort of the Moon#
-4048,433,4,427,3,0,0,0,0,0,0,0,0 //SG_STAR_COMFORT#Comfort of the Star#
-4048,434,3,0,0,0,0,0,0,0,0,0,0 //SG_HATE#Hatred of the Sun, Moon and Stars#
-4048,435,3,434,1,0,0,0,0,0,0,0,0 //SG_SUN_ANGER#Sun's Wrath#
-4048,436,3,434,2,0,0,0,0,0,0,0,0 //SG_MOON_ANGER#Moon's Wrath#
-4048,437,3,434,3,0,0,0,0,0,0,0,0 //SG_STAR_ANGER#Stars's Wrath#
-4048,438,5,427,1,434,1,0,0,0,0,0,0 //SG_SUN_BLESS#Blessing of the Sun#
-4048,439,5,427,2,434,2,0,0,0,0,0,0 //SG_MOON_BLESS#Blessing of the Moon#
-4048,440,5,427,3,434,3,0,0,0,0,0,0 //SG_STAR_BLESS#Blessing of the Star#
-4048,441,10,0,0,0,0,0,0,0,0,0,0 //SG_DEVIL#Demon of the Sun, Moon and Stars#
-4048,442,3,0,0,0,0,0,0,0,0,0,0 //SG_FRIEND#Friend of the Sun, Moon and Stars#
-4048,443,10,0,0,0,0,0,0,0,0,0,0 //SG_KNOWLEDGE#Knowledge of the Sun, Moon and Stars#
-4048,444,1,443,9,0,0,0,0,0,0,0,0 //SG_FUSION#Union of the Sun, Moon and Stars#
+4048,427,3,0,0,0,0,0,0,0,0,0,0 //SG_FEEL#Feeling the Sun, Moon and Stars#
+4048,428,3,427,1,0,0,0,0,0,0,0,0 //SG_SUN_WARM#Warmth of the Sun#
+4048,429,3,427,2,0,0,0,0,0,0,0,0 //SG_MOON_WARM#Warmth of the Moon#
+4048,430,3,427,3,0,0,0,0,0,0,0,0 //SG_STAR_WARM#Warmth of the Star#
+4048,431,4,427,1,0,0,0,0,0,0,0,0 //SG_SUN_COMFORT#Comfort of the Sun#
+4048,432,4,427,2,0,0,0,0,0,0,0,0 //SG_MOON_COMFORT#Comfort of the Moon#
+4048,433,4,427,3,0,0,0,0,0,0,0,0 //SG_STAR_COMFORT#Comfort of the Star#
+4048,434,3,0,0,0,0,0,0,0,0,0,0 //SG_HATE#Hatred of the Sun, Moon and Stars#
+4048,435,3,434,1,0,0,0,0,0,0,0,0 //SG_SUN_ANGER#Sun's Wrath#
+4048,436,3,434,2,0,0,0,0,0,0,0,0 //SG_MOON_ANGER#Moon's Wrath#
+4048,437,3,434,3,0,0,0,0,0,0,0,0 //SG_STAR_ANGER#Stars's Wrath#
+4048,438,5,427,1,434,1,0,0,0,0,0,0 //SG_SUN_BLESS#Blessing of the Sun#
+4048,439,5,427,2,434,2,0,0,0,0,0,0 //SG_MOON_BLESS#Blessing of the Moon#
+4048,440,5,427,3,434,3,0,0,0,0,0,0 //SG_STAR_BLESS#Blessing of the Star#
+4048,441,10,0,0,0,0,0,0,0,0,0,0 //SG_DEVIL#Demon of the Sun, Moon and Stars#
+4048,442,3,0,0,0,0,0,0,0,0,0,0 //SG_FRIEND#Friend of the Sun, Moon and Stars#
+4048,443,10,0,0,0,0,0,0,0,0,0,0 //SG_KNOWLEDGE#Knowledge of the Sun, Moon and Stars#
+4048,444,1,443,9,0,0,0,0,0,0,0,0
+//SG_FUSION#Union of the Sun, Moon and Stars#
4048,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
4048,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
//Soul Linker
@@ -2232,36 +2234,36 @@
4049,425,7,422,5,423,5,424,5,0,0,0,0 //TK_SEVENWIND#Warm Wind#
4049,426,5,0,0,0,0,0,0,0,0,0,0 //TK_HIGHJUMP#High Jump#
4049,493,1,424,5,0,0,0,0,0,0,0,0 //TK_MISSION#Taekwon Mission#
-4049,445,5,0,0,0,0,0,0,0,0,0,0 //SL_ALCHEMIST#Spirit of the Alchemist#
-4049,447,5,0,0,0,0,0,0,0,0,0,0 //SL_MONK#Spirit of the Monk#
-4049,448,5,0,0,0,0,0,0,0,0,0,0 //SL_STAR#Spirit of the Star Knight#
-4049,449,5,0,0,0,0,0,0,0,0,0,0 //SL_SAGE#Spirit of the Professor#
-4049,450,5,0,0,0,0,0,0,0,0,0,0 //SL_CRUSADER#Spirit of the Crusader#
-4049,451,5,0,0,0,0,0,0,0,0,0,0 //SL_SUPERNOVICE#Spirit of the Supernovice#
-4049,452,5,450,1,0,0,0,0,0,0,0,0 //SL_KNIGHT#Spirit of the Knight#
-4049,453,5,449,1,0,0,0,0,0,0,0,0 //SL_WIZARD#Spirit of the Wizard#
-4049,454,5,447,1,0,0,0,0,0,0,0,0 //SL_PRIEST#Spirit of the Priest#
-4049,455,5,0,0,0,0,0,0,0,0,0,0 //SL_BARDDANCER#Spirit of the Artist#
-4049,456,5,457,1,0,0,0,0,0,0,0,0 //SL_ROGUE#Spirit of the Rogue#
-4049,457,5,0,0,0,0,0,0,0,0,0,0 //SL_ASSASIN#Spirit of the Assasin#
-4049,458,5,445,1,0,0,0,0,0,0,0,0 //SL_BLACKSMITH#Spirit of the Blacksmith#
-4049,460,5,455,1,0,0,0,0,0,0,0,0 //SL_HUNTER#Spirit of the Hunter#
-4049,461,5,448,1,0,0,0,0,0,0,0,0 //SL_SOULLINKER#Spirit of the Soul Linker#
-4049,462,7,454,1,0,0,0,0,0,0,0,0 //SL_KAIZEL#Kaizel#
-4049,463,7,454,1,450,1,0,0,0,0,0,0 //SL_KAAHI#Kahai#
-4049,464,3,456,1,0,0,0,0,0,0,0,0 //SL_KAUPE#Kauf#
-4049,465,7,453,1,0,0,0,0,0,0,0,0 //SL_KAITE#Kaite#
-4049,466,7,423,1,0,0,0,0,0,0,0,0 //SL_KAINA#Kaina#
-4049,467,7,453,1,0,0,0,0,0,0,0,0 //SL_STIN#Estin#
-4049,468,7,453,1,0,0,0,0,0,0,0,0 //SL_STUN#Estern#
-4049,469,10,467,7,468,7,0,0,0,0,0,0 //SL_SMA#Esma#
-4049,470,7,454,1,0,0,0,0,0,0,0,0 //SL_SWOO#Esu#
-4049,471,3,452,1,0,0,0,0,0,0,0,0 //SL_SKE#Esk#
-4049,472,3,447,1,0,0,0,0,0,0,0,0 //SL_SKA#Eska#
-4049,494,5,451,1,0,0,0,0,0,0,0,0 //SL_HIGH#Spirit of Rebirth#
+4049,445,5,0,0,0,0,0,0,0,0,0,0 //SL_ALCHEMIST#Spirit of the Alchemist#
+4049,447,5,0,0,0,0,0,0,0,0,0,0 //SL_MONK#Spirit of the Monk#
+4049,448,5,0,0,0,0,0,0,0,0,0,0 //SL_STAR#Spirit of the Star Knight#
+4049,449,5,0,0,0,0,0,0,0,0,0,0 //SL_SAGE#Spirit of the Professor#
+4049,450,5,0,0,0,0,0,0,0,0,0,0 //SL_CRUSADER#Spirit of the Crusader#
+4049,451,5,0,0,0,0,0,0,0,0,0,0 //SL_SUPERNOVICE#Spirit of the Supernovice#
+4049,452,5,450,1,0,0,0,0,0,0,0,0 //SL_KNIGHT#Spirit of the Knight#
+4049,453,5,449,1,0,0,0,0,0,0,0,0 //SL_WIZARD#Spirit of the Wizard#
+4049,454,5,447,1,0,0,0,0,0,0,0,0 //SL_PRIEST#Spirit of the Priest#
+4049,455,5,0,0,0,0,0,0,0,0,0,0 //SL_BARDDANCER#Spirit of the Artist#
+4049,456,5,457,1,0,0,0,0,0,0,0,0 //SL_ROGUE#Spirit of the Rogue#
+4049,457,5,0,0,0,0,0,0,0,0,0,0 //SL_ASSASIN#Spirit of the Assasin#
+4049,458,5,445,1,0,0,0,0,0,0,0,0 //SL_BLACKSMITH#Spirit of the Blacksmith#
+4049,460,5,455,1,0,0,0,0,0,0,0,0 //SL_HUNTER#Spirit of the Hunter#
+4049,461,5,448,1,0,0,0,0,0,0,0,0 //SL_SOULLINKER#Spirit of the Soul Linker#
+4049,462,7,454,1,0,0,0,0,0,0,0,0 //SL_KAIZEL#Kaizel#
+4049,463,7,454,1,450,1,0,0,0,0,0,0 //SL_KAAHI#Kahai#
+4049,464,3,456,1,0,0,0,0,0,0,0,0 //SL_KAUPE#Kauf#
+4049,465,7,453,1,0,0,0,0,0,0,0,0 //SL_KAITE#Kaite#
+4049,466,7,423,1,0,0,0,0,0,0,0,0 //SL_KAINA#Kaina#
+4049,467,7,453,1,0,0,0,0,0,0,0,0 //SL_STIN#Estin#
+4049,468,7,453,1,0,0,0,0,0,0,0,0 //SL_STUN#Estern#
+4049,469,10,467,7,468,7,0,0,0,0,0,0 //SL_SMA#Esma#
+4049,470,7,454,1,0,0,0,0,0,0,0,0 //SL_SWOO#Esu#
+4049,471,3,452,1,0,0,0,0,0,0,0,0 //SL_SKE#Esk#
+4049,472,3,447,1,0,0,0,0,0,0,0,0 //SL_SKA#Eska#
+4049,494,5,451,1,0,0,0,0,0,0,0,0 //SL_HIGH#Spirit of Rebirth#
4049,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
4049,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Rune Knight
+//Rune Knight (non-trans)
4054,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
4054,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
4054,2,10,0,0,0,0,0,0,0,0,0,0 //SM_SWORD#Sword Mastery#
@@ -2285,24 +2287,24 @@
4054,63,1,8,1,0,0,0,0,0,0,0,0 //KN_RIDING#Peco Peco Riding#
4054,64,5,63,1,0,0,0,0,0,0,0,0 //KN_CAVALIERMASTERY#Cavalier Mastery#
4054,1001,1,0,0,0,0,0,0,0,0,0,0 //KN_CHARGEATK#Charge Attack#
-4054,495,1,60,10,0,0,0,0,0,0,0,0 //KN_ONEHAND#Onehand Quicken#
+4054,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
+4054,495,1,60,10,0,0,0,0,0,0,0,0 //KN_ONEHAND#Onehand Quicken#
+4054,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
4054,2001,5,2010,2,0,0,0,0,0,0,0,0 //RK_ENCHANTBLADE#Enchant Blade#
4054,2002,5,2001,3,0,0,0,0,0,0,0,0 //RK_SONICWAVE#Sonic Wave#
4054,2003,10,61,1,2001,2,0,0,0,0,0,0 //RK_DEATHBOUND#Death Bound#
-4054,2004,10,2020,3,0,0,0,0,0,0,0,0 //RK_HUNDREDSPEAR#Hundred Spears#
+4054,2004,10,2020,3,0,0,0,0,0,0,0,0 //RK_HUNDREDSPEAR#Hundred Spear#
4054,2005,5,2001,5,0,0,0,0,0,0,0,0 //RK_WINDCUTTER#Wind Cutter#
4054,2006,5,2002,2,2003,5,2005,3,0,0,0,0 //RK_IGNITIONBREAK#Ignition Break#
4054,2007,5,64,1,0,0,0,0,0,0,0,0 //RK_DRAGONTRAINING#Dragon Training#
4054,2008,10,2007,2,0,0,0,0,0,0,0,0 //RK_DRAGONBREATH#Dragon Breath#
4054,2009,5,2007,2,0,0,0,0,0,0,0,0 //RK_DRAGONHOWLING#Dragon Howling#
4054,2010,10,0,0,0,0,0,0,0,0,0,0 //RK_RUNEMASTERY#Rune Mastery#
-4054,2020,5,57,2,0,0,0,0,0,0,0,0, //RK_PHANTOMTHRUST#Phantom Thrust#
-4054,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4054,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Warlock
+4054,2020,5,57,2,0,0,0,0,0,0,0,0 //RK_PHANTOMTHRUST#Phantom Thrust#
+//Warlock (non-trans)
4055,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
4055,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4055,4055,10,0,0,0,0,0,0,0,0,0,0 //MG_SRECOVERY#Increase SP Recovery#
+4055,9,10,0,0,0,0,0,0,0,0,0,0 //MG_SRECOVERY#Increase SP Recovery#
4055,10,1,0,0,0,0,0,0,0,0,0,0 //MG_SIGHT#Sight#
4055,11,10,0,0,0,0,0,0,0,0,0,0 //MG_NAPALMBEAT#Napalm Beat#
4055,12,10,11,7,13,5,0,0,0,0,0,0 //MG_SAFETYWALL#Safety Wall#
@@ -2330,15 +2332,17 @@
4055,92,5,91,1,0,0,0,0,0,0,0,0 //WZ_QUAGMIRE#Quagmire#
4055,93,1,0,0,0,0,0,0,0,0,0,0 //WZ_ESTIMATION#Sense#
4055,1006,1,0,0,0,0,0,0,0,0,0,0 //WZ_SIGHTBLASTER#Sight Blaster#
+4055,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
+4055,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
4055,2201,5,2202,3,0,0,0,0,0,0,0,0 //WL_WHITEIMPRISON#White Imprison#
4055,2202,5,2210,1,0,0,0,0,0,0,0,0 //WL_SOULEXPANSION#Soul Expansion#
-4055,2203,5,2224,1,0,0,0,0,0,0,0,0 //WL_FROSTMISTY#Frost Misty#
+4055,2203,5,2224,1,0,0,0,0,0,0,0,0 //WL_FROSTMISTY#Frosty Misty#
4055,2204,5,2203,2,0,0,0,0,0,0,0,0 //WL_JACKFROST#Jack Frost#
-4055,2205,5,92,1,0,0,0,0,0,0,0,0 //WL_MARSHOFABYSS#Marsh Of Abyss#
+4055,2205,5,92,1,0,0,0,0,0,0,0,0 //WL_MARSHOFABYSS#Marsh of Abyss#
4055,2206,5,2201,1,2209,1,2230,2,0,0,0,0 //WL_RECOGNIZEDSPELL#Recognized Spell#
4055,2207,5,2229,1,0,0,0,0,0,0,0,0 //WL_SIENNAEXECRATE#Sienna Execrate#
-4055,2208,5,0,0,0,0,0,0,0,0,0,0 //WL_RADIUS#Radius#
-4055,2209,5,2210,1,0,0,0,0,0,0,0,0 //WL_STASIS#Statis#
+4055,2208,3,0,0,0,0,0,0,0,0,0,0 //WL_RADIUS#Radius#
+4055,2209,5,2210,1,0,0,0,0,0,0,0,0 //WL_STASIS#Stasis#
4055,2210,5,2208,1,0,0,0,0,0,0,0,0 //WL_DRAINLIFE#Drain Life#
4055,2211,5,2222,1,0,0,0,0,0,0,0,0 //WL_CRIMSONROCK#Crimson Rock#
4055,2212,5,2211,2,0,0,0,0,0,0,0,0 //WL_HELLINFERNO#Hell Inferno#
@@ -2346,16 +2350,14 @@
4055,2214,5,2223,1,0,0,0,0,0,0,0,0 //WL_CHAINLIGHTNING#Chain Lightning#
4055,2216,5,2207,2,0,0,0,0,0,0,0,0 //WL_EARTHSTRAIN#Earth Strain#
4055,2217,5,2204,5,2212,5,2214,5,2216,5,0,0 //WL_TETRAVORTEX#Tetra Vortex#
-4055,2222,5,83,1,0,0,0,0,0,0,0,0 //WL_SUMMONFB#Call Fire Ball#
-4055,2223,5,85,1,0,0,0,0,0,0,0,0 //WL_SUMMONBL#Call Ball Lightening#
-4055,2224,5,89,1,0,0,0,0,0,0,0,0 //WL_SUMMONWB#Call Water Ball#
-4055,2229,5,91,1,0,0,0,0,0,0,0,0 //WL_SUMMONSTONE#Call Stone#
+4055,2222,5,83,1,0,0,0,0,0,0,0,0 //WL_SUMMONFB#Summon Fire Ball#
+4055,2223,5,85,1,0,0,0,0,0,0,0,0 //WL_SUMMONBL#Summon Lightning Ball#
+4055,2224,5,89,1,0,0,0,0,0,0,0,0 //WL_SUMMONWB#Summon Water Ball#
+4055,2229,5,91,1,0,0,0,0,0,0,0,0 //WL_SUMMONSTONE#Summon Stone#
4055,2230,2,0,0,0,0,0,0,0,0,0,0 //WL_RELEASE#Release#
-4055,2231,1,0,0,0,0,0,0,0,0,0,0 //WL_READING_SB#Reading Spell Book#
-4055,2232,5,0,0,0,0,0,0,0,0,0,0 //WL_FREEZE_SP#Freezing Spell#
-4055,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4055,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Ranger
+4055,2231,1,0,0,0,0,0,0,0,0,0,0 //WL_READING_SB#Reading Spellbook#
+4055,2232,5,0,0,0,0,0,0,0,0,0,0 //WL_FREEZE_SP#Freeze Spell#
+//Ranger (non-trans)
4056,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
4056,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
4056,43,10,0,0,0,0,0,0,0,0,0,0 //AC_OWL#Owl's Eye#
@@ -2383,32 +2385,32 @@
4056,130,4,45,1,127,1,0,0,0,0,0,0 //HT_DETECTING#Detect#
4056,131,5,124,1,127,1,0,0,0,0,0,0 //HT_SPRINGTRAP#Spring Trap#
4056,1009,1,0,0,0,0,0,0,0,0,0,0 //HT_PHANTASMIC#Phantasmic Arrow#
-4056,499,1,46,10,0,0,0,0,0,0,0,0 //HT_POWER#Beast Strafing#
+4056,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
+4056,499,1,46,10,0,0,0,0,0,0,0,0 //HT_POWER#Beast Strafing#
+4056,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
4056,2233,10,2236,5,0,0,0,0,0,0,0,0 //RA_ARROWSTORM#Arrow Storm#
-4056,2234,5,2233,5,2247,1,0,0,0,0,0,0 //RA_FEARBREEZE#Feer Breeze#
-4056,2235,10,0,0,0,0,0,0,0,0,0,0 //RA_RANGERMAIN#Main Ranger#
+4056,2234,5,2233,5,2247,1,0,0,0,0,0,0 //RA_FEARBREEZE#Fear Breeze#
+4056,2235,10,0,0,0,0,0,0,0,0,0,0 //RA_RANGERMAIN#Ranger Main#
4056,2236,10,117,5,0,0,0,0,0,0,0,0 //RA_AIMEDBOLT#Aimed Bolt#
4056,2237,1,2239,3,0,0,0,0,0,0,0,0 //RA_DETONATOR#Detonator#
-4056,2238,5,118,5,0,0,0,0,0,0,0,0 //RA_ELECTRICSHOCKER#Electric Shock#
-4056,2239,5,2248,3,0,0,0,0,0,0,0,0 //RA_CLUSTERBOMB#Bomb Cluster#
-4056,2240,1,0,0,0,0,0,0,0,0,0,0 //RA_WUGMASTERY#Wug Mastery#
-4056,2241,3,2240,1,0,0,0,0,0,0,0,0 //RA_WUGRIDER#Wug Rider#
-4056,2242,1,2241,1,0,0,0,0,0,0,0,0 //RA_WUGDASH#Wug Dash#
-4056,2243,5,2245,1,0,0,0,0,0,0,0,0 //RA_WUGSTRIKE#Wug Strike#
-4056,2244,5,2243,1,0,0,0,0,0,0,0,0 //RA_WUGBITE#Wug Bite#
-4056,2245,10,2240,1,0,0,0,0,0,0,0,0 //RA_TOOTHOFWUG#Tooth of Wug#
-4056,2246,5,2245,3,0,0,0,0,0,0,0,0 //RA_SENSITIVEKEEN#Keen Nose#
+4056,2238,5,118,5,0,0,0,0,0,0,0,0 //RA_ELECTRICSHOCKER#Electric Shocker#
+4056,2239,5,2248,3,0,0,0,0,0,0,0,0 //RA_CLUSTERBOMB#Cluster Bomb#
+4056,2240,1,0,0,0,0,0,0,0,0,0,0 //RA_WUGMASTERY#Warg Mastery#
+4056,2241,3,2240,1,0,0,0,0,0,0,0,0 //RA_WUGRIDER#Warg Rider#
+4056,2242,1,2241,1,0,0,0,0,0,0,0,0 //RA_WUGDASH#Warg Dash#
+4056,2243,5,2245,1,0,0,0,0,0,0,0,0 //RA_WUGSTRIKE#Warg Strike#
+4056,2244,5,2240,1,0,0,0,0,0,0,0,0 //RA_WUGBITE#Warg Bite#
+4056,2245,10,2240,1,0,0,0,0,0,0,0,0 //RA_TOOTHOFWUG#Tooth Of Warg#
+4056,2246,5,2245,3,0,0,0,0,0,0,0,0 //RA_SENSITIVEKEEN#Sensitive Keen#
4056,2247,5,2235,1,0,0,0,0,0,0,0,0 //RA_CAMOUFLAGE#Camouflage#
-4056,2248,5,123,1,124,1,0,0,0,0,0,0 //RA_RESEARCHTRAP#Trap Research#
-4056,2249,1,2248,1,0,0,0,0,0,0,0,0 //RA_MAGENTATRAP#Magneta Trap#
+4056,2248,5,123,1,124,1,0,0,0,0,0,0 //RA_RESEARCHTRAP#Research Trap#
+4056,2249,1,2248,1,0,0,0,0,0,0,0,0 //RA_MAGENTATRAP#Magenta Trap#
4056,2250,1,2248,1,0,0,0,0,0,0,0,0 //RA_COBALTTRAP#Cobalt Trap#
-4056,2251,1,2248,1,0,0,0,0,0,0,0,0 //RA_MAIZETRAP#Maze Trap#
+4056,2251,1,2248,1,0,0,0,0,0,0,0,0 //RA_MAIZETRAP#Maize Trap#
4056,2252,1,2248,1,0,0,0,0,0,0,0,0 //RA_VERDURETRAP#Verdure Trap#
-4056,2253,5,2237,1,0,0,0,0,0,0,0,0 //RA_FIRINGTRAP#Fire Trap#
-4056,2254,5,2237,1,0,0,0,0,0,0,0,0 //RA_ICEBOUNDTRAP#Ice Trap#
-4056,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4056,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Archbishop
+4056,2253,5,2237,1,0,0,0,0,0,0,0,0 //RA_FIRINGTRAP#Firing Trap#
+4056,2254,5,2237,1,0,0,0,0,0,0,0,0 //RA_ICEBOUNDTRAP#Icebound Trap#
+//Arch Bishop (non-trans)
4057,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
4057,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
4057,22,10,0,0,0,0,0,0,0,0,0,0 //AL_DP#Divine Protection#
@@ -2445,34 +2447,34 @@
4057,78,1,76,5,0,0,0,0,0,0,0,0 //PR_LEXAETERNA#Lex Aeterna#
4057,79,10,12,1,78,1,77,3,0,0,0,0 //PR_MAGNUS#Magnus Exorcismus#
4057,1014,1,0,0,0,0,0,0,0,0,0,0 //PR_REDEMPTIO#Redemptio#
+4057,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
+4057,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
4057,2038,5,77,1,0,0,0,0,0,0,0,0 //AB_JUDEX#Judex#
-4057,2039,5,2041,3,0,0,0,0,0,0,0,0 //AB_ANCILLA#Ancilla#
-4057,2040,10,79,1,2038,5,2039,1,0,0,0,0 //AB_ADORAMUS#Adoramus#
-4057,2041,3,34,1,0,0,0,0,0,0,0,0 //AB_CLEMENTIA#Clementia#
-4057,2042,3,29,1,0,0,0,0,0,0,0,0 //AB_CANTO#Cantocandidus#
-4057,2043,3,28,1,0,0,0,0,0,0,0,0 //AB_CHEAL#Coluseo Heal#
-4057,2044,5,2039,1,0,0,0,0,0,0,0,0 //AB_EPICLESIS#Epiclesis#
+4057,2039,1,2041,3,0,0,0,0,0,0,0,0 //AB_ANCILLA#Ancilla#
+4057,2040,10,79,1,2038,1,2039,1,0,0,0,0 //AB_ADORAMUS#Adoramus#
+4057,2041,3,34,1,0,0,0,0,0,0,0,0 //AB_CLEMENTIA#Crementia#
+4057,2042,3,29,1,0,0,0,0,0,0,0,0 //AB_CANTO#Canto Candidus#
+4057,2043,3,28,1,0,0,0,0,0,0,0,0 //AB_CHEAL#Coluceo Heal#
+4057,2044,5,2039,1,2051,1,0,0,0,0,0,0 //AB_EPICLESIS#Epiclesis#
4057,2045,10,73,1,0,0,0,0,0,0,0,0 //AB_PRAEFATIO#Praefatio#
4057,2046,10,2045,5,0,0,0,0,0,0,0,0 //AB_ORATIO#Oratio#
-4057,2047,4,72,1,0,0,0,0,0,0,0,0 //AB_LAUDAAGNUS#Laudaagnus#
-4057,2048,4,2047,2,0,0,0,0,0,0,0,0 //AB_LAUDARAMUS#Laudaramus#
+4057,2047,4,72,1,0,0,0,0,0,0,0,0 //AB_LAUDAAGNUS#Lauda Agnus#
+4057,2048,4,2047,2,0,0,0,0,0,0,0,0 //AB_LAUDARAMUS#Lauda Ramus#
4057,2049,10,2044,1,2053,1,0,0,0,0,0,0 //AB_EUCHARISTICA#Eucharistica#
4057,2050,1,2043,3,0,0,0,0,0,0,0,0 //AB_RENOVATIO#Renovatio#
-4057,2051,5,2050,1,0,0,0,0,0,0,0,0 //AB_HIGHNESSHEAL#High Heal#
+4057,2051,5,2050,1,0,0,0,0,0,0,0,0 //AB_HIGHNESSHEAL#Highness Heal#
4057,2052,5,2048,2,0,0,0,0,0,0,0,0 //AB_CLEARANCE#Clearance#
4057,2053,5,2046,5,2054,5,0,0,0,0,0,0 //AB_EXPIATIO#Expiatio#
4057,2054,10,68,1,0,0,0,0,0,0,0,0 //AB_DUPLELIGHT#Duple Light#
4057,2057,5,2052,1,0,0,0,0,0,0,0,0 //AB_SILENTIUM#Silentium#
4057,2515,5,2044,1,2053,1,0,0,0,0,0,0 //AB_SECRAMENT#Secrament#
-4057,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4057,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Mechanic
+//Mechanic (non-trans)
4058,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
4058,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
4058,36,10,0,0,0,0,0,0,0,0,0,0 //MC_INCCARRY#Enlarge Weight Limit#
4058,37,10,36,3,0,0,0,0,0,0,0,0 //MC_DISCOUNT#Discount#
4058,38,10,37,3,0,0,0,0,0,0,0,0 //MC_OVERCHARGE#Overcharge#
-4058,39,4058,36,5,0,0,0,0,0,0,0,0 //MC_PUSHCART#Pushcart#
+4058,39,10,36,5,0,0,0,0,0,0,0,0 //MC_PUSHCART#Pushcart#
4058,40,1,0,0,0,0,0,0,0,0,0,0 //MC_IDENTIFY#Item Appraisal#
4058,41,10,39,3,0,0,0,0,0,0,0,0 //MC_VENDING#Vending#
4058,42,10,0,0,0,0,0,0,0,0,0,0 //MC_MAMMONITE#Mammonite#
@@ -2502,40 +2504,40 @@
4058,114,5,112,3,113,2,0,0,0,0,0,0 //BS_MAXIMIZE#Maximize Power#
4058,1012,1,0,0,0,0,0,0,0,0,0,0 //BS_UNFAIRLYTRICK#Unfair Trick#
4058,1013,1,0,0,0,0,0,0,0,0,0,0 //BS_GREED#Greed#
-4058,459,1,111,5,0,0,0,0,0,0,0,0 //BS_ADRENALINE2#Full Adrenaline Rush#
-4058,2255,5,0,0,0,0,0,0,0,0,0,0 //NC_MADOLICENCE#Madogear License#
-4058,2256,5,2255,1,0,0,0,0,0,0,0,0 //NC_BOOSTKNUCKLE#Nuckle Boost#
+4058,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
+4058,459,1,111,5,0,0,0,0,0,0,0,0 //BS_ADRENALINE2#Full Adrenaline Rush#
+4058,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
+4058,2255,5,0,0,0,0,0,0,0,0,0,0 //NC_MADOLICENCE#Mado License#
+4058,2256,5,2255,1,0,0,0,0,0,0,0,0 //NC_BOOSTKNUCKLE#Boost Knuckle#
4058,2257,3,2256,2,0,0,0,0,0,0,0,0 //NC_PILEBUNKER#Pile Bunker#
4058,2258,3,2256,2,0,0,0,0,0,0,0,0 //NC_VULCANARM#Vulcan Arm#
-4058,2259,3,2258,1,0,0,0,0,0,0,0,0 //NC_FLAMELAUNCHER#Flame Launcher#
+4058,2259,3,2258,3,0,0,0,0,0,0,0,0 //NC_FLAMELAUNCHER#Flame Launcher#
4058,2260,3,2258,3,0,0,0,0,0,0,0,0 //NC_COLDSLOWER#Cold Slower#
4058,2261,3,2259,2,2260,2,0,0,0,0,0,0 //NC_ARMSCANNON#Arm Cannon#
4058,2262,3,2255,1,0,0,0,0,0,0,0,0 //NC_ACCELERATION#Acceleration#
-4058,2263,1,2262,1,0,0,0,0,0,0,0,0 //NC_HOVERING#Hover#
-4058,2264,1,2263,1,0,0,0,0,0,0,0,0 //NC_F_SIDESLIDE#Front Slide#
-4058,2265,1,2263,1,0,0,0,0,0,0,0,0 //NC_B_SIDESLIDE#Back Slide#
-4058,2266,4,2255,4,0,0,0,0,0,0,0,0 //NC_MAINFRAME#Remodel Mainframe#
-4058,2267,3,2266,2,0,0,0,0,0,0,0,0 //NC_SELFDESTRUCTION#Suicidal Destruction#
-4058,2268,4,2266,2,0,0,0,0,0,0,0,0 //NC_SHAPESHIFT#Shift Shape#
-4058,2269,1,2267,2,0,0,0,0,0,0,0,0 //NC_EMERGENCYCOOL#Cool Emergency#
-4058,2270,1,2268,2,0,0,0,0,0,0,0,0 //NC_INFRAREDSCAN#Infra Red Scan#
+4058,2263,1,2262,1,0,0,0,0,0,0,0,0 //NC_HOVERING#Hovering#
+4058,2264,1,2263,1,0,0,0,0,0,0,0,0 //NC_F_SIDESLIDE#Front-Side Slide#
+4058,2265,1,2263,1,0,0,0,0,0,0,0,0 //NC_B_SIDESLIDE#Back-Side Slide#
+4058,2266,4,2255,4,0,0,0,0,0,0,0,0 //NC_MAINFRAME#Mainframe Restructure#
+4058,2267,3,2266,2,0,0,0,0,0,0,0,0 //NC_SELFDESTRUCTION#Self Destruction#
+4058,2268,4,2266,2,0,0,0,0,0,0,0,0 //NC_SHAPESHIFT#Shape Shift#
+4058,2269,1,2267,2,0,0,0,0,0,0,0,0 //NC_EMERGENCYCOOL#Emergency Cool#
+4058,2270,1,2268,2,0,0,0,0,0,0,0,0 //NC_INFRAREDSCAN#Infrared Scan#
4058,2271,3,2270,1,0,0,0,0,0,0,0,0 //NC_ANALYZE#Analyze#
4058,2272,3,2269,1,0,0,0,0,0,0,0,0 //NC_MAGNETICFIELD#Magnetic Field#
-4058,2273,3,2272,2,0,0,0,0,0,0,0,0 //NC_NEUTRALBARRIER#Magnetic Field#
+4058,2273,3,2272,2,0,0,0,0,0,0,0,0 //NC_NEUTRALBARRIER#Neutral Barrier#
4058,2274,3,2271,3,2273,2,0,0,0,0,0,0 //NC_STEALTHFIELD#Stealth Field#
-4058,2275,5,2255,2,0,0,0,0,0,0,0,0 //NC_REPAIR#Repair#
-4058,2276,10,0,0,0,0,0,0,0,0,0,0 //NC_TRAININGAXE#Axe Mastery#
-4058,2277,5,0,0,0,0,0,0,0,0,0,0 //NC_RESEARCHFE#Fire Earth Research#
+4058,2275,5,2255,1,0,0,0,0,0,0,0,0 //NC_REPAIR#Repair#
+4058,2276,10,0,0,0,0,0,0,0,0,0,0 //NC_TRAININGAXE#Axe Training#
+4058,2277,5,0,0,0,0,0,0,0,0,0,0 //NC_RESEARCHFE#Research Fire/Earth#
4058,2278,5,2276,1,0,0,0,0,0,0,0,0 //NC_AXEBOOMERANG#Axe Boomerang#
4058,2279,5,2278,3,0,0,0,0,0,0,0,0 //NC_POWERSWING#Power Swing#
4058,2280,5,2276,1,0,0,0,0,0,0,0,0 //NC_AXETORNADO#Axe Tornado#
-4058,2281,5,2277,2,0,0,0,0,0,0,0,0 //NC_SILVERSNIPER#FAW Silver Sniper#
-4058,2282,5,2281,2,0,0,0,0,0,0,0,0 //NC_MAGICDECOY#FAW Magic Decoy#
-4058,2283,1,2281,1,0,0,0,0,0,0,0,0 //NC_DISJOINT#FAW divest#
-4058,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4058,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
+4058,2281,5,2277,2,0,0,0,0,0,0,0,0 //NC_SILVERSNIPER#FAW - Silver Sniper#
+4058,2282,5,2277,2,0,0,0,0,0,0,0,0 //NC_MAGICDECOY#FAW - Magic Decoy#
+4058,2283,1,2281,1,0,0,0,0,0,0,0,0 //NC_DISJOINT#FAW Removal#
4058,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store#
-//Guillotine Cross
+//Guillotine Cross (non-trans)
4059,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
4059,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
4059,48,10,0,0,0,0,0,0,0,0,0,0 //TF_DOUBLE#Double Attack#
@@ -2560,26 +2562,26 @@
4059,141,10,139,5,140,5,0,0,0,0,0,0 //AS_SPLASHER#Venom Splasher#
4059,1003,1,0,0,0,0,0,0,0,0,0,0 //AS_SONICACCEL#Sonic Acceleration#
4059,1004,1,0,0,0,0,0,0,0,0,0,0 //AS_VENOMKNIFE#Throw Venom Knife#
-4059,2021,5,138,3,0,0,0,0,0,0,0,0 //GC_VENOMIMPRESS#Venom Impression#
+4059,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
+4059,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
+4059,2021,5,138,3,0,0,0,0,0,0,0,0 //GC_VENOMIMPRESS#Venom Impress#
4059,2022,5,136,10,0,0,0,0,0,0,0,0 //GC_CROSSIMPACT#Cross Impact#
4059,2023,5,2022,3,0,0,0,0,0,0,0,0 //GC_DARKILLUSION#Dark Illusion#
-4059,2024,10,0,0,0,0,0,0,0,0,0,0 //GC_RESEARCHNWPOISON#New Poison Research#
-4059,2025,1,2024,1,0,0,0,0,0,0,0,0 //GC_CREATENEWPOISON#New Poison Creation#
+4059,2024,10,0,0,0,0,0,0,0,0,0,0 //GC_RESEARCHNEWPOISON#Research New Poison#
+4059,2025,1,2024,1,0,0,0,0,0,0,0,0 //GC_CREATENEWPOISON#Create New Poison#
4059,2026,1,2024,5,0,0,0,0,0,0,0,0 //GC_ANTIDOTE#Antidote#
-4059,2027,5,2025,1,0,0,0,0,0,0,0,0 //GC_POISONINGWEAPON#Poisonous Weapon#
+4059,2027,5,2025,1,0,0,0,0,0,0,0,0 //GC_POISONINGWEAPON#Poisoning Weapon#
4059,2028,5,133,5,0,0,0,0,0,0,0,0 //GC_WEAPONBLOCKING#Weapon Blocking#
-4059,2029,5,2028,1,0,0,0,0,0,0,0,0 //GC_COUNTERSLASH#iCounter Slash#
+4059,2029,5,2028,1,0,0,0,0,0,0,0,0 //GC_COUNTERSLASH#Counter Slash#
4059,2030,5,2028,1,0,0,0,0,0,0,0,0 //GC_WEAPONCRUSH#Weapon Crush#
4059,2031,5,2027,3,2028,1,0,0,0,0,0,0 //GC_VENOMPRESSURE#Venom Pressure#
-4059,2032,5,2027,5,2031,5,0,0,0,0,0,0 //GC_POISONSMOKE#Poisonous Smoke#
+4059,2032,5,2027,5,2031,5,0,0,0,0,0,0 //GC_POISONSMOKE#Poison Smoke#
4059,2033,5,135,3,0,0,0,0,0,0,0,0 //GC_CLOAKINGEXCEED#Cloaking Exceed#
4059,2034,1,2023,5,2033,5,0,0,0,0,0,0 //GC_PHANTOMMENACE#Phantom Menace#
4059,2035,5,2034,1,0,0,0,0,0,0,0,0 //GC_HALLUCINATIONWALK#Hallucination Walk#
4059,2036,5,136,10,0,0,0,0,0,0,0,0 //GC_ROLLINGCUTTER#Rolling Cutter#
4059,2037,5,2036,1,0,0,0,0,0,0,0,0 //GC_CROSSRIPPERSLASHER#Cross Ripper Slasher#
-4059,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4059,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Rune Knight H
+//Rune Knight (Trans)
4060,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
4060,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
4060,2,10,0,0,0,0,0,0,0,0,0,0 //SM_SWORD#Sword Mastery#
@@ -2607,15 +2609,17 @@
4060,356,10,3,10,6,5,60,3,0,0,0,0 //LK_PARRYING#Parrying#
4060,357,5,4,1,55,5,63,1,0,0,0,0 //LK_CONCENTRATION#Concentration#
4060,358,1,4,10,6,5,8,3,0,0,0,0 //LK_TENSIONRELAX#Relax#
-4060,359,1,50,0,0,0,0,0,0,0,0,0,0 //LK_BERSERK#Frenzy# //It has an extra column after "MaxLevel" for Job Level 50 requirement
+4060,359,1,0,0,0,0,0,0,0,0,0,0 //LK_BERSERK#Frenzy# //Extra column removed. Rune Knights dont require job level 50 to use Berserk.
4060,397,5,55,10,56,5,58,5,63,1,0,0 //LK_SPIRALPIERCE#Spiral Pierce#
4060,398,5,55,9,63,1,0,0,0,0,0,0 //LK_HEADCRUSH#Traumatic Blow#
4060,399,10,55,9,64,3,398,3,0,0,0,0 //LK_JOINTBEAT#Vital Strike#
-4060,495,1,60,10,0,0,0,0,0,0,0,0 //KN_ONEHAND#Onehand Quicken#
+4060,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
+4060,495,1,60,10,0,0,0,0,0,0,0,0 //KN_ONEHAND#Onehand Quicken#
+4060,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
4060,2001,5,2010,2,0,0,0,0,0,0,0,0 //RK_ENCHANTBLADE#Enchant Blade#
4060,2002,5,2001,3,0,0,0,0,0,0,0,0 //RK_SONICWAVE#Sonic Wave#
4060,2003,10,61,1,2001,2,0,0,0,0,0,0 //RK_DEATHBOUND#Death Bound#
-4060,2004,10,2020,3,0,0,0,0,0,0,0,0 //RK_HUNDREDSPEAR#Hundred Spears#
+4060,2004,10,2020,3,0,0,0,0,0,0,0,0 //RK_HUNDREDSPEAR#Hundred Spear#
4060,2005,5,2001,5,0,0,0,0,0,0,0,0 //RK_WINDCUTTER#Wind Cutter#
4060,2006,5,2002,2,2003,5,2005,3,0,0,0,0 //RK_IGNITIONBREAK#Ignition Break#
4060,2007,5,64,1,0,0,0,0,0,0,0,0 //RK_DRAGONTRAINING#Dragon Training#
@@ -2623,9 +2627,7 @@
4060,2009,5,2007,2,0,0,0,0,0,0,0,0 //RK_DRAGONHOWLING#Dragon Howling#
4060,2010,10,0,0,0,0,0,0,0,0,0,0 //RK_RUNEMASTERY#Rune Mastery#
4060,2020,5,57,2,0,0,0,0,0,0,0,0 //RK_PHANTOMTHRUST#Phantom Thrust#
-4060,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4060,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Warlock H
+//Warlock (Trans)
4061,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
4061,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
4061,9,10,0,0,0,0,0,0,0,0,0,0 //MG_SRECOVERY#Increase SP Recovery#
@@ -2662,15 +2664,17 @@
4061,400,5,11,5,0,0,0,0,0,0,0,0 //HW_NAPALMVULCAN#Napalm Vulcan#
4061,483,1,93,1,87,1,0,0,0,0,0,0 //HW_GANBANTEIN#Ganbantein#
4061,484,5,365,1,366,10,92,1,0,0,0,0 //HW_GRAVITATION#Gravitation#
+4061,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
+4061,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
4061,2201,5,2202,3,0,0,0,0,0,0,0,0 //WL_WHITEIMPRISON#White Imprison#
4061,2202,5,2210,1,0,0,0,0,0,0,0,0 //WL_SOULEXPANSION#Soul Expansion#
-4061,2203,5,2224,1,0,0,0,0,0,0,0,0 //WL_FROSTMISTY#Frost Misty#
+4061,2203,5,2224,1,0,0,0,0,0,0,0,0 //WL_FROSTMISTY#Frosty Misty#
4061,2204,5,2203,2,0,0,0,0,0,0,0,0 //WL_JACKFROST#Jack Frost#
-4061,2205,5,92,1,0,0,0,0,0,0,0,0 //WL_MARSHOFABYSS#Marsh Of Abyss#
+4061,2205,5,92,1,0,0,0,0,0,0,0,0 //WL_MARSHOFABYSS#Marsh of Abyss#
4061,2206,5,2201,1,2209,1,2230,2,0,0,0,0 //WL_RECOGNIZEDSPELL#Recognized Spell#
4061,2207,5,2229,1,0,0,0,0,0,0,0,0 //WL_SIENNAEXECRATE#Sienna Execrate#
-4061,2208,5,0,0,0,0,0,0,0,0,0,0 //WL_RADIUS#Radius#
-4061,2209,5,2210,1,0,0,0,0,0,0,0,0 //WL_STASIS#Statis#
+4061,2208,3,0,0,0,0,0,0,0,0,0,0 //WL_RADIUS#Radius#
+4061,2209,5,2210,1,0,0,0,0,0,0,0,0 //WL_STASIS#Stasis#
4061,2210,5,2208,1,0,0,0,0,0,0,0,0 //WL_DRAINLIFE#Drain Life#
4061,2211,5,2222,1,0,0,0,0,0,0,0,0 //WL_CRIMSONROCK#Crimson Rock#
4061,2212,5,2211,2,0,0,0,0,0,0,0,0 //WL_HELLINFERNO#Hell Inferno#
@@ -2678,16 +2682,14 @@
4061,2214,5,2223,1,0,0,0,0,0,0,0,0 //WL_CHAINLIGHTNING#Chain Lightning#
4061,2216,5,2207,2,0,0,0,0,0,0,0,0 //WL_EARTHSTRAIN#Earth Strain#
4061,2217,5,2204,5,2212,5,2214,5,2216,5,0,0 //WL_TETRAVORTEX#Tetra Vortex#
-4061,2222,5,83,1,0,0,0,0,0,0,0,0 //WL_SUMMONFB#Call Fire Ball#
-4061,2223,5,85,1,0,0,0,0,0,0,0,0 //WL_SUMMONBL#Call Ball Lightening#
-4061,2224,5,89,1,0,0,0,0,0,0,0,0 //WL_SUMMONWB#Call Water Ball#
-4061,2229,5,91,1,0,0,0,0,0,0,0,0 //WL_SUMMONSTONE#Call Stone#
+4061,2222,5,83,1,0,0,0,0,0,0,0,0 //WL_SUMMONFB#Summon Fire Ball#
+4061,2223,5,85,1,0,0,0,0,0,0,0,0 //WL_SUMMONBL#Summon Lightning Ball#
+4061,2224,5,89,1,0,0,0,0,0,0,0,0 //WL_SUMMONWB#Summon Water Ball#
+4061,2229,5,91,1,0,0,0,0,0,0,0,0 //WL_SUMMONSTONE#Summon Stone#
4061,2230,2,0,0,0,0,0,0,0,0,0,0 //WL_RELEASE#Release#
-4061,2231,1,0,0,0,0,0,0,0,0,0,0 //WL_READING_SB#Reading Spell Book#
-4061,2232,5,0,0,0,0,0,0,0,0,0,0 //WL_FREEZE_SP#Freezing Spell#
-4061,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4061,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Ranger H
+4061,2231,1,0,0,0,0,0,0,0,0,0,0 //WL_READING_SB#Reading Spellbook#
+4061,2232,5,0,0,0,0,0,0,0,0,0,0 //WL_FREEZE_SP#Freeze Spell#
+//Ranger (Trans)
4062,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
4062,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
4062,43,10,0,0,0,0,0,0,0,0,0,0 //AC_OWL#Owl's Eye#
@@ -2719,32 +2721,32 @@
4062,381,5,128,3,44,5,129,5,127,1,0,0 //SN_FALCONASSAULT#Falcon Assault#
4062,382,5,45,10,46,5,0,0,0,0,0,0 //SN_SHARPSHOOTING#Focused Arrow Strike#
4062,383,10,45,9,0,0,0,0,0,0,0,0 //SN_WINDWALK#Wind Walker#
-4062,499,1,46,10,0,0,0,0,0,0,0,0 //HT_POWER#Beast Strafing#
+4062,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
+4062,499,1,46,10,0,0,0,0,0,0,0,0 //HT_POWER#Beast Strafing#
+4062,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
4062,2233,10,2236,5,0,0,0,0,0,0,0,0 //RA_ARROWSTORM#Arrow Storm#
-4062,2234,5,2233,5,2247,1,0,0,0,0,0,0 //RA_FEARBREEZE#Feer Breeze#
-4062,2235,10,0,0,0,0,0,0,0,0,0,0 //RA_RANGERMAIN#Main Ranger#
+4062,2234,5,2233,5,2247,1,0,0,0,0,0,0 //RA_FEARBREEZE#Fear Breeze#
+4062,2235,10,0,0,0,0,0,0,0,0,0,0 //RA_RANGERMAIN#Ranger Main#
4062,2236,10,117,5,0,0,0,0,0,0,0,0 //RA_AIMEDBOLT#Aimed Bolt#
4062,2237,1,2239,3,0,0,0,0,0,0,0,0 //RA_DETONATOR#Detonator#
-4062,2238,5,118,5,0,0,0,0,0,0,0,0 //RA_ELECTRICSHOCKER#Electric Shock#
-4062,2239,5,2248,3,0,0,0,0,0,0,0,0 //RA_CLUSTERBOMB#Bomb Cluster#
-4062,2240,1,0,0,0,0,0,0,0,0,0,0 //RA_WUGMASTERY#Wug Mastery#
-4062,2241,3,2240,1,0,0,0,0,0,0,0,0 //RA_WUGRIDER#Wug Rider#
-4062,2242,1,2241,1,0,0,0,0,0,0,0,0 //RA_WUGDASH#Wug Dash#
-4062,2243,5,2245,1,0,0,0,0,0,0,0,0 //RA_WUGSTRIKE#Wug Strike#
-4062,2244,5,2243,1,0,0,0,0,0,0,0,0 //RA_WUGBITE#Wug Bite#
-4062,2245,10,2240,1,0,0,0,0,0,0,0,0 //RA_TOOTHOFWUG#Tooth of Wug#
-4062,2246,5,2245,3,0,0,0,0,0,0,0,0 //RA_SENSITIVEKEEN#Keen Nose#
+4062,2238,5,118,5,0,0,0,0,0,0,0,0 //RA_ELECTRICSHOCKER#Electric Shocker#
+4062,2239,5,2248,3,0,0,0,0,0,0,0,0 //RA_CLUSTERBOMB#Cluster Bomb#
+4062,2240,1,0,0,0,0,0,0,0,0,0,0 //RA_WUGMASTERY#Warg Mastery#
+4062,2241,3,2240,1,0,0,0,0,0,0,0,0 //RA_WUGRIDER#Warg Rider#
+4062,2242,1,2241,1,0,0,0,0,0,0,0,0 //RA_WUGDASH#Warg Dash#
+4062,2243,5,2245,1,0,0,0,0,0,0,0,0 //RA_WUGSTRIKE#Warg Strike#
+4062,2244,5,2240,1,0,0,0,0,0,0,0,0 //RA_WUGBITE#Warg Bite#
+4062,2245,10,2240,1,0,0,0,0,0,0,0,0 //RA_TOOTHOFWUG#Tooth Of Warg#
+4062,2246,5,2245,3,0,0,0,0,0,0,0,0 //RA_SENSITIVEKEEN#Sensitive Keen#
4062,2247,5,2235,1,0,0,0,0,0,0,0,0 //RA_CAMOUFLAGE#Camouflage#
-4062,2248,5,123,1,124,1,0,0,0,0,0,0 //RA_RESEARCHTRAP#Trap Research#
-4062,2249,1,2248,1,0,0,0,0,0,0,0,0 //RA_MAGENTATRAP#Magneta Trap#
+4062,2248,5,123,1,124,1,0,0,0,0,0,0 //RA_RESEARCHTRAP#Research Trap#
+4062,2249,1,2248,1,0,0,0,0,0,0,0,0 //RA_MAGENTATRAP#Magenta Trap#
4062,2250,1,2248,1,0,0,0,0,0,0,0,0 //RA_COBALTTRAP#Cobalt Trap#
-4062,2251,1,2248,1,0,0,0,0,0,0,0,0 //RA_MAIZETRAP#Maze Trap#
+4062,2251,1,2248,1,0,0,0,0,0,0,0,0 //RA_MAIZETRAP#Maize Trap#
4062,2252,1,2248,1,0,0,0,0,0,0,0,0 //RA_VERDURETRAP#Verdure Trap#
-4062,2253,5,2237,1,0,0,0,0,0,0,0,0 //RA_FIRINGTRAP#Fire Trap#
-4062,2254,5,2237,1,0,0,0,0,0,0,0,0 //RA_ICEBOUNDTRAP#Ice Trap#
-4062,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4062,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Archbiship H
+4062,2253,5,2237,1,0,0,0,0,0,0,0,0 //RA_FIRINGTRAP#Firing Trap#
+4062,2254,5,2237,1,0,0,0,0,0,0,0,0 //RA_ICEBOUNDTRAP#Icebound Trap#
+//Arch Bishop (Trans)
4063,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
4063,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
4063,22,10,0,0,0,0,0,0,0,0,0,0 //AL_DP#Divine Protection#
@@ -2785,28 +2787,28 @@
4063,362,5,75,2,9,1,73,3,0,0,0,0 //HP_BASILICA#Basilica#
4063,363,10,68,3,9,5,76,5,0,0,0,0 //HP_MEDITATIO#Meditatio#
4063,481,5,65,10,23,10,0,0,0,0,0,0 //HP_MANARECHARGE#Mana Recharge#
+4063,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
+4063,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
4063,2038,5,77,1,0,0,0,0,0,0,0,0 //AB_JUDEX#Judex#
-4063,2039,5,2041,3,0,0,0,0,0,0,0,0 //AB_ANCILLA#Ancilla#
-4063,2040,10,79,1,2038,5,2039,1,0,0,0,0 //AB_ADORAMUS#Adoramus#
-4063,2041,3,34,1,0,0,0,0,0,0,0,0 //AB_CLEMENTIA#Clementia#
-4063,2042,3,29,1,0,0,0,0,0,0,0,0 //AB_CANTO#Cantocandidus#
-4063,2043,3,28,1,0,0,0,0,0,0,0,0 //AB_CHEAL#Coluseo Heal#
-4063,2044,5,2039,1,0,0,0,0,0,0,0,0 //AB_EPICLESIS#Epiclesis#
+4063,2039,1,2041,3,0,0,0,0,0,0,0,0 //AB_ANCILLA#Ancilla#
+4063,2040,10,79,1,2038,1,2039,1,0,0,0,0 //AB_ADORAMUS#Adoramus#
+4063,2041,3,34,1,0,0,0,0,0,0,0,0 //AB_CLEMENTIA#Crementia#
+4063,2042,3,29,1,0,0,0,0,0,0,0,0 //AB_CANTO#Canto Candidus#
+4063,2043,3,28,1,0,0,0,0,0,0,0,0 //AB_CHEAL#Coluceo Heal#
+4063,2044,5,2039,1,2051,1,0,0,0,0,0,0 //AB_EPICLESIS#Epiclesis#
4063,2045,10,73,1,0,0,0,0,0,0,0,0 //AB_PRAEFATIO#Praefatio#
4063,2046,10,2045,5,0,0,0,0,0,0,0,0 //AB_ORATIO#Oratio#
-4063,2047,4,72,1,0,0,0,0,0,0,0,0 //AB_LAUDAAGNUS#Laudaagnus#
-4063,2048,4,2047,2,0,0,0,0,0,0,0,0 //AB_LAUDARAMUS#Laudaramus#
+4063,2047,4,72,1,0,0,0,0,0,0,0,0 //AB_LAUDAAGNUS#Lauda Agnus#
+4063,2048,4,2047,2,0,0,0,0,0,0,0,0 //AB_LAUDARAMUS#Lauda Ramus#
4063,2049,10,2044,1,2053,1,0,0,0,0,0,0 //AB_EUCHARISTICA#Eucharistica#
4063,2050,1,2043,3,0,0,0,0,0,0,0,0 //AB_RENOVATIO#Renovatio#
-4063,2051,5,2050,1,0,0,0,0,0,0,0,0 //AB_HIGHNESSHEAL#High Heal#
+4063,2051,5,2050,1,0,0,0,0,0,0,0,0 //AB_HIGHNESSHEAL#Highness Heal#
4063,2052,5,2048,2,0,0,0,0,0,0,0,0 //AB_CLEARANCE#Clearance#
4063,2053,5,2046,5,2054,5,0,0,0,0,0,0 //AB_EXPIATIO#Expiatio#
4063,2054,10,68,1,0,0,0,0,0,0,0,0 //AB_DUPLELIGHT#Duple Light#
4063,2057,5,2052,1,0,0,0,0,0,0,0,0 //AB_SILENTIUM#Silentium#
4063,2515,5,2044,1,2053,1,0,0,0,0,0,0 //AB_SECRAMENT#Secrament#
-4063,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4063,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Mechanic H
+//Mechanic (Trans)
4064,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
4064,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
4064,36,10,0,0,0,0,0,0,0,0,0,0 //MC_INCCARRY#Enlarge Weight Limit#
@@ -2847,40 +2849,40 @@
4064,477,10,107,10,0,0,0,0,0,0,0,0 //WS_WEAPONREFINE#Upgrade Weapon#
4064,485,10,42,10,110,5,387,1,0,0,0,0 //WS_CARTTERMINATION#Cart Termination#
4064,486,5,113,5,0,0,0,0,0,0,0,0 //WS_OVERTHRUSTMAX#Maximum Power Thrust#
-4064,459,1,111,5,0,0,0,0,0,0,0,0 //BS_ADRENALINE2#Full Adrenaline Rush#
-4064,2255,5,0,0,0,0,0,0,0,0,0,0 //NC_MADOLICENCE#Madogear License#
-4064,2256,5,2255,1,0,0,0,0,0,0,0,0 //NC_BOOSTKNUCKLE#Nuckle Boost#
+4064,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
+4064,459,1,111,5,0,0,0,0,0,0,0,0 //BS_ADRENALINE2#Full Adrenaline Rush#
+4064,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
+4064,2255,5,0,0,0,0,0,0,0,0,0,0 //NC_MADOLICENCE#Mado License#
+4064,2256,5,2255,1,0,0,0,0,0,0,0,0 //NC_BOOSTKNUCKLE#Boost Knuckle#
4064,2257,3,2256,2,0,0,0,0,0,0,0,0 //NC_PILEBUNKER#Pile Bunker#
4064,2258,3,2256,2,0,0,0,0,0,0,0,0 //NC_VULCANARM#Vulcan Arm#
-4064,2259,3,2258,1,0,0,0,0,0,0,0,0 //NC_FLAMELAUNCHER#Flame Launcher#
+4064,2259,3,2258,3,0,0,0,0,0,0,0,0 //NC_FLAMELAUNCHER#Flame Launcher#
4064,2260,3,2258,3,0,0,0,0,0,0,0,0 //NC_COLDSLOWER#Cold Slower#
4064,2261,3,2259,2,2260,2,0,0,0,0,0,0 //NC_ARMSCANNON#Arm Cannon#
4064,2262,3,2255,1,0,0,0,0,0,0,0,0 //NC_ACCELERATION#Acceleration#
-4064,2263,1,2262,1,0,0,0,0,0,0,0,0 //NC_HOVERING#Hover#
-4064,2264,1,2263,1,0,0,0,0,0,0,0,0 //NC_F_SIDESLIDE#Front Slide#
-4064,2265,1,2263,1,0,0,0,0,0,0,0,0 //NC_B_SIDESLIDE#Back Slide#
-4064,2266,4,2255,4,0,0,0,0,0,0,0,0 //NC_MAINFRAME#Remodel Mainframe#
-4064,2267,3,2266,2,0,0,0,0,0,0,0,0 //NC_SELFDESTRUCTION#Suicidal Destruction#
-4064,2268,4,2266,2,0,0,0,0,0,0,0,0 //NC_SHAPESHIFT#Shift Shape#
-4064,2269,1,2267,2,0,0,0,0,0,0,0,0 //NC_EMERGENCYCOOL#Cool Emergency#
-4064,2270,1,2268,2,0,0,0,0,0,0,0,0 //NC_INFRAREDSCAN#Infra Red Scan#
+4064,2263,1,2262,1,0,0,0,0,0,0,0,0 //NC_HOVERING#Hovering#
+4064,2264,1,2263,1,0,0,0,0,0,0,0,0 //NC_F_SIDESLIDE#Front-Side Slide#
+4064,2265,1,2263,1,0,0,0,0,0,0,0,0 //NC_B_SIDESLIDE#Back-Side Slide#
+4064,2266,4,2255,4,0,0,0,0,0,0,0,0 //NC_MAINFRAME#Mainframe Restructure#
+4064,2267,3,2266,2,0,0,0,0,0,0,0,0 //NC_SELFDESTRUCTION#Self Destruction#
+4064,2268,4,2266,2,0,0,0,0,0,0,0,0 //NC_SHAPESHIFT#Shape Shift#
+4064,2269,1,2267,2,0,0,0,0,0,0,0,0 //NC_EMERGENCYCOOL#Emergency Cool#
+4064,2270,1,2268,2,0,0,0,0,0,0,0,0 //NC_INFRAREDSCAN#Infrared Scan#
4064,2271,3,2270,1,0,0,0,0,0,0,0,0 //NC_ANALYZE#Analyze#
4064,2272,3,2269,1,0,0,0,0,0,0,0,0 //NC_MAGNETICFIELD#Magnetic Field#
-4064,2273,3,2272,2,0,0,0,0,0,0,0,0 //NC_NEUTRALBARRIER#Magnetic Field#
+4064,2273,3,2272,2,0,0,0,0,0,0,0,0 //NC_NEUTRALBARRIER#Neutral Barrier#
4064,2274,3,2271,3,2273,2,0,0,0,0,0,0 //NC_STEALTHFIELD#Stealth Field#
-4064,2275,5,2255,2,0,0,0,0,0,0,0,0 //NC_REPAIR#Repair#
-4064,2276,10,0,0,0,0,0,0,0,0,0,0 //NC_TRAININGAXE#Axe Mastery#
-4064,2277,5,0,0,0,0,0,0,0,0,0,0 //NC_RESEARCHFE#Fire Earth Research#
+4064,2275,5,2255,1,0,0,0,0,0,0,0,0 //NC_REPAIR#Repair#
+4064,2276,10,0,0,0,0,0,0,0,0,0,0 //NC_TRAININGAXE#Axe Training#
+4064,2277,5,0,0,0,0,0,0,0,0,0,0 //NC_RESEARCHFE#Research Fire/Earth#
4064,2278,5,2276,1,0,0,0,0,0,0,0,0 //NC_AXEBOOMERANG#Axe Boomerang#
4064,2279,5,2278,3,0,0,0,0,0,0,0,0 //NC_POWERSWING#Power Swing#
4064,2280,5,2276,1,0,0,0,0,0,0,0,0 //NC_AXETORNADO#Axe Tornado#
-4064,2281,5,2277,2,0,0,0,0,0,0,0,0 //NC_SILVERSNIPER#FAW Silver Sniper#
-4064,2282,5,2281,2,0,0,0,0,0,0,0,0 //NC_MAGICDECOY#FAW Magic Decoy#
-4064,2283,1,2281,1,0,0,0,0,0,0,0,0 //NC_DISJOINT#FAW divest#
-4064,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4064,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
+4064,2281,5,2277,2,0,0,0,0,0,0,0,0 //NC_SILVERSNIPER#FAW - Silver Sniper#
+4064,2282,5,2277,2,0,0,0,0,0,0,0,0 //NC_MAGICDECOY#FAW - Magic Decoy#
+4064,2283,1,2281,1,0,0,0,0,0,0,0,0 //NC_DISJOINT#FAW Removal#
4064,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store#
-//Guillotine Cross H
+//Guillotine Cross (Trans)
4065,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
4065,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
4065,48,10,0,0,0,0,0,0,0,0,0,0 //TF_DOUBLE#Double Attack#
@@ -2910,2251 +2912,22 @@
4065,379,10,48,5,135,3,138,6,52,5,0,0 //ASC_BREAKER#Soul Destroyer#
4065,406,10,132,3,134,5,136,5,379,1,0,0 //ASC_METEORASSAULT#Meteor Assault#
4065,407,1,52,10,53,1,138,5,0,0,0,0 //ASC_CDP#Create Deadly Poison#
-4065,2021,5,138,3,0,0,0,0,0,0,0,0 //GC_VENOMIMPRESS#Venom Impression#
+4065,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
+4065,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
+4065,2021,5,138,3,0,0,0,0,0,0,0,0 //GC_VENOMIMPRESS#Venom Impress#
4065,2022,5,136,10,0,0,0,0,0,0,0,0 //GC_CROSSIMPACT#Cross Impact#
4065,2023,5,2022,3,0,0,0,0,0,0,0,0 //GC_DARKILLUSION#Dark Illusion#
-4065,2024,10,0,0,0,0,0,0,0,0,0,0 //GC_RESEARCHNWPOISON#New Poison Research#
-4065,2025,1,2024,1,0,0,0,0,0,0,0,0 //GC_CREATENEWPOISON#New Poison Creation#
+4065,2024,10,0,0,0,0,0,0,0,0,0,0 //GC_RESEARCHNEWPOISON#Research New Poison#
+4065,2025,1,2024,1,0,0,0,0,0,0,0,0 //GC_CREATENEWPOISON#Create New Poison#
4065,2026,1,2024,5,0,0,0,0,0,0,0,0 //GC_ANTIDOTE#Antidote#
-4065,2027,5,2025,1,0,0,0,0,0,0,0,0 //GC_POISONINGWEAPON#Poisonous Weapon#
+4065,2027,5,2025,1,0,0,0,0,0,0,0,0 //GC_POISONINGWEAPON#Poisoning Weapon#
4065,2028,5,133,5,0,0,0,0,0,0,0,0 //GC_WEAPONBLOCKING#Weapon Blocking#
4065,2029,5,2028,1,0,0,0,0,0,0,0,0 //GC_COUNTERSLASH#Counter Slash#
4065,2030,5,2028,1,0,0,0,0,0,0,0,0 //GC_WEAPONCRUSH#Weapon Crush#
4065,2031,5,2027,3,2028,1,0,0,0,0,0,0 //GC_VENOMPRESSURE#Venom Pressure#
-4065,2032,5,2027,5,2031,5,0,0,0,0,0,0 //GC_POISONSMOKE#Poisonous Smoke#
+4065,2032,5,2027,5,2031,5,0,0,0,0,0,0 //GC_POISONSMOKE#Poison Smoke#
4065,2033,5,135,3,0,0,0,0,0,0,0,0 //GC_CLOAKINGEXCEED#Cloaking Exceed#
4065,2034,1,2023,5,2033,5,0,0,0,0,0,0 //GC_PHANTOMMENACE#Phantom Menace#
4065,2035,5,2034,1,0,0,0,0,0,0,0,0 //GC_HALLUCINATIONWALK#Hallucination Walk#
4065,2036,5,136,10,0,0,0,0,0,0,0,0 //GC_ROLLINGCUTTER#Rolling Cutter#
-4065,2037,5,2036,1,0,0,0,0,0,0,0,0 //GC_CROSSRIPPERSLASHER#Cross Ripper Slasher#
-4065,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4065,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Royal Guard
-4066,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4066,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4066,2,10,0,0,0,0,0,0,0,0,0,0 //SM_SWORD#Sword Mastery#
-4066,3,10,2,1,0,0,0,0,0,0,0,0 //SM_TWOHAND#Two-Handed Sword Mastery#
-4066,4,10,0,0,0,0,0,0,0,0,0,0 //SM_RECOVERY#Increase HP Recovery#
-4066,5,10,0,0,0,0,0,0,0,0,0,0 //SM_BASH#Bash#
-4066,6,10,0,0,0,0,0,0,0,0,0,0 //SM_PROVOKE#Provoke#
-4066,7,10,5,5,0,0,0,0,0,0,0,0 //SM_MAGNUM#Magnum Break#
-4066,8,10,6,5,0,0,0,0,0,0,0,0 //SM_ENDURE#Endure#
-4066,144,1,0,0,0,0,0,0,0,0,0,0 //SM_MOVINGRECOVERY#Moving HP-Recovery#
-4066,145,1,0,0,0,0,0,0,0,0,0,0 //SM_FATALBLOW#Attack Weak Point#
-4066,146,1,0,0,0,0,0,0,0,0,0,0 //SM_AUTOBERSERK#Auto Berserk#
-4066,63,1,8,1,0,0,0,0,0,0,0,0 //KN_RIDING#Peco Peco Riding#
-4066,64,5,63,1,0,0,0,0,0,0,0,0 //KN_CAVALIERMASTERY#Cavalier Mastery#
-4066,55,10,0,0,0,0,0,0,0,0,0,0 //KN_SPEARMASTERY#Spear Mastery#
-4066,35,1,248,5,0,0,0,0,0,0,0,0 //AL_CURE#Cure#
-4066,22,10,35,1,0,0,0,0,0,0,0,0 //AL_DP#Divine Protection#
-4066,23,10,22,3,0,0,0,0,0,0,0,0 //AL_DEMONBANE#Demon Bane#
-4066,28,10,23,5,248,10,0,0,0,0,0,0 //AL_HEAL#Heal#
-4066,248,10,0,0,0,0,0,0,0,0,0,0 //CR_TRUST#Faith#
-4066,249,10,0,0,0,0,0,0,0,0,0,0 //CR_AUTOGUARD#Guard#
-4066,250,5,249,5,0,0,0,0,0,0,0,0 //CR_SHIELDCHARGE#Smite#
-4066,251,5,250,3,0,0,0,0,0,0,0,0 //CR_SHIELDBOOMERANG#Shield Boomerang#
-4066,252,10,251,3,0,0,0,0,0,0,0,0 //CR_REFLECTSHIELD#Shield Reflect#
-4066,253,10,248,7,0,0,0,0,0,0,0,0 //CR_HOLYCROSS#Holy Cross#
-4066,254,10,253,6,248,10,0,0,0,0,0,0 //CR_GRANDCROSS#Grand Cross#
-4066,255,5,252,5,254,4,0,0,0,0,0,0 //CR_DEVOTION#Sacrifice#
-4066,256,5,22,5,28,5,0,0,0,0,0,0 //CR_PROVIDENCE#Resistant Souls#
-4066,257,5,251,1,0,0,0,0,0,0,0,0 //CR_DEFENDER#Defending Aura#
-4066,258,10,55,10,0,0,0,0,0,0,0,0 //CR_SPEARQUICKEN#Spear Quicken#
-4066,1002,1,0,0,0,0,0,0,0,0,0,0 //CR_SHRINK#Shrink#
-4066,2307,5,2312,1,0,0,0,0,0,0,0,0 //LG_CANNONSPEAR#Cannon Spear#
-4066,2308,10,55,1,0,0,0,0,0,0,0,0 //LG_BANISHINGPOINT#Banishing Point#
-4066,2309,3,0,0,0,0,0,0,0,0,0,0 //LG_TRAMPLE#Trample#
-4066,2310,5,250,3,0,0,0,0,0,0,0,0 //LG_SHIELDPRESS#Shield Press#
-4066,2311,5,252,5,0,0,0,0,0,0,0,0 //LG_REFLECTDAMAGE#Reflect Damage#
-4066,2312,5,2308,5,0,0,0,0,0,0,0,0 //LG_PINPOINTATTACK#Pinpoint Attack#
-4066,2313,5,0,0,0,0,0,0,0,0,0,0 //LG_FORCEOFVANGUARD#Vanguard Force#
-4066,2314,1,2313,1,0,0,0,0,0,0,0,0 //LG_RAGEBURST#Rage Burst Attack#
-4066,2315,3,2310,3,2323,2,0,0,0,0,0,0 //LG_SHIELDSPELL#Shield Spell#
-4066,2316,5,2308,3,0,0,0,0,0,0,0,0 //LG_EXEEDBREAK#Exceed Break#
-4066,2317,5,2312,1,2320,3,0,0,0,0,0,0 //LG_OVERBRAND#Over Brand#
-4066,2318,5,2309,3,0,0,0,0,0,0,0,0 //LG_PRESTIGE#Prestige#
-4066,2319,5,2312,3,2314,1,0,0,0,0,0,0 //LG_BANDING#Banding#
-4066,2320,5,55,1,0,0,0,0,0,0,0,0 //LG_MOONSLASHER#Moon Slasher#
-4066,2321,5,254,5,0,0,0,0,0,0,0,0 //LG_RAYOFGENESIS#Genesis Ray#
-4066,2322,5,248,3,0,0,0,0,0,0,0,0 //LG_PIETY#Piety#
-4066,2323,5,2311,3,0,0,0,0,0,0,0,0 //LG_EARTHDRIVE#Earth Drive#
-4066,2324,5,2318,3,2319,3,0,0,0,0,0,0 //LG_HESPERUSLIT#Hesperus Lit#
-4066,2325,5,2315,3,2321,4,2322,5,0,0,0,0 //LG_INSPIRATION#Inspiration#
-4066,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4066,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Sorcerer
-4067,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4067,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4067,9,10,0,0,0,0,0,0,0,0,0,0 //MG_SRECOVERY#Increase SP Recovery#
-4067,10,1,0,0,0,0,0,0,0,0,0,0 //MG_SIGHT#Sight#
-4067,11,10,0,0,0,0,0,0,0,0,0,0 //MG_NAPALMBEAT#Napalm Beat#
-4067,12,10,11,7,13,5,0,0,0,0,0,0 //MG_SAFETYWALL#Safety Wall#
-4067,13,10,11,4,0,0,0,0,0,0,0,0 //MG_SOULSTRIKE#Soul Strike#
-4067,14,10,0,0,0,0,0,0,0,0,0,0 //MG_COLDBOLT#Cold Bolt#
-4067,15,10,14,5,0,0,0,0,0,0,0,0 //MG_FROSTDIVER#Frost Diver#
-4067,16,10,0,0,0,0,0,0,0,0,0,0 //MG_STONECURSE#Stone Curse#
-4067,17,10,19,4,0,0,0,0,0,0,0,0 //MG_FIREBALL#Fire Ball#
-4067,18,10,17,5,10,1,0,0,0,0,0,0 //MG_FIREWALL#Fire Wall#
-4067,19,10,0,0,0,0,0,0,0,0,0,0 //MG_FIREBOLT#Fire Bolt#
-4067,20,10,0,0,0,0,0,0,0,0,0,0 //MG_LIGHTNINGBOLT#Lightning Bolt#
-4067,21,10,20,4,0,0,0,0,0,0,0,0 //MG_THUNDERSTORM#Thunderstorm#
-4067,157,1,0,0,0,0,0,0,0,0,0,0 //MG_ENERGYCOAT#Energy Coat#
-4067,93,1,0,0,0,0,0,0,0,0,0,0 //WZ_ESTIMATION#Sense#
-4067,90,5,283,1,0,0,0,0,0,0,0,0 //WZ_EARTHSPIKE#Earth Spike#
-4067,91,5,90,1,0,0,0,0,0,0,0,0 //WZ_HEAVENDRIVE#Heaven's Drive#
-4067,274,10,0,0,0,0,0,0,0,0,0,0 //SA_ADVANCEDBOOK#Study#
-4067,275,5,274,2,0,0,0,0,0,0,0,0 //SA_CASTCANCEL#Cast Cancel#
-4067,276,5,274,4,0,0,0,0,0,0,0,0 //SA_MAGICROD#Magic Rod#
-4067,277,5,276,1,0,0,0,0,0,0,0,0 //SA_SPELLBREAKER#Spell Break#
-4067,278,10,275,1,0,0,0,0,0,0,0,0 //SA_FREECAST#Free Cast#
-4067,279,10,278,4,0,0,0,0,0,0,0,0 //SA_AUTOSPELL#Hindsight#
-4067,280,5,19,1,274,5,0,0,0,0,0,0 //SA_FLAMELAUNCHER#Endow Blaze#
-4067,281,5,14,1,274,5,0,0,0,0,0,0 //SA_FROSTWEAPON#Endow Tsunami#
-4067,282,5,20,1,274,5,0,0,0,0,0,0 //SA_LIGHTNINGLOADER#Endow Tornado#
-4067,283,5,4067,1,274,5,0,0,0,0,0,0 //SA_SEISMICWEAPON#Endow Quake#
-4067,284,5,274,9,0,0,0,0,0,0,0,0 //SA_DRAGONOLOGY#Dragonology#
-4067,285,5,280,2,0,0,0,0,0,0,0,0 //SA_VOLCANO#Volcano#
-4067,286,5,281,2,0,0,0,0,0,0,0,0 //SA_DELUGE#Deluge#
-4067,287,5,282,2,0,0,0,0,0,0,0,0 //SA_VIOLENTGALE#Whirlwind#
-4067,288,5,285,3,286,3,287,3,0,0,0,0 //SA_LANDPROTECTOR#Magnetic Earth#
-4067,289,5,277,3,0,0,0,0,0,0,0,0 //SA_DISPELL#Dispel#
-4067,290,10,279,5,289,1,288,1,0,0,0,0 //SA_ABRACADABRA#Hocus-pocus#
-4067,1007,1,0,0,0,0,0,0,0,0,0,0 //SA_CREATECON#Create Converter#
-4067,1008,1,0,0,0,0,0,0,0,0,0,0 //SA_ELEMENTWATER#Elemental Change Water#
-4067,1017,1,0,0,0,0,0,0,0,0,0,0 //SA_ELEMENTGROUND#Elemental Change Earth#
-4067,1018,1,0,0,0,0,0,0,0,0,0,0 //SA_ELEMENTFIRE#Elemental Change Fire#
-4067,1019,1,0,0,0,0,0,0,0,0,0,0 //SA_ELEMENTWIND#Elemental Change Wind#
-4067,2443,5,285,1,0,0,0,0,0,0,0,0 //SO_FIREWALK#Fire Walk#
-4067,2444,5,287,1,0,0,0,0,0,0,0,0 //SO_ELECTRICWALK#Electric Walk#
-4067,2445,5,279,4,0,0,0,0,0,0,0,0 //SO_SPELLFIST#Fist Spell#
-4067,2446,5,90,5,0,0,0,0,0,0,0,0 //SO_EARTHGRAVE#Earth Grave#
-4067,2447,5,286,3,0,0,0,0,0,0,0,0 //SO_DIAMONDDUST#Diamond Dust#
-4067,2448,5,2450,2,0,0,0,0,0,0,0,0 //SO_POISON_BUSTER#Poison Burst#
-4067,2449,5,289,2,0,0,0,0,0,0,0,0 //SO_PSYCHIC_WAVE#Psychic Wave#
-4067,2450,5,91,5,0,0,0,0,0,0,0,0 //SO_CLOUD_KILL#Killing Cloud#
-4067,2451,5,280,1,281,1,282,1,283,1,0,0 //SO_STRIKING#Striking#
-4067,2452,5,285,1,287,1,0,0,0,0,0,0 //SO_WARMER#Warmer#
-4067,2453,5,288,2,0,0,0,0,0,0,0,0 //SO_VACUUM_EXTREME#Extreme Vacuum#
-4067,2454,5,283,1,287,4,0,0,0,0,0,0 //SO_VARETYR_SPEAR#Varetyr Spear#
-4067,2455,5,2452,2,0,0,0,0,0,0,0,0 //SO_ARRULLO#Arrullo#
-4067,2456,3,2462,1,0,0,0,0,0,0,0,0 //SO_EL_CONTROL#Spirit Control#
-4067,2457,3,2452,3,2456,1,0,0,0,0,0,0 //SO_SUMMON_AGNI#Call Agni#
-4067,2458,3,2447,3,2456,1,0,0,0,0,0,0 //SO_SUMMON_AQUA#Call Aqua#
-4067,2459,3,2454,3,2456,1,0,0,0,0,0,0 //SO_SUMMON_VENTUS#Call Ventus#
-4067,2460,3,2446,3,2456,1,0,0,0,0,0,0 //SO_SUMMON_TERA#Call Tera#
-4067,2461,1,2456,3,0,0,0,0,0,0,0,0 //SO_EL_ACTION#Elemental Action#
-4067,2462,2,280,1,281,1,282,1,283,1,0,0 //SO_EL_ANALYSIS#Four Spirits Analysis#
-4067,2463,5,2456,3,0,0,0,0,0,0,0,0 //SO_EL_SYMPATHY#Spirit Sympathy#
-4067,2464,1,2463,1,0,0,0,0,0,0,0,0 //SO_EL_CURE#Spirit Recovery#
-4067,2465,3,2457,3,0,0,0,0,0,0,0,0 //SO_FIRE_INSIGNIA#Fire Insignia#
-4067,2466,3,2458,3,0,0,0,0,0,0,0,0 //SO_WATER_INSIGNIA#Water Insignia#
-4067,2467,3,2459,3,0,0,0,0,0,0,0,0 //SO_WIND_INSIGNIA#Wind Insignia#
-4067,2468,3,2460,3,0,0,0,0,0,0,0,0 //SO_EARTH_INSIGNIA#Earth Insignia#
-4067,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4067,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Minstrel
-4068,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4068,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4068,43,10,0,0,0,0,0,0,0,0,0,0 //AC_OWL#Owl's Eye#
-4068,44,10,43,3,0,0,0,0,0,0,0,0 //AC_VULTURE#Vulture's Eye#
-4068,45,10,44,1,0,0,0,0,0,0,0,0 //AC_CONCENTRATION#Improve Concentration#
-4068,46,10,0,0,0,0,0,0,0,0,0,0 //AC_DOUBLE#Double Strafe#
-4068,47,10,46,5,0,0,0,0,0,0,0,0 //AC_SHOWER#Arrow Shower#
-4068,147,1,0,0,0,0,0,0,0,0,0,0 //AC_MAKINGARROW#Arrow Crafting#
-4068,148,1,0,0,0,0,0,0,0,0,0,0 //AC_CHARGEARROW#Arrow Repel#
-4068,315,10,0,0,0,0,0,0,0,0,0,0 //BA_MUSICALLESSON#Music Lesson#
-4068,316,5,315,3,0,0,0,0,0,0,0,0 //BA_MUSICALSTRIKE#Melody Strike#
-4068,317,5,315,1,304,1,0,0,0,0,0,0 //BA_DISSONANCE#Unchained Serenade#
-4068,318,5,305,1,0,0,0,0,0,0,0,0 //BA_FROSTJOKE#Unbarring Octave#
-4068,319,10,317,3,0,0,0,0,0,0,0,0 //BA_WHISTLE#Perfect Tablature#
-4068,320,10,317,3,0,0,0,0,0,0,0,0 //BA_ASSASSINCROSS#Impressive Riff#
-4068,321,10,317,3,0,0,0,0,0,0,0,0 //BA_POEMBRAGI#Magic Strings#
-4068,322,10,317,3,0,0,0,0,0,0,0,0 //BA_APPLEIDUN#Song of Lutie#
-4068,304,1,0,0,0,0,0,0,0,0,0,0 //BD_ADAPTATION#Amp#
-4068,305,1,304,1,0,0,0,0,0,0,0,0 //BD_ENCORE#Encore#
-4068,306,1,319,10,0,0,0,0,0,0,0,0 //BD_LULLABY#Lullaby#
-4068,307,5,313,3,0,0,0,0,0,0,0,0 //BD_RICHMANKIM#Mental Sensing#
-4068,308,1,311,1,0,0,0,0,0,0,0,0 //BD_ETERNALCHAOS#Down Tempo#
-4068,309,5,322,10,0,0,0,0,0,0,0,0 //BD_DRUMBATTLEFIELD#Battle Theme#
-4068,310,5,309,3,0,0,0,0,0,0,0,0 //BD_RINGNIBELUNGEN#Harmonic Lick#
-4068,311,1,320,10,0,0,0,0,0,0,0,0 //BD_ROKISWEIL#Classical Pluck#
-4068,312,1,306,1,0,0,0,0,0,0,0,0 //BD_INTOABYSS#Power Chord#
-4068,313,5,321,10,0,0,0,0,0,0,0,0 //BD_SIEGFRIED#Acoustic Rhythm#
-4068,1010,1,0,0,0,0,0,0,0,0,0,0 //BA_PANGVOICE#Pang Voice#
-4068,2381,5,2422,1,0,0,0,0,0,0,0,0 //MI_RUSH_WINDMILL#Rush To Windmill#
-4068,2382,5,2422,1,0,0,0,0,0,0,0,0 //MI_ECHOSONG#Echo Song#
-4068,2383,5,2422,1,0,0,0,0,0,0,0,0 //MI_HARMONIZE#Harmonize#
-4068,2412,10,0,0,0,0,0,0,0,0,0,0 //WM_LESSON#Lesson#
-4068,2413,5,2417,1,0,0,0,0,0,0,0,0 //WM_METALICSOUND#Metalic Sound#
-4068,2414,5,317,5,0,0,0,0,0,0,0,0 //WM_REVERBERATION#Reverberation#
-4068,2417,1,2414,1,0,0,0,0,0,0,0,0 //WM_DOMINION_IMPULSE#Dominion Impulse#
-4068,2418,5,316,5,0,0,0,0,0,0,0,0 //WM_SEVERE_RAINSTORM#Severe Rainstorm#
-4068,2419,5,2412,1,0,0,0,0,0,0,0,0 //WM_POEMOFNETHERWORLD#Despair Song#
-4068,2420,5,2419,3,0,0,0,0,0,0,0,0 //WM_VOICEOFSIREN#Voice Of Siren#
-4068,2421,5,2423,3,0,0,0,0,0,0,0,0 //WM_DEADHILLHERE#At Dead Hill#
-4068,2422,5,2412,1,0,0,0,0,0,0,0,0 //WM_LULLABY_DEEPSLEEP#Lullaby#
-4068,2423,5,2412,1,0,0,0,0,0,0,0,0 //WM_SIRCLEOFNATURE#Circling Nature#
-4068,2424,5,2419,1,0,0,0,0,0,0,0,0 //WM_RANDOMIZESPELL#Formless Spell#
-4068,2425,5,2424,1,0,0,0,0,0,0,0,0 //WM_GLOOMYDAY#Gloomy Shyness#
-4068,2426,5,2413,1,0,0,0,0,0,0,0,0 //WM_GREAT_ECHO#Great Echo#
-4068,2427,5,2381,1,2382,1,2383,1,0,0,0,0 //WM_SONG_OF_MANA#Song Of Mana#
-4068,2428,5,2381,1,2382,1,2383,1,0,0,0,0 //WM_DANCE_WITH_WUG#Dance With Wug#
-4068,2429,5,2430,3,2432,3,0,0,0,0,0,0 //WM_SOUND_OF_DESTRUCTION#Destruction Song#
-4068,2430,5,2428,1,0,0,0,0,0,0,0,0 //WM_SATURDAY_NIGHT_FEVER#Saturday Night Fever#
-4068,2431,5,2381,1,2382,1,2383,1,0,0,0,0 //WM_LERADS_DEW#Lerad's Dew#
-4068,2432,5,2427,1,0,0,0,0,0,0,0,0 //WM_MELODYOFSINK#Sinking Melody#
-4068,2433,5,2431,1,0,0,0,0,0,0,0,0 //WM_BEYOND_OF_WARCRY#Beyound Cry#
-4068,2434,5,2429,1,2433,1,0,0,0,0,0,0 //WM_UNLIMITED_HUMMING_VOICE#Infinite Humming Voice#
-4068,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4068,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//wanderer
-4069,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4069,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4069,43,10,0,0,0,0,0,0,0,0,0,0 //AC_OWL#Owl's Eye#
-4069,44,10,43,3,0,0,0,0,0,0,0,0 //AC_VULTURE#Vulture's Eye#
-4069,45,10,44,1,0,0,0,0,0,0,0,0 //AC_CONCENTRATION#Improve Concentration#
-4069,46,10,0,0,0,0,0,0,0,0,0,0 //AC_DOUBLE#Double Strafe#
-4069,47,10,46,5,0,0,0,0,0,0,0,0 //AC_SHOWER#Arrow Shower#
-4069,147,1,0,0,0,0,0,0,0,0,0,0 //AC_MAKINGARROW#Arrow Crafting#
-4069,148,1,0,0,0,0,0,0,0,0,0,0 //AC_CHARGEARROW#Arrow Repel#
-4069,323,10,0,0,0,0,0,0,0,0,0,0 //DC_DANCINGLESSON#Dance Lessons#
-4069,324,5,323,3,0,0,0,0,0,0,0,0 //DC_THROWARROW#Slinging Arrow#
-4069,325,5,323,1,304,1,0,0,0,0,0,0 //DC_UGLYDANCE#Hip Shaker#
-4069,326,5,305,1,0,0,0,0,0,0,0,0 //DC_SCREAM#Dazzler#
-4069,327,10,325,3,0,0,0,0,0,0,0,0 //DC_HUMMING#Focus Ballet#
-4069,328,10,325,3,0,0,0,0,0,0,0,0 //DC_DONTFORGETME#Slow Grace#
-4069,329,10,325,3,0,0,0,0,0,0,0,0 //DC_FORTUNEKISS#Lady Luck#
-4069,330,10,325,3,0,0,0,0,0,0,0,0 //DC_SERVICEFORYOU#Gypsy's Kiss#
-4069,304,1,0,0,0,0,0,0,0,0,0,0 //BD_ADAPTATION#Amp#
-4069,305,1,304,1,0,0,0,0,0,0,0,0 //BD_ENCORE#Encore#
-4069,306,1,327,10,0,0,0,0,0,0,0,0 //BD_LULLABY#Lullaby#
-4069,307,5,313,3,0,0,0,0,0,0,0,0 //BD_RICHMANKIM#Mental Sensing#
-4069,308,1,311,1,0,0,0,0,0,0,0,0 //BD_ETERNALCHAOS#Down Tempo#
-4069,309,5,330,10,0,0,0,0,0,0,0,0 //BD_DRUMBATTLEFIELD#Battle Theme#
-4069,310,5,309,3,0,0,0,0,0,0,0,0 //BD_RINGNIBELUNGEN#Harmonic Lick#
-4069,311,1,328,10,0,0,0,0,0,0,0,0 //BD_ROKISWEIL#Classical Pluck#
-4069,312,1,306,1,0,0,0,0,0,0,0,0 //BD_INTOABYSS#Power Chord#
-4069,313,5,329,10,0,0,0,0,0,0,0,0 //BD_SIEGFRIED#Acoustic Rhythm#
-4069,1011,1,0,0,0,0,0,0,0,0,0,0 //DC_WINKCHARM#Wink of Charm#
-4069,2350,5,2422,1,0,0,0,0,0,0,0,0 //WA_SWING_DANCE#Swing Dance#
-4069,2351,5,2422,1,0,0,0,0,0,0,0,0 //WA_SYMPHONY_OF_LOVE#Lover Symphony#
-4069,2352,5,2422,1,0,0,0,0,0,0,0,0 //WA_MOONLIT_SERENADE#Moonlight Serenade#
-4069,2412,10,0,0,0,0,0,0,0,0,0,0 //WM_LESSON#Lesson#
-4069,2413,5,2417,1,0,0,0,0,0,0,0,0 //WM_METALICSOUND#Metalic Sound#
-4069,2414,5,325,5,0,0,0,0,0,0,0,0 //WM_REVERBERATION#Reverberation#
-4069,2417,1,2414,1,0,0,0,0,0,0,0,0 //WM_DOMINION_IMPULSE#Dominion Impulse#
-4069,2418,5,324,5,0,0,0,0,0,0,0,0 //WM_SEVERE_RAINSTORM#Severe Rainstorm#
-4069,2419,5,2412,1,0,0,0,0,0,0,0,0 //WM_POEMOFNETHERWORLD#Despair Song#
-4069,2420,5,2419,3,0,0,0,0,0,0,0,0 //WM_VOICEOFSIREN#Voice Of Siren#
-4069,2421,5,2423,3,0,0,0,0,0,0,0,0 //WM_DEADHILLHERE#At Dead Hill#
-4069,2422,5,2412,1,0,0,0,0,0,0,0,0 //WM_LULLABY_DEEPSLEEP#Lullaby#
-4069,2423,5,2412,1,0,0,0,0,0,0,0,0 //WM_SIRCLEOFNATURE#Circling Nature#
-4069,2424,5,2419,1,0,0,0,0,0,0,0,0 //WM_RANDOMIZESPELL#Formless Spell#
-4069,2425,5,2424,1,0,0,0,0,0,0,0,0 //WM_GLOOMYDAY#Gloomy Shyness#
-4069,2426,5,2413,1,0,0,0,0,0,0,0,0 //WM_GREAT_ECHO#Great Echo#
-4069,2427,5,2350,1,2351,1,2352,1,0,0,0,0 //WM_SONG_OF_MANA#Song Of Mana#
-4069,2428,5,2350,1,2351,1,2352,1,0,0,0,0 //WM_DANCE_WITH_WUG#Dance With Wug#
-4069,2429,5,2430,3,2432,3,0,0,0,0,0,0 //WM_SOUND_OF_DESTRUCTION#Destruction Song#
-4069,2430,5,2428,1,0,0,0,0,0,0,0,0 //WM_SATURDAY_NIGHT_FEVER#Saturday Night Fever#
-4069,2431,5,2350,1,2351,1,2352,1,0,0,0,0 //WM_LERADS_DEW#Lerad's Dew#
-4069,2432,5,2427,1,0,0,0,0,0,0,0,0 //WM_MELODYOFSINK#Sinking Melody#
-4069,2433,5,2431,1,0,0,0,0,0,0,0,0 //WM_BEYOND_OF_WARCRY#Beyound Cry#
-4069,2434,5,2429,1,2433,1,0,0,0,0,0,0 //WM_UNLIMITED_HUMMING_VOICE#Infinite Humming Voice#
-4069,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4069,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Sura
-4070,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4070,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4070,22,10,0,0,0,0,0,0,0,0,0,0 //AL_DP#Divine Protection#
-4070,23,10,22,3,0,0,0,0,0,0,0,0 //AL_DEMONBANE#Demon Bane#
-4070,24,1,0,0,0,0,0,0,0,0,0,0 //AL_RUWACH#Ruwach#
-4070,25,1,27,4,0,0,0,0,0,0,0,0 //AL_PNEUMA#Pneuma#
-4070,26,2,24,1,0,0,0,0,0,0,0,0 //AL_TELEPORT#Teleport#
-4070,27,4,26,2,0,0,0,0,0,0,0,0 //AL_WARP#Warp Portal#
-4070,28,10,0,0,0,0,0,0,0,0,0,0 //AL_HEAL#Heal#
-4070,29,10,28,3,0,0,0,0,0,0,0,0 //AL_INCAGI#Increase AGI#
-4070,30,10,29,1,0,0,0,0,0,0,0,0 //AL_DECAGI#Decrease AGI#
-4070,31,1,0,0,0,0,0,0,0,0,0,0 //AL_HOLYWATER#Aqua Benedicta#
-4070,32,10,23,3,0,0,0,0,0,0,0,0 //AL_CRUCIS#Signum Crusis#
-4070,33,10,22,3,0,0,0,0,0,0,0,0 //AL_ANGELUS#Angelus#
-4070,34,10,22,5,0,0,0,0,0,0,0,0 //AL_BLESSING#Blessing#
-4070,35,1,28,2,0,0,0,0,0,0,0,0 //AL_CURE#Cure#
-4070,156,1,0,0,0,0,0,0,0,0,0,0 //AL_HOLYLIGHT#Holy Light#
-4070,259,10,23,10,22,10,0,0,0,0,0,0 //MO_IRONHAND#Iron Fists#
-4070,260,5,269,2,0,0,0,0,0,0,0,0 //MO_SPIRITSRECOVERY#Spiritual Cadence#
-4070,261,5,259,2,0,0,0,0,0,0,0,0 //MO_CALLSPIRITS#Summon Spirit Sphere#
-4070,262,1,261,5,0,0,0,0,0,0,0,0 //MO_ABSORBSPIRITS#Absorb Spirit Sphere#
-4070,263,10,265,5,0,0,0,0,0,0,0,0 //MO_TRIPLEATTACK#Raging Triple Blow#
-4070,264,1,271,3,260,2,268,3,0,0,0,0 //MO_BODYRELOCATION#Snap#
-4070,265,10,259,5,261,5,0,0,0,0,0,0 //MO_DODGE#Dodge#
-4070,266,5,261,5,0,0,0,0,0,0,0,0 //MO_INVESTIGATE#Occult Impact#
-4070,267,5,266,3,0,0,0,0,0,0,0,0 //MO_FINGEROFFENSIVE#Throw Spirit Sphere#
-4070,268,5,273,3,0,0,0,0,0,0,0,0 //MO_STEELBODY#Mental Strength#
-4070,269,5,265,5,0,0,0,0,0,0,0,0 //MO_BLADESTOP#Root#
-4070,270,5,262,1,0,0,0,0,0,0,0,0 //MO_EXPLOSIONSPIRITS#Fury#
-4070,271,5,270,3,267,3,0,0,0,0,0,0 //MO_EXTREMITYFIST#Asura Strike#
-4070,272,5,263,5,0,0,0,0,0,0,0,0 //MO_CHAINCOMBO#Raging Quadruple Blow#
-4070,273,5,272,3,0,0,0,0,0,0,0,0 //MO_COMBOFINISH#Raging Thrust#
-4070,1015,1,0,0,0,0,0,0,0,0,0,0 //MO_KITRANSLATION#Ki Translation#
-4070,1016,1,0,0,0,0,0,0,0,0,0,0 //MO_BALKYOUNG#Ki Explosion#
-4070,2326,10,263,5,0,0,0,0,0,0,0,0 //SR_DRAGONCOMBO#Dragon Combo#
-4070,2327,5,2326,3,0,0,0,0,0,0,0,0 //SR_SKYNETBLOW#Sky Blow#
-4070,2328,5,2326,1,2334,1,0,0,0,0,0,0 //SR_EARTHSHAKER#Earth Shaker#
-4070,2329,5,2326,1,0,0,0,0,0,0,0,0 //SR_FALLENEMPIRE#Fallen Empire#
-4070,2330,10,2329,3,0,0,0,0,0,0,0,0 //SR_TIGERCANNON#Tiger Cannon#
-4070,2332,5,2328,2,0,0,0,0,0,0,0,0 //SR_RAMPAGEBLASTER#Rampage Blaster#
-4070,2333,5,2327,1,0,0,0,0,0,0,0,0 //SR_CRESCENTELBOW#Crescent Elbow#
-4070,2334,5,269,2,2344,2,0,0,0,0,0,0 //SR_CURSEDCIRCLE#Cursed Circle#
-4070,2335,5,2337,1,0,0,0,0,0,0,0,0 //SR_LIGHTNINGWALK#Lightning Walk#
-4070,2336,5,2332,3,2335,3,0,0,0,0,0,0 //SR_KNUCKLEARROW#Knuckle Arrow#
-4070,2337,1,2334,1,0,0,0,0,0,0,0,0 //SR_WINDMILL#Wind Mill#
-4070,2338,10,2332,3,2346,3,0,0,0,0,0,0 //SR_RAISINGDRAGON#Rising Dragon#
-4070,2340,1,262,1,2341,1,0,0,0,0,0,0 //SR_ASSIMILATEPOWER#Power Absorb#
-4070,2341,1,261,5,0,0,0,0,0,0,0,0 //SR_POWERVELOCITY#Power Implantation#
-4070,2343,10,2330,5,2338,5,0,0,0,0,0,0 //SR_GATEOFHELL#Hell Gate#
-4070,2344,5,2341,1,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_QUIET#Gentle Touch-Silence#
-4070,2345,5,2341,1,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CURE#Gentle Touch-Speed#
-4070,2346,5,2344,3,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_ENERGYGAIN#Gentle Touch-Save#
-4070,2347,5,2345,4,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CHANGE#Gentle Touch-Opposite#
-4070,2348,5,2347,5,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_REVITALIZE#Gentle Touch-Alive#
-4070,2517,5,2340,1,2518,3,0,0,0,0,0,0 //SR_HOWLINGOFLION#Lion Howling#
-4070,2518,5,267,3,0,0,0,0,0,0,0,0 //SR_RIDEINLIGHTNING#Lightning Ride#
-4070,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4070,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Genetic
-4071,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4071,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4071,36,10,0,0,0,0,0,0,0,0,0,0 //MC_INCCARRY#Enlarge Weight Limit#
-4071,37,10,36,3,0,0,0,0,0,0,0,0 //MC_DISCOUNT#Discount#
-4071,38,10,37,3,0,0,0,0,0,0,0,0 //MC_OVERCHARGE#Overcharge#
-4071,39,10,36,5,0,0,0,0,0,0,0,0 //MC_PUSHCART#Pushcart#
-4071,40,1,0,0,0,0,0,0,0,0,0,0 //MC_IDENTIFY#Item Appraisal#
-4071,41,10,39,3,0,0,0,0,0,0,0,0 //MC_VENDING#Vending#
-4071,42,10,0,0,0,0,0,0,0,0,0,0 //MC_MAMMONITE#Mammonite#
-4071,153,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTREVOLUTION#Cart Revolution#
-4071,154,1,0,0,0,0,0,0,0,0,0,0 //MC_CHANGECART#Change Cart#
-4071,155,1,0,0,0,0,0,0,0,0,0,0 //MC_LOUD#Crazy Uproar#
-4071,226,10,0,0,0,0,0,0,0,0,0,0 //AM_AXEMASTERY#Axe Mastery#
-4071,227,10,0,0,0,0,0,0,0,0,0,0 //AM_LEARNINGPOTION#Potion Research#
-4071,228,10,227,5,0,0,0,0,0,0,0,0 //AM_PHARMACY#Prepare Potion#
-4071,229,5,228,4,0,0,0,0,0,0,0,0 //AM_DEMONSTRATION#Bomb#
-4071,230,5,228,5,0,0,0,0,0,0,0,0 //AM_ACIDTERROR#Acid Terror#
-4071,231,5,228,3,0,0,0,0,0,0,0,0 //AM_POTIONPITCHER#Aid Potion#
-4071,232,5,228,6,0,0,0,0,0,0,0,0 //AM_CANNIBALIZE#Summon Flora#
-4071,233,5,228,2,0,0,0,0,0,0,0,0 //AM_SPHEREMINE#Summon Marine Sphere#
-4071,234,5,236,3,0,0,0,0,0,0,0,0 //AM_CP_WEAPON#Alchemical Weapon#
-4071,235,5,237,3,0,0,0,0,0,0,0,0 //AM_CP_SHIELD#Synthesized Shield#
-4071,236,5,235,3,0,0,0,0,0,0,0,0 //AM_CP_ARMOR#Synthetic Armor#
-4071,237,5,228,2,0,0,0,0,0,0,0,0 //AM_CP_HELM#Biochemical Helm#
-4071,238,1,0,0,0,0,0,0,0,0,0,0 //AM_BIOETHICS#Basis of Life#
-4071,243,1,244,1,0,0,0,0,0,0,0,0 //AM_CALLHOMUN#Call Homunculus#
-4071,244,1,238,1,0,0,0,0,0,0,0,0 //AM_REST#Peaceful Rest#
-4071,247,5,243,1,0,0,0,0,0,0,0,0 //AM_RESURRECTHOMUN#Ressurect Homunculus#
-4071,446,1,0,0,0,0,0,0,0,0,0,0 //AM_BERSERKPITCHER#Berserk Pitcher#
-4071,496,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT1#Twilight Alchemy 1#
-4071,497,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT2#Twilight Alchemy 2#
-4071,498,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT3#Twilight Alchemy 3#
-4071,2474,5,0,0,0,0,0,0,0,0,0,0 //GN_TRAINING_SWORD#Sword Mastery#
-4071,2475,5,0,0,0,0,0,0,0,0,0,0 //GN_REMODELING_CART#Cart Remodeling#
-4071,2476,5,2475,1,0,0,0,0,0,0,0,0 //GN_CART_TORNADO#Cart Tornado#
-4071,2477,5,2475,2,0,0,0,0,0,0,0,0 //GN_CARTCANNON#Cart Cannon#
-4071,2478,5,2475,3,0,0,0,0,0,0,0,0 //GN_CARTBOOST#Cart Boost#
-4071,2479,5,2497,2,0,0,0,0,0,0,0,0 //GN_THORNS_TRAP#Thorns Trap#
-4071,2480,5,2497,3,0,0,0,0,0,0,0,0 //GN_BLOOD_SUCKER#Blood Sucker#
-4071,2481,5,2497,4,0,0,0,0,0,0,0,0 //GN_SPORE_EXPLOSION#Spore Explosion#
-4071,2482,5,2479,3,0,0,0,0,0,0,0,0 //GN_WALLOFTHORN#Wall Of Thorn#
-4071,2483,10,2482,3,0,0,0,0,0,0,0,0 //GN_CRAZYWEED#Crazy Weed#
-4071,2485,5,2481,3,0,0,0,0,0,0,0,0 //GN_DEMONIC_FIRE#Demonic Fire#
-4071,2486,5,2485,3,0,0,0,0,0,0,0,0 //GN_FIRE_EXPANSION#Fire Expansion#
-4071,2490,5,2480,3,0,0,0,0,0,0,0,0 //GN_HELLS_PLANT#Hell Plant#
-4071,2492,5,2490,3,0,0,0,0,0,0,0,0 //GN_MANDRAGORA#Mandragora Howling#
-4071,2493,1,2494,1,0,0,0,0,0,0,0,0 //GN_SLINGITEM#Item Sling#
-4071,2494,1,0,0,0,0,0,0,0,0,0,0 //GN_CHANGEMATERIAL#Change Material#
-4071,2495,2,2497,1,0,0,0,0,0,0,0,0 //GN_MIX_COOKING#Mixed Cooking#
-4071,2496,2,2495,1,0,0,0,0,0,0,0,0 //GN_MAKEBOMB#Bomb Creation#
-4071,2497,10,0,0,0,0,0,0,0,0,0,0 //GN_S_PHARMACY#Special Pharmacy#
-4071,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4071,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-4071,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store#
-//Shadow Chaser
-4072,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4072,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4072,48,10,0,0,0,0,0,0,0,0,0,0 //TF_DOUBLE#Double Attack#
-4072,49,10,0,0,0,0,0,0,0,0,0,0 //TF_MISS#Improve Dodge#
-4072,50,10,0,0,0,0,0,0,0,0,0,0 //TF_STEAL#Steal#
-4072,51,10,50,5,0,0,0,0,0,0,0,0 //TF_HIDING#Hiding#
-4072,52,10,0,0,0,0,0,0,0,0,0,0 //TF_POISON#Envenom#
-4072,53,1,52,3,0,0,0,0,0,0,0,0 //TF_DETOXIFY#Detoxify#
-4072,149,1,0,0,0,0,0,0,0,0,0,0 //TF_SPRINKLESAND#Throw Sand#
-4072,150,1,0,0,0,0,0,0,0,0,0,0 //TF_BACKSLIDING#Back Sliding#
-4072,151,1,0,0,0,0,0,0,0,0,0,0 //TF_PICKSTONE#Find Stone#
-4072,152,1,0,0,0,0,0,0,0,0,0,0 //TF_THROWSTONE#Stone Fling#
-4072,2,10,0,0,0,0,0,0,0,0,0,0 //SM_SWORD#Sword Mastery#
-4072,44,10,0,0,0,0,0,0,0,0,0,0 //AC_VULTURE#Vulture's Eye#
-4072,46,10,44,10,0,0,0,0,0,0,0,0 //AC_DOUBLE#Double Strafe#
-4072,124,1,46,5,0,0,0,0,0,0,0,0 //HT_REMOVETRAP#Remove Trap#
-4072,210,10,50,1,0,0,0,0,0,0,0,0 //RG_SNATCHER#Gank#
-4072,211,10,210,4,0,0,0,0,0,0,0,0 //RG_STEALCOIN#Mug#
-4072,212,10,211,4,0,0,0,0,0,0,0,0 //RG_BACKSTAP#Back Stab#
-4072,213,5,51,1,0,0,0,0,0,0,0,0 //RG_TUNNELDRIVE#Stalk#
-4072,214,5,212,2,213,2,0,0,0,0,0,0 //RG_RAID#Sightless Raid#
-4072,215,5,217,5,0,0,0,0,0,0,0,0 //RG_STRIPWEAPON#Divest Weapon#
-4072,216,5,218,5,0,0,0,0,0,0,0,0 //RG_STRIPSHIELD#Divest Shield#
-4072,217,5,216,5,0,0,0,0,0,0,0,0 //RG_STRIPARMOR#Divest Armor#
-4072,218,5,211,2,0,0,0,0,0,0,0,0 //RG_STRIPHELM#Divest Helm#
-4072,219,5,212,4,214,5,0,0,0,0,0,0 //RG_INTIMIDATE#Snatch#
-4072,220,1,221,5,0,0,0,0,0,0,0,0 //RG_GRAFFITI#Scribble#
-4072,221,5,222,1,0,0,0,0,0,0,0,0 //RG_FLAGGRAFFITI#Piece#
-4072,222,1,223,1,0,0,0,0,0,0,0,0 //RG_CLEANER#Remover#
-4072,223,1,216,3,0,0,0,0,0,0,0,0 //RG_GANGSTER#Slyness#
-4072,224,5,223,1,0,0,0,0,0,0,0,0 //RG_COMPULSION#Haggle#
-4072,225,10,219,5,0,0,0,0,0,0,0,0 //RG_PLAGIARISM#Intimidate#
-4072,1005,1,0,0,0,0,0,0,0,0,0,0 //RG_CLOSECONFINE#Close Confine#
-4072,2284,5,219,5,0,0,0,0,0,0,0,0 //SC_FATALMENACE#Fatal Manace#
-4072,2285,10,225,5,0,0,0,0,0,0,0,0 //SC_REPRODUCE#Reproduce#
-4072,2286,10,2285,5,0,0,0,0,0,0,0,0 //SC_AUTOSHADOWSPELL#Auto Shadow Spell#
-4072,2287,5,213,3,0,0,0,0,0,0,0,0 //SC_SHADOWFORM#Shadow Formation#
-4072,2288,10,46,7,0,0,0,0,0,0,0,0 //SC_TRIANGLESHOT#Triangle Shot#
-4072,2289,5,0,0,0,0,0,0,0,0,0,0 //SC_BODYPAINT#Body Painting#
-4072,2290,5,2286,7,2291,5,0,0,0,0,0,0 //SC_INVISIBILITY#Invisibility#
-4072,2291,5,2286,5,2287,3,0,0,0,0,0,0 //SC_DEADLYINFECT#Deadly Infection#
-4072,2292,3,2289,1,0,0,0,0,0,0,0,0 //SC_ENERVATION#Masquerade Enervation#
-4072,2293,3,2289,1,0,0,0,0,0,0,0,0 //SC_GROOMY#Masquerade Groomy#
-4072,2294,3,2289,1,0,0,0,0,0,0,0,0 //SC_IGNORANCE#Masquerade Ignorance#
-4072,2295,3,2292,1,2293,1,2294,1,0,0,0,0 //SC_LAZINESS#Masquerade Laziness#
-4072,2296,3,2295,1,2297,1,0,0,0,0,0,0 //SC_UNLUCKY#Masquerade Unlucky#
-4072,2297,3,2292,1,2293,1,2294,1,0,0,0,0 //SC_WEAKNESS#Masquerade Weakness#
-4072,2298,5,215,1,0,0,0,0,0,0,0,0 //SC_STRIPACCESSARY#Divest Accessory#
-4072,2299,3,221,1,0,0,0,0,0,0,0,0 //SC_MANHOLE#Manhole#
-4072,2300,3,2299,1,0,0,0,0,0,0,0,0 //SC_DIMENSIONDOOR#Dimension Door#
-4072,2301,3,2299,1,0,0,0,0,0,0,0,0 //SC_CHAOSPANIC#Chaos Panic#
-4072,2302,3,2296,3,2301,3,0,0,0,0,0,0 //SC_MAELSTROM#Maelstrom#
-4072,2303,3,2300,3,0,0,0,0,0,0,0,0 //SC_BLOODYLUST#Bloody Lust#
-4072,2304,3,2300,3,0,0,0,0,0,0,0,0 //SC_FEINTBOMB#Feint Bomb#
-4072,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4072,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Royal Guard H
-4073,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4073,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4073,2,10,0,0,0,0,0,0,0,0,0,0 //SM_SWORD#Sword Mastery#
-4073,3,10,2,1,0,0,0,0,0,0,0,0 //SM_TWOHAND#Two-Handed Sword Mastery#
-4073,4,10,0,0,0,0,0,0,0,0,0,0 //SM_RECOVERY#Increase HP Recovery#
-4073,5,10,0,0,0,0,0,0,0,0,0,0 //SM_BASH#Bash#
-4073,6,10,0,0,0,0,0,0,0,0,0,0 //SM_PROVOKE#Provoke#
-4073,7,10,5,5,0,0,0,0,0,0,0,0 //SM_MAGNUM#Magnum Break#
-4073,8,10,6,5,0,0,0,0,0,0,0,0 //SM_ENDURE#Endure#
-4073,144,1,0,0,0,0,0,0,0,0,0,0 //SM_MOVINGRECOVERY#Moving HP-Recovery#
-4073,145,1,0,0,0,0,0,0,0,0,0,0 //SM_FATALBLOW#Attack Weak Point#
-4073,146,1,0,0,0,0,0,0,0,0,0,0 //SM_AUTOBERSERK#Auto Berserk#
-4073,63,1,8,1,0,0,0,0,0,0,0,0 //KN_RIDING#Peco Peco Riding#
-4073,64,5,63,1,0,0,0,0,0,0,0,0 //KN_CAVALIERMASTERY#Cavalier Mastery#
-4073,55,10,0,0,0,0,0,0,0,0,0,0 //KN_SPEARMASTERY#Spear Mastery#
-4073,35,1,248,5,0,0,0,0,0,0,0,0 //AL_CURE#Cure#
-4073,22,10,35,1,0,0,0,0,0,0,0,0 //AL_DP#Divine Protection#
-4073,23,10,22,3,0,0,0,0,0,0,0,0 //AL_DEMONBANE#Demon Bane#
-4073,28,10,23,5,248,10,0,0,0,0,0,0 //AL_HEAL#Heal#
-4073,248,10,0,0,0,0,0,0,0,0,0,0 //CR_TRUST#Faith#
-4073,249,10,0,0,0,0,0,0,0,0,0,0 //CR_AUTOGUARD#Guard#
-4073,250,5,249,5,0,0,0,0,0,0,0,0 //CR_SHIELDCHARGE#Smite#
-4073,251,5,250,3,0,0,0,0,0,0,0,0 //CR_SHIELDBOOMERANG#Shield Boomerang#
-4073,252,10,251,3,0,0,0,0,0,0,0,0 //CR_REFLECTSHIELD#Shield Reflect#
-4073,253,10,248,7,0,0,0,0,0,0,0,0 //CR_HOLYCROSS#Holy Cross#
-4073,254,10,253,6,248,10,0,0,0,0,0,0 //CR_GRANDCROSS#Grand Cross#
-4073,255,5,252,5,254,4,0,0,0,0,0,0 //CR_DEVOTION#Sacrifice#
-4073,256,5,22,5,28,5,0,0,0,0,0,0 //CR_PROVIDENCE#Resistant Souls#
-4073,257,5,251,1,0,0,0,0,0,0,0,0 //CR_DEFENDER#Defending Aura#
-4073,258,10,55,10,0,0,0,0,0,0,0,0 //CR_SPEARQUICKEN#Spear Quicken#
-4073,1002,1,0,0,0,0,0,0,0,0,0,0 //CR_SHRINK#Shrink#
-4073,367,5,8,5,248,5,250,2,0,0,0,0 //PA_PRESSURE#Gloria Domini#
-4073,368,5,8,1,248,5,255,3,0,0,0,0 //PA_SACRIFICE#Martyr's Reckoning#
-4073,369,10,248,8,22,3,23,5,0,0,0,0 //PA_GOSPEL#Battle Chant#
-4073,480,5,251,5,0,0,0,0,0,0,0,0 //PA_SHIELDCHAIN#Shield Chain#
-4073,2307,5,2312,1,0,0,0,0,0,0,0,0 //LG_CANNONSPEAR#Cannon Spear#
-4073,2308,10,55,1,0,0,0,0,0,0,0,0 //LG_BANISHINGPOINT#Banishing Point#
-4073,2309,3,0,0,0,0,0,0,0,0,0,0 //LG_TRAMPLE#Trample#
-4073,2310,5,250,3,0,0,0,0,0,0,0,0 //LG_SHIELDPRESS#Shield Press#
-4073,2311,5,252,5,0,0,0,0,0,0,0,0 //LG_REFLECTDAMAGE#Reflect Damage#
-4073,2312,5,2308,5,0,0,0,0,0,0,0,0 //LG_PINPOINTATTACK#Pinpoint Attack#
-4073,2313,5,0,0,0,0,0,0,0,0,0,0 //LG_FORCEOFVANGUARD#Vanguard Force#
-4073,2314,1,2313,1,0,0,0,0,0,0,0,0 //LG_RAGEBURST#Rage Burst Attack#
-4073,2315,3,2310,3,2323,2,0,0,0,0,0,0 //LG_SHIELDSPELL#Shield Spell#
-4073,2316,5,2308,3,0,0,0,0,0,0,0,0 //LG_EXEEDBREAK#Exceed Break#
-4073,2317,5,2312,1,2320,3,0,0,0,0,0,0 //LG_OVERBRAND#Over Brand#
-4073,2318,5,2309,3,0,0,0,0,0,0,0,0 //LG_PRESTIGE#Prestige#
-4073,2319,5,2312,3,2314,1,0,0,0,0,0,0 //LG_BANDING#Banding#
-4073,2320,5,55,1,0,0,0,0,0,0,0,0 //LG_MOONSLASHER#Moon Slasher#
-4073,2321,5,254,5,0,0,0,0,0,0,0,0 //LG_RAYOFGENESIS#Genesis Ray#
-4073,2322,5,248,3,0,0,0,0,0,0,0,0 //LG_PIETY#Piety#
-4073,2323,5,2311,3,0,0,0,0,0,0,0,0 //LG_EARTHDRIVE#Earth Drive#
-4073,2324,5,2318,3,2319,3,0,0,0,0,0,0 //LG_HESPERUSLIT#Hesperus Lit#
-4073,2325,5,2315,3,2321,4,2322,5,0,0,0,0 //LG_INSPIRATION#Inspiration#
-4073,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4073,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Sorcerer
-4074,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4074,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4074,9,10,0,0,0,0,0,0,0,0,0,0 //MG_SRECOVERY#Increase SP Recovery#
-4074,10,1,0,0,0,0,0,0,0,0,0,0 //MG_SIGHT#Sight#
-4074,11,10,0,0,0,0,0,0,0,0,0,0 //MG_NAPALMBEAT#Napalm Beat#
-4074,12,10,11,7,13,5,0,0,0,0,0,0 //MG_SAFETYWALL#Safety Wall#
-4074,13,10,11,4,0,0,0,0,0,0,0,0 //MG_SOULSTRIKE#Soul Strike#
-4074,14,10,0,0,0,0,0,0,0,0,0,0 //MG_COLDBOLT#Cold Bolt#
-4074,15,10,14,5,0,0,0,0,0,0,0,0 //MG_FROSTDIVER#Frost Diver#
-4074,16,10,0,0,0,0,0,0,0,0,0,0 //MG_STONECURSE#Stone Curse#
-4074,17,10,19,4,0,0,0,0,0,0,0,0 //MG_FIREBALL#Fire Ball#
-4074,18,10,10,1,17,5,0,0,0,0,0,0 //MG_FIREWALL#Fire Wall#
-4074,19,10,0,0,0,0,0,0,0,0,0,0 //MG_FIREBOLT#Fire Bolt#
-4074,20,10,0,0,0,0,0,0,0,0,0,0 //MG_LIGHTNINGBOLT#Lightning Bolt#
-4074,21,10,20,4,0,0,0,0,0,0,0,0 //MG_THUNDERSTORM#Thunderstorm#
-4074,90,5,283,1,0,0,0,0,0,0,0,0 //WZ_EARTHSPIKE#Earth Spike#
-4074,91,5,90,1,0,0,0,0,0,0,0,0 //WZ_HEAVENDRIVE#Heaven's Drive#
-4074,93,1,0,0,0,0,0,0,0,0,0,0 //WZ_ESTIMATION#Sense#
-4074,157,1,0,0,0,0,0,0,0,0,0,0 //MG_ENERGYCOAT#Energy Coat#
-4074,274,10,0,0,0,0,0,0,0,0,0,0 //SA_ADVANCEDBOOK#Study#
-4074,275,5,274,2,0,0,0,0,0,0,0,0 //SA_CASTCANCEL#Cast Cancel#
-4074,276,5,274,4,0,0,0,0,0,0,0,0 //SA_MAGICROD#Magic Rod#
-4074,277,5,276,1,0,0,0,0,0,0,0,0 //SA_SPELLBREAKER#Spell Break#
-4074,278,10,275,1,0,0,0,0,0,0,0,0 //SA_FREECAST#Free Cast#
-4074,279,10,278,4,0,0,0,0,0,0,0,0 //SA_AUTOSPELL#Hindsight#
-4074,280,5,19,1,274,5,0,0,0,0,0,0 //SA_FLAMELAUNCHER#Endow Blaze#
-4074,281,5,14,1,274,5,0,0,0,0,0,0 //SA_FROSTWEAPON#Endow Tsunami#
-4074,282,5,20,1,274,5,0,0,0,0,0,0 //SA_LIGHTNINGLOADER#Endow Tornado#
-4074,283,5,16,1,274,5,0,0,0,0,0,0 //SA_SEISMICWEAPON#Endow Quake#
-4074,284,5,274,9,0,0,0,0,0,0,0,0 //SA_DRAGONOLOGY#Dragonology#
-4074,285,5,280,2,0,0,0,0,0,0,0,0 //SA_VOLCANO#Volcano#
-4074,286,5,281,2,0,0,0,0,0,0,0,0 //SA_DELUGE#Deluge#
-4074,287,5,282,2,0,0,0,0,0,0,0,0 //SA_VIOLENTGALE#Whirlwind#
-4074,288,5,285,3,286,3,287,3,0,0,0,0 //SA_LANDPROTECTOR#Magnetic Earth#
-4074,289,5,277,3,0,0,0,0,0,0,0,0 //SA_DISPELL#Dispel#
-4074,290,10,279,5,288,1,289,1,0,0,0,0 //SA_ABRACADABRA#Hocus-pocus#
-4074,1007,1,0,0,0,0,0,0,0,0,0,0 //SA_CREATECON#Create Converter#
-4074,1008,1,0,0,0,0,0,0,0,0,0,0 //SA_ELEMENTWATER#Elemental Change Water#
-4074,1017,1,0,0,0,0,0,0,0,0,0,0 //SA_ELEMENTGROUND#Elemental Change Earth#
-4074,1018,1,0,0,0,0,0,0,0,0,0,0 //SA_ELEMENTFIRE#Elemental Change Fire#
-4074,1019,1,0,0,0,0,0,0,0,0,0,0 //SA_ELEMENTWIND#Elemental Change Wind#
-4074,373,5,9,1,276,1,0,0,0,0,0,0 //PF_HPCONVERSION#Indulge#
-4074,374,1,276,3,277,2,0,0,0,0,0,0 //PF_SOULCHANGE#Soul Exhale#
-4074,375,5,275,5,276,3,289,3,0,0,0,0 //PF_SOULBURN#Soul Siphon#
-4074,402,5,9,3,375,1,0,0,0,0,0,0 //PF_MINDBREAKER#Mind Breaker#
-4074,403,1,274,5,278,5,279,1,0,0,0,0 //PF_MEMORIZE#Foresight#
-4074,404,1,286,2,287,2,0,0,0,0,0,0 //PF_FOGWALL#Blinding Mist#
-4074,405,1,284,4,0,0,0,0,0,0,0,0 //PF_SPIDERWEB#Fiber Lock#
-4074,482,5,279,1,0,0,0,0,0,0,0,0 //PF_DOUBLECASTING#Double Casting#
-4074,2443,5,285,1,0,0,0,0,0,0,0,0 //SO_FIREWALK#Fire Walk#
-4074,2444,5,287,1,0,0,0,0,0,0,0,0 //SO_ELECTRICWALK#Electric Walk#
-4074,2445,5,279,4,0,0,0,0,0,0,0,0 //SO_SPELLFIST#Fist Spell#
-4074,2446,5,90,5,0,0,0,0,0,0,0,0 //SO_EARTHGRAVE#Earth Grave#
-4074,2447,5,286,3,0,0,0,0,0,0,0,0 //SO_DIAMONDDUST#Diamond Dust#
-4074,2448,5,2450,2,0,0,0,0,0,0,0,0 //SO_POISON_BUSTER#Poison Burst#
-4074,2449,5,289,2,0,0,0,0,0,0,0,0 //SO_PSYCHIC_WAVE#Psychic Wave#
-4074,2450,5,91,5,0,0,0,0,0,0,0,0 //SO_CLOUD_KILL#Killing Cloud#
-4074,2451,5,280,1,281,1,282,1,283,1,0,0 //SO_STRIKING#Striking#
-4074,2452,5,285,1,287,1,0,0,0,0,0,0 //SO_WARMER#Warmer#
-4074,2453,5,288,2,0,0,0,0,0,0,0,0 //SO_VACUUM_EXTREME#Extreme Vacuum#
-4074,2454,5,283,1,287,4,0,0,0,0,0,0 //SO_VARETYR_SPEAR#Varetyr Spear#
-4074,2455,5,2452,2,0,0,0,0,0,0,0,0 //SO_ARRULLO#Arrullo#
-4074,2456,3,2462,1,0,0,0,0,0,0,0,0 //SO_EL_CONTROL#Spirit Control#
-4074,2457,3,2452,3,2456,1,0,0,0,0,0,0 //SO_SUMMON_AGNI#Call Agni#
-4074,2458,3,2447,3,2456,1,0,0,0,0,0,0 //SO_SUMMON_AQUA#Call Aqua#
-4074,2459,3,2454,3,2456,1,0,0,0,0,0,0 //SO_SUMMON_VENTUS#Call Ventus#
-4074,2460,3,2446,3,2456,1,0,0,0,0,0,0 //SO_SUMMON_TERA#Call Tera#
-4074,2461,1,2456,3,0,0,0,0,0,0,0,0 //SO_EL_ACTION#Elemental Action#
-4074,2462,2,280,1,281,1,282,1,283,1,0,0 //SO_EL_ANALYSIS#Four Spirits Analysis#
-4074,2463,5,2456,3,0,0,0,0,0,0,0,0 //SO_EL_SYMPATHY#Spirit Sympathy#
-4074,2464,1,2463,1,0,0,0,0,0,0,0,0 //SO_EL_CURE#Spirit Recovery#
-4074,2465,3,2457,3,0,0,0,0,0,0,0,0 //SO_FIRE_INSIGNIA#Fire Insignia#
-4074,2466,3,2458,3,0,0,0,0,0,0,0,0 //SO_WATER_INSIGNIA#Water Insignia#
-4074,2467,3,2459,3,0,0,0,0,0,0,0,0 //SO_WIND_INSIGNIA#Wind Insignia#
-4074,2468,3,2460,3,0,0,0,0,0,0,0,0 //SO_EARTH_INSIGNIA#Earth Insignia#
-4074,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4074,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Minstrel H
-4075,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4075,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4075,43,10,0,0,0,0,0,0,0,0,0,0 //AC_OWL#Owl's Eye#
-4075,44,10,43,3,0,0,0,0,0,0,0,0 //AC_VULTURE#Vulture's Eye#
-4075,45,10,44,1,0,0,0,0,0,0,0,0 //AC_CONCENTRATION#Improve Concentration#
-4075,46,10,0,0,0,0,0,0,0,0,0,0 //AC_DOUBLE#Double Strafe#
-4075,47,10,46,5,0,0,0,0,0,0,0,0 //AC_SHOWER#Arrow Shower#
-4075,147,1,0,0,0,0,0,0,0,0,0,0 //AC_MAKINGARROW#Arrow Crafting#
-4075,148,1,0,0,0,0,0,0,0,0,0,0 //AC_CHARGEARROW#Arrow Repel#
-4075,315,10,0,0,0,0,0,0,0,0,0,0 //BA_MUSICALLESSON#Music Lesson#
-4075,316,5,315,3,0,0,0,0,0,0,0,0 //BA_MUSICALSTRIKE#Melody Strike#
-4075,317,5,315,1,304,1,0,0,0,0,0,0 //BA_DISSONANCE#Unchained Serenade#
-4075,318,5,305,1,0,0,0,0,0,0,0,0 //BA_FROSTJOKE#Unbarring Octave#
-4075,319,10,317,3,0,0,0,0,0,0,0,0 //BA_WHISTLE#Perfect Tablature#
-4075,320,10,317,3,0,0,0,0,0,0,0,0 //BA_ASSASSINCROSS#Impressive Riff#
-4075,321,10,317,3,0,0,0,0,0,0,0,0 //BA_POEMBRAGI#Magic Strings#
-4075,322,10,317,3,0,0,0,0,0,0,0,0 //BA_APPLEIDUN#Song of Lutie#
-4075,304,1,0,0,0,0,0,0,0,0,0,0 //BD_ADAPTATION#Amp#
-4075,305,1,304,1,0,0,0,0,0,0,0,0 //BD_ENCORE#Encore#
-4075,306,1,319,10,0,0,0,0,0,0,0,0 //BD_LULLABY#Lullaby#
-4075,307,5,313,3,0,0,0,0,0,0,0,0 //BD_RICHMANKIM#Mental Sensing#
-4075,308,1,311,1,0,0,0,0,0,0,0,0 //BD_ETERNALCHAOS#Down Tempo#
-4075,309,5,322,10,0,0,0,0,0,0,0,0 //BD_DRUMBATTLEFIELD#Battle Theme#
-4075,310,5,309,3,0,0,0,0,0,0,0,0 //BD_RINGNIBELUNGEN#Harmonic Lick#
-4075,311,1,320,10,0,0,0,0,0,0,0,0 //BD_ROKISWEIL#Classical Pluck#
-4075,312,1,306,1,0,0,0,0,0,0,0,0 //BD_INTOABYSS#Power Chord#
-4075,313,5,321,10,0,0,0,0,0,0,0,0 //BD_SIEGFRIED#Acoustic Rhythm#
-4075,1010,1,0,0,0,0,0,0,0,0,0,0 //BA_PANGVOICE#Pang Voice#
-4075,394,10,47,5,316,1,0,0,0,0,0,0 //CG_ARROWVULCAN#Vulcan Arrow#
-4075,395,5,45,5,315,7,0,0,0,0,0,0 //CG_MOONLIT#Sheltering Bliss#
-4075,396,1,45,5,315,5,0,0,0,0,0,0 //CG_MARIONETTE#Marionette Control#
-4075,487,5,315,10,396,1,0,0,0,0,0,0 //CG_LONGINGFREEDOM#Longing for Freedom#
-4075,488,5,45,10,315,10,0,0,0,0,0,0 //CG_HERMODE#Wand of Hermod#
-4075,489,5,45,10,317,3,0,0,0,0,0,0 //CG_TAROTCARD#Tarot Card of Fate#
-4075,2381,5,2422,1,0,0,0,0,0,0,0,0 //MI_RUSH_WINDMILL#Rush To Windmill#
-4075,2382,5,2422,1,0,0,0,0,0,0,0,0 //MI_ECHOSONG#Echo Song#
-4075,2383,5,2422,1,0,0,0,0,0,0,0,0 //MI_HARMONIZE#Harmonize#
-4075,2412,10,0,0,0,0,0,0,0,0,0,0 //WM_LESSON#Lesson#
-4075,2413,5,2417,1,0,0,0,0,0,0,0,0 //WM_METALICSOUND#Metalic Sound#
-4075,2414,5,317,5,0,0,0,0,0,0,0,0 //WM_REVERBERATION#Reverberation#
-4075,2417,1,2414,1,0,0,0,0,0,0,0,0 //WM_DOMINION_IMPULSE#Dominion Impulse#
-4075,2418,5,316,5,0,0,0,0,0,0,0,0 //WM_SEVERE_RAINSTORM#Severe Rainstorm#
-4075,2419,5,2412,1,0,0,0,0,0,0,0,0 //WM_POEMOFNETHERWORLD#Despair Song#
-4075,2420,5,2419,3,0,0,0,0,0,0,0,0 //WM_VOICEOFSIREN#Voice Of Siren#
-4075,2421,5,2423,3,0,0,0,0,0,0,0,0 //WM_DEADHILLHERE#At Dead Hill#
-4075,2422,5,2412,1,0,0,0,0,0,0,0,0 //WM_LULLABY_DEEPSLEEP#Lullaby#
-4075,2423,5,2412,1,0,0,0,0,0,0,0,0 //WM_SIRCLEOFNATURE#Circling Nature#
-4075,2424,5,2419,1,0,0,0,0,0,0,0,0 //WM_RANDOMIZESPELL#Formless Spell#
-4075,2425,5,2424,1,0,0,0,0,0,0,0,0 //WM_GLOOMYDAY#Gloomy Shyness#
-4075,2426,5,2413,1,0,0,0,0,0,0,0,0 //WM_GREAT_ECHO#Great Echo#
-4075,2427,5,2381,1,2382,1,2383,1,0,0,0,0 //WM_SONG_OF_MANA#Song Of Mana#
-4075,2428,5,2381,1,2382,1,2383,1,0,0,0,0 //WM_DANCE_WITH_WUG#Dance With Wug#
-4075,2429,5,2430,3,2432,3,0,0,0,0,0,0 //WM_SOUND_OF_DESTRUCTION#Destruction Song#
-4075,2430,5,2428,1,0,0,0,0,0,0,0,0 //WM_SATURDAY_NIGHT_FEVER#Saturday Night Fever#
-4075,2431,5,2381,1,2382,1,2383,1,0,0,0,0 //WM_LERADS_DEW#Lerad's Dew#
-4075,2432,5,2427,1,0,0,0,0,0,0,0,0 //WM_MELODYOFSINK#Sinking Melody#
-4075,2433,5,2431,1,0,0,0,0,0,0,0,0 //WM_BEYOND_OF_WARCRY#Beyound Cry#
-4075,2434,5,2429,1,2433,1,0,0,0,0,0,0 //WM_UNLIMITED_HUMMING_VOICE#Infinite Humming Voice#
-4075,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4075,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Wanderer H
-4076,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4076,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4076,43,10,0,0,0,0,0,0,0,0,0,0 //AC_OWL#Owl's Eye#
-4076,44,10,43,3,0,0,0,0,0,0,0,0 //AC_VULTURE#Vulture's Eye#
-4076,45,10,44,1,0,0,0,0,0,0,0,0 //AC_CONCENTRATION#Improve Concentration#
-4076,46,10,0,0,0,0,0,0,0,0,0,0 //AC_DOUBLE#Double Strafe#
-4076,47,10,46,5,0,0,0,0,0,0,0,0 //AC_SHOWER#Arrow Shower#
-4076,147,1,0,0,0,0,0,0,0,0,0,0 //AC_MAKINGARROW#Arrow Crafting#
-4076,148,1,0,0,0,0,0,0,0,0,0,0 //AC_CHARGEARROW#Arrow Repel#
-4076,323,10,0,0,0,0,0,0,0,0,0,0 //DC_DANCINGLESSON#Dance Lessons#
-4076,324,5,323,3,0,0,0,0,0,0,0,0 //DC_THROWARROW#Slinging Arrow#
-4076,325,5,323,1,304,1,0,0,0,0,0,0 //DC_UGLYDANCE#Hip Shaker#
-4076,326,5,305,1,0,0,0,0,0,0,0,0 //DC_SCREAM#Dazzler#
-4076,327,10,325,3,0,0,0,0,0,0,0,0 //DC_HUMMING#Focus Ballet#
-4076,328,10,325,3,0,0,0,0,0,0,0,0 //DC_DONTFORGETME#Slow Grace#
-4076,329,10,325,3,0,0,0,0,0,0,0,0 //DC_FORTUNEKISS#Lady Luck#
-4076,330,10,325,3,0,0,0,0,0,0,0,0 //DC_SERVICEFORYOU#Gypsy's Kiss#
-4076,304,1,0,0,0,0,0,0,0,0,0,0 //BD_ADAPTATION#Amp#
-4076,305,1,304,1,0,0,0,0,0,0,0,0 //BD_ENCORE#Encore#
-4076,306,1,327,10,0,0,0,0,0,0,0,0 //BD_LULLABY#Lullaby#
-4076,307,5,313,3,0,0,0,0,0,0,0,0 //BD_RICHMANKIM#Mental Sensing#
-4076,308,1,311,1,0,0,0,0,0,0,0,0 //BD_ETERNALCHAOS#Down Tempo#
-4076,309,5,330,10,0,0,0,0,0,0,0,0 //BD_DRUMBATTLEFIELD#Battle Theme#
-4076,310,5,309,3,0,0,0,0,0,0,0,0 //BD_RINGNIBELUNGEN#Harmonic Lick#
-4076,311,1,328,10,0,0,0,0,0,0,0,0 //BD_ROKISWEIL#Classical Pluck#
-4076,312,1,306,1,0,0,0,0,0,0,0,0 //BD_INTOABYSS#Power Chord#
-4076,313,5,329,10,0,0,0,0,0,0,0,0 //BD_SIEGFRIED#Acoustic Rhythm#
-4076,1011,1,0,0,0,0,0,0,0,0,0,0 //DC_WINKCHARM#Wink of Charm#
-4076,394,10,47,5,324,1,0,0,0,0,0,0 //CG_ARROWVULCAN#Vulcan Arrow#
-4076,395,5,45,5,323,7,0,0,0,0,0,0 //CG_MOONLIT#Sheltering Bliss#
-4076,396,1,45,5,323,5,0,0,0,0,0,0 //CG_MARIONETTE#Marionette Control#
-4076,487,5,323,10,396,1,0,0,0,0,0,0 //CG_LONGINGFREEDOM#Longing for Freedom#
-4076,488,5,45,10,323,10,0,0,0,0,0,0 //CG_HERMODE#Wand of Hermod#
-4076,489,5,45,10,325,3,0,0,0,0,0,0 //CG_TAROTCARD#Tarot Card of Fate#
-4076,2350,5,2422,1,0,0,0,0,0,0,0,0 //WA_SWING_DANCE#Swing Dance#
-4076,2351,5,2422,1,0,0,0,0,0,0,0,0 //WA_SYMPHONY_OF_LOVE#Lover Symphony#
-4076,2352,5,2422,1,0,0,0,0,0,0,0,0 //WA_MOONLIT_SERENADE#Moonlight Serenade#
-4076,2412,10,0,0,0,0,0,0,0,0,0,0 //WM_LESSON#Lesson#
-4076,2413,5,2417,1,0,0,0,0,0,0,0,0 //WM_METALICSOUND#Metalic Sound#
-4076,2414,5,325,5,0,0,0,0,0,0,0,0 //WM_REVERBERATION#Reverberation#
-4076,2417,1,2414,1,0,0,0,0,0,0,0,0 //WM_DOMINION_IMPULSE#Dominion Impulse#
-4076,2418,5,324,5,0,0,0,0,0,0,0,0 //WM_SEVERE_RAINSTORM#Severe Rainstorm#
-4076,2419,5,2412,1,0,0,0,0,0,0,0,0 //WM_POEMOFNETHERWORLD#Despair Song#
-4076,2420,5,2419,3,0,0,0,0,0,0,0,0 //WM_VOICEOFSIREN#Voice Of Siren#
-4076,2421,5,2423,3,0,0,0,0,0,0,0,0 //WM_DEADHILLHERE#At Dead Hill#
-4076,2422,5,2412,1,0,0,0,0,0,0,0,0 //WM_LULLABY_DEEPSLEEP#Lullaby#
-4076,2423,5,2412,1,0,0,0,0,0,0,0,0 //WM_SIRCLEOFNATURE#Circling Nature#
-4076,2424,5,2419,1,0,0,0,0,0,0,0,0 //WM_RANDOMIZESPELL#Formless Spell#
-4076,2425,5,2424,1,0,0,0,0,0,0,0,0 //WM_GLOOMYDAY#Gloomy Shyness#
-4076,2426,5,2413,1,0,0,0,0,0,0,0,0 //WM_GREAT_ECHO#Great Echo#
-4076,2427,5,2350,1,2351,1,2352,1,0,0,0,0 //WM_SONG_OF_MANA#Song Of Mana#
-4076,2428,5,2350,1,2351,1,2352,1,0,0,0,0 //WM_DANCE_WITH_WUG#Dance With Wug#
-4076,2429,5,2430,3,2432,3,0,0,0,0,0,0 //WM_SOUND_OF_DESTRUCTION#Destruction Song#
-4076,2430,5,2428,1,0,0,0,0,0,0,0,0 //WM_SATURDAY_NIGHT_FEVER#Saturday Night Fever#
-4076,2431,5,2350,1,2351,1,2352,1,0,0,0,0 //WM_LERADS_DEW#Lerad's Dew#
-4076,2432,5,2427,1,0,0,0,0,0,0,0,0 //WM_MELODYOFSINK#Sinking Melody#
-4076,2433,5,2431,1,0,0,0,0,0,0,0,0 //WM_BEYOND_OF_WARCRY#Beyound Cry#
-4076,2434,5,2429,1,2433,1,0,0,0,0,0,0 //WM_UNLIMITED_HUMMING_VOICE#Infinite Humming Voice#
-4076,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4076,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Sura H
-4077,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4077,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4077,22,10,0,0,0,0,0,0,0,0,0,0 //AL_DP#Divine Protection#
-4077,23,10,22,3,0,0,0,0,0,0,0,0 //AL_DEMONBANE#Demon Bane#
-4077,24,1,0,0,0,0,0,0,0,0,0,0 //AL_RUWACH#Ruwach#
-4077,25,1,27,4,0,0,0,0,0,0,0,0 //AL_PNEUMA#Pneuma#
-4077,26,2,24,1,0,0,0,0,0,0,0,0 //AL_TELEPORT#Teleport#
-4077,27,4,26,2,0,0,0,0,0,0,0,0 //AL_WARP#Warp Portal#
-4077,28,10,0,0,0,0,0,0,0,0,0,0 //AL_HEAL#Heal#
-4077,29,10,28,3,0,0,0,0,0,0,0,0 //AL_INCAGI#Increase AGI#
-4077,30,10,29,1,0,0,0,0,0,0,0,0 //AL_DECAGI#Decrease AGI#
-4077,31,1,0,0,0,0,0,0,0,0,0,0 //AL_HOLYWATER#Aqua Benedicta#
-4077,32,10,23,3,0,0,0,0,0,0,0,0 //AL_CRUCIS#Signum Crusis#
-4077,33,10,22,3,0,0,0,0,0,0,0,0 //AL_ANGELUS#Angelus#
-4077,34,10,22,5,0,0,0,0,0,0,0,0 //AL_BLESSING#Blessing#
-4077,35,1,28,2,0,0,0,0,0,0,0,0 //AL_CURE#Cure#
-4077,156,1,0,0,0,0,0,0,0,0,0,0 //AL_HOLYLIGHT#Holy Light#
-4077,259,10,23,10,22,10,0,0,0,0,0,0 //MO_IRONHAND#Iron Fists#
-4077,260,5,269,2,0,0,0,0,0,0,0,0 //MO_SPIRITSRECOVERY#Spiritual Cadence#
-4077,261,5,259,2,0,0,0,0,0,0,0,0 //MO_CALLSPIRITS#Summon Spirit Sphere#
-4077,262,1,261,5,0,0,0,0,0,0,0,0 //MO_ABSORBSPIRITS#Absorb Spirit Sphere#
-4077,263,10,265,5,0,0,0,0,0,0,0,0 //MO_TRIPLEATTACK#Raging Triple Blow#
-4077,264,1,271,3,260,2,268,3,0,0,0,0 //MO_BODYRELOCATION#Snap#
-4077,265,10,259,5,261,5,0,0,0,0,0,0 //MO_DODGE#Dodge#
-4077,266,5,261,5,0,0,0,0,0,0,0,0 //MO_FINGEROFFENSIVE#Throw Spirit Sphere#
-4077,267,5,266,3,0,0,0,0,0,0,0,0 //MO_INVESTIGATE#Occult Impact#
-4077,268,5,273,3,0,0,0,0,0,0,0,0 //MO_STEELBODY#Mental Strength#
-4077,269,5,265,5,0,0,0,0,0,0,0,0 //MO_BLADESTOP#Root#
-4077,270,5,262,1,0,0,0,0,0,0,0,0 //MO_EXPLOSIONSPIRITS#Fury#
-4077,271,5,270,3,267,3,0,0,0,0,0,0 //MO_EXTREMITYFIST#Asura Strike#
-4077,272,5,263,5,0,0,0,0,0,0,0,0 //MO_CHAINCOMBO#Raging Quadruple Blow#
-4077,273,5,272,3,0,0,0,0,0,0,0,0 //MO_COMBOFINISH#Raging Thrust#
-4077,1015,1,0,0,0,0,0,0,0,0,0,0 //MO_KITRANSLATION#Ki Translation#
-4077,1016,1,0,0,0,0,0,0,0,0,0,0 //MO_BALKYOUNG#Ki Explosion#
-4077,370,5,259,7,261,5,0,0,0,0,0,0 //CH_PALMSTRIKE#Raging Palm Strike#
-4077,371,5,259,5,263,5,261,5,273,3,0,0 //CH_TIGERFIST#Glacier Fist#
-4077,372,10,259,5,261,5,371,2,0,0,0,0 //CH_CHAINCRUSH#Chain Crush Combo#
-4077,401,1,261,5,262,1,270,5,0,0,0,0 //CH_SOULCOLLECT#Hyper Spirit Sphere#
-4077,2326,10,263,5,0,0,0,0,0,0,0,0 //SR_DRAGONCOMBO#Dragon Combo#
-4077,2327,5,2326,3,0,0,0,0,0,0,0,0 //SR_SKYNETBLOW#Sky Blow#
-4077,2328,5,2326,1,2334,1,0,0,0,0,0,0 //SR_EARTHSHAKER#Earth Shaker#
-4077,2329,5,2326,1,0,0,0,0,0,0,0,0 //SR_FALLENEMPIRE#Fallen Empire#
-4077,2330,10,2329,3,0,0,0,0,0,0,0,0 //SR_TIGERCANNON#Tiger Cannon#
-4077,2332,5,2328,2,0,0,0,0,0,0,0,0 //SR_RAMPAGEBLASTER#Rampage Blaster#
-4077,2333,5,2327,1,0,0,0,0,0,0,0,0 //SR_CRESCENTELBOW#Crescent Elbow#
-4077,2334,5,269,2,2344,2,0,0,0,0,0,0 //SR_CURSEDCIRCLE#Cursed Circle#
-4077,2335,5,2337,1,0,0,0,0,0,0,0,0 //SR_LIGHTNINGWALK#Lightning Walk#
-4077,2336,5,2332,3,2335,3,0,0,0,0,0,0 //SR_KNUCKLEARROW#Knuckle Arrow#
-4077,2337,1,2334,1,0,0,0,0,0,0,0,0 //SR_WINDMILL#Wind Mill#
-4077,2338,10,2332,3,2346,3,0,0,0,0,0,0 //SR_RAISINGDRAGON#Rising Dragon#
-4077,2340,1,262,1,2341,1,0,0,0,0,0,0 //SR_ASSIMILATEPOWER#Power Absorb#
-4077,2341,1,261,5,0,0,0,0,0,0,0,0 //SR_POWERVELOCITY#Power Implantation#
-4077,2343,10,2330,5,2338,5,0,0,0,0,0,0 //SR_GATEOFHELL#Hell Gate#
-4077,2344,5,2341,1,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_QUIET#Gentle Touch-Silence#
-4077,2345,5,2341,1,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CURE#Gentle Touch-Speed#
-4077,2346,5,2344,3,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_ENERGYGAIN#Gentle Touch-Save#
-4077,2347,5,2345,4,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CHANGE#Gentle Touch-Opposite#
-4077,2348,5,2347,5,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_REVITALIZE#Gentle Touch-Alive#
-4077,2517,5,2340,1,2518,3,0,0,0,0,0,0 //SR_HOWLINGOFLION#Lion Howling#
-4077,2518,5,267,3,0,0,0,0,0,0,0,0 //SR_RIDEINLIGHTNING#Lightning Ride#
-4077,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4077,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Gentic H
-4078,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4078,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4078,36,10,0,0,0,0,0,0,0,0,0,0 //MC_INCCARRY#Enlarge Weight Limit#
-4078,37,10,36,3,0,0,0,0,0,0,0,0 //MC_DISCOUNT#Discount#
-4078,38,10,37,3,0,0,0,0,0,0,0,0 //MC_OVERCHARGE#Overcharge#
-4078,39,10,36,5,0,0,0,0,0,0,0,0 //MC_PUSHCART#Pushcart#
-4078,40,1,0,0,0,0,0,0,0,0,0,0 //MC_IDENTIFY#Item Appraisal#
-4078,41,10,39,3,0,0,0,0,0,0,0,0 //MC_VENDING#Vending#
-4078,42,10,0,0,0,0,0,0,0,0,0,0 //MC_MAMMONITE#Mammonite#
-4078,153,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTREVOLUTION#Cart Revolution#
-4078,154,1,0,0,0,0,0,0,0,0,0,0 //MC_CHANGECART#Change Cart#
-4078,155,1,0,0,0,0,0,0,0,0,0,0 //MC_LOUD#Crazy Uproar#
-4078,226,10,0,0,0,0,0,0,0,0,0,0 //AM_AXEMASTERY#Axe Mastery#
-4078,227,10,0,0,0,0,0,0,0,0,0,0 //AM_LEARNINGPOTION#Potion Research#
-4078,228,10,227,5,0,0,0,0,0,0,0,0 //AM_PHARMACY#Prepare Potion#
-4078,229,5,228,4,0,0,0,0,0,0,0,0 //AM_DEMONSTRATION#Bomb#
-4078,230,5,228,5,0,0,0,0,0,0,0,0 //AM_ACIDTERROR#Acid Terror#
-4078,231,5,228,3,0,0,0,0,0,0,0,0 //AM_POTIONPITCHER#Aid Potion#
-4078,232,5,228,6,0,0,0,0,0,0,0,0 //AM_CANNIBALIZE#Summon Flora#
-4078,233,5,228,2,0,0,0,0,0,0,0,0 //AM_SPHEREMINE#Summon Marine Sphere#
-4078,234,5,236,3,0,0,0,0,0,0,0,0 //AM_CP_WEAPON#Alchemical Weapon#
-4078,235,5,237,3,0,0,0,0,0,0,0,0 //AM_CP_SHIELD#Synthesized Shield#
-4078,236,5,235,3,0,0,0,0,0,0,0,0 //AM_CP_ARMOR#Synthetic Armor#
-4078,237,5,228,2,0,0,0,0,0,0,0,0 //AM_CP_HELM#Biochemical Helm#
-4078,238,1,0,0,0,0,0,0,0,0,0,0 //AM_BIOETHICS#Basis of Life#
-4078,243,1,244,1,0,0,0,0,0,0,0,0 //AM_CALLHOMUN#Call Homunculus#
-4078,244,1,238,1,0,0,0,0,0,0,0,0 //AM_REST#Peaceful Rest#
-4078,247,5,243,1,0,0,0,0,0,0,0,0 //AM_RESURRECTHOMUN#Ressurect Homunculus#
-//4078,392,5,228,5,0,0,0,0,0,0,0,0 //CR_ALCHEMY#Alchemy#
-//4078,393,5,228,6,390,2,0,0,0,0,0,0 //CR_SYNTHESISPOTION#Potion Synthesis#
-4078,478,10,231,5,0,0,0,0,0,0,0,0 //CR_SLIMPITCHER#Aid Condensed Potion#
-4078,479,5,234,5,235,5,236,5,237,5,0,0 //CR_FULLPROTECTION#Full Protection#
-4078,490,10,229,5,230,5,0,0,0,0,0,0 //CR_ACIDDEMONSTRATION#Acid Demonstration#
-4078,491,2,0,0,0,0,0,0,0,0,0,0 //CR_CULTIVATION#Cultivation#
-4078,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4078,446,1,0,0,0,0,0,0,0,0,0,0 //AM_BERSERKPITCHER#Berserk Pitcher#
-4078,496,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT1#Twilight Alchemy 1#
-4078,497,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT2#Twilight Alchemy 2#
-4078,498,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT3#Twilight Alchemy 3#
-4078,2474,5,0,0,0,0,0,0,0,0,0,0 //GN_TRAINING_SWORD#Sword Mastery#
-4078,2475,5,0,0,0,0,0,0,0,0,0,0 //GN_REMODELING_CART#Cart Remodeling#
-4078,2476,5,2475,1,0,0,0,0,0,0,0,0 //GN_CART_TORNADO#Cart Tornado#
-4078,2477,5,2475,2,0,0,0,0,0,0,0,0 //GN_CARTCANNON#Cart Cannon#
-4078,2478,5,2475,3,0,0,0,0,0,0,0,0 //GN_CARTBOOST#Cart Boost#
-4078,2479,5,2497,2,0,0,0,0,0,0,0,0 //GN_THORNS_TRAP#Thorns Trap#
-4078,2480,5,2497,3,0,0,0,0,0,0,0,0 //GN_BLOOD_SUCKER#Blood Sucker#
-4078,2481,5,2497,4,0,0,0,0,0,0,0,0 //GN_SPORE_EXPLOSION#Spore Explosion#
-4078,2482,5,2479,3,0,0,0,0,0,0,0,0 //GN_WALLOFTHORN#Wall Of Thorn#
-4078,2483,10,2482,3,0,0,0,0,0,0,0,0 //GN_CRAZYWEED#Crazy Weed#
-4078,2485,5,2481,3,0,0,0,0,0,0,0,0 //GN_DEMONIC_FIRE#Demonic Fire#
-4078,2486,5,2485,3,0,0,0,0,0,0,0,0 //GN_FIRE_EXPANSION#Fire Expansion#
-4078,2490,5,2480,3,0,0,0,0,0,0,0,0 //GN_HELLS_PLANT#Hell Plant#
-4078,2492,5,2490,3,0,0,0,0,0,0,0,0 //GN_MANDRAGORA#Mandragora Howling#
-4078,2493,1,2494,1,0,0,0,0,0,0,0,0 //GN_SLINGITEM#Item Sling#
-4078,2494,1,0,0,0,0,0,0,0,0,0,0 //GN_CHANGEMATERIAL#Change Material#
-4078,2495,2,2497,1,0,0,0,0,0,0,0,0 //GN_MIX_COOKING#Mixed Cooking#
-4078,2496,2,2495,1,0,0,0,0,0,0,0,0 //GN_MAKEBOMB#Bomb Creation#
-4078,2497,10,0,0,0,0,0,0,0,0,0,0 //GN_S_PHARMACY#Special Pharmacy#
-4078,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-4078,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store#
-//shadow Chaser H
-4079,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4079,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4079,48,10,0,0,0,0,0,0,0,0,0,0 //TF_DOUBLE#Double Attack#
-4079,49,10,0,0,0,0,0,0,0,0,0,0 //TF_MISS#Improve Dodge#
-4079,50,10,0,0,0,0,0,0,0,0,0,0 //TF_STEAL#Steal#
-4079,51,10,50,5,0,0,0,0,0,0,0,0 //TF_HIDING#Hiding#
-4079,52,10,0,0,0,0,0,0,0,0,0,0 //TF_POISON#Envenom#
-4079,53,1,52,3,0,0,0,0,0,0,0,0 //TF_DETOXIFY#Detoxify#
-4079,149,1,0,0,0,0,0,0,0,0,0,0 //TF_SPRINKLESAND#Throw Sand#
-4079,150,1,0,0,0,0,0,0,0,0,0,0 //TF_BACKSLIDING#Back Sliding#
-4079,151,1,0,0,0,0,0,0,0,0,0,0 //TF_PICKSTONE#Find Stone#
-4079,152,1,0,0,0,0,0,0,0,0,0,0 //TF_THROWSTONE#Stone Fling#
-4079,2,10,0,0,0,0,0,0,0,0,0,0 //SM_SWORD#Sword Mastery#
-4079,44,10,0,0,0,0,0,0,0,0,0,0 //AC_VULTURE#Vulture's Eye#
-4079,46,10,44,10,0,0,0,0,0,0,0,0 //AC_DOUBLE#Double Strafe#
-4079,124,1,46,5,0,0,0,0,0,0,0,0 //HT_REMOVETRAP#Remove Trap#
-4079,210,10,50,1,0,0,0,0,0,0,0,0 //RG_SNATCHER#Gank#
-4079,211,10,210,4,0,0,0,0,0,0,0,0 //RG_STEALCOIN#Mug#
-4079,212,10,211,4,0,0,0,0,0,0,0,0 //RG_BACKSTAP#Back Stab#
-4079,213,5,51,1,0,0,0,0,0,0,0,0 //RG_TUNNELDRIVE#Stalk#
-4079,214,5,212,2,213,2,0,0,0,0,0,0 //RG_RAID#Sightless Raid#
-4079,215,5,217,5,0,0,0,0,0,0,0,0 //RG_STRIPWEAPON#Divest Weapon#
-4079,216,5,218,5,0,0,0,0,0,0,0,0 //RG_STRIPSHIELD#Divest Shield#
-4079,217,5,216,5,0,0,0,0,0,0,0,0 //RG_STRIPARMOR#Divest Armor#
-4079,218,5,211,2,0,0,0,0,0,0,0,0 //RG_STRIPHELM#Divest Helm#
-4079,219,5,212,4,214,5,0,0,0,0,0,0 //RG_INTIMIDATE#Snatch#
-4079,220,1,221,5,0,0,0,0,0,0,0,0 //RG_GRAFFITI#Scribble#
-4079,221,5,222,1,0,0,0,0,0,0,0,0 //RG_FLAGGRAFFITI#Piece#
-4079,222,1,223,1,0,0,0,0,0,0,0,0 //RG_CLEANER#Remover#
-4079,223,1,216,3,0,0,0,0,0,0,0,0 //RG_GANGSTER#Slyness#
-4079,224,5,223,1,0,0,0,0,0,0,0,0 //RG_COMPULSION#Haggle#
-4079,225,10,219,5,0,0,0,0,0,0,0,0 //RG_PLAGIARISM#Intimidate#
-4079,1005,1,0,0,0,0,0,0,0,0,0,0 //RG_CLOSECONFINE#Close Confine#
-4079,389,5,51,5,213,3,0,0,0,0,0,0 //ST_CHASEWALK#Stealth#
-4079,390,5,215,1,0,0,0,0,0,0,0,0 //ST_REJECTSWORD#Counter Instinct#
-4079,475,1,225,10,0,0,0,0,0,0,0,0 //ST_PRESERVE#Preserve#
-4079,476,5,215,5,216,5,217,5,218,5,0,0 //ST_FULLSTRIP#Divest All#
-4079,2284,5,219,5,0,0,0,0,0,0,0,0 //SC_FATALMENACE#Fatal Manace#
-4079,2285,10,225,5,0,0,0,0,0,0,0,0 //SC_REPRODUCE#Reproduce#
-4079,2286,10,2285,5,0,0,0,0,0,0,0,0 //SC_AUTOSHADOWSPELL#Auto Shadow Spell#
-4079,2287,5,213,3,0,0,0,0,0,0,0,0 //SC_SHADOWFORM#Shadow Formation#
-4079,2288,10,46,7,0,0,0,0,0,0,0,0 //SC_TRIANGLESHOT#Triangle Shot#
-4079,2289,5,0,0,0,0,0,0,0,0,0,0 //SC_BODYPAINT#Body Painting#
-4079,2290,5,2286,7,2291,5,0,0,0,0,0,0 //SC_INVISIBILITY#Invisibility#
-4079,2291,5,2286,5,2287,3,0,0,0,0,0,0 //SC_DEADLYINFECT#Deadly Infection#
-4079,2292,3,2289,1,0,0,0,0,0,0,0,0 //SC_ENERVATION#Masquerade Enervation#
-4079,2293,3,2289,1,0,0,0,0,0,0,0,0 //SC_GROOMY#Masquerade Groomy#
-4079,2294,3,2289,1,0,0,0,0,0,0,0,0 //SC_IGNORANCE#Masquerade Ignorance#
-4079,2295,3,2292,1,2293,1,2294,1,0,0,0,0 //SC_LAZINESS#Masquerade Laziness#
-4079,2296,3,2295,1,2297,1,0,0,0,0,0,0 //SC_UNLUCKY#Masquerade Unlucky#
-4079,2297,3,2292,1,2293,1,2294,1,0,0,0,0 //SC_WEAKNESS#Masquerade Weakness#
-4079,2298,5,215,1,0,0,0,0,0,0,0,0 //SC_STRIPACCESSARY#Divest Accessory#
-4079,2299,3,221,1,0,0,0,0,0,0,0,0 //SC_MANHOLE#Manhole#
-4079,2300,3,2299,1,0,0,0,0,0,0,0,0 //SC_DIMENSIONDOOR#Dimension Door#
-4079,2301,3,2299,1,0,0,0,0,0,0,0,0 //SC_CHAOSPANIC#Chaos Panic#
-4079,2302,3,2296,3,2301,3,0,0,0,0,0,0 //SC_MAELSTROM#Maelstrom#
-4079,2303,3,2300,3,0,0,0,0,0,0,0,0 //SC_BLOODYLUST#Bloody Lust#
-4079,2304,3,2300,3,0,0,0,0,0,0,0,0 //SC_FEINTBOMB#Feint Bomb#
-4079,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4079,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Rune Knight2
-4080,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4080,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4080,2,10,0,0,0,0,0,0,0,0,0,0 //SM_SWORD#Sword Mastery#
-4080,3,10,2,1,0,0,0,0,0,0,0,0 //SM_TWOHAND#Two-Handed Sword Mastery#
-4080,4,10,0,0,0,0,0,0,0,0,0,0 //SM_RECOVERY#Increase HP Recovery#
-4080,5,10,0,0,0,0,0,0,0,0,0,0 //SM_BASH#Bash#
-4080,6,10,0,0,0,0,0,0,0,0,0,0 //SM_PROVOKE#Provoke#
-4080,7,10,5,5,0,0,0,0,0,0,0,0 //SM_MAGNUM#Magnum Break#
-4080,8,10,6,5,0,0,0,0,0,0,0,0 //SM_ENDURE#Endure#
-4080,144,1,0,0,0,0,0,0,0,0,0,0 //SM_MOVINGRECOVERY#Moving HP-Recovery#
-4080,145,1,0,0,0,0,0,0,0,0,0,0 //SM_FATALBLOW#Attack Weak Point#
-4080,146,1,0,0,0,0,0,0,0,0,0,0 //SM_AUTOBERSERK#Auto Berserk#
-4080,55,10,0,0,0,0,0,0,0,0,0,0 //KN_SPEARMASTERY#Spear Mastery#
-4080,56,10,55,1,0,0,0,0,0,0,0,0 //KN_PIERCE#Pierce#
-4080,57,10,63,1,58,3,0,0,0,0,0,0 //KN_BRANDISHSPEAR#Brandish Spear#
-4080,58,10,56,5,0,0,0,0,0,0,0,0 //KN_SPEARSTAB#Spear Stab#
-4080,59,5,56,3,0,0,0,0,0,0,0,0 //KN_SPEARBOOMERANG#Spear Boomerang#
-4080,60,10,3,1,0,0,0,0,0,0,0,0 //KN_TWOHANDQUICKEN#Twohand Quicken#
-4080,61,5,3,1,0,0,0,0,0,0,0,0 //KN_AUTOCOUNTER#Counter Attack#
-4080,62,10,5,10,7,3,3,5,60,10,61,5//KN_BOWLINGBASH#Bowling Bash#
-4080,63,1,8,1,0,0,0,0,0,0,0,0 //KN_RIDING#Peco Peco Riding#
-4080,64,5,63,1,0,0,0,0,0,0,0,0 //KN_CAVALIERMASTERY#Cavalier Mastery#
-4080,1001,1,0,0,0,0,0,0,0,0,0,0 //KN_CHARGEATK#Charge Attack#
-4080,495,1,60,10,0,0,0,0,0,0,0,0 //KN_ONEHAND#Onehand Quicken#
-4080,2001,5,2010,2,0,0,0,0,0,0,0,0 //RK_ENCHANTBLADE#Enchant Blade#
-4080,2002,5,2001,3,0,0,0,0,0,0,0,0 //RK_SONICWAVE#Sonic Wave#
-4080,2003,10,61,1,2001,2,0,0,0,0,0,0 //RK_DEATHBOUND#Death Bound#
-4080,2004,10,2020,3,0,0,0,0,0,0,0,0 //RK_HUNDREDSPEAR#Hundred Spears#
-4080,2005,5,2001,5,0,0,0,0,0,0,0,0 //RK_WINDCUTTER#Wind Cutter#
-4080,2006,5,2002,2,2003,5,2005,3,0,0,0,0 //RK_IGNITIONBREAK#Ignition Break#
-4080,2007,5,64,1,0,0,0,0,0,0,0,0 //RK_DRAGONTRAINING#Dragon Training#
-4080,2008,10,2007,2,0,0,0,0,0,0,0,0 //RK_DRAGONBREATH#Dragon Breath#
-4080,2009,5,2007,2,0,0,0,0,0,0,0,0 //RK_DRAGONHOWLING#Dragon Howling#
-4080,2010,10,0,0,0,0,0,0,0,0,0,0 //RK_RUNEMASTERY#Rune Mastery#
-4080,2020,5,57,2,0,0,0,0,0,0,0,0, //RK_PHANTOMTHRUST#Phantom Thrust#
-4080,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4080,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Rune Knight H2
-4081,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4081,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4081,2,10,0,0,0,0,0,0,0,0,0,0 //SM_SWORD#Sword Mastery#
-4081,3,10,2,1,0,0,0,0,0,0,0,0 //SM_TWOHAND#Two-Handed Sword Mastery#
-4081,4,10,0,0,0,0,0,0,0,0,0,0 //SM_RECOVERY#Increase HP Recovery#
-4081,5,10,0,0,0,0,0,0,0,0,0,0 //SM_BASH#Bash#
-4081,6,10,0,0,0,0,0,0,0,0,0,0 //SM_PROVOKE#Provoke#
-4081,7,10,5,5,0,0,0,0,0,0,0,0 //SM_MAGNUM#Magnum Break#
-4081,8,10,6,5,0,0,0,0,0,0,0,0 //SM_ENDURE#Endure#
-4081,144,1,0,0,0,0,0,0,0,0,0,0 //SM_MOVINGRECOVERY#Moving HP-Recovery#
-4081,145,1,0,0,0,0,0,0,0,0,0,0 //SM_FATALBLOW#Attack Weak Point#
-4081,146,1,0,0,0,0,0,0,0,0,0,0 //SM_AUTOBERSERK#Auto Berserk#
-4081,55,10,0,0,0,0,0,0,0,0,0,0 //KN_SPEARMASTERY#Spear Mastery#
-4081,56,10,55,1,0,0,0,0,0,0,0,0 //KN_PIERCE#Pierce#
-4081,57,10,63,1,58,3,0,0,0,0,0,0 //KN_BRANDISHSPEAR#Brandish Spear#
-4081,58,10,56,5,0,0,0,0,0,0,0,0 //KN_SPEARSTAB#Spear Stab#
-4081,59,5,56,3,0,0,0,0,0,0,0,0 //KN_SPEARBOOMERANG#Spear Boomerang#
-4081,60,10,3,1,0,0,0,0,0,0,0,0 //KN_TWOHANDQUICKEN#Twohand Quicken#
-4081,61,5,3,1,0,0,0,0,0,0,0,0 //KN_AUTOCOUNTER#Counter Attack#
-4081,62,10,5,10,7,3,3,5,60,10,61,5//KN_BOWLINGBASH#Bowling Bash#
-4081,63,1,8,1,0,0,0,0,0,0,0,0 //KN_RIDING#Peco Peco Riding#
-4081,64,5,63,1,0,0,0,0,0,0,0,0 //KN_CAVALIERMASTERY#Cavalier Mastery#
-4081,1001,1,0,0,0,0,0,0,0,0,0,0 //KN_CHARGEATK#Charge Attack#
-4081,355,5,5,5,7,5,3,5,0,0,0,0 //LK_AURABLADE#Aura Blade#
-4081,356,10,3,10,6,5,60,3,0,0,0,0 //LK_PARRYING#Parrying#
-4081,357,5,4,1,55,5,63,1,0,0,0,0 //LK_CONCENTRATION#Concentration#
-4081,358,1,4,10,6,5,8,3,0,0,0,0 //LK_TENSIONRELAX#Relax#
-4081,359,1,50,0,0,0,0,0,0,0,0,0,0 //LK_BERSERK#Frenzy# //It has an extra column after "MaxLevel" for Job Level 50 requirement
-4081,397,5,55,10,56,5,58,5,63,1,0,0 //LK_SPIRALPIERCE#Spiral Pierce#
-4081,398,5,55,9,63,1,0,0,0,0,0,0 //LK_HEADCRUSH#Traumatic Blow#
-4081,399,10,55,9,64,3,398,3,0,0,0,0 //LK_JOINTBEAT#Vital Strike#
-4081,495,1,60,10,0,0,0,0,0,0,0,0 //KN_ONEHAND#Onehand Quicken#
-4081,2001,5,2010,2,0,0,0,0,0,0,0,0 //RK_ENCHANTBLADE#Enchant Blade#
-4081,2002,5,2001,3,0,0,0,0,0,0,0,0 //RK_SONICWAVE#Sonic Wave#
-4081,2003,10,61,1,2001,2,0,0,0,0,0,0 //RK_DEATHBOUND#Death Bound#
-4081,2004,10,2020,3,0,0,0,0,0,0,0,0 //RK_HUNDREDSPEAR#Hundred Spears#
-4081,2005,5,2001,5,0,0,0,0,0,0,0,0 //RK_WINDCUTTER#Wind Cutter#
-4081,2006,5,2002,2,2003,5,2005,3,0,0,0,0 //RK_IGNITIONBREAK#Ignition Break#
-4081,2007,5,64,1,0,0,0,0,0,0,0,0 //RK_DRAGONTRAINING#Dragon Training#
-4081,2008,10,2007,2,0,0,0,0,0,0,0,0 //RK_DRAGONBREATH#Dragon Breath#
-4081,2009,5,2007,2,0,0,0,0,0,0,0,0 //RK_DRAGONHOWLING#Dragon Howling#
-4081,2010,10,0,0,0,0,0,0,0,0,0,0 //RK_RUNEMASTERY#Rune Mastery#
-4081,2020,5,57,2,0,0,0,0,0,0,0,0 //RK_PHANTOMTHRUST#Phantom Thrust#
-4081,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4081,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Royal Guard2
-4082,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4082,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4082,2,10,0,0,0,0,0,0,0,0,0,0 //SM_SWORD#Sword Mastery#
-4082,3,10,2,1,0,0,0,0,0,0,0,0 //SM_TWOHAND#Two-Handed Sword Mastery#
-4082,4,10,0,0,0,0,0,0,0,0,0,0 //SM_RECOVERY#Increase HP Recovery#
-4082,5,10,0,0,0,0,0,0,0,0,0,0 //SM_BASH#Bash#
-4082,6,10,0,0,0,0,0,0,0,0,0,0 //SM_PROVOKE#Provoke#
-4082,7,10,5,5,0,0,0,0,0,0,0,0 //SM_MAGNUM#Magnum Break#
-4082,8,10,6,5,0,0,0,0,0,0,0,0 //SM_ENDURE#Endure#
-4082,144,1,0,0,0,0,0,0,0,0,0,0 //SM_MOVINGRECOVERY#Moving HP-Recovery#
-4082,145,1,0,0,0,0,0,0,0,0,0,0 //SM_FATALBLOW#Attack Weak Point#
-4082,146,1,0,0,0,0,0,0,0,0,0,0 //SM_AUTOBERSERK#Auto Berserk#
-4082,63,1,8,1,0,0,0,0,0,0,0,0 //KN_RIDING#Peco Peco Riding#
-4082,64,5,63,1,0,0,0,0,0,0,0,0 //KN_CAVALIERMASTERY#Cavalier Mastery#
-4082,55,10,0,0,0,0,0,0,0,0,0,0 //KN_SPEARMASTERY#Spear Mastery#
-4082,35,1,248,5,0,0,0,0,0,0,0,0 //AL_CURE#Cure#
-4082,22,10,35,1,0,0,0,0,0,0,0,0 //AL_DP#Divine Protection#
-4082,23,10,22,3,0,0,0,0,0,0,0,0 //AL_DEMONBANE#Demon Bane#
-4082,28,10,23,5,248,10,0,0,0,0,0,0 //AL_HEAL#Heal#
-4082,248,10,0,0,0,0,0,0,0,0,0,0 //CR_TRUST#Faith#
-4082,249,10,0,0,0,0,0,0,0,0,0,0 //CR_AUTOGUARD#Guard#
-4082,250,5,249,5,0,0,0,0,0,0,0,0 //CR_SHIELDCHARGE#Smite#
-4082,251,5,250,3,0,0,0,0,0,0,0,0 //CR_SHIELDBOOMERANG#Shield Boomerang#
-4082,252,10,251,3,0,0,0,0,0,0,0,0 //CR_REFLECTSHIELD#Shield Reflect#
-4082,253,10,248,7,0,0,0,0,0,0,0,0 //CR_HOLYCROSS#Holy Cross#
-4082,254,10,253,6,248,10,0,0,0,0,0,0 //CR_GRANDCROSS#Grand Cross#
-4082,255,5,252,5,254,4,0,0,0,0,0,0 //CR_DEVOTION#Sacrifice#
-4082,256,5,22,5,28,5,0,0,0,0,0,0 //CR_PROVIDENCE#Resistant Souls#
-4082,257,5,251,1,0,0,0,0,0,0,0,0 //CR_DEFENDER#Defending Aura#
-4082,258,10,55,10,0,0,0,0,0,0,0,0 //CR_SPEARQUICKEN#Spear Quicken#
-4082,1002,1,0,0,0,0,0,0,0,0,0,0 //CR_SHRINK#Shrink#
-4082,2307,5,2312,1,0,0,0,0,0,0,0,0 //LG_CANNONSPEAR#Cannon Spear#
-4082,2308,10,55,1,0,0,0,0,0,0,0,0 //LG_BANISHINGPOINT#Banishing Point#
-4082,2309,3,0,0,0,0,0,0,0,0,0,0 //LG_TRAMPLE#Trample#
-4082,2310,5,250,3,0,0,0,0,0,0,0,0 //LG_SHIELDPRESS#Shield Press#
-4082,2311,5,252,5,0,0,0,0,0,0,0,0 //LG_REFLECTDAMAGE#Reflect Damage#
-4082,2312,5,2308,5,0,0,0,0,0,0,0,0 //LG_PINPOINTATTACK#Pinpoint Attack#
-4082,2313,5,0,0,0,0,0,0,0,0,0,0 //LG_FORCEOFVANGUARD#Vanguard Force#
-4082,2314,1,2313,1,0,0,0,0,0,0,0,0 //LG_RAGEBURST#Rage Burst Attack#
-4082,2315,3,2310,3,2323,2,0,0,0,0,0,0 //LG_SHIELDSPELL#Shield Spell#
-4082,2316,5,2308,3,0,0,0,0,0,0,0,0 //LG_EXEEDBREAK#Exceed Break#
-4082,2317,5,2312,1,2320,3,0,0,0,0,0,0 //LG_OVERBRAND#Over Brand#
-4082,2318,5,2309,3,0,0,0,0,0,0,0,0 //LG_PRESTIGE#Prestige#
-4082,2319,5,2312,3,2314,1,0,0,0,0,0,0 //LG_BANDING#Banding#
-4082,2320,5,55,1,0,0,0,0,0,0,0,0 //LG_MOONSLASHER#Moon Slasher#
-4082,2321,5,254,5,0,0,0,0,0,0,0,0 //LG_RAYOFGENESIS#Genesis Ray#
-4082,2322,5,248,3,0,0,0,0,0,0,0,0 //LG_PIETY#Piety#
-4082,2323,5,2311,3,0,0,0,0,0,0,0,0 //LG_EARTHDRIVE#Earth Drive#
-4082,2324,5,2318,3,2319,3,0,0,0,0,0,0 //LG_HESPERUSLIT#Hesperus Lit#
-4082,2325,5,2315,3,2321,4,2322,5,0,0,0,0 //LG_INSPIRATION#Inspiration#
-4082,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4082,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Royal Guard H2
-4083,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4083,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4083,2,10,0,0,0,0,0,0,0,0,0,0 //SM_SWORD#Sword Mastery#
-4083,3,10,2,1,0,0,0,0,0,0,0,0 //SM_TWOHAND#Two-Handed Sword Mastery#
-4083,4,10,0,0,0,0,0,0,0,0,0,0 //SM_RECOVERY#Increase HP Recovery#
-4083,5,10,0,0,0,0,0,0,0,0,0,0 //SM_BASH#Bash#
-4083,6,10,0,0,0,0,0,0,0,0,0,0 //SM_PROVOKE#Provoke#
-4083,7,10,5,5,0,0,0,0,0,0,0,0 //SM_MAGNUM#Magnum Break#
-4083,8,10,6,5,0,0,0,0,0,0,0,0 //SM_ENDURE#Endure#
-4083,144,1,0,0,0,0,0,0,0,0,0,0 //SM_MOVINGRECOVERY#Moving HP-Recovery#
-4083,145,1,0,0,0,0,0,0,0,0,0,0 //SM_FATALBLOW#Attack Weak Point#
-4083,146,1,0,0,0,0,0,0,0,0,0,0 //SM_AUTOBERSERK#Auto Berserk#
-4083,63,1,8,1,0,0,0,0,0,0,0,0 //KN_RIDING#Peco Peco Riding#
-4083,64,5,63,1,0,0,0,0,0,0,0,0 //KN_CAVALIERMASTERY#Cavalier Mastery#
-4083,55,10,0,0,0,0,0,0,0,0,0,0 //KN_SPEARMASTERY#Spear Mastery#
-4083,35,1,248,5,0,0,0,0,0,0,0,0 //AL_CURE#Cure#
-4083,22,10,35,1,0,0,0,0,0,0,0,0 //AL_DP#Divine Protection#
-4083,23,10,22,3,0,0,0,0,0,0,0,0 //AL_DEMONBANE#Demon Bane#
-4083,28,10,23,5,248,10,0,0,0,0,0,0 //AL_HEAL#Heal#
-4083,248,10,0,0,0,0,0,0,0,0,0,0 //CR_TRUST#Faith#
-4083,249,10,0,0,0,0,0,0,0,0,0,0 //CR_AUTOGUARD#Guard#
-4083,250,5,249,5,0,0,0,0,0,0,0,0 //CR_SHIELDCHARGE#Smite#
-4083,251,5,250,3,0,0,0,0,0,0,0,0 //CR_SHIELDBOOMERANG#Shield Boomerang#
-4083,252,10,251,3,0,0,0,0,0,0,0,0 //CR_REFLECTSHIELD#Shield Reflect#
-4083,253,10,248,7,0,0,0,0,0,0,0,0 //CR_HOLYCROSS#Holy Cross#
-4083,254,10,253,6,248,10,0,0,0,0,0,0 //CR_GRANDCROSS#Grand Cross#
-4083,255,5,252,5,254,4,0,0,0,0,0,0 //CR_DEVOTION#Sacrifice#
-4083,256,5,22,5,28,5,0,0,0,0,0,0 //CR_PROVIDENCE#Resistant Souls#
-4083,257,5,251,1,0,0,0,0,0,0,0,0 //CR_DEFENDER#Defending Aura#
-4083,258,10,55,10,0,0,0,0,0,0,0,0 //CR_SPEARQUICKEN#Spear Quicken#
-4083,1002,1,0,0,0,0,0,0,0,0,0,0 //CR_SHRINK#Shrink#
-4083,367,5,8,5,248,5,250,2,0,0,0,0 //PA_PRESSURE#Gloria Domini#
-4083,368,5,8,1,248,5,255,3,0,0,0,0 //PA_SACRIFICE#Martyr's Reckoning#
-4083,369,10,248,8,22,3,23,5,0,0,0,0 //PA_GOSPEL#Battle Chant#
-4083,480,5,251,5,0,0,0,0,0,0,0,0 //PA_SHIELDCHAIN#Shield Chain#
-4083,2307,5,2312,1,0,0,0,0,0,0,0,0 //LG_CANNONSPEAR#Cannon Spear#
-4083,2308,10,55,1,0,0,0,0,0,0,0,0 //LG_BANISHINGPOINT#Banishing Point#
-4083,2309,3,0,0,0,0,0,0,0,0,0,0 //LG_TRAMPLE#Trample#
-4083,2310,5,250,3,0,0,0,0,0,0,0,0 //LG_SHIELDPRESS#Shield Press#
-4083,2311,5,252,5,0,0,0,0,0,0,0,0 //LG_REFLECTDAMAGE#Reflect Damage#
-4083,2312,5,2308,5,0,0,0,0,0,0,0,0 //LG_PINPOINTATTACK#Pinpoint Attack#
-4083,2313,5,0,0,0,0,0,0,0,0,0,0 //LG_FORCEOFVANGUARD#Vanguard Force#
-4083,2314,1,2313,1,0,0,0,0,0,0,0,0 //LG_RAGEBURST#Rage Burst Attack#
-4083,2315,3,2310,3,2323,2,0,0,0,0,0,0 //LG_SHIELDSPELL#Shield Spell#
-4083,2316,5,2308,3,0,0,0,0,0,0,0,0 //LG_EXEEDBREAK#Exceed Break#
-4083,2317,5,2312,1,2320,3,0,0,0,0,0,0 //LG_OVERBRAND#Over Brand#
-4083,2318,5,2309,3,0,0,0,0,0,0,0,0 //LG_PRESTIGE#Prestige#
-4083,2319,5,2312,3,2314,1,0,0,0,0,0,0 //LG_BANDING#Banding#
-4083,2320,5,55,1,0,0,0,0,0,0,0,0 //LG_MOONSLASHER#Moon Slasher#
-4083,2321,5,254,5,0,0,0,0,0,0,0,0 //LG_RAYOFGENESIS#Genesis Ray#
-4083,2322,5,248,3,0,0,0,0,0,0,0,0 //LG_PIETY#Piety#
-4083,2323,5,2311,3,0,0,0,0,0,0,0,0 //LG_EARTHDRIVE#Earth Drive#
-4083,2324,5,2318,3,2319,3,0,0,0,0,0,0 //LG_HESPERUSLIT#Hesperus Lit#
-4083,2325,5,2315,3,2321,4,2322,5,0,0,0,0 //LG_INSPIRATION#Inspiration#
-4083,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4083,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Ranger2
-4084,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4084,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4084,43,10,0,0,0,0,0,0,0,0,0,0 //AC_OWL#Owl's Eye#
-4084,44,10,43,3,0,0,0,0,0,0,0,0 //AC_VULTURE#Vulture's Eye#
-4084,45,10,44,1,0,0,0,0,0,0,0,0 //AC_CONCENTRATION#Improve Concentration#
-4084,46,10,0,0,0,0,0,0,0,0,0,0 //AC_DOUBLE#Double Strafe#
-4084,47,10,46,5,0,0,0,0,0,0,0,0 //AC_SHOWER#Arrow Shower#
-4084,147,1,0,0,0,0,0,0,0,0,0,0 //AC_MAKINGARROW#Arrow Crafting#
-4084,148,1,0,0,0,0,0,0,0,0,0,0 //AC_CHARGEARROW#Arrow Repel#
-4084,115,5,0,0,0,0,0,0,0,0,0,0 //HT_SKIDTRAP#Skid Trap#
-4084,116,5,0,0,0,0,0,0,0,0,0,0 //HT_LANDMINE#Land Mine#
-4084,117,5,115,1,0,0,0,0,0,0,0,0 //HT_ANKLESNARE#Ankle Snare#
-4084,118,5,117,1,0,0,0,0,0,0,0,0 //HT_SHOCKWAVE#Shockwave Trap#
-4084,119,5,120,1,0,0,0,0,0,0,0,0 //HT_SANDMAN#Sandman#
-4084,120,5,115,1,0,0,0,0,0,0,0,0 //HT_FLASHER#Flasher#
-4084,121,5,120,1,0,0,0,0,0,0,0,0 //HT_FREEZINGTRAP#Freezing Trap#
-4084,122,5,116,1,119,1,121,1,0,0,0,0 //HT_BLASTMINE#Blast Mine#
-4084,123,5,118,1,122,1,0,0,0,0,0,0 //HT_CLAYMORETRAP#Claymore Trap#
-4084,124,1,116,1,0,0,0,0,0,0,0,0 //HT_REMOVETRAP#Remove Trap#
-4084,125,1,118,1,124,1,0,0,0,0,0,0 //HT_TALKIEBOX#Talkie Box#
-4084,126,10,0,0,0,0,0,0,0,0,0,0 //HT_BEASTBANE#Beast Bane#
-4084,127,1,126,1,0,0,0,0,0,0,0,0 //HT_FALCON#Falconry Mastery#
-4084,128,10,129,5,0,0,0,0,0,0,0,0 //HT_STEELCROW#Steel Crow#
-4084,129,5,127,1,0,0,0,0,0,0,0,0 //HT_BLITZBEAT#Blitz Beat#
-4084,130,4,45,1,127,1,0,0,0,0,0,0 //HT_DETECTING#Detect#
-4084,131,5,124,1,127,1,0,0,0,0,0,0 //HT_SPRINGTRAP#Spring Trap#
-4084,1009,1,0,0,0,0,0,0,0,0,0,0 //HT_PHANTASMIC#Phantasmic Arrow#
-4084,499,1,46,10,0,0,0,0,0,0,0,0 //HT_POWER#Beast Strafing#
-4084,2233,10,2236,5,0,0,0,0,0,0,0,0 //RA_ARROWSTORM#Arrow Storm#
-4084,2234,5,2233,5,2247,1,0,0,0,0,0,0 //RA_FEARBREEZE#Feer Breeze#
-4084,2235,10,0,0,0,0,0,0,0,0,0,0 //RA_RANGERMAIN#Main Ranger#
-4084,2236,10,117,5,0,0,0,0,0,0,0,0 //RA_AIMEDBOLT#Aimed Bolt#
-4084,2237,1,2239,3,0,0,0,0,0,0,0,0 //RA_DETONATOR#Detonator#
-4084,2238,5,118,5,0,0,0,0,0,0,0,0 //RA_ELECTRICSHOCKER#Electric Shock#
-4084,2239,5,2248,3,0,0,0,0,0,0,0,0 //RA_CLUSTERBOMB#Bomb Cluster#
-4084,2240,1,0,0,0,0,0,0,0,0,0,0 //RA_WUGMASTERY#Wug Mastery#
-4084,2241,3,2240,1,0,0,0,0,0,0,0,0 //RA_WUGRIDER#Wug Rider#
-4084,2242,1,2241,1,0,0,0,0,0,0,0,0 //RA_WUGDASH#Wug Dash#
-4084,2243,5,2245,1,0,0,0,0,0,0,0,0 //RA_WUGSTRIKE#Wug Strike#
-4084,2244,5,2243,1,0,0,0,0,0,0,0,0 //RA_WUGBITE#Wug Bite#
-4084,2245,10,2240,1,0,0,0,0,0,0,0,0 //RA_TOOTHOFWUG#Tooth of Wug#
-4084,2246,5,2245,3,0,0,0,0,0,0,0,0 //RA_SENSITIVEKEEN#Keen Nose#
-4084,2247,5,2235,1,0,0,0,0,0,0,0,0 //RA_CAMOUFLAGE#Camouflage#
-4084,2248,5,123,1,124,1,0,0,0,0,0,0 //RA_RESEARCHTRAP#Trap Research#
-4084,2249,1,2248,1,0,0,0,0,0,0,0,0 //RA_MAGENTATRAP#Magneta Trap#
-4084,2250,1,2248,1,0,0,0,0,0,0,0,0 //RA_COBALTTRAP#Cobalt Trap#
-4084,2251,1,2248,1,0,0,0,0,0,0,0,0 //RA_MAIZETRAP#Maze Trap#
-4084,2252,1,2248,1,0,0,0,0,0,0,0,0 //RA_VERDURETRAP#Verdure Trap#
-4084,2253,5,2237,1,0,0,0,0,0,0,0,0 //RA_FIRINGTRAP#Fire Trap#
-4084,2254,5,2237,1,0,0,0,0,0,0,0,0 //RA_ICEBOUNDTRAP#Ice Trap#
-4084,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4084,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Ranger H2
-4085,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4085,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4085,43,10,0,0,0,0,0,0,0,0,0,0 //AC_OWL#Owl's Eye#
-4085,44,10,43,3,0,0,0,0,0,0,0,0 //AC_VULTURE#Vulture's Eye#
-4085,45,10,44,1,0,0,0,0,0,0,0,0 //AC_CONCENTRATION#Improve Concentration#
-4085,46,10,0,0,0,0,0,0,0,0,0,0 //AC_DOUBLE#Double Strafe#
-4085,47,10,46,5,0,0,0,0,0,0,0,0 //AC_SHOWER#Arrow Shower#
-4085,147,1,0,0,0,0,0,0,0,0,0,0 //AC_MAKINGARROW#Arrow Crafting#
-4085,148,1,0,0,0,0,0,0,0,0,0,0 //AC_CHARGEARROW#Arrow Repel#
-4085,115,5,0,0,0,0,0,0,0,0,0,0 //HT_SKIDTRAP#Skid Trap#
-4085,116,5,0,0,0,0,0,0,0,0,0,0 //HT_LANDMINE#Land Mine#
-4085,117,5,115,1,0,0,0,0,0,0,0,0 //HT_ANKLESNARE#Ankle Snare#
-4085,118,5,117,1,0,0,0,0,0,0,0,0 //HT_SHOCKWAVE#Shockwave Trap#
-4085,119,5,120,1,0,0,0,0,0,0,0,0 //HT_SANDMAN#Sandman#
-4085,120,5,115,1,0,0,0,0,0,0,0,0 //HT_FLASHER#Flasher#
-4085,121,5,120,1,0,0,0,0,0,0,0,0 //HT_FREEZINGTRAP#Freezing Trap#
-4085,122,5,116,1,119,1,121,1,0,0,0,0 //HT_BLASTMINE#Blast Mine#
-4085,123,5,118,1,122,1,0,0,0,0,0,0 //HT_CLAYMORETRAP#Claymore Trap#
-4085,124,1,116,1,0,0,0,0,0,0,0,0 //HT_REMOVETRAP#Remove Trap#
-4085,125,1,118,1,124,1,0,0,0,0,0,0 //HT_TALKIEBOX#Talkie Box#
-4085,126,10,0,0,0,0,0,0,0,0,0,0 //HT_BEASTBANE#Beast Bane#
-4085,127,1,126,1,0,0,0,0,0,0,0,0 //HT_FALCON#Falconry Mastery#
-4085,128,10,129,5,0,0,0,0,0,0,0,0 //HT_STEELCROW#Steel Crow#
-4085,129,5,127,1,0,0,0,0,0,0,0,0 //HT_BLITZBEAT#Blitz Beat#
-4085,130,4,45,1,127,1,0,0,0,0,0,0 //HT_DETECTING#Detect#
-4085,131,5,124,1,127,1,0,0,0,0,0,0 //HT_SPRINGTRAP#Spring Trap#
-4085,1009,1,0,0,0,0,0,0,0,0,0,0 //HT_PHANTASMIC#Phantasmic Arrow#
-4085,380,10,43,10,44,10,45,10,127,1,0,0 //SN_SIGHT#Falcon Eyes#
-4085,381,5,128,3,44,5,129,5,127,1,0,0 //SN_FALCONASSAULT#Falcon Assault#
-4085,382,5,45,10,46,5,0,0,0,0,0,0 //SN_SHARPSHOOTING#Focused Arrow Strike#
-4085,383,10,45,9,0,0,0,0,0,0,0,0 //SN_WINDWALK#Wind Walker#
-4085,499,1,46,10,0,0,0,0,0,0,0,0 //HT_POWER#Beast Strafing#
-4085,2233,10,2236,5,0,0,0,0,0,0,0,0 //RA_ARROWSTORM#Arrow Storm#
-4085,2234,5,2233,5,2247,1,0,0,0,0,0,0 //RA_FEARBREEZE#Feer Breeze#
-4085,2235,10,0,0,0,0,0,0,0,0,0,0 //RA_RANGERMAIN#Main Ranger#
-4085,2236,10,117,5,0,0,0,0,0,0,0,0 //RA_AIMEDBOLT#Aimed Bolt#
-4085,2237,1,2239,3,0,0,0,0,0,0,0,0 //RA_DETONATOR#Detonator#
-4085,2238,5,118,5,0,0,0,0,0,0,0,0 //RA_ELECTRICSHOCKER#Electric Shock#
-4085,2239,5,2248,3,0,0,0,0,0,0,0,0 //RA_CLUSTERBOMB#Bomb Cluster#
-4085,2240,1,0,0,0,0,0,0,0,0,0,0 //RA_WUGMASTERY#Wug Mastery#
-4085,2241,3,2240,1,0,0,0,0,0,0,0,0 //RA_WUGRIDER#Wug Rider#
-4085,2242,1,2241,1,0,0,0,0,0,0,0,0 //RA_WUGDASH#Wug Dash#
-4085,2243,5,2245,1,0,0,0,0,0,0,0,0 //RA_WUGSTRIKE#Wug Strike#
-4085,2244,5,2243,1,0,0,0,0,0,0,0,0 //RA_WUGBITE#Wug Bite#
-4085,2245,10,2240,1,0,0,0,0,0,0,0,0 //RA_TOOTHOFWUG#Tooth of Wug#
-4085,2246,5,2245,3,0,0,0,0,0,0,0,0 //RA_SENSITIVEKEEN#Keen Nose#
-4085,2247,5,2235,1,0,0,0,0,0,0,0,0 //RA_CAMOUFLAGE#Camouflage#
-4085,2248,5,123,1,124,1,0,0,0,0,0,0 //RA_RESEARCHTRAP#Trap Research#
-4085,2249,1,2248,1,0,0,0,0,0,0,0,0 //RA_MAGENTATRAP#Magneta Trap#
-4085,2250,1,2248,1,0,0,0,0,0,0,0,0 //RA_COBALTTRAP#Cobalt Trap#
-4085,2251,1,2248,1,0,0,0,0,0,0,0,0 //RA_MAIZETRAP#Maze Trap#
-4085,2252,1,2248,1,0,0,0,0,0,0,0,0 //RA_VERDURETRAP#Verdure Trap#
-4085,2253,5,2237,1,0,0,0,0,0,0,0,0 //RA_FIRINGTRAP#Fire Trap#
-4085,2254,5,2237,1,0,0,0,0,0,0,0,0 //RA_ICEBOUNDTRAP#Ice Trap#
-4085,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4085,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Mechanic2
-4086,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4086,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4086,36,10,0,0,0,0,0,0,0,0,0,0 //MC_INCCARRY#Enlarge Weight Limit#
-4086,37,10,36,3,0,0,0,0,0,0,0,0 //MC_DISCOUNT#Discount#
-4086,38,10,37,3,0,0,0,0,0,0,0,0 //MC_OVERCHARGE#Overcharge#
-4086,39,4086,36,5,0,0,0,0,0,0,0,0 //MC_PUSHCART#Pushcart#
-4086,40,1,0,0,0,0,0,0,0,0,0,0 //MC_IDENTIFY#Item Appraisal#
-4086,41,10,39,3,0,0,0,0,0,0,0,0 //MC_VENDING#Vending#
-4086,42,10,0,0,0,0,0,0,0,0,0,0 //MC_MAMMONITE#Mammonite#
-4086,153,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTREVOLUTION#Cart Revolution#
-4086,154,1,0,0,0,0,0,0,0,0,0,0 //MC_CHANGECART#Change Cart#
-4086,155,1,0,0,0,0,0,0,0,0,0,0 //MC_LOUD#Crazy Uproar#
-4086,94,5,0,0,0,0,0,0,0,0,0,0 //BS_IRON#Iron Tempering#
-4086,95,5,94,1,0,0,0,0,0,0,0,0 //BS_STEEL#Steel Tempering#
-4086,96,5,94,1,0,0,0,0,0,0,0,0 //BS_ENCHANTEDSTONE#Enchanted Stone Craft#
-4086,97,5,96,1,0,0,0,0,0,0,0,0 //BS_ORIDEOCON#Oridecon Research#
-4086,98,3,0,0,0,0,0,0,0,0,0,0 //BS_DAGGER#Smith Dagger#
-4086,99,3,98,1,0,0,0,0,0,0,0,0 //BS_SWORD#Smith Sword#
-4086,100,3,99,1,0,0,0,0,0,0,0,0 //BS_TWOHANDSWORD#Smith Two-handed Sword#
-4086,101,3,99,2,0,0,0,0,0,0,0,0 //BS_AXE#Smith Axe#
-4086,102,3,103,1,0,0,0,0,0,0,0,0 //BS_MACE#Smith Mace#
-4086,103,3,98,1,0,0,0,0,0,0,0,0 //BS_KNUCKLE#Smith Knucklebrace#
-4086,104,3,98,2,0,0,0,0,0,0,0,0 //BS_SPEAR#Smith Spear#
-4086,105,1,0,0,0,0,0,0,0,0,0,0 //BS_HILTBINDING#Hilt Binding#
-4086,106,1,95,1,105,1,0,0,0,0,0,0 //BS_FINDINGORE#Ore Discovery#
-4086,107,10,105,1,0,0,0,0,0,0,0,0 //BS_WEAPONRESEARCH#Weaponry Research#
-4086,108,1,107,1,0,0,0,0,0,0,0,0 //BS_REPAIRWEAPON#Weapon Repair#
-4086,109,5,0,0,0,0,0,0,0,0,0,0 //BS_SKINTEMPER#Skin Tempering#
-4086,110,5,0,0,0,0,0,0,0,0,0,0 //BS_HAMMERFALL#Hammer Fall#
-4086,111,5,110,2,0,0,0,0,0,0,0,0 //BS_ADRENALINE#Adrenaline Rush#
-4086,112,5,107,2,111,2,0,0,0,0,0,0 //BS_WEAPONPERFECT#Weapon Perfection#
-4086,113,5,111,3,0,0,0,0,0,0,0,0 //BS_OVERTHRUST#Power-Thrust#
-4086,114,5,112,3,113,2,0,0,0,0,0,0 //BS_MAXIMIZE#Maximize Power#
-4086,1012,1,0,0,0,0,0,0,0,0,0,0 //BS_UNFAIRLYTRICK#Unfair Trick#
-4086,1013,1,0,0,0,0,0,0,0,0,0,0 //BS_GREED#Greed#
-4086,459,1,111,5,0,0,0,0,0,0,0,0 //BS_ADRENALINE2#Full Adrenaline Rush#
-4086,2255,5,0,0,0,0,0,0,0,0,0,0 //NC_MADOLICENCE#Madogear License#
-4086,2256,5,2255,1,0,0,0,0,0,0,0,0 //NC_BOOSTKNUCKLE#Nuckle Boost#
-4086,2257,3,2256,2,0,0,0,0,0,0,0,0 //NC_PILEBUNKER#Pile Bunker#
-4086,2258,3,2256,2,0,0,0,0,0,0,0,0 //NC_VULCANARM#Vulcan Arm#
-4086,2259,3,2258,1,0,0,0,0,0,0,0,0 //NC_FLAMELAUNCHER#Flame Launcher#
-4086,2260,3,2258,3,0,0,0,0,0,0,0,0 //NC_COLDSLOWER#Cold Slower#
-4086,2261,3,2259,2,2260,2,0,0,0,0,0,0 //NC_ARMSCANNON#Arm Cannon#
-4086,2262,3,2255,1,0,0,0,0,0,0,0,0 //NC_ACCELERATION#Acceleration#
-4086,2263,1,2262,1,0,0,0,0,0,0,0,0 //NC_HOVERING#Hover#
-4086,2264,1,2263,1,0,0,0,0,0,0,0,0 //NC_F_SIDESLIDE#Front Slide#
-4086,2265,1,2263,1,0,0,0,0,0,0,0,0 //NC_B_SIDESLIDE#Back Slide#
-4086,2266,4,2255,4,0,0,0,0,0,0,0,0 //NC_MAINFRAME#Remodel Mainframe#
-4086,2267,3,2266,2,0,0,0,0,0,0,0,0 //NC_SELFDESTRUCTION#Suicidal Destruction#
-4086,2268,4,2266,2,0,0,0,0,0,0,0,0 //NC_SHAPESHIFT#Shift Shape#
-4086,2269,1,2267,2,0,0,0,0,0,0,0,0 //NC_EMERGENCYCOOL#Cool Emergency#
-4086,2270,1,2268,2,0,0,0,0,0,0,0,0 //NC_INFRAREDSCAN#Infra Red Scan#
-4086,2271,3,2270,1,0,0,0,0,0,0,0,0 //NC_ANALYZE#Analyze#
-4086,2272,3,2269,1,0,0,0,0,0,0,0,0 //NC_MAGNETICFIELD#Magnetic Field#
-4086,2273,3,2272,2,0,0,0,0,0,0,0,0 //NC_NEUTRALBARRIER#Magnetic Field#
-4086,2274,3,2271,3,2273,2,0,0,0,0,0,0 //NC_STEALTHFIELD#Stealth Field#
-4086,2275,5,2255,2,0,0,0,0,0,0,0,0 //NC_REPAIR#Repair#
-4086,2276,10,0,0,0,0,0,0,0,0,0,0 //NC_TRAININGAXE#Axe Mastery#
-4086,2277,5,0,0,0,0,0,0,0,0,0,0 //NC_RESEARCHFE#Fire Earth Research#
-4086,2278,5,2276,1,0,0,0,0,0,0,0,0 //NC_AXEBOOMERANG#Axe Boomerang#
-4086,2279,5,2278,3,0,0,0,0,0,0,0,0 //NC_POWERSWING#Power Swing#
-4086,2280,5,2276,1,0,0,0,0,0,0,0,0 //NC_AXETORNADO#Axe Tornado#
-4086,2281,5,2277,2,0,0,0,0,0,0,0,0 //NC_SILVERSNIPER#FAW Silver Sniper#
-4086,2282,5,2281,2,0,0,0,0,0,0,0,0 //NC_MAGICDECOY#FAW Magic Decoy#
-4086,2283,1,2281,1,0,0,0,0,0,0,0,0 //NC_DISJOINT#FAW divest#
-4086,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4086,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-4086,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store#
-//Mechanic H2
-4087,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4087,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4087,36,10,0,0,0,0,0,0,0,0,0,0 //MC_INCCARRY#Enlarge Weight Limit#
-4087,37,10,36,3,0,0,0,0,0,0,0,0 //MC_DISCOUNT#Discount#
-4087,38,10,37,3,0,0,0,0,0,0,0,0 //MC_OVERCHARGE#Overcharge#
-4087,39,10,36,5,0,0,0,0,0,0,0,0 //MC_PUSHCART#Pushcart#
-4087,40,1,0,0,0,0,0,0,0,0,0,0 //MC_IDENTIFY#Item Appraisal#
-4087,41,10,39,3,0,0,0,0,0,0,0,0 //MC_VENDING#Vending#
-4087,42,10,0,0,0,0,0,0,0,0,0,0 //MC_MAMMONITE#Mammonite#
-4087,153,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTREVOLUTION#Cart Revolution#
-4087,154,1,0,0,0,0,0,0,0,0,0,0 //MC_CHANGECART#Change Cart#
-4087,155,1,0,0,0,0,0,0,0,0,0,0 //MC_LOUD#Crazy Uproar#
-4087,94,5,0,0,0,0,0,0,0,0,0,0 //BS_IRON#Iron Tempering#
-4087,95,5,94,1,0,0,0,0,0,0,0,0 //BS_STEEL#Steel Tempering#
-4087,96,5,94,1,0,0,0,0,0,0,0,0 //BS_ENCHANTEDSTONE#Enchanted Stone Craft#
-4087,97,5,96,1,0,0,0,0,0,0,0,0 //BS_ORIDEOCON#Oridecon Research#
-4087,98,3,0,0,0,0,0,0,0,0,0,0 //BS_DAGGER#Smith Dagger#
-4087,99,3,98,1,0,0,0,0,0,0,0,0 //BS_SWORD#Smith Sword#
-4087,100,3,99,1,0,0,0,0,0,0,0,0 //BS_TWOHANDSWORD#Smith Two-handed Sword#
-4087,101,3,99,2,0,0,0,0,0,0,0,0 //BS_AXE#Smith Axe#
-4087,102,3,103,1,0,0,0,0,0,0,0,0 //BS_MACE#Smith Mace#
-4087,103,3,98,1,0,0,0,0,0,0,0,0 //BS_KNUCKLE#Smith Knucklebrace#
-4087,104,3,98,2,0,0,0,0,0,0,0,0 //BS_SPEAR#Smith Spear#
-4087,105,1,0,0,0,0,0,0,0,0,0,0 //BS_HILTBINDING#Hilt Binding#
-4087,106,1,95,1,105,1,0,0,0,0,0,0 //BS_FINDINGORE#Ore Discovery#
-4087,107,10,105,1,0,0,0,0,0,0,0,0 //BS_WEAPONRESEARCH#Weaponry Research#
-4087,108,1,107,1,0,0,0,0,0,0,0,0 //BS_REPAIRWEAPON#Weapon Repair#
-4087,109,5,0,0,0,0,0,0,0,0,0,0 //BS_SKINTEMPER#Skin Tempering#
-4087,110,5,0,0,0,0,0,0,0,0,0,0 //BS_HAMMERFALL#Hammer Fall#
-4087,111,5,110,2,0,0,0,0,0,0,0,0 //BS_ADRENALINE#Adrenaline Rush#
-4087,112,5,107,2,111,2,0,0,0,0,0,0 //BS_WEAPONPERFECT#Weapon Perfection#
-4087,113,5,111,3,0,0,0,0,0,0,0,0 //BS_OVERTHRUST#Power-Thrust#
-4087,114,5,112,3,113,2,0,0,0,0,0,0 //BS_MAXIMIZE#Maximize Power#
-4087,1012,1,0,0,0,0,0,0,0,0,0,0 //BS_UNFAIRLYTRICK#Unfair Trick#
-4087,1013,1,0,0,0,0,0,0,0,0,0,0 //BS_GREED#Greed#
-4087,384,10,109,3,105,1,107,5,113,3,0,0 //WS_MELTDOWN#Shattering Strike#
-4087,387,1,39,5,153,1,154,1,105,1,0,0 //WS_CARTBOOST#Cart Boost#
-4087,477,10,107,10,0,0,0,0,0,0,0,0 //WS_WEAPONREFINE#Upgrade Weapon#
-4087,485,10,42,10,110,5,387,1,0,0,0,0 //WS_CARTTERMINATION#Cart Termination#
-4087,486,5,113,5,0,0,0,0,0,0,0,0 //WS_OVERTHRUSTMAX#Maximum Power Thrust#
-4087,459,1,111,5,0,0,0,0,0,0,0,0 //BS_ADRENALINE2#Full Adrenaline Rush#
-4087,2255,5,0,0,0,0,0,0,0,0,0,0 //NC_MADOLICENCE#Madogear License#
-4087,2256,5,2255,1,0,0,0,0,0,0,0,0 //NC_BOOSTKNUCKLE#Nuckle Boost#
-4087,2257,3,2256,2,0,0,0,0,0,0,0,0 //NC_PILEBUNKER#Pile Bunker#
-4087,2258,3,2256,2,0,0,0,0,0,0,0,0 //NC_VULCANARM#Vulcan Arm#
-4087,2259,3,2258,1,0,0,0,0,0,0,0,0 //NC_FLAMELAUNCHER#Flame Launcher#
-4087,2260,3,2258,3,0,0,0,0,0,0,0,0 //NC_COLDSLOWER#Cold Slower#
-4087,2261,3,2259,2,2260,2,0,0,0,0,0,0 //NC_ARMSCANNON#Arm Cannon#
-4087,2262,3,2255,1,0,0,0,0,0,0,0,0 //NC_ACCELERATION#Acceleration#
-4087,2263,1,2262,1,0,0,0,0,0,0,0,0 //NC_HOVERING#Hover#
-4087,2264,1,2263,1,0,0,0,0,0,0,0,0 //NC_F_SIDESLIDE#Front Slide#
-4087,2265,1,2263,1,0,0,0,0,0,0,0,0 //NC_B_SIDESLIDE#Back Slide#
-4087,2266,4,2255,4,0,0,0,0,0,0,0,0 //NC_MAINFRAME#Remodel Mainframe#
-4087,2267,3,2266,2,0,0,0,0,0,0,0,0 //NC_SELFDESTRUCTION#Suicidal Destruction#
-4087,2268,4,2266,2,0,0,0,0,0,0,0,0 //NC_SHAPESHIFT#Shift Shape#
-4087,2269,1,2267,2,0,0,0,0,0,0,0,0 //NC_EMERGENCYCOOL#Cool Emergency#
-4087,2270,1,2268,2,0,0,0,0,0,0,0,0 //NC_INFRAREDSCAN#Infra Red Scan#
-4087,2271,3,2270,1,0,0,0,0,0,0,0,0 //NC_ANALYZE#Analyze#
-4087,2272,3,2269,1,0,0,0,0,0,0,0,0 //NC_MAGNETICFIELD#Magnetic Field#
-4087,2273,3,2272,2,0,0,0,0,0,0,0,0 //NC_NEUTRALBARRIER#Magnetic Field#
-4087,2274,3,2271,3,2273,2,0,0,0,0,0,0 //NC_STEALTHFIELD#Stealth Field#
-4087,2275,5,2255,2,0,0,0,0,0,0,0,0 //NC_REPAIR#Repair#
-4087,2276,10,0,0,0,0,0,0,0,0,0,0 //NC_TRAININGAXE#Axe Mastery#
-4087,2277,5,0,0,0,0,0,0,0,0,0,0 //NC_RESEARCHFE#Fire Earth Research#
-4087,2278,5,2276,1,0,0,0,0,0,0,0,0 //NC_AXEBOOMERANG#Axe Boomerang#
-4087,2279,5,2278,3,0,0,0,0,0,0,0,0 //NC_POWERSWING#Power Swing#
-4087,2280,5,2276,1,0,0,0,0,0,0,0,0 //NC_AXETORNADO#Axe Tornado#
-4087,2281,5,2277,2,0,0,0,0,0,0,0,0 //NC_SILVERSNIPER#FAW Silver Sniper#
-4087,2282,5,2281,2,0,0,0,0,0,0,0,0 //NC_MAGICDECOY#FAW Magic Decoy#
-4087,2283,1,2281,1,0,0,0,0,0,0,0,0 //NC_DISJOINT#FAW divest#
-4087,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
-4087,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-4087,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store#
-//??? (4088 - 4095)
-//Baby Rune
-4096,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4096,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4096,2,10,0,0,0,0,0,0,0,0,0,0 //SM_SWORD#Sword Mastery#
-4096,3,10,2,1,0,0,0,0,0,0,0,0 //SM_TWOHAND#Two-Handed Sword Mastery#
-4096,4,10,0,0,0,0,0,0,0,0,0,0 //SM_RECOVERY#Increase HP Recovery#
-4096,5,10,0,0,0,0,0,0,0,0,0,0 //SM_BASH#Bash#
-4096,6,10,0,0,0,0,0,0,0,0,0,0 //SM_PROVOKE#Provoke#
-4096,7,10,5,5,0,0,0,0,0,0,0,0 //SM_MAGNUM#Magnum Break#
-4096,8,10,6,5,0,0,0,0,0,0,0,0 //SM_ENDURE#Endure#
-4096,144,1,0,0,0,0,0,0,0,0,0,0 //SM_MOVINGRECOVERY#Moving HP-Recovery#
-4096,145,1,0,0,0,0,0,0,0,0,0,0 //SM_FATALBLOW#Attack Weak Point#
-4096,146,1,0,0,0,0,0,0,0,0,0,0 //SM_AUTOBERSERK#Auto Berserk#
-4096,55,10,0,0,0,0,0,0,0,0,0,0 //KN_SPEARMASTERY#Spear Mastery#
-4096,56,10,55,1,0,0,0,0,0,0,0,0 //KN_PIERCE#Pierce#
-4096,57,10,63,1,58,3,0,0,0,0,0,0 //KN_BRANDISHSPEAR#Brandish Spear#
-4096,58,10,56,5,0,0,0,0,0,0,0,0 //KN_SPEARSTAB#Spear Stab#
-4096,59,5,56,3,0,0,0,0,0,0,0,0 //KN_SPEARBOOMERANG#Spear Boomerang#
-4096,60,10,3,1,0,0,0,0,0,0,0,0 //KN_TWOHANDQUICKEN#Twohand Quicken#
-4096,61,5,3,1,0,0,0,0,0,0,0,0 //KN_AUTOCOUNTER#Counter Attack#
-4096,62,10,5,10,7,3,3,5,60,10,61,5//KN_BOWLINGBASH#Bowling Bash#
-4096,63,1,8,1,0,0,0,0,0,0,0,0 //KN_RIDING#Peco Peco Riding#
-4096,64,5,63,1,0,0,0,0,0,0,0,0 //KN_CAVALIERMASTERY#Cavalier Mastery#
-4096,1001,1,0,0,0,0,0,0,0,0,0,0 //KN_CHARGEATK#Charge Attack#
-4096,495,1,60,10,0,0,0,0,0,0,0,0 //KN_ONEHAND#Onehand Quicken#
-4096,2001,5,2010,2,0,0,0,0,0,0,0,0 //RK_ENCHANTBLADE#Enchant Blade#
-4096,2002,5,2001,3,0,0,0,0,0,0,0,0 //RK_SONICWAVE#Sonic Wave#
-4096,2003,10,61,1,2001,2,0,0,0,0,0,0 //RK_DEATHBOUND#Death Bound#
-4096,2004,10,2020,3,0,0,0,0,0,0,0,0 //RK_HUNDREDSPEAR#Hundred Spears#
-4096,2005,5,2001,5,0,0,0,0,0,0,0,0 //RK_WINDCUTTER#Wind Cutter#
-4096,2006,5,2002,2,2003,5,2005,3,0,0,0,0 //RK_IGNITIONBREAK#Ignition Break#
-4096,2007,5,64,1,0,0,0,0,0,0,0,0 //RK_DRAGONTRAINING#Dragon Training#
-4096,2008,10,2007,2,0,0,0,0,0,0,0,0 //RK_DRAGONBREATH#Dragon Breath#
-4096,2009,5,2007,2,0,0,0,0,0,0,0,0 //RK_DRAGONHOWLING#Dragon Howling#
-4096,2010,10,0,0,0,0,0,0,0,0,0,0 //RK_RUNEMASTERY#Rune Mastery#
-4096,2020,5,57,2,0,0,0,0,0,0,0,0, //RK_PHANTOMTHRUST#Phantom Thrust#
-4096,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent#
-4096,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Baby Warlock
-4097,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4097,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4097,4097,10,0,0,0,0,0,0,0,0,0,0 //MG_SRECOVERY#Increase SP Recovery#
-4097,10,1,0,0,0,0,0,0,0,0,0,0 //MG_SIGHT#Sight#
-4097,11,10,0,0,0,0,0,0,0,0,0,0 //MG_NAPALMBEAT#Napalm Beat#
-4097,12,10,11,7,13,5,0,0,0,0,0,0 //MG_SAFETYWALL#Safety Wall#
-4097,13,10,11,4,0,0,0,0,0,0,0,0 //MG_SOULSTRIKE#Soul Strike#
-4097,14,10,0,0,0,0,0,0,0,0,0,0 //MG_COLDBOLT#Cold Bolt#
-4097,15,10,14,5,0,0,0,0,0,0,0,0 //MG_FROSTDIVER#Frost Diver#
-4097,16,10,0,0,0,0,0,0,0,0,0,0 //MG_STONECURSE#Stone Curse#
-4097,17,10,19,4,0,0,0,0,0,0,0,0 //MG_FIREBALL#Fire Ball#
-4097,18,10,17,5,10,1,0,0,0,0,0,0 //MG_FIREWALL#Fire Wall#
-4097,19,10,0,0,0,0,0,0,0,0,0,0 //MG_FIREBOLT#Fire Bolt#
-4097,20,10,0,0,0,0,0,0,0,0,0,0 //MG_LIGHTNINGBOLT#Lightning Bolt#
-4097,21,10,20,4,0,0,0,0,0,0,0,0 //MG_THUNDERSTORM#Thunderstorm#
-4097,157,1,0,0,0,0,0,0,0,0,0,0 //MG_ENERGYCOAT#Energy Coat#
-4097,80,10,18,1,0,0,0,0,0,0,0,0 //WZ_FIREPILLAR#Fire Pillar#
-4097,81,10,20,1,10,1,0,0,0,0,0,0 //WZ_SIGHTRASHER#Sightrasher#
-4097,83,10,81,2,21,1,0,0,0,0,0,0 //WZ_METEOR#Meteor Storm#
-4097,84,10,11,1,20,1,0,0,0,0,0,0 //WZ_JUPITEL#Jupiter Thunder#
-4097,85,10,21,1,84,5,0,0,0,0,0,0 //WZ_VERMILION#Lord of Vermilion#
-4097,86,5,14,1,20,1,0,0,0,0,0,0 //WZ_WATERBALL#Water Ball#
-4097,87,10,16,1,15,1,0,0,0,0,0,0 //WZ_ICEWALL#Ice Wall#
-4097,88,10,87,1,0,0,0,0,0,0,0,0 //WZ_FROSTNOVA#Frost Nova#
-4097,89,10,15,1,84,3,0,0,0,0,0,0 //WZ_STORMGUST#Storm Gust#
-4097,90,5,16,1,0,0,0,0,0,0,0,0 //WZ_EARTHSPIKE#Earth Spike#
-4097,91,5,90,3,0,0,0,0,0,0,0,0 //WZ_HEAVENDRIVE#Heaven's Drive#
-4097,92,5,91,1,0,0,0,0,0,0,0,0 //WZ_QUAGMIRE#Quagmire#
-4097,93,1,0,0,0,0,0,0,0,0,0,0 //WZ_ESTIMATION#Sense#
-4097,1006,1,0,0,0,0,0,0,0,0,0,0 //WZ_SIGHTBLASTER#Sight Blaster#
-4097,2201,5,2202,3,0,0,0,0,0,0,0,0 //WL_WHITEIMPRISON#White Imprison#
-4097,2202,5,2210,1,0,0,0,0,0,0,0,0 //WL_SOULEXPANSION#Soul Expansion#
-4097,2203,5,2224,1,0,0,0,0,0,0,0,0 //WL_FROSTMISTY#Frost Misty#
-4097,2204,5,2203,2,0,0,0,0,0,0,0,0 //WL_JACKFROST#Jack Frost#
-4097,2205,5,92,1,0,0,0,0,0,0,0,0 //WL_MARSHOFABYSS#Marsh Of Abyss#
-4097,2206,5,2201,1,2209,1,2230,2,0,0,0,0 //WL_RECOGNIZEDSPELL#Recognized Spell#
-4097,2207,5,2229,1,0,0,0,0,0,0,0,0 //WL_SIENNAEXECRATE#Sienna Execrate#
-4097,2208,5,0,0,0,0,0,0,0,0,0,0 //WL_RADIUS#Radius#
-4097,2209,5,2210,1,0,0,0,0,0,0,0,0 //WL_STASIS#Statis#
-4097,2210,5,2208,1,0,0,0,0,0,0,0,0 //WL_DRAINLIFE#Drain Life#
-4097,2211,5,2222,1,0,0,0,0,0,0,0,0 //WL_CRIMSONROCK#Crimson Rock#
-4097,2212,5,2211,2,0,0,0,0,0,0,0,0 //WL_HELLINFERNO#Hell Inferno#
-4097,2213,5,2212,3,0,0,0,0,0,0,0,0 //WL_COMET#Comet#
-4097,2214,5,2223,1,0,0,0,0,0,0,0,0 //WL_CHAINLIGHTNING#Chain Lightning#
-4097,2216,5,2207,2,0,0,0,0,0,0,0,0 //WL_EARTHSTRAIN#Earth Strain#
-4097,2217,5,2204,5,2212,5,2214,5,2216,5,0,0 //WL_TETRAVORTEX#Tetra Vortex#
-4097,2222,5,83,1,0,0,0,0,0,0,0,0 //WL_SUMMONFB#Call Fire Ball#
-4097,2223,5,85,1,0,0,0,0,0,0,0,0 //WL_SUMMONBL#Call Ball Lightening#
-4097,2224,5,89,1,0,0,0,0,0,0,0,0 //WL_SUMMONWB#Call Water Ball#
-4097,2229,5,91,1,0,0,0,0,0,0,0,0 //WL_SUMMONSTONE#Call Stone#
-4097,2230,2,0,0,0,0,0,0,0,0,0,0 //WL_RELEASE#Release#
-4097,2231,1,0,0,0,0,0,0,0,0,0,0 //WL_READING_SB#Reading Spell Book#
-4097,2232,5,0,0,0,0,0,0,0,0,0,0 //WL_FREEZE_SP#Freezing Spell#
-4097,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent#
-4097,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Baby Ranger
-4098,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4098,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4098,43,10,0,0,0,0,0,0,0,0,0,0 //AC_OWL#Owl's Eye#
-4098,44,10,43,3,0,0,0,0,0,0,0,0 //AC_VULTURE#Vulture's Eye#
-4098,45,10,44,1,0,0,0,0,0,0,0,0 //AC_CONCENTRATION#Improve Concentration#
-4098,46,10,0,0,0,0,0,0,0,0,0,0 //AC_DOUBLE#Double Strafe#
-4098,47,10,46,5,0,0,0,0,0,0,0,0 //AC_SHOWER#Arrow Shower#
-4098,147,1,0,0,0,0,0,0,0,0,0,0 //AC_MAKINGARROW#Arrow Crafting#
-4098,148,1,0,0,0,0,0,0,0,0,0,0 //AC_CHARGEARROW#Arrow Repel#
-4098,115,5,0,0,0,0,0,0,0,0,0,0 //HT_SKIDTRAP#Skid Trap#
-4098,116,5,0,0,0,0,0,0,0,0,0,0 //HT_LANDMINE#Land Mine#
-4098,117,5,115,1,0,0,0,0,0,0,0,0 //HT_ANKLESNARE#Ankle Snare#
-4098,118,5,117,1,0,0,0,0,0,0,0,0 //HT_SHOCKWAVE#Shockwave Trap#
-4098,119,5,120,1,0,0,0,0,0,0,0,0 //HT_SANDMAN#Sandman#
-4098,120,5,115,1,0,0,0,0,0,0,0,0 //HT_FLASHER#Flasher#
-4098,121,5,120,1,0,0,0,0,0,0,0,0 //HT_FREEZINGTRAP#Freezing Trap#
-4098,122,5,116,1,119,1,121,1,0,0,0,0 //HT_BLASTMINE#Blast Mine#
-4098,123,5,118,1,122,1,0,0,0,0,0,0 //HT_CLAYMORETRAP#Claymore Trap#
-4098,124,1,116,1,0,0,0,0,0,0,0,0 //HT_REMOVETRAP#Remove Trap#
-4098,125,1,118,1,124,1,0,0,0,0,0,0 //HT_TALKIEBOX#Talkie Box#
-4098,126,10,0,0,0,0,0,0,0,0,0,0 //HT_BEASTBANE#Beast Bane#
-4098,127,1,126,1,0,0,0,0,0,0,0,0 //HT_FALCON#Falconry Mastery#
-4098,128,10,129,5,0,0,0,0,0,0,0,0 //HT_STEELCROW#Steel Crow#
-4098,129,5,127,1,0,0,0,0,0,0,0,0 //HT_BLITZBEAT#Blitz Beat#
-4098,130,4,45,1,127,1,0,0,0,0,0,0 //HT_DETECTING#Detect#
-4098,131,5,124,1,127,1,0,0,0,0,0,0 //HT_SPRINGTRAP#Spring Trap#
-4098,1009,1,0,0,0,0,0,0,0,0,0,0 //HT_PHANTASMIC#Phantasmic Arrow#
-4098,499,1,46,10,0,0,0,0,0,0,0,0 //HT_POWER#Beast Strafing#
-4098,2233,10,2236,5,0,0,0,0,0,0,0,0 //RA_ARROWSTORM#Arrow Storm#
-4098,2234,5,2233,5,2247,1,0,0,0,0,0,0 //RA_FEARBREEZE#Feer Breeze#
-4098,2235,10,0,0,0,0,0,0,0,0,0,0 //RA_RANGERMAIN#Main Ranger#
-4098,2236,10,117,5,0,0,0,0,0,0,0,0 //RA_AIMEDBOLT#Aimed Bolt#
-4098,2237,1,2239,3,0,0,0,0,0,0,0,0 //RA_DETONATOR#Detonator#
-4098,2238,5,118,5,0,0,0,0,0,0,0,0 //RA_ELECTRICSHOCKER#Electric Shock#
-4098,2239,5,2248,3,0,0,0,0,0,0,0,0 //RA_CLUSTERBOMB#Bomb Cluster#
-4098,2240,1,0,0,0,0,0,0,0,0,0,0 //RA_WUGMASTERY#Wug Mastery#
-4098,2241,3,2240,1,0,0,0,0,0,0,0,0 //RA_WUGRIDER#Wug Rider#
-4098,2242,1,2241,1,0,0,0,0,0,0,0,0 //RA_WUGDASH#Wug Dash#
-4098,2243,5,2245,1,0,0,0,0,0,0,0,0 //RA_WUGSTRIKE#Wug Strike#
-4098,2244,5,2243,1,0,0,0,0,0,0,0,0 //RA_WUGBITE#Wug Bite#
-4098,2245,10,2240,1,0,0,0,0,0,0,0,0 //RA_TOOTHOFWUG#Tooth of Wug#
-4098,2246,5,2245,3,0,0,0,0,0,0,0,0 //RA_SENSITIVEKEEN#Keen Nose#
-4098,2247,5,2235,1,0,0,0,0,0,0,0,0 //RA_CAMOUFLAGE#Camouflage#
-4098,2248,5,123,1,124,1,0,0,0,0,0,0 //RA_RESEARCHTRAP#Trap Research#
-4098,2249,1,2248,1,0,0,0,0,0,0,0,0 //RA_MAGENTATRAP#Magneta Trap#
-4098,2250,1,2248,1,0,0,0,0,0,0,0,0 //RA_COBALTTRAP#Cobalt Trap#
-4098,2251,1,2248,1,0,0,0,0,0,0,0,0 //RA_MAIZETRAP#Maze Trap#
-4098,2252,1,2248,1,0,0,0,0,0,0,0,0 //RA_VERDURETRAP#Verdure Trap#
-4098,2253,5,2237,1,0,0,0,0,0,0,0,0 //RA_FIRINGTRAP#Fire Trap#
-4098,2254,5,2237,1,0,0,0,0,0,0,0,0 //RA_ICEBOUNDTRAP#Ice Trap#
-4098,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent#
-4098,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Baby Bishop
-4099,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4099,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4099,22,10,0,0,0,0,0,0,0,0,0,0 //AL_DP#Divine Protection#
-4099,23,10,22,3,0,0,0,0,0,0,0,0 //AL_DEMONBANE#Demon Bane#
-4099,24,1,0,0,0,0,0,0,0,0,0,0 //AL_RUWACH#Ruwach#
-4099,25,1,27,4,0,0,0,0,0,0,0,0 //AL_PNEUMA#Pneuma#
-4099,26,2,24,1,0,0,0,0,0,0,0,0 //AL_TELEPORT#Teleport#
-4099,27,4,26,2,0,0,0,0,0,0,0,0 //AL_WARP#Warp Portal#
-4099,28,10,0,0,0,0,0,0,0,0,0,0 //AL_HEAL#Heal#
-4099,29,10,28,3,0,0,0,0,0,0,0,0 //AL_INCAGI#Increase AGI#
-4099,30,10,29,1,0,0,0,0,0,0,0,0 //AL_DECAGI#Decrease AGI#
-4099,31,1,0,0,0,0,0,0,0,0,0,0 //AL_HOLYWATER#Aqua Benedicta#
-4099,32,10,23,3,0,0,0,0,0,0,0,0 //AL_CRUCIS#Signum Crusis#
-4099,33,10,22,3,0,0,0,0,0,0,0,0 //AL_ANGELUS#Angelus#
-4099,34,10,22,5,0,0,0,0,0,0,0,0 //AL_BLESSING#Blessing#
-4099,35,1,28,2,0,0,0,0,0,0,0,0 //AL_CURE#Cure#
-4099,156,1,0,0,0,0,0,0,0,0,0,0 //AL_HOLYLIGHT#Holy Light#
-4099,9,10,0,0,0,0,0,0,0,0,0,0 //MG_SRECOVERY#Increase SP Recovery#
-4099,12,10,68,4,70,3,0,0,0,0,0,0 //MG_SAFETYWALL#Safety Wall#
-4099,54,4,72,1,9,4,0,0,0,0,0,0 //ALL_RESURRECTION#Resurrection#
-4099,65,10,0,0,0,0,0,0,0,0,0,0 //PR_MACEMASTERY#Mace Mastery#
-4099,66,5,0,0,0,0,0,0,0,0,0,0 //PR_IMPOSITIO#Impositio Manus#
-4099,67,3,66,2,0,0,0,0,0,0,0,0 //PR_SUFFRAGIUM#Suffragium#
-4099,68,5,31,1,66,3,0,0,0,0,0,0 //PR_ASPERSIO#Aspersio#
-4099,69,5,75,3,68,5,0,0,0,0,0,0 //PR_BENEDICTIO#B.S Sacramenti#
-4099,70,10,28,1,0,0,0,0,0,0,0,0 //PR_SANCTUARY#Sanctuary#
-4099,71,4,0,0,0,0,0,0,0,0,0,0 //PR_SLOWPOISON#Slow Poison#
-4099,72,1,0,0,0,0,0,0,0,0,0,0 //PR_STRECOVERY#Status Recovery#
-4099,73,10,33,2,0,0,0,0,0,0,0,0 //PR_KYRIE#Kyrie Eleison#
-4099,74,5,0,0,0,0,0,0,0,0,0,0 //PR_MAGNIFICAT#Magnificat#
-4099,75,5,73,4,74,3,0,0,0,0,0,0 //PR_GLORIA#Gloria#
-4099,76,10,24,1,0,0,0,0,0,0,0,0 //PR_LEXDIVINA#Lex Divina#
-4099,77,10,54,1,76,3,0,0,0,0,0,0 //PR_TURNUNDEAD#Turn Undead#
-4099,78,1,76,5,0,0,0,0,0,0,0,0 //PR_LEXAETERNA#Lex Aeterna#
-4099,79,10,12,1,78,1,77,3,0,0,0,0 //PR_MAGNUS#Magnus Exorcismus#
-4099,1014,1,0,0,0,0,0,0,0,0,0,0 //PR_REDEMPTIO#Redemptio#
-4099,2038,5,77,1,0,0,0,0,0,0,0,0 //AB_JUDEX#Judex#
-4099,2039,5,2041,3,0,0,0,0,0,0,0,0 //AB_ANCILLA#Ancilla#
-4099,2040,10,79,1,2038,5,2039,1,0,0,0,0 //AB_ADORAMUS#Adoramus#
-4099,2041,3,34,1,0,0,0,0,0,0,0,0 //AB_CLEMENTIA#Clementia#
-4099,2042,3,29,1,0,0,0,0,0,0,0,0 //AB_CANTO#Cantocandidus#
-4099,2043,3,28,1,0,0,0,0,0,0,0,0 //AB_CHEAL#Coluseo Heal#
-4099,2044,5,2039,1,0,0,0,0,0,0,0,0 //AB_EPICLESIS#Epiclesis#
-4099,2045,10,73,1,0,0,0,0,0,0,0,0 //AB_PRAEFATIO#Praefatio#
-4099,2046,10,2045,5,0,0,0,0,0,0,0,0 //AB_ORATIO#Oratio#
-4099,2047,4,72,1,0,0,0,0,0,0,0,0 //AB_LAUDAAGNUS#Laudaagnus#
-4099,2048,4,2047,2,0,0,0,0,0,0,0,0 //AB_LAUDARAMUS#Laudaramus#
-4099,2049,10,2044,1,2053,1,0,0,0,0,0,0 //AB_EUCHARISTICA#Eucharistica#
-4099,2050,1,2043,3,0,0,0,0,0,0,0,0 //AB_RENOVATIO#Renovatio#
-4099,2051,5,2050,1,0,0,0,0,0,0,0,0 //AB_HIGHNESSHEAL#High Heal#
-4099,2052,5,2048,2,0,0,0,0,0,0,0,0 //AB_CLEARANCE#Clearance#
-4099,2053,5,2046,5,2054,5,0,0,0,0,0,0 //AB_EXPIATIO#Expiatio#
-4099,2054,10,68,1,0,0,0,0,0,0,0,0 //AB_DUPLELIGHT#Duple Light#
-4099,2057,5,2052,1,0,0,0,0,0,0,0,0 //AB_SILENTIUM#Silentium#
-4099,2515,5,2044,1,2053,1,0,0,0,0,0,0 //AB_SECRAMENT#Secrament#
-4099,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent#
-4099,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Baby Mechanic
-4100,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4100,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4100,36,10,0,0,0,0,0,0,0,0,0,0 //MC_INCCARRY#Enlarge Weight Limit#
-4100,37,10,36,3,0,0,0,0,0,0,0,0 //MC_DISCOUNT#Discount#
-4100,38,10,37,3,0,0,0,0,0,0,0,0 //MC_OVERCHARGE#Overcharge#
-4100,39,4100,36,5,0,0,0,0,0,0,0,0 //MC_PUSHCART#Pushcart#
-4100,40,1,0,0,0,0,0,0,0,0,0,0 //MC_IDENTIFY#Item Appraisal#
-4100,41,10,39,3,0,0,0,0,0,0,0,0 //MC_VENDING#Vending#
-4100,42,10,0,0,0,0,0,0,0,0,0,0 //MC_MAMMONITE#Mammonite#
-4100,153,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTREVOLUTION#Cart Revolution#
-4100,154,1,0,0,0,0,0,0,0,0,0,0 //MC_CHANGECART#Change Cart#
-4100,155,1,0,0,0,0,0,0,0,0,0,0 //MC_LOUD#Crazy Uproar#
-4100,94,5,0,0,0,0,0,0,0,0,0,0 //BS_IRON#Iron Tempering#
-4100,95,5,94,1,0,0,0,0,0,0,0,0 //BS_STEEL#Steel Tempering#
-4100,96,5,94,1,0,0,0,0,0,0,0,0 //BS_ENCHANTEDSTONE#Enchanted Stone Craft#
-4100,97,5,96,1,0,0,0,0,0,0,0,0 //BS_ORIDEOCON#Oridecon Research#
-4100,98,3,0,0,0,0,0,0,0,0,0,0 //BS_DAGGER#Smith Dagger#
-4100,99,3,98,1,0,0,0,0,0,0,0,0 //BS_SWORD#Smith Sword#
-4100,100,3,99,1,0,0,0,0,0,0,0,0 //BS_TWOHANDSWORD#Smith Two-handed Sword#
-4100,101,3,99,2,0,0,0,0,0,0,0,0 //BS_AXE#Smith Axe#
-4100,102,3,103,1,0,0,0,0,0,0,0,0 //BS_MACE#Smith Mace#
-4100,103,3,98,1,0,0,0,0,0,0,0,0 //BS_KNUCKLE#Smith Knucklebrace#
-4100,104,3,98,2,0,0,0,0,0,0,0,0 //BS_SPEAR#Smith Spear#
-4100,105,1,0,0,0,0,0,0,0,0,0,0 //BS_HILTBINDING#Hilt Binding#
-4100,106,1,95,1,105,1,0,0,0,0,0,0 //BS_FINDINGORE#Ore Discovery#
-4100,107,10,105,1,0,0,0,0,0,0,0,0 //BS_WEAPONRESEARCH#Weaponry Research#
-4100,108,1,107,1,0,0,0,0,0,0,0,0 //BS_REPAIRWEAPON#Weapon Repair#
-4100,109,5,0,0,0,0,0,0,0,0,0,0 //BS_SKINTEMPER#Skin Tempering#
-4100,110,5,0,0,0,0,0,0,0,0,0,0 //BS_HAMMERFALL#Hammer Fall#
-4100,111,5,110,2,0,0,0,0,0,0,0,0 //BS_ADRENALINE#Adrenaline Rush#
-4100,112,5,107,2,111,2,0,0,0,0,0,0 //BS_WEAPONPERFECT#Weapon Perfection#
-4100,113,5,111,3,0,0,0,0,0,0,0,0 //BS_OVERTHRUST#Power-Thrust#
-4100,114,5,112,3,113,2,0,0,0,0,0,0 //BS_MAXIMIZE#Maximize Power#
-4100,1012,1,0,0,0,0,0,0,0,0,0,0 //BS_UNFAIRLYTRICK#Unfair Trick#
-4100,1013,1,0,0,0,0,0,0,0,0,0,0 //BS_GREED#Greed#
-4100,459,1,111,5,0,0,0,0,0,0,0,0 //BS_ADRENALINE2#Full Adrenaline Rush#
-4100,2255,5,0,0,0,0,0,0,0,0,0,0 //NC_MADOLICENCE#Madogear License#
-4100,2256,5,2255,1,0,0,0,0,0,0,0,0 //NC_BOOSTKNUCKLE#Nuckle Boost#
-4100,2257,3,2256,2,0,0,0,0,0,0,0,0 //NC_PILEBUNKER#Pile Bunker#
-4100,2258,3,2256,2,0,0,0,0,0,0,0,0 //NC_VULCANARM#Vulcan Arm#
-4100,2259,3,2258,1,0,0,0,0,0,0,0,0 //NC_FLAMELAUNCHER#Flame Launcher#
-4100,2260,3,2258,3,0,0,0,0,0,0,0,0 //NC_COLDSLOWER#Cold Slower#
-4100,2261,3,2259,2,2260,2,0,0,0,0,0,0 //NC_ARMSCANNON#Arm Cannon#
-4100,2262,3,2255,1,0,0,0,0,0,0,0,0 //NC_ACCELERATION#Acceleration#
-4100,2263,1,2262,1,0,0,0,0,0,0,0,0 //NC_HOVERING#Hover#
-4100,2264,1,2263,1,0,0,0,0,0,0,0,0 //NC_F_SIDESLIDE#Front Slide#
-4100,2265,1,2263,1,0,0,0,0,0,0,0,0 //NC_B_SIDESLIDE#Back Slide#
-4100,2266,4,2255,4,0,0,0,0,0,0,0,0 //NC_MAINFRAME#Remodel Mainframe#
-4100,2267,3,2266,2,0,0,0,0,0,0,0,0 //NC_SELFDESTRUCTION#Suicidal Destruction#
-4100,2268,4,2266,2,0,0,0,0,0,0,0,0 //NC_SHAPESHIFT#Shift Shape#
-4100,2269,1,2267,2,0,0,0,0,0,0,0,0 //NC_EMERGENCYCOOL#Cool Emergency#
-4100,2270,1,2268,2,0,0,0,0,0,0,0,0 //NC_INFRAREDSCAN#Infra Red Scan#
-4100,2271,3,2270,1,0,0,0,0,0,0,0,0 //NC_ANALYZE#Analyze#
-4100,2272,3,2269,1,0,0,0,0,0,0,0,0 //NC_MAGNETICFIELD#Magnetic Field#
-4100,2273,3,2272,2,0,0,0,0,0,0,0,0 //NC_NEUTRALBARRIER#Magnetic Field#
-4100,2274,3,2271,3,2273,2,0,0,0,0,0,0 //NC_STEALTHFIELD#Stealth Field#
-4100,2275,5,2255,2,0,0,0,0,0,0,0,0 //NC_REPAIR#Repair#
-4100,2276,10,0,0,0,0,0,0,0,0,0,0 //NC_TRAININGAXE#Axe Mastery#
-4100,2277,5,0,0,0,0,0,0,0,0,0,0 //NC_RESEARCHFE#Fire Earth Research#
-4100,2278,5,2276,1,0,0,0,0,0,0,0,0 //NC_AXEBOOMERANG#Axe Boomerang#
-4100,2279,5,2278,3,0,0,0,0,0,0,0,0 //NC_POWERSWING#Power Swing#
-4100,2280,5,2276,1,0,0,0,0,0,0,0,0 //NC_AXETORNADO#Axe Tornado#
-4100,2281,5,2277,2,0,0,0,0,0,0,0,0 //NC_SILVERSNIPER#FAW Silver Sniper#
-4100,2282,5,2281,2,0,0,0,0,0,0,0,0 //NC_MAGICDECOY#FAW Magic Decoy#
-4100,2283,1,2281,1,0,0,0,0,0,0,0,0 //NC_DISJOINT#FAW divest#
-4100,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent#
-4100,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-4100,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store#
-//Baby Cross
-4101,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4101,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4101,48,10,0,0,0,0,0,0,0,0,0,0 //TF_DOUBLE#Double Attack#
-4101,49,10,0,0,0,0,0,0,0,0,0,0 //TF_MISS#Improve Dodge#
-4101,50,10,0,0,0,0,0,0,0,0,0,0 //TF_STEAL#Steal#
-4101,51,10,50,5,0,0,0,0,0,0,0,0 //TF_HIDING#Hiding#
-4101,52,10,0,0,0,0,0,0,0,0,0,0 //TF_POISON#Envenom#
-4101,53,1,52,3,0,0,0,0,0,0,0,0 //TF_DETOXIFY#Detoxify#
-4101,149,1,0,0,0,0,0,0,0,0,0,0 //TF_SPRINKLESAND#Throw Sand#
-4101,150,1,0,0,0,0,0,0,0,0,0,0 //TF_BACKSLIDING#Back Sliding#
-4101,151,1,0,0,0,0,0,0,0,0,0,0 //TF_PICKSTONE#Find Stone#
-4101,152,1,0,0,0,0,0,0,0,0,0,0 //TF_THROWSTONE#Stone Fling#
-4101,132,5,0,0,0,0,0,0,0,0,0,0 //AS_RIGHT#Righthand Mastery#
-4101,133,5,132,2,0,0,0,0,0,0,0,0 //AS_LEFT#Lefthand Mastery#
-4101,134,10,0,0,0,0,0,0,0,0,0,0 //AS_KATAR#Katar Mastery#
-4101,135,10,51,2,0,0,0,0,0,0,0,0 //AS_CLOAKING#Cloaking#
-4101,136,10,134,4,0,0,0,0,0,0,0,0 //AS_SONICBLOW#Sonic Blow#
-4101,137,5,135,2,136,5,0,0,0,0,0,0 //AS_GRIMTOOTH#Grimtooth#
-4101,138,10,52,1,0,0,0,0,0,0,0,0 //AS_ENCHANTPOISON#Enchant Poison#
-4101,139,10,138,3,0,0,0,0,0,0,0,0 //AS_POISONREACT#Poison React#
-4101,140,10,138,5,0,0,0,0,0,0,0,0 //AS_VENOMDUST#Venom Dust#
-4101,141,10,139,5,140,5,0,0,0,0,0,0 //AS_SPLASHER#Venom Splasher#
-4101,1003,1,0,0,0,0,0,0,0,0,0,0 //AS_SONICACCEL#Sonic Acceleration#
-4101,1004,1,0,0,0,0,0,0,0,0,0,0 //AS_VENOMKNIFE#Throw Venom Knife#
-4101,2021,5,138,3,0,0,0,0,0,0,0,0 //GC_VENOMIMPRESS#Venom Impression#
-4101,2022,5,136,10,0,0,0,0,0,0,0,0 //GC_CROSSIMPACT#Cross Impact#
-4101,2023,5,2022,3,0,0,0,0,0,0,0,0 //GC_DARKILLUSION#Dark Illusion#
-4101,2024,10,0,0,0,0,0,0,0,0,0,0 //GC_RESEARCHNWPOISON#New Poison Research#
-4101,2025,1,2024,1,0,0,0,0,0,0,0,0 //GC_CREATENEWPOISON#New Poison Creation#
-4101,2026,1,2024,5,0,0,0,0,0,0,0,0 //GC_ANTIDOTE#Antidote#
-4101,2027,5,2025,1,0,0,0,0,0,0,0,0 //GC_POISONINGWEAPON#Poisonous Weapon#
-4101,2028,5,133,5,0,0,0,0,0,0,0,0 //GC_WEAPONBLOCKING#Weapon Blocking#
-4101,2029,5,2028,1,0,0,0,0,0,0,0,0 //GC_COUNTERSLASH#iCounter Slash#
-4101,2030,5,2028,1,0,0,0,0,0,0,0,0 //GC_WEAPONCRUSH#Weapon Crush#
-4101,2031,5,2027,3,2028,1,0,0,0,0,0,0 //GC_VENOMPRESSURE#Venom Pressure#
-4101,2032,5,2027,5,2031,5,0,0,0,0,0,0 //GC_POISONSMOKE#Poisonous Smoke#
-4101,2033,5,135,3,0,0,0,0,0,0,0,0 //GC_CLOAKINGEXCEED#Cloaking Exceed#
-4101,2034,1,2023,5,2033,5,0,0,0,0,0,0 //GC_PHANTOMMENACE#Phantom Menace#
-4101,2035,5,2034,1,0,0,0,0,0,0,0,0 //GC_HALLUCINATIONWALK#Hallucination Walk#
-4101,2036,5,136,10,0,0,0,0,0,0,0,0 //GC_ROLLINGCUTTER#Rolling Cutter#
-4101,2037,5,2036,1,0,0,0,0,0,0,0,0 //GC_CROSSRIPPERSLASHER#Cross Ripper Slasher#
-4101,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent#
-4101,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Baby Guard
-4102,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4102,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4102,2,10,0,0,0,0,0,0,0,0,0,0 //SM_SWORD#Sword Mastery#
-4102,3,10,2,1,0,0,0,0,0,0,0,0 //SM_TWOHAND#Two-Handed Sword Mastery#
-4102,4,10,0,0,0,0,0,0,0,0,0,0 //SM_RECOVERY#Increase HP Recovery#
-4102,5,10,0,0,0,0,0,0,0,0,0,0 //SM_BASH#Bash#
-4102,6,10,0,0,0,0,0,0,0,0,0,0 //SM_PROVOKE#Provoke#
-4102,7,10,5,5,0,0,0,0,0,0,0,0 //SM_MAGNUM#Magnum Break#
-4102,8,10,6,5,0,0,0,0,0,0,0,0 //SM_ENDURE#Endure#
-4102,144,1,0,0,0,0,0,0,0,0,0,0 //SM_MOVINGRECOVERY#Moving HP-Recovery#
-4102,145,1,0,0,0,0,0,0,0,0,0,0 //SM_FATALBLOW#Attack Weak Point#
-4102,146,1,0,0,0,0,0,0,0,0,0,0 //SM_AUTOBERSERK#Auto Berserk#
-4102,63,1,8,1,0,0,0,0,0,0,0,0 //KN_RIDING#Peco Peco Riding#
-4102,64,5,63,1,0,0,0,0,0,0,0,0 //KN_CAVALIERMASTERY#Cavalier Mastery#
-4102,55,10,0,0,0,0,0,0,0,0,0,0 //KN_SPEARMASTERY#Spear Mastery#
-4102,35,1,248,5,0,0,0,0,0,0,0,0 //AL_CURE#Cure#
-4102,22,10,35,1,0,0,0,0,0,0,0,0 //AL_DP#Divine Protection#
-4102,23,10,22,3,0,0,0,0,0,0,0,0 //AL_DEMONBANE#Demon Bane#
-4102,28,10,23,5,248,10,0,0,0,0,0,0 //AL_HEAL#Heal#
-4102,248,10,0,0,0,0,0,0,0,0,0,0 //CR_TRUST#Faith#
-4102,249,10,0,0,0,0,0,0,0,0,0,0 //CR_AUTOGUARD#Guard#
-4102,250,5,249,5,0,0,0,0,0,0,0,0 //CR_SHIELDCHARGE#Smite#
-4102,251,5,250,3,0,0,0,0,0,0,0,0 //CR_SHIELDBOOMERANG#Shield Boomerang#
-4102,252,10,251,3,0,0,0,0,0,0,0,0 //CR_REFLECTSHIELD#Shield Reflect#
-4102,253,10,248,7,0,0,0,0,0,0,0,0 //CR_HOLYCROSS#Holy Cross#
-4102,254,10,253,6,248,10,0,0,0,0,0,0 //CR_GRANDCROSS#Grand Cross#
-4102,255,5,252,5,254,4,0,0,0,0,0,0 //CR_DEVOTION#Sacrifice#
-4102,256,5,22,5,28,5,0,0,0,0,0,0 //CR_PROVIDENCE#Resistant Souls#
-4102,257,5,251,1,0,0,0,0,0,0,0,0 //CR_DEFENDER#Defending Aura#
-4102,258,10,55,10,0,0,0,0,0,0,0,0 //CR_SPEARQUICKEN#Spear Quicken#
-4102,1002,1,0,0,0,0,0,0,0,0,0,0 //CR_SHRINK#Shrink#
-4102,2307,5,2312,1,0,0,0,0,0,0,0,0 //LG_CANNONSPEAR#Cannon Spear#
-4102,2308,10,55,1,0,0,0,0,0,0,0,0 //LG_BANISHINGPOINT#Banishing Point#
-4102,2309,3,0,0,0,0,0,0,0,0,0,0 //LG_TRAMPLE#Trample#
-4102,2310,5,250,3,0,0,0,0,0,0,0,0 //LG_SHIELDPRESS#Shield Press#
-4102,2311,5,252,5,0,0,0,0,0,0,0,0 //LG_REFLECTDAMAGE#Reflect Damage#
-4102,2312,5,2308,5,0,0,0,0,0,0,0,0 //LG_PINPOINTATTACK#Pinpoint Attack#
-4102,2313,5,0,0,0,0,0,0,0,0,0,0 //LG_FORCEOFVANGUARD#Vanguard Force#
-4102,2314,1,2313,1,0,0,0,0,0,0,0,0 //LG_RAGEBURST#Rage Burst Attack#
-4102,2315,3,2310,3,2323,2,0,0,0,0,0,0 //LG_SHIELDSPELL#Shield Spell#
-4102,2316,5,2308,3,0,0,0,0,0,0,0,0 //LG_EXEEDBREAK#Exceed Break#
-4102,2317,5,2312,1,2320,3,0,0,0,0,0,0 //LG_OVERBRAND#Over Brand#
-4102,2318,5,2309,3,0,0,0,0,0,0,0,0 //LG_PRESTIGE#Prestige#
-4102,2319,5,2312,3,2314,1,0,0,0,0,0,0 //LG_BANDING#Banding#
-4102,2320,5,55,1,0,0,0,0,0,0,0,0 //LG_MOONSLASHER#Moon Slasher#
-4102,2321,5,254,5,0,0,0,0,0,0,0,0 //LG_RAYOFGENESIS#Genesis Ray#
-4102,2322,5,248,3,0,0,0,0,0,0,0,0 //LG_PIETY#Piety#
-4102,2323,5,2311,3,0,0,0,0,0,0,0,0 //LG_EARTHDRIVE#Earth Drive#
-4102,2324,5,2318,3,2319,3,0,0,0,0,0,0 //LG_HESPERUSLIT#Hesperus Lit#
-4102,2325,5,2315,3,2321,4,2322,5,0,0,0,0 //LG_INSPIRATION#Inspiration#
-4102,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent#
-4102,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Baby Sorcerer
-4103,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4103,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4103,9,10,0,0,0,0,0,0,0,0,0,0 //MG_SRECOVERY#Increase SP Recovery#
-4103,10,1,0,0,0,0,0,0,0,0,0,0 //MG_SIGHT#Sight#
-4103,11,10,0,0,0,0,0,0,0,0,0,0 //MG_NAPALMBEAT#Napalm Beat#
-4103,12,10,11,7,13,5,0,0,0,0,0,0 //MG_SAFETYWALL#Safety Wall#
-4103,13,10,11,4,0,0,0,0,0,0,0,0 //MG_SOULSTRIKE#Soul Strike#
-4103,14,10,0,0,0,0,0,0,0,0,0,0 //MG_COLDBOLT#Cold Bolt#
-4103,15,10,14,5,0,0,0,0,0,0,0,0 //MG_FROSTDIVER#Frost Diver#
-4103,16,10,0,0,0,0,0,0,0,0,0,0 //MG_STONECURSE#Stone Curse#
-4103,17,10,19,4,0,0,0,0,0,0,0,0 //MG_FIREBALL#Fire Ball#
-4103,18,10,17,5,10,1,0,0,0,0,0,0 //MG_FIREWALL#Fire Wall#
-4103,19,10,0,0,0,0,0,0,0,0,0,0 //MG_FIREBOLT#Fire Bolt#
-4103,20,10,0,0,0,0,0,0,0,0,0,0 //MG_LIGHTNINGBOLT#Lightning Bolt#
-4103,21,10,20,4,0,0,0,0,0,0,0,0 //MG_THUNDERSTORM#Thunderstorm#
-4103,157,1,0,0,0,0,0,0,0,0,0,0 //MG_ENERGYCOAT#Energy Coat#
-4103,93,1,0,0,0,0,0,0,0,0,0,0 //WZ_ESTIMATION#Sense#
-4103,90,5,283,1,0,0,0,0,0,0,0,0 //WZ_EARTHSPIKE#Earth Spike#
-4103,91,5,90,1,0,0,0,0,0,0,0,0 //WZ_HEAVENDRIVE#Heaven's Drive#
-4103,274,10,0,0,0,0,0,0,0,0,0,0 //SA_ADVANCEDBOOK#Study#
-4103,275,5,274,2,0,0,0,0,0,0,0,0 //SA_CASTCANCEL#Cast Cancel#
-4103,276,5,274,4,0,0,0,0,0,0,0,0 //SA_MAGICROD#Magic Rod#
-4103,277,5,276,1,0,0,0,0,0,0,0,0 //SA_SPELLBREAKER#Spell Break#
-4103,278,10,275,1,0,0,0,0,0,0,0,0 //SA_FREECAST#Free Cast#
-4103,279,10,278,4,0,0,0,0,0,0,0,0 //SA_AUTOSPELL#Hindsight#
-4103,280,5,19,1,274,5,0,0,0,0,0,0 //SA_FLAMELAUNCHER#Endow Blaze#
-4103,281,5,14,1,274,5,0,0,0,0,0,0 //SA_FROSTWEAPON#Endow Tsunami#
-4103,282,5,20,1,274,5,0,0,0,0,0,0 //SA_LIGHTNINGLOADER#Endow Tornado#
-4103,283,5,4103,1,274,5,0,0,0,0,0,0 //SA_SEISMICWEAPON#Endow Quake#
-4103,284,5,274,9,0,0,0,0,0,0,0,0 //SA_DRAGONOLOGY#Dragonology#
-4103,285,5,280,2,0,0,0,0,0,0,0,0 //SA_VOLCANO#Volcano#
-4103,286,5,281,2,0,0,0,0,0,0,0,0 //SA_DELUGE#Deluge#
-4103,287,5,282,2,0,0,0,0,0,0,0,0 //SA_VIOLENTGALE#Whirlwind#
-4103,288,5,285,3,286,3,287,3,0,0,0,0 //SA_LANDPROTECTOR#Magnetic Earth#
-4103,289,5,277,3,0,0,0,0,0,0,0,0 //SA_DISPELL#Dispel#
-4103,290,10,279,5,289,1,288,1,0,0,0,0 //SA_ABRACADABRA#Hocus-pocus#
-4103,1007,1,0,0,0,0,0,0,0,0,0,0 //SA_CREATECON#Create Converter#
-4103,1008,1,0,0,0,0,0,0,0,0,0,0 //SA_ELEMENTWATER#Elemental Change Water#
-4103,1017,1,0,0,0,0,0,0,0,0,0,0 //SA_ELEMENTGROUND#Elemental Change Earth#
-4103,1018,1,0,0,0,0,0,0,0,0,0,0 //SA_ELEMENTFIRE#Elemental Change Fire#
-4103,1019,1,0,0,0,0,0,0,0,0,0,0 //SA_ELEMENTWIND#Elemental Change Wind#
-4103,2443,5,285,1,0,0,0,0,0,0,0,0 //SO_FIREWALK#Fire Walk#
-4103,2444,5,287,1,0,0,0,0,0,0,0,0 //SO_ELECTRICWALK#Electric Walk#
-4103,2445,5,279,4,0,0,0,0,0,0,0,0 //SO_SPELLFIST#Fist Spell#
-4103,2446,5,90,5,0,0,0,0,0,0,0,0 //SO_EARTHGRAVE#Earth Grave#
-4103,2447,5,286,3,0,0,0,0,0,0,0,0 //SO_DIAMONDDUST#Diamond Dust#
-4103,2448,5,2450,2,0,0,0,0,0,0,0,0 //SO_POISON_BUSTER#Poison Burst#
-4103,2449,5,289,2,0,0,0,0,0,0,0,0 //SO_PSYCHIC_WAVE#Psychic Wave#
-4103,2450,5,91,5,0,0,0,0,0,0,0,0 //SO_CLOUD_KILL#Killing Cloud#
-4103,2451,5,280,1,281,1,282,1,283,1,0,0 //SO_STRIKING#Striking#
-4103,2452,5,285,1,287,1,0,0,0,0,0,0 //SO_WARMER#Warmer#
-4103,2453,5,288,2,0,0,0,0,0,0,0,0 //SO_VACUUM_EXTREME#Extreme Vacuum#
-4103,2454,5,283,1,287,4,0,0,0,0,0,0 //SO_VARETYR_SPEAR#Varetyr Spear#
-4103,2455,5,2452,2,0,0,0,0,0,0,0,0 //SO_ARRULLO#Arrullo#
-4103,2456,3,2462,1,0,0,0,0,0,0,0,0 //SO_EL_CONTROL#Spirit Control#
-4103,2457,3,2452,3,2456,1,0,0,0,0,0,0 //SO_SUMMON_AGNI#Call Agni#
-4103,2458,3,2447,3,2456,1,0,0,0,0,0,0 //SO_SUMMON_AQUA#Call Aqua#
-4103,2459,3,2454,3,2456,1,0,0,0,0,0,0 //SO_SUMMON_VENTUS#Call Ventus#
-4103,2460,3,2446,3,2456,1,0,0,0,0,0,0 //SO_SUMMON_TERA#Call Tera#
-4103,2461,1,2456,3,0,0,0,0,0,0,0,0 //SO_EL_ACTION#Elemental Action#
-4103,2462,2,280,1,281,1,282,1,283,1,0,0 //SO_EL_ANALYSIS#Four Spirits Analysis#
-4103,2463,5,2456,3,0,0,0,0,0,0,0,0 //SO_EL_SYMPATHY#Spirit Sympathy#
-4103,2464,1,2463,1,0,0,0,0,0,0,0,0 //SO_EL_CURE#Spirit Recovery#
-4103,2465,3,2457,3,0,0,0,0,0,0,0,0 //SO_FIRE_INSIGNIA#Fire Insignia#
-4103,2466,3,2458,3,0,0,0,0,0,0,0,0 //SO_WATER_INSIGNIA#Water Insignia#
-4103,2467,3,2459,3,0,0,0,0,0,0,0,0 //SO_WIND_INSIGNIA#Wind Insignia#
-4103,2468,3,2460,3,0,0,0,0,0,0,0,0 //SO_EARTH_INSIGNIA#Earth Insignia#
-4103,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent#
-4103,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Baby Minstrel
-4104,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4104,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4104,43,10,0,0,0,0,0,0,0,0,0,0 //AC_OWL#Owl's Eye#
-4104,44,10,43,3,0,0,0,0,0,0,0,0 //AC_VULTURE#Vulture's Eye#
-4104,45,10,44,1,0,0,0,0,0,0,0,0 //AC_CONCENTRATION#Improve Concentration#
-4104,46,10,0,0,0,0,0,0,0,0,0,0 //AC_DOUBLE#Double Strafe#
-4104,47,10,46,5,0,0,0,0,0,0,0,0 //AC_SHOWER#Arrow Shower#
-4104,147,1,0,0,0,0,0,0,0,0,0,0 //AC_MAKINGARROW#Arrow Crafting#
-4104,148,1,0,0,0,0,0,0,0,0,0,0 //AC_CHARGEARROW#Arrow Repel#
-4104,315,10,0,0,0,0,0,0,0,0,0,0 //BA_MUSICALLESSON#Music Lesson#
-4104,316,5,315,3,0,0,0,0,0,0,0,0 //BA_MUSICALSTRIKE#Melody Strike#
-4104,317,5,315,1,304,1,0,0,0,0,0,0 //BA_DISSONANCE#Unchained Serenade#
-4104,318,5,305,1,0,0,0,0,0,0,0,0 //BA_FROSTJOKE#Unbarring Octave#
-4104,319,10,317,3,0,0,0,0,0,0,0,0 //BA_WHISTLE#Perfect Tablature#
-4104,320,10,317,3,0,0,0,0,0,0,0,0 //BA_ASSASSINCROSS#Impressive Riff#
-4104,321,10,317,3,0,0,0,0,0,0,0,0 //BA_POEMBRAGI#Magic Strings#
-4104,322,10,317,3,0,0,0,0,0,0,0,0 //BA_APPLEIDUN#Song of Lutie#
-4104,304,1,0,0,0,0,0,0,0,0,0,0 //BD_ADAPTATION#Amp#
-4104,305,1,304,1,0,0,0,0,0,0,0,0 //BD_ENCORE#Encore#
-4104,306,1,319,10,0,0,0,0,0,0,0,0 //BD_LULLABY#Lullaby#
-4104,307,5,313,3,0,0,0,0,0,0,0,0 //BD_RICHMANKIM#Mental Sensing#
-4104,308,1,311,1,0,0,0,0,0,0,0,0 //BD_ETERNALCHAOS#Down Tempo#
-4104,309,5,322,10,0,0,0,0,0,0,0,0 //BD_DRUMBATTLEFIELD#Battle Theme#
-4104,310,5,309,3,0,0,0,0,0,0,0,0 //BD_RINGNIBELUNGEN#Harmonic Lick#
-4104,311,1,320,10,0,0,0,0,0,0,0,0 //BD_ROKISWEIL#Classical Pluck#
-4104,312,1,306,1,0,0,0,0,0,0,0,0 //BD_INTOABYSS#Power Chord#
-4104,313,5,321,10,0,0,0,0,0,0,0,0 //BD_SIEGFRIED#Acoustic Rhythm#
-4104,1010,1,0,0,0,0,0,0,0,0,0,0 //BA_PANGVOICE#Pang Voice#
-4104,2381,5,2422,1,0,0,0,0,0,0,0,0 //MI_RUSH_WINDMILL#Rush To Windmill#
-4104,2382,5,2422,1,0,0,0,0,0,0,0,0 //MI_ECHOSONG#Echo Song#
-4104,2383,5,2422,1,0,0,0,0,0,0,0,0 //MI_HARMONIZE#Harmonize#
-4104,2412,10,0,0,0,0,0,0,0,0,0,0 //WM_LESSON#Lesson#
-4104,2413,5,2417,1,0,0,0,0,0,0,0,0 //WM_METALICSOUND#Metalic Sound#
-4104,2414,5,317,5,0,0,0,0,0,0,0,0 //WM_REVERBERATION#Reverberation#
-4104,2417,1,2414,1,0,0,0,0,0,0,0,0 //WM_DOMINION_IMPULSE#Dominion Impulse#
-4104,2418,5,316,5,0,0,0,0,0,0,0,0 //WM_SEVERE_RAINSTORM#Severe Rainstorm#
-4104,2419,5,2412,1,0,0,0,0,0,0,0,0 //WM_POEMOFNETHERWORLD#Despair Song#
-4104,2420,5,2419,3,0,0,0,0,0,0,0,0 //WM_VOICEOFSIREN#Voice Of Siren#
-4104,2421,5,2423,3,0,0,0,0,0,0,0,0 //WM_DEADHILLHERE#At Dead Hill#
-4104,2422,5,2412,1,0,0,0,0,0,0,0,0 //WM_LULLABY_DEEPSLEEP#Lullaby#
-4104,2423,5,2412,1,0,0,0,0,0,0,0,0 //WM_SIRCLEOFNATURE#Circling Nature#
-4104,2424,5,2419,1,0,0,0,0,0,0,0,0 //WM_RANDOMIZESPELL#Formless Spell#
-4104,2425,5,2424,1,0,0,0,0,0,0,0,0 //WM_GLOOMYDAY#Gloomy Shyness#
-4104,2426,5,2413,1,0,0,0,0,0,0,0,0 //WM_GREAT_ECHO#Great Echo#
-4104,2427,5,2381,1,2382,1,2383,1,0,0,0,0 //WM_SONG_OF_MANA#Song Of Mana#
-4104,2428,5,2381,1,2382,1,2383,1,0,0,0,0 //WM_DANCE_WITH_WUG#Dance With Wug#
-4104,2429,5,2430,3,2432,3,0,0,0,0,0,0 //WM_SOUND_OF_DESTRUCTION#Destruction Song#
-4104,2430,5,2428,1,0,0,0,0,0,0,0,0 //WM_SATURDAY_NIGHT_FEVER#Saturday Night Fever#
-4104,2431,5,2381,1,2382,1,2383,1,0,0,0,0 //WM_LERADS_DEW#Lerad's Dew#
-4104,2432,5,2427,1,0,0,0,0,0,0,0,0 //WM_MELODYOFSINK#Sinking Melody#
-4104,2433,5,2431,1,0,0,0,0,0,0,0,0 //WM_BEYOND_OF_WARCRY#Beyound Cry#
-4104,2434,5,2429,1,2433,1,0,0,0,0,0,0 //WM_UNLIMITED_HUMMING_VOICE#Infinite Humming Voice#
-4104,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent#
-4104,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Baby Wanderer
-4105,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4105,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4105,43,10,0,0,0,0,0,0,0,0,0,0 //AC_OWL#Owl's Eye#
-4105,44,10,43,3,0,0,0,0,0,0,0,0 //AC_VULTURE#Vulture's Eye#
-4105,45,10,44,1,0,0,0,0,0,0,0,0 //AC_CONCENTRATION#Improve Concentration#
-4105,46,10,0,0,0,0,0,0,0,0,0,0 //AC_DOUBLE#Double Strafe#
-4105,47,10,46,5,0,0,0,0,0,0,0,0 //AC_SHOWER#Arrow Shower#
-4105,147,1,0,0,0,0,0,0,0,0,0,0 //AC_MAKINGARROW#Arrow Crafting#
-4105,148,1,0,0,0,0,0,0,0,0,0,0 //AC_CHARGEARROW#Arrow Repel#
-4105,323,10,0,0,0,0,0,0,0,0,0,0 //DC_DANCINGLESSON#Dance Lessons#
-4105,324,5,323,3,0,0,0,0,0,0,0,0 //DC_THROWARROW#Slinging Arrow#
-4105,325,5,323,1,304,1,0,0,0,0,0,0 //DC_UGLYDANCE#Hip Shaker#
-4105,326,5,305,1,0,0,0,0,0,0,0,0 //DC_SCREAM#Dazzler#
-4105,327,10,325,3,0,0,0,0,0,0,0,0 //DC_HUMMING#Focus Ballet#
-4105,328,10,325,3,0,0,0,0,0,0,0,0 //DC_DONTFORGETME#Slow Grace#
-4105,329,10,325,3,0,0,0,0,0,0,0,0 //DC_FORTUNEKISS#Lady Luck#
-4105,330,10,325,3,0,0,0,0,0,0,0,0 //DC_SERVICEFORYOU#Gypsy's Kiss#
-4105,304,1,0,0,0,0,0,0,0,0,0,0 //BD_ADAPTATION#Amp#
-4105,305,1,304,1,0,0,0,0,0,0,0,0 //BD_ENCORE#Encore#
-4105,306,1,327,10,0,0,0,0,0,0,0,0 //BD_LULLABY#Lullaby#
-4105,307,5,313,3,0,0,0,0,0,0,0,0 //BD_RICHMANKIM#Mental Sensing#
-4105,308,1,311,1,0,0,0,0,0,0,0,0 //BD_ETERNALCHAOS#Down Tempo#
-4105,309,5,330,10,0,0,0,0,0,0,0,0 //BD_DRUMBATTLEFIELD#Battle Theme#
-4105,310,5,309,3,0,0,0,0,0,0,0,0 //BD_RINGNIBELUNGEN#Harmonic Lick#
-4105,311,1,328,10,0,0,0,0,0,0,0,0 //BD_ROKISWEIL#Classical Pluck#
-4105,312,1,306,1,0,0,0,0,0,0,0,0 //BD_INTOABYSS#Power Chord#
-4105,313,5,329,10,0,0,0,0,0,0,0,0 //BD_SIEGFRIED#Acoustic Rhythm#
-4105,1011,1,0,0,0,0,0,0,0,0,0,0 //DC_WINKCHARM#Wink of Charm#
-4105,2350,5,2422,1,0,0,0,0,0,0,0,0 //WA_SWING_DANCE#Swing Dance#
-4105,2351,5,2422,1,0,0,0,0,0,0,0,0 //WA_SYMPHONY_OF_LOVE#Lover Symphony#
-4105,2352,5,2422,1,0,0,0,0,0,0,0,0 //WA_MOONLIT_SERENADE#Moonlight Serenade#
-4105,2412,10,0,0,0,0,0,0,0,0,0,0 //WM_LESSON#Lesson#
-4105,2413,5,2417,1,0,0,0,0,0,0,0,0 //WM_METALICSOUND#Metalic Sound#
-4105,2414,5,325,5,0,0,0,0,0,0,0,0 //WM_REVERBERATION#Reverberation#
-4105,2417,1,2414,1,0,0,0,0,0,0,0,0 //WM_DOMINION_IMPULSE#Dominion Impulse#
-4105,2418,5,324,5,0,0,0,0,0,0,0,0 //WM_SEVERE_RAINSTORM#Severe Rainstorm#
-4105,2419,5,2412,1,0,0,0,0,0,0,0,0 //WM_POEMOFNETHERWORLD#Despair Song#
-4105,2420,5,2419,3,0,0,0,0,0,0,0,0 //WM_VOICEOFSIREN#Voice Of Siren#
-4105,2421,5,2423,3,0,0,0,0,0,0,0,0 //WM_DEADHILLHERE#At Dead Hill#
-4105,2422,5,2412,1,0,0,0,0,0,0,0,0 //WM_LULLABY_DEEPSLEEP#Lullaby#
-4105,2423,5,2412,1,0,0,0,0,0,0,0,0 //WM_SIRCLEOFNATURE#Circling Nature#
-4105,2424,5,2419,1,0,0,0,0,0,0,0,0 //WM_RANDOMIZESPELL#Formless Spell#
-4105,2425,5,2424,1,0,0,0,0,0,0,0,0 //WM_GLOOMYDAY#Gloomy Shyness#
-4105,2426,5,2413,1,0,0,0,0,0,0,0,0 //WM_GREAT_ECHO#Great Echo#
-4105,2427,5,2350,1,2351,1,2352,1,0,0,0,0 //WM_SONG_OF_MANA#Song Of Mana#
-4105,2428,5,2350,1,2351,1,2352,1,0,0,0,0 //WM_DANCE_WITH_WUG#Dance With Wug#
-4105,2429,5,2430,3,2432,3,0,0,0,0,0,0 //WM_SOUND_OF_DESTRUCTION#Destruction Song#
-4105,2430,5,2428,1,0,0,0,0,0,0,0,0 //WM_SATURDAY_NIGHT_FEVER#Saturday Night Fever#
-4105,2431,5,2350,1,2351,1,2352,1,0,0,0,0 //WM_LERADS_DEW#Lerad's Dew#
-4105,2432,5,2427,1,0,0,0,0,0,0,0,0 //WM_MELODYOFSINK#Sinking Melody#
-4105,2433,5,2431,1,0,0,0,0,0,0,0,0 //WM_BEYOND_OF_WARCRY#Beyound Cry#
-4105,2434,5,2429,1,2433,1,0,0,0,0,0,0 //WM_UNLIMITED_HUMMING_VOICE#Infinite Humming Voice#
-4105,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent#
-4105,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Baby Sura
-4106,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4106,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4106,22,10,0,0,0,0,0,0,0,0,0,0 //AL_DP#Divine Protection#
-4106,23,10,22,3,0,0,0,0,0,0,0,0 //AL_DEMONBANE#Demon Bane#
-4106,24,1,0,0,0,0,0,0,0,0,0,0 //AL_RUWACH#Ruwach#
-4106,25,1,27,4,0,0,0,0,0,0,0,0 //AL_PNEUMA#Pneuma#
-4106,26,2,24,1,0,0,0,0,0,0,0,0 //AL_TELEPORT#Teleport#
-4106,27,4,26,2,0,0,0,0,0,0,0,0 //AL_WARP#Warp Portal#
-4106,28,10,0,0,0,0,0,0,0,0,0,0 //AL_HEAL#Heal#
-4106,29,10,28,3,0,0,0,0,0,0,0,0 //AL_INCAGI#Increase AGI#
-4106,30,10,29,1,0,0,0,0,0,0,0,0 //AL_DECAGI#Decrease AGI#
-4106,31,1,0,0,0,0,0,0,0,0,0,0 //AL_HOLYWATER#Aqua Benedicta#
-4106,32,10,23,3,0,0,0,0,0,0,0,0 //AL_CRUCIS#Signum Crusis#
-4106,33,10,22,3,0,0,0,0,0,0,0,0 //AL_ANGELUS#Angelus#
-4106,34,10,22,5,0,0,0,0,0,0,0,0 //AL_BLESSING#Blessing#
-4106,35,1,28,2,0,0,0,0,0,0,0,0 //AL_CURE#Cure#
-4106,156,1,0,0,0,0,0,0,0,0,0,0 //AL_HOLYLIGHT#Holy Light#
-4106,259,10,23,10,22,10,0,0,0,0,0,0 //MO_IRONHAND#Iron Fists#
-4106,260,5,269,2,0,0,0,0,0,0,0,0 //MO_SPIRITSRECOVERY#Spiritual Cadence#
-4106,261,5,259,2,0,0,0,0,0,0,0,0 //MO_CALLSPIRITS#Summon Spirit Sphere#
-4106,262,1,261,5,0,0,0,0,0,0,0,0 //MO_ABSORBSPIRITS#Absorb Spirit Sphere#
-4106,263,10,265,5,0,0,0,0,0,0,0,0 //MO_TRIPLEATTACK#Raging Triple Blow#
-4106,264,1,271,3,260,2,268,3,0,0,0,0 //MO_BODYRELOCATION#Snap#
-4106,265,10,259,5,261,5,0,0,0,0,0,0 //MO_DODGE#Dodge#
-4106,266,5,261,5,0,0,0,0,0,0,0,0 //MO_INVESTIGATE#Occult Impact#
-4106,267,5,266,3,0,0,0,0,0,0,0,0 //MO_FINGEROFFENSIVE#Throw Spirit Sphere#
-4106,268,5,273,3,0,0,0,0,0,0,0,0 //MO_STEELBODY#Mental Strength#
-4106,269,5,265,5,0,0,0,0,0,0,0,0 //MO_BLADESTOP#Root#
-4106,270,5,262,1,0,0,0,0,0,0,0,0 //MO_EXPLOSIONSPIRITS#Fury#
-4106,271,5,270,3,267,3,0,0,0,0,0,0 //MO_EXTREMITYFIST#Asura Strike#
-4106,272,5,263,5,0,0,0,0,0,0,0,0 //MO_CHAINCOMBO#Raging Quadruple Blow#
-4106,273,5,272,3,0,0,0,0,0,0,0,0 //MO_COMBOFINISH#Raging Thrust#
-4106,1015,1,0,0,0,0,0,0,0,0,0,0 //MO_KITRANSLATION#Ki Translation#
-4106,1016,1,0,0,0,0,0,0,0,0,0,0 //MO_BALKYOUNG#Ki Explosion#
-4106,2326,10,263,5,0,0,0,0,0,0,0,0 //SR_DRAGONCOMBO#Dragon Combo#
-4106,2327,5,2326,3,0,0,0,0,0,0,0,0 //SR_SKYNETBLOW#Sky Blow#
-4106,2328,5,2326,1,2334,1,0,0,0,0,0,0 //SR_EARTHSHAKER#Earth Shaker#
-4106,2329,5,2326,1,0,0,0,0,0,0,0,0 //SR_FALLENEMPIRE#Fallen Empire#
-4106,2330,10,2329,3,0,0,0,0,0,0,0,0 //SR_TIGERCANNON#Tiger Cannon#
-4106,2332,5,2328,2,0,0,0,0,0,0,0,0 //SR_RAMPAGEBLASTER#Rampage Blaster#
-4106,2333,5,2327,1,0,0,0,0,0,0,0,0 //SR_CRESCENTELBOW#Crescent Elbow#
-4106,2334,5,269,2,2344,2,0,0,0,0,0,0 //SR_CURSEDCIRCLE#Cursed Circle#
-4106,2335,5,2337,1,0,0,0,0,0,0,0,0 //SR_LIGHTNINGWALK#Lightning Walk#
-4106,2336,5,2332,3,2335,3,0,0,0,0,0,0 //SR_KNUCKLEARROW#Knuckle Arrow#
-4106,2337,1,2334,1,0,0,0,0,0,0,0,0 //SR_WINDMILL#Wind Mill#
-4106,2338,10,2332,3,2346,3,0,0,0,0,0,0 //SR_RAISINGDRAGON#Rising Dragon#
-4106,2340,1,262,1,2341,1,0,0,0,0,0,0 //SR_ASSIMILATEPOWER#Power Absorb#
-4106,2341,1,261,5,0,0,0,0,0,0,0,0 //SR_POWERVELOCITY#Power Implantation#
-4106,2343,10,2330,5,2338,5,0,0,0,0,0,0 //SR_GATEOFHELL#Hell Gate#
-4106,2344,5,2341,1,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_QUIET#Gentle Touch-Silence#
-4106,2345,5,2341,1,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CURE#Gentle Touch-Speed#
-4106,2346,5,2344,3,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_ENERGYGAIN#Gentle Touch-Save#
-4106,2347,5,2345,4,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CHANGE#Gentle Touch-Opposite#
-4106,2348,5,2347,5,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_REVITALIZE#Gentle Touch-Alive#
-4106,2517,5,2340,1,2518,3,0,0,0,0,0,0 //SR_HOWLINGOFLION#Lion Howling#
-4106,2518,5,267,3,0,0,0,0,0,0,0,0 //SR_RIDEINLIGHTNING#Lightning Ride#
-4106,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent#
-4106,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Baby Genetic
-4107,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4107,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4107,36,10,0,0,0,0,0,0,0,0,0,0 //MC_INCCARRY#Enlarge Weight Limit#
-4107,37,10,36,3,0,0,0,0,0,0,0,0 //MC_DISCOUNT#Discount#
-4107,38,10,37,3,0,0,0,0,0,0,0,0 //MC_OVERCHARGE#Overcharge#
-4107,39,10,36,5,0,0,0,0,0,0,0,0 //MC_PUSHCART#Pushcart#
-4107,40,1,0,0,0,0,0,0,0,0,0,0 //MC_IDENTIFY#Item Appraisal#
-4107,41,10,39,3,0,0,0,0,0,0,0,0 //MC_VENDING#Vending#
-4107,42,10,0,0,0,0,0,0,0,0,0,0 //MC_MAMMONITE#Mammonite#
-4107,153,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTREVOLUTION#Cart Revolution#
-4107,154,1,0,0,0,0,0,0,0,0,0,0 //MC_CHANGECART#Change Cart#
-4107,155,1,0,0,0,0,0,0,0,0,0,0 //MC_LOUD#Crazy Uproar#
-4107,226,10,0,0,0,0,0,0,0,0,0,0 //AM_AXEMASTERY#Axe Mastery#
-4107,227,10,0,0,0,0,0,0,0,0,0,0 //AM_LEARNINGPOTION#Potion Research#
-4107,228,10,227,5,0,0,0,0,0,0,0,0 //AM_PHARMACY#Prepare Potion#
-4107,229,5,228,4,0,0,0,0,0,0,0,0 //AM_DEMONSTRATION#Bomb#
-4107,230,5,228,5,0,0,0,0,0,0,0,0 //AM_ACIDTERROR#Acid Terror#
-4107,231,5,228,3,0,0,0,0,0,0,0,0 //AM_POTIONPITCHER#Aid Potion#
-4107,232,5,228,6,0,0,0,0,0,0,0,0 //AM_CANNIBALIZE#Summon Flora#
-4107,233,5,228,2,0,0,0,0,0,0,0,0 //AM_SPHEREMINE#Summon Marine Sphere#
-4107,234,5,236,3,0,0,0,0,0,0,0,0 //AM_CP_WEAPON#Alchemical Weapon#
-4107,235,5,237,3,0,0,0,0,0,0,0,0 //AM_CP_SHIELD#Synthesized Shield#
-4107,236,5,235,3,0,0,0,0,0,0,0,0 //AM_CP_ARMOR#Synthetic Armor#
-4107,237,5,228,2,0,0,0,0,0,0,0,0 //AM_CP_HELM#Biochemical Helm#
-4107,238,1,0,0,0,0,0,0,0,0,0,0 //AM_BIOETHICS#Basis of Life#
-4107,243,1,244,1,0,0,0,0,0,0,0,0 //AM_CALLHOMUN#Call Homunculus#
-4107,244,1,238,1,0,0,0,0,0,0,0,0 //AM_REST#Peaceful Rest#
-4107,247,5,243,1,0,0,0,0,0,0,0,0 //AM_RESURRECTHOMUN#Ressurect Homunculus#
-4107,446,1,0,0,0,0,0,0,0,0,0,0 //AM_BERSERKPITCHER#Berserk Pitcher#
-4107,496,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT1#Twilight Alchemy 1#
-4107,497,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT2#Twilight Alchemy 2#
-4107,498,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT3#Twilight Alchemy 3#
-4107,2474,5,0,0,0,0,0,0,0,0,0,0 //GN_TRAINING_SWORD#Sword Mastery#
-4107,2475,5,0,0,0,0,0,0,0,0,0,0 //GN_REMODELING_CART#Cart Remodeling#
-4107,2476,5,2475,1,0,0,0,0,0,0,0,0 //GN_CART_TORNADO#Cart Tornado#
-4107,2477,5,2475,2,0,0,0,0,0,0,0,0 //GN_CARTCANNON#Cart Cannon#
-4107,2478,5,2475,3,0,0,0,0,0,0,0,0 //GN_CARTBOOST#Cart Boost#
-4107,2479,5,2497,2,0,0,0,0,0,0,0,0 //GN_THORNS_TRAP#Thorns Trap#
-4107,2480,5,2497,3,0,0,0,0,0,0,0,0 //GN_BLOOD_SUCKER#Blood Sucker#
-4107,2481,5,2497,4,0,0,0,0,0,0,0,0 //GN_SPORE_EXPLOSION#Spore Explosion#
-4107,2482,5,2479,3,0,0,0,0,0,0,0,0 //GN_WALLOFTHORN#Wall Of Thorn#
-4107,2483,10,2482,3,0,0,0,0,0,0,0,0 //GN_CRAZYWEED#Crazy Weed#
-4107,2485,5,2481,3,0,0,0,0,0,0,0,0 //GN_DEMONIC_FIRE#Demonic Fire#
-4107,2486,5,2485,3,0,0,0,0,0,0,0,0 //GN_FIRE_EXPANSION#Fire Expansion#
-4107,2490,5,2480,3,0,0,0,0,0,0,0,0 //GN_HELLS_PLANT#Hell Plant#
-4107,2492,5,2490,3,0,0,0,0,0,0,0,0 //GN_MANDRAGORA#Mandragora Howling#
-4107,2493,1,2494,1,0,0,0,0,0,0,0,0 //GN_SLINGITEM#Item Sling#
-4107,2494,1,0,0,0,0,0,0,0,0,0,0 //GN_CHANGEMATERIAL#Change Material#
-4107,2495,2,2497,1,0,0,0,0,0,0,0,0 //GN_MIX_COOKING#Mixed Cooking#
-4107,2496,2,2495,1,0,0,0,0,0,0,0,0 //GN_MAKEBOMB#Bomb Creation#
-4107,2497,10,0,0,0,0,0,0,0,0,0,0 //GN_S_PHARMACY#Special Pharmacy#
-4107,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent#
-4107,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-4107,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store#
-//Baby Chaser
-4108,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4108,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4108,48,10,0,0,0,0,0,0,0,0,0,0 //TF_DOUBLE#Double Attack#
-4108,49,10,0,0,0,0,0,0,0,0,0,0 //TF_MISS#Improve Dodge#
-4108,50,10,0,0,0,0,0,0,0,0,0,0 //TF_STEAL#Steal#
-4108,51,10,50,5,0,0,0,0,0,0,0,0 //TF_HIDING#Hiding#
-4108,52,10,0,0,0,0,0,0,0,0,0,0 //TF_POISON#Envenom#
-4108,53,1,52,3,0,0,0,0,0,0,0,0 //TF_DETOXIFY#Detoxify#
-4108,149,1,0,0,0,0,0,0,0,0,0,0 //TF_SPRINKLESAND#Throw Sand#
-4108,150,1,0,0,0,0,0,0,0,0,0,0 //TF_BACKSLIDING#Back Sliding#
-4108,151,1,0,0,0,0,0,0,0,0,0,0 //TF_PICKSTONE#Find Stone#
-4108,152,1,0,0,0,0,0,0,0,0,0,0 //TF_THROWSTONE#Stone Fling#
-4108,2,10,0,0,0,0,0,0,0,0,0,0 //SM_SWORD#Sword Mastery#
-4108,44,10,0,0,0,0,0,0,0,0,0,0 //AC_VULTURE#Vulture's Eye#
-4108,46,10,44,10,0,0,0,0,0,0,0,0 //AC_DOUBLE#Double Strafe#
-4108,124,1,46,5,0,0,0,0,0,0,0,0 //HT_REMOVETRAP#Remove Trap#
-4108,210,10,50,1,0,0,0,0,0,0,0,0 //RG_SNATCHER#Gank#
-4108,211,10,210,4,0,0,0,0,0,0,0,0 //RG_STEALCOIN#Mug#
-4108,212,10,211,4,0,0,0,0,0,0,0,0 //RG_BACKSTAP#Back Stab#
-4108,213,5,51,1,0,0,0,0,0,0,0,0 //RG_TUNNELDRIVE#Stalk#
-4108,214,5,212,2,213,2,0,0,0,0,0,0 //RG_RAID#Sightless Raid#
-4108,215,5,217,5,0,0,0,0,0,0,0,0 //RG_STRIPWEAPON#Divest Weapon#
-4108,216,5,218,5,0,0,0,0,0,0,0,0 //RG_STRIPSHIELD#Divest Shield#
-4108,217,5,216,5,0,0,0,0,0,0,0,0 //RG_STRIPARMOR#Divest Armor#
-4108,218,5,211,2,0,0,0,0,0,0,0,0 //RG_STRIPHELM#Divest Helm#
-4108,219,5,212,4,214,5,0,0,0,0,0,0 //RG_INTIMIDATE#Snatch#
-4108,220,1,221,5,0,0,0,0,0,0,0,0 //RG_GRAFFITI#Scribble#
-4108,221,5,222,1,0,0,0,0,0,0,0,0 //RG_FLAGGRAFFITI#Piece#
-4108,222,1,223,1,0,0,0,0,0,0,0,0 //RG_CLEANER#Remover#
-4108,223,1,216,3,0,0,0,0,0,0,0,0 //RG_GANGSTER#Slyness#
-4108,224,5,223,1,0,0,0,0,0,0,0,0 //RG_COMPULSION#Haggle#
-4108,225,10,219,5,0,0,0,0,0,0,0,0 //RG_PLAGIARISM#Intimidate#
-4108,1005,1,0,0,0,0,0,0,0,0,0,0 //RG_CLOSECONFINE#Close Confine#
-4108,2284,5,219,5,0,0,0,0,0,0,0,0 //SC_FATALMENACE#Fatal Manace#
-4108,2285,10,225,5,0,0,0,0,0,0,0,0 //SC_REPRODUCE#Reproduce#
-4108,2286,10,2285,5,0,0,0,0,0,0,0,0 //SC_AUTOSHADOWSPELL#Auto Shadow Spell#
-4108,2287,5,213,3,0,0,0,0,0,0,0,0 //SC_SHADOWFORM#Shadow Formation#
-4108,2288,10,46,7,0,0,0,0,0,0,0,0 //SC_TRIANGLESHOT#Triangle Shot#
-4108,2289,5,0,0,0,0,0,0,0,0,0,0 //SC_BODYPAINT#Body Painting#
-4108,2290,5,2286,7,2291,5,0,0,0,0,0,0 //SC_INVISIBILITY#Invisibility#
-4108,2291,5,2286,5,2287,3,0,0,0,0,0,0 //SC_DEADLYINFECT#Deadly Infection#
-4108,2292,3,2289,1,0,0,0,0,0,0,0,0 //SC_ENERVATION#Masquerade Enervation#
-4108,2293,3,2289,1,0,0,0,0,0,0,0,0 //SC_GROOMY#Masquerade Groomy#
-4108,2294,3,2289,1,0,0,0,0,0,0,0,0 //SC_IGNORANCE#Masquerade Ignorance#
-4108,2295,3,2292,1,2293,1,2294,1,0,0,0,0 //SC_LAZINESS#Masquerade Laziness#
-4108,2296,3,2295,1,2297,1,0,0,0,0,0,0 //SC_UNLUCKY#Masquerade Unlucky#
-4108,2297,3,2292,1,2293,1,2294,1,0,0,0,0 //SC_WEAKNESS#Masquerade Weakness#
-4108,2298,5,215,1,0,0,0,0,0,0,0,0 //SC_STRIPACCESSARY#Divest Accessory#
-4108,2299,3,221,1,0,0,0,0,0,0,0,0 //SC_MANHOLE#Manhole#
-4108,2300,3,2299,1,0,0,0,0,0,0,0,0 //SC_DIMENSIONDOOR#Dimension Door#
-4108,2301,3,2299,1,0,0,0,0,0,0,0,0 //SC_CHAOSPANIC#Chaos Panic#
-4108,2302,3,2296,3,2301,3,0,0,0,0,0,0 //SC_MAELSTROM#Maelstrom#
-4108,2303,3,2300,3,0,0,0,0,0,0,0,0 //SC_BLOODYLUST#Bloody Lust#
-4108,2304,3,2300,3,0,0,0,0,0,0,0,0 //SC_FEINTBOMB#Feint Bomb#
-4108,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent#
-4108,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Baby Rune2
-4109,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4109,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4109,2,10,0,0,0,0,0,0,0,0,0,0 //SM_SWORD#Sword Mastery#
-4109,3,10,2,1,0,0,0,0,0,0,0,0 //SM_TWOHAND#Two-Handed Sword Mastery#
-4109,4,10,0,0,0,0,0,0,0,0,0,0 //SM_RECOVERY#Increase HP Recovery#
-4109,5,10,0,0,0,0,0,0,0,0,0,0 //SM_BASH#Bash#
-4109,6,10,0,0,0,0,0,0,0,0,0,0 //SM_PROVOKE#Provoke#
-4109,7,10,5,5,0,0,0,0,0,0,0,0 //SM_MAGNUM#Magnum Break#
-4109,8,10,6,5,0,0,0,0,0,0,0,0 //SM_ENDURE#Endure#
-4109,144,1,0,0,0,0,0,0,0,0,0,0 //SM_MOVINGRECOVERY#Moving HP-Recovery#
-4109,145,1,0,0,0,0,0,0,0,0,0,0 //SM_FATALBLOW#Attack Weak Point#
-4109,146,1,0,0,0,0,0,0,0,0,0,0 //SM_AUTOBERSERK#Auto Berserk#
-4109,55,10,0,0,0,0,0,0,0,0,0,0 //KN_SPEARMASTERY#Spear Mastery#
-4109,56,10,55,1,0,0,0,0,0,0,0,0 //KN_PIERCE#Pierce#
-4109,57,10,63,1,58,3,0,0,0,0,0,0 //KN_BRANDISHSPEAR#Brandish Spear#
-4109,58,10,56,5,0,0,0,0,0,0,0,0 //KN_SPEARSTAB#Spear Stab#
-4109,59,5,56,3,0,0,0,0,0,0,0,0 //KN_SPEARBOOMERANG#Spear Boomerang#
-4109,60,10,3,1,0,0,0,0,0,0,0,0 //KN_TWOHANDQUICKEN#Twohand Quicken#
-4109,61,5,3,1,0,0,0,0,0,0,0,0 //KN_AUTOCOUNTER#Counter Attack#
-4109,62,10,5,10,7,3,3,5,60,10,61,5//KN_BOWLINGBASH#Bowling Bash#
-4109,63,1,8,1,0,0,0,0,0,0,0,0 //KN_RIDING#Peco Peco Riding#
-4109,64,5,63,1,0,0,0,0,0,0,0,0 //KN_CAVALIERMASTERY#Cavalier Mastery#
-4109,1001,1,0,0,0,0,0,0,0,0,0,0 //KN_CHARGEATK#Charge Attack#
-4109,495,1,60,10,0,0,0,0,0,0,0,0 //KN_ONEHAND#Onehand Quicken#
-4109,2001,5,2010,2,0,0,0,0,0,0,0,0 //RK_ENCHANTBLADE#Enchant Blade#
-4109,2002,5,2001,3,0,0,0,0,0,0,0,0 //RK_SONICWAVE#Sonic Wave#
-4109,2003,10,61,1,2001,2,0,0,0,0,0,0 //RK_DEATHBOUND#Death Bound#
-4109,2004,10,2020,3,0,0,0,0,0,0,0,0 //RK_HUNDREDSPEAR#Hundred Spears#
-4109,2005,5,2001,5,0,0,0,0,0,0,0,0 //RK_WINDCUTTER#Wind Cutter#
-4109,2006,5,2002,2,2003,5,2005,3,0,0,0,0 //RK_IGNITIONBREAK#Ignition Break#
-4109,2007,5,64,1,0,0,0,0,0,0,0,0 //RK_DRAGONTRAINING#Dragon Training#
-4109,2008,10,2007,2,0,0,0,0,0,0,0,0 //RK_DRAGONBREATH#Dragon Breath#
-4109,2009,5,2007,2,0,0,0,0,0,0,0,0 //RK_DRAGONHOWLING#Dragon Howling#
-4109,2010,10,0,0,0,0,0,0,0,0,0,0 //RK_RUNEMASTERY#Rune Mastery#
-4109,2020,5,57,2,0,0,0,0,0,0,0,0, //RK_PHANTOMTHRUST#Phantom Thrust#
-4109,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent#
-4109,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Baby Guard2
-4110,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4110,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4110,2,10,0,0,0,0,0,0,0,0,0,0 //SM_SWORD#Sword Mastery#
-4110,3,10,2,1,0,0,0,0,0,0,0,0 //SM_TWOHAND#Two-Handed Sword Mastery#
-4110,4,10,0,0,0,0,0,0,0,0,0,0 //SM_RECOVERY#Increase HP Recovery#
-4110,5,10,0,0,0,0,0,0,0,0,0,0 //SM_BASH#Bash#
-4110,6,10,0,0,0,0,0,0,0,0,0,0 //SM_PROVOKE#Provoke#
-4110,7,10,5,5,0,0,0,0,0,0,0,0 //SM_MAGNUM#Magnum Break#
-4110,8,10,6,5,0,0,0,0,0,0,0,0 //SM_ENDURE#Endure#
-4110,144,1,0,0,0,0,0,0,0,0,0,0 //SM_MOVINGRECOVERY#Moving HP-Recovery#
-4110,145,1,0,0,0,0,0,0,0,0,0,0 //SM_FATALBLOW#Attack Weak Point#
-4110,146,1,0,0,0,0,0,0,0,0,0,0 //SM_AUTOBERSERK#Auto Berserk#
-4110,63,1,8,1,0,0,0,0,0,0,0,0 //KN_RIDING#Peco Peco Riding#
-4110,64,5,63,1,0,0,0,0,0,0,0,0 //KN_CAVALIERMASTERY#Cavalier Mastery#
-4110,55,10,0,0,0,0,0,0,0,0,0,0 //KN_SPEARMASTERY#Spear Mastery#
-4110,35,1,248,5,0,0,0,0,0,0,0,0 //AL_CURE#Cure#
-4110,22,10,35,1,0,0,0,0,0,0,0,0 //AL_DP#Divine Protection#
-4110,23,10,22,3,0,0,0,0,0,0,0,0 //AL_DEMONBANE#Demon Bane#
-4110,28,10,23,5,248,10,0,0,0,0,0,0 //AL_HEAL#Heal#
-4110,248,10,0,0,0,0,0,0,0,0,0,0 //CR_TRUST#Faith#
-4110,249,10,0,0,0,0,0,0,0,0,0,0 //CR_AUTOGUARD#Guard#
-4110,250,5,249,5,0,0,0,0,0,0,0,0 //CR_SHIELDCHARGE#Smite#
-4110,251,5,250,3,0,0,0,0,0,0,0,0 //CR_SHIELDBOOMERANG#Shield Boomerang#
-4110,252,10,251,3,0,0,0,0,0,0,0,0 //CR_REFLECTSHIELD#Shield Reflect#
-4110,253,10,248,7,0,0,0,0,0,0,0,0 //CR_HOLYCROSS#Holy Cross#
-4110,254,10,253,6,248,10,0,0,0,0,0,0 //CR_GRANDCROSS#Grand Cross#
-4110,255,5,252,5,254,4,0,0,0,0,0,0 //CR_DEVOTION#Sacrifice#
-4110,256,5,22,5,28,5,0,0,0,0,0,0 //CR_PROVIDENCE#Resistant Souls#
-4110,257,5,251,1,0,0,0,0,0,0,0,0 //CR_DEFENDER#Defending Aura#
-4110,258,10,55,10,0,0,0,0,0,0,0,0 //CR_SPEARQUICKEN#Spear Quicken#
-4110,1002,1,0,0,0,0,0,0,0,0,0,0 //CR_SHRINK#Shrink#
-4110,2307,5,2312,1,0,0,0,0,0,0,0,0 //LG_CANNONSPEAR#Cannon Spear#
-4110,2308,10,55,1,0,0,0,0,0,0,0,0 //LG_BANISHINGPOINT#Banishing Point#
-4110,2309,3,0,0,0,0,0,0,0,0,0,0 //LG_TRAMPLE#Trample#
-4110,2310,5,250,3,0,0,0,0,0,0,0,0 //LG_SHIELDPRESS#Shield Press#
-4110,2311,5,252,5,0,0,0,0,0,0,0,0 //LG_REFLECTDAMAGE#Reflect Damage#
-4110,2312,5,2308,5,0,0,0,0,0,0,0,0 //LG_PINPOINTATTACK#Pinpoint Attack#
-4110,2313,5,0,0,0,0,0,0,0,0,0,0 //LG_FORCEOFVANGUARD#Vanguard Force#
-4110,2314,1,2313,1,0,0,0,0,0,0,0,0 //LG_RAGEBURST#Rage Burst Attack#
-4110,2315,3,2310,3,2323,2,0,0,0,0,0,0 //LG_SHIELDSPELL#Shield Spell#
-4110,2316,5,2308,3,0,0,0,0,0,0,0,0 //LG_EXEEDBREAK#Exceed Break#
-4110,2317,5,2312,1,2320,3,0,0,0,0,0,0 //LG_OVERBRAND#Over Brand#
-4110,2318,5,2309,3,0,0,0,0,0,0,0,0 //LG_PRESTIGE#Prestige#
-4110,2319,5,2312,3,2314,1,0,0,0,0,0,0 //LG_BANDING#Banding#
-4110,2320,5,55,1,0,0,0,0,0,0,0,0 //LG_MOONSLASHER#Moon Slasher#
-4110,2321,5,254,5,0,0,0,0,0,0,0,0 //LG_RAYOFGENESIS#Genesis Ray#
-4110,2322,5,248,3,0,0,0,0,0,0,0,0 //LG_PIETY#Piety#
-4110,2323,5,2311,3,0,0,0,0,0,0,0,0 //LG_EARTHDRIVE#Earth Drive#
-4110,2324,5,2318,3,2319,3,0,0,0,0,0,0 //LG_HESPERUSLIT#Hesperus Lit#
-4110,2325,5,2315,3,2321,4,2322,5,0,0,0,0 //LG_INSPIRATION#Inspiration#
-4110,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent#
-4110,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Baby Ranger2
-4111,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4111,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4111,43,10,0,0,0,0,0,0,0,0,0,0 //AC_OWL#Owl's Eye#
-4111,44,10,43,3,0,0,0,0,0,0,0,0 //AC_VULTURE#Vulture's Eye#
-4111,45,10,44,1,0,0,0,0,0,0,0,0 //AC_CONCENTRATION#Improve Concentration#
-4111,46,10,0,0,0,0,0,0,0,0,0,0 //AC_DOUBLE#Double Strafe#
-4111,47,10,46,5,0,0,0,0,0,0,0,0 //AC_SHOWER#Arrow Shower#
-4111,147,1,0,0,0,0,0,0,0,0,0,0 //AC_MAKINGARROW#Arrow Crafting#
-4111,148,1,0,0,0,0,0,0,0,0,0,0 //AC_CHARGEARROW#Arrow Repel#
-4111,115,5,0,0,0,0,0,0,0,0,0,0 //HT_SKIDTRAP#Skid Trap#
-4111,116,5,0,0,0,0,0,0,0,0,0,0 //HT_LANDMINE#Land Mine#
-4111,117,5,115,1,0,0,0,0,0,0,0,0 //HT_ANKLESNARE#Ankle Snare#
-4111,118,5,117,1,0,0,0,0,0,0,0,0 //HT_SHOCKWAVE#Shockwave Trap#
-4111,119,5,120,1,0,0,0,0,0,0,0,0 //HT_SANDMAN#Sandman#
-4111,120,5,115,1,0,0,0,0,0,0,0,0 //HT_FLASHER#Flasher#
-4111,121,5,120,1,0,0,0,0,0,0,0,0 //HT_FREEZINGTRAP#Freezing Trap#
-4111,122,5,116,1,119,1,121,1,0,0,0,0 //HT_BLASTMINE#Blast Mine#
-4111,123,5,118,1,122,1,0,0,0,0,0,0 //HT_CLAYMORETRAP#Claymore Trap#
-4111,124,1,116,1,0,0,0,0,0,0,0,0 //HT_REMOVETRAP#Remove Trap#
-4111,125,1,118,1,124,1,0,0,0,0,0,0 //HT_TALKIEBOX#Talkie Box#
-4111,126,10,0,0,0,0,0,0,0,0,0,0 //HT_BEASTBANE#Beast Bane#
-4111,127,1,126,1,0,0,0,0,0,0,0,0 //HT_FALCON#Falconry Mastery#
-4111,128,10,129,5,0,0,0,0,0,0,0,0 //HT_STEELCROW#Steel Crow#
-4111,129,5,127,1,0,0,0,0,0,0,0,0 //HT_BLITZBEAT#Blitz Beat#
-4111,130,4,45,1,127,1,0,0,0,0,0,0 //HT_DETECTING#Detect#
-4111,131,5,124,1,127,1,0,0,0,0,0,0 //HT_SPRINGTRAP#Spring Trap#
-4111,1009,1,0,0,0,0,0,0,0,0,0,0 //HT_PHANTASMIC#Phantasmic Arrow#
-4111,499,1,46,10,0,0,0,0,0,0,0,0 //HT_POWER#Beast Strafing#
-4111,2233,10,2236,5,0,0,0,0,0,0,0,0 //RA_ARROWSTORM#Arrow Storm#
-4111,2234,5,2233,5,2247,1,0,0,0,0,0,0 //RA_FEARBREEZE#Feer Breeze#
-4111,2235,10,0,0,0,0,0,0,0,0,0,0 //RA_RANGERMAIN#Main Ranger#
-4111,2236,10,117,5,0,0,0,0,0,0,0,0 //RA_AIMEDBOLT#Aimed Bolt#
-4111,2237,1,2239,3,0,0,0,0,0,0,0,0 //RA_DETONATOR#Detonator#
-4111,2238,5,118,5,0,0,0,0,0,0,0,0 //RA_ELECTRICSHOCKER#Electric Shock#
-4111,2239,5,2248,3,0,0,0,0,0,0,0,0 //RA_CLUSTERBOMB#Bomb Cluster#
-4111,2240,1,0,0,0,0,0,0,0,0,0,0 //RA_WUGMASTERY#Wug Mastery#
-4111,2241,3,2240,1,0,0,0,0,0,0,0,0 //RA_WUGRIDER#Wug Rider#
-4111,2242,1,2241,1,0,0,0,0,0,0,0,0 //RA_WUGDASH#Wug Dash#
-4111,2243,5,2245,1,0,0,0,0,0,0,0,0 //RA_WUGSTRIKE#Wug Strike#
-4111,2244,5,2243,1,0,0,0,0,0,0,0,0 //RA_WUGBITE#Wug Bite#
-4111,2245,10,2240,1,0,0,0,0,0,0,0,0 //RA_TOOTHOFWUG#Tooth of Wug#
-4111,2246,5,2245,3,0,0,0,0,0,0,0,0 //RA_SENSITIVEKEEN#Keen Nose#
-4111,2247,5,2235,1,0,0,0,0,0,0,0,0 //RA_CAMOUFLAGE#Camouflage#
-4111,2248,5,123,1,124,1,0,0,0,0,0,0 //RA_RESEARCHTRAP#Trap Research#
-4111,2249,1,2248,1,0,0,0,0,0,0,0,0 //RA_MAGENTATRAP#Magneta Trap#
-4111,2250,1,2248,1,0,0,0,0,0,0,0,0 //RA_COBALTTRAP#Cobalt Trap#
-4111,2251,1,2248,1,0,0,0,0,0,0,0,0 //RA_MAIZETRAP#Maze Trap#
-4111,2252,1,2248,1,0,0,0,0,0,0,0,0 //RA_VERDURETRAP#Verdure Trap#
-4111,2253,5,2237,1,0,0,0,0,0,0,0,0 //RA_FIRINGTRAP#Fire Trap#
-4111,2254,5,2237,1,0,0,0,0,0,0,0,0 //RA_ICEBOUNDTRAP#Ice Trap#
-4111,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent#
-4111,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-//Baby Mechanic2
-4112,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill#
-4112,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
-4112,36,10,0,0,0,0,0,0,0,0,0,0 //MC_INCCARRY#Enlarge Weight Limit#
-4112,37,10,36,3,0,0,0,0,0,0,0,0 //MC_DISCOUNT#Discount#
-4112,38,10,37,3,0,0,0,0,0,0,0,0 //MC_OVERCHARGE#Overcharge#
-4112,39,4112,36,5,0,0,0,0,0,0,0,0 //MC_PUSHCART#Pushcart#
-4112,40,1,0,0,0,0,0,0,0,0,0,0 //MC_IDENTIFY#Item Appraisal#
-4112,41,10,39,3,0,0,0,0,0,0,0,0 //MC_VENDING#Vending#
-4112,42,10,0,0,0,0,0,0,0,0,0,0 //MC_MAMMONITE#Mammonite#
-4112,153,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTREVOLUTION#Cart Revolution#
-4112,154,1,0,0,0,0,0,0,0,0,0,0 //MC_CHANGECART#Change Cart#
-4112,155,1,0,0,0,0,0,0,0,0,0,0 //MC_LOUD#Crazy Uproar#
-4112,94,5,0,0,0,0,0,0,0,0,0,0 //BS_IRON#Iron Tempering#
-4112,95,5,94,1,0,0,0,0,0,0,0,0 //BS_STEEL#Steel Tempering#
-4112,96,5,94,1,0,0,0,0,0,0,0,0 //BS_ENCHANTEDSTONE#Enchanted Stone Craft#
-4112,97,5,96,1,0,0,0,0,0,0,0,0 //BS_ORIDEOCON#Oridecon Research#
-4112,98,3,0,0,0,0,0,0,0,0,0,0 //BS_DAGGER#Smith Dagger#
-4112,99,3,98,1,0,0,0,0,0,0,0,0 //BS_SWORD#Smith Sword#
-4112,100,3,99,1,0,0,0,0,0,0,0,0 //BS_TWOHANDSWORD#Smith Two-handed Sword#
-4112,101,3,99,2,0,0,0,0,0,0,0,0 //BS_AXE#Smith Axe#
-4112,102,3,103,1,0,0,0,0,0,0,0,0 //BS_MACE#Smith Mace#
-4112,103,3,98,1,0,0,0,0,0,0,0,0 //BS_KNUCKLE#Smith Knucklebrace#
-4112,104,3,98,2,0,0,0,0,0,0,0,0 //BS_SPEAR#Smith Spear#
-4112,105,1,0,0,0,0,0,0,0,0,0,0 //BS_HILTBINDING#Hilt Binding#
-4112,106,1,95,1,105,1,0,0,0,0,0,0 //BS_FINDINGORE#Ore Discovery#
-4112,107,10,105,1,0,0,0,0,0,0,0,0 //BS_WEAPONRESEARCH#Weaponry Research#
-4112,108,1,107,1,0,0,0,0,0,0,0,0 //BS_REPAIRWEAPON#Weapon Repair#
-4112,109,5,0,0,0,0,0,0,0,0,0,0 //BS_SKINTEMPER#Skin Tempering#
-4112,110,5,0,0,0,0,0,0,0,0,0,0 //BS_HAMMERFALL#Hammer Fall#
-4112,111,5,110,2,0,0,0,0,0,0,0,0 //BS_ADRENALINE#Adrenaline Rush#
-4112,112,5,107,2,111,2,0,0,0,0,0,0 //BS_WEAPONPERFECT#Weapon Perfection#
-4112,113,5,111,3,0,0,0,0,0,0,0,0 //BS_OVERTHRUST#Power-Thrust#
-4112,114,5,112,3,113,2,0,0,0,0,0,0 //BS_MAXIMIZE#Maximize Power#
-4112,1012,1,0,0,0,0,0,0,0,0,0,0 //BS_UNFAIRLYTRICK#Unfair Trick#
-4112,1013,1,0,0,0,0,0,0,0,0,0,0 //BS_GREED#Greed#
-4112,459,1,111,5,0,0,0,0,0,0,0,0 //BS_ADRENALINE2#Full Adrenaline Rush#
-4112,2255,5,0,0,0,0,0,0,0,0,0,0 //NC_MADOLICENCE#Madogear License#
-4112,2256,5,2255,1,0,0,0,0,0,0,0,0 //NC_BOOSTKNUCKLE#Nuckle Boost#
-4112,2257,3,2256,2,0,0,0,0,0,0,0,0 //NC_PILEBUNKER#Pile Bunker#
-4112,2258,3,2256,2,0,0,0,0,0,0,0,0 //NC_VULCANARM#Vulcan Arm#
-4112,2259,3,2258,1,0,0,0,0,0,0,0,0 //NC_FLAMELAUNCHER#Flame Launcher#
-4112,2260,3,2258,3,0,0,0,0,0,0,0,0 //NC_COLDSLOWER#Cold Slower#
-4112,2261,3,2259,2,2260,2,0,0,0,0,0,0 //NC_ARMSCANNON#Arm Cannon#
-4112,2262,3,2255,1,0,0,0,0,0,0,0,0 //NC_ACCELERATION#Acceleration#
-4112,2263,1,2262,1,0,0,0,0,0,0,0,0 //NC_HOVERING#Hover#
-4112,2264,1,2263,1,0,0,0,0,0,0,0,0 //NC_F_SIDESLIDE#Front Slide#
-4112,2265,1,2263,1,0,0,0,0,0,0,0,0 //NC_B_SIDESLIDE#Back Slide#
-4112,2266,4,2255,4,0,0,0,0,0,0,0,0 //NC_MAINFRAME#Remodel Mainframe#
-4112,2267,3,2266,2,0,0,0,0,0,0,0,0 //NC_SELFDESTRUCTION#Suicidal Destruction#
-4112,2268,4,2266,2,0,0,0,0,0,0,0,0 //NC_SHAPESHIFT#Shift Shape#
-4112,2269,1,2267,2,0,0,0,0,0,0,0,0 //NC_EMERGENCYCOOL#Cool Emergency#
-4112,2270,1,2268,2,0,0,0,0,0,0,0,0 //NC_INFRAREDSCAN#Infra Red Scan#
-4112,2271,3,2270,1,0,0,0,0,0,0,0,0 //NC_ANALYZE#Analyze#
-4112,2272,3,2269,1,0,0,0,0,0,0,0,0 //NC_MAGNETICFIELD#Magnetic Field#
-4112,2273,3,2272,2,0,0,0,0,0,0,0,0 //NC_NEUTRALBARRIER#Magnetic Field#
-4112,2274,3,2271,3,2273,2,0,0,0,0,0,0 //NC_STEALTHFIELD#Stealth Field#
-4112,2275,5,2255,2,0,0,0,0,0,0,0,0 //NC_REPAIR#Repair#
-4112,2276,10,0,0,0,0,0,0,0,0,0,0 //NC_TRAININGAXE#Axe Mastery#
-4112,2277,5,0,0,0,0,0,0,0,0,0,0 //NC_RESEARCHFE#Fire Earth Research#
-4112,2278,5,2276,1,0,0,0,0,0,0,0,0 //NC_AXEBOOMERANG#Axe Boomerang#
-4112,2279,5,2278,3,0,0,0,0,0,0,0,0 //NC_POWERSWING#Power Swing#
-4112,2280,5,2276,1,0,0,0,0,0,0,0,0 //NC_AXETORNADO#Axe Tornado#
-4112,2281,5,2277,2,0,0,0,0,0,0,0,0 //NC_SILVERSNIPER#FAW Silver Sniper#
-4112,2282,5,2281,2,0,0,0,0,0,0,0,0 //NC_MAGICDECOY#FAW Magic Decoy#
-4112,2283,1,2281,1,0,0,0,0,0,0,0,0 //NC_DISJOINT#FAW divest#
-4112,409,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLPARENT#Call Parent#
-4112,681,1,0,0,0,0,0,0,0,0,0,0 //ALL_INCCARRY#Enlarge Weight Limit R#
-4112,2535,1,41,1,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store#
+4065,2037,5,2036,1,0,0,0,0,0,0,0,0 //GC_CROSSRIPPERSLASHER#Cross Ripper Slasher# \ No newline at end of file
diff --git a/db/skill_unit_db.txt b/db/skill_unit_db.txt
index 205c1dd33..45ecbc767 100644
--- a/db/skill_unit_db.txt
+++ b/db/skill_unit_db.txt
@@ -33,6 +33,7 @@
70,0x83, , -1, 1,1000,all, 0x018 //PR_SANCTUARY
79,0x84, , -1, 1,3000,enemy, 0x018 //PR_MAGNUS
80,0x87,0x88, 0, 1,2000,enemy, 0x006 //WZ_FIREPILLAR
+ 82,0x86, , 0, 3,1000,enemy, 0x018 //WZ_FIREIVY
83,0x86, , 0, 3,1000,enemy, 0x010 //WZ_METEOR
85,0x86, , 0, 6:6:6:6:6:6:6:6:6:6:8,1250,enemy,0x018 //WZ_VERMILION
87,0x8d, , -1, 0, -1,all, 0x010 //WZ_ICEWALL
@@ -95,7 +96,26 @@
535,0xbd, , -1, 0, 20,enemy, 0x010 //NJ_KAENSIN
538,0xbb, , 1:1:1:2:2:2:3:3:3:4,0,-1,all,0x010 //NJ_SUITON
670,0xc7, , 1, 4:7:10:13:16:19:22:25:28:31,1000,all,0x008 //NPC_EVILLAND
-2044,0xca, , 0, 3,1000,friend,0x818 //AB_EPICLESIS
+
+2044,0xca, , 0, 3,1000,all, 0x018 //AB_EPICLESIS
+
+2032,0xe1, , 2, 0,1000,enemy, 0x018 //GC_POISONSMOKE
+
+2214,0x86, , 0, 5, 100,enemy, 0x080 //WL_CHAINLIGHTNING
+2216,0xcb, , -1, 2,2000,enemy, 0x018 //WL_EARTHSTRAIN
+
+2238,0xd8, , 0, 1,1000,enemy, 0x006 //RA_ELECTRICSHOCKER
+2239,0xd9, , 0, 1,1000,enemy, 0x006 //RA_CLUSTERBOMB
+2249,0xd2, , 0, 1,1000,enemy, 0x026 //RA_MAGENTATRAP
+2250,0xd3, , 0, 1,1000,enemy, 0x026 //RA_COBALTTRAP
+2251,0xd4, , 0, 1,1000,enemy, 0x026 //RA_MAIZETRAP
+2252,0xd5, , 0, 1,1000,enemy, 0x026 //RA_VERDURETRAP
+2253,0xd6, , 0, 1,1000,enemy, 0x006 //RA_FIRINGTRAP
+2254,0xd7, , 0, 1,1000,enemy, 0x006 //RA_ICEBOUNDTRAP
+
+2273,0xe2, , 1, 0, 500,friend,0x000 //NC_NEUTRALBARRIER
+2274,0xe3, , 1, 0, 500,all, 0x000 //NC_STEALTHFIELD
+
8208,0x86, , 0, 2,1000,enemy, 0x080 //MA_SHOWER
8209,0x90, , 0, 1,1000,enemy, 0x006 //MA_SKIDTRAP
8210,0x93, , 0, 0,1000,enemy, 0x006 //MA_LANDMINE
diff --git a/db/spellbook_db.txt b/db/spellbook_db.txt
new file mode 100644
index 000000000..62610473a
--- /dev/null
+++ b/db/spellbook_db.txt
@@ -0,0 +1,29 @@
+//============================================================
+// Preserve points database for Reading Spellbook. [LimitLine/3CeAm]
+// Structure:
+// SkillID,PreservePoints,Required Book
+//============================================================
+//To add more entries skill.h MAX_SKILL_SPELLBOOK_DB must be increased
+
+//Mage
+14,7,6190 //Cold Bolt
+19,7,6189 //Fire Bolt
+20,7,6191 //Lightning Bolt
+21,9,6197 //Thunder Storm
+
+//Wizard
+83,10,6194 //Meteor Storm
+84,9,6198 //Jupitel Thunder
+85,10,6193 //Lord of Vermillion
+86,9,6199 //Water Ball
+89,10,6192 //Storm Gust
+90,8,6201 //Earth Spike
+91,9,6200 //Heaven's Drive
+
+//Warlock
+2210,8,6205 //Drain Life
+2211,12,6204 //Crimson Rock
+2213,22,6195 //Comet
+2214,12,6203 //Chain Lightning
+2216,12,6202 //Earth Strain
+2217,22,6196 //Tetra Vortex
diff --git a/db/statpoint.txt b/db/statpoint.txt
index 71d0e5506..1b3f3d893 100644
--- a/db/statpoint.txt
+++ b/db/statpoint.txt
@@ -103,153 +103,153 @@
1364
1387
1410
-1433
-1456
-1479
-1502
-1525
-1549
-1573
-1597
-1621
-1645
-1669
-1693
-1717
-1741
-1765
-1790
-1815
-1840
-1865
-1890
-1915
-1940
-1965
-1990
-2015
-2041
-2067
-2093
-2119
-2145
-2171
-2197
-2223
-2249
-2275
-2302
-2329
-2356
-2383
-2410
-2437
-2464
-2491
-2518
-2545
-2573
-2601
-2629
-2657
-2685
-2713
-2743
+1434
+1458
+1482
+1506
+1530
+1555
+1580
+1605
+1630
+1655
+1681
+1707
+1733
+1759
+1785
+1812
+1839
+1866
+1893
+1920
+1948
+1976
+2004
+2032
+2060
+2089
+2118
+2147
+2176
+2205
+2235
+2265
+2295
+2325
+2355
+2386
+2417
+2448
+2479
+2510
+2542
+2574
+2606
+2638
+2670
+2703
+2736
2769
-2797
-2825
-2854
-2883
-2912
-2941
-2970
-2999
-3028
-3057
-3086
-3115
+2802
+2835
+2869
+2903
+2937
+2971
+3005
+3040
+3075
+3110
3145
-3175
-3205
-3235
-3265
-3295
-3325
-3355
-3385
-3415
-3446
-3477
+3180
+3216
+3252
+3288
+3324
+3360
+3397
+3434
+3471
3508
-3539
-3570
-3601
-3632
-3663
-3694
-3725
-3757
-3789
-3821
-3853
-3885
-3917
-3949
-3981
-4013
-4045
-4078
-4111
-4114
-4177
-4210
-4243
-4276
-4309
-4342
-4375
-4409
-4443
-4477
-4511
+3545
+3583
+3621
+3659
+3697
+3735
+3774
+3813
+3852
+3891
+3930
+3970
+4010
+4050
+4090
+4130
+4171
+4212
+4253
+4294
+4335
+4377
+4419
+4461
+4503
4545
-4579
-4613
-4647
-4681
-4715
-4750
-4785
-4820
-4855
-4890
-4925
-4960
-5030
-5065
-5100
-5136
-5172
-5208
-5244
-5280
-5316
-5352
-5388
-5424
-5460
-5497
-5537
-5571
-5608
-5645
-5682
-5719
-5793
-5830
-5868
-5906
-5944
-5982
-6020
-6058
+4588
+4631
+4674
+4717
+4760
+4804
+4848
+4892
+4936
+4980
+5025
+5070
+5115
+5160
+5205
+5251
+5297
+5343
+5389
+5435
+5482
+5529
+5576
+5623
+5670
+5718
+5766
+5814
+5862
+5910
+5959
+6008
+6057
+6106
+6155
+6205
+6255
+6305
+6355
+6405
+6456
+6507
+6558
+6609
+6660
+6712
+6764
+6816
+6868
+6920
+6973
+7026
+7079
+7132
+7185
diff --git a/db/statpoint_renewal.txt b/db/statpoint_renewal.txt
new file mode 100644
index 000000000..71d0e5506
--- /dev/null
+++ b/db/statpoint_renewal.txt
@@ -0,0 +1,255 @@
+48
+51
+54
+57
+60
+64
+68
+72
+76
+80
+85
+90
+95
+100
+105
+111
+117
+123
+129
+135
+142
+149
+156
+163
+170
+178
+186
+194
+202
+210
+219
+228
+237
+246
+255
+265
+275
+285
+295
+305
+316
+327
+338
+349
+360
+372
+384
+396
+408
+420
+433
+446
+459
+472
+485
+499
+513
+527
+541
+555
+570
+585
+600
+615
+630
+646
+662
+678
+694
+710
+727
+744
+761
+778
+795
+813
+831
+849
+867
+885
+904
+923
+942
+961
+980
+1000
+1020
+1040
+1060
+1080
+1101
+1122
+1143
+1164
+1185
+1207
+1229
+1251
+1273
+1295
+1318
+1341
+1364
+1387
+1410
+1433
+1456
+1479
+1502
+1525
+1549
+1573
+1597
+1621
+1645
+1669
+1693
+1717
+1741
+1765
+1790
+1815
+1840
+1865
+1890
+1915
+1940
+1965
+1990
+2015
+2041
+2067
+2093
+2119
+2145
+2171
+2197
+2223
+2249
+2275
+2302
+2329
+2356
+2383
+2410
+2437
+2464
+2491
+2518
+2545
+2573
+2601
+2629
+2657
+2685
+2713
+2743
+2769
+2797
+2825
+2854
+2883
+2912
+2941
+2970
+2999
+3028
+3057
+3086
+3115
+3145
+3175
+3205
+3235
+3265
+3295
+3325
+3355
+3385
+3415
+3446
+3477
+3508
+3539
+3570
+3601
+3632
+3663
+3694
+3725
+3757
+3789
+3821
+3853
+3885
+3917
+3949
+3981
+4013
+4045
+4078
+4111
+4114
+4177
+4210
+4243
+4276
+4309
+4342
+4375
+4409
+4443
+4477
+4511
+4545
+4579
+4613
+4647
+4681
+4715
+4750
+4785
+4820
+4855
+4890
+4925
+4960
+5030
+5065
+5100
+5136
+5172
+5208
+5244
+5280
+5316
+5352
+5388
+5424
+5460
+5497
+5537
+5571
+5608
+5645
+5682
+5719
+5793
+5830
+5868
+5906
+5944
+5982
+6020
+6058
diff --git a/doc/3rd_job_notes.txt b/doc/3rd_job_notes.txt
deleted file mode 100644
index 3f6bc5faf..000000000
--- a/doc/3rd_job_notes.txt
+++ /dev/null
@@ -1,261 +0,0 @@
-== Rune Knight ====================================================================================
-RK_ENCHANTBLADE
- Working
- Applied kRO update (30/08/2011)
- Changed from single target to self targeted.
- Bonus damage formula changed.
-RK_SONICWAVE
- Working
-RK_DEATHBOUND
- Working.
- Piggybacks of a lot of KN_AUTOCOUNTER.
-RK_HUNDREDSPEAR
- Working
- Applied kRO update (30/08/2011)
- Casting time changed.
- Damage Formula changed.
-RK_WINDCUTTER
- Working
-RK_IGNITIONBREAK
- Working
- Applied kRO update (30/08/2011)
- Damage Formula changed.
-RK_DRAGONTRAINING
- Working
- Availability to rent depends on KN_RIDING. (Possible AEGIS bug.)
-RK_DRAGONBREATH
- Working
-RK_DRAGONHOWLING
- Working
-RK_RUNEMASTERY
- Working
- Uses sd->produce_itemusedid and saves a second paramater provided by produce script command.
-RK_MILLENNIUMSHIELD
- Working
- Need more information on how long/when stun is applied.
- Current behavior: rate/duration 15%/1s ever time a shield breaks
-RK_CRUSHSTRIKE
- Working
- Applied kRO update (30/08/2011)
- On your next physical melee attack, you will auto-cast Crush Strike.
-RK_REFRESH
- Working
- Check: Should work while under status effects that block item usage.
- Applied kRO update (30/08/2011)
- After being used you cannot be affected by status effects for 60 seconds.
- Removes the following Debuffs: Stun, Silence, Curse, Petrify, Poison, Blind, Bleeding, Chaos
- Freeze, Cold, Lock, Burning, Guillotine Cross Poison, Marsh of Abyss, Howling of Mandragora.
-RK_GIANTGROWTH
- Working
- Applied kRO update (30/08/2011)
- Duration time is Changed.
-RK_STONEHARDSKIN
- Working
- Check: Unsure how damage reduction is applied by the skill, currently def2/mdef2.
- My theroy is it works like assumpito, but this will do for now.
- Applied kRO update (30/08/2011)
- Magic defense increase is affected by Job Lv and Rune Mastery level.
- Duration time is changed.
-RK_VITALITYACTIVATION
- Working
- Applied kRO update (30/08/2011)
- Duration time is changed.
-RK_STORMBLAST
- Working
-RK_FIGHTINGSPIRIT
- Working
- Bug: skill-granted ASPD needs to be a fixed value instead of percentage increase.
- Posible this applies to all skills that grant ASPD now. Not just this one.
-RK_ABUNDANCE
- Working
-RK_PHANTOMTHRUST
- Working
-
-== Guillotine_Cross ===============================================================================
-GC_VENOMIMPRESS
-GC_CROSSIMPACT
-GC_DARKILLUSION
-GC_RESEARCHNEWPOISON
-GC_CREATENEWPOISON
-GC_ANTIDOTE
-GC_POISONINGWEAPON
-GC_WEAPONBLOCKING
-GC_COUNTERSLASH
-GC_WEAPONCRUSH
-GC_VENOMPRESSURE
-GC_POISONSMOKE
-GC_CLOAKINGEXCEED
-GC_PHANTOMMENACE
-GC_HALLUCINATIONWALK
-GC_ROLLINGCUTTER
-GC_CROSSRIPPERSLASHER
-
-== Archbishop =====================================================================================
-AB_JUDEX
- Working
-AB_ANCILLA
- Working
-AB_ADORAMUS
- Working
- Should partner check be in skill_check_condition_castbegin or in castend?
- Ugly hack to cancel out using gemstone in skill_get_requirement().
- Should SC_BLIND/SC_ADORAMUS be removed by speed bosting effects?
- Should effects cancel simultaneously?
-AB_CLEMENTIA
- Working
- Applied kRO update (30/08/2011)
- SP cost has changed (280/320/360).
- Based on your job level, it can add an additional 1 ~ 5 Str/Int/Dex.
- Bug: Skill name and casting sprite animation should display only on caster
-AB_CANTO
- Working
- Applied kRO update (30/08/2011)
- SP cost is changed (200/220/240).
- Based on your job level, it can add an additional 1 ~ 5 Agi.
- Bug: Skill name and casting sprite animation should display only on caster
-AB_CHEAL
- Working
- Applied kRO update (30/08/2011)
- SP Cost is changed. (200 / 220 / 240)
- Higher number of party members increases healing done.
- Bug: Skill name and casting sprite animation should display only on caster
-AB_EPICLESIS
- Working
- Need to fix SC effect on moving in/out of unit.
- What status effects should cause immunity to this skill?
- has skill_check_condition_castbegin case, check to see if it can be improved.
-AB_PRAEFATIO
- Working
- Applied kRO update (30/08/2011)
- SP cost is changed (80 + SkillLv * 10).
- The defensive power of the barrier increases with more players in party.
- Bug: Skill name and casting sprite animation should display only on caster
-AB_ORATIO
- Working
- Ugly hack to display/remove SI_ORATIO on mobs.
-AB_LAUDAAGNUS
- Working
- Check: Skill name and casting sprite animation should display only on caster?
- Applied kRO update (21/09/2011)
- Now works when casting player is not in a party.
-AB_LAUDARAMUS
- Working
- Check: Skill name and casting sprite animation should display only on caster?
- Applied kRO update (21/09/2011)
- Now works when casting player is not in a party.
-AB_EUCHARISTICA
- Working
-AB_RENOVATIO
- Working
-AB_HIGHNESSHEAL
- Working
-AB_CLEARANCE
- Working
- Check: Should Soul Linkers be inately immune?
- Check list a second time to see what was missed.
- Applied kRO update (30/08/2011)
- Now also removes the Critical Wounds status effect.
-AB_EXPIATIO
- Working
- Applied kRO update (30/08/2011)
- Changed from self targeted to self and other players.
-AB_DUPLELIGHT
- Working
- Is skill_addtimerskill the best way to implement the additional attacks?
-AB_DUPLELIGHT_MELEE
- Working
-AB_DUPLELIGHT_MAGIC
- Working
-AB_SILENTIUM
- Working
-AB_SECRAMENT
- Working
-
-== Warlock ========================================================================================
-WL_WHITEIMPRISON
-WL_SOULEXPANSION
-WL_FROSTMISTY
-WL_JACKFROST
-WL_MARSHOFABYSS
-WL_RECOGNIZEDSPELL
-WL_SIENNAEXECRATE
-WL_RADIUS
-WL_STASIS
-WL_DRAINLIFE
-WL_CRIMSONROCK
-WL_HELLINFERNO
-WL_COMET
-WL_CHAINLIGHTNING
-WL_CHAINLIGHTNING_ATK
-WL_EARTHSTRAIN
-WL_TETRAVORTEX
-WL_TETRAVORTEX_FIRE
-WL_TETRAVORTEX_WATER
-WL_TETRAVORTEX_WIND
-WL_TETRAVORTEX_GROUND
-WL_SUMMONFB
-WL_SUMMONBL
-WL_SUMMONWB
-WL_SUMMON_ATK_FIRE
-WL_SUMMON_ATK_WIND
-WL_SUMMON_ATK_WATER
-WL_SUMMON_ATK_GROUND
-WL_SUMMONSTONE
-WL_RELEASE
-WL_READING_SB
-WL_FREEZE_SP
-
-== Ranger =========================================================================================
-RA_ARROWSTORM
-RA_FEARBREEZE
-RA_RANGERMAIN
-RA_AIMEDBOLT
-RA_DETONATOR
-RA_ELECTRICSHOCKER
-RA_CLUSTERBOMB
-RA_WUGMASTERY
-RA_WUGRIDER
-RA_WUGDASH
-RA_WUGSTRIKE
-RA_WUGBITE
-RA_TOOTHOFWUG
-RA_SENSITIVEKEEN
-RA_CAMOUFLAGE
-RA_RESEARCHTRAP
-RA_MAGENTATRAP
-RA_COBALTTRAP
-RA_MAIZETRAP
-RA_VERDURETRAP
-RA_FIRINGTRAP
-RA_ICEBOUNDTRAP
-
-== Mechanic =======================================================================================
-NC_MADOLICENCE
-NC_BOOSTKNUCKLE
-NC_PILEBUNKER
-NC_VULCANARM
-NC_FLAMELAUNCHER
-NC_COLDSLOWER
-NC_ARMSCANNON
-NC_ACCELERATION
-NC_HOVERING
-NC_F_SIDESLIDE
-NC_B_SIDESLIDE
-NC_MAINFRAME
-NC_SELFDESTRUCTION
-NC_SHAPESHIFT
-NC_EMERGENCYCOOL
-NC_INFRAREDSCAN
-NC_ANALYZE
-NC_MAGNETICFIELD
-NC_NEUTRALBARRIER
-NC_STEALTHFIELD
-NC_REPAIR
-NC_TRAININGAXE
-NC_RESEARCHFE
-NC_AXEBOOMERANG
-NC_POWERSWING
-NC_AXETORNADO
-NC_SILVERSNIPER
-NC_MAGICDECOY
-NC_DISJOINT
diff --git a/doc/item_bonus.txt b/doc/item_bonus.txt
index 93e5bfb57..e705a963b 100644
--- a/doc/item_bonus.txt
+++ b/doc/item_bonus.txt
@@ -439,7 +439,3 @@ bonus bMagicSPGainValue,n; Heals +n SP when killing an enemy with magic attack.
bonus bMagicHPGainValue,n; Heals +n HP when killing an enemy with magic attack.
bonus3 bAddClassDropItem,s,x,n; Adds an n/100% chance of dropping item s when killing monster class x.
-
-bonus bFixedCastrate,x; Skill fixed casting time rate + n%
-bonus bWeaponMatk,x; Adds x Weapon Magical Attack to a weapon item.
-bonus bEquipmentMatk,x; Adds x Equipment Magical Attack to a non-weapon item.
diff --git a/doc/script_commands.txt b/doc/script_commands.txt
index b8eaa8ebc..bcf269535 100644
--- a/doc/script_commands.txt
+++ b/doc/script_commands.txt
@@ -1,7 +1,7 @@
//===== Athena Doc ========================================
-//= eAthena Script Commands
+//= rAthena Script Commands
//===== Description =======================================
-//= A reference manual for the eAthena scripting language.
+//= A reference manual for the rAthena scripting language.
//= Commands are sorted depending on their functionality.
//===== Version ===========================================
//= 3.45.20110709
@@ -183,13 +183,10 @@
//= Added 'getmercinfo' command. [Ai4rei]
//= 3.46.20110810
//= Added information on OnTouchNPC and 'unitwarp' special case [Skotlex]
-//= 3.47.20111025
-//= Documented successruneuse and setdragon. [L0ne_W0lf]
-//= Ammended documentation for Produce.
//=========================================================
This document is a reference manual for all the scripting commands and functions
-available in current eAthena SVN. It is not a simple tutorial. When people tell
+available in current rAthena SVN. It is not a simple tutorial. When people tell
you to "Read The F***ing Manual", they mean this.
The information was mostly acquired through looking up how things actually work
@@ -275,6 +272,19 @@ Whenever '//' is encountered in a line upon reading, everything beyond this on
that line is considered to be a comment and is ignored. This works wherever you
place it.
+// This line will be ignored when processing the script.
+
+Block comments can also be used, where you can place /* and */ between any text you
+wish rAthena to ignore.
+
+Example:
+/* This text,
+ * no matter which new line you start
+ * is ignored, until the following
+ * symbol is encountered: */
+
+The asterisks (*) in front of each line is a personal preference, and is not required.
+
Upon loading all the files, the server will execute all the top-level commands
in them. No variables exist yet at this point, no commands can be called other
than those given in this section. These commands set up the basic server script
@@ -318,7 +328,7 @@ Monster name is the name the monsters will have on screen, and has no relation
whatsoever to their names anywhere else. It's the mob id that counts, which
identifies monster record in 'mob_db.txt' database of monsters. If the mob name
is given as "--ja--", the 'japanese name' field from the monster database is
-used, (which, in eAthena, actually contains an english name) if it's "--en--",
+used, (which, in rAthena, actually contains an english name) if it's "--en--",
it's the 'english name' from the monster database (which contains an uppercase
name used to summon the monster with a GM command).
@@ -334,13 +344,10 @@ below).
Amount is the amount of monsters that will be spawned when this command is
executed, it is affected by spawn rates in 'battle_athena.conf'.
-Delay1 and delay2 are the monster respawn delays - the first one counts the time
-since a monster defined in this spawn was last respawned and the second one
-counts the time since the monster of this spawn was last killed. Whichever turns
-out to be higher will be used. If the resulting number is smaller than a random
-value between 5 and 10 seconds, this value will be used instead. (Which is
-normally the case if both delay values are zero.) The times are given in
-1/1000ths of a second.
+Delay1 and delay2 control monster respawn delays - the first one is the fixed
+base respawn time, and the second is random variance on top of the base time.
+Both values are given in miliseconds (1000 = 1 second).
+Note that the server also enforces a minimum respawn delay of 5 seconds.
You can specify a custom level to use for the mob different from the one of
the database by adjoining the level after the name with a comma. eg:
@@ -508,7 +515,7 @@ What a RID is and why do you need to know
Most scripting commands and functions will want to request data about a
character, store variables referenced to that character, send stuff to the
client connected to that specific character. Whenever a script is invoked by a
-character, it is passed a so-called RID - this is the character ID number of a
+character, it is passed a so-called RID - this is the account ID number of a
character that caused the code to execute by clicking on it, walking into it's
OnTouch zone, or otherwise.
@@ -582,7 +589,7 @@ Variables
The meat of every programming language is variables - places where you store
data.
-In the eAthena scripting language, variable names are not case sensitive.
+In the rAthena scripting language, variable names are not case sensitive.
Variables are divided into and uniquely identified by the combination of:
prefix - determines the scope and extent (or lifetime) of the variable
@@ -628,6 +635,9 @@ nothing - A permanent variable attached to the character, the default variable
callsub/callfunc starts a new scope, returning from the function
ends it. When a scope ends, it's variables are converted to values
('return .@var;' returns a value, not a reference).
+"'" - An instance variable
+ These are used with the instancing system, and are unique to each
+ party's instance.
"#" - A permanent local account variable.
They are stored with all the account data in "save\accreg.txt" in
TXT versions and in the SQL versions in the 'global_reg_value'
@@ -719,7 +729,7 @@ To include symbol '"' in a string you should use prefix '\"'
Arrays
------
-Arrays (in eAthena at least) are essentially a set of variables going under the
+Arrays (in rAthena at least) are essentially a set of variables going under the
same name. You can tell between the specific variables of an array with an
'array index', a number of a variable in that array:
@@ -866,7 +876,7 @@ Logical bitwise operators work only on numbers, and they are the following:
| - Or.
The bitwise operator AND (&) is used to test two values against each other,
and results in setting bits which are active in both arguments. This can
- be used for a few things, but in eAthena this operator is usually used to
+ be used for a few things, but in rAthena this operator is usually used to
create bit-masks in scripts.
The bitwise operator OR (|)sets to 1 a binary position if the binary position
@@ -2132,7 +2142,7 @@ Notice that @array[4] and @array[5] won't be copied to the second array, and it
---------------------------------------
-*deletearray <array name>[<first value>],<how much to delete>
+*deletearray <array name>[<first value>],<how much to delete>;
This command will delete a specified number of array elements totally from an
array, shifting all the elements beyond this towards the beginning.
@@ -2211,8 +2221,9 @@ This is equivalent to using:
The reason for this is, that this short form is internally converted into a call
to getelementofarray, when the script is loaded.
-Also useful when passing arrays to functions.
-getelementofarray(getarg(0),<index>) will work, but getarg(0)[<index>] will not.
+Also useful when passing arrays to functions or accessing another npc's arrays:
+ getelementofarray(getarg(0),<index>)
+ getelementofarray(getvariableofnpc(.var, "testNPC"),<index>)
---------------------------------------
@@ -2500,7 +2511,7 @@ See 'getequipid' for a full list of valid equipment slots.
*getitemname(<item id>)
Given the database ID number of an item, this function will return the text
-stored in the 'japanese name' field (which, in eAthena, stores an english name
+stored in the 'japanese name' field (which, in rAthena, stores an english name
the players would normally see on screen.)
---------------------------------------
@@ -2772,17 +2783,6 @@ when you want to check item cards or if it's signed. Useful for such quests as
Hat[0] +4 -> Player's Hat[0] +4
---------------------------------------
-
-*successruneuse(<item id>)
-
-Returns 0 (failed) or 1 (success) when using Rune Knight Runestone items.
-
- if(successuserune(12725)){ itemskill RK_REFRESH,1; } else { dispbottom "You have failed to use the runestone."; }
-
-This function not only determines if the rune stone was used successfully
-but will also handle the backfire effects imposed upon the player.
-
----------------------------------------
//
2,1.- End of item-related commands.
//
@@ -2894,7 +2894,7 @@ http://www.delorie.com/gnu/docs/glibc/libc_437.html
All the format characters given in there should properly work.
Max length is the maximum length of a time string to generate.
-The example given in eAthena sample scripts works like this:
+The example given in rAthena sample scripts works like this:
mes gettimestr("%Y-%m/%d %H:%M:%S",21);
@@ -3265,14 +3265,6 @@ character while the map is "this", it will return -1.
---------------------------------------
-*getstrlen("<string>")
-
-This function will return the length of the string given as an argument. It is
-useful to check if anything input by the player exceeds name length limits and
-other length limits and asking them to try to input something else.
-
----------------------------------------
-
*skillpointcount()
Returns the total amount of skill points a character possesses (SkillPoint+SP's used in skills)
@@ -3494,30 +3486,6 @@ bird and 0 if they don't.
---------------------------------------
-*setdragon {<flag>{,<color>}};
-
-If <flag> is 0 this command will remove the mount from the character.
-Otherwise it give the invoking character a Dragon Mount if they are a Rune
-Knight
-
-If both <flag> and <color> are supplied, and flag is 1, <color> will change
-color of the dragon mount used. <color> is 0 by default. Values higher than 4,
-or lower than 0, will default to red or green respectively.
-
-Valid values for <color> are:
- DRAGON_GREEN (0),
- DRAGON_BLACK (1),
- DRAGON_WHITE (2),
- DRAGON_BLUE (3),
- DRAGON_RED (4)
-
-This command is limited to only Rune Knights.
-
-Note: the character needs to have the skill KN_RIDING to gain a mount
-This may be a bug in AEGIS, as RK_DRAGONTRAINING should limit this.
-
----------------------------------------
-
*checkvending ({"<player name>"})
*checkchatting ({"<Player Name>"})
@@ -3527,7 +3495,7 @@ When no name is given, the attached player is used for checking.
Returns true or false (1 or 0) when the player is chatting/vending or not.
Example(s):
-if (checkVending("Aaron")) mes "Aaron is currently vending!";
+if (checkVending("Aaron")) mes "Aaron is currently vending!";
//This will check if Aaron is vending, and if so, put a message in front
//of the attached player saying Aaron is vending.
@@ -4035,7 +4003,7 @@ sprites, which is essential for making custom headgear.
Since a lot of people have different palettes for hair and clothes, it's
impossible to tell you what all the color numbers are. If you want a serious
-example, there is a Stylist script inside the default eAthena installation that
+example, there is a Stylist script inside the default rAthena installation that
you can look at, this may help you create a Stylist of your own:
'custom\dye.txt'
@@ -4379,7 +4347,7 @@ target cursor is shown.
---------------------------------------
-*produce <item level>{,<itemid>};
+*produce <item level>;
This command will open a crafting window on the client connected to the invoking
character. The 'item level' is a number which determines what kind of a crafting
@@ -4397,10 +4365,6 @@ Valid item levels are:
22 - Alchemist's Potions, Holy Water, Assassin Cross's Deadly Poison
23 - Elemental Converters
-Supplying <itemid> currently (and for probably will only) ever be used by
-the Rune Knight runestones, to create other runestones and affect the
-success rate. Using items lower than 12734 or higher 12738 will have no effect.
-
---------------------------------------
*cooking <dish level>;
@@ -5719,8 +5683,9 @@ is bought or sold by a player.
In the OnBuyItem, two arrays are set (@bought_nameid and @bought_quantity), which
hold information about the name id (item id) sold and the amount sold of it. Same
goes for the OnSellItem label, only the variables are named different
-(@sold_nameid and @sold_quantity). An example on a shop comes with eAthena, and
-can be found in the doc/sample/npc_dynamic_shop.txt file.
+(@sold_nameid, @sold_quantity, @sold_refine, @sold_attribute, @sold_identify,
+@sold_card1, @sold_card2, @sold_card3, @sold_card4). An example on a shop comes
+with rAthena, and can be found in the doc/sample/npc_dynamic_shop.txt file.
This example shows how to use the labels and their set variables to create a dynamic shop.
@@ -5854,7 +5819,7 @@ characters are present in the room to mess up the script.
The 'enablearena'/'disablearena' commands are just aliases with no parameter.
These are supposedly left here for compatibility with official server scripts,
-but no eathena script uses these at the moment.
+but no rAthena script uses these at the moment.
---------------------------------------
@@ -6065,7 +6030,7 @@ returns a guild id:
---------------------------------------
-*guardian("<map name>",<x>,<y>,"<name to show>",<mob id>,<amount>{,"<event label>"}{,<guardian index>})
+*guardian "<map name>",<x>,<y>,"<name to show>",<mob id>{,"<event label>"{,<guardian index>}};
This command is roughly equivalent to 'monster', but is meant to be used with
castle guardian monsters and will only work with them. It will set the guardian
@@ -6079,7 +6044,7 @@ Temporary guardians are not saved with the castle and can't be accessed by guard
---------------------------------------
-*guardianinfo("<map name>", <guardian number>, <type>)
+*guardianinfo("<map name>", <guardian number>, <type>);
This function will return various info about the specified guardian, or -1
if it fails for some reason. It is primarily used in the castle manager NPC.
@@ -6610,6 +6575,14 @@ Example(s):
---------------------------------------
+*getstrlen("<string>")
+
+This function will return the length of the string given as an argument. It is
+useful to check if anything input by the player exceeds name length limits and
+other length limits and asking them to try to input something else.
+
+---------------------------------------
+
*charisalpha("<string>",<position>)
This function will return 1 if the character number Position in the given string
@@ -6618,6 +6591,193 @@ The first letter is position 0.
---------------------------------------
+*charat(<string>,<index>)
+
+ Returns char at specified index. If index is out of range,
+ returns empty string.
+
+ Example:
+
+ charat("This is a string", 10); //returns "s"
+
+---------------------------------------
+
+*setchar(<string>,<char>,<index>)
+
+ Returns the original string with the char at the specified
+ index set to the specified char. If index out of range, the
+ original string will be returned.
+ Only the 1st char in the <char> parameter will be used.
+
+ Example:
+
+ setchar("Cat", "B", 0); //returns "Bat"
+
+---------------------------------------
+
+*insertchar(<string>,<char>,<index>)
+
+ Returns the original string with the specified char inserted
+ at the specified index. If index is out of range, the char
+ will be inserted on the end of the string that it is closest.
+ Only the 1st char in the <char> parameter will be used.
+
+ Example:
+
+ setchar("laughter", "s", 0); //returns "slaughter"
+
+---------------------------------------
+
+*delchar(<string>,<index>)
+
+ Returns the original string with the char at the specified index
+ removed. If index is out of range, original string will be returned.
+
+ Example:
+
+ delchar("Diet", 3); //returns "Die"
+
+---------------------------------------
+
+*strtoupper(<string>)
+*strtolower(<string>)
+
+ Returns the specified string in it's uppercase/lowercase form.
+ All non-alpha characters will be preserved
+
+ Example:
+
+ strtoupper("The duck is blue!!"); //returns "THE DUCK IS BLUE!!"
+
+---------------------------------------
+
+*charisupper(<string>,<index>)
+*charislower(<string>,<index>)
+
+ Returns 1 if character at specified index of specified string is
+ uppercase/lowercase. Otherwise, 0. Characters not of the alphabelt
+ will return 0.
+
+ Example:
+
+ charisupper("eAthena", 1); //returns 1
+
+---------------------------------------
+
+*substr(<string>,<start_index>,<end_index>)
+
+ Returns the sub-string of the specified string inclusively between
+ the set indexes.
+ If indexes are out of range, or the start index is after the end
+ index, an empty string will be returned.
+
+ Example:
+
+ substr("foobar", 3, 5); //returns "bar"
+
+---------------------------------------
+
+*explode(<dest_array>,<string>,<delimiter>)
+
+ Breaks a string up into substrings based on the specified delimiter.
+ Substrings will be stored within the specified string array.
+ Only the 1st char of the delimiter parameter will be used.
+ If an empty string is passed as a delimiter, the string will be placed
+ in the array in it's original form.
+
+ Example:
+
+ explode(.@my_array$, "Explode:Test:1965:red:PIE", ":");
+ //.@my_array$ contents will be...
+ //.@my_array$[0]: "Explode"
+ //.@my_array$[1]: "Test"
+ //.@my_array$[2]: "1965"
+ //.@my_array$[3]: "red"
+ //.@my_array$[4]: "PIE"
+
+
+---------------------------------------
+
+*implode(<string_array>{,<glue>})
+
+ Combines all substrings within the specified string array into a single string.
+ If the glue parameter is specified, it will be inserted inbetween each substring.
+
+ Example:
+ setarray .@my_array$[0], "This", "is", "a", "test";
+ implode(.@my_array$, " "); //returns "This is a test"
+
+---------------------------------------
+
+*sprintf(<format>[,param[,param[,...]]]) [Mirei]
+
+ C style sprintf. The resulting string is returned same as in PHP. All C format
+ specifiers are supported except %n. More info: sprintf @ www.cplusplus.com.
+ The number of params is only limited by eA's script engine.
+
+ See thread: http://www.eathena.ws/board/index.php?showtopic=190410
+
+ Example:
+ .@format$ = 'The %s contains %d monkeys';
+ dispbottom(sprintf(.@format$, "zoo", 5)); //prints "The zoo contains 5 monkeys"
+ dispbottom(sprintf(.@format$, "barrel", 82)); //prints "The barrel contains 82 monkeys"
+
+---------------------------------------
+
+*sscanf(<string>,<format>[,param[,param[,...]]]) [Mirei]
+
+ C style sscanf. All C format specifiers are supported.
+ More info: sscanf @ www.cplusplus.com. The number of params is only limited
+ by eA's script engine.
+
+ See thread: http://www.eathena.ws/board/index.php?showtopic=191157
+
+ Example:
+ sscanf("This is a test: 42 foobar", "This is a test: %d %s", .@num, .@str$);
+ dispbottom(.@num + " " + .@str$); //prints "42 foobar"
+
+---------------------------------------
+
+*strpos(<haystack>,<needle>{,<offset>})
+
+ PHP style strpos. Finds a substring (needle) within a string (haystack).
+ The offset parameter indicates the index of the string to start searching.
+ Returns index of substring on successful search, else -1.
+ Comparison is case sensitive.
+
+ Example:
+ strpos("foobar", "bar", 0); //returns 3
+ strpos("foobarfoo", "foo", 0); //returns 0
+ strpos("foobarfoo", "foo", 1); //returns 6
+
+---------------------------------------
+
+*replacestr(<input>, <search>, <replace>{, <usecase>{, <count>}})
+
+ Replaces all instances of a search string in the input with the specified
+ replacement string. By default is case sensitive unless <usecase> is set
+ to 0. If specified it will only replace as many instances as specified
+ in the count parameter.
+
+ Example:
+ replacestr("testing tester", "test", "dash"); //returns "dashing dasher"
+ replacestr("Donkey", "don", "mon", 0); //returns "monkey"
+ replacestr("test test test test test", "yay", 0, 3); //returns "yay yay yay test test"
+
+---------------------------------------
+
+*countstr(<input>, <search>{, <usecase>})
+
+ Counts all instances of a search string in the input. By default is case
+ sensitive unless <usecase> is set to 0.
+
+ Example:
+ countstr("test test test Test", "test"); //returns 3
+ countstr("cake Cake", "Cake", 0); //returns 2
+
+
+---------------------------------------
+
*setfont <font>
This command sets the current RO client interface font to one of the
@@ -6969,6 +7129,8 @@ Parameter <alive timeout> specifies the total amount of time the instance will
exist. Parameter <idle timeout> specifies how long players have, when they are
outside of the instance, until it is destroyed.
+Both timeout values are in seconds.
+
---------------------------------------
=========================
diff --git a/doc/whisper_sys.txt b/doc/whisper_sys.txt
index f8bab699a..7f4091408 100644
--- a/doc/whisper_sys.txt
+++ b/doc/whisper_sys.txt
@@ -1,4 +1,4 @@
-Adapted from: http://eathena.deltaanime.net/board/index.php?showtopic=42659
+Adapted from: http://www.eathena.ws/board/index.php?showtopic=42659
Copied by: Massdriller
Post made by: lordalfa
diff --git a/eAthena-6.dsw b/eAthena-6.dsw
deleted file mode 100644
index ffacdb23c..000000000
--- a/eAthena-6.dsw
+++ /dev/null
@@ -1,149 +0,0 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "char_sql"=".\vcproj-6\char-server_sql.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "char_txt"=".\vcproj-6\char-server_txt.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "login_sql"=".\vcproj-6\login-server_sql.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "login_txt"=".\vcproj-6\login-server_txt.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "map_sql"=".\vcproj-6\map-server_sql.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "map_txt"=".\vcproj-6\map-server_txt.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "mapcache"=".\vcproj-6\mapcache.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "plugin_console"=".\vcproj-6\plugin-console.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "plugin_pid"=".\vcproj-6\plugin-pid.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "txt_converter_char"=".\vcproj-6\txt-converter-char.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "txt_converter_login"=".\vcproj-6\txt-converter-login.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
diff --git a/eAthena-7.1.sln b/eAthena-7.1.sln
deleted file mode 100644
index 812905073..000000000
--- a/eAthena-7.1.sln
+++ /dev/null
@@ -1,69 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 8.00
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "map-server_txt", "vcproj-7.1\map-server_txt.vcproj", "{D356871D-58E1-450B-967A-E1E9646175AF}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "login-server_txt", "vcproj-7.1\login-server_txt.vcproj", "{D356871D-58E1-450B-967A-E2E9646175AF}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "char-server_txt", "vcproj-7.1\char-server_txt.vcproj", "{D356871D-58E1-450B-967A-E3E9646175AF}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "char-server_sql", "vcproj-7.1\char-server_sql.vcproj", "{D356871D-58E1-450B-967A-E4E9646175AF}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "login-server_sql", "vcproj-7.1\login-server_sql.vcproj", "{D356871D-58E1-450B-967A-E5E9646175AF}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "map-server_sql", "vcproj-7.1\map-server_sql.vcproj", "{D356871D-58E1-450B-967A-E6E9646175AF}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mapcache", "vcproj-7.1\mapcache.vcproj", "{CB8556B8-9673-42FD-B2F6-3826534E64E2}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Global
- GlobalSection(SolutionConfiguration) = preSolution
- Debug = Debug
- Release = Release
- EndGlobalSection
- GlobalSection(ProjectConfiguration) = postSolution
- {D356871D-58E1-450B-967A-E1E9646175AF}.Debug.ActiveCfg = Debug|Win32
- {D356871D-58E1-450B-967A-E1E9646175AF}.Debug.Build.0 = Debug|Win32
- {D356871D-58E1-450B-967A-E1E9646175AF}.Release.ActiveCfg = Release|Win32
- {D356871D-58E1-450B-967A-E1E9646175AF}.Release.Build.0 = Release|Win32
- {D356871D-58E1-450B-967A-E2E9646175AF}.Debug.ActiveCfg = Debug|Win32
- {D356871D-58E1-450B-967A-E2E9646175AF}.Debug.Build.0 = Debug|Win32
- {D356871D-58E1-450B-967A-E2E9646175AF}.Release.ActiveCfg = Release|Win32
- {D356871D-58E1-450B-967A-E2E9646175AF}.Release.Build.0 = Release|Win32
- {D356871D-58E1-450B-967A-E3E9646175AF}.Debug.ActiveCfg = Debug|Win32
- {D356871D-58E1-450B-967A-E3E9646175AF}.Debug.Build.0 = Debug|Win32
- {D356871D-58E1-450B-967A-E3E9646175AF}.Release.ActiveCfg = Release|Win32
- {D356871D-58E1-450B-967A-E3E9646175AF}.Release.Build.0 = Release|Win32
- {D356871D-58E1-450B-967A-E4E9646175AF}.Debug.ActiveCfg = Debug|Win32
- {D356871D-58E1-450B-967A-E4E9646175AF}.Debug.Build.0 = Debug|Win32
- {D356871D-58E1-450B-967A-E4E9646175AF}.Release.ActiveCfg = Release|Win32
- {D356871D-58E1-450B-967A-E4E9646175AF}.Release.Build.0 = Release|Win32
- {D356871D-58E1-450B-967A-E5E9646175AF}.Debug.ActiveCfg = Debug|Win32
- {D356871D-58E1-450B-967A-E5E9646175AF}.Debug.Build.0 = Debug|Win32
- {D356871D-58E1-450B-967A-E5E9646175AF}.Release.ActiveCfg = Release|Win32
- {D356871D-58E1-450B-967A-E5E9646175AF}.Release.Build.0 = Release|Win32
- {D356871D-58E1-450B-967A-E6E9646175AF}.Debug.ActiveCfg = Debug|Win32
- {D356871D-58E1-450B-967A-E6E9646175AF}.Debug.Build.0 = Debug|Win32
- {D356871D-58E1-450B-967A-E6E9646175AF}.Release.ActiveCfg = Release|Win32
- {D356871D-58E1-450B-967A-E6E9646175AF}.Release.Build.0 = Release|Win32
- {CB8556B8-9673-42FD-B2F6-3826534E64E2}.Debug.ActiveCfg = Debug|Win32
- {CB8556B8-9673-42FD-B2F6-3826534E64E2}.Debug.Build.0 = Debug|Win32
- {CB8556B8-9673-42FD-B2F6-3826534E64E2}.Release.ActiveCfg = Release|Win32
- {CB8556B8-9673-42FD-B2F6-3826534E64E2}.Release.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- EndGlobalSection
- GlobalSection(ExtensibilityAddIns) = postSolution
- EndGlobalSection
-EndGlobal
diff --git a/eAthena-8.sln b/eAthena-8.sln
deleted file mode 100644
index 9348cc476..000000000
--- a/eAthena-8.sln
+++ /dev/null
@@ -1,139 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 9.00
-# Visual Studio 2005
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "map-server_txt", "vcproj-8\map-server_txt.vcproj", "{D356871D-58E1-450B-967A-E1E9646175AF}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "login-server_txt", "vcproj-8\login-server_txt.vcproj", "{D356871D-58E1-450B-967A-E2E9646175AF}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "char-server_txt", "vcproj-8\char-server_txt.vcproj", "{D356871D-58E1-450B-967A-E3E9646175AF}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "char-server_sql", "vcproj-8\char-server_sql.vcproj", "{D356871D-58E1-450B-967A-E4E9646175AF}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "login-server_sql", "vcproj-8\login-server_sql.vcproj", "{D356871D-58E1-450B-967A-E5E9646175AF}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "map-server_sql", "vcproj-8\map-server_sql.vcproj", "{D356871D-58E1-450B-967A-E6E9646175AF}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mapcache", "vcproj-8\mapcache.vcproj", "{D356871D-58E1-450B-967A-E7E9646175AF}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "txt-converter-login", "vcproj-8\txt-converter-login.vcproj", "{D356871D-58E1-450B-967A-E9E9646175AF}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "txt-converter-char", "vcproj-8\txt-converter-char.vcproj", "{D356871D-58E1-450B-967A-EAE9646175AF}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plugin-console", "vcproj-8\plugin-console.vcproj", "{73E1101A-310C-4453-8F45-FD2795ABEF15}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plugin-pid", "vcproj-8\plugin-pid.vcproj", "{9509E1B9-DA2B-4153-9EE0-CBCA6597F198}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Win32 = Debug|Win32
- Debug-sql|Win32 = Debug-sql|Win32
- Debug-txt|Win32 = Debug-txt|Win32
- Release|Win32 = Release|Win32
- Release-sql|Win32 = Release-sql|Win32
- Release-txt|Win32 = Release-txt|Win32
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {D356871D-58E1-450B-967A-E1E9646175AF}.Debug|Win32.ActiveCfg = Debug|Win32
- {D356871D-58E1-450B-967A-E1E9646175AF}.Debug|Win32.Build.0 = Debug|Win32
- {D356871D-58E1-450B-967A-E1E9646175AF}.Debug-sql|Win32.ActiveCfg = Debug|Win32
- {D356871D-58E1-450B-967A-E1E9646175AF}.Debug-txt|Win32.ActiveCfg = Debug|Win32
- {D356871D-58E1-450B-967A-E1E9646175AF}.Debug-txt|Win32.Build.0 = Debug|Win32
- {D356871D-58E1-450B-967A-E1E9646175AF}.Release|Win32.ActiveCfg = Release|Win32
- {D356871D-58E1-450B-967A-E1E9646175AF}.Release|Win32.Build.0 = Release|Win32
- {D356871D-58E1-450B-967A-E1E9646175AF}.Release-sql|Win32.ActiveCfg = Release|Win32
- {D356871D-58E1-450B-967A-E1E9646175AF}.Release-txt|Win32.ActiveCfg = Release|Win32
- {D356871D-58E1-450B-967A-E1E9646175AF}.Release-txt|Win32.Build.0 = Release|Win32
- {D356871D-58E1-450B-967A-E2E9646175AF}.Debug|Win32.ActiveCfg = Debug|Win32
- {D356871D-58E1-450B-967A-E2E9646175AF}.Debug|Win32.Build.0 = Debug|Win32
- {D356871D-58E1-450B-967A-E2E9646175AF}.Debug-sql|Win32.ActiveCfg = Debug|Win32
- {D356871D-58E1-450B-967A-E2E9646175AF}.Debug-txt|Win32.ActiveCfg = Debug|Win32
- {D356871D-58E1-450B-967A-E2E9646175AF}.Debug-txt|Win32.Build.0 = Debug|Win32
- {D356871D-58E1-450B-967A-E2E9646175AF}.Release|Win32.ActiveCfg = Release|Win32
- {D356871D-58E1-450B-967A-E2E9646175AF}.Release|Win32.Build.0 = Release|Win32
- {D356871D-58E1-450B-967A-E2E9646175AF}.Release-sql|Win32.ActiveCfg = Release|Win32
- {D356871D-58E1-450B-967A-E2E9646175AF}.Release-txt|Win32.ActiveCfg = Release|Win32
- {D356871D-58E1-450B-967A-E2E9646175AF}.Release-txt|Win32.Build.0 = Release|Win32
- {D356871D-58E1-450B-967A-E3E9646175AF}.Debug|Win32.ActiveCfg = Debug|Win32
- {D356871D-58E1-450B-967A-E3E9646175AF}.Debug|Win32.Build.0 = Debug|Win32
- {D356871D-58E1-450B-967A-E3E9646175AF}.Debug-sql|Win32.ActiveCfg = Debug|Win32
- {D356871D-58E1-450B-967A-E3E9646175AF}.Debug-txt|Win32.ActiveCfg = Debug|Win32
- {D356871D-58E1-450B-967A-E3E9646175AF}.Debug-txt|Win32.Build.0 = Debug|Win32
- {D356871D-58E1-450B-967A-E3E9646175AF}.Release|Win32.ActiveCfg = Release|Win32
- {D356871D-58E1-450B-967A-E3E9646175AF}.Release|Win32.Build.0 = Release|Win32
- {D356871D-58E1-450B-967A-E3E9646175AF}.Release-sql|Win32.ActiveCfg = Release|Win32
- {D356871D-58E1-450B-967A-E3E9646175AF}.Release-txt|Win32.ActiveCfg = Release|Win32
- {D356871D-58E1-450B-967A-E3E9646175AF}.Release-txt|Win32.Build.0 = Release|Win32
- {D356871D-58E1-450B-967A-E4E9646175AF}.Debug|Win32.ActiveCfg = Debug|Win32
- {D356871D-58E1-450B-967A-E4E9646175AF}.Debug|Win32.Build.0 = Debug|Win32
- {D356871D-58E1-450B-967A-E4E9646175AF}.Debug-sql|Win32.ActiveCfg = Debug|Win32
- {D356871D-58E1-450B-967A-E4E9646175AF}.Debug-sql|Win32.Build.0 = Debug|Win32
- {D356871D-58E1-450B-967A-E4E9646175AF}.Debug-txt|Win32.ActiveCfg = Debug|Win32
- {D356871D-58E1-450B-967A-E4E9646175AF}.Release|Win32.ActiveCfg = Release|Win32
- {D356871D-58E1-450B-967A-E4E9646175AF}.Release|Win32.Build.0 = Release|Win32
- {D356871D-58E1-450B-967A-E4E9646175AF}.Release-sql|Win32.ActiveCfg = Release|Win32
- {D356871D-58E1-450B-967A-E4E9646175AF}.Release-sql|Win32.Build.0 = Release|Win32
- {D356871D-58E1-450B-967A-E4E9646175AF}.Release-txt|Win32.ActiveCfg = Release|Win32
- {D356871D-58E1-450B-967A-E5E9646175AF}.Debug|Win32.ActiveCfg = Debug|Win32
- {D356871D-58E1-450B-967A-E5E9646175AF}.Debug|Win32.Build.0 = Debug|Win32
- {D356871D-58E1-450B-967A-E5E9646175AF}.Debug-sql|Win32.ActiveCfg = Debug|Win32
- {D356871D-58E1-450B-967A-E5E9646175AF}.Debug-sql|Win32.Build.0 = Debug|Win32
- {D356871D-58E1-450B-967A-E5E9646175AF}.Debug-txt|Win32.ActiveCfg = Debug|Win32
- {D356871D-58E1-450B-967A-E5E9646175AF}.Release|Win32.ActiveCfg = Release|Win32
- {D356871D-58E1-450B-967A-E5E9646175AF}.Release|Win32.Build.0 = Release|Win32
- {D356871D-58E1-450B-967A-E5E9646175AF}.Release-sql|Win32.ActiveCfg = Release|Win32
- {D356871D-58E1-450B-967A-E5E9646175AF}.Release-sql|Win32.Build.0 = Release|Win32
- {D356871D-58E1-450B-967A-E5E9646175AF}.Release-txt|Win32.ActiveCfg = Release|Win32
- {D356871D-58E1-450B-967A-E6E9646175AF}.Debug|Win32.ActiveCfg = Debug|Win32
- {D356871D-58E1-450B-967A-E6E9646175AF}.Debug|Win32.Build.0 = Debug|Win32
- {D356871D-58E1-450B-967A-E6E9646175AF}.Debug-sql|Win32.ActiveCfg = Debug|Win32
- {D356871D-58E1-450B-967A-E6E9646175AF}.Debug-sql|Win32.Build.0 = Debug|Win32
- {D356871D-58E1-450B-967A-E6E9646175AF}.Debug-txt|Win32.ActiveCfg = Debug|Win32
- {D356871D-58E1-450B-967A-E6E9646175AF}.Release|Win32.ActiveCfg = Release|Win32
- {D356871D-58E1-450B-967A-E6E9646175AF}.Release|Win32.Build.0 = Release|Win32
- {D356871D-58E1-450B-967A-E6E9646175AF}.Release-sql|Win32.ActiveCfg = Release|Win32
- {D356871D-58E1-450B-967A-E6E9646175AF}.Release-sql|Win32.Build.0 = Release|Win32
- {D356871D-58E1-450B-967A-E6E9646175AF}.Release-txt|Win32.ActiveCfg = Release|Win32
- {D356871D-58E1-450B-967A-E7E9646175AF}.Debug|Win32.ActiveCfg = Debug|Win32
- {D356871D-58E1-450B-967A-E7E9646175AF}.Debug|Win32.Build.0 = Debug|Win32
- {D356871D-58E1-450B-967A-E7E9646175AF}.Debug-sql|Win32.ActiveCfg = Debug|Win32
- {D356871D-58E1-450B-967A-E7E9646175AF}.Debug-sql|Win32.Build.0 = Debug|Win32
- {D356871D-58E1-450B-967A-E7E9646175AF}.Debug-txt|Win32.ActiveCfg = Debug|Win32
- {D356871D-58E1-450B-967A-E7E9646175AF}.Debug-txt|Win32.Build.0 = Debug|Win32
- {D356871D-58E1-450B-967A-E7E9646175AF}.Release|Win32.ActiveCfg = Release|Win32
- {D356871D-58E1-450B-967A-E7E9646175AF}.Release|Win32.Build.0 = Release|Win32
- {D356871D-58E1-450B-967A-E7E9646175AF}.Release-sql|Win32.ActiveCfg = Release|Win32
- {D356871D-58E1-450B-967A-E7E9646175AF}.Release-sql|Win32.Build.0 = Release|Win32
- {D356871D-58E1-450B-967A-E7E9646175AF}.Release-txt|Win32.ActiveCfg = Release|Win32
- {D356871D-58E1-450B-967A-E7E9646175AF}.Release-txt|Win32.Build.0 = Release|Win32
- {D356871D-58E1-450B-967A-E9E9646175AF}.Debug|Win32.ActiveCfg = Debug|Win32
- {D356871D-58E1-450B-967A-E9E9646175AF}.Debug|Win32.Build.0 = Debug|Win32
- {D356871D-58E1-450B-967A-E9E9646175AF}.Debug-sql|Win32.ActiveCfg = Debug|Win32
- {D356871D-58E1-450B-967A-E9E9646175AF}.Debug-txt|Win32.ActiveCfg = Debug|Win32
- {D356871D-58E1-450B-967A-E9E9646175AF}.Debug-txt|Win32.Build.0 = Debug|Win32
- {D356871D-58E1-450B-967A-E9E9646175AF}.Release|Win32.ActiveCfg = Release|Win32
- {D356871D-58E1-450B-967A-E9E9646175AF}.Release|Win32.Build.0 = Release|Win32
- {D356871D-58E1-450B-967A-E9E9646175AF}.Release-sql|Win32.ActiveCfg = Release|Win32
- {D356871D-58E1-450B-967A-E9E9646175AF}.Release-txt|Win32.ActiveCfg = Release|Win32
- {D356871D-58E1-450B-967A-E9E9646175AF}.Release-txt|Win32.Build.0 = Release|Win32
- {D356871D-58E1-450B-967A-EAE9646175AF}.Debug|Win32.ActiveCfg = Debug|Win32
- {D356871D-58E1-450B-967A-EAE9646175AF}.Debug|Win32.Build.0 = Debug|Win32
- {D356871D-58E1-450B-967A-EAE9646175AF}.Debug-sql|Win32.ActiveCfg = Debug|Win32
- {D356871D-58E1-450B-967A-EAE9646175AF}.Debug-txt|Win32.ActiveCfg = Debug|Win32
- {D356871D-58E1-450B-967A-EAE9646175AF}.Debug-txt|Win32.Build.0 = Debug|Win32
- {D356871D-58E1-450B-967A-EAE9646175AF}.Release|Win32.ActiveCfg = Release|Win32
- {D356871D-58E1-450B-967A-EAE9646175AF}.Release|Win32.Build.0 = Release|Win32
- {D356871D-58E1-450B-967A-EAE9646175AF}.Release-sql|Win32.ActiveCfg = Release|Win32
- {D356871D-58E1-450B-967A-EAE9646175AF}.Release-txt|Win32.ActiveCfg = Release|Win32
- {D356871D-58E1-450B-967A-EAE9646175AF}.Release-txt|Win32.Build.0 = Release|Win32
- {73E1101A-310C-4453-8F45-FD2795ABEF15}.Debug|Win32.ActiveCfg = Debug|Win32
- {73E1101A-310C-4453-8F45-FD2795ABEF15}.Debug|Win32.Build.0 = Debug|Win32
- {73E1101A-310C-4453-8F45-FD2795ABEF15}.Release|Win32.ActiveCfg = Release|Win32
- {73E1101A-310C-4453-8F45-FD2795ABEF15}.Release|Win32.Build.0 = Release|Win32
- {9509E1B9-DA2B-4153-9EE0-CBCA6597F198}.Debug|Win32.ActiveCfg = Debug|Win32
- {9509E1B9-DA2B-4153-9EE0-CBCA6597F198}.Debug|Win32.Build.0 = Debug|Win32
- {9509E1B9-DA2B-4153-9EE0-CBCA6597F198}.Release|Win32.ActiveCfg = Release|Win32
- {9509E1B9-DA2B-4153-9EE0-CBCA6597F198}.Release|Win32.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/notice.txt b/notice.txt
index 1b49fd1a9..099a1c550 100644
--- a/notice.txt
+++ b/notice.txt
@@ -2,11 +2,11 @@
This branch, "Trunk", might not be stable due to bugs and whatsoever.
It is highly recommended, if you have any doubts on using this svn version,
-it is best if you use an eAthena Official Version or use the Stable branch.
+it is best if you use a RAthena Official Version or use the Stable branch.
-on another note, if you found a bug, it is best if you report it on the eAthena
-forums as http://eathena.ws/ . If you have made yourself a fix for
+on another note, if you found a bug, it is best if you report it on the RAthena
+forums as http://rathena.org/board/ . If you have made yourself a fix for
that piece of faulty/buggy code, why not post it up and we'll add it to the svn.
who knows, you might be an aspiring dev.
-eA Dev Team \ No newline at end of file
+rA Dev Team
diff --git a/npc/Changelog.txt b/npc/Changelog.txt
index ac058e16a..7699db8bf 100644
--- a/npc/Changelog.txt
+++ b/npc/Changelog.txt
@@ -15,7 +15,6 @@ Date Added
* Rev. 14920 Updated most active NPCs that give EXP to renewal standards. [L0ne_W0lf]
2011/07/16
* Rev. 14912 Updated dialog in monster_race.txt [L0ne_W0lf]
-2011/07/16
* Rev. 14900 Have been working on this for months: Added Nidhoggr's Nest instance. [L0ne_W0lf]
* Tweaks to how checkquest is used in orc's memory and sealed shrine.
2011/07/13
diff --git a/npc/custom/MVP_arena/arena_mvp.txt b/npc/custom/MVP_arena/arena_mvp.txt
index a6853d3b5..4f77e3387 100644
--- a/npc/custom/MVP_arena/arena_mvp.txt
+++ b/npc/custom/MVP_arena/arena_mvp.txt
@@ -134,7 +134,7 @@ Lsorry:
// --- The first Beta-MVP warper
quiz_00,58,31,4 script Beta MVP 773,{
- mes "[ ^0065DFAlpha MVP^000000 ]";
+ mes "[ ^0065DFBeta MVP^000000 ]";
mes "I am the first Keeper, are you ready?.";
menu "Yes!",L_Yes,"Urrr No.",Lcancel;
diff --git a/npc/custom/eAAC_Scripts/kafraExpress/config.txt b/npc/custom/eAAC_Scripts/kafraExpress/config.txt
index a7333d09a..ea29be42e 100644
--- a/npc/custom/eAAC_Scripts/kafraExpress/config.txt
+++ b/npc/custom/eAAC_Scripts/kafraExpress/config.txt
@@ -10,7 +10,7 @@
//= Part of the Kafra Express Script Package.
//= This module contains the configuration of all modules.
//===== Additional Comments: =================================
-//= See <http://www.eathena.deltaanime.net/board/index.php?showtopic=20290>
+//= See <http://www.eathena.ws/board/index.php?showtopic=20290>
//= for indepth explanation of the Kafra Express Script Package.
//============================================================
diff --git a/npc/custom/eAAC_Scripts/kafraExpress/ke_main.txt b/npc/custom/eAAC_Scripts/kafraExpress/ke_main.txt
index 95a887ddb..d291159c3 100644
--- a/npc/custom/eAAC_Scripts/kafraExpress/ke_main.txt
+++ b/npc/custom/eAAC_Scripts/kafraExpress/ke_main.txt
@@ -11,7 +11,7 @@
//= This module contains the main menu, plus the healing and
//= storage services.
//===== Additional Comments: =================================
-//= See <http://www.eathena.deltaanime.net/board/index.php?showtopic=20290>
+//= See <http://www.eathena.ws/board/index.php?showtopic=20290>
//= for indepth explanation of the Kafra Express Script Package.
//= Services available: comment/uncomment what you want (lines 37-104)
//= See config.txt for per-module configuration.
diff --git a/npc/guides/guides_brasilis.txt b/npc/guides/guides_brasilis.txt
index 77df5b4f5..eab0b322b 100644
--- a/npc/guides/guides_brasilis.txt
+++ b/npc/guides/guides_brasilis.txt
@@ -12,6 +12,7 @@
//===== Additional Comments: =================================
//= 1.0 First Version, Renewal guide.
//= 1.1 Added a missing close.
+//= 1.1 Added a missing close.
//============================================================
brasilis,219,97,3 script Brasilis Guide 478,{
diff --git a/npc/guild/agit_template.txt b/npc/guild/agit_template.txt
index 68e9e7f3a..41b706fb2 100644
--- a/npc/guild/agit_template.txt
+++ b/npc/guild/agit_template.txt
@@ -1156,8 +1156,10 @@ OnClock0001:
// Do nothing if this script is the template.
if (strnpcinfo(1) == "Gld_Trea_Spawn") end;
+ set .@GID, GetCastleData(strnpcinfo(2),1);
+
// If there is no owner, do nothing.
- if (!GetCastleData(strnpcinfo(2),1)) end;
+ if (!.@GID) end;
// Is there Economy in this castle?
set .@Treasure,GetCastleData(strnpcinfo(2),2)/5+4;
diff --git a/npc/instances/NydhoggsNest.txt b/npc/instances/NydhoggsNest.txt
index 9aa4bf7da..f999e6744 100644
--- a/npc/instances/NydhoggsNest.txt
+++ b/npc/instances/NydhoggsNest.txt
@@ -1,2948 +1,2948 @@
-//===== eAthena Script =======================================
-//= Nidhoggr's Nest
-//===== By: ==================================================
-//= L0ne_W0lf, various sources
-//===== Current Version: =====================================
-//= 1.2
-//===== Compatible With: =====================================
-//= eAthena SVN
-//===== Description: =========================================
-//= [Aegis Conversion]
-//= Nidhoggr's Nest Instance
-//===== Additional Comments: =================================
-//= 1.0 First version.
-//= 1.1 Minor dialog updates.
-//= 1.2 No longer glitches when anyone but party leader talks to the first NPC.
-//============================================================
-
-nyd_dun02,100,201,3 script Yggdrasil Gatekeeper 111,8,8,{
- if (ins_nyd == 0) {
- mes "A great stone gate stands before you. The sculpture of a terrible dragon spreads its powerful looking wings.";
- next;
- mes "Near the bottom of the gate, Laphine tribeswomen have been turned to stone and now look like they are part of the great door.";
- next;
- switch(select("Move closer to look more carefully.:Step back.")) {
- case 1:
- if (ep13_1_edq == 14) {
- specialeffect2 EF_HOLYHIT;
- PushPC 3,3;
- set ep13_1_edq,15;
- mes "A mysterious power prevents you from getting too close. It looks like there is something strong beyond the door...";
- next;
- mes "Perhaps there's a great hidden secret beyond the gate, beyond expectation.";
- next;
- mes "It would be better to go back to camp and inform the others and ask for help.";
- set ins_nyd,1;
- close;
- }
- else if (ep13_1_edq == 15) {
- specialeffect2 EF_HOLYHIT;
- PushPC 3,3;
- mes "A mysterious power prevents you from getting too close. It looks like there is something strong beyond the door...";
- next;
- mes "Perhaps there's a great hidden secret beyond the gate, beyond expectation.";
- next;
- mes "It would be better to go back to camp and inform the others and ask for help.";
- set ins_nyd,1;
- close;
- }
- else {
- specialeffect2 EF_HOLYHIT;
- PushPC 3,3;
- mes "A mysterious power prevents you from getting too close. It looks like there is something strong beyond the door...";
- next;
- mes "Perhaps there's a great hidden secret beyond the gate, beyond expectation.";
- next;
- mes "It would be better to go back to camp and inform the others and ask for help.";
- next;
- mes "You'll have to obtain the others trust in the expendition camp by working hard.";
- set ins_nyd,1;
- close;
- }
- case 2:
- close;
- }
- }
- else if (ins_nyd == 1) {
- if ((ep13_1_edq == 14) || (ep13_1_edq == 15)) {
- mes "A mysterious power prevents you from getting too close. It looks like there is something strong beyond the door...";
- next;
- mes "Perhaps there's a great hidden secret beyond the gate, beyond expectation.";
- next;
- mes "It would be better to go back to camp and inform the others and ask for help.";
- set ep13_1_edq,15;
- close;
- }
- else {
- mes "A mysterious power prevents you from getting too close. It looks like there is something strong beyond the door...";
- next;
- mes "Perhaps there's a great hidden secret beyond the gate, beyond expectation.";
- next;
- mes "It would be better to go back to camp and inform the others and ask for help.";
- next;
- mes "You'll have to obtain the others trust in the expendition camp by working hard.";
- close;
- }
- }
- else if ((ins_nyd == 111) || (ins_nyd == 112)) {
- specialeffect2 EF_CHANGECOLD;
- mes "The strange sensation surrounding your body has disappeared";
- next;
- mes "When you touch the stone gate, you hear a commanding voice.";
- next;
- mes "[??????]";
- mes "Wingless one... Our promised words...";
- next;
- switch(select("'Guardian's spell'!:Take a step back.")) {
- case 1:
- mes "[??????]";
- mes "Promised words... Guardian's spell... proof of their existence.";
- next;
- mes "[Yggdrasil Gatekeeper]";
- mes "In the name of Yggdrasiliad, I will accept you as a servant of the Guardian.";
- next;
- specialeffect2 EF_CHANGECOLD;
- set ins_nyd,200;
- mes "[Yggdrasil Gatekeeper]";
- mes "I accept your entrance through the Guardian's gate. You are now considered a faithful servant of the Guardian Nidhoggur.";
- next;
- mes "The voice has disappeared, and the dark power is calming down from behind the stone gate.";
- close;
- case 2:
- close;
- }
- }
- else if ((ins_nyd == 131) || (ins_nyd == 132) || (ins_nyd > 199)) {
- set .@ins_nyd_check,checkquest(3135,PLAYTIME); // 3 Day cooldown
- set .@ins_nyd_check2,checkquest(3135,PLAYTIME); // 4 Hour play limit
- if (.@ins_nyd_check == -1) {
- mes "As I put my hands on the stone gate, a voice sounded from the depth of my heart.";
- next;
- mes "[Yggdrasil Gatekeeper]";
- mes "The loyal servants of the Guardian... what can I do for you?";
- next;
- switch(select("Please allow me to enter.:I want to go in.:I want to leave.")) {
- case 1:
- set .@party,getcharid(1);
- set .@leader,getpartyleader(.@party,2);
- set .@md_name$,"Nidhoggur's Nest";
-
- getpartymember(.@party);
- set .@partymembercount,$@partymembercount;
- copyarray .@partymembername$[0],$@partymembername$[0],.@partymembercount;
-
- if ((.@party > 0) && ((.@partymembercount > 1)) && (.@leader == getcharid(0))) {
- set .@instance, instance_create(.@md_name$, .@party);
- if (.@instance < 0) {
- mes "[Yggdrasil Gatekeeper]";
- mes "The Guardian seems to wish to be alone. I will go in and check, please wait out here.";
- close;
- }
- else {
- for( set .@i, 1; .@i <= 2; set .@i, .@i + 1 ) {
- if( instance_attachmap(.@i + "@nyd", .@instance) == "" )
- break;
- }
- if( .@i < 2 ) {
- instance_destroy(.@instance);
- close;
- }
- instance_attach(.@instance);
- instance_set_timeout 144000,300,.@instance;
- instance_init(.@instance);
-
- // Spawn standard mobs
- donpcevent instance_npcname("ins_nyd1_spawn_mobs", instance_id())+"::OnInstanceInit";
- donpcevent instance_npcname("ins_nyd2_spawn_mobs", instance_id())+"::OnInstanceInit";
- // Activate Floor 1
- donpcevent instance_npcname("nyd_call_mon_1", instance_id())+"::OnInstanceInit";
- donpcevent instance_npcname("ins_nyd_1f_timer", instance_id())+"::OnInstanceInit";
- donpcevent instance_npcname("nyd_to2f_warp", instance_id())+"::OnInstanceInit";
- // Active Floor 2
- donpcevent instance_npcname("nyd_2f_enter_broad", instance_id())+"::OnInstanceInit";
- donpcevent instance_npcname("nyd_2f_boss_enter", instance_id())+"::OnInstanceInit";
- donpcevent instance_npcname("nyd_2f_boss_enter_call", instance_id())+"::OnInstanceInit";
- donpcevent instance_npcname("nyd_2f_boss_enter_logic", instance_id())+"::OnInstanceInit";
- donpcevent instance_npcname("World Tree Yggdrasil#2F", instance_id())+"::OnInstanceInit";
- donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnInstanceInit";
- donpcevent instance_npcname("nyd_2f_red_c", instance_id())+"::OnInstanceInit";
- donpcevent instance_npcname("nyd_2f_red_warp1", instance_id())+"::OnInstanceInit";
- donpcevent instance_npcname("nyd_2f_red_warp2", instance_id())+"::OnInstanceInit";
- donpcevent instance_npcname("nyd_2f_red_warp3", instance_id())+"::OnInstanceInit";
- donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnInstanceInit";
- donpcevent instance_npcname("nyd_2f_white_c", instance_id())+"::OnInstanceInit";
- donpcevent instance_npcname("nyd_2f_white_warp1", instance_id())+"::OnInstanceInit";;
- donpcevent instance_npcname("nyd_2f_white_warp2", instance_id())+"::OnInstanceInit";;
- donpcevent instance_npcname("nyd_2f_white_warp3", instance_id())+"::OnInstanceInit";;
- donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnInstanceInit";
- donpcevent instance_npcname("nyd_2f_yellow_c", instance_id())+"::OnInstanceInit";
- donpcevent instance_npcname("nyd_2f_yellow_warp1", instance_id())+"::OnInstanceInit";
- donpcevent instance_npcname("nyd_2f_yellow_warp2", instance_id())+"::OnInstanceInit";
- donpcevent instance_npcname("nyd_2f_yellow_warp3", instance_id())+"::OnInstanceInit";
- donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnInstanceInit";
- donpcevent instance_npcname("nyd_2f_green_c", instance_id())+"::OnInstanceInit";
- donpcevent instance_npcname("nyd_2f_green_warp1", instance_id())+"::OnInstanceInit";
- donpcevent instance_npcname("nyd_2f_green_warp2", instance_id())+"::OnInstanceInit";
- donpcevent instance_npcname("nyd_2f_green_warp3", instance_id())+"::OnInstanceInit";
-
- mes "[Yggdrasil Gatekeeper]";
- mes "I've recorded your request, are you ready to go inside?";
- next;
- mes "[Yggdrasil Gatekeeper]";
- mes "If you are ready, I will allow you to enter.";
- close;
- }
- }
- else {
- mes "[Yggdrasil Gatekeeper]";
- mes "When you touch the stone gate, you can hear the voice in your heart.";
- next;
- mes "[Yggdrasil Gatekeeper]";
- mes "Where are the other servants, so you can work together? Each servant cannot be admitted here individually...";
- next;
- mes "[Yggdrasil Gatekeeper]";
- mes "Come with at least 1 more servant... Only party leaders can accept admission to Nidhoggur's Nest.";
- next;
- mes "[Yggdrasil Gatekeeper]";
- mes "And only 1 representative of you needs to talk to me, so don't annoy me...";
- close;
- }
- case 2:
- if (.@ins_nyd_check2 < 2) { // Added check to avoid people from re-partting up.
- set .@party,getcharid(1);
- set .@leader,getpartyleader(.@party,2);
- set .@p_name$,getpartyname(.@party);
- set .@p_name2$,strcharinfo(0);
- set .@md_name$,"Nidhoggur's Nest";
-
- getpartymember(.@party);
- set .@partymembercount,$@partymembercount;
- copyarray .@partymembername$[0],$@partymembername$[0],.@partymembercount;
-
- if (has_instance("1@nyd") == "") {
- mes "[Yggdrasil Gatekeeper]";
- mes "You did not request for entrance. Please let your leader request entrance.";
- close;
- }
- else if ((has_instance("1@nyd") != "") && (.@partymembercount < 2)) {
- mes "[Yggdrasil Gatekeeper]";
- mes "Where are the other servants with you? We do not allow individuals to enter alone.";
- next;
- mes "[Yggdrasil Gatekeeper]";
- mes "You must be accompanied by one servant to be able to enter.";
- close;
- }
- else {
- mapannounce "nyd_dun02", .@p_name$ + "'s Party member " + .@p_name2$ + " has entered " + .@md_name$,bc_map,"0x00ff99";
- if (checkquest(3135) == -1) setquest 3135;
- if (checkquest(3136) == -1) setquest 3136;
- warp "1@nyd",32,37;
- close;
- }
- }
- else {
- //Custom
- mes "[Yggdrasil Gatekeeper]";
- mes "You are no longer able to enter Nidhogger's Nest, as your instance has expired.";
- next;
- mes "[Yggdrasil Gatekeeper]";
- mes "After Nidhoggur's Shadow disappears, at least 3 days is needed for stabilizing.";
- close;
- }
- case 3:
- close;
- }
- }
- else if ((.@ins_nyd_check == 0) || (.@ins_nyd_check == 1)) {
- mes "[Yggdrasil Gatekeeper]";
- mes "With the defeat of Nidhoggur's Shadow, the roots of the World Tree Yggdrasil are also affected.";
- next;
- mes "[Yggdrasil Gatekeeper]";
- mes "After Nidhoggur's Shadow disappears, at least 3 days is needed for stabilizing.";
- close;
- }
- else if (.@ins_nyd_check == 2) {
- mes "[Yggdrasil Gatekeeper]";
- mes "The World Tree Yggdrasil has stabilized. Would you like to enter Nidhoggur's Nest again?";
- next;
- mes "[Yggdrasil Gatekeeper]";
- mes "If you would like to enter again, please register with me.";
- erasequest 3135;
- erasequest 3136;
- set 'ins_nyd2,0;
- close;
- }
- else {
- close;
- }
- }
- else {
- mes "A great stone gate stands before you. The sculpture of a terrible dragon spreads its powerful looking wings.";
- next;
- mes "Near the bottom of the gate, Laphine tribeswomen have been turned to stone and now look like they are part of the great door.";
- next;
- switch(select("Move closer to look more carefully.:Step back.")) {
- case 1:
- specialeffect2 EF_HOLYHIT;
- PushPC 3,3;
- mes "A mysterious power prevents you from getting too close. It looks like there is something strong beyond the door...";
- next;
- mes "Perhaps there's a great hidden secret beyond the gate, beyond expectation.";
- close;
- case 2:
- close;
- }
- }
- close;
-
-OnTouch_:
- if (ins_nyd == 0) {
- specialeffect2 EF_CHANGECOLD;
- specialeffect EF_CHANGECOLD,"Yggdrasil Gatekeeper";
- }
- end;
-}
-
-mid_camp,271,299,3 script Historian Magnifier#edq 755,3,3,{
- if (ins_nyd == 1) {
- mes "[Historian Magniffer]";
- mes "Sure, the mainland also has lots of interesting adventures... Hello, I am Magnifier, a historian dispatched from the Prontera royal court.";
- next;
- mes "[Historian Magniffer]";
- mes "Finding another line of work might make for a really worthy job, but only a historian gets to know the world over..";
- next;
- mes "[Historian Magniffer]";
- mes "How this world is organized... and the way of the future! With our studies of the past and present we can predict what is to come.";
- next;
- mes "[Historian Magniffer]";
- mes "We are expecting a lot from you, expert adventurer. So, if you find anything... just tell me.";
- close;
- }
- else if (ins_nyd == 2) {
- mes "[Historian Magniffer]";
- mes "Does Commander Agip want to talk to me? Let's listen to his story.";
- next;
- mes "[Historian Magniffer]";
- mes "Did you find the cave that the fairy tribes treat as a holy place? You are a really tough cookie. What did you find?";
- next;
- mes "[Historian Magnifier]";
- mes "...";
- next;
- mes "... ...";
- next;
- mes "[Historian Magnifier]";
- mes "Wait a second... I have a brilliant idea.";
- next;
- mes "[Historian Magnifier]";
- mes "Let's see... This book... No... this one...? Hmm... Maybe this...";
- next;
- mes "[Historian Magnifier]";
- mes "...";
- next;
- mes "[Historian Magnifier]";
- mes "... ...";
- next;
- mes "[Historian Magnifier]";
- mes "Oh, here it is! World Tree Yggdrasil and God's tribes... This is their book!";
- next;
- mes "[Historian Magnifier]";
- mes "Maybe you found the central line to enter into the World Tree Yggdrasil!";
- next;
- mes "[Historian Magnifier]";
- mes "If that's true, you've found the greatest discovery since the harnessing of mana. Isn't this exciting?";
- next;
- mes "[Historian Magnifier]";
- mes "But we need a lot more information... Are they refusing you admission?";
- next;
- mes "[Historian Magnifier]";
- mes "I will send a message to my assistant who is in the Prontera Library. So, help her find more information.";
- next;
- mes "[Historian Magnifier]";
- mes "I will definitely help you find a way to enter the World Tree directly so, just believe in me! Okay~!!";
- set ins_nyd,3;
- close;
- }
- else if (ins_nyd == 3) {
- mes "[Historian Magnifier]";
- mes "Why are you standing there? Go to my assistant in the Prontera Library!";
- close;
- }
- else if (ins_nyd == 4) {
- mes "[Historian Magnifier]";
- mes "You've come back... Good, how's Naomi? Actually, I don't need to worry about her. She is always cheerful. Haha.";
- next;
- mes "[Historian Magnifier]";
- mes "You look like you have a lot on your mind... Your face is full of curiosity and questions.";
- next;
- mes "[Historian Magnifier]";
- mes "So, did you read the whole story that I have prepared?";
- next;
- switch(select("Not yet.:I read all the stories.")) {
- case 1:
- mes "[Historian Magnifier]";
- mes "Sheesh~ I prepared these stories for you carefully, but you didn't bother to check anything out did you?";
- next;
- mes "[Historian Magnifier]";
- mes "It would be better if you returned after reading all of them. That's very basic data of what we should do for the future.";
- close;
- case 2:
- mes "[Historian Magnifier]";
- mes "Hm, good job. Maybe I don't need to check anything else, right?";
- next;
- mes "[Historian Magnifier]";
- mes "I sent you to figure out which basic materials will be needed for the jobs ahead of us. You should bring research reports...";
- next;
- mes "[Historian Magnifier]";
- mes "You might complain about why I didn't bring any myself... That's because I trust your abilities, don't ever take anything for granted.";
- next;
- mes "[Historian Magnifier]";
- mes "But a while ago, while you were tranferring reports from Commander Agip to the mainland, you lost those reports... remember?";
- next;
- mes "[Historian Magnifier]";
- mes "So far, nothing's come up... Was it that somebody attacked you?";
- next;
- mes "[Historian Magnifier]";
- mes "Somehow, the truth will come out, but we should be careful of shocking the natives if we go there unannounced and they're not prepared for our arrival.";
- next;
- mes "[Historian Magnifier]";
- mes "I've talked too much... Anyway, as you know through my report, you've found a great thing!";
- next;
- mes "[Historian Magnifier]";
- mes "Firstly, we should find out more about the place. I expect we can, but... we can't do much without help from others.";
- next;
- mes "[Historian Magnifier]";
- mes "I have heard about recent expeditions of adventurers that have tried to contact the tribes... Have you heard anything about this?";
- next;
- mes "[Historian Magnifier]";
- mes "Anyway, let's try to contact them first, to be clear about any caves or treasures.";
- next;
- mes "[Historian Magnifier]";
- mes "For now, you try to contact the Sapha and Laphine tribes, and try to extract information from them.";
- next;
- mes "[Historian Magnifier]";
- mes "I'll also keep searching here. If you find anything, come back and let me know.";
- set ins_nyd,5;
- close;
- }
- }
- else if ((ins_nyd == 5) || (ins_nyd == 51) || (ins_nyd == 52)) {
- mes "[Historian Magnifier]";
- mes "Okay, let's try to contact them first, to be clear about any caves or treasures.";
- next;
- mes "[Historian Magnifier]";
- mes "For now, you try to contact the Sapha and Laphine tribes, and try to extract more information.";
- next;
- mes "[Historian Magnifier]";
- mes "I'll also keep searching here. If you find anything, come back and let me know.";
- close;
- }
- else if ((ins_nyd == 61) || (ins_nyd == 62)) {
- mes "[Historian Magnifier]";
- mes "Ah, you've come at a proper time. I found a curious thing while looking for reports from Arunafeltz.";
- next;
- mes "[Historian Magnifier]";
- mes "Right now, we are standing on part of one of the roots of the World Tree Yggdrasil.";
- next;
- mes "[Historian Magnifier]";
- mes "This spot is connected to World Tree by the root. I think we can expect confrontations between the Sapha and Laphine here eventually, don't you think?";
- next;
- mes "[Historian Magnifier]";
- mes "As I expected, the cave is the entrance to go to one of Yggdrasil's roots...";
- next;
- mes "[Historian Magnifier]";
- mes "Did you find anything about the Sapha and Laphine?";
- next;
- mes "...";
- next;
- mes "... ...";
- next;
- mes "[Historian Magnifier]";
- mes "Both sides act ambiguously, so... I'm getting worried...";
- next;
- mes "[Historian Magnifier]";
- mes "The two tribes have some trouble amongst their top leaders. It's not anything official, but...";
- next;
- mes "[Historian Magnifier]";
- mes "Let's report to Commander Agip about the situation so far. Then, we wait on his decision.";
- set ins_nyd,7;
- close;
- }
- else if ((ins_nyd == 7) || (ins_nyd == 8)) {
- mes "[Historian Magnifier]";
- mes "Report to Commander Hibba Agip about what we have discovered, since time is dependent on his decision.";
- close;
- }
- else if ((ins_nyd == 121) || (ins_nyd == 122) || (ins_nyd == 131) || (ins_nyd == 132) || (ins_nyd ==14)) {
- mes "[Historian Magnifier]";
- mes "So that's how it is... we were right about some parts of it... it's called the Guardian's Nest.";
- next;
- mes "[Historian Magnifier]";
- mes "We have gained a large amount of knowledge today, but...";
- next;
- mes "[Historian Magnifier]";
- mes "What we have figured out... how is it going to influence mankind? It's so unpredictable...";
- next;
- mes "[Historian Magnifier]";
- mes "This is only the beginning...we will be quite busy from now on.";
- next;
- mes "[Historian Magnifier]";
- mes "First, report to Commander Agip, then act according to the situation. Let me organize my research findings...";
- close;
- }
- else {
- mes "[Historian Magnifier]";
- mes "Sure, the mainland also has lots of interesting adventures... Hello, I am Magnifier, a historian dispatched from the Prontera royal court.";
- next;
- mes "[Historian Magnifier]";
- mes "Finding another line of work might make for a really worthy job, but only a historian gets to know the world over..";
- next;
- mes "[Historian Magnifier]";
- mes "How this world is organized... and the way of the future! With our studies of the past and present we can predict what is to come.";
- next;
- mes "[Historian Magnifier]";
- mes "We are expecting a lot from you, expert adventurer. So, if you find anything... just tell me.";
- close;
- }
-}
-
-prt_in,171,94,3 script Assistant Naomi#edq 893,3,3,{
- set name,PcName;
- if (ins_nyd == 3) {
- mes "[Assistant Naomi]";
- mes "The doctor never ever tries to come back, and there're too many things to do... How can I do it all...";
- next;
- mes "[Assistant Naomi]";
- mes "Hey, you. Please move these books. Put them into shelf 3 row B.";
- next;
- mes "[" +strcharinfo(0)+ "]";
- mes "Ah...um..I...am...";
- next;
- mes "[Assistant Naomi]";
- mes "Don't you see I am too busy? Don't hesitate. Just do it.";
- next;
- switch(select("Look busy, and take a step back.:Help her just this once.")) {
- case 1:
- mes "[Assistant Naomi]";
- mes "Gosh! Where is-? Where did-? Ugh! It's so difficult!";
- close;
- case 2:
- mes "[Assistant Naomi]";
- mes "Ah... if you're done moving those, then these should go in shelf 3 row B.";
- next;
- mes "[" +strcharinfo(0)+ "]";
- mes "Ah...I...see...";
- next;
- mes "[Assistant Naomi]";
- mes "Now, I am almost done... Who are you? Are you a new assistant to Dr. Magnifier?";
- next;
- mes "[" +strcharinfo(0)+ "]";
- mes "He asked me to bring some reports. Didn't he say anything?";
- next;
- mes "[Assistant Naomi]";
- mes "Hmm... I haven't seen him in over a year! What's he doing now?";
- next;
- mes "[" +strcharinfo(0)+ "]";
- mes "He said that he would send a message to you... didn't you get it?";
- next;
- mes "[Assistant Naomi]";
- mes "Message? ...Let's see... I never expected him to write a message...";
- next;
- mes "[Assistant Naomi]";
- mes "I will check the mailbox, wait a minute. If you get bored read those books.";
- next;
- mes "...";
- next;
- mes "... ...";
- next;
- mes "It's too messy due to lots of stacked books and files. Dr. Magnifier looks like he has a ton of reports.";
- next;
- mes "[" +strcharinfo(0)+ "]";
- mes "'Birth of the World', 'The Fiction of Odin's Myth', 'God's Battle Then After', 'Dreams of the Tribes'. There are a variety of books...";
- next;
- mes "...";
- next;
- mes "[Assistant Naomi]";
- mes "Oh, sorry I took so long. There was too much mail, so it took me a while to find stuff.";
- next;
- mes "[Assistant Naomi]";
- mes "He has sent me mail over 20 times. I did not know that...";
- next;
- mes "[Assistant Naomi]";
- mes "Ah, here's the message about you. He's said to share the information on research and reports.";
- next;
- mes "[" +strcharinfo(0)+ "]";
- mes "What is the Doctor's area of expertise?";
- next;
- mes "[Assistant Naomi]";
- mes "Ever since 5 years ago, he has been curious about how the world started, and so he began his search for the God of creation.";
- next;
- mes "[Assistant Naomi]";
- mes "He researches combat between Odin and the Gods, and about the Gods' origins and life.";
- next;
- mes "[" +strcharinfo(0)+ "]";
- mes "So, did he already know that the Rebirth of Satan Morocc has occured before?";
- next;
- mes "[Assistant Naomi]";
- mes "I can't be sure, but he thought someday it would occur. It broke out earlier than he expected though.";
- next;
- mes "[" +strcharinfo(0)+ "]";
- mes "But Rune-Midgarts approved this research?";
- next;
- mes "[Assistant Naomi]";
- mes "Our academics are not a religion. And they too have curiosity about this world's history.";
- next;
- mes "[Assistant Naomi]";
- mes "The combat of Odin vs. the Gods, and the God's sons and their purpose... The Doctor has researched this his whole life.";
- next;
- mes "[" +strcharinfo(0)+ "]";
- mes "But those reports haven't come out yet. Have they?";
- next;
- mes "[Assistant Naomi]";
- mes "That's why he sent you here. By the way, this isn't the first time I've heard this.";
- next;
- mes "[Assistant Naomi]";
- mes "After the establishment of the Rune-Midgarts Kingdom and Arunafeltz, the rumors have spread in secret about their tribes, myths, etc.";
- next;
- mes "[Assistant Naomi]";
- mes "Anyway, I should make sure that you read all these books, and I'll just keep doing my work.";
- next;
- mes "[" +strcharinfo(0)+ "]";
- mes "Shouldn't I have filed the books?";
- next;
- mes "[Assistant Naomi]";
- mes "The Doctor said he will pick up the books through another person. Besides, don't you need the basic information on what to do?";
- next;
- mes "[Assistant Naomi]";
- mes "Before you go back to the Doctor, you had better read these books. So, I will go back to work.";
- set ins_nyd,4;
- close;
- }
- }
- else if (ins_nyd == 4) {
- mes "[Assistant Naomi]";
- mes "Browse around, to take a look at the books.";
- next;
- switch(select("Discovery of Heterogeneity:Report of Indigenous Tribes")) {
- case 1:
- mes "Satan Morocc has known that he didn't resurrect normally or by himself.";
- next;
- mes "Continuously, adventurers from Rune-Midgarts have attacked him and he is slowly losing his power. He would need more time to resurrect completely.";
- next;
- mes "Satan Morroc stopped to destroy the city of Morroc, turning it into a ruined desert, then started to rip the world apart.";
- next;
- mes "Satan Morroc was worried about those who would give chase, so he created Morocc clones to keep watch behind him.";
- next;
- mes "Modeled after Morocc, their appearance made it difficult to go around the time-space gap.";
- next;
- mes "Still the adventurers gave chase. They came from all over the world, trying to approach the Dimensional Gorge.";
- next;
- mes "The reports of these adventurers have been sent to representatives of all kingdoms, and an expedition team has been created to find out more information.";
- next;
- mes "The scientists of Schwartzwalt created a combination metal, using fragments of metals found in the dimensional gorge.";
- next;
- mes "The Schwaltzvalt Republic requested approval to find the source of the new metal, and since Rune-Midgart couldn't complete the test themselves, they finally accepted.";
- next;
- mes "They associated together to gather volunteers. The Assassin Guild was the first to volunteer.";
- next;
- mes "The Assassins have a terrible past with Satan Morroc, so they gathered 18 members to chase him down.";
- next;
- mes "About 3 hours later, all 18 members returned without any problem, and each man and woman shared the information that they had collected.";
- next;
- mes "They had discovered another world with a definitively different nature and environment. And indeed, people could also live there.";
- next;
- mes "The most surprising thing is the flow of time. The 18 assassins had stayed for about 2 weeks in there, yet they returned within 3 hours after departing.";
- next;
- mes "The last thing to be tested... was to send adventurers who volunteered to explore the new world.";
- next;
- mes "There was a flood of adventurer applications. Lots of volunteers disappeared over the dimensional gorge, and they brought back new data.";
- next;
- mes "The new world could support 3 completely different eco-systems dependant upon the race of people that lived there.";
- next;
- mes "The heterogenous phenomenon needed to be studied thoroughly and carefully in order to under the relationship between thair world and ours.";
- next;
- mes "Just when it was expected to be impossible to travel into a different world, the first page of a new chapter was opened.";
- close;
- case 2:
- mes "Long ago, there wasn't a sun, moon, or stars; just empty earth... and Ymir was born. Then, by making sons, Ymir grew.";
- next;
- mes "But, his sons grew as well and he was killed by Odin, Vili, and Ve; 3 brothers, Gods, that attacked from different sides.";
- next;
- mes "At that time of Ymir's fall his blood flooded the world... killing all in it's path.";
- next;
- mes "Only Hvergelmir of the Sapha tribe escaped from this flooding of blood. And he swore vengeance in Jotunheim, which is covered with foggy snow.";
- next;
- mes "Currently, one of the Sapha tribe has been discovered from beyond the Dimensional Gorge.";
- next;
- mes "Other than the Sapha tribe, there was another tribe beyond the time-space gap, known as the Laphine.";
- next;
- mes "The Laphine tribes gathered as well for an expedition to explore the time-space gap and figure out the World Tree's strange symptoms and perharps a cure method.";
- next;
- mes "The Laphine tribe was charged with the management of Yggdrasil, to establish their lands close to Asgard, and to protect the balance of Yggdrasil's magic power.";
- next;
- mes "The Laphine tribe has never contacted anyone outside of Asgard. But since they found that Yggdrasil's power if weakening...";
- next;
- mes "They have declared they will attend to the high courts for the first time in 1000 human years, since the end of the battles of Gods vs. Magicians.";
- close;
- }
- }
- else {
- mes "[Assistant Naomi]";
- mes "The doctor never ever tries to come back, and there're too many things to do... How can I do it all...";
- next;
- mes "[Assistant Naomi]";
- mes "Don't you see that I'm too busy? Don't dawdle, just go!";
- close;
- }
-}
-
-splendide,198,178,3 script Grumbling Soldier#edq 447,3,3,{
- if (isequipped(2782) == 1) {
- mes "[Grumbling Soldier]";
- mes "Nowadays, the world has turned unstable. I can't even fly comfortably anymore.";
- next;
- if (ins_nyd == 5) {
- switch(select("What's with the cave up north?:Who are the Sapha tribesmen?:Hmm. We can talk later.")) {
- case 1:
- mes "[Grumbling Soldier]";
- mes "What? If you wander around there... you might return with injuries.";
- next;
- mes "[Grumbling Soldier]";
- mes "I don't know exactly how to explain it, but it's like it has a bad mood. There are lots of terrible monsters there.";
- next;
- mes "[Grumbling Soldier]";
- mes "They whisper to each other, so... something is there... But I don't care...";
- next;
- mes "[Grumbling Soldier]";
- mes "Might be... those Sapha tribesmen have dug in the cave before... They do have a special talent for digging.";
- set ins_nyd,51;
- close;
- case 2:
- mes "[Grumbling Soldier]";
- mes "Oh! It is because of them that we have been living here, a lowdown and dirty city, for over one hundred years.";
- next;
- mes "[Grumbling Soldier]";
- mes "They don't care if there's trouble with the Yggdrasil.";
- next;
- mes "[Grumbling Soldier]";
- mes "They are surely full of bad ideas, so... they have destroyed the Yggdrasil's root.";
- next;
- mes "[Grumbling Soldier]";
- mes "We are here to make sure that the Sapha don't make things worse.";
- close;
- case 3:
- close;
- }
- }
- else {
- mes "[Grumbling Soldier]";
- mes "Nowadays, the world has turned unstable. I can't even fly comfortably anymore.";
- next;
- mes "[Grumbling Soldier]";
- mes "What can you expect when Manuk giants start to dig into the world to destroy the Yggdrasil...";
- next;
- mes "[Grumbling Soldier]";
- mes "And the worst thing is... that strange things are strutting along the streets of the towns...";
- next;
- mes "[Grumbling Soldier]";
- mes "Yes, you... What do you think about the way the government is handling this...?";
- next;
- mes "[Grumbling Soldier]";
- mes "Although they ignore your track record, still, one should be careful...";
- close;
- }
- }
- else {
- mes "[Grumbling Soldier]";
- mes "SeLarsmar Di marThusVil U SeMushVohl";
- close;
- }
-}
-
-splendide,240,164,3 script Sighing Soldier#edq 461,3,3,{
- if (isequipped(2782) == 1) {
- mes "[Sighing Soldier]";
- mes "When will we be finished with this combat with the Sapha? Ugghhhh...";
- next;
- if (ins_nyd == 5) {
- switch(select("What's with the cave up north?:Who are the Sapha tribesmen?:Hmm. We can talk later.")) {
- case 1:
- mes "[Sighing Soldier]";
- mes "Well... I'm not sure, but we have avoided going to that area.";
- next;
- mes "[Sighing Soldier]";
- mes "Sometimes, the dispatched researchers hang around here... I feel bad that there's nothing to see... without any reason...";
- next;
- mes "[Sighing Soldier]";
- mes "But the command officers make sure that there's something hidden in there.";
- next;
- mes "[Sighing Soldier]";
- mes "We don't know if the monsters there are strong, so we never checked it out. But on a personal level, nobody wants to go there...";
- set ins_nyd,51;
- close;
- case 2:
- mes "[Sighing Soldier]";
- mes "I don't know what others think about it... but we've had some trouble with our attitude against the Sapha tribes.";
- next;
- mes "[Sighing Soldier]";
- mes "We didn't try to solve the problems with talk. We attacked them first.";
- next;
- mes "[Sighing Soldier]";
- mes "Maybe... our command officers don't want to accept other species different than us...";
- next;
- mes "[Sighing Soldier]";
- mes "Don't misunderstand... Recently, we have talked about your particular species and our commanders feel grateful to you.";
- next;
- mes "[Sighing Soldier]";
- mes "Anyway... I'm just exhausted during this useless and nerve-wracking situation... Sigh.";
- close;
- case 3:
- close;
- }
- }
- else {
- mes "[Sighing Soldier]";
- mes "When will we be finished with this combat with the Sapha? Ugghhhh...";
- next;
- mes "[Sighing Soldier]";
- mes "Frankly, I don't think of you or any Sapha is our enemy. Sigh...";
- next;
- mes "[Sighing Soldier]";
- mes "Is there no way to resolve this by communicating? There's no meaning in useless combat! Geez.";
- close;
- }
- }
- else {
- mes "[Grumbling Soldier]";
- mes "VohlLarsmar Ha DielCyatas";
- close;
- }
-}
-
-spl_in01,109,60,3 script Commander Lebiordirr#edq 435,3,3,{
- if (isequipped(2782) == 1) {
- if (ins_nyd == 51) {
- mes "[Commander Lebiordirr]";
- mes "Are you...? Are you the one collecting information from my soldiers...?";
- next;
- mes "[Commander Lebiordirr]";
- mes "You should be cautious. Our tribe has respected the existence of you humans but...";
- next;
- mes "[Commander Lebiordirr]";
- mes "I've taken a great risk in allowing you in here. So be wary.";
- next;
- mes "[Commander Lebiordirr]";
- mes "Don't attract too much attention because that would make your people look bad.";
- next;
- mes "[Commander Lebiordirr]";
- mes "Now, we don't need to talk much about this, so just go back where you came from.";
- next;
- mes "[Commander Lebiordirr]";
- mes "Unless you have any messages for me...? Your face says you do...";
- next;
- switch(select("No. Nothing. We can talk later.:I intend to stay. For good reasons.")) {
- case 1:
- close;
- case 2:
- mes "[Splendide Guard]";
- mes "Sir, I can drag this pest out right now.";
- next;
- mes "[Commander Lebiordirr]";
- mes "No. Let's hear an explanation. Good? Now, if you want...";
- next;
- mes "[Commander Lebiordirr]";
- mes "I have known that, recently, time has broken... so, you're here exploring for a solution, no?";
- next;
- mes "[Commander Lebiordirr]";
- mes "Our tribe has respected you, so just forget about the searching and exploring around here.";
- next;
- mes "[Commander Lebiordirr]";
- mes "I heard that you are to search for any treasure in the closed cave to the north.";
- next;
- mes "[Commander Lebiordirr]";
- mes "That place is banned by order of the Laphine tribe. So, people can't just go there without permission.";
- next;
- mes "[Commander Lebiordirr]";
- mes "If you can't follow this rule, I will stop associating with you and ban all of your people from here.";
- next;
- mes "[Commander Lebiordirr]";
- mes "We still have an unstable relationship with the Sapha, we usually don't worry about outsiders.";
- next;
- mes "[Commander Lebiordirr]";
- mes "Now, if you understand this, inform your friends.";
- set ins_nyd,61;
- close;
- }
- }
- else if (ins_nyd == 61) {
- mes "[Commander Lebiordirr]";
- mes "If you can't follow this rule, I will stop associating with you and ban all of your people from here.";
- next;
- mes "[Commander Lebiordirr]";
- mes "We still have an unstable relationship with the Sapha, we usually don't worry about outsiders.";
- next;
- mes "[Commander Lebiordirr]";
- mes "Now, if you understand this, inform your friends.";
- close;
- }
- else if (ins_nyd == 81) {
- mes "[Commander Lebiordirr]";
- mes "Why have you come back, outsider?";
- next;
- switch(select("To ask the Laphines about exploring...")) {
- case 1:
- mes "[Commander Lebiordirr]";
- mes "Exploring what? Choose your words wisely?";
- next;
- mes "[Commander Lebiordirr]";
- mes "Do we not understand each other? What do you want?";
- next;
- switch(select("I must explore the cave.")) {
- case 1:
- mes "[Commander Lebiordirr]";
- mes "That means... that you are ignoring my warning? Is this your decision or are you just following orders?";
- next;
- switch(select("I'm just following orders")) {
- case 1:
- mes "[Commander Lebiordirr]";
- mes "Are you trying to insult me on purpose, outsider?";
- next;
- mes "[Commander Lebiordirr]";
- mes "Why do you want to explore? It better be a very good reason.";
- next;
- switch(select("It's about Dr. Magnifier's report...")) {
- case 1:
- mes "[Commander Lebiordirr]";
- mes "So... What do I care about an outsider's report?";
- next;
- mes "[Commander Lebiordirr]";
- mes "To protect the Yggdrasil! That's the Laphine's fate. Can you say that about yourself?";
- next;
- mes "[Commander Lebiordirr]";
- mes "Do you have any proof of your birth with Odin and Yggdrasil's blessings?";
- next;
- mes "[Commander Lebiordirr]";
- mes "I shouldn't say anymore. Please don't take this as being rude but, please go now!";
- next;
- switch(select("Then I'll ask the Sapha for help.")) {
- case 1:
- mes "[Commander Lebiordirr]";
- mes "What are you talking about, outsider?";
- next;
- mes "[Splendide Guard]";
- mes "Sir, I can get rid of this rude outsider if you wish?";
- next;
- mes "[Commander Lebiordirr]";
- mes "No, wait... The Sapha tribesmen know the meaning of that place? Did you ask to associate with them?";
- next;
- mes "[Commander Lebiordirr]";
- mes "Ah... How tricky... Are you testing us?";
- next;
- mes "[Splendide Guard]";
- mes "Calm down, sir. I will throw this outsider into prison.";
- next;
- mes "[Commander Lebiordirr]";
- mes "No... No, wait. Ok, I will accept it. I can accept your admission into the Holy Sekos.";
- next;
- mes "[Commander Lebiordirr]";
- mes "Okay. If you are a servant of the Yggdrasil as you claim to be, I will allow you admission. But I am not responsible for your actions.";
- next;
- mes "[Commander Lebiordirr]";
- mes "And make sure that if you find anything out of the ordinary in there, that you share it with us!";
- next;
- switch(select("But of course!")) {
- case 1:
- mes "[Commander Lebiordirr]";
- mes "So... since I have agreed to allow your exploration... Arioss, help them, and take the results.";
- next;
- mes "[Aide Arioss]";
- mes "Sir... are you sure? This is an invasion of the Holy Sekos...";
- next;
- mes "[Commander Lebiordirr]";
- mes "Invasion is a harsh word. I am allowing them entrance. Better them than a dirty giant. It might just save our lives...";
- next;
- mes "[Commander Lebiordirr]";
- mes "Here, outsider. Arioss will explain the situation with the giants. Talk with him...";
- set ins_nyd,91;
- close;
- }
- }
- }
- }
- }
- }
- }
- else if ((ins_nyd == 91) || (ins_nyd == 101) || (ins_nyd == 111) || (ins_nyd == 200) || (ins_nyd == 201) || (ins_nyd == 202)) {
- mes "[Commander Lebiordirr]";
- mes "Outsider. Arioss here will explain the situation with the giants, talk with him...";
- close;
- }
- else if ((ins_nyd == 72) || (ins_nyd == 82) || (ins_nyd == 92) || (ins_nyd == 102) || (ins_nyd == 112) || (ins_nyd == 122) || (ins_nyd == 132)) {
- mes "[Commander Lebiordirr]";
- mes "Welcome to the Laphine camp in Splendide, outsider... I am Lebiordirr. I am in charge here.";
- next;
- mes "[Commander Lebiordirr]";
- mes "Be cautious of your actions. We already have lots of problems with the Sapha tribe as it is.";
- next;
- mes "[Commander Lebiordirr]";
- mes "If you are cautious with your actions, I won't place any harm on you. Fare well.";
- close;
- }
- else if (ins_nyd == 203) {
- mes "[Commander Lebiordirr]";
- mes "I was waiting for you. You came back safe, that's good news. Did you find anything?";
- next;
- switch(select("Explain about the guardian Nidhoggur's leave.")) {
- case 1:
- mes "[Commander Lebiordirr]";
- mes "What? The Guardian is not in his nest...?";
- next;
- mes "[Commander Lebiordirr]";
- mes "And because of his disppearance, the Guardian's Shadow is currently destorying the roots of the World Tree...?";
- next;
- mes "[Commander Lebiordirr]";
- mes "That's unbelievable. You must be insulting the Guardian's and our pride. I did not provide you with our help for that.";
- next;
- mes "[Aide Arioss]";
- mes "It's not like that, Commander, they speak the truth.";
- next;
- mes "[Commander Lebiordirr]";
- mes "What are you saying? Arioss, do not forget your place as the Guardian's priest.";
- next;
- mes "[Aide Arioss]";
- mes "Even though I have not seen it with my own eyes, this does explain why we lost communication with the great World Tree Yggdrasil.";
- next;
- mes "[Commander Lebiordirr]";
- mes "Do not speak of His Highness, the World Tree Yggdrasil's name so lightly.";
- next;
- switch(select("Pass along World Tree Yggdrasil's words.")) {
- case 1:
- mes "[Commander Lebiordirr]";
- mes "His Highness, the World Tree Yggdrasil, said that?";
- next;
- mes "[Commander Lebiordirr]";
- mes "The reason behind all of this... is not because of the Sapha tribe, but because of the sudden leave of the Guardian? And the Guaridan has given up on his identity?";
- next;
- mes "[Commander Lebiordirr]";
- mes "This must be reported... reported to the High Priest of Alfheim... Unbelievable.";
- next;
- mes "[Aide Arioss]";
- mes "Commander... do we need to alert the rest of the tribe...?";
- next;
- mes "[Commander Lebiordirr]";
- mes "You don't need to worry about this, Arioss. As commander, I will handle it. You just pretend nothing happened...";
- next;
- mes "[Commander Lebiordirr]";
- mes "Strange one, thank you for your cooperation in such situations... Please forget what has happened today...";
- next;
- mes "[Commander Lebiordirr]";
- mes "Arioss, please compensate this strange one for the help. I need to go rest...";
- next;
- mes "[Aide Arioss]";
- mes "Commander...";
- set ins_nyd,121;
- close;
- }
- }
- }
- else if ((ins_nyd == 121) || (ins_nyd == 131)) {
- mes "[Commander Lebiordirr]";
- mes "Strange one, thank you for your cooperation in such situations... Please forget what has happened today...";
- close;
- }
- else {
- mes "[Commander Lebiordirr]";
- mes "Welcome to the Laphine camp in Splendide, outsider... I am Lebiordirr. I am in charge here.";
- next;
- mes "[Commander Lebiordirr]";
- mes "Be cautious of your actions. We already have lots of problems with the Sapha tribe as it is.";
- next;
- mes "[Commander Lebiordirr]";
- mes "If you are cautious with your actions, I won't place any harm on you. Fare well.";
- close;
- }
- }
- else {
- mes "[Commander Lebiordirr]";
- mes "ThusDurnah Ra SharVeldIyaz U UorAmanDur Yee neaOsaAdor Yee...";
- close;
- }
-}
-
-spl_in01,104,56,3 script Aide Arioss#edq 437,3,3,{
- if (isequipped(2782) == 1) {
- if (ins_nyd == 91) {
- mes "[Aide Arioss]";
- mes "Sigh, since it's Commander Lebiordirr's wish, I will cooperate with you...";
- next;
- mes "[Aide Arioss]";
- mes "You want to go there to find out exactly what that place is?";
- next;
- mes "[Aide Arioss]";
- mes "Alright...it's as you have assumed, a place connecting to the World Tree. It's also the Guardian's Nest.";
- next;
- switch(select("Guardian's Nest?")) {
- case 1:
- mes "[Aide Arioss]";
- mes "Yes, that's the nest of Nidhoggur, the Guardian of the World Tree...";
- next;
- mes "[Aide Arioss]";
- mes "Only a marked guardian's servant from the Laphine tribe is allowed to enter.";
- next;
- mes "[Aide Arioss]";
- mes "That place was initially closed off from the public, but then the giants of the Sapha tribe turned things around...";
- next;
- mes "[Aide Arioss]";
- mes "To obtain more minerals, they started to dig with madness.";
- next;
- mes "[Aide Arioss]";
- mes "In the end, they have harmed a part of the World Tree's root that lies very close to their mine, and thus, the World Tree became very ill.";
- next;
- mes "[Aide Arioss]";
- mes "After we have arrived here knowing the facts, the World Tree was already in a very bad state due to the many factories built by the Sapha tribe.";
- next;
- mes "[Aide Arioss]";
- mes "Even though, for a long time, we have been attacking the Sapha tribe, trying to force them to leave, they are not so easily defeated, leading to this stalemate.";
- next;
- mes "[Aide Arioss]";
- mes "During this time, your people have travelled through the space-time gap to this land.";
- next;
- mes "[Aide Arioss]";
- mes "Because of those many unexpected reasons, the Guardian's nest, which was meant to stay hidden deep underground, has been discovered by your race...";
- next;
- mes "[Aide Arioss]";
- mes "Now you understand how serious this situation is. Because of the Sapha tribe, we are no longer able to approach the Guardian, and seek his teachings of wisdom.";
- next;
- mes "[Aide Arioss]";
- mes "It's very insulting to our pride... but if you can help us enter that place again, and speak to the Guardian, maybe we can find a solution...";
- next;
- mes "[Aide Arioss]";
- mes "Then we'll leave it to you. As for your request, I will do my best to cooperate.";
- next;
- mes "[Aide Arioss]";
- mes "I have already told you what you wanted to know... If you need anything else, just let me know.";
- set ins_nyd,101;
- close;
- }
- }
- else if (ins_nyd == 101) {
- mes "[Aide Arioss]";
- mes "Ah, you said that there is a strange power blocking the entrance to the Guardian's nest, right?";
- next;
- mes "[Aide Arioss]";
- mes "That's because only the ones chosen by the Guardian may enter.";
- next;
- mes "[Aide Arioss]";
- mes "We have been the Guardian's servants for generations, and have been protecting the World Tree ever since.";
- next;
- mes "[Aide Arioss]";
- mes "Before we were captured and brought here, there were 3 servants including me. Our task was to heal the World Tree.";
- next;
- mes "[Aide Arioss]";
- mes "One was killed in our last war with the Sapha tribe... and the other has been taken captive.";
- next;
- mes "[Aide Arioss]";
- mes "I will give you my proof. Don't worry, I'm just temporarily marking you as a guardian's servant.";
- specialeffect2 EF_HOLYHIT;
- next;
- mes "[Aide Arioss]";
- mes "Also, remember this spell, it's needed to open the gate of the Guardian.";
- next;
- mes "[Aide Arioss]";
- mes "AnomarDu Ha OdesUdenVer Ie ";
- next;
- mes "[Aide Arioss]";
- mes "remuAlaAsh Mu ModtasAn Yu Dur";
- next;
- mes "[Aide Arioss]";
- mes "TalsehrDur So CyaReMush Di DielAlaWos Ie RuffserIman Ie ";
- next;
- mes "[Aide Arioss]";
- mes "Go find the fairy guarding the gate, and say this spell.";
- next;
- mes "[Aide Arioss]";
- mes "The proof and the spell will confirm that you are one of the Guardian's servants.";
- next;
- mes "[Aide Arioss]";
- mes "Please meet the Guardian, and come back with an answer to everything. I believe in you.";
- set ins_nyd,111;
- close;
- }
- else if ((ins_nyd == 101) || (ins_nyd == 111) || (ins_nyd == 200) || (ins_nyd == 201) || (ins_nyd == 202)) {
- mes "[Aide Arioss]";
- mes "Please meet with the Guardian and take a wise answer from him. I will trust you.";
- close;
- }
- else if ((ins_nyd == 72) || (ins_nyd == 82) || (ins_nyd == 92) || (ins_nyd == 102) || (ins_nyd == 112)) {
- mes "[Aide Arioss]";
- mes "... ...";
- next;
- mes "Not even caring about this a single bit? What a stupid woman...";
- close;
- }
- else if (ins_nyd == 121) {
- mes "[Aide Arioss]";
- mes "Things have actually become like this... as priests of the Guardian, it's our responsibility...";
- next;
- mes "[Aide Arioss]";
- mes "I represent the entire Laphine tribe, and show you our gratitude. This must all be very hard for our commander...";
- next;
- mes "[Aide Arioss]";
- mes "It can't compare with the effort you have put in for us... but please accept our token of friendship.";
- getexp 1500000,350000;
- getitem 6081,10; //Splendide_Coin
- set ins_nyd,131;
- mes "[Aide Arioss]";
- mes "If we can help you with anything in the future, we will do all we can to assist you. Once again, thank you.";
- close;
- }
- else if (ins_nyd == 131) {
- mes "[Aide Arioss]";
- mes "If we can help you with anything in the future, we will do all we can to assist you. Once again, thank you.";
- close;
- }
- else {
- mes "[Aide Arioss]";
- mes "... ...";
- next;
- mes "Never give attention to... um... a blunt woman...";
- close;
- }
- }
- else {
- mes "[Aide Arioss]";
- mes "AmanVilShar Ie DorLuShar Mu Re";
- close;
- }
-}
-
-spl_in01,110,21,0 script trap#s_edq -1,10,10,{
-OnTouch_:
- if ((isequipped(2782) == 1) && (ins_nyd == 51)) {
- mes "[Splendide Guard]";
- mes "That man is currently under arrest.";
- next;
- mes "[Splendide Guard]";
- mes "You'd better behave, Aide Arioss says that different races shall be treated the same way.";
- warp "spl_in01",109,58;
- close;
- }
- end;
-}
-
-spl_in01,101,52,5 script Splendide Guard#1_edq 447,1,1,{
- if (isequipped(2782) == 1) {
- mes "[Splendide Guard]";
- mes "This is the Splendide office. Don't act impolitely.";
- close;
- }
- else {
- mes "[Splendide Guard]";
- mes "ThusDurnah Ra SharVeldIyaz U UorAmanDur Yee neaOsaAdor Yee ";
- close;
- }
-}
-
-spl_in01,118,52,3 script Splendide Guard#2_edq 447,1,1,{
- if (isequipped(2782) == 1) {
- mes "[Splendide Guard]";
- mes "This is the Splendide office. Don't act impolitely.";
- close;
- }
- else {
- mes "[Splendide Guard]";
- mes "ThusDurnah Ra SharVeldIyaz U UorAmanDur Yee neaOsaAdor Yee ";
- close;
- }
-}
-
-man_in01,311,57,3 script Neat Etorr#edq 453,3,3,{
- if (isequipped(2782) == 1) {
- if (ins_nyd == 52) {
- mes "[Neat Etorr]";
- mes "Guest from the other world, please excuse our rudeness...";
- next;
- mes "[Neat Etorr]";
- mes "As the leader of the Sapha tribe, I have something very important to tell you. That is why I asked for you...";
- next;
- mes "[Neat Etorr]";
- mes "Your race has come to this land not long ago through the space-time gap.";
- next;
- mes "[Neat Etorr]";
- mes "You should have already seen what is going on. We have been at war with the Laphine tribe for a very long time.";
- next;
- mes "[Neat Etorr]";
- mes "Recently, because you do not understand the current situations, you have done some things that I, as a leader, can't ignore any longer.";
- next;
- mes "[Neat Etorr]";
- mes "I hope that your people will becareful of your actions on this land, and terminate any unnecessary interventions.";
- next;
- switch(select("Leave quietly.:Don't know what he's talking about, and ask for details.")) {
- case 1:
- close;
- case 2:
- mes "[Manuk Field Elite Soldier]";
- mes "Are we really just letting these people go after they have stirred up problems on our land?";
- next;
- mes "[Neat Etorr]";
- mes "After what happened, I don't think they know what else they can do. Let me explain.";
- next;
- mes "[Neat Etorr]";
- mes "For now, we have acknowledged your race, and have been tolerant towards your activities.";
- next;
- mes "[Neat Etorr]";
- mes "But we have recently started to suspect you of being the Laphine tribe's eyes and ears.";
- next;
- mes "[Neat Etorr]";
- mes "Not long ago, We have heard that you have found remains in an abandoned cave in the north, and have been conducting investigations and researches regarding it.";
- next;
- mes "[Neat Etorr]";
- mes "We have captured a Laphine tribe priest during the last war, and we have heard that you have had contact with said captive.";
- next;
- mes "[Neat Etorr]";
- mes "That captive is the only reference for our tribe, so we have taken good care of her. She is related to your current investigation.";
- next;
- mes "[Neat Etorr]";
- mes "For your people, who have no direct connections, it is not a place satisfy your curiosity. I hope that you stop your investigations, and mind your own business.";
- next;
- mes "[Neat Etorr]";
- mes "If you don't accept our request, then do not expect any cooperations between our races in the future.";
- next;
- mes "[Neat Etorr]";
- mes "Because of the war against the Laphine tribe, everything is a mess. But even then, we cannot allow a foreign race to interfere.";
- next;
- mes "[Neat Etorr]";
- mes "You have heard it all, now please report back to your race.";
- set ins_nyd,62;
- close;
- }
- }
- else if (ins_nyd == 62) {
- mes "[Neat Etorr]";
- mes "That captive is the only reference for our tribe, so we have taken good care of her. She is related to your current investigation.";
- next;
- mes "[Neat Etorr]";
- mes "For your people, who have no direct connections, it is not a place to satisfy your curiosity. I hope that you stop your investigations, and mind your own business.";
- next;
- mes "[Neat Etorr]";
- mes "If you don't accept our request, then do not expect any cooperations between our races in the future.";
- close;
- }
- else if (ins_nyd == 72) {
- mes "[Neat Etorr]";
- mes "Recently, because you do not understand the current situations, you have done some things that I, as a leader, can't ignore any longer.";
- next;
- mes "[Neat Etorr]";
- mes "I hope that your people will becareful of your actions on this land, and terminate any unnecessary interventions.";
- close;
- }
- else if (ins_nyd == 82) {
- mes "[Neat Etorr]";
- mes "Do you need me for something, strange one?";
- next;
- switch(select("Received invitation from the Sapha tribe to cooperate and investigate.")) {
- case 1:
- mes "[Neat Etorr]";
- mes "Cooperate and investigate? What do you mean?";
- next;
- mes "[Neat Etorr]";
- mes "It seems like you did not understand what I said. What are you thinking?";
- next;
- switch(select("Please allow me to investigate the cave.")) {
- case 1:
- mes "[Neat Etorr]";
- mes "From what I can tell, you are disrespecting my request. Is this your intention, or your people's intention?";
- next;
- switch(select("It's our intention.")) {
- case 1:
- mes "[Neat Etorr]";
- mes "Ah, it is not an easy decision. You frighten me.";
- next;
- mes "[Neat Etorr]";
- mes "But may I ask why you want to do this?";
- next;
- switch(select("Explain Professor Magnifier's theory.")) {
- case 1:
- mes "[Neat Etorr]";
- mes "It's surprising that you are able to obtain such results. We also have a similar theory.";
- next;
- mes "[Neat Etorr]";
- mes "At least we also think that we must use the Laphine prisoner to get information.";
- next;
- mes "[Neat Etorr]";
- mes "This problem has been the root of our conflicts with the Laphine tribe. Of course, it may also be an opportunity to resolve them.";
- next;
- mes "[Neat Etorr]";
- mes "Therefore, it's more of a reason to depend on our own powers. There is no room for you to interfere. Please give up.";
- next;
- switch(select("Give up request, and ask Laphine tribe for help instead.")) {
- case 1:
- mes "[Manuk Field Elite Soldier]";
- mes "You finally showed your true face. I knew you were a spy from the Laphine tribe!";
- next;
- mes "[Neat Etorr]";
- mes "Ah...you'd go as far as saying that. What good will it do for you, helping the Laphine tribe?";
- next;
- mes "[Neat Etorr]";
- mes "Those obnoxious dwarves offended our right of living, and are trying to get rid of us.";
- next;
- mes "[Neat Etorr]";
- mes "The reason we don't allow anyone to enter that site is because it's full of suspicions.";
- next;
- mes "[Neat Etorr]";
- mes "Alright, I'll approve of your request, and let you investigate the secret the Laphine tribe has hidden inside the cave.";
- next;
- mes "[Neat Etorr]";
- mes "If you promise to share all of your research results and findings, we will accept your request.";
- next;
- switch(select("Of course.")) {
- case 1:
- mes "[Neat Etorr]";
- mes "Alright, from now on, we will cooperate with you, and allow you to directly communicate with the Laphine prisoner.";
- next;
- mes "[Manuk Field Elite Soldier]";
- mes "Commander...are you sure of this? We don't even know if they're friend or foe...";
- next;
- mes "[Neat Etorr]";
- mes "With just our powers, it's impossible to figure out what the Laphine is up to. I think the past has proven that.";
- next;
- mes "[Neat Etorr]";
- mes "What they're doing right now could potentially lead us to a solution.";
- next;
- mes "[Neat Etorr]";
- mes "Strange one, we hope our cooperation will be a good one. Now please go interrogate the Laphine prisoner.";
- set ins_nyd,92;
- close;
- }
- }
- }
- }
- }
- }
- }
- else if ((ins_nyd == 92) || (ins_nyd == 102) || (ins_nyd == 112) || (ins_nyd == 200) || (ins_nyd == 201) || (ins_nyd == 202)) {
- mes "[Neat Etorr]";
- mes "Strange one, we hope our cooperation will be a good one. Now please go interrogate the Laphine prisoner.";
- close;
- }
- else if ((ins_nyd == 71) || (ins_nyd == 81) || (ins_nyd == 91) || (ins_nyd == 101) || (ins_nyd == 111) || (ins_nyd == 121) || (ins_nyd == 131)) {
- mes "[Neat Etorr]";
- mes "Outsider. Welcome to Manuk, the village of the Sapha. I am its representative, Neat Etorr.";
- next;
- mes "[Neat Etorr]";
- mes "We are just a small village, nothing special... but rest comfortably.";
- close;
- }
- else if (ins_nyd == 203) {
- mes "[Neat Etorr]";
- mes "I was waiting for you. It's good that you're safe. Did you find anything?";
- next;
- switch(select("Explain the sudden leave of the Guardian.")) {
- case 1:
- mes "[Neat Etorr]";
- mes "So... that's the nest of the Guardian of the World Tree, the sacred grounds for the Laphine tribe.";
- next;
- mes "[Neat Etorr]";
- mes "But because of the angry leave of the Guardian, his shadow is wreaking havoc on the World Tree?";
- next;
- mes "[Neat Etorr]";
- mes "If what you're saying is true, then there is no more reason for us to continue fighting the Laphine tribe...";
- next;
- mes "[Neat Etorr]";
- mes "What a huge discovery... So Nidhoggur is no longer the Guardian of the World Tree...?";
- next;
- mes "[Neat Etorr]";
- mes "Nidhoggur's Shadow came to exist in this world, and harmed the roots of the World Tree... what a disaster.";
- next;
- switch(select("Pass along the World Tree Yggdrasil's message.")) {
- case 1:
- mes "[Neat Etorr]";
- mes "Is that what the priest of the Guardian said?";
- next;
- mes "[Neat Etorr]";
- mes "From now on, we need to talk about this with the Laphine tribe.";
- next;
- mes "[Neat Etorr]";
- mes "But of course...we don't know if they're reasonable enough...hehe.";
- next;
- mes "[Neat Etorr]";
- mes "This is all we needed from you...What is left is business between us and the Laphine tribe.";
- next;
- mes "[Neat Etorr]";
- mes "Thank you for helping us with such a huge problem. You may forget about it now.";
- next;
- mes "[Neat Etorr]";
- mes "It's not a lot, but please this as a token of our appreciation.";
- getexp 1500000,350000;
- getitem 6080,10; //Manuk_Coin
- set ins_nyd,132;
- close;
- }
- }
- }
- else if (ins_nyd == 132) {
- mes "[Neat Etorr]";
- mes "Strange one, thank you for helping us in the time of need. I will never forget your kindness.";
- close;
- }
- else {
- mes "[Neat Etorr]";
- mes "Outsider. Welcome to the Manuk village of Sapha. I am its representative, Neat Etorr.";
- next;
- mes "[Neat Etorr]";
- mes "We are just a small village, nothing special... but rest comfortably.";
- close;
- }
- }
- else {
- mes "[Neat Etorr]";
- mes "Tkeh likek Ohek QekhlHkl PkedlioH.";
- close;
- }
-}
-
-man_in01,286,61,5 script Manuk Guard#1_edq 450,1,1,{
- if (isequipped(2782) == 1) {
- mes "[Manuk Guard]";
- mes "I'm guarding this Laphine prisoner. Leave me alone.";
- close;
- }
- else {
- mes "[Manuk Guard]";
- mes "Klekod Oi Thekd Pheid Okei.";
- close;
- }
-}
-
-man_in01,295,61,3 script Manuk Guard#2_edq 450,1,1,{
- if (isequipped(2782) == 1) {
- mes "[Manuk Guard]";
- mes "I'm guarding this Laphine prisoner. Leave me alone.";
- close;
- }
- else {
- mes "[Manuk Guard]";
- mes "Liek QUekdk Ohei Vue.";
- close;
- }
-}
-
-man_in01,291,62,3 script Laphine Prisoner#edq 437,3,3,{
- if (isequipped(2782) == 1) {
- if (ins_nyd == 5) {
- mes "[Laphine Prisoner]";
- mes "You... are not of the Sapha tribe... Are you... an outsider?";
- next;
- mes "[Laphine Prisoner]";
- mes "Have you ever come in contact with the Laphine tribe? Have you ever been to Splendide?";
- next;
- mes "[Laphine Prisoner]";
- mes "Please, talk to my people in Splendide. They will come to help me.";
- next;
- switch(select("What happened to you?:What's in the cave to the north?:Tell me about your tribe.:I will leave you alone.")) {
- case 1:
- mes "[Laphine Prisoner]";
- mes "During out last battle with the Sapha tribe... they caught me and took me prisoner.";
- next;
- mes "[Laphine Prisoner]";
- mes "The Sapha tribe attacked first. They are destroying the World Tree.";
- next;
- mes "[Laphine Prisoner]";
- mes "That's why the war started. But I don't want to fight with the Sapha tribe anymore...";
- next;
- mes "[Laphine Prisoner]";
- mes "If it wasn't for that... I wouldn't survive here...";
- next;
- mes "[Laphine Prisoner]";
- mes "Please. Bring this news to all of Splendide. Send someone to save me... or they might kill me.";
- close;
- case 2:
- mes "[Laphine Prisoner]";
- mes "There is...";
- next;
- mes "[Laphine Prisoner]";
- mes "No... I can't tell you... It's the secret of our tribe...";
- next;
- mes "[Laphine Prisoner]";
- mes "I just want to say this...if the Sapha tribe intrude that place, we will never forgive them!";
- set ins_nyd,52;
- close;
- case 3:
- mes "[Laphine Prisoner]";
- mes "The Laphines have protected the Yggdrasil World Tree for generations.";
- next;
- mes "[Laphine Prisoner]";
- mes "We live in a... different time, different land... we came for an expedition.";
- next;
- mes "[Laphine Prisoner]";
- mes "After we received reports from our spy about the World Tree's strange symptoms, we recgnized the Manuk's existence.";
- next;
- mes "[Laphine Prisoner]";
- mes "They are mining metal, and in so doing, destroying the World Tree's roots...";
- next;
- mes "[Laphine Prisoner]";
- mes "So we dispatched an expedition here. Soonafter, the war with the Sapha began...";
- close;
- case 4:
- close;
- }
- }
- else if (ins_nyd == 92) {
- mes "[Laphine Prisoner]";
- mes "The sapha tribe went as far as cooperating with an unknown race?";
- next;
- mes "[Laphine Prisoner]";
- mes "What is your purpose? Why do you want to know what that place is?";
- next;
- mes "[Laphine Prisoner]";
- mes "lright...it's as you have assumed, a place connecting to the World Tree. It's also the Guardian's Nest.";
- next;
- switch(select("Guardian's Nest?")) {
- case 1:
- mes "[Laphine Prisoner]";
- mes "Yes, that's the nest of Nidhoggur, the Guardian of the World Tree...";
- next;
- mes "[Laphine Prisoner]";
- mes "Only a marked guardian's servant from the Laphine tribe is allowed to enter.";
- next;
- mes "[Laphine Prisoner]";
- mes "That place was initially closed off from the public, but then the giants of the Sapha tribe turned things around...";
- next;
- mes "[Laphine Prisoner]";
- mes "To obtain more minerals, they started to dig with madness.";
- next;
- mes "[Laphine Prisoner]";
- mes "In the end, they have harmed a part of the World Tree's root that lies very close to their mine, and thus, the World Tree became very ill.";
- next;
- mes "[Laphine Prisoner]";
- mes "After we have arrived here knowing the facts, the World Tree was already in a very bad state due to the many factories built by the Sapha tribe.";
- next;
- mes "[Laphine Prisoner]";
- mes "Even though, for a long time, we have been attacking the Sapha tribe, trying to force them to leave, they are not so easily defeated, leading to this stalemate.";
- next;
- mes "[Laphine Prisoner]";
- mes "During this time, your people have travelled through the space-time gap to this land.";
- next;
- mes "[Laphine Prisoner]";
- mes "Because of those many unexpected reasons, the Guardian's nest, which was meant to stay hidden deep underground, has been discovered by your race...";
- next;
- mes "[Laphine Prisoner]";
- mes "Now you understand how serious this situation is. Because of the Sapha tribe, we are no longer able to approach the Guardian, and seek his teachings of wisdom.";
- next;
- mes "[Laphine Prisoner]";
- mes "Hmph...even if I don't cooperate, I know you will find other means to get in...";
- next;
- mes "[Laphine Prisoner]";
- mes "Looking at the current situation of the Laphine tribe, we do not have enough power to surround the Manuk fields, and chase the giants away.";
- next;
- mes "[Laphine Prisoner]";
- mes "Okay, if it has already become like this, I will help you. There are no dead-ends. If you keep going, you will find a solution.";
- next;
- mes "[Laphine Prisoner]";
- mes "Even if I don't say anything, my situation will not change.";
- next;
- mes "[Laphine Prisoner]";
- mes "I have already told you everything you wanted to hear. If you have any other requests, please let me know.";
- set ins_nyd,102;
- close;
- }
- }
- else if (ins_nyd == 102) {
- mes "[Laphine Prisoner]";
- mes "Ah, you said that there is a strange power blocking the entrance to the Guardian's nest, right?";
- next;
- mes "[Laphine Prisoner]";
- mes "That's because only the ones chosen by the Guardian may enter.";
- next;
- mes "[Laphine Prisoner]";
- mes "We have been the Guardian's servants for generations, and have been protecting the World Tree ever since.";
- next;
- mes "[Laphine Prisoner]";
- mes "Before we were captured and brought here, there were 3 servants including me. Our task was to heal the World Tree.";
- next;
- mes "[Laphine Prisoner]";
- mes "One was killed in our last war with the Sapha tribe...and I have been taken captive.";
- next;
- mes "[Laphine Prisoner]";
- mes "I will give you my proof. Don't worry, I'm just temporarily marking you as a guardian's servant.";
- specialeffect2 EF_HOLYHIT;
- next;
- mes "[Laphine Prisoner]";
- mes "Also, remember this spell, it's needed to open the gate of the Guardian.";
- next;
- mes "[Laphine Prisoner]";
- mes "AnomarDu Ha OdesUdenVer Ie ";
- next;
- mes "[Laphine Prisoner]";
- mes "remuAlaAsh Mu ModtasAn Yu Dur";
- next;
- mes "[Laphine Prisoner]";
- mes "TalsehrDur So CyaReMush Di DielAlaWos Ie RuffserIman Ie ";
- next;
- mes "[Laphine Prisoner]";
- mes "Go find the fairy guarding the gate, and say this spell.";
- next;
- mes "[Laphine Prisoner]";
- mes "he proof and the spell will confirm that you are one of the Guardian's servants.";
- next;
- mes "[Laphine Prisoner]";
- mes "Please meet the Guardian, and come back with an answer to everything. And tell the answer to...";
- set ins_nyd,112;
- close;
- }
- else if ((ins_nyd == 71) || (ins_nyd == 81) || (ins_nyd == 91) || (ins_nyd == 101) || (ins_nyd == 111) || (ins_nyd == 121) || (ins_nyd == 131)) {
- mes "[Laphine Prisoner]";
- mes "... ...";
- next;
- mes "[Manuk Guard]";
- mes "Hey, outsider! Step away from the prisoner!";
- close;
- }
- else if (ins_nyd == 112) {
- mes "[Laphine Prisoner]";
- mes "Please meet the Guardian, and come back with an answer to everything. And tell the answer to...";
- close;
- }
- else if (ins_nyd == 132) {
- mes "[Laphine Prisoner]";
- mes "Yes...I heard your conversation with the Sapha tribe...";
- next;
- mes "[Laphine Prisoner]";
- mes "If our tribe were to really trust in the Sapha tribe...I don't know.";
- next;
- mes "[Laphine Prisoner]";
- mes "Our hatred towards them has already reached an abnormal level...";
- next;
- mes "[Laphine Prisoner]";
- mes "Those giants...can they really be trusted?";
- next;
- mes "[Laphine Prisoner]";
- mes "It's...it's better if you don't believe the one called Etorr...the minds of the Sapha tribe is unpredictable.";
- close;
- }
- else {
- mes "[Laphine Prisoner]";
- mes "... ...";
- next;
- mes "[Manuk Guard]";
- mes "Hey, outsider! Step away from the prisoner!";
- close;
- }
- }
- else {
- mes "[Laphine Prisoner]";
- mes "AmanVilShar Ie DorLuShar Mu Re";
- close;
- }
-}
-
-man_in01,282,42,0 script trap#edq2 -1,10,10,{
-OnTouch_:
- if ((isequipped(2782) == 1) && (ins_nyd == 52)) {
- mes "[Manuk Field Elite Soldier]";
- mes "This is Neat Etorr's order. Please come with us to see him.";
- next;
- mes "[Manuk Field Elite Soldier]";
- mes "Bring him to Neat Etorr. All soldiers be prepared.";
- warp "man_in01",311,54;
- close;
- }
- end;
-}
-
-// First floor
-1@nyd,213,277,5 script Murdered Yggdrasilid#1F 437,5,5,{
- if ('ins_nyd2 == 0) {
- mes "When a faint light enters your heart, a voice sounds in your head.";
- next;
- mes "[World Tree World Tree Yggdrasil]";
- mes "It's all over... servants of the Guardian... Hurry up and leave this place.";
- next;
- while (1) {
- switch(select("Who are you?:What do you mean?")) {
- case 1:
- mes "[World Tree World Tree Yggdrasil]";
- mes "I... I am the World Tree Yggdrasil, servant of the Guardian of Nidhoggur, as well as the High Priest leading the Laphine Tribe.";
- next;
- mes "[World Tree World Tree Yggdrasil]";
- mes "So you're not priestess of the Laphine Tribe... How did you get in? No, there's no time to answer that.";
- next;
- mes "[World Tree World Tree Yggdrasil]";
- mes "Hurry... and leave... leave this place before it's too late.";
- next;
- break;
- case 2:
- mes "[World Tree World Tree Yggdrasil]";
- mes "The guardian... something's wrong with the guardian. I don't know what made him like this.";
- next;
- mes "[World Tree World Tree Yggdrasil]";
- mes "This... this is no longer the nest of the Guardian of the World Tree Yggdrasil.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "Darkness took over the Guardian and destroyed all living things... now this place has become the cursed home of monsters.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "Now the vile Nidhoggur's Shadow is wreaking havoc here...";
- next;
- mes "[World Tree Yggdrasil]";
- mes "Now's not too late, hurry and get out... tell the Laphine Tribe about this... tell the commanders of Alfheim...";
- next;
- mes "[World Tree Yggdrasil]";
- mes "My soul... it has been trapped here. You're the only ones I can trust now.";
- next;
- set .@exit,1;
- }
- if (.@exit) break;
- }
- switch(select("Nidhoggur's Shadow?")) {
- case 1:
- mes "[World Tree Yggdrasil]";
- mes "The Guardian Nidhoggur... he's not in the nest.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "He...for some reason abandoned his own shadow, and left.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "All that's left, is the ugly Shadow of the Guardian of Nidhoggur...the Shadow that is going mad.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "The Shadow sucked all the nutrients from the World Tree Yggdrasil, and has gone mad when there is nothing more left to obtain. Now, he wants this land.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "Once the ugly Shadow leaves here to steal power from the other World Yggdrasil Trees, there will be great destruction. This world will become hell.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "You must... tell the commanders of Alfheim about this, and come up with a plan. Only them...";
- next;
- switch(select("Is there nothing else we can do?")) {
- case 1:
- mes "[World Tree Yggdrasil]";
- mes "With our current powers...it is impossible to defeat the Guardian.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "But the one going mad is not the Guardian, but his dark Shadow...maybe we can trap him here...";
- next;
- mes "[World Tree Yggdrasil]";
- mes "Are you willing to accept this mission? Even if it means to pay with your life?";
- next;
- switch(select("Leave it to us.:We can't do it.")) {
- case 1:
- if (getpartyleader(getcharid(1),2) == getcharid(0)) {
- mes "[World Tree Yggdrasil]";
- mes "I thank you deeply for your decision. I will use what is left of my powers to open up the path towards the Guardian's Nest.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "The path to the Guardian's Nest is just past the waterfall by the large World Tree Yggdrasil to the North. The defensive mechanisms of the Sanctuary will start immediately.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "Defeat all of Nidhoggur's guardians and go through the waterfall into the nest... and stop Nidhoggur's Shadow there.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "The gate will open soon. Go defeat all of the guardians... you must kill them all in 30 minutes before the gate opens...";
- next;
- mes "[World Tree Yggdrasil]";
- mes "30 minutes... that's the limit of my powers. Please hurry.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "And... Be careful... Be careful of the shadow's power.";
- set 'ins_nyd2,1;
- donpcevent instance_npcname("ins_nyd_1f_timer", instance_id())+"::OnEnable";
- donpcevent instance_npcname("nyd_call_mon_1", instance_id())+"::OnEnable";
- close;
- }
- else {
- mes "[World Tree Yggdrasil]";
- mes "I thank you deeply for your decision. I will use what is left of my powers to open up the path towards the Guardian's Nest.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "The path to the Guardian's Nest is just past the waterfall by the large World Tree Yggdrasil to the North. The defensive mechanisms will start immediately.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "Defeat all of Nidhoggur's guardians and go through the waterfall into the nest... and stop Nidhoggur's Shadow there.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "The gate will open soon. Go defeat all of the guardians... you must kill them all in 30 minutes before the gate opens...";
- next;
- mes "[World Tree Yggdrasil]";
- mes "30 minutes... that's the limit of my powers. Please hurry.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "And... Be careful... Be careful of the shadow's power.";
- close;
- }
- case 2:
- close;
- }
- }
- }
- }
- else if ('ins_nyd2 == 1) {
- mes "[World Tree Yggdrasil]";
- mes "The path to the Guardian's Nest is just past the waterfall by the large World Tree Yggdrasil to the North. The defensive mechanisms will start immediately.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "Defeat all of Nidhoggur's guardians and go through the waterfall into the nest... and stop Nidhoggur's Shadow there.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "The gate will open soon. Go defeat all of the guardians.";
- close;
- }
- else if ('ins_nyd2 == 2) {
- mes "[World Tree Yggdrasil]";
- mes "The path to the Guardian's Nest is just past the waterfall by the large World Tree Yggdrasil to the North.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "Use your powers... and destroy the vile Shadow...";
- next;
- mes "[World Tree Yggdrasil]";
- mes "This is.. all I can do for you...";
- close;
-
- }
- else {
- mes "[World Tree Yggdrasil]";
- mes "Those who want to taint the sacred Sanctuary of the Guardian... Get out.";
- warp "mid_camp",100,100;
- }
- end;
-
-OnTouch:
- if ('ins_nyd2 == 0) {
- mes "What's a woman from the Laphine Tribe doing here...";
- next;
- mes "What's happening? Let's go check it out.";
- close;
- }
- end;
-}
-
-1@nyd,1,1,0 script nyd_call_mon_1 -1,{
-OnInstanceInit:
- enablenpc instance_npcname("nyd_call_mon_1", instance_id());
- end;
-
-OnEnable:
- monster "1@nyd",220,250,"Nidhoggur's Guardian#1",2020,1,instance_npcname("nyd_call_mon_1", instance_id())+"::OnMyMobDead";
- monster "1@nyd",220,252,"Nidhoggur's Guardian#2",2020,1,instance_npcname("nyd_call_mon_1", instance_id())+"::OnMyMobDead";
- monster "1@nyd",240,270,"Nidhoggur's Guardian#3",2020,1,instance_npcname("nyd_call_mon_1", instance_id())+"::OnMyMobDead";
- monster "1@nyd",240,272,"Nidhoggur's Guardian#4",2020,1,instance_npcname("nyd_call_mon_1", instance_id())+"::OnMyMobDead";
- monster "1@nyd",200,200,"Nidhoggur's Guardian#5",2020,1,instance_npcname("nyd_call_mon_1", instance_id())+"::OnMyMobDead";
- monster "1@nyd",210,210,"Nidhoggur's Guardian#6",2020,1,instance_npcname("nyd_call_mon_1", instance_id())+"::OnMyMobDead";
- monster "1@nyd",225,265,"Nidhoggur's Guardian#7",2021,1,instance_npcname("nyd_call_mon_1", instance_id())+"::OnMyMobDead";
- monster "1@nyd",225,270,"Nidhoggur's Guardian#8",2021,1,instance_npcname("nyd_call_mon_1", instance_id())+"::OnMyMobDead";
- monster "1@nyd",245,235,"Nidhoggur's Guardian#9",2021,1,instance_npcname("nyd_call_mon_1", instance_id())+"::OnMyMobDead";
- monster "1@nyd",255,255,"Nidhoggur's Guardian#10",2021,1,instance_npcname("nyd_call_mon_1", instance_id())+"::OnMyMobDead";
- monster "1@nyd",225,245,"Nidhoggur's Guardian#11",2021,1,instance_npcname("nyd_call_mon_1", instance_id())+"::OnMyMobDead";
- monster "1@nyd",230,280,"Nidhoggur's Guardian#12",2021,1,instance_npcname("nyd_call_mon_1", instance_id())+"::OnMyMobDead";
- instance_announce 0, "Nidhoggur's Guardian : Protect the Guardian's Sanctuary. Get rid of the intruders.",bc_map,"0x00ff99";
- end;
-
-OnDisable:
- killmonster "1@nyd",instance_npcname("nyd_call_mon_1", instance_id())+"::OnMyMobDead";
- disablenpc instance_npcname("nyd_call_mon_1", instance_id());
- end;
-
-OnMyMobDead:
- set .@mob_dead_num,mobcount("1@nyd", instance_npcname("nyd_call_mon_1", instance_id())+"::OnMyMobDead");
- if (.@mob_dead_num < 1) {
- instance_announce 0, "All of Nidhoggur's Guardians have been defeated!",bc_map,"0x00ff99";
- donpcevent instance_npcname("ins_nyd_1f_timer", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_to2f_warp", instance_id())+"::OnEnable";
- set 'ins_nyd2,2;
- }
- end;
-}
-
-1@nyd,1,2,0 script ins_nyd_1f_timer -1,{
-
-OnInstanceInit:
- disablenpc instance_npcname("ins_nyd_1f_timer", instance_id());
- end;
-
-OnEnable:
- enablenpc instance_npcname("ins_nyd_1f_timer", instance_id());
- initnpctimer;
- end;
-
-OnDisable:
- disablenpc instance_npcname("ins_nyd_1f_timer", instance_id());
- stopnpctimer;
- killmonsterall "1@nyd";
- end;
-
-OnTimer900000:
- instance_announce 0, "World Tree Yggdrasil : There's not much time left. Please hurry.",bc_map,"0xFFFF00";
- end;
-
-OnTimer1200000:
- instance_announce 0, "World Tree Yggdrasil : My powers are slowly disappearing. Please hurry.",bc_map,"0xFFFF00";
- end;
-
-OnTimer1500000:
- instance_announce 0, "World Tree Yggdrasil : I'm... almost at my limit... please hurry up." ,bc_map,"0xFFFF00";
- end;
-
-OnTimer1800000:
- instance_announce 0, "World Tree Yggdrasil : You've failed... but I will use what power I have left... to send you out of here.",bc_map,"0xFFFF00";
- end;
-
-OnTimer1830000:
- instance_announce 0, "Opening of the Gate has failed.",bc_map,"0xFFFF00";
- end;
-
-OnTimer1850000:
- donpcevent instance_npcname("ins_nyd_1f_timer", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_call_mon_1", instance_id())+"::OnDisable";
- instance_warpall "mid_camp",310,150;
- stopnpctimer;
- end;
-}
-
-1@nyd,195,320,0 script nyd_to2f_warp 45,5,5,{
-
-OnInstanceInit:
- disablenpc instance_npcname("nyd_to2f_warp", instance_id());
- end;
-
-OnEnable:
- enablenpc instance_npcname("nyd_to2f_warp", instance_id());
- end;
-
-OnDisable:
- disablenpc instance_npcname("nyd_to2f_warp", instance_id());
- end;
-
-OnTouch:
- warp "2@nyd",200,10;
- end;
-}
-
-1@nyd,1,1,0 script ins_nyd1_spawn_mobs -1,{
-OnInstanceInit:
- monster "1@nyd",0,0,"Ancient Tree",2019,20;
- monster "1@nyd",0,0,"Rhyncho",2020,15;
- monster "1@nyd",0,0,"Phylla",2021,15;
- monster "1@nyd",0,0,"Aqua Elemental",2016,15;
- monster "1@nyd",0,0,"Dark Pinguicula",2015,15;
- monster "1@nyd",0,0,"Ancient Tree",2019,20;
- monster "1@nyd",0,0,"Rhyncho",2020,15;
- monster "1@nyd",0,0,"Phylla",2021,15;
- monster "1@nyd",0,0,"Aqua Elemental",2016,15;
- monster "1@nyd",0,0,"Dark Pinguicula",2015,15;
- end;
-}
-
-// Second Floor
-2@nyd,200,14,0 script nyd_2f_enter -1,6,6,{
-OnTouch_:
- donpcevent instance_npcname("nyd_2f_enter_broad", instance_id())+"::OnEnable";
- disablenpc instance_npcname("nyd_2f_enter", instance_id());
- end;
-}
-
-2@nyd,1,1,0 script nyd_2f_enter_broad -1,{
-OnInstanceInit:
- disablenpc instance_npcname("nyd_2f_enter_broad", instance_id());
- end;
-
-OnEnable:
- enablenpc instance_npcname("nyd_2f_enter_broad", instance_id());
- initnpctimer;
- end;
-
-OnDisable:
- disablenpc instance_npcname("nyd_2f_enter_broad", instance_id());
- end;
-
-OnTimer12000:
- instance_announce 0, "Nidhoggur's Shadow : No more...I can't stand this anymore...",bc_map,"0xFFFF00";
- end;
-
-OnTimer15000:
- instance_announce 0, "Nidhoggur's Shadow : I need...I need the World Tree Yggdrasil's powers...",bc_map,"0xFFFF00";
- end;
-
-OnTimer18000:
- instance_announce 0, "Nidhoggur's Shadow : Destroy...everything...",bc_map,"0xFFFF00";
- end;
- /*
- stopnpctimer;
- disablenpc instance_npcname("nyd_2f_enter_broad", instance_id());
- end;
- */
-}
-
-2@nyd,199,178,0 script nyd_2f_ddr_control -1,6,6,{
-OnTouch:
- specialeffect2 EF_HOLYHIT;
- mes "From below the gorgeous stones, a strange breeze is forming.";
- next;
- mes "The strange power slowly surrounds your body, the dimension is starting to shift.";
- close2;
- warp "2@nyd",199,255;
- end;
-}
-
-2@nyd,199,268,0 script nyd_2f_boss_enter -1,8,8,{
-OnInstanceInit:
- enablenpc instance_npcname("nyd_2f_boss_enter", instance_id());
- end;
-
-OnTouch_:
- if (getpartyleader(getcharid(1),2) == getcharid(0)) {
- donpcevent instance_npcname("nyd_2f_boss_enter_call", instance_id())+"::OnEnable";
- disablenpc instance_npcname("nyd_2f_boss_enter", instance_id());
- end;
- }
- end;
-}
-
-2@nyd,2,2,0 script nyd_2f_boss_enter_call -1,{
-OnInstanceInit:
- disablenpc instance_npcname("nyd_2f_boss_enter_call", instance_id());
- end;
-
-OnEnable:
- enablenpc instance_npcname("nyd_2f_boss_enter_call", instance_id());
- monster "2@nyd",199,327,"Nidhoggur's Shadow#",2022,1,instance_npcname("nyd_2f_boss_enter_call", instance_id())+"::OnMyMobDead";
- instance_announce 0, "Nidhoggur's Shadow : I will devour all of you...you and the World Tree Yggdrasil.",bc_map,"0x00ff99";
- //donpcevent instance_npcname("nyd_2f_boss_enter_call", instance_id())+"::Ongo";
- initnpctimer;
- end;
-
-OnDisable:
- disablenpc instance_npcname("nyd_2f_boss_enter_call", instance_id());
- killmonster "2@nyd",instance_npcname("nyd_2f_boss_enter_call", instance_id())+"::OnMyMobDead";
- end;
-
-OnTimer180000:
- set .@rullet,rand(1,4);
- if (.@rullet == 1) {
- instance_announce 0, "Nidhoggur's Shadow : In this chaos... your blood is just what I need.",bc_map,"0xFFFF00";
- donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnEnable";
- instance_warpall "2@nyd",115,278;
- end;
- }
- else if (.@rullet == 2) {
- instance_announce 0, "Nidhoggur's Shadow : I will freeze every last drop of your blood.",bc_map,"0xFFFF00";
- donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnEnable";
- instance_warpall "2@nyd",115,373;
- end;
- }
- else if (.@rullet == 3) {
- instance_announce 0, "Nidhoggur's Shadow : Sleep for eternity in an empty illusion.",bc_map,"0xFFFF00";
- donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnEnable";
- instance_warpall "2@nyd",284,278;
- end;
- }
- else if (.@rullet == 4) {
- instance_announce 0, "Nidhoggur's Shadow : I'll let you enjoy the pain of dying slowly.",bc_map,"0xFFFF00";
- donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnEnable";
- instance_warpall "2@nyd",284,374;
- end;
- }
- stopnpctimer;
- end;
-
-OnMyMobDead:
- set .@mob_dead_num,mobcount("2@nyd",instance_npcname("nyd_2f_boss_enter_call", instance_id())+"::OnMyMobDead");
- if (.@mob_dead_num < 1) {
- instance_announce 0, "Nidhoggur's Shadow : World Tree Yggdrasil's guardian... his powers are disappearing...",bc_map,"0x00ff99";
- donpcevent instance_npcname("World Tree Yggdrasil#2F", instance_id())+"::OnEnable";
- donpcevent instance_npcname("nyd_2f_boss_enter_call", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_boss_enter_logic", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_red_c", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_white_c", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_yellow_c", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_green_c", instance_id())+"::OnDisable";
- end;
- }
- else {
- end;
- }
-}
-
-2@nyd,2,4,0 script nyd_2f_boss_enter_logic -1,{
-OnInstanceInit:
- disablenpc instance_npcname("nyd_2f_boss_enter_logic", instance_id());
- end;
-
-OnEnable:
- stopnpctimer;
- initnpctimer;
- end;
-
-OnDisable:
- stopnpctimer;
- disablenpc instance_npcname("nyd_2f_boss_enter_logic", instance_id());
- end;
-
-OnTimer180000:
- set .@rullet,rand(1,4);
- if (.@rullet == 1) {
- instance_announce 0, "Nidhoggur's Shadow : In this chaos... your blood is just what I need.",bc_map,"0xFFFF00";
- donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnEnable";
- instance_warpall "2@nyd",115,278;
- end;
- }
- else if (.@rullet == 2) {
- instance_announce 0, "Nidhoggur's Shadow : I will freeze every last drop of your blood.",bc_map,"0xFFFF00";
- donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnEnable";
- instance_warpall "2@nyd",115,373;
- end;
- }
- else if (.@rullet == 3) {
- instance_announce 0, "Nidhoggur's Shadow : Sleep for eternity in an empty illusion.",bc_map,"0xFFFF00";
- donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnEnable";
- instance_warpall "2@nyd",284,278;
- end;
- }
- else if (.@rullet == 4) {
- instance_announce 0, "Nidhoggur's Shadow : I'll let you enjoy the pain of dying slowly.",bc_map,"0xFFFF00";
- donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnEnable";
- instance_warpall "2@nyd",284,374;
- end;
- }
- stopnpctimer;
- end;
-}
-
-2@nyd,202,324,5 script World Tree Yggdrasil#2F 437,3,3,{
- mes "[World Tree Yggdrasil]";
- mes "Thank you. You're the saviour of humans and the Laphine Tribe.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "You've defeated Nidhoggur's Shadow. But...It's not gone for good. Its powers are merely put to sleep.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "But you have won us plenty of time. This is great.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "Please go and report this to those in charge of Splendide and Manuk.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "As you have seen, neither the Sapha tribe nor the Laphine tribe is at fault for the weakening of the World Tree. It's all because of the Guardian's Shadow...";
- next;
- mes "[World Tree Yggdrasil]";
- mes "The Guardian's insanity...is caused by powers unknown to us... You must tell this to everyone.";
- next;
- mes "[World Tree Yggdrasil]";
- mes "Now... Allow me to escort you out of the cursed nest.";
- next;
- switch(select("Please let me out.:I want to look around for a while.")) {
- case 1:
- set 'ins_nyd2,0;
- //setquest 3135;
- warp "nyd_dun02",98,196;
- end;
- case 2:
- mes "[World Tree Yggdrasil]";
- mes "Is that so... I'll be around if you want to leave.";
- close;
- }
-
-OnInstanceInit:
- disablenpc instance_npcname("World Tree Yggdrasil#2F", instance_id());
- end;
-
-OnEnable:
- enablenpc instance_npcname("World Tree Yggdrasil#2F", instance_id());
- instance_announce 0, "World Tree Yggdrasil : You did good. Have everyone go to the Magic Circle in the middle, and get ready for the destruction of the nest.",bc_map,"0x00ff99";
- end;
-
-OnDisable:
- disablenpc instance_npcname("World Tree Yggdrasil#2F", instance_id());
- end;
-}
-
-2@nyd,115,278,0 script nyd_2f_red -1,5,5,{
-OnInstanceInit:
- disablenpc instance_npcname("nyd_2f_red", instance_id());
- end;
-
-OnEnable:
- enablenpc instance_npcname("nyd_2f_red", instance_id());
- donpcevent instance_npcname("nyd_2f_red_warp1", instance_id())+"::OnEnable";
- donpcevent instance_npcname("nyd_2f_red_warp2", instance_id())+"::OnEnable";
- donpcevent instance_npcname("nyd_2f_red_warp3", instance_id())+"::OnEnable";
- donpcevent instance_npcname("nyd_2f_red_c", instance_id())+"::OnEnable";
- initnpctimer;
- end;
-
-OnDisable:
- donpcevent instance_npcname("nyd_2f_red_warp1", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_red_warp2", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_red_warp3", instance_id())+"::OnDisable";
- disablenpc instance_npcname("nyd_2f_red", instance_id());
- end;
-
-OnTouch:
- percentheal -50,0;
- percentheal -30,0;
- sc_start SC_BLEEDING,60000,0;
- end;
-
-OnTimer10000:
- disablenpc instance_npcname("nyd_2f_red", instance_id());
- stopnpctimer;
- end;
-}
-
-2@nyd,6,6,0 script nyd_2f_red_c -1,{
-OnInstanceInit:
- disablenpc instance_npcname("nyd_2f_red_c", instance_id());
- end;
-
-OnEnable:
- enablenpc instance_npcname("nyd_2f_red_c", instance_id());
- initnpctimer;
- monster "2@nyd",120,285,"Nidhoggur's Guardian#1",2020,1,instance_npcname("nyd_2f_red_c", instance_id())+"::OnMyMobDead";
- monster "2@nyd",119,286,"Nidhoggur's Guardian#2",2020,1,instance_npcname("nyd_2f_red_c", instance_id())+"::OnMyMobDead";
- monster "2@nyd",120,270,"Nidhoggur's Guardian#3",2020,1,instance_npcname("nyd_2f_red_c", instance_id())+"::OnMyMobDead";
- monster "2@nyd",119,269,"Nidhoggur's Guardian#4",2021,1,instance_npcname("nyd_2f_red_c", instance_id())+"::OnMyMobDead";
- monster "2@nyd",118,270,"Nidhoggur's Guardian#5",2021,1,instance_npcname("nyd_2f_red_c", instance_id())+"::OnMyMobDead";
- end;
-
-OnMyMobDead:
- set .@mob_dead_num,mobcount("2@nyd",instance_npcname("nyd_2f_red_c", instance_id())+"::OnMyMobDead");
- if (.@mob_dead_num < 1) {
- instance_announce 0, "Nidhoggur's Shadow : You're not bad... but I will be your opponent this time.",bc_map,"0x00ff99";
- donpcevent instance_npcname("nyd_2f_red_c", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_boss_enter_logic", instance_id())+"::OnEnable";
- end;
- }
- end;
-
-OnDisable:
- donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
- disablenpc instance_npcname("nyd_2f_red_c", instance_id());
- stopnpctimer;
- end;
-
-OnTimer180000:
- killmonster "2@nyd",instance_npcname("nyd_2f_red_c", instance_id())+"::OnMyMobDead";;
- stopnpctimer;
- set .@rullet,rand(1,4);
- if (.@rullet == 1) {
- instance_announce 0, "Nidhoggur's Shadow : In this chaos... your blood is just what I need.",bc_map,"0xFFFF00";
- donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnEnable";
- instance_warpall "2@nyd",115,278;
- end;
- }
- else if (.@rullet == 2) {
- instance_announce 0, "Nidhoggur's Shadow : I will freeze every last drop of your blood.",bc_map,"0xFFFF00";
- donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnEnable";
- instance_warpall "2@nyd",115,373;
- end;
- }
- else if (.@rullet == 3) {
- instance_announce 0, "Nidhoggur's Shadow : Sleep for eternity in an empty illusion.",bc_map,"0xFFFF00";
- donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnEnable";
- instance_warpall "2@nyd",284,278;
- end;
- }
- else if (.@rullet == 4) {
- instance_announce 0, "Nidhoggur's Shadow : I'll let you enjoy the pain of dying slowly.",bc_map,"0xFFFF00";
- donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnEnable";
- instance_warpall "2@nyd",284,374;
- end;
- }
- end;
-}
-
-2@nyd,130,298,0 script nyd_2f_red_warp1 -1,6,6,{
-OnInstanceInit:
- disablenpc instance_npcname("nyd_2f_red_warp1", instance_id());
- end;
-
-OnEnable:
- enablenpc instance_npcname("nyd_2f_red_warp1", instance_id());
- end;
-
-OnDisable:
- disablenpc instance_npcname("nyd_2f_red_warp1", instance_id());
- end;
-
-OnTouch:
- warp "2@nyd",115,278;
- end;
-}
-
-2@nyd,142,296,0 script nyd_2f_red_warp2 -1,6,6,{
-OnInstanceInit:
- disablenpc instance_npcname("nyd_2f_red_warp2", instance_id());
- end;
-
-OnEnable:
- enablenpc instance_npcname("nyd_2f_red_warp2", instance_id());
- end;
-
-OnDisable:
- disablenpc instance_npcname("nyd_2f_red_warp2", instance_id());
- end;
-
-OnTouch:
- warp "2@nyd",115,278;
- end;
-}
-
-2@nyd,145,283,0 script nyd_2f_red_warp3 -1,6,6,{
-OnInstanceInit:
- disablenpc instance_npcname("nyd_2f_red_warp3", instance_id());
- end;
-
-OnEnable:
- enablenpc instance_npcname("nyd_2f_red_warp3", instance_id());
- end;
-
-OnDisable:
- disablenpc instance_npcname("nyd_2f_red_warp3", instance_id());
- end;
-
-OnTouch:
- warp "2@nyd",115,278;
- end;
-}
-
-2@nyd,115,373,0 script nyd_2f_white -1,5,5,{
-OnInstanceInit:
- disablenpc instance_npcname("nyd_2f_white", instance_id());
- end;
-
-OnEnable:
- enablenpc instance_npcname("nyd_2f_white", instance_id());
- donpcevent instance_npcname("nyd_2f_white_warp1", instance_id())+"::OnEnable";
- donpcevent instance_npcname("nyd_2f_white_warp2", instance_id())+"::OnEnable";
- donpcevent instance_npcname("nyd_2f_white_warp3", instance_id())+"::OnEnable";
- donpcevent instance_npcname("nyd_2f_white_c", instance_id())+"::OnEnable";
- initnpctimer;
- end;
-
-OnDisable:
- donpcevent instance_npcname("nyd_2f_white_warp1", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_white_warp2", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_white_warp3", instance_id())+"::OnDisable";
- disablenpc instance_npcname("nyd_2f_white", instance_id());
- end;
-
-OnTouch:
- percentheal -50,0;
- sc_start SC_FREEZE,20000,0;
- end;
-
-OnTimer10000:
- disablenpc instance_npcname("nyd_2f_white", instance_id());
- stopnpctimer;
- end;
-}
-
-2@nyd,6,7,0 script nyd_2f_white_c -1,{
-OnInstanceInit:
- disablenpc instance_npcname("nyd_2f_white_c", instance_id());
- end;
-
-OnEnable:
- enablenpc instance_npcname("nyd_2f_white_c", instance_id());
- initnpctimer;
- monster "2@nyd",120,380,"Nidhoggur's Guardian#1",2020,1,instance_npcname("nyd_2f_white_c", instance_id())+"::OnMyMobDead";
- monster "2@nyd",119,381,"Nidhoggur's Guardian#2",2020,1,instance_npcname("nyd_2f_white_c", instance_id())+"::OnMyMobDead";
- monster "2@nyd",120,367,"Nidhoggur's Guardian#3",2020,1,instance_npcname("nyd_2f_white_c", instance_id())+"::OnMyMobDead";
- monster "2@nyd",119,366,"Nidhoggur's Guardian#4",2021,1,instance_npcname("nyd_2f_white_c", instance_id())+"::OnMyMobDead";
- monster "2@nyd",118,365,"Nidhoggur's Guardian#5",2021,1,instance_npcname("nyd_2f_white_c", instance_id())+"::OnMyMobDead";
- end;
-
-OnMyMobDead:
- set .@mob_dead_num,mobcount("2@nyd",instance_npcname("nyd_2f_white_c", instance_id())+"::OnMyMobDead");
- if (.@mob_dead_num < 1) {
- instance_announce 0, "Nidhoggur's Shadow : You're not bad... but I will be your opponent this time.",bc_map,"0x00ff99";
- donpcevent instance_npcname("nyd_2f_white_c", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_boss_enter_logic", instance_id())+"::OnEnable";
- end;
- }
- end;
-
-OnDisable:
- donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
- disablenpc instance_npcname("nyd_2f_white_c", instance_id());
- stopnpctimer;
- end;
-
-OnTimer180000:
- killmonster "2@nyd",instance_npcname("nyd_2f_white_c", instance_id())+"::OnMyMobDead";
- stopnpctimer;
- set .@rullet,rand(1,4);
- if (.@rullet == 1) {
- instance_announce 0, "Nidhoggur's Shadow : In this chaos... your blood is just what I need.",bc_map,"0xFFFF00";
- donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnEnable";
- instance_warpall "2@nyd",115,278;
- end;
- }
- else if (.@rullet == 2) {
- instance_announce 0, "Nidhoggur's Shadow : I will freeze every last drop of your blood.",bc_map,"0xFFFF00";
- donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnEnable";
- instance_warpall "2@nyd",115,373;
- end;
- }
- else if (.@rullet == 3) {
- instance_announce 0, "Nidhoggur's Shadow : Sleep for eternity in an empty illusion.",bc_map,"0xFFFF00";
- donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnEnable";
- instance_warpall "2@nyd",284,278;
- end;
- }
- else if (.@rullet == 4) {
- instance_announce 0, "Nidhoggur's Shadow : I'll let you enjoy the pain of dying slowly.",bc_map,"0xFFFF00";
- donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnEnable";
- instance_warpall "2@nyd",284,374;
- end;
- }
- end;
-}
-
-2@nyd,127,354,0 script nyd_2f_white_warp1 -1,6,6,{
-OnInstanceInit:
- disablenpc instance_npcname("nyd_2f_white_warp1", instance_id());;
- end;
-
-OnEnable:
- enablenpc instance_npcname("nyd_2f_white_warp1", instance_id());;
- end;
-
-OnDisable:
- disablenpc instance_npcname("nyd_2f_white_warp1", instance_id());;
- end;
-
-OnTouch:
- warp "2@nyd",115,373;
- end;
-}
-
-2@nyd,140,357,0 script nyd_2f_white_warp2 -1,6,6,{
-OnInstanceInit:
- disablenpc instance_npcname("nyd_2f_white_warp2", instance_id());;
- end;
-
-OnEnable:
- enablenpc instance_npcname("nyd_2f_white_warp2", instance_id());;
- end;
-
-OnDisable:
- disablenpc instance_npcname("nyd_2f_white_warp2", instance_id());;
- end;
-
-OnTouch:
- warp "2@nyd",115,373;
- end;
-}
-
-2@nyd,145,367,0 script nyd_2f_white_warp3 -1,6,6,{
-OnInstanceInit:
- disablenpc instance_npcname("nyd_2f_white_warp3", instance_id());;
- end;
-
-OnEnable:
- enablenpc instance_npcname("nyd_2f_white_warp3", instance_id());;
- end;
-
-OnDisable:
- disablenpc instance_npcname("nyd_2f_white_warp3", instance_id());;
- end;
-
-OnTouch:
- warp "2@nyd",115,373;
- end;
-}
-
-2@nyd,284,278,0 script nyd_2f_yellow -1,5,5,{
-OnInstanceInit:
- disablenpc instance_npcname("nyd_2f_yellow", instance_id());
- end;
-
-OnEnable:
- enablenpc instance_npcname("nyd_2f_yellow", instance_id());
- donpcevent instance_npcname("nyd_2f_yellow_warp1", instance_id())+"::OnEnable";
- donpcevent instance_npcname("nyd_2f_yellow_warp2", instance_id())+"::OnEnable";
- donpcevent instance_npcname("nyd_2f_yellow_warp3", instance_id())+"::OnEnable";
- donpcevent instance_npcname("nyd_2f_yellow_c", instance_id())+"::OnEnable";
- initnpctimer;
- end;
-
-OnDisable:
- donpcevent instance_npcname("nyd_2f_yellow_warp1", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_yellow_warp2", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_yellow_warp3", instance_id())+"::OnDisable";
- disablenpc instance_npcname("nyd_2f_yellow", instance_id());
- end;
-
-OnTouch:
- percentheal 0,-50;
- sc_start SC_SLEEP,20000,0;
- sc_start SC_CONFUSION,60000,0;
- end;
-
-OnTimer10000:
- disablenpc instance_npcname("nyd_2f_yellow", instance_id());
- stopnpctimer;
- end;
-}
-
-2@nyd,6,8,0 script nyd_2f_yellow_c -1,{
-OnInstanceInit:
- disablenpc instance_npcname("nyd_2f_yellow_c", instance_id());
- end;
-
-OnEnable:
- enablenpc instance_npcname("nyd_2f_yellow_c", instance_id());
- initnpctimer;
- monster "2@nyd",282,284,"Nidhoggur's Guardian#1",2020,1,instance_npcname("nyd_2f_yellow_c", instance_id())+"::OnMyMobDead";
- monster "2@nyd",283,283,"Nidhoggur's Guardian#2",2020,1,instance_npcname("nyd_2f_yellow_c", instance_id())+"::OnMyMobDead";
- monster "2@nyd",280,275,"Nidhoggur's Guardian#3",2020,1,instance_npcname("nyd_2f_yellow_c", instance_id())+"::OnMyMobDead";
- monster "2@nyd",281,276,"Nidhoggur's Guardian#4",2021,1,instance_npcname("nyd_2f_yellow_c", instance_id())+"::OnMyMobDead";
- monster "2@nyd",281,277,"Nidhoggur's Guardian#5",2021,1,instance_npcname("nyd_2f_yellow_c", instance_id())+"::OnMyMobDead";
- end;
-
-OnMyMobDead:
- set .@mob_dead_num,mobcount("2@nyd",instance_npcname("nyd_2f_yellow_c", instance_id())+"::OnMyMobDead");
- if (.@mob_dead_num < 1) {
- instance_announce 0, "Nidhoggur's Shadow : You're not bad...but I will be your opponent this time.",bc_map,"0x00ff99";
- donpcevent instance_npcname("nyd_2f_yellow_c", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_boss_enter_logic", instance_id())+"::OnEnable";
- end;
- }
- else {
- end;
- }
-
-Onreset:
- killmonster "2@nyd",instance_npcname("nyd_2f_yellow_c", instance_id())+"::OnMyMobDead";
- donpcevent instance_npcname("nyd_2f_yellow_c", instance_id())+"::OnDisable";
- end;
-
-OnDisable:
- donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
- disablenpc instance_npcname("nyd_2f_yellow_c", instance_id());
- stopnpctimer;
- end;
-
-OnTimer180000:
- killmonster "2@nyd",instance_npcname("nyd_2f_yellow_c", instance_id())+"::OnMyMobDead";
- stopnpctimer;
- set .@rullet,rand(1,4);
- if (.@rullet == 1) {
- instance_announce 0, "Nidhoggur's Shadow : In this chaos... your blood is just what I need.",bc_map,"0xFFFF00";
- donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnEnable";
- instance_warpall "2@nyd",115,278;
- end;
- }
- else if (.@rullet == 2) {
- instance_announce 0, "Nidhoggur's Shadow : I will freeze every last drop of your blood.",bc_map,"0xFFFF00";
- donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnEnable";
- instance_warpall "2@nyd",115,373;
- end;
- }
- else if (.@rullet == 3) {
- instance_announce 0, "Nidhoggur's Shadow : Sleep for eternity in an empty illusion.",bc_map,"0xFFFF00";
- donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnEnable";
- instance_warpall "2@nyd",284,278;
- end;
- }
- else if (.@rullet == 4) {
- instance_announce 0, "Nidhoggur's Shadow : I'll let you enjoy the pain of dying slowly.",bc_map,"0xFFFF00";
- donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnEnable";
- instance_warpall "2@nyd",284,374;
- end;
- }
- end;
-}
-
-2@nyd,255,285,0 script nyd_2f_yellow_warp1 -1,6,6,{
-OnInstanceInit:
- disablenpc instance_npcname("nyd_2f_yellow_warp1", instance_id());
- end;
-
-OnEnable:
- enablenpc instance_npcname("nyd_2f_yellow_warp1", instance_id());
- end;
-
-OnDisable:
- disablenpc instance_npcname("nyd_2f_yellow_warp1", instance_id());
- end;
-
-OnTouch:
- warp "2@nyd",284,278;
- end;
-}
-
-2@nyd,257,296,0 script nyd_2f_yellow_warp2 -1,6,6,{
-OnInstanceInit:
- disablenpc instance_npcname("nyd_2f_yellow_warp2", instance_id());
- end;
-
-OnEnable:
- enablenpc instance_npcname("nyd_2f_yellow_warp2", instance_id());
- end;
-
-OnDisable:
- disablenpc instance_npcname("nyd_2f_yellow_warp2", instance_id());
- end;
-
-OnTouch:
- warp "2@nyd",284,278;
- end;
-}
-
-2@nyd,268,300,0 script nyd_2f_yellow_warp3 -1,6,6,{
-OnInstanceInit:
- disablenpc instance_npcname("nyd_2f_yellow_warp3", instance_id());
- end;
-
-OnEnable:
- enablenpc instance_npcname("nyd_2f_yellow_warp3", instance_id());
- end;
-
-OnDisable:
- disablenpc instance_npcname("nyd_2f_yellow_warp3", instance_id());
- end;
-
-OnTouch:
- warp "2@nyd",284,278;
- end;
-}
-
-2@nyd,284,374,0 script nyd_2f_green -1,5,5,{
-OnInstanceInit:
- disablenpc instance_npcname("nyd_2f_green", instance_id());
- end;
-
-OnEnable:
- enablenpc instance_npcname("nyd_2f_green", instance_id());
- donpcevent instance_npcname("nyd_2f_green_warp1", instance_id())+"::OnEnable";
- donpcevent instance_npcname("nyd_2f_green_warp2", instance_id())+"::OnEnable";
- donpcevent instance_npcname("nyd_2f_green_warp3", instance_id())+"::OnEnable";
- donpcevent instance_npcname("nyd_2f_green_c", instance_id())+"::OnEnable";
- initnpctimer;
- end;
-
-OnDisable:
- donpcevent instance_npcname("nyd_2f_green_warp1", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_green_warp2", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_green_warp3", instance_id())+"::OnDisable";
- disablenpc instance_npcname("nyd_2f_green", instance_id());
- end;
-
-OnTouch:
- percentheal -50,-50;
- sc_start SC_POISON,60000,0;
- end;
-
-OnTimer10000:
- disablenpc instance_npcname("nyd_2f_green", instance_id());
- stopnpctimer;
- end;
-}
-
-2@nyd,6,9,0 script nyd_2f_green_c -1,{
-OnInstanceInit:
- disablenpc instance_npcname("nyd_2f_green_c", instance_id());
- end;
-
-OnEnable:
- enablenpc instance_npcname("nyd_2f_green_c", instance_id());
- initnpctimer;
- monster "2@nyd",282,378,"Nidhoggur's Guardian#1",2020,1,instance_npcname("nyd_2f_green_c", instance_id())+"::OnMyMobDead";
- monster "2@nyd",283,377,"Nidhoggur's Guardian#2",2020,1,instance_npcname("nyd_2f_green_c", instance_id())+"::OnMyMobDead";
- monster "2@nyd",280,368,"Nidhoggur's Guardian#3",2020,1,instance_npcname("nyd_2f_green_c", instance_id())+"::OnMyMobDead";
- monster "2@nyd",281,368,"Nidhoggur's Guardian#4",2021,1,instance_npcname("nyd_2f_green_c", instance_id())+"::OnMyMobDead";
- monster "2@nyd",281,367,"Nidhoggur's Guardian#5",2021,1,instance_npcname("nyd_2f_green_c", instance_id())+"::OnMyMobDead";
- end;
-
-OnMyMobDead:
- set .@mob_dead_num,mobcount("2@nyd",instance_npcname("nyd_2f_green_c", instance_id())+"::OnMyMobDead");
- if (.@mob_dead_num < 1) {
- instance_announce 0, "Nidhoggur's Shadow : You're not bad... but I will be your opponent this time.",bc_map,"0x00ff99";
- donpcevent instance_npcname("nyd_2f_green_c", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_boss_enter_logic", instance_id())+"::OnEnable";
- end;
- }
- else {
- end;
- }
-
-Onreset:
- killmonster "2@nyd",instance_npcname("nyd_2f_green_c", instance_id())+"::OnMyMobDead";
- donpcevent instance_npcname("nyd_2f_green_c", instance_id())+"::OnDisable";
- end;
-
-OnDisable:
- donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
- disablenpc instance_npcname("nyd_2f_green_c", instance_id());
- stopnpctimer;
- end;
-
-OnTimer180000:
- killmonster "2@nyd",instance_npcname("nyd_2f_green_c", instance_id())+"::OnMyMobDead";
- stopnpctimer;
- set .@rullet,rand(1,4);
- if (.@rullet == 1) {
- instance_announce 0, "Nidhoggur's Shadow : In this chaos... your blood is just what I need.",bc_map,"0xFFFF00";
- donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnEnable";
- instance_warpall "2@nyd",115,278;
- end;
- }
- else if (.@rullet == 2) {
- instance_announce 0, "Nidhoggur's Shadow : I will freeze every last drop of your blood.",bc_map,"0xFFFF00";
- donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnEnable";
- instance_warpall "2@nyd",115,373;
- end;
- }
- else if (.@rullet == 3) {
- instance_announce 0, "Nidhoggur's Shadow : Sleep for eternity in an empty illusion.",bc_map,"0xFFFF00";
- donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnEnable";
- instance_warpall "2@nyd",284,278;
- end;
- }
- else if (.@rullet == 4) {
- instance_announce 0, "Nidhoggur's Shadow : I'll let you enjoy the pain of dying slowly.",bc_map,"0xFFFF00";
- donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
- donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnEnable";
- instance_warpall "2@nyd",284,374;
- end;
- }
- end;
-}
-
-2@nyd,274,356,0 script nyd_2f_green_warp1 -1,6,6,{
-OnInstanceInit:
- disablenpc instance_npcname("nyd_2f_green_warp1", instance_id());
- end;
-
-OnEnable:
- enablenpc instance_npcname("nyd_2f_green_warp1", instance_id());
- end;
-
-OnDisable:
- disablenpc instance_npcname("nyd_2f_green_warp1", instance_id());
- end;
-
-OnTouch:
- warp "2@nyd",284,374;
- end;
-}
-
-2@nyd,260,356,0 script nyd_2f_green_warp2 -1,6,6,{
-OnInstanceInit:
- disablenpc instance_npcname("nyd_2f_green_warp2", instance_id());
- end;
-
-OnEnable:
- enablenpc instance_npcname("nyd_2f_green_warp2", instance_id());
- end;
-
-OnDisable:
- disablenpc instance_npcname("nyd_2f_green_warp2", instance_id());
- end;
-
-OnTouch:
- warp "2@nyd",284,374;
- end;
-}
-
-2@nyd,258,368,0 script nyd_2f_green_warp3 -1,6,6,{
-OnInstanceInit:
- disablenpc instance_npcname("nyd_2f_green_warp3", instance_id());
- end;
-
-OnEnable:
- enablenpc instance_npcname("nyd_2f_green_warp3", instance_id());
- end;
-
-OnDisable:
- disablenpc instance_npcname("nyd_2f_green_warp3", instance_id());
- end;
-
-OnTouch:
- warp "2@nyd",284,374;
- end;
-}
-
-2@nyd,1,1,0 script ins_nyd2_spawn_mobs -1,{
-OnInstanceInit:
- areamonster "2@nyd",200,92,180,80,"Rhyncho",2020,20;
- areamonster "2@nyd",200,92,180,80,"Phylla",2021,20;
- areamonster "2@nyd",200,92,180,80,"Dark Shadow",2023,20;
- areamonster "2@nyd",200,92,180,80,"Dark Pinguicula",2015,20;
- areamonster "2@nyd",200,92,180,80,"Rhyncho",2020,20;
- areamonster "2@nyd",200,92,180,80,"Phylla",2021,20;
- areamonster "2@nyd",200,92,180,80,"Dark Shadow",2023,20;
- areamonster "2@nyd",200,92,180,80,"Dark Pinguicula",2015,20;
- end;
-}
+//===== eAthena Script =======================================
+//= Nidhoggr's Nest
+//===== By: ==================================================
+//= L0ne_W0lf, various sources
+//===== Current Version: =====================================
+//= 1.2
+//===== Compatible With: =====================================
+//= eAthena SVN
+//===== Description: =========================================
+//= [Aegis Conversion]
+//= Nidhoggr's Nest Instance
+//===== Additional Comments: =================================
+//= 1.0 First version.
+//= 1.1 Minor dialog updates.
+//= 1.2 No longer glitches when anyone but party leader talks to the first NPC.
+//============================================================
+
+nyd_dun02,100,201,3 script Yggdrasil Gatekeeper 111,8,8,{
+ if (ins_nyd == 0) {
+ mes "A great stone gate stands before you. The sculpture of a terrible dragon spreads its powerful looking wings.";
+ next;
+ mes "Near the bottom of the gate, Laphine tribeswomen have been turned to stone and now look like they are part of the great door.";
+ next;
+ switch(select("Move closer to look more carefully.:Step back.")) {
+ case 1:
+ if (ep13_1_edq == 14) {
+ specialeffect2 EF_HOLYHIT;
+ PushPC 3,3;
+ set ep13_1_edq,15;
+ mes "A mysterious power prevents you from getting too close. It looks like there is something strong beyond the door...";
+ next;
+ mes "Perhaps there's a great hidden secret beyond the gate, beyond expectation.";
+ next;
+ mes "It would be better to go back to camp and inform the others and ask for help.";
+ set ins_nyd,1;
+ close;
+ }
+ else if (ep13_1_edq == 15) {
+ specialeffect2 EF_HOLYHIT;
+ PushPC 3,3;
+ mes "A mysterious power prevents you from getting too close. It looks like there is something strong beyond the door...";
+ next;
+ mes "Perhaps there's a great hidden secret beyond the gate, beyond expectation.";
+ next;
+ mes "It would be better to go back to camp and inform the others and ask for help.";
+ set ins_nyd,1;
+ close;
+ }
+ else {
+ specialeffect2 EF_HOLYHIT;
+ PushPC 3,3;
+ mes "A mysterious power prevents you from getting too close. It looks like there is something strong beyond the door...";
+ next;
+ mes "Perhaps there's a great hidden secret beyond the gate, beyond expectation.";
+ next;
+ mes "It would be better to go back to camp and inform the others and ask for help.";
+ next;
+ mes "You'll have to obtain the others trust in the expendition camp by working hard.";
+ set ins_nyd,1;
+ close;
+ }
+ case 2:
+ close;
+ }
+ }
+ else if (ins_nyd == 1) {
+ if ((ep13_1_edq == 14) || (ep13_1_edq == 15)) {
+ mes "A mysterious power prevents you from getting too close. It looks like there is something strong beyond the door...";
+ next;
+ mes "Perhaps there's a great hidden secret beyond the gate, beyond expectation.";
+ next;
+ mes "It would be better to go back to camp and inform the others and ask for help.";
+ set ep13_1_edq,15;
+ close;
+ }
+ else {
+ mes "A mysterious power prevents you from getting too close. It looks like there is something strong beyond the door...";
+ next;
+ mes "Perhaps there's a great hidden secret beyond the gate, beyond expectation.";
+ next;
+ mes "It would be better to go back to camp and inform the others and ask for help.";
+ next;
+ mes "You'll have to obtain the others trust in the expendition camp by working hard.";
+ close;
+ }
+ }
+ else if ((ins_nyd == 111) || (ins_nyd == 112)) {
+ specialeffect2 EF_CHANGECOLD;
+ mes "The strange sensation surrounding your body has disappeared";
+ next;
+ mes "When you touch the stone gate, you hear a commanding voice.";
+ next;
+ mes "[??????]";
+ mes "Wingless one... Our promised words...";
+ next;
+ switch(select("'Guardian's spell'!:Take a step back.")) {
+ case 1:
+ mes "[??????]";
+ mes "Promised words... Guardian's spell... proof of their existence.";
+ next;
+ mes "[Yggdrasil Gatekeeper]";
+ mes "In the name of Yggdrasiliad, I will accept you as a servant of the Guardian.";
+ next;
+ specialeffect2 EF_CHANGECOLD;
+ set ins_nyd,200;
+ mes "[Yggdrasil Gatekeeper]";
+ mes "I accept your entrance through the Guardian's gate. You are now considered a faithful servant of the Guardian Nidhoggur.";
+ next;
+ mes "The voice has disappeared, and the dark power is calming down from behind the stone gate.";
+ close;
+ case 2:
+ close;
+ }
+ }
+ else if ((ins_nyd == 131) || (ins_nyd == 132) || (ins_nyd > 199)) {
+ set .@ins_nyd_check,checkquest(3135,PLAYTIME); // 3 Day cooldown
+ set .@ins_nyd_check2,checkquest(3135,PLAYTIME); // 4 Hour play limit
+ if (.@ins_nyd_check == -1) {
+ mes "As I put my hands on the stone gate, a voice sounded from the depth of my heart.";
+ next;
+ mes "[Yggdrasil Gatekeeper]";
+ mes "The loyal servants of the Guardian... what can I do for you?";
+ next;
+ switch(select("Please allow me to enter.:I want to go in.:I want to leave.")) {
+ case 1:
+ set .@party,getcharid(1);
+ set .@leader,getpartyleader(.@party,2);
+ set .@md_name$,"Nidhoggur's Nest";
+
+ getpartymember(.@party);
+ set .@partymembercount,$@partymembercount;
+ copyarray .@partymembername$[0],$@partymembername$[0],.@partymembercount;
+
+ if ((.@party > 0) && ((.@partymembercount > 1)) && (.@leader == getcharid(0))) {
+ set .@instance, instance_create(.@md_name$, .@party);
+ if (.@instance < 0) {
+ mes "[Yggdrasil Gatekeeper]";
+ mes "The Guardian seems to wish to be alone. I will go in and check, please wait out here.";
+ close;
+ }
+ else {
+ for( set .@i, 1; .@i <= 2; set .@i, .@i + 1 ) {
+ if( instance_attachmap(.@i + "@nyd", .@instance) == "" )
+ break;
+ }
+ if( .@i < 2 ) {
+ instance_destroy(.@instance);
+ close;
+ }
+ instance_attach(.@instance);
+ instance_set_timeout 144000,300,.@instance;
+ instance_init(.@instance);
+
+ // Spawn standard mobs
+ donpcevent instance_npcname("ins_nyd1_spawn_mobs", instance_id())+"::OnInstanceInit";
+ donpcevent instance_npcname("ins_nyd2_spawn_mobs", instance_id())+"::OnInstanceInit";
+ // Activate Floor 1
+ donpcevent instance_npcname("nyd_call_mon_1", instance_id())+"::OnInstanceInit";
+ donpcevent instance_npcname("ins_nyd_1f_timer", instance_id())+"::OnInstanceInit";
+ donpcevent instance_npcname("nyd_to2f_warp", instance_id())+"::OnInstanceInit";
+ // Active Floor 2
+ donpcevent instance_npcname("nyd_2f_enter_broad", instance_id())+"::OnInstanceInit";
+ donpcevent instance_npcname("nyd_2f_boss_enter", instance_id())+"::OnInstanceInit";
+ donpcevent instance_npcname("nyd_2f_boss_enter_call", instance_id())+"::OnInstanceInit";
+ donpcevent instance_npcname("nyd_2f_boss_enter_logic", instance_id())+"::OnInstanceInit";
+ donpcevent instance_npcname("World Tree Yggdrasil#2F", instance_id())+"::OnInstanceInit";
+ donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnInstanceInit";
+ donpcevent instance_npcname("nyd_2f_red_c", instance_id())+"::OnInstanceInit";
+ donpcevent instance_npcname("nyd_2f_red_warp1", instance_id())+"::OnInstanceInit";
+ donpcevent instance_npcname("nyd_2f_red_warp2", instance_id())+"::OnInstanceInit";
+ donpcevent instance_npcname("nyd_2f_red_warp3", instance_id())+"::OnInstanceInit";
+ donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnInstanceInit";
+ donpcevent instance_npcname("nyd_2f_white_c", instance_id())+"::OnInstanceInit";
+ donpcevent instance_npcname("nyd_2f_white_warp1", instance_id())+"::OnInstanceInit";;
+ donpcevent instance_npcname("nyd_2f_white_warp2", instance_id())+"::OnInstanceInit";;
+ donpcevent instance_npcname("nyd_2f_white_warp3", instance_id())+"::OnInstanceInit";;
+ donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnInstanceInit";
+ donpcevent instance_npcname("nyd_2f_yellow_c", instance_id())+"::OnInstanceInit";
+ donpcevent instance_npcname("nyd_2f_yellow_warp1", instance_id())+"::OnInstanceInit";
+ donpcevent instance_npcname("nyd_2f_yellow_warp2", instance_id())+"::OnInstanceInit";
+ donpcevent instance_npcname("nyd_2f_yellow_warp3", instance_id())+"::OnInstanceInit";
+ donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnInstanceInit";
+ donpcevent instance_npcname("nyd_2f_green_c", instance_id())+"::OnInstanceInit";
+ donpcevent instance_npcname("nyd_2f_green_warp1", instance_id())+"::OnInstanceInit";
+ donpcevent instance_npcname("nyd_2f_green_warp2", instance_id())+"::OnInstanceInit";
+ donpcevent instance_npcname("nyd_2f_green_warp3", instance_id())+"::OnInstanceInit";
+
+ mes "[Yggdrasil Gatekeeper]";
+ mes "I've recorded your request, are you ready to go inside?";
+ next;
+ mes "[Yggdrasil Gatekeeper]";
+ mes "If you are ready, I will allow you to enter.";
+ close;
+ }
+ }
+ else {
+ mes "[Yggdrasil Gatekeeper]";
+ mes "When you touch the stone gate, you can hear the voice in your heart.";
+ next;
+ mes "[Yggdrasil Gatekeeper]";
+ mes "Where are the other servants, so you can work together? Each servant cannot be admitted here individually...";
+ next;
+ mes "[Yggdrasil Gatekeeper]";
+ mes "Come with at least 1 more servant... Only party leaders can accept admission to Nidhoggur's Nest.";
+ next;
+ mes "[Yggdrasil Gatekeeper]";
+ mes "And only 1 representative of you needs to talk to me, so don't annoy me...";
+ close;
+ }
+ case 2:
+ if (.@ins_nyd_check2 < 2) { // Added check to avoid people from re-partting up.
+ set .@party,getcharid(1);
+ set .@leader,getpartyleader(.@party,2);
+ set .@p_name$,getpartyname(.@party);
+ set .@p_name2$,strcharinfo(0);
+ set .@md_name$,"Nidhoggur's Nest";
+
+ getpartymember(.@party);
+ set .@partymembercount,$@partymembercount;
+ copyarray .@partymembername$[0],$@partymembername$[0],.@partymembercount;
+
+ if (has_instance("1@nyd") == "") {
+ mes "[Yggdrasil Gatekeeper]";
+ mes "You did not request for entrance. Please let your leader request entrance.";
+ close;
+ }
+ else if ((has_instance("1@nyd") != "") && (.@partymembercount < 2)) {
+ mes "[Yggdrasil Gatekeeper]";
+ mes "Where are the other servants with you? We do not allow individuals to enter alone.";
+ next;
+ mes "[Yggdrasil Gatekeeper]";
+ mes "You must be accompanied by one servant to be able to enter.";
+ close;
+ }
+ else {
+ mapannounce "nyd_dun02", .@p_name$ + "'s Party member " + .@p_name2$ + " has entered " + .@md_name$,bc_map,"0x00ff99";
+ if (checkquest(3135) == -1) setquest 3135;
+ if (checkquest(3136) == -1) setquest 3136;
+ warp "1@nyd",32,37;
+ close;
+ }
+ }
+ else {
+ //Custom
+ mes "[Yggdrasil Gatekeeper]";
+ mes "You are no longer able to enter Nidhogger's Nest, as your instance has expired.";
+ next;
+ mes "[Yggdrasil Gatekeeper]";
+ mes "After Nidhoggur's Shadow disappears, at least 3 days is needed for stabilizing.";
+ close;
+ }
+ case 3:
+ close;
+ }
+ }
+ else if ((.@ins_nyd_check == 0) || (.@ins_nyd_check == 1)) {
+ mes "[Yggdrasil Gatekeeper]";
+ mes "With the defeat of Nidhoggur's Shadow, the roots of the World Tree Yggdrasil are also affected.";
+ next;
+ mes "[Yggdrasil Gatekeeper]";
+ mes "After Nidhoggur's Shadow disappears, at least 3 days is needed for stabilizing.";
+ close;
+ }
+ else if (.@ins_nyd_check == 2) {
+ mes "[Yggdrasil Gatekeeper]";
+ mes "The World Tree Yggdrasil has stabilized. Would you like to enter Nidhoggur's Nest again?";
+ next;
+ mes "[Yggdrasil Gatekeeper]";
+ mes "If you would like to enter again, please register with me.";
+ erasequest 3135;
+ erasequest 3136;
+ set 'ins_nyd2,0;
+ close;
+ }
+ else {
+ close;
+ }
+ }
+ else {
+ mes "A great stone gate stands before you. The sculpture of a terrible dragon spreads its powerful looking wings.";
+ next;
+ mes "Near the bottom of the gate, Laphine tribeswomen have been turned to stone and now look like they are part of the great door.";
+ next;
+ switch(select("Move closer to look more carefully.:Step back.")) {
+ case 1:
+ specialeffect2 EF_HOLYHIT;
+ PushPC 3,3;
+ mes "A mysterious power prevents you from getting too close. It looks like there is something strong beyond the door...";
+ next;
+ mes "Perhaps there's a great hidden secret beyond the gate, beyond expectation.";
+ close;
+ case 2:
+ close;
+ }
+ }
+ close;
+
+OnTouch_:
+ if (ins_nyd == 0) {
+ specialeffect2 EF_CHANGECOLD;
+ specialeffect EF_CHANGECOLD,"Yggdrasil Gatekeeper";
+ }
+ end;
+}
+
+mid_camp,271,299,3 script Historian Magnifier#edq 755,3,3,{
+ if (ins_nyd == 1) {
+ mes "[Historian Magniffer]";
+ mes "Sure, the mainland also has lots of interesting adventures... Hello, I am Magnifier, a historian dispatched from the Prontera royal court.";
+ next;
+ mes "[Historian Magniffer]";
+ mes "Finding another line of work might make for a really worthy job, but only a historian gets to know the world over..";
+ next;
+ mes "[Historian Magniffer]";
+ mes "How this world is organized... and the way of the future! With our studies of the past and present we can predict what is to come.";
+ next;
+ mes "[Historian Magniffer]";
+ mes "We are expecting a lot from you, expert adventurer. So, if you find anything... just tell me.";
+ close;
+ }
+ else if (ins_nyd == 2) {
+ mes "[Historian Magniffer]";
+ mes "Does Commander Agip want to talk to me? Let's listen to his story.";
+ next;
+ mes "[Historian Magniffer]";
+ mes "Did you find the cave that the fairy tribes treat as a holy place? You are a really tough cookie. What did you find?";
+ next;
+ mes "[Historian Magnifier]";
+ mes "...";
+ next;
+ mes "... ...";
+ next;
+ mes "[Historian Magnifier]";
+ mes "Wait a second... I have a brilliant idea.";
+ next;
+ mes "[Historian Magnifier]";
+ mes "Let's see... This book... No... this one...? Hmm... Maybe this...";
+ next;
+ mes "[Historian Magnifier]";
+ mes "...";
+ next;
+ mes "[Historian Magnifier]";
+ mes "... ...";
+ next;
+ mes "[Historian Magnifier]";
+ mes "Oh, here it is! World Tree Yggdrasil and God's tribes... This is their book!";
+ next;
+ mes "[Historian Magnifier]";
+ mes "Maybe you found the central line to enter into the World Tree Yggdrasil!";
+ next;
+ mes "[Historian Magnifier]";
+ mes "If that's true, you've found the greatest discovery since the harnessing of mana. Isn't this exciting?";
+ next;
+ mes "[Historian Magnifier]";
+ mes "But we need a lot more information... Are they refusing you admission?";
+ next;
+ mes "[Historian Magnifier]";
+ mes "I will send a message to my assistant who is in the Prontera Library. So, help her find more information.";
+ next;
+ mes "[Historian Magnifier]";
+ mes "I will definitely help you find a way to enter the World Tree directly so, just believe in me! Okay~!!";
+ set ins_nyd,3;
+ close;
+ }
+ else if (ins_nyd == 3) {
+ mes "[Historian Magnifier]";
+ mes "Why are you standing there? Go to my assistant in the Prontera Library!";
+ close;
+ }
+ else if (ins_nyd == 4) {
+ mes "[Historian Magnifier]";
+ mes "You've come back... Good, how's Naomi? Actually, I don't need to worry about her. She is always cheerful. Haha.";
+ next;
+ mes "[Historian Magnifier]";
+ mes "You look like you have a lot on your mind... Your face is full of curiosity and questions.";
+ next;
+ mes "[Historian Magnifier]";
+ mes "So, did you read the whole story that I have prepared?";
+ next;
+ switch(select("Not yet.:I read all the stories.")) {
+ case 1:
+ mes "[Historian Magnifier]";
+ mes "Sheesh~ I prepared these stories for you carefully, but you didn't bother to check anything out did you?";
+ next;
+ mes "[Historian Magnifier]";
+ mes "It would be better if you returned after reading all of them. That's very basic data of what we should do for the future.";
+ close;
+ case 2:
+ mes "[Historian Magnifier]";
+ mes "Hm, good job. Maybe I don't need to check anything else, right?";
+ next;
+ mes "[Historian Magnifier]";
+ mes "I sent you to figure out which basic materials will be needed for the jobs ahead of us. You should bring research reports...";
+ next;
+ mes "[Historian Magnifier]";
+ mes "You might complain about why I didn't bring any myself... That's because I trust your abilities, don't ever take anything for granted.";
+ next;
+ mes "[Historian Magnifier]";
+ mes "But a while ago, while you were tranferring reports from Commander Agip to the mainland, you lost those reports... remember?";
+ next;
+ mes "[Historian Magnifier]";
+ mes "So far, nothing's come up... Was it that somebody attacked you?";
+ next;
+ mes "[Historian Magnifier]";
+ mes "Somehow, the truth will come out, but we should be careful of shocking the natives if we go there unannounced and they're not prepared for our arrival.";
+ next;
+ mes "[Historian Magnifier]";
+ mes "I've talked too much... Anyway, as you know through my report, you've found a great thing!";
+ next;
+ mes "[Historian Magnifier]";
+ mes "Firstly, we should find out more about the place. I expect we can, but... we can't do much without help from others.";
+ next;
+ mes "[Historian Magnifier]";
+ mes "I have heard about recent expeditions of adventurers that have tried to contact the tribes... Have you heard anything about this?";
+ next;
+ mes "[Historian Magnifier]";
+ mes "Anyway, let's try to contact them first, to be clear about any caves or treasures.";
+ next;
+ mes "[Historian Magnifier]";
+ mes "For now, you try to contact the Sapha and Laphine tribes, and try to extract information from them.";
+ next;
+ mes "[Historian Magnifier]";
+ mes "I'll also keep searching here. If you find anything, come back and let me know.";
+ set ins_nyd,5;
+ close;
+ }
+ }
+ else if ((ins_nyd == 5) || (ins_nyd == 51) || (ins_nyd == 52)) {
+ mes "[Historian Magnifier]";
+ mes "Okay, let's try to contact them first, to be clear about any caves or treasures.";
+ next;
+ mes "[Historian Magnifier]";
+ mes "For now, you try to contact the Sapha and Laphine tribes, and try to extract more information.";
+ next;
+ mes "[Historian Magnifier]";
+ mes "I'll also keep searching here. If you find anything, come back and let me know.";
+ close;
+ }
+ else if ((ins_nyd == 61) || (ins_nyd == 62)) {
+ mes "[Historian Magnifier]";
+ mes "Ah, you've come at a proper time. I found a curious thing while looking for reports from Arunafeltz.";
+ next;
+ mes "[Historian Magnifier]";
+ mes "Right now, we are standing on part of one of the roots of the World Tree Yggdrasil.";
+ next;
+ mes "[Historian Magnifier]";
+ mes "This spot is connected to World Tree by the root. I think we can expect confrontations between the Sapha and Laphine here eventually, don't you think?";
+ next;
+ mes "[Historian Magnifier]";
+ mes "As I expected, the cave is the entrance to go to one of Yggdrasil's roots...";
+ next;
+ mes "[Historian Magnifier]";
+ mes "Did you find anything about the Sapha and Laphine?";
+ next;
+ mes "...";
+ next;
+ mes "... ...";
+ next;
+ mes "[Historian Magnifier]";
+ mes "Both sides act ambiguously, so... I'm getting worried...";
+ next;
+ mes "[Historian Magnifier]";
+ mes "The two tribes have some trouble amongst their top leaders. It's not anything official, but...";
+ next;
+ mes "[Historian Magnifier]";
+ mes "Let's report to Commander Agip about the situation so far. Then, we wait on his decision.";
+ set ins_nyd,7;
+ close;
+ }
+ else if ((ins_nyd == 7) || (ins_nyd == 8)) {
+ mes "[Historian Magnifier]";
+ mes "Report to Commander Hibba Agip about what we have discovered, since time is dependent on his decision.";
+ close;
+ }
+ else if ((ins_nyd == 121) || (ins_nyd == 122) || (ins_nyd == 131) || (ins_nyd == 132) || (ins_nyd ==14)) {
+ mes "[Historian Magnifier]";
+ mes "So that's how it is... we were right about some parts of it... it's called the Guardian's Nest.";
+ next;
+ mes "[Historian Magnifier]";
+ mes "We have gained a large amount of knowledge today, but...";
+ next;
+ mes "[Historian Magnifier]";
+ mes "What we have figured out... how is it going to influence mankind? It's so unpredictable...";
+ next;
+ mes "[Historian Magnifier]";
+ mes "This is only the beginning...we will be quite busy from now on.";
+ next;
+ mes "[Historian Magnifier]";
+ mes "First, report to Commander Agip, then act according to the situation. Let me organize my research findings...";
+ close;
+ }
+ else {
+ mes "[Historian Magnifier]";
+ mes "Sure, the mainland also has lots of interesting adventures... Hello, I am Magnifier, a historian dispatched from the Prontera royal court.";
+ next;
+ mes "[Historian Magnifier]";
+ mes "Finding another line of work might make for a really worthy job, but only a historian gets to know the world over..";
+ next;
+ mes "[Historian Magnifier]";
+ mes "How this world is organized... and the way of the future! With our studies of the past and present we can predict what is to come.";
+ next;
+ mes "[Historian Magnifier]";
+ mes "We are expecting a lot from you, expert adventurer. So, if you find anything... just tell me.";
+ close;
+ }
+}
+
+prt_in,171,94,3 script Assistant Naomi#edq 893,3,3,{
+ set name,PcName;
+ if (ins_nyd == 3) {
+ mes "[Assistant Naomi]";
+ mes "The doctor never ever tries to come back, and there're too many things to do... How can I do it all...";
+ next;
+ mes "[Assistant Naomi]";
+ mes "Hey, you. Please move these books. Put them into shelf 3 row B.";
+ next;
+ mes "[" +strcharinfo(0)+ "]";
+ mes "Ah...um..I...am...";
+ next;
+ mes "[Assistant Naomi]";
+ mes "Don't you see I am too busy? Don't hesitate. Just do it.";
+ next;
+ switch(select("Look busy, and take a step back.:Help her just this once.")) {
+ case 1:
+ mes "[Assistant Naomi]";
+ mes "Gosh! Where is-? Where did-? Ugh! It's so difficult!";
+ close;
+ case 2:
+ mes "[Assistant Naomi]";
+ mes "Ah... if you're done moving those, then these should go in shelf 3 row B.";
+ next;
+ mes "[" +strcharinfo(0)+ "]";
+ mes "Ah...I...see...";
+ next;
+ mes "[Assistant Naomi]";
+ mes "Now, I am almost done... Who are you? Are you a new assistant to Dr. Magnifier?";
+ next;
+ mes "[" +strcharinfo(0)+ "]";
+ mes "He asked me to bring some reports. Didn't he say anything?";
+ next;
+ mes "[Assistant Naomi]";
+ mes "Hmm... I haven't seen him in over a year! What's he doing now?";
+ next;
+ mes "[" +strcharinfo(0)+ "]";
+ mes "He said that he would send a message to you... didn't you get it?";
+ next;
+ mes "[Assistant Naomi]";
+ mes "Message? ...Let's see... I never expected him to write a message...";
+ next;
+ mes "[Assistant Naomi]";
+ mes "I will check the mailbox, wait a minute. If you get bored read those books.";
+ next;
+ mes "...";
+ next;
+ mes "... ...";
+ next;
+ mes "It's too messy due to lots of stacked books and files. Dr. Magnifier looks like he has a ton of reports.";
+ next;
+ mes "[" +strcharinfo(0)+ "]";
+ mes "'Birth of the World', 'The Fiction of Odin's Myth', 'God's Battle Then After', 'Dreams of the Tribes'. There are a variety of books...";
+ next;
+ mes "...";
+ next;
+ mes "[Assistant Naomi]";
+ mes "Oh, sorry I took so long. There was too much mail, so it took me a while to find stuff.";
+ next;
+ mes "[Assistant Naomi]";
+ mes "He has sent me mail over 20 times. I did not know that...";
+ next;
+ mes "[Assistant Naomi]";
+ mes "Ah, here's the message about you. He's said to share the information on research and reports.";
+ next;
+ mes "[" +strcharinfo(0)+ "]";
+ mes "What is the Doctor's area of expertise?";
+ next;
+ mes "[Assistant Naomi]";
+ mes "Ever since 5 years ago, he has been curious about how the world started, and so he began his search for the God of creation.";
+ next;
+ mes "[Assistant Naomi]";
+ mes "He researches combat between Odin and the Gods, and about the Gods' origins and life.";
+ next;
+ mes "[" +strcharinfo(0)+ "]";
+ mes "So, did he already know that the Rebirth of Satan Morocc has occured before?";
+ next;
+ mes "[Assistant Naomi]";
+ mes "I can't be sure, but he thought someday it would occur. It broke out earlier than he expected though.";
+ next;
+ mes "[" +strcharinfo(0)+ "]";
+ mes "But Rune-Midgarts approved this research?";
+ next;
+ mes "[Assistant Naomi]";
+ mes "Our academics are not a religion. And they too have curiosity about this world's history.";
+ next;
+ mes "[Assistant Naomi]";
+ mes "The combat of Odin vs. the Gods, and the God's sons and their purpose... The Doctor has researched this his whole life.";
+ next;
+ mes "[" +strcharinfo(0)+ "]";
+ mes "But those reports haven't come out yet. Have they?";
+ next;
+ mes "[Assistant Naomi]";
+ mes "That's why he sent you here. By the way, this isn't the first time I've heard this.";
+ next;
+ mes "[Assistant Naomi]";
+ mes "After the establishment of the Rune-Midgarts Kingdom and Arunafeltz, the rumors have spread in secret about their tribes, myths, etc.";
+ next;
+ mes "[Assistant Naomi]";
+ mes "Anyway, I should make sure that you read all these books, and I'll just keep doing my work.";
+ next;
+ mes "[" +strcharinfo(0)+ "]";
+ mes "Shouldn't I have filed the books?";
+ next;
+ mes "[Assistant Naomi]";
+ mes "The Doctor said he will pick up the books through another person. Besides, don't you need the basic information on what to do?";
+ next;
+ mes "[Assistant Naomi]";
+ mes "Before you go back to the Doctor, you had better read these books. So, I will go back to work.";
+ set ins_nyd,4;
+ close;
+ }
+ }
+ else if (ins_nyd == 4) {
+ mes "[Assistant Naomi]";
+ mes "Browse around, to take a look at the books.";
+ next;
+ switch(select("Discovery of Heterogeneity:Report of Indigenous Tribes")) {
+ case 1:
+ mes "Satan Morocc has known that he didn't resurrect normally or by himself.";
+ next;
+ mes "Continuously, adventurers from Rune-Midgarts have attacked him and he is slowly losing his power. He would need more time to resurrect completely.";
+ next;
+ mes "Satan Morroc stopped to destroy the city of Morroc, turning it into a ruined desert, then started to rip the world apart.";
+ next;
+ mes "Satan Morroc was worried about those who would give chase, so he created Morocc clones to keep watch behind him.";
+ next;
+ mes "Modeled after Morocc, their appearance made it difficult to go around the time-space gap.";
+ next;
+ mes "Still the adventurers gave chase. They came from all over the world, trying to approach the Dimensional Gorge.";
+ next;
+ mes "The reports of these adventurers have been sent to representatives of all kingdoms, and an expedition team has been created to find out more information.";
+ next;
+ mes "The scientists of Schwartzwalt created a combination metal, using fragments of metals found in the dimensional gorge.";
+ next;
+ mes "The Schwaltzvalt Republic requested approval to find the source of the new metal, and since Rune-Midgart couldn't complete the test themselves, they finally accepted.";
+ next;
+ mes "They associated together to gather volunteers. The Assassin Guild was the first to volunteer.";
+ next;
+ mes "The Assassins have a terrible past with Satan Morroc, so they gathered 18 members to chase him down.";
+ next;
+ mes "About 3 hours later, all 18 members returned without any problem, and each man and woman shared the information that they had collected.";
+ next;
+ mes "They had discovered another world with a definitively different nature and environment. And indeed, people could also live there.";
+ next;
+ mes "The most surprising thing is the flow of time. The 18 assassins had stayed for about 2 weeks in there, yet they returned within 3 hours after departing.";
+ next;
+ mes "The last thing to be tested... was to send adventurers who volunteered to explore the new world.";
+ next;
+ mes "There was a flood of adventurer applications. Lots of volunteers disappeared over the dimensional gorge, and they brought back new data.";
+ next;
+ mes "The new world could support 3 completely different eco-systems dependant upon the race of people that lived there.";
+ next;
+ mes "The heterogenous phenomenon needed to be studied thoroughly and carefully in order to under the relationship between thair world and ours.";
+ next;
+ mes "Just when it was expected to be impossible to travel into a different world, the first page of a new chapter was opened.";
+ close;
+ case 2:
+ mes "Long ago, there wasn't a sun, moon, or stars; just empty earth... and Ymir was born. Then, by making sons, Ymir grew.";
+ next;
+ mes "But, his sons grew as well and he was killed by Odin, Vili, and Ve; 3 brothers, Gods, that attacked from different sides.";
+ next;
+ mes "At that time of Ymir's fall his blood flooded the world... killing all in it's path.";
+ next;
+ mes "Only Hvergelmir of the Sapha tribe escaped from this flooding of blood. And he swore vengeance in Jotunheim, which is covered with foggy snow.";
+ next;
+ mes "Currently, one of the Sapha tribe has been discovered from beyond the Dimensional Gorge.";
+ next;
+ mes "Other than the Sapha tribe, there was another tribe beyond the time-space gap, known as the Laphine.";
+ next;
+ mes "The Laphine tribes gathered as well for an expedition to explore the time-space gap and figure out the World Tree's strange symptoms and perharps a cure method.";
+ next;
+ mes "The Laphine tribe was charged with the management of Yggdrasil, to establish their lands close to Asgard, and to protect the balance of Yggdrasil's magic power.";
+ next;
+ mes "The Laphine tribe has never contacted anyone outside of Asgard. But since they found that Yggdrasil's power if weakening...";
+ next;
+ mes "They have declared they will attend to the high courts for the first time in 1000 human years, since the end of the battles of Gods vs. Magicians.";
+ close;
+ }
+ }
+ else {
+ mes "[Assistant Naomi]";
+ mes "The doctor never ever tries to come back, and there're too many things to do... How can I do it all...";
+ next;
+ mes "[Assistant Naomi]";
+ mes "Don't you see that I'm too busy? Don't dawdle, just go!";
+ close;
+ }
+}
+
+splendide,198,178,3 script Grumbling Soldier#edq 447,3,3,{
+ if (isequipped(2782) == 1) {
+ mes "[Grumbling Soldier]";
+ mes "Nowadays, the world has turned unstable. I can't even fly comfortably anymore.";
+ next;
+ if (ins_nyd == 5) {
+ switch(select("What's with the cave up north?:Who are the Sapha tribesmen?:Hmm. We can talk later.")) {
+ case 1:
+ mes "[Grumbling Soldier]";
+ mes "What? If you wander around there... you might return with injuries.";
+ next;
+ mes "[Grumbling Soldier]";
+ mes "I don't know exactly how to explain it, but it's like it has a bad mood. There are lots of terrible monsters there.";
+ next;
+ mes "[Grumbling Soldier]";
+ mes "They whisper to each other, so... something is there... But I don't care...";
+ next;
+ mes "[Grumbling Soldier]";
+ mes "Might be... those Sapha tribesmen have dug in the cave before... They do have a special talent for digging.";
+ set ins_nyd,51;
+ close;
+ case 2:
+ mes "[Grumbling Soldier]";
+ mes "Oh! It is because of them that we have been living here, a lowdown and dirty city, for over one hundred years.";
+ next;
+ mes "[Grumbling Soldier]";
+ mes "They don't care if there's trouble with the Yggdrasil.";
+ next;
+ mes "[Grumbling Soldier]";
+ mes "They are surely full of bad ideas, so... they have destroyed the Yggdrasil's root.";
+ next;
+ mes "[Grumbling Soldier]";
+ mes "We are here to make sure that the Sapha don't make things worse.";
+ close;
+ case 3:
+ close;
+ }
+ }
+ else {
+ mes "[Grumbling Soldier]";
+ mes "Nowadays, the world has turned unstable. I can't even fly comfortably anymore.";
+ next;
+ mes "[Grumbling Soldier]";
+ mes "What can you expect when Manuk giants start to dig into the world to destroy the Yggdrasil...";
+ next;
+ mes "[Grumbling Soldier]";
+ mes "And the worst thing is... that strange things are strutting along the streets of the towns...";
+ next;
+ mes "[Grumbling Soldier]";
+ mes "Yes, you... What do you think about the way the government is handling this...?";
+ next;
+ mes "[Grumbling Soldier]";
+ mes "Although they ignore your track record, still, one should be careful...";
+ close;
+ }
+ }
+ else {
+ mes "[Grumbling Soldier]";
+ mes "SeLarsmar Di marThusVil U SeMushVohl";
+ close;
+ }
+}
+
+splendide,240,164,3 script Sighing Soldier#edq 461,3,3,{
+ if (isequipped(2782) == 1) {
+ mes "[Sighing Soldier]";
+ mes "When will we be finished with this combat with the Sapha? Ugghhhh...";
+ next;
+ if (ins_nyd == 5) {
+ switch(select("What's with the cave up north?:Who are the Sapha tribesmen?:Hmm. We can talk later.")) {
+ case 1:
+ mes "[Sighing Soldier]";
+ mes "Well... I'm not sure, but we have avoided going to that area.";
+ next;
+ mes "[Sighing Soldier]";
+ mes "Sometimes, the dispatched researchers hang around here... I feel bad that there's nothing to see... without any reason...";
+ next;
+ mes "[Sighing Soldier]";
+ mes "But the command officers make sure that there's something hidden in there.";
+ next;
+ mes "[Sighing Soldier]";
+ mes "We don't know if the monsters there are strong, so we never checked it out. But on a personal level, nobody wants to go there...";
+ set ins_nyd,51;
+ close;
+ case 2:
+ mes "[Sighing Soldier]";
+ mes "I don't know what others think about it... but we've had some trouble with our attitude against the Sapha tribes.";
+ next;
+ mes "[Sighing Soldier]";
+ mes "We didn't try to solve the problems with talk. We attacked them first.";
+ next;
+ mes "[Sighing Soldier]";
+ mes "Maybe... our command officers don't want to accept other species different than us...";
+ next;
+ mes "[Sighing Soldier]";
+ mes "Don't misunderstand... Recently, we have talked about your particular species and our commanders feel grateful to you.";
+ next;
+ mes "[Sighing Soldier]";
+ mes "Anyway... I'm just exhausted during this useless and nerve-wracking situation... Sigh.";
+ close;
+ case 3:
+ close;
+ }
+ }
+ else {
+ mes "[Sighing Soldier]";
+ mes "When will we be finished with this combat with the Sapha? Ugghhhh...";
+ next;
+ mes "[Sighing Soldier]";
+ mes "Frankly, I don't think of you or any Sapha is our enemy. Sigh...";
+ next;
+ mes "[Sighing Soldier]";
+ mes "Is there no way to resolve this by communicating? There's no meaning in useless combat! Geez.";
+ close;
+ }
+ }
+ else {
+ mes "[Grumbling Soldier]";
+ mes "VohlLarsmar Ha DielCyatas";
+ close;
+ }
+}
+
+spl_in01,109,60,3 script Commander Lebiordirr#edq 435,3,3,{
+ if (isequipped(2782) == 1) {
+ if (ins_nyd == 51) {
+ mes "[Commander Lebiordirr]";
+ mes "Are you...? Are you the one collecting information from my soldiers...?";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "You should be cautious. Our tribe has respected the existence of you humans but...";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "I've taken a great risk in allowing you in here. So be wary.";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "Don't attract too much attention because that would make your people look bad.";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "Now, we don't need to talk much about this, so just go back where you came from.";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "Unless you have any messages for me...? Your face says you do...";
+ next;
+ switch(select("No. Nothing. We can talk later.:I intend to stay. For good reasons.")) {
+ case 1:
+ close;
+ case 2:
+ mes "[Splendide Guard]";
+ mes "Sir, I can drag this pest out right now.";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "No. Let's hear an explanation. Good? Now, if you want...";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "I have known that, recently, time has broken... so, you're here exploring for a solution, no?";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "Our tribe has respected you, so just forget about the searching and exploring around here.";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "I heard that you are to search for any treasure in the closed cave to the north.";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "That place is banned by order of the Laphine tribe. So, people can't just go there without permission.";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "If you can't follow this rule, I will stop associating with you and ban all of your people from here.";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "We still have an unstable relationship with the Sapha, we usually don't worry about outsiders.";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "Now, if you understand this, inform your friends.";
+ set ins_nyd,61;
+ close;
+ }
+ }
+ else if (ins_nyd == 61) {
+ mes "[Commander Lebiordirr]";
+ mes "If you can't follow this rule, I will stop associating with you and ban all of your people from here.";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "We still have an unstable relationship with the Sapha, we usually don't worry about outsiders.";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "Now, if you understand this, inform your friends.";
+ close;
+ }
+ else if (ins_nyd == 81) {
+ mes "[Commander Lebiordirr]";
+ mes "Why have you come back, outsider?";
+ next;
+ switch(select("To ask the Laphines about exploring...")) {
+ case 1:
+ mes "[Commander Lebiordirr]";
+ mes "Exploring what? Choose your words wisely?";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "Do we not understand each other? What do you want?";
+ next;
+ switch(select("I must explore the cave.")) {
+ case 1:
+ mes "[Commander Lebiordirr]";
+ mes "That means... that you are ignoring my warning? Is this your decision or are you just following orders?";
+ next;
+ switch(select("I'm just following orders")) {
+ case 1:
+ mes "[Commander Lebiordirr]";
+ mes "Are you trying to insult me on purpose, outsider?";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "Why do you want to explore? It better be a very good reason.";
+ next;
+ switch(select("It's about Dr. Magnifier's report...")) {
+ case 1:
+ mes "[Commander Lebiordirr]";
+ mes "So... What do I care about an outsider's report?";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "To protect the Yggdrasil! That's the Laphine's fate. Can you say that about yourself?";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "Do you have any proof of your birth with Odin and Yggdrasil's blessings?";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "I shouldn't say anymore. Please don't take this as being rude but, please go now!";
+ next;
+ switch(select("Then I'll ask the Sapha for help.")) {
+ case 1:
+ mes "[Commander Lebiordirr]";
+ mes "What are you talking about, outsider?";
+ next;
+ mes "[Splendide Guard]";
+ mes "Sir, I can get rid of this rude outsider if you wish?";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "No, wait... The Sapha tribesmen know the meaning of that place? Did you ask to associate with them?";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "Ah... How tricky... Are you testing us?";
+ next;
+ mes "[Splendide Guard]";
+ mes "Calm down, sir. I will throw this outsider into prison.";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "No... No, wait. Ok, I will accept it. I can accept your admission into the Holy Sekos.";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "Okay. If you are a servant of the Yggdrasil as you claim to be, I will allow you admission. But I am not responsible for your actions.";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "And make sure that if you find anything out of the ordinary in there, that you share it with us!";
+ next;
+ switch(select("But of course!")) {
+ case 1:
+ mes "[Commander Lebiordirr]";
+ mes "So... since I have agreed to allow your exploration... Arioss, help them, and take the results.";
+ next;
+ mes "[Aide Arioss]";
+ mes "Sir... are you sure? This is an invasion of the Holy Sekos...";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "Invasion is a harsh word. I am allowing them entrance. Better them than a dirty giant. It might just save our lives...";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "Here, outsider. Arioss will explain the situation with the giants. Talk with him...";
+ set ins_nyd,91;
+ close;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ else if ((ins_nyd == 91) || (ins_nyd == 101) || (ins_nyd == 111) || (ins_nyd == 200) || (ins_nyd == 201) || (ins_nyd == 202)) {
+ mes "[Commander Lebiordirr]";
+ mes "Outsider. Arioss here will explain the situation with the giants, talk with him...";
+ close;
+ }
+ else if ((ins_nyd == 72) || (ins_nyd == 82) || (ins_nyd == 92) || (ins_nyd == 102) || (ins_nyd == 112) || (ins_nyd == 122) || (ins_nyd == 132)) {
+ mes "[Commander Lebiordirr]";
+ mes "Welcome to the Laphine camp in Splendide, outsider... I am Lebiordirr. I am in charge here.";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "Be cautious of your actions. We already have lots of problems with the Sapha tribe as it is.";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "If you are cautious with your actions, I won't place any harm on you. Fare well.";
+ close;
+ }
+ else if (ins_nyd == 203) {
+ mes "[Commander Lebiordirr]";
+ mes "I was waiting for you. You came back safe, that's good news. Did you find anything?";
+ next;
+ switch(select("Explain about the guardian Nidhoggur's leave.")) {
+ case 1:
+ mes "[Commander Lebiordirr]";
+ mes "What? The Guardian is not in his nest...?";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "And because of his disppearance, the Guardian's Shadow is currently destorying the roots of the World Tree...?";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "That's unbelievable. You must be insulting the Guardian's and our pride. I did not provide you with our help for that.";
+ next;
+ mes "[Aide Arioss]";
+ mes "It's not like that, Commander, they speak the truth.";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "What are you saying? Arioss, do not forget your place as the Guardian's priest.";
+ next;
+ mes "[Aide Arioss]";
+ mes "Even though I have not seen it with my own eyes, this does explain why we lost communication with the great World Tree Yggdrasil.";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "Do not speak of His Highness, the World Tree Yggdrasil's name so lightly.";
+ next;
+ switch(select("Pass along World Tree Yggdrasil's words.")) {
+ case 1:
+ mes "[Commander Lebiordirr]";
+ mes "His Highness, the World Tree Yggdrasil, said that?";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "The reason behind all of this... is not because of the Sapha tribe, but because of the sudden leave of the Guardian? And the Guaridan has given up on his identity?";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "This must be reported... reported to the High Priest of Alfheim... Unbelievable.";
+ next;
+ mes "[Aide Arioss]";
+ mes "Commander... do we need to alert the rest of the tribe...?";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "You don't need to worry about this, Arioss. As commander, I will handle it. You just pretend nothing happened...";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "Strange one, thank you for your cooperation in such situations... Please forget what has happened today...";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "Arioss, please compensate this strange one for the help. I need to go rest...";
+ next;
+ mes "[Aide Arioss]";
+ mes "Commander...";
+ set ins_nyd,121;
+ close;
+ }
+ }
+ }
+ else if ((ins_nyd == 121) || (ins_nyd == 131)) {
+ mes "[Commander Lebiordirr]";
+ mes "Strange one, thank you for your cooperation in such situations... Please forget what has happened today...";
+ close;
+ }
+ else {
+ mes "[Commander Lebiordirr]";
+ mes "Welcome to the Laphine camp in Splendide, outsider... I am Lebiordirr. I am in charge here.";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "Be cautious of your actions. We already have lots of problems with the Sapha tribe as it is.";
+ next;
+ mes "[Commander Lebiordirr]";
+ mes "If you are cautious with your actions, I won't place any harm on you. Fare well.";
+ close;
+ }
+ }
+ else {
+ mes "[Commander Lebiordirr]";
+ mes "ThusDurnah Ra SharVeldIyaz U UorAmanDur Yee neaOsaAdor Yee...";
+ close;
+ }
+}
+
+spl_in01,104,56,3 script Aide Arioss#edq 437,3,3,{
+ if (isequipped(2782) == 1) {
+ if (ins_nyd == 91) {
+ mes "[Aide Arioss]";
+ mes "Sigh, since it's Commander Lebiordirr's wish, I will cooperate with you...";
+ next;
+ mes "[Aide Arioss]";
+ mes "You want to go there to find out exactly what that place is?";
+ next;
+ mes "[Aide Arioss]";
+ mes "Alright...it's as you have assumed, a place connecting to the World Tree. It's also the Guardian's Nest.";
+ next;
+ switch(select("Guardian's Nest?")) {
+ case 1:
+ mes "[Aide Arioss]";
+ mes "Yes, that's the nest of Nidhoggur, the Guardian of the World Tree...";
+ next;
+ mes "[Aide Arioss]";
+ mes "Only a marked guardian's servant from the Laphine tribe is allowed to enter.";
+ next;
+ mes "[Aide Arioss]";
+ mes "That place was initially closed off from the public, but then the giants of the Sapha tribe turned things around...";
+ next;
+ mes "[Aide Arioss]";
+ mes "To obtain more minerals, they started to dig with madness.";
+ next;
+ mes "[Aide Arioss]";
+ mes "In the end, they have harmed a part of the World Tree's root that lies very close to their mine, and thus, the World Tree became very ill.";
+ next;
+ mes "[Aide Arioss]";
+ mes "After we have arrived here knowing the facts, the World Tree was already in a very bad state due to the many factories built by the Sapha tribe.";
+ next;
+ mes "[Aide Arioss]";
+ mes "Even though, for a long time, we have been attacking the Sapha tribe, trying to force them to leave, they are not so easily defeated, leading to this stalemate.";
+ next;
+ mes "[Aide Arioss]";
+ mes "During this time, your people have travelled through the space-time gap to this land.";
+ next;
+ mes "[Aide Arioss]";
+ mes "Because of those many unexpected reasons, the Guardian's nest, which was meant to stay hidden deep underground, has been discovered by your race...";
+ next;
+ mes "[Aide Arioss]";
+ mes "Now you understand how serious this situation is. Because of the Sapha tribe, we are no longer able to approach the Guardian, and seek his teachings of wisdom.";
+ next;
+ mes "[Aide Arioss]";
+ mes "It's very insulting to our pride... but if you can help us enter that place again, and speak to the Guardian, maybe we can find a solution...";
+ next;
+ mes "[Aide Arioss]";
+ mes "Then we'll leave it to you. As for your request, I will do my best to cooperate.";
+ next;
+ mes "[Aide Arioss]";
+ mes "I have already told you what you wanted to know... If you need anything else, just let me know.";
+ set ins_nyd,101;
+ close;
+ }
+ }
+ else if (ins_nyd == 101) {
+ mes "[Aide Arioss]";
+ mes "Ah, you said that there is a strange power blocking the entrance to the Guardian's nest, right?";
+ next;
+ mes "[Aide Arioss]";
+ mes "That's because only the ones chosen by the Guardian may enter.";
+ next;
+ mes "[Aide Arioss]";
+ mes "We have been the Guardian's servants for generations, and have been protecting the World Tree ever since.";
+ next;
+ mes "[Aide Arioss]";
+ mes "Before we were captured and brought here, there were 3 servants including me. Our task was to heal the World Tree.";
+ next;
+ mes "[Aide Arioss]";
+ mes "One was killed in our last war with the Sapha tribe... and the other has been taken captive.";
+ next;
+ mes "[Aide Arioss]";
+ mes "I will give you my proof. Don't worry, I'm just temporarily marking you as a guardian's servant.";
+ specialeffect2 EF_HOLYHIT;
+ next;
+ mes "[Aide Arioss]";
+ mes "Also, remember this spell, it's needed to open the gate of the Guardian.";
+ next;
+ mes "[Aide Arioss]";
+ mes "AnomarDu Ha OdesUdenVer Ie ";
+ next;
+ mes "[Aide Arioss]";
+ mes "remuAlaAsh Mu ModtasAn Yu Dur";
+ next;
+ mes "[Aide Arioss]";
+ mes "TalsehrDur So CyaReMush Di DielAlaWos Ie RuffserIman Ie ";
+ next;
+ mes "[Aide Arioss]";
+ mes "Go find the fairy guarding the gate, and say this spell.";
+ next;
+ mes "[Aide Arioss]";
+ mes "The proof and the spell will confirm that you are one of the Guardian's servants.";
+ next;
+ mes "[Aide Arioss]";
+ mes "Please meet the Guardian, and come back with an answer to everything. I believe in you.";
+ set ins_nyd,111;
+ close;
+ }
+ else if ((ins_nyd == 101) || (ins_nyd == 111) || (ins_nyd == 200) || (ins_nyd == 201) || (ins_nyd == 202)) {
+ mes "[Aide Arioss]";
+ mes "Please meet with the Guardian and take a wise answer from him. I will trust you.";
+ close;
+ }
+ else if ((ins_nyd == 72) || (ins_nyd == 82) || (ins_nyd == 92) || (ins_nyd == 102) || (ins_nyd == 112)) {
+ mes "[Aide Arioss]";
+ mes "... ...";
+ next;
+ mes "Not even caring about this a single bit? What a stupid woman...";
+ close;
+ }
+ else if (ins_nyd == 121) {
+ mes "[Aide Arioss]";
+ mes "Things have actually become like this... as priests of the Guardian, it's our responsibility...";
+ next;
+ mes "[Aide Arioss]";
+ mes "I represent the entire Laphine tribe, and show you our gratitude. This must all be very hard for our commander...";
+ next;
+ mes "[Aide Arioss]";
+ mes "It can't compare with the effort you have put in for us... but please accept our token of friendship.";
+ getexp 1500000,350000;
+ getitem 6081,10; //Splendide_Coin
+ set ins_nyd,131;
+ mes "[Aide Arioss]";
+ mes "If we can help you with anything in the future, we will do all we can to assist you. Once again, thank you.";
+ close;
+ }
+ else if (ins_nyd == 131) {
+ mes "[Aide Arioss]";
+ mes "If we can help you with anything in the future, we will do all we can to assist you. Once again, thank you.";
+ close;
+ }
+ else {
+ mes "[Aide Arioss]";
+ mes "... ...";
+ next;
+ mes "Never give attention to... um... a blunt woman...";
+ close;
+ }
+ }
+ else {
+ mes "[Aide Arioss]";
+ mes "AmanVilShar Ie DorLuShar Mu Re";
+ close;
+ }
+}
+
+spl_in01,110,21,0 script trap#s_edq -1,10,10,{
+OnTouch_:
+ if ((isequipped(2782) == 1) && (ins_nyd == 51)) {
+ mes "[Splendide Guard]";
+ mes "That man is currently under arrest.";
+ next;
+ mes "[Splendide Guard]";
+ mes "You'd better behave, Aide Arioss says that different races shall be treated the same way.";
+ warp "spl_in01",109,58;
+ close;
+ }
+ end;
+}
+
+spl_in01,101,52,5 script Splendide Guard#1_edq 447,1,1,{
+ if (isequipped(2782) == 1) {
+ mes "[Splendide Guard]";
+ mes "This is the Splendide office. Don't act impolitely.";
+ close;
+ }
+ else {
+ mes "[Splendide Guard]";
+ mes "ThusDurnah Ra SharVeldIyaz U UorAmanDur Yee neaOsaAdor Yee ";
+ close;
+ }
+}
+
+spl_in01,118,52,3 script Splendide Guard#2_edq 447,1,1,{
+ if (isequipped(2782) == 1) {
+ mes "[Splendide Guard]";
+ mes "This is the Splendide office. Don't act impolitely.";
+ close;
+ }
+ else {
+ mes "[Splendide Guard]";
+ mes "ThusDurnah Ra SharVeldIyaz U UorAmanDur Yee neaOsaAdor Yee ";
+ close;
+ }
+}
+
+man_in01,311,57,3 script Neat Etorr#edq 453,3,3,{
+ if (isequipped(2782) == 1) {
+ if (ins_nyd == 52) {
+ mes "[Neat Etorr]";
+ mes "Guest from the other world, please excuse our rudeness...";
+ next;
+ mes "[Neat Etorr]";
+ mes "As the leader of the Sapha tribe, I have something very important to tell you. That is why I asked for you...";
+ next;
+ mes "[Neat Etorr]";
+ mes "Your race has come to this land not long ago through the space-time gap.";
+ next;
+ mes "[Neat Etorr]";
+ mes "You should have already seen what is going on. We have been at war with the Laphine tribe for a very long time.";
+ next;
+ mes "[Neat Etorr]";
+ mes "Recently, because you do not understand the current situations, you have done some things that I, as a leader, can't ignore any longer.";
+ next;
+ mes "[Neat Etorr]";
+ mes "I hope that your people will becareful of your actions on this land, and terminate any unnecessary interventions.";
+ next;
+ switch(select("Leave quietly.:Don't know what he's talking about, and ask for details.")) {
+ case 1:
+ close;
+ case 2:
+ mes "[Manuk Field Elite Soldier]";
+ mes "Are we really just letting these people go after they have stirred up problems on our land?";
+ next;
+ mes "[Neat Etorr]";
+ mes "After what happened, I don't think they know what else they can do. Let me explain.";
+ next;
+ mes "[Neat Etorr]";
+ mes "For now, we have acknowledged your race, and have been tolerant towards your activities.";
+ next;
+ mes "[Neat Etorr]";
+ mes "But we have recently started to suspect you of being the Laphine tribe's eyes and ears.";
+ next;
+ mes "[Neat Etorr]";
+ mes "Not long ago, We have heard that you have found remains in an abandoned cave in the north, and have been conducting investigations and researches regarding it.";
+ next;
+ mes "[Neat Etorr]";
+ mes "We have captured a Laphine tribe priest during the last war, and we have heard that you have had contact with said captive.";
+ next;
+ mes "[Neat Etorr]";
+ mes "That captive is the only reference for our tribe, so we have taken good care of her. She is related to your current investigation.";
+ next;
+ mes "[Neat Etorr]";
+ mes "For your people, who have no direct connections, it is not a place satisfy your curiosity. I hope that you stop your investigations, and mind your own business.";
+ next;
+ mes "[Neat Etorr]";
+ mes "If you don't accept our request, then do not expect any cooperations between our races in the future.";
+ next;
+ mes "[Neat Etorr]";
+ mes "Because of the war against the Laphine tribe, everything is a mess. But even then, we cannot allow a foreign race to interfere.";
+ next;
+ mes "[Neat Etorr]";
+ mes "You have heard it all, now please report back to your race.";
+ set ins_nyd,62;
+ close;
+ }
+ }
+ else if (ins_nyd == 62) {
+ mes "[Neat Etorr]";
+ mes "That captive is the only reference for our tribe, so we have taken good care of her. She is related to your current investigation.";
+ next;
+ mes "[Neat Etorr]";
+ mes "For your people, who have no direct connections, it is not a place to satisfy your curiosity. I hope that you stop your investigations, and mind your own business.";
+ next;
+ mes "[Neat Etorr]";
+ mes "If you don't accept our request, then do not expect any cooperations between our races in the future.";
+ close;
+ }
+ else if (ins_nyd == 72) {
+ mes "[Neat Etorr]";
+ mes "Recently, because you do not understand the current situations, you have done some things that I, as a leader, can't ignore any longer.";
+ next;
+ mes "[Neat Etorr]";
+ mes "I hope that your people will becareful of your actions on this land, and terminate any unnecessary interventions.";
+ close;
+ }
+ else if (ins_nyd == 82) {
+ mes "[Neat Etorr]";
+ mes "Do you need me for something, strange one?";
+ next;
+ switch(select("Received invitation from the Sapha tribe to cooperate and investigate.")) {
+ case 1:
+ mes "[Neat Etorr]";
+ mes "Cooperate and investigate? What do you mean?";
+ next;
+ mes "[Neat Etorr]";
+ mes "It seems like you did not understand what I said. What are you thinking?";
+ next;
+ switch(select("Please allow me to investigate the cave.")) {
+ case 1:
+ mes "[Neat Etorr]";
+ mes "From what I can tell, you are disrespecting my request. Is this your intention, or your people's intention?";
+ next;
+ switch(select("It's our intention.")) {
+ case 1:
+ mes "[Neat Etorr]";
+ mes "Ah, it is not an easy decision. You frighten me.";
+ next;
+ mes "[Neat Etorr]";
+ mes "But may I ask why you want to do this?";
+ next;
+ switch(select("Explain Professor Magnifier's theory.")) {
+ case 1:
+ mes "[Neat Etorr]";
+ mes "It's surprising that you are able to obtain such results. We also have a similar theory.";
+ next;
+ mes "[Neat Etorr]";
+ mes "At least we also think that we must use the Laphine prisoner to get information.";
+ next;
+ mes "[Neat Etorr]";
+ mes "This problem has been the root of our conflicts with the Laphine tribe. Of course, it may also be an opportunity to resolve them.";
+ next;
+ mes "[Neat Etorr]";
+ mes "Therefore, it's more of a reason to depend on our own powers. There is no room for you to interfere. Please give up.";
+ next;
+ switch(select("Give up request, and ask Laphine tribe for help instead.")) {
+ case 1:
+ mes "[Manuk Field Elite Soldier]";
+ mes "You finally showed your true face. I knew you were a spy from the Laphine tribe!";
+ next;
+ mes "[Neat Etorr]";
+ mes "Ah...you'd go as far as saying that. What good will it do for you, helping the Laphine tribe?";
+ next;
+ mes "[Neat Etorr]";
+ mes "Those obnoxious dwarves offended our right of living, and are trying to get rid of us.";
+ next;
+ mes "[Neat Etorr]";
+ mes "The reason we don't allow anyone to enter that site is because it's full of suspicions.";
+ next;
+ mes "[Neat Etorr]";
+ mes "Alright, I'll approve of your request, and let you investigate the secret the Laphine tribe has hidden inside the cave.";
+ next;
+ mes "[Neat Etorr]";
+ mes "If you promise to share all of your research results and findings, we will accept your request.";
+ next;
+ switch(select("Of course.")) {
+ case 1:
+ mes "[Neat Etorr]";
+ mes "Alright, from now on, we will cooperate with you, and allow you to directly communicate with the Laphine prisoner.";
+ next;
+ mes "[Manuk Field Elite Soldier]";
+ mes "Commander...are you sure of this? We don't even know if they're friend or foe...";
+ next;
+ mes "[Neat Etorr]";
+ mes "With just our powers, it's impossible to figure out what the Laphine is up to. I think the past has proven that.";
+ next;
+ mes "[Neat Etorr]";
+ mes "What they're doing right now could potentially lead us to a solution.";
+ next;
+ mes "[Neat Etorr]";
+ mes "Strange one, we hope our cooperation will be a good one. Now please go interrogate the Laphine prisoner.";
+ set ins_nyd,92;
+ close;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ else if ((ins_nyd == 92) || (ins_nyd == 102) || (ins_nyd == 112) || (ins_nyd == 200) || (ins_nyd == 201) || (ins_nyd == 202)) {
+ mes "[Neat Etorr]";
+ mes "Strange one, we hope our cooperation will be a good one. Now please go interrogate the Laphine prisoner.";
+ close;
+ }
+ else if ((ins_nyd == 71) || (ins_nyd == 81) || (ins_nyd == 91) || (ins_nyd == 101) || (ins_nyd == 111) || (ins_nyd == 121) || (ins_nyd == 131)) {
+ mes "[Neat Etorr]";
+ mes "Outsider. Welcome to Manuk, the village of the Sapha. I am its representative, Neat Etorr.";
+ next;
+ mes "[Neat Etorr]";
+ mes "We are just a small village, nothing special... but rest comfortably.";
+ close;
+ }
+ else if (ins_nyd == 203) {
+ mes "[Neat Etorr]";
+ mes "I was waiting for you. It's good that you're safe. Did you find anything?";
+ next;
+ switch(select("Explain the sudden leave of the Guardian.")) {
+ case 1:
+ mes "[Neat Etorr]";
+ mes "So... that's the nest of the Guardian of the World Tree, the sacred grounds for the Laphine tribe.";
+ next;
+ mes "[Neat Etorr]";
+ mes "But because of the angry leave of the Guardian, his shadow is wreaking havoc on the World Tree?";
+ next;
+ mes "[Neat Etorr]";
+ mes "If what you're saying is true, then there is no more reason for us to continue fighting the Laphine tribe...";
+ next;
+ mes "[Neat Etorr]";
+ mes "What a huge discovery... So Nidhoggur is no longer the Guardian of the World Tree...?";
+ next;
+ mes "[Neat Etorr]";
+ mes "Nidhoggur's Shadow came to exist in this world, and harmed the roots of the World Tree... what a disaster.";
+ next;
+ switch(select("Pass along the World Tree Yggdrasil's message.")) {
+ case 1:
+ mes "[Neat Etorr]";
+ mes "Is that what the priest of the Guardian said?";
+ next;
+ mes "[Neat Etorr]";
+ mes "From now on, we need to talk about this with the Laphine tribe.";
+ next;
+ mes "[Neat Etorr]";
+ mes "But of course...we don't know if they're reasonable enough...hehe.";
+ next;
+ mes "[Neat Etorr]";
+ mes "This is all we needed from you...What is left is business between us and the Laphine tribe.";
+ next;
+ mes "[Neat Etorr]";
+ mes "Thank you for helping us with such a huge problem. You may forget about it now.";
+ next;
+ mes "[Neat Etorr]";
+ mes "It's not a lot, but please this as a token of our appreciation.";
+ getexp 1500000,350000;
+ getitem 6080,10; //Manuk_Coin
+ set ins_nyd,132;
+ close;
+ }
+ }
+ }
+ else if (ins_nyd == 132) {
+ mes "[Neat Etorr]";
+ mes "Strange one, thank you for helping us in the time of need. I will never forget your kindness.";
+ close;
+ }
+ else {
+ mes "[Neat Etorr]";
+ mes "Outsider. Welcome to the Manuk village of Sapha. I am its representative, Neat Etorr.";
+ next;
+ mes "[Neat Etorr]";
+ mes "We are just a small village, nothing special... but rest comfortably.";
+ close;
+ }
+ }
+ else {
+ mes "[Neat Etorr]";
+ mes "Tkeh likek Ohek QekhlHkl PkedlioH.";
+ close;
+ }
+}
+
+man_in01,286,61,5 script Manuk Guard#1_edq 450,1,1,{
+ if (isequipped(2782) == 1) {
+ mes "[Manuk Guard]";
+ mes "I'm guarding this Laphine prisoner. Leave me alone.";
+ close;
+ }
+ else {
+ mes "[Manuk Guard]";
+ mes "Klekod Oi Thekd Pheid Okei.";
+ close;
+ }
+}
+
+man_in01,295,61,3 script Manuk Guard#2_edq 450,1,1,{
+ if (isequipped(2782) == 1) {
+ mes "[Manuk Guard]";
+ mes "I'm guarding this Laphine prisoner. Leave me alone.";
+ close;
+ }
+ else {
+ mes "[Manuk Guard]";
+ mes "Liek QUekdk Ohei Vue.";
+ close;
+ }
+}
+
+man_in01,291,62,3 script Laphine Prisoner#edq 437,3,3,{
+ if (isequipped(2782) == 1) {
+ if (ins_nyd == 5) {
+ mes "[Laphine Prisoner]";
+ mes "You... are not of the Sapha tribe... Are you... an outsider?";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "Have you ever come in contact with the Laphine tribe? Have you ever been to Splendide?";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "Please, talk to my people in Splendide. They will come to help me.";
+ next;
+ switch(select("What happened to you?:What's in the cave to the north?:Tell me about your tribe.:I will leave you alone.")) {
+ case 1:
+ mes "[Laphine Prisoner]";
+ mes "During out last battle with the Sapha tribe... they caught me and took me prisoner.";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "The Sapha tribe attacked first. They are destroying the World Tree.";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "That's why the war started. But I don't want to fight with the Sapha tribe anymore...";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "If it wasn't for that... I wouldn't survive here...";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "Please. Bring this news to all of Splendide. Send someone to save me... or they might kill me.";
+ close;
+ case 2:
+ mes "[Laphine Prisoner]";
+ mes "There is...";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "No... I can't tell you... It's the secret of our tribe...";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "I just want to say this...if the Sapha tribe intrude that place, we will never forgive them!";
+ set ins_nyd,52;
+ close;
+ case 3:
+ mes "[Laphine Prisoner]";
+ mes "The Laphines have protected the Yggdrasil World Tree for generations.";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "We live in a... different time, different land... we came for an expedition.";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "After we received reports from our spy about the World Tree's strange symptoms, we recgnized the Manuk's existence.";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "They are mining metal, and in so doing, destroying the World Tree's roots...";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "So we dispatched an expedition here. Soonafter, the war with the Sapha began...";
+ close;
+ case 4:
+ close;
+ }
+ }
+ else if (ins_nyd == 92) {
+ mes "[Laphine Prisoner]";
+ mes "The sapha tribe went as far as cooperating with an unknown race?";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "What is your purpose? Why do you want to know what that place is?";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "lright...it's as you have assumed, a place connecting to the World Tree. It's also the Guardian's Nest.";
+ next;
+ switch(select("Guardian's Nest?")) {
+ case 1:
+ mes "[Laphine Prisoner]";
+ mes "Yes, that's the nest of Nidhoggur, the Guardian of the World Tree...";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "Only a marked guardian's servant from the Laphine tribe is allowed to enter.";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "That place was initially closed off from the public, but then the giants of the Sapha tribe turned things around...";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "To obtain more minerals, they started to dig with madness.";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "In the end, they have harmed a part of the World Tree's root that lies very close to their mine, and thus, the World Tree became very ill.";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "After we have arrived here knowing the facts, the World Tree was already in a very bad state due to the many factories built by the Sapha tribe.";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "Even though, for a long time, we have been attacking the Sapha tribe, trying to force them to leave, they are not so easily defeated, leading to this stalemate.";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "During this time, your people have travelled through the space-time gap to this land.";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "Because of those many unexpected reasons, the Guardian's nest, which was meant to stay hidden deep underground, has been discovered by your race...";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "Now you understand how serious this situation is. Because of the Sapha tribe, we are no longer able to approach the Guardian, and seek his teachings of wisdom.";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "Hmph...even if I don't cooperate, I know you will find other means to get in...";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "Looking at the current situation of the Laphine tribe, we do not have enough power to surround the Manuk fields, and chase the giants away.";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "Okay, if it has already become like this, I will help you. There are no dead-ends. If you keep going, you will find a solution.";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "Even if I don't say anything, my situation will not change.";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "I have already told you everything you wanted to hear. If you have any other requests, please let me know.";
+ set ins_nyd,102;
+ close;
+ }
+ }
+ else if (ins_nyd == 102) {
+ mes "[Laphine Prisoner]";
+ mes "Ah, you said that there is a strange power blocking the entrance to the Guardian's nest, right?";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "That's because only the ones chosen by the Guardian may enter.";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "We have been the Guardian's servants for generations, and have been protecting the World Tree ever since.";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "Before we were captured and brought here, there were 3 servants including me. Our task was to heal the World Tree.";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "One was killed in our last war with the Sapha tribe...and I have been taken captive.";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "I will give you my proof. Don't worry, I'm just temporarily marking you as a guardian's servant.";
+ specialeffect2 EF_HOLYHIT;
+ next;
+ mes "[Laphine Prisoner]";
+ mes "Also, remember this spell, it's needed to open the gate of the Guardian.";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "AnomarDu Ha OdesUdenVer Ie ";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "remuAlaAsh Mu ModtasAn Yu Dur";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "TalsehrDur So CyaReMush Di DielAlaWos Ie RuffserIman Ie ";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "Go find the fairy guarding the gate, and say this spell.";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "he proof and the spell will confirm that you are one of the Guardian's servants.";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "Please meet the Guardian, and come back with an answer to everything. And tell the answer to...";
+ set ins_nyd,112;
+ close;
+ }
+ else if ((ins_nyd == 71) || (ins_nyd == 81) || (ins_nyd == 91) || (ins_nyd == 101) || (ins_nyd == 111) || (ins_nyd == 121) || (ins_nyd == 131)) {
+ mes "[Laphine Prisoner]";
+ mes "... ...";
+ next;
+ mes "[Manuk Guard]";
+ mes "Hey, outsider! Step away from the prisoner!";
+ close;
+ }
+ else if (ins_nyd == 112) {
+ mes "[Laphine Prisoner]";
+ mes "Please meet the Guardian, and come back with an answer to everything. And tell the answer to...";
+ close;
+ }
+ else if (ins_nyd == 132) {
+ mes "[Laphine Prisoner]";
+ mes "Yes...I heard your conversation with the Sapha tribe...";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "If our tribe were to really trust in the Sapha tribe...I don't know.";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "Our hatred towards them has already reached an abnormal level...";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "Those giants...can they really be trusted?";
+ next;
+ mes "[Laphine Prisoner]";
+ mes "It's...it's better if you don't believe the one called Etorr...the minds of the Sapha tribe is unpredictable.";
+ close;
+ }
+ else {
+ mes "[Laphine Prisoner]";
+ mes "... ...";
+ next;
+ mes "[Manuk Guard]";
+ mes "Hey, outsider! Step away from the prisoner!";
+ close;
+ }
+ }
+ else {
+ mes "[Laphine Prisoner]";
+ mes "AmanVilShar Ie DorLuShar Mu Re";
+ close;
+ }
+}
+
+man_in01,282,42,0 script trap#edq2 -1,10,10,{
+OnTouch_:
+ if ((isequipped(2782) == 1) && (ins_nyd == 52)) {
+ mes "[Manuk Field Elite Soldier]";
+ mes "This is Neat Etorr's order. Please come with us to see him.";
+ next;
+ mes "[Manuk Field Elite Soldier]";
+ mes "Bring him to Neat Etorr. All soldiers be prepared.";
+ warp "man_in01",311,54;
+ close;
+ }
+ end;
+}
+
+// First floor
+1@nyd,213,277,5 script Murdered Yggdrasilid#1F 437,5,5,{
+ if ('ins_nyd2 == 0) {
+ mes "When a faint light enters your heart, a voice sounds in your head.";
+ next;
+ mes "[World Tree World Tree Yggdrasil]";
+ mes "It's all over... servants of the Guardian... Hurry up and leave this place.";
+ next;
+ while (1) {
+ switch(select("Who are you?:What do you mean?")) {
+ case 1:
+ mes "[World Tree World Tree Yggdrasil]";
+ mes "I... I am the World Tree Yggdrasil, servant of the Guardian of Nidhoggur, as well as the High Priest leading the Laphine Tribe.";
+ next;
+ mes "[World Tree World Tree Yggdrasil]";
+ mes "So you're not priestess of the Laphine Tribe... How did you get in? No, there's no time to answer that.";
+ next;
+ mes "[World Tree World Tree Yggdrasil]";
+ mes "Hurry... and leave... leave this place before it's too late.";
+ next;
+ break;
+ case 2:
+ mes "[World Tree World Tree Yggdrasil]";
+ mes "The guardian... something's wrong with the guardian. I don't know what made him like this.";
+ next;
+ mes "[World Tree World Tree Yggdrasil]";
+ mes "This... this is no longer the nest of the Guardian of the World Tree Yggdrasil.";
+ next;
+ mes "[World Tree Yggdrasil]";
+ mes "Darkness took over the Guardian and destroyed all living things... now this place has become the cursed home of monsters.";
+ next;
+ mes "[World Tree Yggdrasil]";
+ mes "Now the vile Nidhoggur's Shadow is wreaking havoc here...";
+ next;
+ mes "[World Tree Yggdrasil]";
+ mes "Now's not too late, hurry and get out... tell the Laphine Tribe about this... tell the commanders of Alfheim...";
+ next;
+ mes "[World Tree Yggdrasil]";
+ mes "My soul... it has been trapped here. You're the only ones I can trust now.";
+ next;
+ set .@exit,1;
+ }
+ if (.@exit) break;
+ }
+ switch(select("Nidhoggur's Shadow?")) {
+ case 1:
+ mes "[World Tree Yggdrasil]";
+ mes "The Guardian Nidhoggur... he's not in the nest.";
+ next;
+ mes "[World Tree Yggdrasil]";
+ mes "He...for some reason abandoned his own shadow, and left.";
+ next;
+ mes "[World Tree Yggdrasil]";
+ mes "All that's left, is the ugly Shadow of the Guardian of Nidhoggur...the Shadow that is going mad.";
+ next;
+ mes "[World Tree Yggdrasil]";
+ mes "The Shadow sucked all the nutrients from the World Tree Yggdrasil, and has gone mad when there is nothing more left to obtain. Now, he wants this land.";
+ next;
+ mes "[World Tree Yggdrasil]";
+ mes "Once the ugly Shadow leaves here to steal power from the other World Yggdrasil Trees, there will be great destruction. This world will become hell.";
+ next;
+ mes "[World Tree Yggdrasil]";
+ mes "You must... tell the commanders of Alfheim about this, and come up with a plan. Only them...";
+ next;
+ switch(select("Is there nothing else we can do?")) {
+ case 1:
+ mes "[World Tree Yggdrasil]";
+ mes "With our current powers...it is impossible to defeat the Guardian.";
+ next;
+ mes "[World Tree Yggdrasil]";
+ mes "But the one going mad is not the Guardian, but his dark Shadow...maybe we can trap him here...";
+ next;
+ mes "[World Tree Yggdrasil]";
+ mes "Are you willing to accept this mission? Even if it means to pay with your life?";
+ next;
+ switch(select("Leave it to us.:We can't do it.")) {
+ case 1:
+ if (getpartyleader(getcharid(1),2) == getcharid(0)) {
+ mes "[World Tree Yggdrasil]";
+ mes "I thank you deeply for your decision. I will use what is left of my powers to open up the path towards the Guardian's Nest.";
+ next;
+ mes "[World Tree Yggdrasil]";
+ mes "The path to the Guardian's Nest is just past the waterfall by the large World Tree Yggdrasil to the North. The defensive mechanisms of the Sanctuary will start immediately.";
+ next;
+ mes "[World Tree Yggdrasil]";
+ mes "Defeat all of Nidhoggur's guardians and go through the waterfall into the nest... and stop Nidhoggur's Shadow there.";
+ next;
+ mes "[World Tree Yggdrasil]";
+ mes "The gate will open soon. Go defeat all of the guardians... you must kill them all in 30 minutes before the gate opens...";
+ next;
+ mes "[World Tree Yggdrasil]";
+ mes "30 minutes... that's the limit of my powers. Please hurry.";
+ next;
+ mes "[World Tree Yggdrasil]";
+ mes "And... Be careful... Be careful of the shadow's power.";
+ set 'ins_nyd2,1;
+ donpcevent instance_npcname("ins_nyd_1f_timer", instance_id())+"::OnEnable";
+ donpcevent instance_npcname("nyd_call_mon_1", instance_id())+"::OnEnable";
+ close;
+ }
+ else {
+ mes "[World Tree Yggdrasil]";
+ mes "I thank you deeply for your decision. I will use what is left of my powers to open up the path towards the Guardian's Nest.";
+ next;
+ mes "[World Tree Yggdrasil]";
+ mes "The path to the Guardian's Nest is just past the waterfall by the large World Tree Yggdrasil to the North. The defensive mechanisms will start immediately.";
+ next;
+ mes "[World Tree Yggdrasil]";
+ mes "Defeat all of Nidhoggur's guardians and go through the waterfall into the nest... and stop Nidhoggur's Shadow there.";
+ next;
+ mes "[World Tree Yggdrasil]";
+ mes "The gate will open soon. Go defeat all of the guardians... you must kill them all in 30 minutes before the gate opens...";
+ next;
+ mes "[World Tree Yggdrasil]";
+ mes "30 minutes... that's the limit of my powers. Please hurry.";
+ next;
+ mes "[World Tree Yggdrasil]";
+ mes "And... Be careful... Be careful of the shadow's power.";
+ close;
+ }
+ case 2:
+ close;
+ }
+ }
+ }
+ }
+ else if ('ins_nyd2 == 1) {
+ mes "[World Tree Yggdrasil]";
+ mes "The path to the Guardian's Nest is just past the waterfall by the large World Tree Yggdrasil to the North. The defensive mechanisms will start immediately.";
+ next;
+ mes "[World Tree Yggdrasil]";
+ mes "Defeat all of Nidhoggur's guardians and go through the waterfall into the nest... and stop Nidhoggur's Shadow there.";
+ next;
+ mes "[World Tree Yggdrasil]";
+ mes "The gate will open soon. Go defeat all of the guardians.";
+ close;
+ }
+ else if ('ins_nyd2 == 2) {
+ mes "[World Tree Yggdrasil]";
+ mes "The path to the Guardian's Nest is just past the waterfall by the large World Tree Yggdrasil to the North.";
+ next;
+ mes "[World Tree Yggdrasil]";
+ mes "Use your powers... and destroy the vile Shadow...";
+ next;
+ mes "[World Tree Yggdrasil]";
+ mes "This is.. all I can do for you...";
+ close;
+
+ }
+ else {
+ mes "[World Tree Yggdrasil]";
+ mes "Those who want to taint the sacred Sanctuary of the Guardian... Get out.";
+ warp "mid_camp",100,100;
+ }
+ end;
+
+OnTouch:
+ if ('ins_nyd2 == 0) {
+ mes "What's a woman from the Laphine Tribe doing here...";
+ next;
+ mes "What's happening? Let's go check it out.";
+ close;
+ }
+ end;
+}
+
+1@nyd,1,1,0 script nyd_call_mon_1 -1,{
+OnInstanceInit:
+ enablenpc instance_npcname("nyd_call_mon_1", instance_id());
+ end;
+
+OnEnable:
+ monster "1@nyd",220,250,"Nidhoggur's Guardian#1",2020,1,instance_npcname("nyd_call_mon_1", instance_id())+"::OnMyMobDead";
+ monster "1@nyd",220,252,"Nidhoggur's Guardian#2",2020,1,instance_npcname("nyd_call_mon_1", instance_id())+"::OnMyMobDead";
+ monster "1@nyd",240,270,"Nidhoggur's Guardian#3",2020,1,instance_npcname("nyd_call_mon_1", instance_id())+"::OnMyMobDead";
+ monster "1@nyd",240,272,"Nidhoggur's Guardian#4",2020,1,instance_npcname("nyd_call_mon_1", instance_id())+"::OnMyMobDead";
+ monster "1@nyd",200,200,"Nidhoggur's Guardian#5",2020,1,instance_npcname("nyd_call_mon_1", instance_id())+"::OnMyMobDead";
+ monster "1@nyd",210,210,"Nidhoggur's Guardian#6",2020,1,instance_npcname("nyd_call_mon_1", instance_id())+"::OnMyMobDead";
+ monster "1@nyd",225,265,"Nidhoggur's Guardian#7",2021,1,instance_npcname("nyd_call_mon_1", instance_id())+"::OnMyMobDead";
+ monster "1@nyd",225,270,"Nidhoggur's Guardian#8",2021,1,instance_npcname("nyd_call_mon_1", instance_id())+"::OnMyMobDead";
+ monster "1@nyd",245,235,"Nidhoggur's Guardian#9",2021,1,instance_npcname("nyd_call_mon_1", instance_id())+"::OnMyMobDead";
+ monster "1@nyd",255,255,"Nidhoggur's Guardian#10",2021,1,instance_npcname("nyd_call_mon_1", instance_id())+"::OnMyMobDead";
+ monster "1@nyd",225,245,"Nidhoggur's Guardian#11",2021,1,instance_npcname("nyd_call_mon_1", instance_id())+"::OnMyMobDead";
+ monster "1@nyd",230,280,"Nidhoggur's Guardian#12",2021,1,instance_npcname("nyd_call_mon_1", instance_id())+"::OnMyMobDead";
+ instance_announce 0, "Nidhoggur's Guardian : Protect the Guardian's Sanctuary. Get rid of the intruders.",bc_map,"0x00ff99";
+ end;
+
+OnDisable:
+ killmonster "1@nyd",instance_npcname("nyd_call_mon_1", instance_id())+"::OnMyMobDead";
+ disablenpc instance_npcname("nyd_call_mon_1", instance_id());
+ end;
+
+OnMyMobDead:
+ set .@mob_dead_num,mobcount("1@nyd", instance_npcname("nyd_call_mon_1", instance_id())+"::OnMyMobDead");
+ if (.@mob_dead_num < 1) {
+ instance_announce 0, "All of Nidhoggur's Guardians have been defeated!",bc_map,"0x00ff99";
+ donpcevent instance_npcname("ins_nyd_1f_timer", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_to2f_warp", instance_id())+"::OnEnable";
+ set 'ins_nyd2,2;
+ }
+ end;
+}
+
+1@nyd,1,2,0 script ins_nyd_1f_timer -1,{
+
+OnInstanceInit:
+ disablenpc instance_npcname("ins_nyd_1f_timer", instance_id());
+ end;
+
+OnEnable:
+ enablenpc instance_npcname("ins_nyd_1f_timer", instance_id());
+ initnpctimer;
+ end;
+
+OnDisable:
+ disablenpc instance_npcname("ins_nyd_1f_timer", instance_id());
+ stopnpctimer;
+ killmonsterall "1@nyd";
+ end;
+
+OnTimer900000:
+ instance_announce 0, "World Tree Yggdrasil : There's not much time left. Please hurry.",bc_map,"0xFFFF00";
+ end;
+
+OnTimer1200000:
+ instance_announce 0, "World Tree Yggdrasil : My powers are slowly disappearing. Please hurry.",bc_map,"0xFFFF00";
+ end;
+
+OnTimer1500000:
+ instance_announce 0, "World Tree Yggdrasil : I'm... almost at my limit... please hurry up." ,bc_map,"0xFFFF00";
+ end;
+
+OnTimer1800000:
+ instance_announce 0, "World Tree Yggdrasil : You've failed... but I will use what power I have left... to send you out of here.",bc_map,"0xFFFF00";
+ end;
+
+OnTimer1830000:
+ instance_announce 0, "Opening of the Gate has failed.",bc_map,"0xFFFF00";
+ end;
+
+OnTimer1850000:
+ donpcevent instance_npcname("ins_nyd_1f_timer", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_call_mon_1", instance_id())+"::OnDisable";
+ instance_warpall "mid_camp",310,150;
+ stopnpctimer;
+ end;
+}
+
+1@nyd,195,320,0 script nyd_to2f_warp 45,5,5,{
+
+OnInstanceInit:
+ disablenpc instance_npcname("nyd_to2f_warp", instance_id());
+ end;
+
+OnEnable:
+ enablenpc instance_npcname("nyd_to2f_warp", instance_id());
+ end;
+
+OnDisable:
+ disablenpc instance_npcname("nyd_to2f_warp", instance_id());
+ end;
+
+OnTouch:
+ warp "2@nyd",200,10;
+ end;
+}
+
+1@nyd,1,1,0 script ins_nyd1_spawn_mobs -1,{
+OnInstanceInit:
+ monster "1@nyd",0,0,"Ancient Tree",2019,20;
+ monster "1@nyd",0,0,"Rhyncho",2020,15;
+ monster "1@nyd",0,0,"Phylla",2021,15;
+ monster "1@nyd",0,0,"Aqua Elemental",2016,15;
+ monster "1@nyd",0,0,"Dark Pinguicula",2015,15;
+ monster "1@nyd",0,0,"Ancient Tree",2019,20;
+ monster "1@nyd",0,0,"Rhyncho",2020,15;
+ monster "1@nyd",0,0,"Phylla",2021,15;
+ monster "1@nyd",0,0,"Aqua Elemental",2016,15;
+ monster "1@nyd",0,0,"Dark Pinguicula",2015,15;
+ end;
+}
+
+// Second Floor
+2@nyd,200,14,0 script nyd_2f_enter -1,6,6,{
+OnTouch_:
+ donpcevent instance_npcname("nyd_2f_enter_broad", instance_id())+"::OnEnable";
+ disablenpc instance_npcname("nyd_2f_enter", instance_id());
+ end;
+}
+
+2@nyd,1,1,0 script nyd_2f_enter_broad -1,{
+OnInstanceInit:
+ disablenpc instance_npcname("nyd_2f_enter_broad", instance_id());
+ end;
+
+OnEnable:
+ enablenpc instance_npcname("nyd_2f_enter_broad", instance_id());
+ initnpctimer;
+ end;
+
+OnDisable:
+ disablenpc instance_npcname("nyd_2f_enter_broad", instance_id());
+ end;
+
+OnTimer12000:
+ instance_announce 0, "Nidhoggur's Shadow : No more...I can't stand this anymore...",bc_map,"0xFFFF00";
+ end;
+
+OnTimer15000:
+ instance_announce 0, "Nidhoggur's Shadow : I need...I need the World Tree Yggdrasil's powers...",bc_map,"0xFFFF00";
+ end;
+
+OnTimer18000:
+ instance_announce 0, "Nidhoggur's Shadow : Destroy...everything...",bc_map,"0xFFFF00";
+ end;
+ /*
+ stopnpctimer;
+ disablenpc instance_npcname("nyd_2f_enter_broad", instance_id());
+ end;
+ */
+}
+
+2@nyd,199,178,0 script nyd_2f_ddr_control -1,6,6,{
+OnTouch:
+ specialeffect2 EF_HOLYHIT;
+ mes "From below the gorgeous stones, a strange breeze is forming.";
+ next;
+ mes "The strange power slowly surrounds your body, the dimension is starting to shift.";
+ close2;
+ warp "2@nyd",199,255;
+ end;
+}
+
+2@nyd,199,268,0 script nyd_2f_boss_enter -1,8,8,{
+OnInstanceInit:
+ enablenpc instance_npcname("nyd_2f_boss_enter", instance_id());
+ end;
+
+OnTouch_:
+ if (getpartyleader(getcharid(1),2) == getcharid(0)) {
+ donpcevent instance_npcname("nyd_2f_boss_enter_call", instance_id())+"::OnEnable";
+ disablenpc instance_npcname("nyd_2f_boss_enter", instance_id());
+ end;
+ }
+ end;
+}
+
+2@nyd,2,2,0 script nyd_2f_boss_enter_call -1,{
+OnInstanceInit:
+ disablenpc instance_npcname("nyd_2f_boss_enter_call", instance_id());
+ end;
+
+OnEnable:
+ enablenpc instance_npcname("nyd_2f_boss_enter_call", instance_id());
+ monster "2@nyd",199,327,"Nidhoggur's Shadow#",2022,1,instance_npcname("nyd_2f_boss_enter_call", instance_id())+"::OnMyMobDead";
+ instance_announce 0, "Nidhoggur's Shadow : I will devour all of you...you and the World Tree Yggdrasil.",bc_map,"0x00ff99";
+ //donpcevent instance_npcname("nyd_2f_boss_enter_call", instance_id())+"::Ongo";
+ initnpctimer;
+ end;
+
+OnDisable:
+ disablenpc instance_npcname("nyd_2f_boss_enter_call", instance_id());
+ killmonster "2@nyd",instance_npcname("nyd_2f_boss_enter_call", instance_id())+"::OnMyMobDead";
+ end;
+
+OnTimer180000:
+ set .@rullet,rand(1,4);
+ if (.@rullet == 1) {
+ instance_announce 0, "Nidhoggur's Shadow : In this chaos... your blood is just what I need.",bc_map,"0xFFFF00";
+ donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnEnable";
+ instance_warpall "2@nyd",115,278;
+ end;
+ }
+ else if (.@rullet == 2) {
+ instance_announce 0, "Nidhoggur's Shadow : I will freeze every last drop of your blood.",bc_map,"0xFFFF00";
+ donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnEnable";
+ instance_warpall "2@nyd",115,373;
+ end;
+ }
+ else if (.@rullet == 3) {
+ instance_announce 0, "Nidhoggur's Shadow : Sleep for eternity in an empty illusion.",bc_map,"0xFFFF00";
+ donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnEnable";
+ instance_warpall "2@nyd",284,278;
+ end;
+ }
+ else if (.@rullet == 4) {
+ instance_announce 0, "Nidhoggur's Shadow : I'll let you enjoy the pain of dying slowly.",bc_map,"0xFFFF00";
+ donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnEnable";
+ instance_warpall "2@nyd",284,374;
+ end;
+ }
+ stopnpctimer;
+ end;
+
+OnMyMobDead:
+ set .@mob_dead_num,mobcount("2@nyd",instance_npcname("nyd_2f_boss_enter_call", instance_id())+"::OnMyMobDead");
+ if (.@mob_dead_num < 1) {
+ instance_announce 0, "Nidhoggur's Shadow : World Tree Yggdrasil's guardian... his powers are disappearing...",bc_map,"0x00ff99";
+ donpcevent instance_npcname("World Tree Yggdrasil#2F", instance_id())+"::OnEnable";
+ donpcevent instance_npcname("nyd_2f_boss_enter_call", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_boss_enter_logic", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_red_c", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_white_c", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_yellow_c", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_green_c", instance_id())+"::OnDisable";
+ end;
+ }
+ else {
+ end;
+ }
+}
+
+2@nyd,2,4,0 script nyd_2f_boss_enter_logic -1,{
+OnInstanceInit:
+ disablenpc instance_npcname("nyd_2f_boss_enter_logic", instance_id());
+ end;
+
+OnEnable:
+ stopnpctimer;
+ initnpctimer;
+ end;
+
+OnDisable:
+ stopnpctimer;
+ disablenpc instance_npcname("nyd_2f_boss_enter_logic", instance_id());
+ end;
+
+OnTimer180000:
+ set .@rullet,rand(1,4);
+ if (.@rullet == 1) {
+ instance_announce 0, "Nidhoggur's Shadow : In this chaos... your blood is just what I need.",bc_map,"0xFFFF00";
+ donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnEnable";
+ instance_warpall "2@nyd",115,278;
+ end;
+ }
+ else if (.@rullet == 2) {
+ instance_announce 0, "Nidhoggur's Shadow : I will freeze every last drop of your blood.",bc_map,"0xFFFF00";
+ donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnEnable";
+ instance_warpall "2@nyd",115,373;
+ end;
+ }
+ else if (.@rullet == 3) {
+ instance_announce 0, "Nidhoggur's Shadow : Sleep for eternity in an empty illusion.",bc_map,"0xFFFF00";
+ donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnEnable";
+ instance_warpall "2@nyd",284,278;
+ end;
+ }
+ else if (.@rullet == 4) {
+ instance_announce 0, "Nidhoggur's Shadow : I'll let you enjoy the pain of dying slowly.",bc_map,"0xFFFF00";
+ donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnEnable";
+ instance_warpall "2@nyd",284,374;
+ end;
+ }
+ stopnpctimer;
+ end;
+}
+
+2@nyd,202,324,5 script World Tree Yggdrasil#2F 437,3,3,{
+ mes "[World Tree Yggdrasil]";
+ mes "Thank you. You're the saviour of humans and the Laphine Tribe.";
+ next;
+ mes "[World Tree Yggdrasil]";
+ mes "You've defeated Nidhoggur's Shadow. But...It's not gone for good. Its powers are merely put to sleep.";
+ next;
+ mes "[World Tree Yggdrasil]";
+ mes "But you have won us plenty of time. This is great.";
+ next;
+ mes "[World Tree Yggdrasil]";
+ mes "Please go and report this to those in charge of Splendide and Manuk.";
+ next;
+ mes "[World Tree Yggdrasil]";
+ mes "As you have seen, neither the Sapha tribe nor the Laphine tribe is at fault for the weakening of the World Tree. It's all because of the Guardian's Shadow...";
+ next;
+ mes "[World Tree Yggdrasil]";
+ mes "The Guardian's insanity...is caused by powers unknown to us... You must tell this to everyone.";
+ next;
+ mes "[World Tree Yggdrasil]";
+ mes "Now... Allow me to escort you out of the cursed nest.";
+ next;
+ switch(select("Please let me out.:I want to look around for a while.")) {
+ case 1:
+ set 'ins_nyd2,0;
+ //setquest 3135;
+ warp "nyd_dun02",98,196;
+ end;
+ case 2:
+ mes "[World Tree Yggdrasil]";
+ mes "Is that so... I'll be around if you want to leave.";
+ close;
+ }
+
+OnInstanceInit:
+ disablenpc instance_npcname("World Tree Yggdrasil#2F", instance_id());
+ end;
+
+OnEnable:
+ enablenpc instance_npcname("World Tree Yggdrasil#2F", instance_id());
+ instance_announce 0, "World Tree Yggdrasil : You did good. Have everyone go to the Magic Circle in the middle, and get ready for the destruction of the nest.",bc_map,"0x00ff99";
+ end;
+
+OnDisable:
+ disablenpc instance_npcname("World Tree Yggdrasil#2F", instance_id());
+ end;
+}
+
+2@nyd,115,278,0 script nyd_2f_red -1,5,5,{
+OnInstanceInit:
+ disablenpc instance_npcname("nyd_2f_red", instance_id());
+ end;
+
+OnEnable:
+ enablenpc instance_npcname("nyd_2f_red", instance_id());
+ donpcevent instance_npcname("nyd_2f_red_warp1", instance_id())+"::OnEnable";
+ donpcevent instance_npcname("nyd_2f_red_warp2", instance_id())+"::OnEnable";
+ donpcevent instance_npcname("nyd_2f_red_warp3", instance_id())+"::OnEnable";
+ donpcevent instance_npcname("nyd_2f_red_c", instance_id())+"::OnEnable";
+ initnpctimer;
+ end;
+
+OnDisable:
+ donpcevent instance_npcname("nyd_2f_red_warp1", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_red_warp2", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_red_warp3", instance_id())+"::OnDisable";
+ disablenpc instance_npcname("nyd_2f_red", instance_id());
+ end;
+
+OnTouch:
+ percentheal -50,0;
+ percentheal -30,0;
+ sc_start SC_BLEEDING,60000,0;
+ end;
+
+OnTimer10000:
+ disablenpc instance_npcname("nyd_2f_red", instance_id());
+ stopnpctimer;
+ end;
+}
+
+2@nyd,6,6,0 script nyd_2f_red_c -1,{
+OnInstanceInit:
+ disablenpc instance_npcname("nyd_2f_red_c", instance_id());
+ end;
+
+OnEnable:
+ enablenpc instance_npcname("nyd_2f_red_c", instance_id());
+ initnpctimer;
+ monster "2@nyd",120,285,"Nidhoggur's Guardian#1",2020,1,instance_npcname("nyd_2f_red_c", instance_id())+"::OnMyMobDead";
+ monster "2@nyd",119,286,"Nidhoggur's Guardian#2",2020,1,instance_npcname("nyd_2f_red_c", instance_id())+"::OnMyMobDead";
+ monster "2@nyd",120,270,"Nidhoggur's Guardian#3",2020,1,instance_npcname("nyd_2f_red_c", instance_id())+"::OnMyMobDead";
+ monster "2@nyd",119,269,"Nidhoggur's Guardian#4",2021,1,instance_npcname("nyd_2f_red_c", instance_id())+"::OnMyMobDead";
+ monster "2@nyd",118,270,"Nidhoggur's Guardian#5",2021,1,instance_npcname("nyd_2f_red_c", instance_id())+"::OnMyMobDead";
+ end;
+
+OnMyMobDead:
+ set .@mob_dead_num,mobcount("2@nyd",instance_npcname("nyd_2f_red_c", instance_id())+"::OnMyMobDead");
+ if (.@mob_dead_num < 1) {
+ instance_announce 0, "Nidhoggur's Shadow : You're not bad... but I will be your opponent this time.",bc_map,"0x00ff99";
+ donpcevent instance_npcname("nyd_2f_red_c", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_boss_enter_logic", instance_id())+"::OnEnable";
+ end;
+ }
+ end;
+
+OnDisable:
+ donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
+ disablenpc instance_npcname("nyd_2f_red_c", instance_id());
+ stopnpctimer;
+ end;
+
+OnTimer180000:
+ killmonster "2@nyd",instance_npcname("nyd_2f_red_c", instance_id())+"::OnMyMobDead";;
+ stopnpctimer;
+ set .@rullet,rand(1,4);
+ if (.@rullet == 1) {
+ instance_announce 0, "Nidhoggur's Shadow : In this chaos... your blood is just what I need.",bc_map,"0xFFFF00";
+ donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnEnable";
+ instance_warpall "2@nyd",115,278;
+ end;
+ }
+ else if (.@rullet == 2) {
+ instance_announce 0, "Nidhoggur's Shadow : I will freeze every last drop of your blood.",bc_map,"0xFFFF00";
+ donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnEnable";
+ instance_warpall "2@nyd",115,373;
+ end;
+ }
+ else if (.@rullet == 3) {
+ instance_announce 0, "Nidhoggur's Shadow : Sleep for eternity in an empty illusion.",bc_map,"0xFFFF00";
+ donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnEnable";
+ instance_warpall "2@nyd",284,278;
+ end;
+ }
+ else if (.@rullet == 4) {
+ instance_announce 0, "Nidhoggur's Shadow : I'll let you enjoy the pain of dying slowly.",bc_map,"0xFFFF00";
+ donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnEnable";
+ instance_warpall "2@nyd",284,374;
+ end;
+ }
+ end;
+}
+
+2@nyd,130,298,0 script nyd_2f_red_warp1 -1,6,6,{
+OnInstanceInit:
+ disablenpc instance_npcname("nyd_2f_red_warp1", instance_id());
+ end;
+
+OnEnable:
+ enablenpc instance_npcname("nyd_2f_red_warp1", instance_id());
+ end;
+
+OnDisable:
+ disablenpc instance_npcname("nyd_2f_red_warp1", instance_id());
+ end;
+
+OnTouch:
+ warp "2@nyd",115,278;
+ end;
+}
+
+2@nyd,142,296,0 script nyd_2f_red_warp2 -1,6,6,{
+OnInstanceInit:
+ disablenpc instance_npcname("nyd_2f_red_warp2", instance_id());
+ end;
+
+OnEnable:
+ enablenpc instance_npcname("nyd_2f_red_warp2", instance_id());
+ end;
+
+OnDisable:
+ disablenpc instance_npcname("nyd_2f_red_warp2", instance_id());
+ end;
+
+OnTouch:
+ warp "2@nyd",115,278;
+ end;
+}
+
+2@nyd,145,283,0 script nyd_2f_red_warp3 -1,6,6,{
+OnInstanceInit:
+ disablenpc instance_npcname("nyd_2f_red_warp3", instance_id());
+ end;
+
+OnEnable:
+ enablenpc instance_npcname("nyd_2f_red_warp3", instance_id());
+ end;
+
+OnDisable:
+ disablenpc instance_npcname("nyd_2f_red_warp3", instance_id());
+ end;
+
+OnTouch:
+ warp "2@nyd",115,278;
+ end;
+}
+
+2@nyd,115,373,0 script nyd_2f_white -1,5,5,{
+OnInstanceInit:
+ disablenpc instance_npcname("nyd_2f_white", instance_id());
+ end;
+
+OnEnable:
+ enablenpc instance_npcname("nyd_2f_white", instance_id());
+ donpcevent instance_npcname("nyd_2f_white_warp1", instance_id())+"::OnEnable";
+ donpcevent instance_npcname("nyd_2f_white_warp2", instance_id())+"::OnEnable";
+ donpcevent instance_npcname("nyd_2f_white_warp3", instance_id())+"::OnEnable";
+ donpcevent instance_npcname("nyd_2f_white_c", instance_id())+"::OnEnable";
+ initnpctimer;
+ end;
+
+OnDisable:
+ donpcevent instance_npcname("nyd_2f_white_warp1", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_white_warp2", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_white_warp3", instance_id())+"::OnDisable";
+ disablenpc instance_npcname("nyd_2f_white", instance_id());
+ end;
+
+OnTouch:
+ percentheal -50,0;
+ sc_start SC_FREEZE,20000,0;
+ end;
+
+OnTimer10000:
+ disablenpc instance_npcname("nyd_2f_white", instance_id());
+ stopnpctimer;
+ end;
+}
+
+2@nyd,6,7,0 script nyd_2f_white_c -1,{
+OnInstanceInit:
+ disablenpc instance_npcname("nyd_2f_white_c", instance_id());
+ end;
+
+OnEnable:
+ enablenpc instance_npcname("nyd_2f_white_c", instance_id());
+ initnpctimer;
+ monster "2@nyd",120,380,"Nidhoggur's Guardian#1",2020,1,instance_npcname("nyd_2f_white_c", instance_id())+"::OnMyMobDead";
+ monster "2@nyd",119,381,"Nidhoggur's Guardian#2",2020,1,instance_npcname("nyd_2f_white_c", instance_id())+"::OnMyMobDead";
+ monster "2@nyd",120,367,"Nidhoggur's Guardian#3",2020,1,instance_npcname("nyd_2f_white_c", instance_id())+"::OnMyMobDead";
+ monster "2@nyd",119,366,"Nidhoggur's Guardian#4",2021,1,instance_npcname("nyd_2f_white_c", instance_id())+"::OnMyMobDead";
+ monster "2@nyd",118,365,"Nidhoggur's Guardian#5",2021,1,instance_npcname("nyd_2f_white_c", instance_id())+"::OnMyMobDead";
+ end;
+
+OnMyMobDead:
+ set .@mob_dead_num,mobcount("2@nyd",instance_npcname("nyd_2f_white_c", instance_id())+"::OnMyMobDead");
+ if (.@mob_dead_num < 1) {
+ instance_announce 0, "Nidhoggur's Shadow : You're not bad... but I will be your opponent this time.",bc_map,"0x00ff99";
+ donpcevent instance_npcname("nyd_2f_white_c", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_boss_enter_logic", instance_id())+"::OnEnable";
+ end;
+ }
+ end;
+
+OnDisable:
+ donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
+ disablenpc instance_npcname("nyd_2f_white_c", instance_id());
+ stopnpctimer;
+ end;
+
+OnTimer180000:
+ killmonster "2@nyd",instance_npcname("nyd_2f_white_c", instance_id())+"::OnMyMobDead";
+ stopnpctimer;
+ set .@rullet,rand(1,4);
+ if (.@rullet == 1) {
+ instance_announce 0, "Nidhoggur's Shadow : In this chaos... your blood is just what I need.",bc_map,"0xFFFF00";
+ donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnEnable";
+ instance_warpall "2@nyd",115,278;
+ end;
+ }
+ else if (.@rullet == 2) {
+ instance_announce 0, "Nidhoggur's Shadow : I will freeze every last drop of your blood.",bc_map,"0xFFFF00";
+ donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnEnable";
+ instance_warpall "2@nyd",115,373;
+ end;
+ }
+ else if (.@rullet == 3) {
+ instance_announce 0, "Nidhoggur's Shadow : Sleep for eternity in an empty illusion.",bc_map,"0xFFFF00";
+ donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnEnable";
+ instance_warpall "2@nyd",284,278;
+ end;
+ }
+ else if (.@rullet == 4) {
+ instance_announce 0, "Nidhoggur's Shadow : I'll let you enjoy the pain of dying slowly.",bc_map,"0xFFFF00";
+ donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnEnable";
+ instance_warpall "2@nyd",284,374;
+ end;
+ }
+ end;
+}
+
+2@nyd,127,354,0 script nyd_2f_white_warp1 -1,6,6,{
+OnInstanceInit:
+ disablenpc instance_npcname("nyd_2f_white_warp1", instance_id());;
+ end;
+
+OnEnable:
+ enablenpc instance_npcname("nyd_2f_white_warp1", instance_id());;
+ end;
+
+OnDisable:
+ disablenpc instance_npcname("nyd_2f_white_warp1", instance_id());;
+ end;
+
+OnTouch:
+ warp "2@nyd",115,373;
+ end;
+}
+
+2@nyd,140,357,0 script nyd_2f_white_warp2 -1,6,6,{
+OnInstanceInit:
+ disablenpc instance_npcname("nyd_2f_white_warp2", instance_id());;
+ end;
+
+OnEnable:
+ enablenpc instance_npcname("nyd_2f_white_warp2", instance_id());;
+ end;
+
+OnDisable:
+ disablenpc instance_npcname("nyd_2f_white_warp2", instance_id());;
+ end;
+
+OnTouch:
+ warp "2@nyd",115,373;
+ end;
+}
+
+2@nyd,145,367,0 script nyd_2f_white_warp3 -1,6,6,{
+OnInstanceInit:
+ disablenpc instance_npcname("nyd_2f_white_warp3", instance_id());;
+ end;
+
+OnEnable:
+ enablenpc instance_npcname("nyd_2f_white_warp3", instance_id());;
+ end;
+
+OnDisable:
+ disablenpc instance_npcname("nyd_2f_white_warp3", instance_id());;
+ end;
+
+OnTouch:
+ warp "2@nyd",115,373;
+ end;
+}
+
+2@nyd,284,278,0 script nyd_2f_yellow -1,5,5,{
+OnInstanceInit:
+ disablenpc instance_npcname("nyd_2f_yellow", instance_id());
+ end;
+
+OnEnable:
+ enablenpc instance_npcname("nyd_2f_yellow", instance_id());
+ donpcevent instance_npcname("nyd_2f_yellow_warp1", instance_id())+"::OnEnable";
+ donpcevent instance_npcname("nyd_2f_yellow_warp2", instance_id())+"::OnEnable";
+ donpcevent instance_npcname("nyd_2f_yellow_warp3", instance_id())+"::OnEnable";
+ donpcevent instance_npcname("nyd_2f_yellow_c", instance_id())+"::OnEnable";
+ initnpctimer;
+ end;
+
+OnDisable:
+ donpcevent instance_npcname("nyd_2f_yellow_warp1", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_yellow_warp2", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_yellow_warp3", instance_id())+"::OnDisable";
+ disablenpc instance_npcname("nyd_2f_yellow", instance_id());
+ end;
+
+OnTouch:
+ percentheal 0,-50;
+ sc_start SC_SLEEP,20000,0;
+ sc_start SC_CONFUSION,60000,0;
+ end;
+
+OnTimer10000:
+ disablenpc instance_npcname("nyd_2f_yellow", instance_id());
+ stopnpctimer;
+ end;
+}
+
+2@nyd,6,8,0 script nyd_2f_yellow_c -1,{
+OnInstanceInit:
+ disablenpc instance_npcname("nyd_2f_yellow_c", instance_id());
+ end;
+
+OnEnable:
+ enablenpc instance_npcname("nyd_2f_yellow_c", instance_id());
+ initnpctimer;
+ monster "2@nyd",282,284,"Nidhoggur's Guardian#1",2020,1,instance_npcname("nyd_2f_yellow_c", instance_id())+"::OnMyMobDead";
+ monster "2@nyd",283,283,"Nidhoggur's Guardian#2",2020,1,instance_npcname("nyd_2f_yellow_c", instance_id())+"::OnMyMobDead";
+ monster "2@nyd",280,275,"Nidhoggur's Guardian#3",2020,1,instance_npcname("nyd_2f_yellow_c", instance_id())+"::OnMyMobDead";
+ monster "2@nyd",281,276,"Nidhoggur's Guardian#4",2021,1,instance_npcname("nyd_2f_yellow_c", instance_id())+"::OnMyMobDead";
+ monster "2@nyd",281,277,"Nidhoggur's Guardian#5",2021,1,instance_npcname("nyd_2f_yellow_c", instance_id())+"::OnMyMobDead";
+ end;
+
+OnMyMobDead:
+ set .@mob_dead_num,mobcount("2@nyd",instance_npcname("nyd_2f_yellow_c", instance_id())+"::OnMyMobDead");
+ if (.@mob_dead_num < 1) {
+ instance_announce 0, "Nidhoggur's Shadow : You're not bad...but I will be your opponent this time.",bc_map,"0x00ff99";
+ donpcevent instance_npcname("nyd_2f_yellow_c", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_boss_enter_logic", instance_id())+"::OnEnable";
+ end;
+ }
+ else {
+ end;
+ }
+
+Onreset:
+ killmonster "2@nyd",instance_npcname("nyd_2f_yellow_c", instance_id())+"::OnMyMobDead";
+ donpcevent instance_npcname("nyd_2f_yellow_c", instance_id())+"::OnDisable";
+ end;
+
+OnDisable:
+ donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
+ disablenpc instance_npcname("nyd_2f_yellow_c", instance_id());
+ stopnpctimer;
+ end;
+
+OnTimer180000:
+ killmonster "2@nyd",instance_npcname("nyd_2f_yellow_c", instance_id())+"::OnMyMobDead";
+ stopnpctimer;
+ set .@rullet,rand(1,4);
+ if (.@rullet == 1) {
+ instance_announce 0, "Nidhoggur's Shadow : In this chaos... your blood is just what I need.",bc_map,"0xFFFF00";
+ donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnEnable";
+ instance_warpall "2@nyd",115,278;
+ end;
+ }
+ else if (.@rullet == 2) {
+ instance_announce 0, "Nidhoggur's Shadow : I will freeze every last drop of your blood.",bc_map,"0xFFFF00";
+ donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnEnable";
+ instance_warpall "2@nyd",115,373;
+ end;
+ }
+ else if (.@rullet == 3) {
+ instance_announce 0, "Nidhoggur's Shadow : Sleep for eternity in an empty illusion.",bc_map,"0xFFFF00";
+ donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnEnable";
+ instance_warpall "2@nyd",284,278;
+ end;
+ }
+ else if (.@rullet == 4) {
+ instance_announce 0, "Nidhoggur's Shadow : I'll let you enjoy the pain of dying slowly.",bc_map,"0xFFFF00";
+ donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnEnable";
+ instance_warpall "2@nyd",284,374;
+ end;
+ }
+ end;
+}
+
+2@nyd,255,285,0 script nyd_2f_yellow_warp1 -1,6,6,{
+OnInstanceInit:
+ disablenpc instance_npcname("nyd_2f_yellow_warp1", instance_id());
+ end;
+
+OnEnable:
+ enablenpc instance_npcname("nyd_2f_yellow_warp1", instance_id());
+ end;
+
+OnDisable:
+ disablenpc instance_npcname("nyd_2f_yellow_warp1", instance_id());
+ end;
+
+OnTouch:
+ warp "2@nyd",284,278;
+ end;
+}
+
+2@nyd,257,296,0 script nyd_2f_yellow_warp2 -1,6,6,{
+OnInstanceInit:
+ disablenpc instance_npcname("nyd_2f_yellow_warp2", instance_id());
+ end;
+
+OnEnable:
+ enablenpc instance_npcname("nyd_2f_yellow_warp2", instance_id());
+ end;
+
+OnDisable:
+ disablenpc instance_npcname("nyd_2f_yellow_warp2", instance_id());
+ end;
+
+OnTouch:
+ warp "2@nyd",284,278;
+ end;
+}
+
+2@nyd,268,300,0 script nyd_2f_yellow_warp3 -1,6,6,{
+OnInstanceInit:
+ disablenpc instance_npcname("nyd_2f_yellow_warp3", instance_id());
+ end;
+
+OnEnable:
+ enablenpc instance_npcname("nyd_2f_yellow_warp3", instance_id());
+ end;
+
+OnDisable:
+ disablenpc instance_npcname("nyd_2f_yellow_warp3", instance_id());
+ end;
+
+OnTouch:
+ warp "2@nyd",284,278;
+ end;
+}
+
+2@nyd,284,374,0 script nyd_2f_green -1,5,5,{
+OnInstanceInit:
+ disablenpc instance_npcname("nyd_2f_green", instance_id());
+ end;
+
+OnEnable:
+ enablenpc instance_npcname("nyd_2f_green", instance_id());
+ donpcevent instance_npcname("nyd_2f_green_warp1", instance_id())+"::OnEnable";
+ donpcevent instance_npcname("nyd_2f_green_warp2", instance_id())+"::OnEnable";
+ donpcevent instance_npcname("nyd_2f_green_warp3", instance_id())+"::OnEnable";
+ donpcevent instance_npcname("nyd_2f_green_c", instance_id())+"::OnEnable";
+ initnpctimer;
+ end;
+
+OnDisable:
+ donpcevent instance_npcname("nyd_2f_green_warp1", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_green_warp2", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_green_warp3", instance_id())+"::OnDisable";
+ disablenpc instance_npcname("nyd_2f_green", instance_id());
+ end;
+
+OnTouch:
+ percentheal -50,-50;
+ sc_start SC_POISON,60000,0;
+ end;
+
+OnTimer10000:
+ disablenpc instance_npcname("nyd_2f_green", instance_id());
+ stopnpctimer;
+ end;
+}
+
+2@nyd,6,9,0 script nyd_2f_green_c -1,{
+OnInstanceInit:
+ disablenpc instance_npcname("nyd_2f_green_c", instance_id());
+ end;
+
+OnEnable:
+ enablenpc instance_npcname("nyd_2f_green_c", instance_id());
+ initnpctimer;
+ monster "2@nyd",282,378,"Nidhoggur's Guardian#1",2020,1,instance_npcname("nyd_2f_green_c", instance_id())+"::OnMyMobDead";
+ monster "2@nyd",283,377,"Nidhoggur's Guardian#2",2020,1,instance_npcname("nyd_2f_green_c", instance_id())+"::OnMyMobDead";
+ monster "2@nyd",280,368,"Nidhoggur's Guardian#3",2020,1,instance_npcname("nyd_2f_green_c", instance_id())+"::OnMyMobDead";
+ monster "2@nyd",281,368,"Nidhoggur's Guardian#4",2021,1,instance_npcname("nyd_2f_green_c", instance_id())+"::OnMyMobDead";
+ monster "2@nyd",281,367,"Nidhoggur's Guardian#5",2021,1,instance_npcname("nyd_2f_green_c", instance_id())+"::OnMyMobDead";
+ end;
+
+OnMyMobDead:
+ set .@mob_dead_num,mobcount("2@nyd",instance_npcname("nyd_2f_green_c", instance_id())+"::OnMyMobDead");
+ if (.@mob_dead_num < 1) {
+ instance_announce 0, "Nidhoggur's Shadow : You're not bad... but I will be your opponent this time.",bc_map,"0x00ff99";
+ donpcevent instance_npcname("nyd_2f_green_c", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_boss_enter_logic", instance_id())+"::OnEnable";
+ end;
+ }
+ else {
+ end;
+ }
+
+Onreset:
+ killmonster "2@nyd",instance_npcname("nyd_2f_green_c", instance_id())+"::OnMyMobDead";
+ donpcevent instance_npcname("nyd_2f_green_c", instance_id())+"::OnDisable";
+ end;
+
+OnDisable:
+ donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
+ disablenpc instance_npcname("nyd_2f_green_c", instance_id());
+ stopnpctimer;
+ end;
+
+OnTimer180000:
+ killmonster "2@nyd",instance_npcname("nyd_2f_green_c", instance_id())+"::OnMyMobDead";
+ stopnpctimer;
+ set .@rullet,rand(1,4);
+ if (.@rullet == 1) {
+ instance_announce 0, "Nidhoggur's Shadow : In this chaos... your blood is just what I need.",bc_map,"0xFFFF00";
+ donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnEnable";
+ instance_warpall "2@nyd",115,278;
+ end;
+ }
+ else if (.@rullet == 2) {
+ instance_announce 0, "Nidhoggur's Shadow : I will freeze every last drop of your blood.",bc_map,"0xFFFF00";
+ donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnEnable";
+ instance_warpall "2@nyd",115,373;
+ end;
+ }
+ else if (.@rullet == 3) {
+ instance_announce 0, "Nidhoggur's Shadow : Sleep for eternity in an empty illusion.",bc_map,"0xFFFF00";
+ donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnEnable";
+ instance_warpall "2@nyd",284,278;
+ end;
+ }
+ else if (.@rullet == 4) {
+ instance_announce 0, "Nidhoggur's Shadow : I'll let you enjoy the pain of dying slowly.",bc_map,"0xFFFF00";
+ donpcevent instance_npcname("nyd_2f_red", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_white", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_yellow", instance_id())+"::OnDisable";
+ donpcevent instance_npcname("nyd_2f_green", instance_id())+"::OnEnable";
+ instance_warpall "2@nyd",284,374;
+ end;
+ }
+ end;
+}
+
+2@nyd,274,356,0 script nyd_2f_green_warp1 -1,6,6,{
+OnInstanceInit:
+ disablenpc instance_npcname("nyd_2f_green_warp1", instance_id());
+ end;
+
+OnEnable:
+ enablenpc instance_npcname("nyd_2f_green_warp1", instance_id());
+ end;
+
+OnDisable:
+ disablenpc instance_npcname("nyd_2f_green_warp1", instance_id());
+ end;
+
+OnTouch:
+ warp "2@nyd",284,374;
+ end;
+}
+
+2@nyd,260,356,0 script nyd_2f_green_warp2 -1,6,6,{
+OnInstanceInit:
+ disablenpc instance_npcname("nyd_2f_green_warp2", instance_id());
+ end;
+
+OnEnable:
+ enablenpc instance_npcname("nyd_2f_green_warp2", instance_id());
+ end;
+
+OnDisable:
+ disablenpc instance_npcname("nyd_2f_green_warp2", instance_id());
+ end;
+
+OnTouch:
+ warp "2@nyd",284,374;
+ end;
+}
+
+2@nyd,258,368,0 script nyd_2f_green_warp3 -1,6,6,{
+OnInstanceInit:
+ disablenpc instance_npcname("nyd_2f_green_warp3", instance_id());
+ end;
+
+OnEnable:
+ enablenpc instance_npcname("nyd_2f_green_warp3", instance_id());
+ end;
+
+OnDisable:
+ disablenpc instance_npcname("nyd_2f_green_warp3", instance_id());
+ end;
+
+OnTouch:
+ warp "2@nyd",284,374;
+ end;
+}
+
+2@nyd,1,1,0 script ins_nyd2_spawn_mobs -1,{
+OnInstanceInit:
+ areamonster "2@nyd",200,92,180,80,"Rhyncho",2020,20;
+ areamonster "2@nyd",200,92,180,80,"Phylla",2021,20;
+ areamonster "2@nyd",200,92,180,80,"Dark Shadow",2023,20;
+ areamonster "2@nyd",200,92,180,80,"Dark Pinguicula",2015,20;
+ areamonster "2@nyd",200,92,180,80,"Rhyncho",2020,20;
+ areamonster "2@nyd",200,92,180,80,"Phylla",2021,20;
+ areamonster "2@nyd",200,92,180,80,"Dark Shadow",2023,20;
+ areamonster "2@nyd",200,92,180,80,"Dark Pinguicula",2015,20;
+ end;
+}
diff --git a/npc/jobs/2-1/priest.txt b/npc/jobs/2-1/priest.txt
index f1f47ae34..6603c6f8e 100644
--- a/npc/jobs/2-1/priest.txt
+++ b/npc/jobs/2-1/priest.txt
@@ -584,8 +584,8 @@ prt_church,27,24,1 script Sister Cecilia 79,{
next;
mes "[Sister Cecilia]";
mes "I believe he can give you specific requirement information about the Priest class. Yes, I think it's a good idea.";
- next;
}
+ close;
}
mes "[Sister Cecilia]";
mes "I see. Well, feel free to relax and make yourself at home. Nowhere on earth is safer than the Prontera Sanctuary.";
diff --git a/npc/mobs/fields/brasilis.txt b/npc/mobs/fields/brasilis.txt
index 70bcf0e71..6f521ddac 100644
--- a/npc/mobs/fields/brasilis.txt
+++ b/npc/mobs/fields/brasilis.txt
@@ -19,4 +19,4 @@ bra_fild01,0,0,0,0 monster Savage 1166,5,5000,0,0
bra_fild01,0,0,0,0 monster Headless Mule 2071,40,5000,0,0
bra_fild01,0,0,0,0 monster Red Mushroom 1085,5,5000,0,0
bra_fild01,0,0,0,0 monster Jaguar 2072,55,5000,0,0
-bra_fild01,0,0,0,0 monster Toucan 2073,60,5000,0,0 \ No newline at end of file
+bra_fild01,0,0,0,0 monster Toucan 2073,60,5000,0,0
diff --git a/npc/mobs/towns/brasilis.txt b/npc/mobs/towns/brasilis.txt
index 6d2eef8c9..be079c730 100644
--- a/npc/mobs/towns/brasilis.txt
+++ b/npc/mobs/towns/brasilis.txt
@@ -1,16 +1,16 @@
-//===== eAthena Script =======================================
-//= Brasilis Quest Monsters
-//===== By: ==================================================
-//= L0ne_W0lf
-//===== Current Version: =====================================
-//= 1.0
-//===== Compatible With: =====================================
-//= Any Athena Version
-//===== Description: =========================================
-//= 1.0 First version
-//============================================================
-
-brasilis,283,88,6,6 monster Strange Hydra 2081,5,5000,0,0
-brasilis,284,104,6,6 monster Strange Hydra 2081,4,5000,0,0
-brasilis,215,80,6,6 monster Strange Hydra 2081,4,5000,0,0
-brasilis,96,50,8,8 monster Strange Hydra 2081,5,5000,0,0 \ No newline at end of file
+//===== eAthena Script =======================================
+//= Brasilis Quest Monsters
+//===== By: ==================================================
+//= L0ne_W0lf
+//===== Current Version: =====================================
+//= 1.0
+//===== Compatible With: =====================================
+//= Any Athena Version
+//===== Description: =========================================
+//= 1.0 First version
+//============================================================
+
+brasilis,283,88,6,6 monster Strange Hydra 2081,5,5000,0,0
+brasilis,284,104,6,6 monster Strange Hydra 2081,4,5000,0,0
+brasilis,215,80,6,6 monster Strange Hydra 2081,4,5000,0,0
+brasilis,96,50,8,8 monster Strange Hydra 2081,5,5000,0,0
diff --git a/npc/other/arena/arena_aco.txt b/npc/other/arena/arena_aco.txt
index 588143d32..8d56b9a59 100644
--- a/npc/other/arena/arena_aco.txt
+++ b/npc/other/arena/arena_aco.txt
@@ -130,49 +130,49 @@ OnTimer4000:
end;
OnTimer60000:
- if (getmapusers("force_5-1.gat") == 0) {
+ if (getmapusers("force_5-1") == 0) {
donpcevent "Trocco#aco1::Onfailclearstage";
}
mapannounce "force_5-1","Time left: 7 Minutes",bc_map|bc_npc;
end;
OnTimer120000:
- if (getmapusers("force_5-1.gat") == 0) {
+ if (getmapusers("force_5-1") == 0) {
donpcevent "Trocco#aco1::Onfailclearstage";
}
mapannounce "force_5-1","Time left: 6 Minutes",bc_map|bc_npc;
end;
OnTimer180000:
- if (getmapusers("force_5-1.gat") == 0) {
+ if (getmapusers("force_5-1") == 0) {
donpcevent "Trocco#aco1::Onfailclearstage";
}
mapannounce "force_5-1","Time left: 5 Minutes",bc_map|bc_npc;
end;
OnTimer240000:
- if (getmapusers("force_5-1.gat") == 0) {
+ if (getmapusers("force_5-1") == 0) {
donpcevent "Trocco#aco1::Onfailclearstage";
}
mapannounce "force_5-1","Time left: 4 Minutes",bc_map|bc_npc;
end;
OnTimer300000:
- if (getmapusers("force_5-1.gat") == 0) {
+ if (getmapusers("force_5-1") == 0) {
donpcevent "Trocco#aco1::Onfailclearstage";
}
mapannounce "force_5-1","Time left: 3 Minutes",bc_map|bc_npc;
end;
OnTimer360000:
- if (getmapusers("force_5-1.gat") == 0) {
+ if (getmapusers("force_5-1") == 0) {
donpcevent "Trocco#aco1::Onfailclearstage";
}
mapannounce "force_5-1","Time left: 2 Minutes",bc_map|bc_npc;
end;
OnTimer420000:
- if (getmapusers("force_5-1.gat") == 0) {
+ if (getmapusers("force_5-1") == 0) {
donpcevent "Trocco#aco1::Onfailclearstage";
}
mapannounce "force_5-1","Time left: 1 Minute",bc_map|bc_npc;
@@ -558,49 +558,49 @@ OnTimer4000:
end;
OnTimer60000:
- if (getmapusers("force_5-1.gat") == 0) {
+ if (getmapusers("force_5-1") == 0) {
donpcevent "Trocco#aco2::Onfailclearstage";
}
mapannounce "force_5-1","Time left: 7 Minutes",bc_map|bc_npc;
end;
OnTimer120000:
- if (getmapusers("force_5-1.gat") == 0) {
+ if (getmapusers("force_5-1") == 0) {
donpcevent "Trocco#aco2::Onfailclearstage";
}
mapannounce "force_5-1","Time left: 6 Minutes",bc_map|bc_npc;
end;
OnTimer180000:
- if (getmapusers("force_5-1.gat") == 0) {
+ if (getmapusers("force_5-1") == 0) {
donpcevent "Trocco#aco2::Onfailclearstage";
}
mapannounce "force_5-1","Time left: 5 Minutes",bc_map|bc_npc;
end;
OnTimer240000:
- if (getmapusers("force_5-1.gat") == 0) {
+ if (getmapusers("force_5-1") == 0) {
donpcevent "Trocco#aco2::Onfailclearstage";
}
mapannounce "force_5-1","Time left: 4 Minutes",bc_map|bc_npc;
end;
OnTimer300000:
- if (getmapusers("force_5-1.gat") == 0) {
+ if (getmapusers("force_5-1") == 0) {
donpcevent "Trocco#aco2::Onfailclearstage";
}
mapannounce "force_5-1","Time left: 3 Minutes",bc_map|bc_npc;
end;
OnTimer360000:
- if (getmapusers("force_5-1.gat") == 0) {
+ if (getmapusers("force_5-1") == 0) {
donpcevent "Trocco#aco2::Onfailclearstage";
}
mapannounce "force_5-1","Time left: 2 Minutes",bc_map|bc_npc;
end;
OnTimer420000:
- if (getmapusers("force_5-1.gat") == 0) {
+ if (getmapusers("force_5-1") == 0) {
donpcevent "Trocco#aco2::Onfailclearstage";
}
mapannounce "force_5-1","Time left: 1 Minute",bc_map|bc_npc;
diff --git a/npc/other/pvp.txt b/npc/other/pvp.txt
index 5a7673ce9..9bd0bfe57 100644
--- a/npc/other/pvp.txt
+++ b/npc/other/pvp.txt
@@ -164,19 +164,19 @@ pvp_y_room,86,85,4 script Fight Square Reception#1 105,{
while(1) {
switch(select("Prontera [ "+.@mapcount_1+" / 128 ]:Izlude [ "+.@mapcount_2+" / 128 ]:Payon [ "+.@mapcount_3+" / 128 ]:Alberta [ "+.@mapcount_4+" / 128 ]:Morroc [ "+.@mapcount_5+" / 128 ]:Cancel")) {
case 1:
- callsub S_CheckPVPRoom,@mapcount_1,"pvp_y_8-1";
+ callsub S_CheckPVPRoom,.@mapcount_1,"pvp_y_8-1";
break;
case 2:
- callsub S_CheckPVPRoom,@mapcount_2,"pvp_y_8-2";
+ callsub S_CheckPVPRoom,.@mapcount_2,"pvp_y_8-2";
break;
case 3:
- callsub S_CheckPVPRoom,@mapcount_3,"pvp_y_8-3";
+ callsub S_CheckPVPRoom,.@mapcount_3,"pvp_y_8-3";
break;
case 4:
- callsub S_CheckPVPRoom,@mapcount_4,"pvp_y_8-4";
+ callsub S_CheckPVPRoom,.@mapcount_4,"pvp_y_8-4";
break;
case 5:
- callsub S_CheckPVPRoom,@mapcount_5,"pvp_y_8-5";
+ callsub S_CheckPVPRoom,.@mapcount_5,"pvp_y_8-5";
break;
case 6:
close;
@@ -211,19 +211,19 @@ pvp_n_room,30,85,4 script Fight Square Reception#2 105,{
while(1) {
switch(select("Sandwich [ "+.@mapcount_1+" / 64 ]:Lock on [ "+.@mapcount_2+" / 32 ]:Four Room [ "+.@mapcount_3+" / 32 ]:Under cross [ "+.@mapcount_4+" / 32 ]:Compass Room [ "+.@mapcount_5+" / 32 ]:Cancel")) {
case 1:
- callsub S_CheckPVPRoom,@mapcount_1,"pvp_n_8-1",64;
+ callsub S_CheckPVPRoom,.@mapcount_1,"pvp_n_8-1",64;
break;
case 2:
- callsub S_CheckPVPRoom,@mapcount_2,"pvp_n_8-2",32;
+ callsub S_CheckPVPRoom,.@mapcount_2,"pvp_n_8-2",32;
break;
case 3:
- callsub S_CheckPVPRoom,@mapcount_3,"pvp_n_8-3",32;
+ callsub S_CheckPVPRoom,.@mapcount_3,"pvp_n_8-3",32;
break;
case 4:
- callsub S_CheckPVPRoom,@mapcount_4,"pvp_n_8-4",32;
+ callsub S_CheckPVPRoom,.@mapcount_4,"pvp_n_8-4",32;
break;
case 5:
- callsub S_CheckPVPRoom,@mapcount_5,"pvp_n_8-5",32;
+ callsub S_CheckPVPRoom,.@mapcount_5,"pvp_n_8-5",32;
break;
case 6:
close;
diff --git a/npc/quests/eye_of_hellion.txt b/npc/quests/eye_of_hellion.txt
index 632c79db3..058fb8762 100644
--- a/npc/quests/eye_of_hellion.txt
+++ b/npc/quests/eye_of_hellion.txt
@@ -1060,7 +1060,7 @@ prontera,223,82,0 script #prt_key-1 111,{
mes "[" + strcharinfo(0) + "]";
mes "What the heck does this";
mes "even mean? A Veggie Lady?";
- mes "Does Clanux knows anything";
+ mes "Does Clanux know anything";
mes "at all about this clue...?";
close;
}
@@ -1350,7 +1350,7 @@ payon,182,132,3 script Grout'he Tuccok#hellion 48,{
mes "[Grout'he]";
mes "There you go!";
mes "Thanks for the cash~";
- mes "(Know I won't have to";
+ mes "(Now I won't have to";
mes "get my knees all broken!)";
mes "Oh, and let me mark your";
mes "Mini-Map for you real quick...";
diff --git a/npc/quests/newgears/2005_headgears.txt b/npc/quests/newgears/2005_headgears.txt
index 7dd7f12e3..696fc60cc 100644
--- a/npc/quests/newgears/2005_headgears.txt
+++ b/npc/quests/newgears/2005_headgears.txt
@@ -1957,6 +1957,8 @@ gl_prison1,97,104,1 script Phendark#LhzHat 1202,{
break;
case 3:
+ mes "Phendark.";
+ next;
if((@temp1 == 1 || @temp1 == 2) && @temp2 == 1)
{
mes "[Phendark]";
@@ -2000,6 +2002,7 @@ gl_prison1,97,104,1 script Phendark#LhzHat 1202,{
case 4:
mes "Zealotus.";
+ next;
break;
}
switch( select( "Insult him.", "Apologize." ) )
diff --git a/npc/quests/quests_brasilis.txt b/npc/quests/quests_brasilis.txt
index 417ac78d3..0cb1f1ba0 100644
--- a/npc/quests/quests_brasilis.txt
+++ b/npc/quests/quests_brasilis.txt
@@ -1,4600 +1,4600 @@
-//===== eAthena Script =======================================
-//= Brasilis Qiests
-//===== By ===================================================
-//= L0ne_W0lf
-//===== Version ==============================================
-//= 1.0
-//===== Compatible With ======================================
-//= eAthena SVN
-//===== Description ==========================================
-//= [Aegis COnversion]
-//= Lost Puppies (Repeatable, 24 hours.)
-//= Suspicious Beach (Repeatable, 24 hours / iRO/cRO version.)
-//= Guarana Candy Quest
-//= Brasilis Water Lily Quest
-//= Brasilis Dungeon Access Quest
-//= Iara (Buff reward. Repeatable, 24 hours.)
-//===== Comments =============================================
-//= 1.0 First version.
-//============================================================
-
-// Lost Puppies, Original file: dogdog.sc
-//============================================================
-brasilis,297,307,5 script Angelo#br 50,{
- set .@pongku,checkquest(9032,PLAYTIME);
- set .@br1,checkquest(9030);
- set .@br2,checkquest(9031);
- if (BaseLevel < 40) {
- mes "[Angelo]";
- mes "Pets went out the village~!!";
- mes "Gosh... what can I do... ?";
- close;
- }
- else {
- if ((.@pongku == 0) || (.@pongku == 1)) {
- mes "[Angelo]";
- mes "The day is not finished yet.";
- mes "You can only help once a day. Hehe.";
- close;
- }
- else {
- if (checkquest(9032) > -1) erasequest 9032;
- if ((.@br1 == 0) || (.@br1 == 1)) {
- mes "[Angelo]";
- mes "My pets are in the field outside of the village.";
- mes "Why did they leave? Please find them.";
- close;
- }
- else {
- if ((.@br2 == 0) || (.@br2 == 1)) {
- mes "[Angelo]";
- mes "Oh, thank you. You found all of 3 puppies.";
- mes "Thanks a lot.";
- mes "I hope this is useful to you. hoho.";
- getexp 500000,0;
- erasequest 9031;
- setquest 9032;
- set .@bosang,rand(1,10);
- if (.@bosang < 5) {
- specialeffect2 EF_ASSUMPTIO;
- percentheal 100,100;
- //ConsumeSpecialItem Yggdrasilberry
- }
- else if (.@bosang < 9) {
- specialeffect2 EF_ASSUMPTIO;
- //ConsumeSpecialItem Yggdrasilberry
- percentheal 100,100;
- getitem 504,2; //White_Potion
- }
- else {
- specialeffect2 EF_ASSUMPTIO;
- //ConsumeSpecialItem Yggdrasilberry
- percentheal 100,100;
- getitem 608,1; //Seed_Of_Yggdrasil
- }
- close;
- }
- else {
- mes "[Angelo]";
- mes "Are you an adventurer? You came here right on time.";
- mes "Puppies have been disappearing.";
- mes "And someone said that they saw them out on the field just outside the village....";
- next;
- mes "[Angelo]";
- mes "It's pretty difficult and dangerous to find 'em.";
- mes "You have to find ^0000FF3 puppies^000000.";
- setquest 9030;
- close;
- }
- }
- }
- }
- end;
-
-OnInit:
- initnpctimer;
- end;
-
-OnTimer10000:
- stopnpctimer;
- donpcevent "Angelo#br::Ongo";
- end;
-
-Ongo:
- emotion e_gasp;
- initnpctimer;
- end;
-}
-
-//Puppya1
-bra_fild01,98,96,3 script Puppy#a1 81,{
- set .@br1,checkquest(9030);
- if ((.@br1 == 0) || (.@br1 == 1)) {
- if (brazil_kid < 3) {
- mes "[Puppy]";
- mes "bow wow bow wow!!";
- next;
- set brazil_kid,brazil_kid+1;
- if (brazil_kid == 3) {
- mes "["+strcharinfo(0)+"]";
- mes "Good. I found all 3 puppies.";
- mes "Now I need to go tell Angelo.";
- set brazil_kid,0;
- erasequest 9030;
- setquest 9031;
- set .@pk,rand(1,2);
- if (.@pk == 1) {
- donpcevent "Puppy#a2::OnEnable";
- disablenpc "Puppy#a1";
- }
- else {
- donpcevent "Puppy#a3::OnEnable";
- disablenpc "Puppy#a1";
- }
- close;
- }
- else {
- mes "["+strcharinfo(0)+"]";
- mes "Ah... who's a good puppy?";
- mes "Ok, where are the others?";
- set .@pk,rand(1,2);
- if (.@pk == 1) {
- donpcevent "Puppy#a2::OnEnable";
- disablenpc "Puppy#a1";
- }
- else {
- donpcevent "Puppy#a3::OnEnable";
- disablenpc "Puppy#a1";
- }
- }
- close;
- }
- else {
- mes "[Puppy]";
- mes "bow! wow wow!";
- close;
- }
- }
- else {
- mes "[Puppy]";
- mes "bow! wow wow!";
- close;
- }
- end;
-
-OnEnable:
- enablenpc "Puppy#a1";
- end;
-
-OnDisable:
- disablenpc "Puppy#a1";
- end;
-}
-
-//Puppya2
-bra_fild01,59,116,5 script Puppy#a2 81,{
- set .@br1,checkquest(9030);
- set name,strcharinfo(0);
- if ((.@br1 == 0) || (.@br1 == 1)) {
- if (brazil_kid < 3) {
- mes "[Puppy]";
- mes "bow wow bow wow!!";
- next;
- set brazil_kid,brazil_kid+1;
- if (brazil_kid == 3) {
- mes "["+strcharinfo(0)+"]";
- mes "Good. I found all 3 puppies.";
- mes "Now I need to go tell Angelo.";
- set brazil_kid,0;
- erasequest 9030;
- setquest 9031;
- set .@pk,rand(1,2);
- if (.@pk == 1) {
- donpcevent "Puppy#a1::OnEnable";
- disablenpc "Puppy#a2";
- }
- else {
- donpcevent "Puppy#a3::OnEnable";
- disablenpc "Puppy#a2";
- }
- close;
- }
- else {
- mes "["+strcharinfo(0)+"]";
- mes "Ah... who's a good puppy?";
- mes "Ok, where are the others?";
- set .@pk,rand(1,2);
- if (.@pk == 1) {
- donpcevent "Puppy#a1::OnEnable";
- disablenpc "Puppy#a2";
- }
- else {
- donpcevent "Puppy#a3::OnEnable";
- disablenpc "Puppy#a2";
- }
- }
- close;
- }
- else {
- mes "[Puppy]";
- mes "bow! wow wow!";
- close;
- }
- }
- else {
- mes "[Puppy]";
- mes "bow! wow wow!";
- close;
- }
- end;
-
-OnInit:
- disablenpc "Puppy#a2";
- end;
-
-OnEnable:
- enablenpc "Puppy#a2";
- end;
-
-OnDisable:
- disablenpc "Puppy#a2";
- end;
-}
-
-//Puppya3
-bra_fild01,62,142,3 script Puppy#a3 81,{
- set .@br1,checkquest(9030);
- if ((.@br1 == 0) || (.@br1 == 1)) {
- if (brazil_kid < 3) {
- mes "[Puppy]";
- mes "bow wow bow wow!!";
- next;
- set brazil_kid,brazil_kid+1;
- if (brazil_kid == 3) {
- mes "["+strcharinfo(0)+"]";
- mes "Good. I found all 3 puppies.";
- mes "Now I need to go tell Angelo.";
- set brazil_kid,0;
- erasequest 9030;
- setquest 9031;
- set .@pk,rand(1,2);
- if (.@pk == 1) {
- donpcevent "Puppy#a1::OnEnable";
- disablenpc "Puppy#a3";
- }
- else {
- donpcevent "Puppy#a2::OnEnable";
- disablenpc "Puppy#a3";
- }
- close;
- }
- else {
- mes "["+strcharinfo(0)+"]";
- mes "Ah... who's a good puppy?";
- mes "Ok, where are the others?";
- set .@pk,rand(1,2);
- if (.@pk == 1) {
- donpcevent "Puppy#a1::OnEnable";
- disablenpc "Puppy#a3";
- }
- else {
- donpcevent "Puppy#a2::OnEnable";
- disablenpc "Puppy#a3";
- }
- }
- close;
- }
- else {
- mes "[Puppy]";
- mes "bow! wow wow!";
- close;
- }
- }
- else {
- mes "[Puppy]";
- mes "bow! wow wow!";
- close;
- }
- end;
-
-OnInit:
- disablenpc "Puppy#a3";
- end;
-
-OnEnable:
- enablenpc "Puppy#a3";
- end;
-
-OnDisable:
- disablenpc "Puppy#a3";
- end;
-}
-
-//Puppy b1
-bra_fild01,80,163,3 script Puppy#b1 81,{
- set .@br1,checkquest(9030);
- if ((.@br1 == 0) || (.@br1 == 1)) {
- if (brazil_kid < 3) {
- mes "[Puppy]";
- mes "bow wow bow wow!!";
- next;
- set brazil_kid,brazil_kid+1;
- if (brazil_kid == 3) {
- mes "["+strcharinfo(0)+"]";
- mes "Good. I found all 3 puppies.";
- mes "Now I need to go tell Angelo.";
- set brazil_kid,0;
- erasequest 9030;
- setquest 9031;
- set .@pk,rand(1,2);
- if (.@pk == 1) {
- donpcevent "Puppy#b2::OnEnable";
- disablenpc "Puppy#b1";
- }
- else {
- donpcevent "Puppy#b3::OnEnable";
- disablenpc "Puppy#b1";
- }
- close;
- }
- else {
- mes "["+strcharinfo(0)+"]";
- mes "Ah... who's a good puppy?";
- mes "Ok, where are the others?";
- set .@pk,rand(1,2);
- if (.@pk == 1) {
- donpcevent "Puppy#b2::OnEnable";
- disablenpc "Puppy#b1";
- }
- else {
- donpcevent "Puppy#b3::OnEnable";
- disablenpc "Puppy#b1";
- }
- }
- close;
- }
- else {
- mes "[Puppy]";
- mes "bow! wow wow!";
- close;
- }
- }
- else {
- mes "[Puppy]";
- mes "bow! wow wow!";
- close;
- }
- end;
-
-OnEnable:
- enablenpc "Puppy#b1";
- end;
-
-OnDisable:
- disablenpc "Puppy#b1";
- end;
-}
-
-//Puppy b2
-bra_fild01,73,210,3 script Puppy#b2 81,{
- set .@br1,checkquest(9030);
- if ((.@br1 == 0) || (.@br1 == 1)) {
- if (brazil_kid < 3) {
- mes "[Puppy]";
- mes "bow wow bow wow!!";
- next;
- set brazil_kid,brazil_kid+1;
- if (brazil_kid == 3) {
- mes "["+strcharinfo(0)+"]";
- mes "Good. I found all 3 puppies.";
- mes "Now I need to go tell Angelo.";
- set brazil_kid,0;
- erasequest 9030;
- setquest 9031;
- set .@pk,rand(1,2);
- if (.@pk == 1) {
- donpcevent "Puppy#b1::OnEnable";
- disablenpc "Puppy#b2";
- }
- else {
- donpcevent "Puppy#b3::OnEnable";
- disablenpc "Puppy#b2";
- }
- close;
- }
- else {
- mes "["+strcharinfo(0)+"]";
- mes "Ah... who's a good puppy?";
- mes "Ok, where are the others?";
- set .@pk,rand(1,2);
- if (.@pk == 1) {
- donpcevent "Puppy#b1::OnEnable";
- disablenpc "Puppy#b2";
- }
- else {
- donpcevent "Puppy#b3::OnEnable";
- disablenpc "Puppy#b2";
- }
- }
- close;
- }
- else {
- mes "[Puppy]";
- mes "bow! wow wow!";
- close;
- }
- }
- else {
- mes "[Puppy]";
- mes "bow! wow wow!";
- close;
- }
- end;
-
-OnInit:
- disablenpc "Puppy#b2";
- end;
-
-OnEnable:
- enablenpc "Puppy#b2";
- end;
-
-OnDisable:
- disablenpc "Puppy#b2";
- end;
-}
-
-//Puppy b3
-bra_fild01,80,210,3 script Puppy#b3 81,{
- set .@br1,checkquest(9030);
- if ((.@br1 == 0) || (.@br1 == 1)) {
- if (brazil_kid < 3) {
- mes "[Puppy]";
- mes "bow wow bow wow!!";
- next;
- set brazil_kid,brazil_kid+1;
- if (brazil_kid == 3) {
- mes "["+strcharinfo(0)+"]";
- mes "Good. I found all 3 puppies.";
- mes "Now I need to go tell Angelo.";
- set brazil_kid,0;
- erasequest 9030;
- setquest 9031;
- set .@pk,rand(1,2);
- if (.@pk == 1) {
- donpcevent "Puppy#b1::OnEnable";
- disablenpc "Puppy#b3";
- }
- else {
- donpcevent "Puppy#b2::OnEnable";
- disablenpc "Puppy#b3";
- }
- close;
- }
- else {
- mes "["+strcharinfo(0)+"]";
- mes "Ah... who's a good puppy?";
- mes "Ok, where are the others?";
- set .@pk,rand(1,2);
- if (.@pk == 1) {
- donpcevent "Puppy#b1::OnEnable";
- disablenpc "Puppy#b3";
- }
- else {
- donpcevent "Puppy#b2::OnEnable";
- disablenpc "Puppy#b3";
- }
- }
- close;
- }
- else {
- mes "[Puppy]";
- mes "bow! wow wow!";
- close;
- }
- }
- else {
- mes "[Puppy]";
- mes "bow! wow wow!";
- close;
- }
- end;
-
-OnInit:
- disablenpc "Puppy#b3";
- end;
-
-OnEnable:
- enablenpc "Puppy#b3";
- end;
-
-OnDisable:
- disablenpc "Puppy#b3";
- end;
-}
-
-//Puppyc1
-bra_fild01,38,235,3 script Puppy#c1 81,{
- set .@br1,checkquest(9030);
- if ((.@br1 == 0) || (.@br1 == 1)) {
- if (brazil_kid < 3) {
- mes "[Puppy]";
- mes "bow wow bow wow!!";
- next;
- set brazil_kid,brazil_kid+1;
- if (brazil_kid == 3) {
- mes "["+strcharinfo(0)+"]";
- mes "Good. I found all 3 puppies.";
- mes "Now I need to go tell Angelo.";
- set brazil_kid,0;
- erasequest 9030;
- setquest 9031;
- set .@pk,rand(1,2);
- if (.@pk == 1) {
- donpcevent "Puppy#c2::OnEnable";
- disablenpc "Puppy#c1";
- }
- else {
- donpcevent "Puppy#c3::OnEnable";
- disablenpc "Puppy#c1";
- }
- close;
- }
- else {
- mes "["+strcharinfo(0)+"]";
- mes "Ah... who's a good puppy?";
- mes "Ok, where are the others?";
- set .@pk,rand(1,2);
- if (.@pk == 1) {
- donpcevent "Puppy#c2::OnEnable";
- disablenpc "Puppy#c1";
- }
- else {
- donpcevent "Puppy#c3::OnEnable";
- disablenpc "Puppy#c1";
- }
- }
- close;
- }
- else {
- mes "[Puppy]";
- mes "bow! wow wow!";
- close;
- }
- }
- else {
- mes "[Puppy]";
- mes "bow! wow wow!";
- close;
- }
- end;
-
-OnEnable:
- enablenpc "Puppy#c1";
- end;
-
-OnDisable:
- disablenpc "Puppy#c1";
- end;
-}
-
-//Puppy c2
-bra_fild01,307,64,3 script Puppy#c2 81,{
- set .@br1,checkquest(9030);
- if ((.@br1 == 0) || (.@br1 == 1)) {
- if (brazil_kid < 3) {
- mes "[Puppy]";
- mes "bow wow bow wow!!";
- next;
- set brazil_kid,brazil_kid+1;
- if (brazil_kid == 3) {
- mes "["+strcharinfo(0)+"]";
- mes "Good. I found all 3 puppies.";
- mes "Now I need to go tell Angelo.";
- set brazil_kid,0;
- erasequest 9030;
- setquest 9031;
- set .@pk,rand(1,2);
- if (.@pk == 1) {
- donpcevent "Puppy#c1::OnEnable";
- disablenpc "Puppy#c2";
- }
- else {
- donpcevent "Puppy#c3::OnEnable";
- disablenpc "Puppy#c2";
- }
- close;
- }
- else {
- mes "["+strcharinfo(0)+"]";
- mes "Ah... who's a good puppy?";
- mes "Ok, where are the others?";
- set .@pk,rand(1,2);
- if (.@pk == 1) {
- donpcevent "Puppy#c1::OnEnable";
- disablenpc "Puppy#c2";
- }
- else {
- donpcevent "Puppy#c3::OnEnable";
- disablenpc "Puppy#c2";
- }
- }
- close;
- }
- else {
- mes "[Puppy]";
- mes "bow! wow wow!";
- close;
- }
- }
- else {
- mes "[Puppy]";
- mes "bow! wow wow!";
- close;
- }
- end;
-
-OnInit:
- disablenpc "Puppy#c2";
- end;
-
-OnEnable:
- enablenpc "Puppy#c2";
- end;
-
-OnDisable:
- disablenpc "Puppy#c2";
- end;
-}
-
-//Puppy c3
-bra_fild01,260,60,3 script Puppy#c3 81,{
- set .@br1,checkquest(9030);
- if ((.@br1 == 0) || (.@br1 == 1)) {
- if (brazil_kid < 3) {
- mes "[Puppy]";
- mes "bow wow bow wow!!";
- next;
- set brazil_kid,brazil_kid+1;
- if (brazil_kid == 3) {
- mes "["+strcharinfo(0)+"]";
- mes "Good. I found all 3 puppies.";
- mes "Now I need to go tell Angelo.";
- set brazil_kid,0;
- erasequest 9030;
- setquest 9031;
- set .@pk,rand(1,2);
- if (.@pk == 1) {
- donpcevent "Puppy#c1::OnEnable";
- disablenpc "Puppy#c3";
- }
- else {
- donpcevent "Puppy#c2::OnEnable";
- disablenpc "Puppy#c3";
- }
- close;
- }
- else {
- mes "["+strcharinfo(0)+"]";
- mes "Ah... who's a good puppy?";
- mes "Ok, where are the others?";
- set .@pk,rand(1,2);
- if (.@pk == 1) {
- donpcevent "Puppy#c1::OnEnable";
- disablenpc "Puppy#c3";
- }
- else {
- donpcevent "Puppy#c2::OnEnable";
- disablenpc "Puppy#c3";
- }
- }
- close;
- }
- else {
- mes "[Puppy]";
- mes "bow! wow wow!";
- close;
- }
- }
- else {
- mes "[Puppy]";
- mes "bow! wow wow!";
- close;
- }
- end;
- OnInit:
- disablenpc "Puppy#c3";
- end;
-
-OnEnable:
- enablenpc "Puppy#c3";
- end;
-
-OnDisable:
- disablenpc "Puppy#c3";
- end;
-}
-
-//Puppyd1
-bra_fild01,234,101,3 script Puppy#d1 81,{
- set .@br1,checkquest(9030);
- if ((.@br1 == 0) || (.@br1 == 1)) {
- if (brazil_kid < 3) {
- mes "[Puppy]";
- mes "bow wow bow wow!!";
- next;
- set brazil_kid,brazil_kid+1;
- if (brazil_kid == 3) {
- mes "["+strcharinfo(0)+"]";
- mes "Good. I found all 3 puppies.";
- mes "Now I need to go tell Angelo.";
- set brazil_kid,0;
- erasequest 9030;
- setquest 9031;
- set .@pk,rand(1,2);
- if (.@pk == 1) {
- donpcevent "Puppy#d2::OnEnable";
- disablenpc "Puppy#d1";
- }
- else {
- donpcevent "Puppy#d3::OnEnable";
- disablenpc "Puppy#d1";
- }
- close;
- }
- else {
- mes "["+strcharinfo(0)+"]";
- mes "Ah... who's a good puppy?";
- mes "Ok, where are the others?";
- set .@pk,rand(1,2);
- if (.@pk == 1) {
- donpcevent "Puppy#d2::OnEnable";
- disablenpc "Puppy#d1";
- }
- else {
- donpcevent "Puppy#d3::OnEnable";
- disablenpc "Puppy#d1";
- }
- }
- close;
- }
- else {
- mes "[Puppy]";
- mes "bow! wow wow!";
- close;
- }
- }
- else {
- mes "[Puppy]";
- mes "bow! wow wow!";
- close;
- }
- end;
-
-OnEnable:
- enablenpc "Puppy#d1";
- end;
-
-OnDisable:
- disablenpc "Puppy#d1";
- end;
-}
-
-//Puppy d2
-bra_fild01,200,84,3 script Puppy#d2 81,{
- set .@br1,checkquest(9030);
- if ((.@br1 == 0) || (.@br1 == 1)) {
- if (brazil_kid < 3) {
- mes "[Puppy]";
- mes "bow wow bow wow!!";
- next;
- set brazil_kid,brazil_kid+1;
- if (brazil_kid == 3) {
- mes "["+strcharinfo(0)+"]";
- mes "Good. I found all 3 puppies.";
- mes "Now I need to go tell Angelo.";
- set brazil_kid,0;
- erasequest 9030;
- setquest 9031;
- set .@pk,rand(1,2);
- if (.@pk == 1) {
- donpcevent "Puppy#d1::OnEnable";
- disablenpc "Puppy#d2";
- }
- else {
- donpcevent "Puppy#d3::OnEnable";
- disablenpc "Puppy#d2";
- }
- close;
- }
- else {
- mes "["+strcharinfo(0)+"]";
- mes "Ah... who's a good puppy?";
- mes "Ok, where are the others?";
- set .@pk,rand(1,2);
- if (.@pk == 1) {
- donpcevent "Puppy#d1::OnEnable";
- disablenpc "Puppy#d2";
- }
- else {
- donpcevent "Puppy#d3::OnEnable";
- disablenpc "Puppy#d2";
- }
- }
- close;
- }
- else {
- mes "[Puppy]";
- mes "bow! wow wow!";
- close;
- }
- }
- else {
- mes "[Puppy]";
- mes "bow! wow wow!";
- close;
- }
- end;
-
-OnInit:
- disablenpc "Puppy#d2";
- end;
-
-OnEnable:
- enablenpc "Puppy#d2";
- end;
-
-OnDisable:
- disablenpc "Puppy#d2";
- end;
-}
-
-//Puppy d3
-bra_fild01,176,63,5 script Puppy#d3 81,{
- set .@br1,checkquest(9030);
- if ((.@br1 == 0) || (.@br1 == 1)) {
- if (brazil_kid < 3) {
- mes "[Puppy]";
- mes "bow wow bow wow!!";
- next;
- set brazil_kid,brazil_kid+1;
- if (brazil_kid == 3) {
- mes "["+strcharinfo(0)+"]";
- mes "Good. I found all 3 puppies.";
- mes "Now I need to go tell Angelo.";
- set brazil_kid,0;
- erasequest 9030;
- setquest 9031;
- set .@pk,rand(1,2);
- if (.@pk == 1) {
- donpcevent "Puppy#d1::OnEnable";
- disablenpc "Puppy#d3";
- }
- else {
- donpcevent "Puppy#d2::OnEnable";
- disablenpc "Puppy#d3";
- }
- close;
- }
- else {
- mes "["+strcharinfo(0)+"]";
- mes "Ah... who's a good puppy?";
- mes "Ok, where are the others?";
- set .@pk,rand(1,2);
- if (.@pk == 1) {
- donpcevent "Puppy#d1::OnEnable";
- disablenpc "Puppy#d3";
- }
- else {
- donpcevent "Puppy#d2::OnEnable";
- disablenpc "Puppy#d3";
- }
- }
- close;
- }
- else {
- mes "[Puppy]";
- mes "bow! wow wow!";
- close;
- }
- }
- else {
- mes "[Puppy]";
- mes "bow! wow wow!";
- close;
- }
- end;
-
-OnInit:
- disablenpc "Puppy#d3";
- end;
-
-OnEnable:
- enablenpc "Puppy#d3";
- end;
-
-OnDisable:
- disablenpc "Puppy#d3";
- end;
-}
-
-// Suspicious Beach, original file: Suspicious_Beach.sc
-//============================================================
-brasilis,192,133,6 script Lucia#brasilis 478,{
- /*
- if (countitem(12408) > 0) {
- delitem 12408,1; //Leaf_Cat_Ball
- getitem 12408,1; //Leaf_Cat_Ball
- }
- else if (countitem(6221) > 0) {
- delitem 6221,1; //Mystic_Leaf_Cat_Ball
- getitem 6221,1; //Mystic_Leaf_Cat_Ball
- }
- */
- if (BaseLevel < 40) {
- mes "[Lucia]";
- mes "Hello.";
- mes "I'm worried about ^FF0000Strange Hydra^000000's on";
- mes "the south beach.";
- mes "I hope some experienced adventurers";
- mes "will come to help.";
- emotion e_sigh;
- close;
- }
- else {
- set .@nQState1,checkquest(9028);
- set .@nQState2,checkquest(9029);
- if (.@nQState1 == 0) {
- mes "[Lucia]";
- mes "Hello.";
- mes "Have you come here to hunt ^FF0000Strange Hydra^000000s?";
- next;
- switch(select("Yes.:No.:^006400What is happening here?^000000")) {
- case 1:
- setquest 9028;
- getitem 12408,1; //Leaf_Cat_Ball
- mes "[Lucia]";
- mes "Here, take this ^006400Hydra Ball^000000.";
- mes "Use it to capture a ^FF0000Strange Hydra^8B4513.^000000";
- mes "I hope you can do it~!";
- close;
- case 2:
- mes "[Lucia]";
- mes "Ah, I misunderstood.";
- mes "See you then.";
- close;
- case 3:
- mes "[Lucia]";
- mes "One day ^FF0000Strange Hydra^000000s";
- mes "came here and surrounded the town.";
- mes "We're not sure what attracted them but some say that it's because of you adventurers.";
- next;
- mes "[Lucia]";
- mes "In any case, to contain the ^FF0000Strange Hydra^000000s,";
- mes "you have to use this specially designed tool a.k.a. a ^8B4513Hydra Ball^000000";
- next;
- mes "[Lucia]";
- mes "If you still have the ^006400Hydra Ball^000000,";
- mes "please use it on the ^FF0000Strange Hydra^000000s that";
- mes "you can find at the beach.";
- mes "If you are lucky, the tool will work perfectly.";
- next;
- mes "[Lucia]";
- mes "I hope many adventurers";
- mes "volunteer for this job.";
- mes " ";
- mes "I really hate Hydra!";
- emotion e_sob;
- close;
- }
- }
- else if ((.@nQState1 == 0) || (.@nQState1 == 1)) {
- if (countitem(6221) > 0) {
- mes "[Lucia]";
- mes "Hello, you really did it!";
- if (checkweight(11502,3)) {
- //mes "I don't have enough ^006400Hydra Ball^000000s to give you."; //Poorly translated by iRO?
- mes "I hope you will come";
- mes "again to help me.";
- mes "Have a nice day~!";
- delitem 6221,1; //Mystic_Leaf_Cat_Ball
- completequest 9028;
- //recall_completequest 9029;
- if (.@nQState2 > -1) erasequest 9029;
- setquest 9029;
- //ConsumeSpecialItem Yggdrasilberry
- percentheal 100,100;
- //ConsumeSpecialItem Luk_Dish05
- sc_start SC_LUKFOOD, 1200000, 5; percentheal 5,2;
- //ConsumeSpecialItem Vit_Dish05
- sc_start SC_VITFOOD, 1200000, 5; percentheal 10,0;
- //ConsumeSpecialItem Dex_Dish05
- sc_start SC_DEXFOOD, 1200000, 5; percentheal 5,5;
- getitem 11502,3; //Light_Blue_Pot
- close;
- }
- else {
- mes " ";
- mes "I'd like to reward you,";
- mes "however your bags are full.";
- mes "Please make room and come back!";
- close;
- }
- }
- else {
- mes "[Lucia]";
- if (countitem(12408) < 1) {
- mes "Did you need another ^006400Hydra Ball^000000?";
- mes "I will give you one more.";
- getitem 12408,1; //Leaf_Cat_Ball
- close;
- }
- else {
- mes "Any problems?";
- next;
- switch(select("No.:^006400Tell me again what happened^000000")) {
- case 1:
- mes "[Lucia]";
- mes "Ok, please do me a favor.";
- close;
- case 2:
- mes "[Lucia]";
- mes "One day ^FF0000Strange Hydra^000000s";
- mes "came here and surrounded the town.";
- mes "We're not sure what attracted them but some say that it's because of you adventurers.";
- next;
- mes "[Lucia]";
- mes "In any case, to contain the ^FF0000Strange Hydra^000000s,";
- mes "you have to use this specially designed tool a.k.a. a ^8B4513Hydra Ball^000000";
- next;
- mes "[Lucia]";
- mes "If you still have the ^006400Hydra Ball^000000,";
- mes "please use it on the ^FF0000Strange Hydra^000000s that";
- mes "you can find at the beach.";
- mes "If you are lucky, the tool will work perfectly.";
- next;
- mes "[Lucia]";
- mes "I hope many adventurers";
- mes "volunteer for this job.";
- mes " ";
- mes "I really hate Hydra!";
- emotion e_sob;
- close;
- }
- }
- }
- }
- else {
- mes "[Lucia]";
- mes "Oh, ^0000FF"+strcharinfo(0)+"^000000 you're back.";
- set .@nCheckTime,checkquest(9029,PLAYTIME);
- if ((.@nCheckTime == 0) || (.@nCheckTime == 1)) {
- mes "I'm so grateful for your help.";
- mes "Each ^006400Hydra Ball^000000 is provided ^006400every 24 hours^000000";
- mes "Please come at the appropriate time.";
- close;
- }
- else {
- //recall_completequest 9028;
- if (.@nQState1 > -1) erasequest 9028;
- completequest 9029;
- mes "Did you come here to hunt ^FF0000Strange Hydra^000000s?";
- next;
- switch(select("Yes.:No.:^006400What is happening here?^000000")) {
- case 1:
- setquest 9028;
- getitem 12408,1; //Leaf_Cat_Ball
- mes "[Lucia]";
- mes "Here, take this ^006400Hydra Ball^000000.";
- mes "Use it to capture a ^FF0000Strange Hydra^8B4513.^000000";
- mes "I hope you can do it~!";
- close;
- case 2:
- mes "[Lucia]";
- mes "Ah, I misunderstood.";
- mes "See you then.";
- close;
- case 3:
- mes "[Lucia]";
- mes "One day ^FF0000Strange Hydra^000000s";
- mes "came here and surrounded the town.";
- mes "We're not sure what attracted them but some say that it's because of you adventurers.";
- next;
- mes "[Lucia]";
- mes "In any case, to contain the ^FF0000Strange Hydra^000000s,";
- mes "you have to use this specially designed tool a.k.a. a ^8B4513Hydra Ball^000000";
- next;
- mes "[Lucia]";
- mes "If you still have the ^006400Hydra Ball^000000,";
- mes "please use it on the ^FF0000Strange Hydra^000000s that";
- mes "you can find at the beach.";
- mes "If you are lucky, the tool will work perfectly.";
- next;
- mes "[Lucia]";
- mes "I hope many adventurers";
- mes "volunteer for this job.";
- mes " ";
- mes "I really hate Hydra!";
- emotion e_sob;
- close;
- }
- }
- }
- }
- end;
-
-OnInit:
- initnpctimer;
- end;
-
-OnTimer7000:
- emotion e_gasp;
- stopnpctimer;
- initnpctimer;
- end;
-}
-
-// Guarana Quest, Original file: brazil_tre.sc
-//============================================================
-brasilis,187,162,5 script Candy Maker 476,{
- if (!checkweight(1201,1)) {
- mes "- You can't start the quest. Please reduce the weight in your inventory. -";
- close;
- }
- if (brazil_gua == 0) {
- mes "[Candy Maker]";
- mes "Yo, do you know a berry called ^FF0000Guarana^000000?";
- next;
- mes "[Candy Maker]";
- mes "Guarana is a really special berry raised in a specific area, it relieves physical fatigue, and gives power to the body. It even detoxes waste from the body.";
- next;
- mes "[Candy Maker]";
- mes "I used to sell the candy made of it back in the day.";
- mes "I got a prize sometimes every year in the <annual best product contest>. Those were the good 'ol days.";
- next;
- mes "[Candy Maker]";
- mes "Since then, the output of that fruit has reduced and the price has gone up so now candy ingredients were changed to coconuts or other tropical fruits instead. I miss the guarana candy.";
- next;
- switch(select("How can I taste this guarana candy?:End conversation.")) {
- case 1:
- mes "[Candy Maker]";
- mes "Hmm? I already sold out of all my old supply.";
- next;
- mes "[Candy Maker]";
- mes "But if you can find some guarana, I can make it for you.";
- next;
- switch(select("How do I find guarana?:End conversation.")) {
- case 1:
- mes "[Candy Maker]";
- mes "Will you find the guarana?? Hoooooh~";
- next;
- mes "[Candy Maker]";
- mes "Can you find it?";
- mes "It's probably very expensive.";
- mes "Trading isn't my thing. Let me think.";
- next;
- mes "[Candy Maker]";
- mes "Let me introduce you to someone with whom I used to do guarana business with.";
- mes "He might still be dealing it.";
- next;
- mes "[Candy Maker]";
- mes "His name is Cherto.";
- mes "If you can't find him in the city, go to museum.";
- mes "He's a vain person so he likes to act big.";
- mes "He's probably wandering in the museum trying to show off to someone for sure.";
- set brazil_gua,1;
- setquest 2192;
- close;
- case 2:
- mes "[Candy Maker]";
- mes "Don't you want to try the guarana candy?";
- close;
- }
- case 2:
- mes "[Candy Maker]";
- mes "Those were the good 'ole days...";
- close;
- }
- }
- else if (brazil_gua == 1) {
- mes "[Candy Maker]";
- mes "If you want to get the guarana, find Cherto.";
- mes "Maybe he will be in the museum.";
- close;
- }
- else if (brazil_gua == 10) {
- if (!countitem(6237)) {
- mes "- The guarana that I had has disappeared. -";
- close;
- }
- delitem 6237,1; //Guarana_Fruit
- mes "[Candy Maker]";
- mes "Did you get the guarana?";
- next;
- mes "- You give the guarana to him. -";
- next;
- mes "[Candy Maker]";
- mes "Wow! You have special talent.";
- mes "It's the best thing I have ever seen so far. Cool~!";
- next;
- mes "[Candy Maker]";
- mes "Good, let's make the candy~!";
- mes "Long time no see my wonderful guarana candy...";
- next;
- mes "- hash hash hash hash hash hash -";
- mes "- hash hash hash hash hash hash -";
- next;
- mes "[Candy Maker]";
- mes "Look! It's the popular guarana candy.";
- mes "Try to savor its amazing taste hey~ take it easy. hahaha!!";
- set brazil_gua,11;
- completequest 2200;
- getitem 12414,1; //Guarana_Candy
- getexp 700000,100000;
- close;
- }
- else if (brazil_gua == 11) {
- mes "[Candy Maker]";
- mes "Guarana candy. That was the most unique masterpiece in my life for sure!";
- next;
- mes "[Candy Maker]";
- mes "Since you helped me, guarana supply has been steadily rising.";
- mes "So, naturally I'm back to making guarana candy.";
- next;
- mes "[Candy Maker]";
- mes "What about it? Wanna buy some?";
- mes "It's 4000 zeny each.";
- next;
- switch(select("Buy a Guarana Candy.:Cancel.")) {
- case 1:
- if (Zeny > 3999) {
- mes "[Candy Maker]";
- mes "Here is a delicious guarana candy.";
- set zeny,zeny-4000;
- getitem 12414,1; //Guarana_Candy
- close;
- }
- else {
- mes "[Candy Maker]";
- mes "What? You should say before if you don't have money!";
- mes "Even if you are poor, I can't give this away for free.";
- close;
- }
- case 2:
- mes "[Candy Maker]";
- mes "Sometimes some people don't like it due to it's arousal effect.";
- close;
- }
- close;
- }
- else {
- mes "[Candy Maker]";
- mes "Guarana candy. That was the most unique masterpiece in my life for sure!";
- close;
- }
-}
-
-bra_in01,95,179,3 script Cherto 477,{
- if (brazil_gua == 0) {
- mes "[Cherto]";
- mes "Hmm... hey man, you are from outside, aren't you?";
- next;
- mes "[Cherto]";
- mes "Cherto can figure it out even if it's the first time. You can't trick Cherto.";
- mes "Cherto has sharp eyes like an eagle! Hahaha!";
- next;
- mes "[Cherto]";
- mes "Ok, ok. Yes, yes. I see!";
- next;
- mes "[Cherto]";
- mes "Anyway, you arrived in Brasilis but don't know what to do?";
- mes "Am I right?";
- mes "You don't know how fortunate you are to have found a really proper helper as myself.";
- next;
- mes "[Cherto]";
- mes "Cherto takes it by your expression that you want to say, ''You are a master!'' Right?";
- mes "Cherto, I can read and figure out all at once! That is written in your face!";
- next;
- mes "[Cherto]";
- mes "Cherto would love to stay here and explain everything to you but he is a busy man.";
- close;
- }
- else if (brazil_gua == 1) {
- mes "[Cherto]";
- mes "Hmm... hey man, you are from outside, aren't you?";
- next;
- mes "[Cherto]";
- mes "Cherto can figure it out even if it's the first time. You can't trick Cherto.";
- mes "Cherto has sharp eyes like an eagle! Hahaha!";
- next;
- mes "[Cherto]";
- mes "Ok, ok. Yes, yes. I see!";
- next;
- mes "[Cherto]";
- mes "Anyway, you arrived in Brasilis but don't know what to do?";
- mes "Am I right?";
- mes "You don't know how fortunate you are to have found a really proper helper as myself.";
- next;
- mes "[Cherto]";
- mes "Cherto takes it by your expression that you want to say, ''You are a master!'' Right?";
- mes "Cherto, I can read and figure out all at once! That is written in your face!";
- next;
- mes "[Cherto]";
- mes "If you have a curious thing to ask to Cherto. Cherto will be kind enough to answer.";
- next;
- select("Guarana?");
- mes "[Cherto]";
- mes "What? Do you want to find a guarana?";
- next;
- mes "[Cherto]";
- mes "Guarana is only raised in this area, it has a soft inside and is coverd with a light fur.";
- mes "It seems a little bit weird but the flower is really big and smells beautiful.";
- next;
- mes "[Cherto]";
- mes "A long time ago, guarana was used to relieve desease and thirst. But recently it's getting popular to revitalize body power and increase blood circulation.";
- next;
- mes "[Cherto]";
- mes "Although it has such great effects, Cherto is sorry to inform you that we can't get it anymore.";
- next;
- select("Whaaaat??");
- mes "[Cherto]";
- mes "For a while now, guarana berries haven't been growing here.";
- next;
- mes "[Cherto]";
- mes "Even if Cherto managed to find one, it will rot quickly.";
- next;
- mes "[Cherto]";
- mes "If only it didn't happen!";
- next;
- select("What are you talking about?");
- mes "[Cherto]";
- mes "Quiet!!!!!!!!!!!!!!!!";
- mes "This story has been forbidden! Someone might be listening to our conversation...";
- next;
- mes "[Cherto]";
- mes "If Cherto tells you, you might get us into trouble. But you look like you really wanna know so let me give you a tip.";
- mes "Come closer. Cherto will whisper so nobody can listen in.";
- set brazil_gua,2;
- close;
- }
- else if (brazil_gua == 2) {
- mes "[Cherto]";
- mes "A Guarana boy was born.";
- next;
- select("Guarana kid?");
- mes "[Cherto]";
- mes "There was woman who was an expert botanist.";
- mes "The woman was really popular to all living creatures.";
- next;
- mes "[Cherto]";
- mes "At around the time her baby was born, she started a guarana farm. For some reason, her brothers were jealous so they destroyed the farm and disappeared.";
- mes "That kind of story...";
- next;
- mes "[Cherto]";
- mes "We can't be sure that baby was born in the world but since that time, all guarana in Brasilis disappeared.";
- next;
- mes "[Cherto]";
- mes "Who is the guarana kid?";
- mes "Pedro who is famous as a greedy man?";
- mes "Meto who can't endure about all the fruits?";
- mes "Hovenue who is gloomy?";
- mes "They might know~!";
- next;
- mes "[Cherto]";
- mes "What about you?";
- mes "Who is the guarana kid?";
- mes "Will you figure out it? hohohhhhh~";
- set brazil_gua,3;
- changequest 2192,2193;
- close;
- }
- else if (brazil_gua == 3) {
- mes "[Cherto]";
- mes "Can you find the guarana kid?";
- mes "Maybe yes? Maybe no?";
- close;
- }
- else if (brazil_gua == 4) {
- mes "[Cherto]";
- mes "Did you find guarana kid?";
- next;
- mes "- I tell Cherto about the kid making animal-like sounds. -";
- next;
- mes "[Cherto]";
- mes "Hoooh. That's unbelivable.";
- mes "That kid might be a guarana kid. Sure...";
- mes "According to the story the kid can have conversations with animals.";
- next;
- mes "[Cherto]";
- mes "If he can make crying sounds of animals, they might be able to converse!";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "Now, what can I do?";
- mes "If he is the kid from the legend, is there any way to raise the guarana again?";
- next;
- mes "[Cherto]";
- mes "Haha!! What'd Cherto say?";
- mes "Cherto knows all~!!";
- mes "Cherto's already thought";
- mes "of the next step.";
- next;
- mes "[Cherto]";
- mes "In Brasilis there is an expert Mage.";
- mes "His name is Paje.";
- mes "Take this note over to him.";
- mes "He will show the solution for you and the kid.";
- set brazil_gua,5;
- changequest 2194,2195;
- close;
- }
- else {
- mes "[Cherto]";
- mes "hoho tickle~tickle~~~~!!!";
- close;
- }
-}
-
-brasilis,203,64,3 script Strange Kid#bra 706,{
- if (brazil_gua < 3) {
- mes "[Strange Kid]";
- mes "................";
- close;
- }
- else if (brazil_gua == 3) {
- mes "[Strange Kid]";
- mes "................";
- next;
- switch(select("Try to talk.:Pretend to pass by.")) {
- case 1:
- break;
- case 2:
- mes "[Strange Kid]";
- mes "................";
- close;
- }
- mes "What can I say to him?";
- next;
- while(1) {
- switch(select("What's your name?:How old are you?:What are you doing?:End conversation.")) {
- case 1:
- mes "[Strange Kid]";
- mes "Kaaaaaaao~";
- mes "Grrrrrrrrr - kaaan-";
- next;
- break;
- case 2:
- mes "[Strange Kid]";
- mes "Booooowoooooo-";
- mes "Booooowoooooo- -";
- next;
- break;
- case 3:
- mes "[Strange Kid]";
- mes "chamber pot braeee chamber pot brae chamber pot brae -";
- mes "Bbeeeebbeee -";
- next;
- break;
- case 4:
- mes "[Strange Kid]";
- mes "Kaaaaaaao~";
- mes "Grrrrrrrrr - kaaan-";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "He makes strange sound like an animals.";
- mes "Should I ask advice from Cherto?";
- set brazil_gua,4;
- changequest 2193,2194;
- close;
- }
- }
- }
- else if (brazil_gua == 4) {
- mes "["+strcharinfo(0)+"]";
- mes "He makes strange sounds like an animal.";
- mes "Should I ask advice from Cherto?";
- close;
- }
- else if ((brazil_gua > 4) && (brazil_gua < 9)) {
- mes "[Strange Kid]";
- mes "Ah...? ah.....?";
- close;
- }
- else if (brazil_gua == 9) {
- mes "[Strange Kid]";
- mes "ah... ahah.....";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "I don't have a story but there are lots of friends waiting outside.";
- next;
- mes "- You give the feather, fresh meat and branch of grapes to the kid -";
- next;
- mes "[Strange Kid]";
- mes "Ah.............";
- next;
- mes "[Strange Kid]";
- mes "Un, uhh....";
- mes "mooo... mommy.....";
- next;
- mes "[Strange Kid]";
- mes "Ah..........";
- mes "bird....";
- mes "mon, mon, mon...key......";
- mes "boo, booow...........";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "Dog?!";
- mes "kkk yes. Lots of friends want to meet you.";
- mes "Don't be lonely anymore and be happy with your friends.";
- next;
- mes "[Strange Kid]";
- mes "ah....he...hehe....";
- next;
- mes "- He starts to smile lightly and laughs. -";
- next;
- mes "[Strange Kid]";
- mes "Ye......yes.......";
- mes "tha... than......thank......yo.........you.";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "Alright such a cute smile!";
- mes "Be a happy kid as always.";
- next;
- mes "[Strange Kid]";
- mes "Uh......";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "what?";
- next;
- mes "[Strange Kid]";
- mes "hey..........";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "Do you want to say anything?";
- next;
- mes "- You get closer and pretend to take caution. -";
- next;
- emotion e_kis;
- mes "(kiss~)";
- next;
- mes "- The kid laughs again lightly then puts something in your hand. -";
- next;
- mes "- It's a fresh berry that's colored red and hard. -";
- next;
- mes "[Strange Kid]";
- mes "ga...ra..........na...";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "Oops, guarana berry?";
- mes "Ah! Thank you very much!";
- emotion e_kis2,1;
- emotion e_heh;
- next;
- mes "["+strcharinfo(0)+"]";
- mes "If I have this, I can make a guarana candy.";
- mes "I better find that Candy Maker!";
- set brazil_gua,10;
- changequest 2199,2200;
- getitem 6237,1; //Guarana_Fruit
- close;
- }
- else if (brazil_gua == 10) {
- if (!countitem(6237)) {
- mes "[Strange Kid]";
- mes "He.........";
- getitem 6237,1; //Guarana_Fruit
- close;
- }
- }
- else {
- mes "- The kid is smiling. -";
- close;
- }
- end;
-}
-
-brasilis,56,224,7 script Mage Paje#bra 704,{
- if (brazil_gua < 5) {
- mes "[Mage Paje]";
- mes "Abracadabra~";
- set .@cspr_bra,rand(1,3);
- if (.@cspr_bra == 1) {
- specialeffect EF_POISONHIT,AREA,"Poring#bra";
- setnpcdisplay "Poring#bra",876;
- }
- else if (.@cspr_bra == 2) {
- specialeffect EF_POISONHIT,AREA,"Poring#bra";
- setnpcdisplay "Poring#bra",800;
- }
- else {
- specialeffect EF_POISONHIT,AREA,"Poring#bra";
- setnpcdisplay "Poring#bra",909;
- }
- close;
- }
- else if (brazil_gua == 5) {
- mes "[Mage Paje]";
- mes "Abracadabra~";
- set .@cspr_bra,rand(1,3);
- if (.@cspr_bra == 1) {
- specialeffect EF_POISONHIT,AREA,"Poring#bra";
- setnpcdisplay "Poring#bra",876;
- }
- else if (.@cspr_bra == 2) {
- specialeffect EF_POISONHIT,AREA,"Poring#bra";
- setnpcdisplay "Poring#bra",800;
- }
- else {
- specialeffect EF_POISONHIT,AREA,"Poring#bra";
- setnpcdisplay "Poring#bra",909;
- }
- next;
- mes "[Mage Paje]";
- mes "Ohoooh~!";
- mes "I have a guest.";
- mes "Good to see you.";
- mes "I am the Mage Paje.";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "Hello. Mr. Cherto told me to find you.";
- next;
- mes "[Mage Paje]";
- mes "Um.. Mr. Cherto? What's happened?";
- mes "Have you come here to ask about lots of weird rumors?";
- next;
- mes "- You give the note to Paje-";
- next;
- mes "[Mage Paje]";
- mes "Ohoooh~";
- mes "Hmm gosh.. that's what happened.";
- next;
- mes "[Mage Paje]";
- mes "I can't help you directly.";
- mes "But I will give you simple magic so you can figure it out by yourself.";
- next;
- select("What kind of magic?");
- mes "[Mage Paje]";
- mes "It's a magic that will make you appear as an animal to other animals. Pretty cool huh?";
- next;
- mes "[Mage Paje]";
- mes "Ok~ I will give you the magic.";
- mes "Most animals are really sensitive so they might be aware of it. Find a Toucan in the field that's oblivious to the spell. You'll know when you talk to it.";
- next;
- mes "[Mage Paje]";
- mes "Good luck~!";
- set brazil_gua,6;
- changequest 2195,2196;
- specialeffect2 EF_ASSUMPTIO;
- close;
- }
- else {
- mes "[Mage Paje]";
- mes "Abrakatabra~";
- set .@cspr_bra,rand(1,3);
- if (.@cspr_bra == 1) {
- specialeffect EF_POISONHIT,AREA,"Poring#bra";
- setnpcdisplay "Poring#bra",876;
- }
- else if (.@cspr_bra == 2) {
- specialeffect EF_POISONHIT,AREA,"Poring#bra";
- setnpcdisplay "Poring#bra",800;
- }
- else {
- specialeffect EF_POISONHIT,AREA,"Poring#bra";
- setnpcdisplay "Poring#bra",909;
- }
- close;
- }
- end;
-}
-
-brasilis,59,226,3 script Poring#bra 909,{
- end;
-}
-
-bra_fild01,75,83,5 script Toucan#bra 2073,2,2,{
-OnTouch:
- if (brazil_gua == 6) {
- mes "[Toucan]";
- mes "Baaeecc!";
- mes "I've never seen you before.";
- mes "Baaeec!";
- next;
- mes "[Toucan]";
- mes "It's the middle of the new and old continent... I know I've never seen you before but you seem familiar, like a woman dancing a samba. ";
- next;
- select("What are you talking about?");
- mes "[Toucan]";
- mes "I can feel some similar power like guarana kid. bbaaaeeeccc!";
- next;
- mes "[Toucan]";
- mes "That kid has had a really lonely time, baaecc! Perhaps you are a friend of him? Baaeec!!";
- next;
- select("Not yet... but I want to be a friend.");
- mes "[Toucan]";
- mes "The kid who received care from guarana woman is also a friend of animals. Bbaaeecc!";
- next;
- mes "[Toucan]";
- mes "I'd like to give the symbol of a toucan representative for the kid. Bbaaeecc!";
- next;
- mes "[Toucan]";
- mes "If you want to relieve his loneliness, can you help me?";
- next;
- select("Absolutely!");
- mes "[Toucan]";
- mes "It's my feather.";
- mes "Send it to the kid.";
- mes "We will keep our promise of friendship between guarana kid and Toucan forever. Bbaaeecc!";
- next;
- mes "- You take a feather from Toucan. - ";
- next;
- mes "[Toucan]";
- mes "There have to be others around here like me.";
- mes "Why don't you find a jaguar Bbaaeecc!";
- next;
- mes "[Toucan]";
- mes "I will give a blessing from Toucan to you.";
- next;
- mes "[Toucan]";
- mes "Fly fly far away. bbaaaeeeccckkk--!";
- set brazil_gua,7;
- changequest 2196,2197;
- specialeffect2 EF_SEISMICWEAPON;
- close2;
- warp "bra_fild01",68,146;
- end;
- }
- else {
- mes "[Toucan]";
- mes "Bbbaaeec~! Baaeec~!";
- close;
- }
- end;
-}
-
-bra_fild01,34,184,5 script Jaguar#bra 2072,2,2,{
-OnTouch_:
- if (brazil_gua == 7) {
- mes "[Jaguar]";
- mes "Hhooww..hhooww.....";
- next;
- mes "[Jaguar]";
- mes "Smelling! This smell is from a human!";
- mes "Somewhere, a human!";
- mes "I got it. You are!!!";
- specialeffect EF_HIT1,AREA,"Jaguar#bra";
- emotion e_omg,1;
- next;
- mes "[Jaguar]";
- mes "Don't be afraid human.";
- mes "I don't have enough power to hunt humans, just waiting time to end my lifetime in this jungle.";
- next;
- mes "[Jaguar]";
- mes "Anyway you can talk with me, are you a guarana kid?";
- next;
- select("Yes? N...o......actually....");
- mes "[Jaguar]";
- mes "The son of guarana woman became our friend also.";
- mes "They treated all life preciously.";
- mes "I hope you are same the as her.";
- next;
- mes "[Jaguar]";
- mes "Bird's chirpings informed me.";
- mes "The son of guarana woman has a diseased heart.";
- mes "Her brothers made him lonely, don't you think?";
- next;
- mes "[Jaguar]";
- mes "Here is fresh meat that I hunted just a few days ago.";
- mes "Take it and give it to the poor kid.";
- next;
- mes "[Jaguar]";
- mes "I can give this tiny thing to you so, don't forget it.";
- mes "The jungle will welcome you whenever!";
- next;
- mes "- You get fresh meat from Jaguar. -";
- next;
- mes "[Jaguar]";
- mes "Monkey, who's always meddling with others, wants to meet you.";
- next;
- mes "[Jaguar]";
- mes "I will give you a Jaguar's high blessing.";
- mes "Go to monkey by flowing through the wind like a bee.";
- mes "Let's meet again my friend!";
- set brazil_gua,8;
- changequest 2197,2198;
- close2;
- //ConsumeSpecialItem Speed_Up_Potion
- sc_start SC_SpeedUp1,5000,0;
- end;
- }
- else {
- mes "[Jaguar]";
- mes "krrrrrr....";
- close;
- }
- end;
-}
-
-bra_fild01,245,53,3 script #Monkeybra 1057,{
- end;
-}
-
-bra_fild01,245,52,3 script Monkey#bra 111,{
- if (brazil_gua == 8) {
- mes "[Monkey]";
- mes "What is it??!!";
- mes "We don't tolerate humans? Get out~!!";
- next;
- mes "[Monkey]";
- mes "Nono... wait.... that scent!!";
- mes "I can smell Jaguar from you, who are you?";
- mes "Gosh, maybe there's no jaguar without fur and weird shape!";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "........................";
- mes "Are you saying that I look like an animal?!?!";
- next;
- mes "[Monkey]";
- mes "Uh? Aren't you a jaguar?";
- next;
- mes "[Monkey]";
- mes "Ahhha. Jaguar send you to me, right?? kkkikkki";
- mes "But you don't look like guarana kid.";
- next;
- select("I've come here to help him.");
- mes "[Monkey]";
- mes "I heard guarana kid became lonely, is he?";
- mes "We are experts in acrobatic acts, does kid like it?? kkkickkksk!";
- next;
- mes "[Monkey]";
- mes "Give this branch of grapes to guarana kid.";
- mes "We will make him have fun during the whole night whenever he comes to us!! kkkickkksk!";
- next;
- mes "- You get a bunch of grapes from Monkey. -";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "Good~ Now it's time to go back to the kid~!!";
- set brazil_gua,9;
- changequest 2198,2199;
- close;
- }
- else {
- mes "[Monkey]";
- mes "kkkickkksk!";
- close;
- }
-}
-
-// Water Lily Quest, Original file: brazil_tre.sc
-//============================================================
-brasilis,203,286,3 script Botanist Karmen#bra 893,{
- if (brazil_regia == 0) {
- mes "[Karmen]";
- mes "Brasilis' climate is special.";
- mes "This climate offers special cases in botany classes different from any other regions of the world.";
- next;
- mes "[Karmen]";
- mes "The plants here have robust frames and are clear and colorful.";
- mes "Here the plants are really huge and we can feel their presence.";
- next;
- mes "[Karmen]";
- mes "One of them, a Water Lily, is a really gorgeous and unique plant.";
- mes "This flower is quite sensitive so it doesn't bloom everywhere.";
- next;
- switch(select("Interesting.:End conversation.")) {
- case 1:
- break;
- case 2:
- mes "[Karmen]";
- mes "I guess you aren't interested in botany.";
- close;
- }
- mes "[Karmen]";
- mes "It doesn't appear easily and it is a mysterious flower even to the natives, so the Brasilis people believe that a person will get great luck if someone finds it.";
- next;
- mes "[Karmen]";
- mes "As a botanist, I have been hanging around here to find the lucky flower but as I expected, it hasn't shown itself yet.";
- next;
- mes "[Karmen]";
- mes "I believe that with enough perseverence, this flower will show me it's beautiful brilliance.";
- next;
- mes "[Karmen]";
- mes "Ah, if you are interested more in the Water Lily story, find someone named Marta.";
- mes "She is wise and knows lots of stories here in Brasilis.";
- set brazil_regia,1;
- setquest 2201;
- close;
- }
- else if (brazil_regia == 1) {
- mes "[Karmen]";
- mes "Ah, if you are interested more in the Water Lily story, find someone named Marta.";
- mes "She is wise and knows lots of stories here in Brasilis.";
- close;
- }
- else if (brazil_regia == 9) {
- mes "- You show a lotus flower to Karmen and talk about the story so far. -";
- next;
- mes "[Karmen]";
- mes "Wow!! You had a really good experience.";
- mes "So~~~ the water lily lives in the depths of brasilis, right?";
- mes "I wil try to find it again by myself, I won't give up!!";
- next;
- mes "[Karmen]";
- mes "I am so grateful that I met you.";
- mes "The water lily must truly be a lucky flower. hahaha";
- set brazil_regia,10;
- completequest 2207;
- getexp 500000,100000;
- close;
- }
- else {
- mes "[Karmen]";
- mes "This climate offers special cases in botany classes different from any other regions of the world.";
- next;
- mes "[Karmen]";
- mes "The plants here have robust frames and are clear and colorful.";
- mes "Here the plants are really huge and we can feel their presence.";
- next;
- mes "[Karmen]";
- mes "It's a botanist's dream.";
- close;
- }
-}
-
-bra_in01,142,27,5 script Marta#bra 474,{
- if (brazil_regia == 1) {
- mes "[Brasilis Boy]";
- mes "Grandma! That person has a weird smell.";
- next;
- mes "[Marta]";
- mes "This person isn't from here.";
- mes "Say hello to our guest.";
- next;
- mes "[Brasilis Boy]";
- mes "heee~ hi!!";
- mes "I am Kaka!!";
- mes "Whats your name?";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "I am "+strcharinfo(0)+".";
- next;
- mes "[Brasilis Boy]";
- mes "The outsider has a weird name!";
- mes "Thas ok! If we keep talking we'll be friends! Cheer up!";
- next;
- mes "[Marta]";
- mes "Hehe...";
- mes "So, why have you come here stranger~?";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "I heard you knows lots of stories, is that true?";
- next;
- mes "[Kaka]";
- mes "Wooo! how you know my grandma knows lots of stories, amazing~?";
- mes "Grandma is really wise and kind so, I heard lotsa things.";
- next;
- mes "[Marta]";
- mes "Hehe. Kaka always listens to many stories every night, he really likes my stories.";
- mes "Kaka always makes me happy because he asks so many curious things. That is pure happiness.";
- next;
- mes "[Marta]";
- mes "Ok, Kaka why don't you invite our guest today to our small meeting?";
- next;
- mes "[Kaka]";
- mes "Ok grandma~!!";
- next;
- mes "[Marta]";
- mes "Hey~ do you have special story that you want to listen to?";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "About the mysterious water lily?";
- next;
- mes "[Marta]";
- mes "Water lily....";
- mes "It's from a long long time ago.";
- next;
- mes "[Marta]";
- mes "Before Brasilis was established.";
- mes "A tribe that lived with the giant waterfall and jungle as friends spent their whole time with nature.";
- next;
- mes "[Marta]";
- mes "One of tribe chiefs had a pretty daughter called 'Naia'.";
- next;
- mes "[Marta]";
- mes "Naia liked listening to stories like Kaka so, her mom told her stories every night about nature and gods.";
- next;
- mes "[Kaka]";
- mes "Woooa, she's just like me!";
- mes "Maybe she would be pretty... hehe.";
- next;
- mes "[Marta]";
- mes "According to her mother...";
- mes "If the moon in the sky loves some woman in the earth, he turns her into a star so that they can stay together forever.";
- next;
- mes "[Marta]";
- mes "After Naia heard this story, she went to her dad to ask if it was true or not.";
- next;
- mes "[Kaka]";
- mes "So, what did he say?";
- next;
- mes "[Marta]";
- mes "^3131FF'My dear, Naia the moon is one of the bravest men. But he can no longer have a bride. So you can't become a star... Sorry~.^000000";
- next;
- mes "[Kaka]";
- mes "Did Naia wants to be the bride of the man?";
- next;
- mes "[Marta]";
- mes "Yes Kaka, imagine the moon how beautiful and mysterious, that's just ideal for girls.";
- next;
- mes "[Kaka]";
- mes "But the moon doesn't meet a human as his wife anymore? What was going on with Naia?";
- next;
- mes "[Marta]";
- mes "Naia was really a nice girl.";
- next;
- mes "[Marta]";
- mes "Although her parents tried to prevent her, she still went to the forest to meet the moon every night.";
- mes "Sadly, even with all of her effort, the moon didn't show any reaction to her.";
- next;
- mes "[Marta]";
- mes "One day she also went to the top of the mountain to be closer to him. She decided to take a rest for a while around the lake.";
- next;
- mes "[Marta]";
- mes "That's when.. Naia saw it.";
- mes "It was the moon he was shining beautifully over the waving lake lightly.";
- next;
- mes "[Kaka]";
- mes "I know, it's just the moon reflecting on the water. Right?!";
- next;
- mes "[Marta]";
- mes "Yes, but to her, the image made her fall into the lake without hesitating and drowned.";
- next;
- mes "[Kaka]";
- mes "Oh no.";
- next;
- mes "[Marta]";
- mes "The moon was also watching her from the sky.";
- mes "He felt sad and pitied her. So he decided to turn her into a beautiful flower to thank her for her love.";
- next;
- mes "[Marta]";
- mes "That is the story of the mysterious flower people called the Brasilis Water Flower.";
- mes "This Naia flower appears as light white during daytime but in the night turns into red due to it's love connection to the moon.";
- next;
- mes "[Kaka]";
- mes "How sad but beautiful!";
- next;
- mes "[Marta]";
- mes "How about you stranger?";
- mes "Did you enjoy this story?";
- mes "If you want to listen to another story, just come to me.";
- mes "If you don't mind playing with my grandson a ~ little. hoohoo.";
- set brazil_regia,2;
- close;
- }
- else if (brazil_regia > 1) {
- mes "[Kaka]";
- mes "My grandma is really a bit tired doing some tribe stuff!";
- mes "Could you come another day?";
- close;
- }
- else {
- mes "[Marta]";
- mes "You are not from around here.";
- mes "I can sense a strange earth smell.";
- next;
- mes "[Marta]";
- mes "But your eyes shine with strength.";
- mes "Indeed you are spreading out spirit and will from your whole body.";
- next;
- mes "[Marta]";
- mes "If you work at it you will be a great person someday.";
- close;
- }
-}
-
-bra_in01,145,27,3 script Brasilis Boy#bra 472,{
- if (brazil_regia == 1) {
- mes "[Brasilis Boy]";
- mes "Grandma! That person has a weird smell.";
- next;
- mes "[Marta]";
- mes "This person isn't from here.";
- mes "Say hello to our guest.";
- next;
- mes "[Brasilis Boy]";
- mes "heee~ hi!!";
- mes "I am Kaka!!";
- mes "Whats your name?";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "I am "+strcharinfo(0)+".";
- next;
- mes "[Brasilis Boy]";
- mes "The outsider has a weird name!";
- mes "Thas ok! If we keep talking we'll be friends! Cheer up!";
- next;
- mes "[Marta]";
- mes "Hehe...";
- mes "So, why have you come here stranger~?";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "I heard you knows lots of stories, is that true?";
- next;
- mes "[Kaka]";
- mes "Wooo! how you know my grandma knows lots of stories, amazing~?";
- mes "Grandma is really wise and kind so, I heard lotsa things.";
- next;
- mes "[Marta]";
- mes "Hehe. Kaka always listens to many stories every night, he really likes my stories.";
- mes "Kaka always makes me happy because he asks so many curious things. That is pure happiness.";
- next;
- mes "[Marta]";
- mes "Ok, Kaka why don't you invite our guest today to our small meeting?";
- next;
- mes "[Kaka]";
- mes "Ok grandma~!!";
- next;
- mes "[Marta]";
- mes "Hey~ do you have special story that you want to listen to?";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "About the mysterious water lily?";
- next;
- mes "[Marta]";
- mes "Water lily....";
- mes "It's from a long long time ago.";
- next;
- mes "[Marta]";
- mes "Before Brasilis was established.";
- mes "A tribe that lived with the giant waterfall and jungle as friends spent their whole time with nature.";
- next;
- mes "[Marta]";
- mes "One of tribe chiefs had a pretty daughter called 'Naia'.";
- next;
- mes "[Marta]";
- mes "Naia liked listening to stories like Kaka so, her mom told her stories every night about nature and gods.";
- next;
- mes "[Kaka]";
- mes "Woooa, she's just like me!";
- mes "Maybe she would be pretty... hehe.";
- next;
- mes "[Marta]";
- mes "According to her mother...";
- mes "If the moon in the sky loves some woman in the earth, he turns her into a star so that they can stay together forever.";
- next;
- mes "[Marta]";
- mes "After Naia heard this story, she went to her dad to ask if it was true or not.";
- next;
- mes "[Kaka]";
- mes "So, what did he say?";
- next;
- mes "[Marta]";
- mes "^3131FF'My dear, Naia the moon is one of the bravest men. But he can no longer have a bride. So you can't become a star... Sorry~.^000000";
- next;
- mes "[Kaka]";
- mes "Did Naia wants to be the bride of the man?";
- next;
- mes "[Marta]";
- mes "Yes Kaka, imagine the moon how beautiful and mysterious, that's just ideal for girls.";
- next;
- mes "[Kaka]";
- mes "But the moon doesn't meet a human as his wife anymore? What was going on with Naia?";
- next;
- mes "[Marta]";
- mes "Naia was really a nice girl.";
- next;
- mes "[Marta]";
- mes "Although her parents tried to prevent her, she still went to the forest to meet the moon every night.";
- mes "Sadly, even with all of her effort, the moon didn't show any reaction to her.";
- next;
- mes "[Marta]";
- mes "One day she also went to the top of the mountain to be closer to him. She decided to take a rest for a while around the lake.";
- next;
- mes "[Marta]";
- mes "That's when.. Naia saw it.";
- mes "It was the moon he was shining beautifully over the waving lake lightly.";
- next;
- mes "[Kaka]";
- mes "I know, it's just the moon reflecting on the water. Right?!";
- next;
- mes "[Marta]";
- mes "Yes, but to her, the image made her fall into the lake without hesitating and drowned.";
- next;
- mes "[Kaka]";
- mes "Oh no.";
- next;
- mes "[Marta]";
- mes "The moon was also watching her from the sky.";
- mes "He felt sad and pitied her. So he decided to turn her into a beautiful flower to thank her for her love.";
- next;
- mes "[Marta]";
- mes "That is the story of the mysterious flower people called the Brasilis Water Flower.";
- mes "This Naia flower appears as light white during daytime but in the night turns into red due to it's love connection to the moon.";
- next;
- mes "[Kaka]";
- mes "How sad but beautiful!";
- next;
- mes "[Marta]";
- mes "How about you stranger?";
- mes "Did you enjoy this story?";
- mes "If you want to listen to another story, just come to me.";
- mes "If you don't mind playing with my grandson a ~ little. hoohoo.";
- set brazil_regia,2;
- close;
- }
- else if (brazil_regia > 1) {
- mes "[Kaka]";
- mes "My grandma is really a bit tired doing some tribe stuff!";
- mes "Could you come another day?";
- close;
- }
- else {
- mes "[Marta]";
- mes "You are not from around here.";
- mes "I can sense a strange earth smell.";
- next;
- mes "[Marta]";
- mes "But your eyes shine with strength.";
- mes "Indeed you are spreading out spirit and will from your whole body.";
- next;
- mes "[Marta]";
- mes "If you work at it you will be a great person someday.";
- close;
- }
-}
-
-brasilis,270,145,5 script Brasilis Girl#bra 473,5,5,{
- if (!checkweight(1201,1)) {
- mes "- wait a second!! -";
- mes "- you have too many items -";
- mes "- so you can't get any more items. -";
- mes "- make your body lighter -";
- mes "- then try again. -";
- close;
- }
- if (brazil_regia == 2) {
- mes "[Distant Sound]";
- mes "Jasira!!!";
- mes "Where are you going again?!!";
- mes "come back~, please!!";
- next;
- mes "[Brasilis Girl]";
- mes "Mom, I have to go out!!";
- next;
- mes "[Distant Sound]";
- mes "No way~!! You shouldn't!!";
- next;
- mes "[Brasilis Girl]";
- mes "Gosh.. today also failed.";
- next;
- mes "[Brasilis Girl]";
- mes "......";
- mes "What's up? Why are you looking at me?";
- mes "I don't want to be a showgirl!! Get out!!";
- next;
- switch(select("Nothing, sorry.:What's wrong?")) {
- case 1:
- mes "[Brasilis Girl]";
- mes "I am so sad!!!";
- close;
- case 2:
- break;
- }
- mes "[Brasilis Girl]";
- mes "It's not your business.";
- mes "You are just an outsider!";
- next;
- switch(select("How rude!:Just trying to help.")) {
- case 1:
- mes "[Brasilis Girl]";
- mes "What's it matter to you that I'm rude??!!";
- close;
- case 2:
- break;
- }
- mes "["+strcharinfo(0)+"]";
- mes "I know that I'm just passing by but I might be able to help you. What do you think?";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "This kind of meeting could be more than just a coincidence.";
- next;
- mes "[Brasilis Girl]";
- mes "......................";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "Hmm can you tell me your name?";
- next;
- mes "[Brasilis Girl]";
- mes "ja...";
- mes "Jasira.";
- mes "My name is Jasira.";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "Nice name~.";
- mes "Jasira what's going on?";
- next;
- mes "[Jasira]";
- mes ".............";
- next;
- mes "[Jasira]";
- mes "I have to meet 'Jasi' but I can't go out....";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "who is Jasi?";
- mes "Your.... lover?";
- next;
- emotion e_omg;
- mes "[Jasira]";
- mes "l...o...v...e...lover??!!";
- mes "No way~";
- next;
- mes "[Jasira]";
- mes "If he is my lover, it would be great... but...";
- next;
- mes "[Jasira]";
- mes "Jasi is......";
- mes "the great moon.";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "The moon?";
- mes "Maybe... are you talking about the moon from the story?";
- next;
- mes "[Jasira]";
- mes "Yeah!";
- mes "Dear Jasi is from the moon from the sky!";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "Why are you thinking like that?";
- next;
- mes "[Jasira]";
- mes "Cuz' Jasi is really gorgeous and the most important thing is he is taking care of the water lily in Brasilis.";
- next;
- emotion e_omg,1;
- mes "["+strcharinfo(0)+"]";
- mes "Brasilis water lily??!!";
- mes "Isn't it the uniqe flower?";
- next;
- mes "[Jasira]";
- mes "Right. It's a really mysterious flower and difficult to find.";
- mes "But around Jasi there are lots of water lilies.";
- mes "That's why I believe Jasi is the moon.";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "Where is Jasi?";
- next;
- mes "[Jasira]";
- mes "He is deep inside the Jungle.";
- mes "As you can see I am so weak so, I've been staying home. But once, I was strong enough to leave this village.";
- next;
- mes "[Jasira]";
- mes "I just wandered the jungle and fell down somewhere and that's where I saw him.";
- mes "He was so nice. He helped heal me and guided me back home.";
- mes "That was really really great time.";
- next;
- mes "[Jasira]";
- mes "Since I came back home, my parents punished me.";
- mes "I can understand why they are worrying but i missed Jasi a lot!";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "Why don't you meet him after recovering your strength?";
- next;
- mes "[Jasira]";
- mes ".................";
- mes "I wanna see him right now...";
- next;
- switch(select("Help Jasira.:Ignore her.")) {
- case 1:
- break;
- case 2:
- mes "["+strcharinfo(0)+"]";
- mes "Sorry I can't help you. Cheer up!";
- next;
- mes "[Jasira]";
- mes "Crying........";
- close;
- }
- mes "["+strcharinfo(0)+"]";
- mes "Jasira I came here to find the Brasilis water lily.";
- mes "Don't you think fate has brought us together?";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "If you tell me how to find Jasi, I can help you.";
- next;
- mes "[Jasira]";
- mes "Really? But I don't know exactly how to get there. I was just wandering around when I met him.";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "Can't you remember anything?";
- mes "If you know something you've gotta tell me.";
- next;
- mes "[Jasira]";
- mes "Let's see... I was wandering around a waterfall then fell down into the water then I was sucked into somewhere.";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "Good, that's better than nothing! I will look for a similar place.";
- next;
- mes "[Jasira]";
- mes "I gave you your information, so can you do me a favor?";
- mes "It's really simple...";
- next;
- mes "[Jasira]";
- mes "I'd like to give a delicious fruit.";
- mes "The place where Jas seemed cozy but I didn't see any food around... So if he sees a yummy fruit he will be happy!";
- next;
- mes "[Jasira]";
- mes "Give him 10 Banana and tell him that I really miss him.";
- mes "Sorry for ignoring you before. Please, only you can help me!";
- set brazil_regia,3;
- changequest 2201,2202;
- close;
- }
- else if ((brazil_regia == 3) || (brazil_regia == 4)) {
- mes "[Jasira]";
- mes "If you meet Jasi, give him 10 Bananas.";
- mes "Let's see... I was wandering around a waterfall then fell down into the water then I was sucked into somewhere.";
- next;
- mes "[Jasira]";
- mes "If you can't find the way, go up to the waterfall and ask the kids in Brasilis village.";
- mes "I heard one of the children went to a strange place before. He might've gone to the same place as me!";
- close;
- }
- else if (brazil_regia == 5) {
- mes "[Jasira]";
- mes "Did you meet Jasi?";
- mes "Did you talk about me?";
- mes "You didn't? Uh? Stupid! Gosh~!";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "Hey girl~ you've got a short temper.";
- mes "I did see him and I talked about you!";
- next;
- mes "[Jasira]";
- mes "Did you?";
- mes "What did he say?";
- mes "Does he remember me?";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "That you have a really good heart~";
- mes "I told him that you will try to meet him when your condition gets better.";
- next;
- mes "[Jasira]";
- mes "Yeahhhhh!!";
- mes "Thank you! You are more reliable than I thought you would be.";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "Anyway, I'm looking for a fruit that's brown and has a hard shell.";
- mes "It has juice inside and can be used as a cup to drink out of.";
- next;
- mes "[Jasira]";
- mes "Duh! You mean a coconut right?!";
- mes "They're everywhere here in Brasilis.";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "Thanks Jasira!";
- set brazil_regia,6;
- changequest 2204,2205;
- close;
- }
- else if ((brazil_regia == 6) || (brazil_regia == 7)) {
- mes "[Jasira]";
- mes "I should take care of my strength by myself!";
- mes "I can't just lie in my bed forever. Don't you agree?";
- close;
- }
- else if (brazil_regia == 8) {
- mes "[Jasira]";
- mes "Uh? Why have you come back?";
- next;
- mes "- You tell her what Jasi told you to tell her -";
- next;
- mes "[Jasira]";
- mes "Oh... really?";
- mes "Did he say that?";
- mes "Gosh! Gosh!!!";
- mes "Kkkkkaaaaa - !!";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "Thanks to you, I was able to get a flower.";
- mes "Thanks a lot!!";
- next;
- mes "[Jasira]";
- mes "Wooow. It's so beautiful.";
- next;
- mes "[Jasira]";
- mes "Ah... can I see it for a second?";
- next;
- mes "[Jasira]";
- mes "Surprise~!!";
- mes "I've been working on this hat while you were gone and now it's complete with the water lily flower!";
- next;
- mes "[Jasira]";
- mes "I know, I know! I'm the best...";
- delitem 7553,1; //Lotus_Flower
- set brazil_regia,9;
- changequest 2206,2207;
- set .@regiahat,rand(1,3);
- if (.@regiahat == 1)
- getitem2 5302,1,1,0,0,4195,0,0,0; //Lotus_Flower_Hat, Leaf_Cat_Card
- else if (.@regiahat == 2)
- getitem2 5302,1,1,0,0,4177,0,0,0; //Lotus_Flower_Hat, Dryad_Card
- else
- getitem2 5302,1,1,0,0,4188,0,0,0; //Lotus_Flower_Hat, Leib_Olmai_Card
- close;
- }
- else if (brazil_regia > 8) {
- mes "[Jasira]";
- mes "I just need to get a little bit stronger!";
- mes "I can't just lie in bed forever. My Jasi is waiting for me~";
- close;
- }
- else {
- mes "[Distant Sound]";
- mes "Jasira!!!";
- mes "Where are you going again?!!";
- mes "Come back~, please!!";
- next;
- mes "[Brasilis Girl]";
- mes "Please mom~!";
- mes "Please let me go!";
- close;
- }
- end;
-
-OnTouch:
- if (brazil_regia == 2) {
- emotion e_an;
- }
- end;
-}
-
-bra_dun02,67,205,5 script Recluse#bra 475,3,3,{
- if (brazil_regia == 3) {
- mes "[Recluse]";
- mes "Oh, I haven't seen another person in such a long time.";
- next;
- switch(select("Keep going.:Are you the moon?")) {
- case 1:
- mes "[Recluse]";
- mes "You don't have specific business with me.";
- close;
- case 2:
- break;
- }
- mes "[Recluse]";
- mes "Moon?";
- mes "My name is Jasi.";
- mes "My family has worked to take care of the water lily from generation to generation.";
- next;
- mes "[Jasi]";
- mes "Basically the Brasilis water lily is too shy to appear in front of people so, they only bloom in rare places. I guess they like it here, though, that's why I've been staying here for such a long time.";
- next;
- mes "[Jasi]";
- mes "My family has taken care of the water lily calmly to prevent harm from people's hand or monsters.";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "Do you remember a girl named Jasi.";
- next;
- mes "[Jasi]";
- mes "Ja...si..........";
- mes "Ah!! a hurry scurry girl. ";
- mes "Gosh.. I was in trouble due to that girl.";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "Trouble?";
- next;
- mes "[Jasi]";
- mes "One day a young lady appeared with lots of scars so I helped her. Then suddenly she tried to pick up the water lily and asked me to accept her as my wife or make her into a water lily what a nutcase!";
- next;
- mes "[Jasi]";
- mes "I was barely able to calm down and send her to the village.";
- mes "My life is that water lily so I didn't want anything embarrassing to happen.";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "This is a gift from Jasira to say sorry for that time.";
- mes "She is really sad that can't come here by herself due to private difficulties.";
- next;
- if (countitem(513) < 10) {
- mes "[Jasi]";
- mes "What are you saying?";
- next;
- mes "- Oh yeah, I forgot to bring 10 Bananas -";
- close;
- }
- mes "[Jasi]";
- mes "Ah! Bananas! Wow it's been a long time. She's pretty considerate isn't she?";
- next;
- mes "[Jasi]";
- mes "Anyway is that all the business you have with me?";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "Umm honestly I was wondering to find water lily and met you by coincidence. Jasira told me her sad story so that's what led me here.";
- next;
- mes "[Jasi]";
- mes "I got it.";
- mes "As you can see, there are lots of Brasilis water lily around here.";
- mes "If you make sure that you won't destroy them you can appreciate them as you wish.";
- set brazil_regia,4;
- changequest 2202,2203;
- close;
- }
- else if (brazil_regia == 4) {
- mes "[Jasi]";
- mes "Did you enjoy the water lily?";
- close;
- }
- else if (brazil_regia == 5) {
- mes "[Jasi]";
- mes "I forgot what the name of that fruit was...";
- close;
- }
- else if (brazil_regia == 6) {
- if (countitem(11515) < 5) {
- mes "[Jasi]";
- mes "I forgot what the name of that fruit was...";
- close;
- }
- else {
- mes "[Jasi]";
- mes "Did you find the fruit?";
- mes "Oh right this is....?";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "It's called a 'coconut'.";
- next;
- mes "[Jasi]";
- mes "Ahah! COCONUT!!";
- mes "Now I remember thank you very much. I can't remember the last time I had this fruit.";
- next;
- mes "[Jasi]";
- mes "I guess I should keep my promise.";
- mes "You can take one Water lily.";
- next;
- mes "[Jasi]";
- mes "I hope the Brasilis water lily will understand me.";
- mes "You better grab the flower while you have a chance~";
- next;
- mes "[Jasi]";
- mes "Oh, can you tell that girl Jasira something for me?";
- mes "Tell her that I am not the moon from the story, but I want to become the moon to shine only for her.";
- delitem 11515,5; //Coconut
- set brazil_regia,7;
- changequest 2205,2206;
- close;
- }
- }
- else {
- mes "[Jasi]";
- mes "The flowers blooming from the Water lily today is wonderful.";
- close;
- }
- end;
-
-OnTouchNPC:
- unitwarp 0,"this",67,215;
- end;
-}
-
-bra_dun02,71,200,3 script Water lily#bra 111,{
- if (brazil_regia == 4) {
- mes "An unusual Water lily is blooming here. You can't stop staring at it, knowing that few people have seen this flower bloom.";
- next;
- switch(select("Pick up the flower.:Keep gazing.")) {
- case 1:
- break;
- case 2:
- mes "- You can't avoid staring at it's beauty. -";
- close;
- }
- mes "[Jasi]";
- mes "Uh! What are you doing??!!";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "There is a person who really needs this flower, can I just take one of 'em?";
- next;
- mes "[Jasi]";
- mes "As I said earlier, I am the guardian of this water lily.";
- mes "I can't just stand by here and watch you pluck even a single flower from it.";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "Hey man~ I brought these delicious fruits for you... try it! They are really well matured and fresh bananas.";
- next;
- if (countitem(513) < 10) {
- mes "[Jasi]";
- mes "What are you saying?";
- next;
- mes "- Oh yeah, I forgot to bring 10 Bananas -";
- close;
- }
- mes "[Jasi]";
- mes "Hmm... It's been so long since I've had this fruit.";
- next;
- mes "[Jasi]";
- mes "I will just try one. That's all.";
- next;
- mes "- munch -";
- mes "- mumble mumble mumble -";
- specialeffect EF_POTION7,AREA,"Recluse#bra";
- next;
- mes "[Jasi]";
- mes "Uh, this taste... is!";
- mes "I remember my mom baking these into a tasty bread!";
- next;
- mes "[Jasi]";
- mes "It makes me miss my childhood.";
- next;
- emotion e_omg,0,"Recluse#bra";
- mes "[Jasi]";
- mes "Hoho!!!!";
- mes "I've been here for as long as I can remember...";
- mes "I don't have enough time to even do simple things like eat delicious fruit.";
- next;
- mes "[Jasi]";
- mes "It was a really delicious banana.";
- mes "But rules are rules!";
- mes "I must do my duty.";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "Please! I just need one flower~ What can I do to convince you?";
- next;
- mes "[Jasi]";
- mes "Rules are rules, what do you want from me?";
- next;
- mes "["+strcharinfo(0)+"]";
- mes "Didn't that banana remind you of your childhood? What can I get for you?";
- next;
- mes "[Jasi]";
- mes "Now that you mention it, there is one fruit that I really miss.";
- mes "It was my favorite when I was young but I don't remember what it was called.";
- next;
- mes "[Jasi]";
- mes "It's brown and has a hard shell around it. It has juice inside and you can use it as a cup when you're done eating the fruit.";
- mes "Do you know what it is?";
- next;
- mes "[Jasi]";
- mes "If you bring 5 of those things, I will reconsider your suggestion.";
- delitem 513,10; //Banana
- set brazil_regia,5;
- changequest 2203,2204;
- next;
- mes "["+strcharinfo(0)+"]";
- mes "Ok so I have to bring 5 fruits with hard shells.";
- mes "Hmm what is it?";
- close;
- }
- else if (brazil_regia == 5) {
- mes "[Jasi]";
- mes "It was my favorite when I was young but I don't remember what it was called.";
- next;
- mes "[Jasi]";
- mes "It's brown and has a hard shell around it. It has juice inside and you can use it as a cup when you're done eating the fruit.";
- mes "Do you know what it is?";
- close;
- }
- else if (brazil_regia == 7) {
- if (!checkweight(1201,1)) {
- mes "- wait a second!! -";
- mes "- you have too many items -";
- mes "- so you can't get any more items. -";
- mes "- make your body lighter -";
- mes "- then try again. -";
- close;
- }
- mes "- You take a beautiful water lily carefully in your hands. -";
- set brazil_regia,8;
- getitem 7553,1; //Lotus_Flower
- close;
- }
-}
-
-// Dungeon Access Quest, Original file: brazil_tre.sc
-//============================================================
-brasilis,185,246,5 script Pedro#bra 62,{
- if (brazil_ghost == 0) {
- mes "[Pedro]";
- mes "Wow it's really a great statue!";
- next;
- mes "[Mariana]";
- mes "It is, isn't it?";
- mes "This statue is called Verass Monument.";
- next;
- mes "[Mariana]";
- mes "A long time ago there was a really brave adventurer named Verass, thanks to his dedicated exploration, Brasilis was able to develop into this great city.";
- next;
- mes "[Pedro]";
- mes "Awesome!!";
- mes "i wanna become a real man like Verass.";
- next;
- mes "[Mariana]";
- mes "Pedro, you can become whatever you want.";
- next;
- mes "[Pedro]";
- mes "Mariana is so smart, isn't she? hehe.";
- next;
- mes "[Fabio]";
- mes "Ooooh! You love her don't you!";
- next;
- mes "[Daniel]";
- mes "Wooooaaaa Pedro and Mari sitting in a tree!";
- next;
- mes "[Fabio]";
- mes "Woooo k-i-s-s-i-n-g~!!!";
- next;
- mes "[Daniel]";
- mes "Nya nya nya!";
- next;
- mes "[Fabio]";
- mes "Hahahahaha.";
- next;
- mes "[Pedro]";
- mes "Stop acting like babies!";
- next;
- mes "[Mariana]";
- mes "Boys~!";
- next;
- mes "[Daniel]";
- mes "Yah yah...";
- mes "Hey guys, did you hear that something happened a few days ago?";
- next;
- mes "[Mariana]";
- mes "Oh yeah~ I heard that something really scary happened.";
- next;
- mes "[Fabio]";
- mes "Uh, yeah that's why Mariana got scared of going ot the bathroom for 3 days and everything was stinky. Ewwww~";
- next;
- mes "[Daniel]";
- mes "Ha ha ha! Smelly Mari!";
- next;
- mes "[Mariana]";
- mes "I hate you~!";
- mes "Stop spreading rumors about me. I'm not scared of the bathroom.";
- mes "Pedro, do you think that I stink?";
- next;
- mes "[Pedro]";
- mes "Uh? Uh?";
- mes "N......no... no way.";
- mes "Hey guys~ be nice to her~";
- next;
- mes "[Fabio]";
- mes "kkkickkkkkkkkick";
- next;
- mes "[Daniel]";
- mes "kkkickkkkkkkk";
- next;
- switch(select("Walk by.:Ask about the gossip.")) {
- case 1:
- mes "[Fabio]";
- mes "Mariana~ smells~ Nya nya~";
- next;
- mes "[Daniel]";
- mes "Oh man you stink too~! Nya nya~";
- close;
- case 2:
- break;
- }
- mes "[Fabio]";
- mes "Haven't you heard?";
- mes "The ghost story in the art museum.";
- next;
- mes "[Daniel]";
- mes "Ooohhhh! Scary~~~!";
- next;
- select("Can you tell me more?");
- mes "[Fabio]";
- mes "A coupla days ago we went to the art museum for a picnic at school.";
- mes "You know nothing special, just a ordinary field trip.";
- next;
- mes "[Fabio]";
- mes "Museums are boring so me and some friends snuck away from the group~!";
- next;
- mes "[Fabio]";
- mes "That's when we heard a scream echoing through the whole museum.";
- next;
- mes "[Daniel]";
- mes "kkakkakkaaaah!!";
- mes "kkieeeeeeh!";
- mes "kehkeh..";
- next;
- mes "[Mariana]";
- mes "I heard the scream too...";
- mes "You boys are always making noises where you're not supposed to.";
- next;
- mes "[Pedro]";
- mes "What else are we supposed to do? If we don't do it someone else will.";
- next;
- emotion e_an,0,"Mariana#bra";
- mes "[Mariana]";
- mes "Argh~ Boys are so frustrating sometimes.";
- next;
- select("So then what happened?");
- mes "[Fabio]";
- mes "Daniel and me guessed something weird was goin' on so we ran to where we thought the screams were comin' from.";
- next;
- mes "[Fabio]";
- mes "They were coming from the bathroom.";
- mes "Some kids got so scared that they started screaming too and closing their eyes. It got pretty bad.";
- next;
- mes "[Daniel]";
- mes "I think you pissed or pooped your pants. It smelled freakin' gross.";
- next;
- mes "[Fabio]";
- mes "Nah uh~ Your mom pissed her pants~ Nyah!";
- next;
- mes "[Daniel]";
- mes "Nah uh~ You~ pissed your pants~";
- next;
- mes "[Fabio]";
- mes "Anyway, so yeah, anyway that's how the rumor of the ghost in the museum started.";
- next;
- mes "[Daniel]";
- mes "Liar, there's no such thing as ghosts~";
- next;
- select("So was it a ghost?");
- mes "[Fabio]";
- mes "How should I know?";
- mes "No one could say they saw one and no one wanted to get in trouble from the teachers.";
- next;
- mes "[Pedro]";
- mes "I heard if you say special magic words that the ghost will come out.";
- next;
- mes "[Daniel]";
- mes "Quit butting into our conversation Pedro.";
- next;
- mes "[Fabio]";
- mes "Yah, what are you talking about, Pedro?";
- mes "So did you see the ghost?";
- next;
- mes "[Pedro]";
- mes "N... no. I'm scared of ghosts.";
- mes "But my friends said they saw one and they're not liars.";
- next;
- select("Did anyone tell you the magic words?");
- mes "[Pedro]";
- mes "I heard it in a kind of song.";
- mes "the special magic words are...";
- next;
- mes "[Pedro]";
- mes "'^3131FFMother the door won't open!^000000'";
- mes "'^FF0000Turn the key as many times as there are colors in the rainbow.^000000'";
- mes "";
- mes "'^3131FFMother the water is flooding!^000000'";
- mes "'^FF0000If the moon disappears 3 times, don't worry.^000000'";
- mes "";
- mes "'^3131FFMother the drought has started!^000000'";
- mes "'^FF0000Don't worry, the waterfall will help it.^000000'";
- mes "";
- mes "'^3131FFMother where are my friends?^000000'";
- mes "'^FF0000Your 7 friends are sleeping. now it's time to wake them.^000000'";
- mes "";
- mes "'^3131FFWhere are you mom?^000000'";
- next;
- mes "[Mariana]";
- mes "Umm it seems like a riddle.";
- next;
- select("Wanna help me find this ghost?");
- mes "[Pedro]";
- mes "You're on your own pal~.";
- next;
- mes "[Mariana]";
- mes "I don't like scary things!";
- next;
- mes "[Fabio]";
- mes "Pfft, I can't believe you're gonna believe that story.";
- next;
- mes "[Daniel]";
- mes "I'll do whatever Fabio does, as always!";
- next;
- mes "[Fabio]";
- mes "Maybe you're just scared...";
- set brazil_ghost,1;
- setquest 2208;
- close;
- }
- else if (brazil_ghost == 1) {
- mes "[Pedro]";
- mes "Do you wanna hear the magic words again?";
- next;
- mes "[Pedro]";
- mes "'^3131FFMother the door won't open!^000000'";
- mes "'^FF0000Turn the key as many times as there are colors in the rainbow.^000000'";
- mes "";
- mes "'^3131FFMother the water is flooding!^000000'";
- mes "'^FF0000If the moon disappears 3 times, don't worry.^000000'";
- mes "";
- mes "'^3131FFMother the drought has started!^000000'";
- mes "'^FF0000Don't worry, the waterfall will help it.^000000'";
- mes "";
- mes "'^3131FFMother where are my friends?^000000'";
- mes "'^FF0000Your 7 friends are sleeping. now it's time to wake them.^000000'";
- mes "";
- mes "'^3131FFWhere are you mom?^000000'";
- close;
- }
- else {
- mes "[Pedro]";
- mes "I wonder what I need to do to have a statue made of me?";
- close;
- }
-}
-
-brasilis,187,244,1 script Mariana#bra 72,{
- if (brazil_ghost == 0) {
- mes "[Pedro]";
- mes "Wow it's really a great statue!";
- next;
- mes "[Mariana]";
- mes "It is, isn't it?";
- mes "This statue is called Verass Monument.";
- next;
- mes "[Mariana]";
- mes "A long time ago there was a really brave adventurer named Verass, thanks to his dedicated exploration, Brasilis was able to develop into this great city.";
- next;
- mes "[Pedro]";
- mes "Awesome!!";
- mes "i wanna become a real man like Verass.";
- next;
- mes "[Mariana]";
- mes "Pedro, you can become whatever you want.";
- next;
- mes "[Pedro]";
- mes "Mariana is so smart, isn't she? hehe.";
- next;
- mes "[Fabio]";
- mes "Ooooh! You love her don't you!";
- next;
- mes "[Daniel]";
- mes "Wooooaaaa Pedro and Mari sitting in a tree!";
- next;
- mes "[Fabio]";
- mes "Woooo k-i-s-s-i-n-g~!!!";
- next;
- mes "[Daniel]";
- mes "Nya nya nya!";
- next;
- mes "[Fabio]";
- mes "Hahahahaha.";
- next;
- mes "[Pedro]";
- mes "Stop acting like babies!";
- next;
- mes "[Mariana]";
- mes "Boys~!";
- next;
- mes "[Daniel]";
- mes "Yah yah...";
- mes "Hey guys, did you hear that something happened a few days ago?";
- next;
- mes "[Mariana]";
- mes "Oh yeah~ I heard that something really scary happened.";
- next;
- mes "[Fabio]";
- mes "Uh, yeah that's why Mariana got scared of going ot the bathroom for 3 days and everything was stinky. Ewwww~";
- next;
- mes "[Daniel]";
- mes "Ha ha ha! Smelly Mari!";
- next;
- mes "[Mariana]";
- mes "I hate you~!";
- mes "Stop spreading rumors about me. I'm not scared of the bathroom.";
- mes "Pedro, do you think that I stink?";
- next;
- mes "[Pedro]";
- mes "Uh? Uh?";
- mes "N......no... no way.";
- mes "Hey guys~ be nice to her~";
- next;
- mes "[Fabio]";
- mes "kkkickkkkkkkkick";
- next;
- mes "[Daniel]";
- mes "kkkickkkkkkkk";
- next;
- switch(select("Walk by.:Ask about the gossip.")) {
- case 1:
- mes "[Fabio]";
- mes "Mariana~ smells~ Nya nya~";
- next;
- mes "[Daniel]";
- mes "Oh man you stink too~! Nya nya~";
- close;
- case 2:
- break;
- }
- mes "[Fabio]";
- mes "Haven't you heard?";
- mes "The ghost story in the art museum.";
- next;
- mes "[Daniel]";
- mes "Ooohhhh! Scary~~~!";
- next;
- select("Can you tell me more?");
- mes "[Fabio]";
- mes "A coupla days ago we went to the art museum for a picnic at school.";
- mes "You know nothing special, just a ordinary field trip.";
- next;
- mes "[Fabio]";
- mes "Museums are boring so me and some friends snuck away from the group~!";
- next;
- mes "[Fabio]";
- mes "That's when we heard a scream echoing through the whole museum.";
- next;
- mes "[Daniel]";
- mes "kkakkakkaaaah!!";
- mes "kkieeeeeeh!";
- mes "kehkeh..";
- next;
- mes "[Mariana]";
- mes "I heard the scream too...";
- mes "You boys are always making noises where you're not supposed to.";
- next;
- mes "[Pedro]";
- mes "What else are we supposed to do? If we don't do it someone else will.";
- next;
- emotion e_an,0,"Mariana#bra";
- mes "[Mariana]";
- mes "Argh~ Boys are so frustrating sometimes.";
- next;
- select("So then what happened?");
- mes "[Fabio]";
- mes "Daniel and me guessed something weird was goin' on so we ran to where we thought the screams were comin' from.";
- next;
- mes "[Fabio]";
- mes "They were coming from the bathroom.";
- mes "Some kids got so scared that they started screaming too and closing their eyes. It got pretty bad.";
- next;
- mes "[Daniel]";
- mes "I think you pissed or pooped your pants. It smelled freakin' gross.";
- next;
- mes "[Fabio]";
- mes "Nah uh~ Your mom pissed her pants~ Nyah!";
- next;
- mes "[Daniel]";
- mes "Nah uh~ You~ pissed your pants~";
- next;
- mes "[Fabio]";
- mes "Anyway, so yeah, anyway that's how the rumor of the ghost in the museum started.";
- next;
- mes "[Daniel]";
- mes "Liar, there's no such thing as ghosts~";
- next;
- select("So was it a ghost?");
- mes "[Fabio]";
- mes "How should I know?";
- mes "No one could say they saw one and no one wanted to get in trouble from the teachers.";
- next;
- mes "[Pedro]";
- mes "I heard if you say special magic words that the ghost will come out.";
- next;
- mes "[Daniel]";
- mes "Quit butting into our conversation Pedro.";
- next;
- mes "[Fabio]";
- mes "Yah, what are you talking about, Pedro?";
- mes "So did you see the ghost?";
- next;
- mes "[Pedro]";
- mes "N... no. I'm scared of ghosts.";
- mes "But my friends said they saw one and they're not liars.";
- next;
- select("Did anyone tell you the magic words?");
- mes "[Pedro]";
- mes "I heard it in a kind of song.";
- mes "the special magic words are...";
- next;
- mes "[Pedro]";
- mes "'^3131FFMother the door won't open!^000000'";
- mes "'^FF0000Turn the key as many times as there are colors in the rainbow.^000000'";
- mes "";
- mes "'^3131FFMother the water is flooding!^000000'";
- mes "'^FF0000If the moon disappears 3 times, don't worry.^000000'";
- mes "";
- mes "'^3131FFMother the drought has started!^000000'";
- mes "'^FF0000Don't worry, the waterfall will help it.^000000'";
- mes "";
- mes "'^3131FFMother where are my friends?^000000'";
- mes "'^FF0000Your 7 friends are sleeping. now it's time to wake them.^000000'";
- mes "";
- mes "'^3131FFWhere are you mom?^000000'";
- next;
- mes "[Mariana]";
- mes "Umm it seems like a riddle.";
- next;
- select("Wanna help me find this ghost?");
- mes "[Pedro]";
- mes "You're on your own pal~.";
- next;
- mes "[Mariana]";
- mes "I don't like scary things!";
- next;
- mes "[Fabio]";
- mes "Pfft, I can't believe you're gonna believe that story.";
- next;
- mes "[Daniel]";
- mes "I'll do whatever Fabio does, as always!";
- next;
- mes "[Fabio]";
- mes "Maybe you're just scared...";
- set brazil_ghost,1;
- setquest 2208;
- close;
- }
- else if (brazil_ghost == 1) {
- mes "[Mariana]";
- mes "Can you guys stop talking about the ghosts?";
- mes "I've already got goosebumps all over.";
- close;
- }
- else {
- mes "[Mariana]";
- mes "Why do Fabio and Daniel always bother us?";
- close;
- }
-}
-
-brasilis,181,250,5 script Fabio#bra 706,{
- if (brazil_ghost == 0) {
- mes "[Pedro]";
- mes "Wow it's really a great statue!";
- next;
- mes "[Mariana]";
- mes "It is, isn't it?";
- mes "This statue is called Verass Monument.";
- next;
- mes "[Mariana]";
- mes "A long time ago there was a really brave adventurer named Verass, thanks to his dedicated exploration, Brasilis was able to develop into this great city.";
- next;
- mes "[Pedro]";
- mes "Awesome!!";
- mes "i wanna become a real man like Verass.";
- next;
- mes "[Mariana]";
- mes "Pedro, you can become whatever you want.";
- next;
- mes "[Pedro]";
- mes "Mariana is so smart, isn't she? hehe.";
- next;
- mes "[Fabio]";
- mes "Ooooh! You love her don't you!";
- next;
- mes "[Daniel]";
- mes "Wooooaaaa Pedro and Mari sitting in a tree!";
- next;
- mes "[Fabio]";
- mes "Woooo k-i-s-s-i-n-g~!!!";
- next;
- mes "[Daniel]";
- mes "Nya nya nya!";
- next;
- mes "[Fabio]";
- mes "Hahahahaha.";
- next;
- mes "[Pedro]";
- mes "Stop acting like babies!";
- next;
- mes "[Mariana]";
- mes "Boys~!";
- next;
- mes "[Daniel]";
- mes "Yah yah...";
- mes "Hey guys, did you hear that something happened a few days ago?";
- next;
- mes "[Mariana]";
- mes "Oh yeah~ I heard that something really scary happened.";
- next;
- mes "[Fabio]";
- mes "Uh, yeah that's why Mariana got scared of going ot the bathroom for 3 days and everything was stinky. Ewwww~";
- next;
- mes "[Daniel]";
- mes "Ha ha ha! Smelly Mari!";
- next;
- mes "[Mariana]";
- mes "I hate you~!";
- mes "Stop spreading rumors about me. I'm not scared of the bathroom.";
- mes "Pedro, do you think that I stink?";
- next;
- mes "[Pedro]";
- mes "Uh? Uh?";
- mes "N......no... no way.";
- mes "Hey guys~ be nice to her~";
- next;
- mes "[Fabio]";
- mes "kkkickkkkkkkkick";
- next;
- mes "[Daniel]";
- mes "kkkickkkkkkkk";
- next;
- switch(select("Walk by.:Ask about the gossip.")) {
- case 1:
- mes "[Fabio]";
- mes "Mariana~ smells~ Nya nya~";
- next;
- mes "[Daniel]";
- mes "Oh man you stink too~! Nya nya~";
- close;
- case 2:
- break;
- }
- mes "[Fabio]";
- mes "Haven't you heard?";
- mes "The ghost story in the art museum.";
- next;
- mes "[Daniel]";
- mes "Ooohhhh! Scary~~~!";
- next;
- select("Can you tell me more?");
- mes "[Fabio]";
- mes "A coupla days ago we went to the art museum for a picnic at school.";
- mes "You know nothing special, just a ordinary field trip.";
- next;
- mes "[Fabio]";
- mes "Museums are boring so me and some friends snuck away from the group~!";
- next;
- mes "[Fabio]";
- mes "That's when we heard a scream echoing through the whole museum.";
- next;
- mes "[Daniel]";
- mes "kkakkakkaaaah!!";
- mes "kkieeeeeeh!";
- mes "kehkeh..";
- next;
- mes "[Mariana]";
- mes "I heard the scream too...";
- mes "You boys are always making noises where you're not supposed to.";
- next;
- mes "[Pedro]";
- mes "What else are we supposed to do? If we don't do it someone else will.";
- next;
- emotion e_an,0,"Mariana#bra";
- mes "[Mariana]";
- mes "Argh~ Boys are so frustrating sometimes.";
- next;
- select("So then what happened?");
- mes "[Fabio]";
- mes "Daniel and me guessed something weird was goin' on so we ran to where we thought the screams were comin' from.";
- next;
- mes "[Fabio]";
- mes "They were coming from the bathroom.";
- mes "Some kids got so scared that they started screaming too and closing their eyes. It got pretty bad.";
- next;
- mes "[Daniel]";
- mes "I think you pissed or pooped your pants. It smelled freakin' gross.";
- next;
- mes "[Fabio]";
- mes "Nah uh~ Your mom pissed her pants~ Nyah!";
- next;
- mes "[Daniel]";
- mes "Nah uh~ You~ pissed your pants~";
- next;
- mes "[Fabio]";
- mes "Anyway, so yeah, anyway that's how the rumor of the ghost in the museum started.";
- next;
- mes "[Daniel]";
- mes "Liar, there's no such thing as ghosts~";
- next;
- select("So was it a ghost?");
- mes "[Fabio]";
- mes "How should I know?";
- mes "No one could say they saw one and no one wanted to get in trouble from the teachers.";
- next;
- mes "[Pedro]";
- mes "I heard if you say special magic words that the ghost will come out.";
- next;
- mes "[Daniel]";
- mes "Quit butting into our conversation Pedro.";
- next;
- mes "[Fabio]";
- mes "Yah, what are you talking about, Pedro?";
- mes "So did you see the ghost?";
- next;
- mes "[Pedro]";
- mes "N... no. I'm scared of ghosts.";
- mes "But my friends said they saw one and they're not liars.";
- next;
- select("Did anyone tell you the magic words?");
- mes "[Pedro]";
- mes "I heard it in a kind of song.";
- mes "the special magic words are...";
- next;
- mes "[Pedro]";
- mes "'^3131FFMother the door won't open!^000000'";
- mes "'^FF0000Turn the key as many times as there are colors in the rainbow.^000000'";
- mes "";
- mes "'^3131FFMother the water is flooding!^000000'";
- mes "'^FF0000If the moon disappears 3 times, don't worry.^000000'";
- mes "";
- mes "'^3131FFMother the drought has started!^000000'";
- mes "'^FF0000Don't worry, the waterfall will help it.^000000'";
- mes "";
- mes "'^3131FFMother where are my friends?^000000'";
- mes "'^FF0000Your 7 friends are sleeping. now it's time to wake them.^000000'";
- mes "";
- mes "'^3131FFWhere are you mom?^000000'";
- next;
- mes "[Mariana]";
- mes "Umm it seems like a riddle.";
- next;
- select("Wanna help me find this ghost?");
- mes "[Pedro]";
- mes "You're on your own pal~.";
- next;
- mes "[Mariana]";
- mes "I don't like scary things!";
- next;
- mes "[Fabio]";
- mes "Pfft, I can't believe you're gonna believe that story.";
- next;
- mes "[Daniel]";
- mes "I'll do whatever Fabio does, as always!";
- next;
- mes "[Fabio]";
- mes "Maybe you're just scared...";
- set brazil_ghost,1;
- setquest 2208;
- close;
- }
- else if (brazil_ghost == 1) {
- mes "[Fabio]";
- mes "You still wasting your time with that ghost story?";
- close;
- }
- else {
- mes "[Fabio]";
- mes "Mariana, wanna see something cool?";
- next;
- mes "[Mariana]";
- mes "kkkkkkkaaaaaacck!! Bugs!! Get 'em away!";
- close;
- }
-}
-
-brasilis,180,249,5 script Daniel#bra 706,{
- if (brazil_ghost == 0) {
- mes "[Pedro]";
- mes "Wow it's really a great statue!";
- next;
- mes "[Mariana]";
- mes "It is, isn't it?";
- mes "This statue is called Verass Monument.";
- next;
- mes "[Mariana]";
- mes "A long time ago there was a really brave adventurer named Verass, thanks to his dedicated exploration, Brasilis was able to develop into this great city.";
- next;
- mes "[Pedro]";
- mes "Awesome!!";
- mes "i wanna become a real man like Verass.";
- next;
- mes "[Mariana]";
- mes "Pedro, you can become whatever you want.";
- next;
- mes "[Pedro]";
- mes "Mariana is so smart, isn't she? hehe.";
- next;
- mes "[Fabio]";
- mes "Ooooh! You love her don't you!";
- next;
- mes "[Daniel]";
- mes "Wooooaaaa Pedro and Mari sitting in a tree!";
- next;
- mes "[Fabio]";
- mes "Woooo k-i-s-s-i-n-g~!!!";
- next;
- mes "[Daniel]";
- mes "Nya nya nya!";
- next;
- mes "[Fabio]";
- mes "Hahahahaha.";
- next;
- mes "[Pedro]";
- mes "Stop acting like babies!";
- next;
- mes "[Mariana]";
- mes "Boys~!";
- next;
- mes "[Daniel]";
- mes "Yah yah...";
- mes "Hey guys, did you hear that something happened a few days ago?";
- next;
- mes "[Mariana]";
- mes "Oh yeah~ I heard that something really scary happened.";
- next;
- mes "[Fabio]";
- mes "Uh, yeah that's why Mariana got scared of going ot the bathroom for 3 days and everything was stinky. Ewwww~";
- next;
- mes "[Daniel]";
- mes "Ha ha ha! Smelly Mari!";
- next;
- mes "[Mariana]";
- mes "I hate you~!";
- mes "Stop spreading rumors about me. I'm not scared of the bathroom.";
- mes "Pedro, do you think that I stink?";
- next;
- mes "[Pedro]";
- mes "Uh? Uh?";
- mes "N......no... no way.";
- mes "Hey guys~ be nice to her~";
- next;
- mes "[Fabio]";
- mes "kkkickkkkkkkkick";
- next;
- mes "[Daniel]";
- mes "kkkickkkkkkkk";
- next;
- switch(select("Walk by.:Ask about the gossip.")) {
- case 1:
- mes "[Fabio]";
- mes "Mariana~ smells~ Nya nya~";
- next;
- mes "[Daniel]";
- mes "Oh man you stink too~! Nya nya~";
- close;
- case 2:
- break;
- }
- mes "[Fabio]";
- mes "Haven't you heard?";
- mes "The ghost story in the art museum.";
- next;
- mes "[Daniel]";
- mes "Ooohhhh! Scary~~~!";
- next;
- select("Can you tell me more?");
- mes "[Fabio]";
- mes "A coupla days ago we went to the art museum for a picnic at school.";
- mes "You know nothing special, just a ordinary field trip.";
- next;
- mes "[Fabio]";
- mes "Museums are boring so me and some friends snuck away from the group~!";
- next;
- mes "[Fabio]";
- mes "That's when we heard a scream echoing through the whole museum.";
- next;
- mes "[Daniel]";
- mes "kkakkakkaaaah!!";
- mes "kkieeeeeeh!";
- mes "kehkeh..";
- next;
- mes "[Mariana]";
- mes "I heard the scream too...";
- mes "You boys are always making noises where you're not supposed to.";
- next;
- mes "[Pedro]";
- mes "What else are we supposed to do? If we don't do it someone else will.";
- next;
- emotion e_an,0,"Mariana#bra";
- mes "[Mariana]";
- mes "Argh~ Boys are so frustrating sometimes.";
- next;
- select("So then what happened?");
- mes "[Fabio]";
- mes "Daniel and me guessed something weird was goin' on so we ran to where we thought the screams were comin' from.";
- next;
- mes "[Fabio]";
- mes "They were coming from the bathroom.";
- mes "Some kids got so scared that they started screaming too and closing their eyes. It got pretty bad.";
- next;
- mes "[Daniel]";
- mes "I think you pissed or pooped your pants. It smelled freakin' gross.";
- next;
- mes "[Fabio]";
- mes "Nah uh~ Your mom pissed her pants~ Nyah!";
- next;
- mes "[Daniel]";
- mes "Nah uh~ You~ pissed your pants~";
- next;
- mes "[Fabio]";
- mes "Anyway, so yeah, anyway that's how the rumor of the ghost in the museum started.";
- next;
- mes "[Daniel]";
- mes "Liar, there's no such thing as ghosts~";
- next;
- select("So was it a ghost?");
- mes "[Fabio]";
- mes "How should I know?";
- mes "No one could say they saw one and no one wanted to get in trouble from the teachers.";
- next;
- mes "[Pedro]";
- mes "I heard if you say special magic words that the ghost will come out.";
- next;
- mes "[Daniel]";
- mes "Quit butting into our conversation Pedro.";
- next;
- mes "[Fabio]";
- mes "Yah, what are you talking about, Pedro?";
- mes "So did you see the ghost?";
- next;
- mes "[Pedro]";
- mes "N... no. I'm scared of ghosts.";
- mes "But my friends said they saw one and they're not liars.";
- next;
- select("Did anyone tell you the magic words?");
- mes "[Pedro]";
- mes "I heard it in a kind of song.";
- mes "the special magic words are...";
- next;
- mes "[Pedro]";
- mes "'^3131FFMother the door won't open!^000000'";
- mes "'^FF0000Turn the key as many times as there are colors in the rainbow.^000000'";
- mes "";
- mes "'^3131FFMother the water is flooding!^000000'";
- mes "'^FF0000If the moon disappears 3 times, don't worry.^000000'";
- mes "";
- mes "'^3131FFMother the drought has started!^000000'";
- mes "'^FF0000Don't worry, the waterfall will help it.^000000'";
- mes "";
- mes "'^3131FFMother where are my friends?^000000'";
- mes "'^FF0000Your 7 friends are sleeping. now it's time to wake them.^000000'";
- mes "";
- mes "'^3131FFWhere are you mom?^000000'";
- next;
- mes "[Mariana]";
- mes "Umm it seems like a riddle.";
- next;
- select("Wanna help me find this ghost?");
- mes "[Pedro]";
- mes "You're on your own pal~.";
- next;
- mes "[Mariana]";
- mes "I don't like scary things!";
- next;
- mes "[Fabio]";
- mes "Pfft, I can't believe you're gonna believe that story.";
- next;
- mes "[Daniel]";
- mes "I'll do whatever Fabio does, as always!";
- next;
- mes "[Fabio]";
- mes "Maybe you're just scared...";
- set brazil_ghost,1;
- setquest 2208;
- close;
- }
- else if (brazil_ghost == 1) {
- mes "[Daniel]";
- mes "Nyah nyah nyah~";
- close;
- }
- else {
- mes "[Daniel]";
- mes "Keke Here~ I found more bugs~";
- close;
- }
-}
-
-bra_in01,149,184,3 script Door#bra 844,{
- if (brazil_ghost > 0) {
- mes "- A key is inserted in the locked door.-";
- next;
- switch(select("Turn the key.:Ignore it.")) {
- case 1:
- mes "You start saying the first line of the magic words.";
- input .@input$;
- next;
- mes "["+strcharinfo(0)+"]";
- mes ""+.@input$+"";
- next;
- set .@braspell$,"Mother the door won't open!";
- set .@chkspell,compare(.@braspell$,.@input$);
- if (!.@chkspell) {
- mes "Seems like you said something wrong.";
- close;
- }
- else {
- if (brazil_ghost == 2) {
- mes "[Sobbing Voice]";
- mes "'^FF0000Turn the key as many times as there are colors in the rainbow.^000000'";
- next;
- switch(select("Open the door:Knock on the door.:Turn the key.:Take the key out.")) {
- case 1:
- mes "The door is locked.";
- mes "So nothing happens.";
- close;
- case 2:
- mes "How many times should I try to knock?";
- input .@input,0,999;
- next;
- mes "You knocked on the door "+.@input+" times.";
- next;
- mes "But, nothing happens.";
- close;
- case 3:
- mes "How many times should I turn the key?";
- input .@input,0,999;
- next;
- if (.@input == 7) {
- mes "You turn the key 7 times.";
- next;
- mes "Click! Click! Click!";
- mes "Click! Click! Click!";
- mes "Click...!";
- next;
- mes "[Distant Sound]";
- mes "^FF0000kkkkhee- hihihihi!!!^000000";
- mes "You hear water flushing.";
- next;
- specialeffect2 EF_VENOMDUST;
- mes "Faint laughing can be heard off in the direction of the toilet.";
- set brazil_ghost,3;
- changequest 2208,60351;
- close;
- }
- else {
- mes "You turned over the key "+.@input+" times.";
- next;
- mes "But nothing doesn't happened.";
- close;
- }
- case 4:
- mes "How many times should I insert the key into the door?";
- input .@input,0,999;
- next;
- mes "You inserted the key "+.@input+" times.";
- next;
- mes "But nothing happened.";
- close;
- }
- }
- else {
- mes "Mother the door won't open!";
- close;
- }
- }
- case 2:
- mes "You do nothing.";
- close;
- }
- }
- else {
- mes "- A key is inserted in the locked door.-";
- close;
- }
-}
-
-bra_in01,144,187,3 script Toilet#bra 844,{
- if (brazil_ghost > 0) {
- mes "- Looks like an ordinary toilet -";
- next;
- if (brazil_ghost > 6) {
- switch(select("Flush the toilet.:Doing nothing.")) {
- case 1:
- mes "After flushing the toilet, you suddenly feel dizzy and are suddenly swept away somewhere.";
- specialeffect2 EF_WATERFALL_SMALL_T2_90;
- close2;
- warp "bra_in01",206,102;
- end;
- case 2:
- mes "The water in the toilet looks gross.";
- close;
- }
- }
- switch(select("Use the toilet:Ignore.")) {
- case 1:
- mes "- What was the second line to that spell now? -";
- input .@input$;
- next;
- set urspell,inputstr;
- mes "["+strcharinfo(0)+"]";
- mes ""+.@input$+"";
- next;
- set .@braspell$,"Mother the water is flooding!";
- set .@chkspell,compare(.@braspell$,.@input$);
- if (!.@chkspell) {
- mes "Seems like you said something wrong.";
- close;
- }
- else {
- if (brazil_ghost == 3) {
- mes "[Sobbing Voice]";
- mes "^FF0000If the moon disappears 3 times... don't worry.....^000000";
- next;
- switch(select("Flush the toilet.:Close the lid.")) {
- case 1:
- mes "How many times should I flush?";
- input .@input,0,999;
- next;
- if (.@input == 3) {
- mes "You flush the toilet 3 times.";
- next;
- mes "qwaaaaaaaaa!";
- mes "kwaaaaaaaaaa!";
- mes "kwaaaaaaaaaaaaaaaaaaa!";
- next;
- mes "[Distant Sound]";
- mes "^FF0000kkkkhee- hihihihi!!!^000000";
- mes "Suddenly the sink sounds like water is flowing freely from it.";
- next;
- specialeffect2 EF_VENOMDUST;
- mes "Faint laughing can be heard off in the direction of the faucet.";
- set brazil_ghost,4;
- changequest 60351,60352;
- close;
- }
- else {
- mes "You flush the toilet "+.@input+" times.";
- next;
- mes "But nothing happens.";
- close;
- }
- case 2:
- mes "You close the lid of the toilet.";
- mes "Nothing seems to be happening.";
- close;
- }
- }
- else {
- mes "Nothing happens.";
- close;
- }
- }
- case 2:
- mes "You do nothing.";
- close;
- }
- }
- else {
- mes "- Looks like an ordinary toilet -";
- close;
- }
-}
-
-bra_in01,134,189,3 script Faucet#bra 844,{
- if (brazil_ghost > 0) {
- mes "- It seems like an ordinary faucet -";
- next;
- switch(select("Examine it.:Ignore.")) {
- case 1:
- mes "- What was the next line to that spell now? -";
- input .@input$;
- next;
- set urspell,inputstr;
- mes "["+strcharinfo(0)+"]";
- mes ""+.@input$+"";
- next;
- set .@braspell$,"Mother the drought has started!";
- set .@chkspell,compare(.@braspell$,.@input$);
- if (!.@chkspell) {
- mes "Seems like you said something wrong.";
- close;
- }
- else {
- if (brazil_ghost == 4) {
- mes "[Sobbing Voice]";
- mes "^FF0000Don't worry... the waterfall will help it....^000000";
- next;
- switch(select("Tap on the faucet.:Turn on the water.")) {
- case 1:
- mes "How many times will you tap the faucet?";
- input .@input,0,999;
- next;
- mes "You tap the faucet "+.@input+" times.";
- next;
- mes "But nothing happens.";
- close;
- case 2:
- mes "How many times should I turn the water on?";
- input .@input,0,999;
- next;
- if (.@input == 1) {
- mes "You turn the faucet on once.";
- next;
- mes "swwwaaaaaaa-";
- next;
- mes "[Distant Sound]";
- mes "^FF0000kkkkhee- hihihihi!!!^000000";
- mes "You see the carpet move.";
- next;
- specialeffect2 EF_VENOMDUST;
- mes "Faint laughing can be heard off in the direction of the carpet.";
- set brazil_ghost,5;
- changequest 60352,60353;
- close;
- }
- else {
- mes "You turn the faucet on "+.@input+" times.";
- next;
- mes "But nothing happens.";
- close;
- }
- }
- }
- else {
- mes "Nothing happens.";
- close;
- }
- }
- case 2:
- mes "You do nothing.";
- close;
- }
- }
- else {
- mes "- It seems like an ordinary faucet -";
- close;
- }
-}
-
-bra_in01,138,184,3 script Carpet#bra 844,{
- if (brazil_ghost > 0) {
- mes "- A carpet with an intricate pattern on it -";
- next;
- switch(select("Examine it.:Ignore.")) {
- case 1:
- mes "- What was the next line to that spell now? -";
- input .@input$;
- next;
- set urspell,inputstr;
- mes "["+strcharinfo(0)+"]";
- mes ""+.@input$+"";
- next;
- set .@braspell$,"Mother where are my friends?";
- set .@chkspell,compare(.@braspell$,.@input$);
- if (!.@chkspell) {
- mes "Seems like you said something wrong.";
- close;
- }
- else {
- if (brazil_ghost == 5) {
- mes "[Sobbing Voice]";
- mes "^FF0000your 7 friends....are...sleeping... now it...'s time ....to wake them........^000000";
- next;
- switch(select("Jump on the carpet.:Lie on the carpet.:Shake the carpet.")) {
- case 1:
- mes "How many times should I jump?";
- input .@input,0,999;
- next;
- mes "You jump on the carpet "+.@input+" times.";
- next;
- mes "But nothing happens.";
- close;
- case 2:
- mes "How many times should I lie on the carpet?";
- input .@input,0,999;
- next;
- mes "You lie on the carpet "+.@input+" times.";
- next;
- mes "But nothing happens.";
- close;
- case 3:
- mes "How many times should I shake the carpet?";
- input .@input,0,999;
- next;
- if (.@input == 7) {
- mes "You shake the carpet 7 times.";
- next;
- mes "- fly~ fly~ fly~ fly~ fly~ fly~ fly~ -";
- next;
- mes "[Distant Sound]";
- mes "^FF0000kkkkhee- hihihihi!!!^000000";
- next;
- specialeffect2 EF_VENOMDUST;
- mes "Faint laughing can be heard off in the direction of the mirror.";
- set brazil_ghost,6;
- changequest 60353,60354;
- close;
- }
- else {
- mes "You shake the carpet "+.@input+" times.";
- next;
- mes "But nothing happens.";
- close;
- }
- }
- }
- else {
- mes "Nothing happens.";
- close;
- }
- }
- case 2:
- mes "You do nothing.";
- close;
- }
- }
- else {
- mes "- A carpet with an intricate pattern on it -";
- close;
- }
-}
-
-bra_in01,151,180,3 script Mirror#bra 844,{
- if (brazil_ghost > 0) {
- mes "- You can see a clean mirror without any marks or dust -";
- next;
- switch(select("Examine it.:Ignore.")) {
- case 1:
- mes "- What was the next line to that spell now? -";
- input .@input$;
- next;
- set urspell,inputstr;
- mes "["+strcharinfo(0)+"]";
- mes ""+.@input$+"";
- next;
- set .@braspell$,"Where are you mom?";
- set .@chkspell,compare(.@braspell$,.@input$);
- if (!.@chkspell) {
- mes "Seems like you said something wrong.";
- close;
- }
- else {
- if (brazil_ghost == 6) {
- mes "[Distant Sound]";
- mes "^FF0000kihe! hit! hit! hit! hit!^000000";
- next;
- mes "[Distant Sound]";
- mes "^FF0000kihe! hit! hit! hit! hit!^000000";
- mes "^FF0000kihe! hit! hit! hit! hit!^000000";
- next;
- mes "[Distant Sound]";
- mes "Behind you...";
- enablenpc "Ghost#bra";
- next;
- emotion e_omg,1;
- mes "["+strcharinfo(0)+"]";
- mes "The stories about the ghost are true~!";
- next;
- mes "[Ghost]";
- mes "^FF0000my baby....^000000";
- next;
- mes "[Ghost]";
- mes "^FF0000I can't see.... my eye....^000000";
- mes "^FF0000What's going on....?^000000";
- next;
- mes "- You take a deep breath and then look at the Ghost and notice it has an eye patch -";
- next;
- mes "[Ghost]";
- mes "^FF0000My eyes are so tight... can you take this off?^000000";
- next;
- mes "You step carefully towards the ghost.";
- next;
- mes "His face was covered with dust making strange contortions with it's face.";
- next;
- mes "[Ghost]";
- mes "^FF0000Come on help mom.....^000000";
- next;
- switch(select("Take the eye bandage off.:Run away~.")) {
- case 1:
- while(1) {
- set .@cpudice,rand(1,6);
- set .@pcdice,rand(1,6);
- if (.@cpudice != .@pcdice) {
- emotion (57+.@cpudice),0,"Ghost#bra";
- emotion (57+.@cpudice),1;
- break;
- }
- }
- if (.@cpudice > .@pcdice) {
- specialeffect2 EF_DEVIL;
- mes "[Ghost]";
- mes "^FF0000Go away!^000000";
- set brazil_ghost,1;
- changequest 60354,2208;
- percentheal -50,-50;
- close2;
- disablenpc "Ghost#bra";
- warp "bra_in01",12,183;
- end;
- }
- else {
- emotion e_bzz,1;
- mes "[Ghost]";
- mes "^FF0000Ahh!^000000";
- mes "The Ghost disappeared into the toilet.";
- set brazil_ghost,7;
- changequest 60354,60355;
- close2;
- disablenpc "Ghost#bra";
- warp "bra_in01",206,100;
- end;
- }
- case 2:
- mes "You run away from the ghost.";
- close2;
- set brazil_ghost,1;
- changequest 60354,2208;
- warp "bra_in01",12,183;
- disablenpc "Ghost#bra";
- end;
- }
- close;
- }
- else {
- mes "Nothing happens.";
- close;
- }
- }
- case 2:
- mes "You do nothing.";
- close;
- }
- }
- else {
- mes "- You can see a clean mirror without any marks or dust -";
- close;
- }
-}
-
-bra_in01,136,180,5 script Ghost#bra 1867,{
- end;
-
-OnInit:
- disablenpc "Ghost#bra";
- end;
-}
-
-bra_in01,7,181,5 script Curator#bra 477,{
- if (BaseLevel < 40) {
- mes "[Curator]";
- mes "I'm sorry but this area is under construction right now.";
- close;
- }
- if ((brazil_ghost > 0) && (brazil_ghost < 7)) {
- if (countitem(11515) > 0) {
- mes "[Curator]";
- mes "What can I do for you?";
- next;
- select("I need to use the bathroom.");
- mes "[Curator]";
- mes "Sorry we are remodeling inside right now so, it's closed.";
- mes "Please use the other one.";
- next;
- switch(select("But I forgot something inside.:Give up.")) {
- case 1:
- mes "[Curator]";
- mes "That's tooooo bad.";
- mes "But my manager ordered me to stop anyone from entering this bathroom so, I should follow his orders.";
- next;
- select("It's such a hot day!");
- mes "[Curator]";
- mes "It's always hot in Brasilis but today is ridiculously hot.";
- mes "Maybe I need to drink some coconut juice to cool down.";
- next;
- mes "You give a coconut to the Curator.";
- next;
- mes "[Curator]";
- mes "Oh really can I have it?";
- mes "Thanks a lot!";
- next;
- mes "[Curator]";
- mes "Pay it forward right?";
- mes "Ok I'll let you through this one time.";
- next;
- mes "The curator looks around calmly then opens the door.";
- delitem 11515,1; //Coconut
- set brazil_ghost,2;
- close2;
- warp "bra_in01",138,176;
- end;
- case 2:
- mes "You give up trying to enter.";
- close;
- }
- }
- else {
- mes "[Curator]";
- mes "What can I do for you?";
- next;
- select("I need to use the bathroom.");
- mes "[Curator]";
- mes "Sorry we are remodeling inside right now so, it's closed.";
- mes "Please use the other one.";
- next;
- switch(select("But I forgot something inside.:Give up.")) {
- case 1:
- mes "[Curator]";
- mes "That's tooooo bad.";
- mes "But my manager ordered me to stop anyone from entering this bathroom so, I should follow his orders.";
- next;
- select("It's such a hot day!");
- mes "[Curator]";
- mes "It's always hot in Brasilis but today is ridiculously hot.";
- mes "Maybe I need to drink some coconut juice to cool down.";
- close;
- case 2:
- mes "You give up trying to enter.";
- close;
- }
- }
- }
- else if (brazil_ghost > 6) {
- mes "[Curator]";
- mes "Hey thanks for the Coconut earlier it really helped me cool down.";
- close;
- }
- else {
- mes "[Curator]";
- mes "Is it just me? Or is it hotter than it's ever been today!";
- close;
- }
-}
-
-bra_in01,12,185,0 script inbathroom#bra 45,1,1,{
-OnTouch_:
- if (brazil_ghost > 6)
- warp "bra_in01",138,176;
- else {
- mes "The entrance has been blocked.";
- close;
- }
- end;
-}
-
-bra_in01,138,174,0 warp outbathroom#bra 1,1,bra_in01,12,183
-bra_in01,206,98,0 warp tobath#bra 1,1,bra_in01,138,176
-
-bra_in01,206,188,1 script Open Manhole#todunbra 844,{
- if (brazil_ghost == 7) {
- enablenpc "Ghost#bra_end";
- mes "[Ghost]";
- mes "I am a ghost who died while wandering the jungle many years ago.";
- next;
- mes "[Ghost]";
- mes "I found a pipeline in the jungle and followed the voice of a man to this very spot.";
- next;
- mes "[Ghost]";
- mes "That's also where I hurt one of my eyes while walking around in the dark.";
- next;
- mes "[Ghost]";
- mes "I wandered these sewers for days until I found the end of this line connected to the toilet in the museum. I shouted forever begging for help but no one answered my calls.";
- next;
- mes "[Ghost]";
- mes "You finally answered my call but it's already way too late. Thank you for at least checking. No one else has bothered to this day.";
- next;
- mes "[Ghost]";
- mes "There are many dangerous creatures at the end of this sewer.";
- mes "You seem brave though. I bet you wouldn't worry about the monsters there anyways.";
- next;
- mes "[Ghost]";
- mes "I guess now I can finally rest in peace.";
- mes "Thank you friend.";
- set brazil_ghost,8;
- //completequest 2208;
- completequest 60355;
- getexp 900000,0;
- disablenpc "Ghost#bra_end";
- close;
- }
- warp "bra_dun01",87,47;
- end;
-}
-
-
-bra_dun01,87,43,1 script Pipe#bra 844,{
- warp "bra_in01",206,185;
- end;
-}
-
-bra_fild01,323,136,1 script Pipe#brafild 844,{
- if (brazil_ghost > 6) {
- mes "You see a rusty pipe. It seems to be linked to somewhere beneath the jungle.";
- next;
- switch(select("Examine it:Ignore.")) {
- case 1:
- mes "You swim through a gap in the pipe and are swept by a sudden rush of water.";
- close2;
- warp "bra_in01",206,182;
- end;
- case 2:
- mes "It might be dangerous, I better not act rashly.";
- close;
- }
- }
- else {
- mes "You see a rusty pipe. It seems to be linked to somewhere beneath the jungle.";
- close;
- }
-}
-
-bra_in01,206,190,3 script Ghost#bra_end 1867,{
- end;
-
-OnInit:
- disablenpc "Ghost#bra_end";
- end;
-}
-
-// Iara, Original file: iara.sc
-//============================================================
-brasilis,315,334,5 script Shaman#nk 474,{
- set .@iara_re,checkquest(4135,PLAYTIME);
- if ((.@iara_re == 0) || (.@iara_re == 1)) {
- mes "[Anori]";
- mes "I'm still preparing.";
- mes "I don't require your help at this time.";
- mes "Please come back later...";
- close;
- }
- else {
- if (checkquest(4135) > 1) erasequest 4135;
- set .@iara_q,checkquest(4133);
- if ((.@iara_q == 0) || (.@iara_q == 1)) {
- mes "[Anori]";
- mes "To block Iara ";
- mes "seducing the tribes";
- mes "we need a purifying potion...";
- next;
- mes "[Anori]";
- mes "Did you bring the materials";
- mes "to make the purifying potion?";
- next;
- if ((countitem(950) > 19) && (countitem(7172) > 9) && (countitem(1054) > 2)) {
- mes "[Anori]";
- mes "Um... it seems to be okay.";
- mes "I'll make you a potion which will";
- mes "weaken Iara's power.";
- next;
- mes "[Anori]";
- mes "Let's see grind this...";
- mes "and mix in that...";
- mes "then add some magic...";
- next;
- setquest 4135;
- erasequest 4133;
- setquest 4134;
- completequest 4134;
- delitem 950,20; //Heart_Of_Mermaid
- delitem 7172,10; //Leopard_Talon
- delitem 1054,3; //Lip_Of_Ancient_Fish
- getitem 11517,2; //Puri_Potion
- mes "[Anori]";
- mes "Here, it's completed.";
- mes "Take this.";
- mes "It will make Iara stop";
- mes "training at the cave";
- mes "for a while.";
- next;
- mes "[Anori]";
- mes "Please block the Iara threatening the security of the tribe.";
- close;
- }
- else {
- mes "[Anori]";
- mes "You haven't brought enough materials yet.";
- mes "We cannot make the purification potion with only these.";
- close;
- }
- }
- else {
- if (BaseLevel < 40) {
- mes "[Anori]";
- mes "Ah... we need a strong adventurer.";
- mes "The tribe is facing a major threat.";
- close;
- }
- set .@re_q,checkquest(4134);
- if (.@re_q == 2) {
- mes "[Anori]";
- mes "you are...";
- mes "the adventurer who came for the";
- mes "purification potion...";
- next;
- mes "[Anori]";
- mes "Maybe because of the purification potion...";
- mes "After that, the Iara stopped seducing tribesmen but the effect didn't last long.";
- next;
- mes "[Anori]";
- mes "Could you get the same";
- mes "materials as before...";
- mes "I need your power.";
- next;
- switch(select("No.:Okay, I'll do it.")) {
- case 1:
- mes "[Anori]";
- mes "This, ah...";
- mes "There is no other way.";
- close;
- case 2:
- mes "[Anori]";
- mes "You are truly brave!";
- mes "I, on behalf of the tribe,";
- mes "offer you my thanks.";
- next;
- mes "[Anori]";
- mes "Materials are the same as before.";
- mes "If you just get^ff0000 20 Hearts of Mermaids,";
- mes "10 Leopard Claws and";
- mes "3 Ancient Lips^000000,";
- mes "I will make you a potion that purifies evil spirits";
- mes "by using a secret formula handed down to the tribe.";
- next;
- mes "[Anori]";
- mes "The destiny of the tribe is up to you.";
- mes "please get the materials quickly.";
- mes "I will be preparing to make";
- mes "the purification potion right here.";
- setquest 4133;
- close;
- }
- }
- else {
- mes "[Anori]";
- mes "There are some people I haven't seen before around here.";
- mes "It's a good sign...";
- next;
- mes "[Anori]";
- mes "Hey you...";
- mes "Could you listen to my stories for a moment.";
- mes "There's an emergency in our tribe.";
- next;
- switch(select("No.:Okay.")) {
- case 1:
- mes "[Anori]";
- mes "You are a heartless person...";
- mes "You don't seem the helpful type.";
- mes "Just keep on going your way.";
- close;
- case 2:
- mes "[Anori]";
- mes "Thank you, I met a kind person.";
- mes "It's a secret of our tribe that";
- mes "you cannot tell anyone.";
- next;
- break;
- }
- mes "[Anori]";
- mes "Lately young men from";
- mes "the tribe are disappearing.";
- mes "Our entire tribe is being threatened.";
- next;
- mes "[Anori]";
- mes "It is likely because of a witch called Iara.";
- mes "She is a water nymph seducing the hearts of young tribesmen at a cave behind the waterfall.";
- next;
- mes "[Anori]";
- mes "How can I stop these young tribesmen?";
- mes "But I discovered a way to make a purification potion to reverse the effects of the Iara's spells.";
- next;
- mes "[Anori]";
- mes "This potion has been handed down from many generations in our tribe.";
- mes "This purification potion possesses the power to cleanse evil spirits.";
- next;
- mes "[Anori]";
- mes "If you could get the materials";
- mes "I will make you";
- mes "the purification potion.";
- mes "Could you do that for me?";
- next;
- switch(select("No.:Yes, I can.")) {
- case 1:
- mes "[Anori]";
- mes "Hm...";
- mes "Well, then.";
- mes "If you change your mind you can come to me again.";
- next;
- mes "[Anori]";
- mes "You shouldn't talk about";
- mes "what you heard now to anyone";
- mes "It's kind of embarrassing...";
- close;
- case 2:
- mes "[Anori]";
- mes "Oh! You are the savior";
- mes "of our tribe indeed.";
- mes "On behalf of the tribe, I offer you my thanks.";
- next;
- mes "[Anori]";
- mes "Well, what we need is this.";
- mes "It's all you can get from near here.";
- mes "Note down well.";
- next;
- mes "[Anori]";
- mes "^ff0000 20 Hearts of Mermaids";
- mes "10 Leopard Claws";
- mes "3 Ancient Lips^000000";
- mes "are the only ones that are needed as the materials.";
- next;
- mes "[Anori]";
- mes "When you get those, I will make you a potion that purifies evil spirits using a secret formula handed down to the tribe.";
- setquest 4133;
- next;
- mes "[Anori]";
- mes "The destiny of the tribe is up to you.";
- mes "I hope you move quickly.";
- mes "Even at this moment, the village men are being seduced and slipping way...";
- close;
- }
- }
- }
- }
-}
-
-bra_dun02,157,74,5 script Iara#nk 478,2,2,{
- if (countitem(11517) > 0) {
- mes "[" + strcharinfo(0) + "]";
- mes "Should I use a Purification Potion?";
- next;
- switch(select("Yes.:No.")) {
- case 1:
- specialeffect EF_MAPPILLAR;
- mes "[Iara]";
- mes "Ah...this light is...";
- mes "It's like getting cleansed of evil thoughts";
- mes "from deep within my heart.";
- next;
- mes "[Iara]";
- mes "At last I can forget the curse that I placed on myself when I drowned in the water.";
- next;
- mes "[Iara]";
- mes "Do you think I can be born again as a kind water nymph?";
- next;
- specialeffect EF_GHOST;
- mes "[Iara]";
- mes "Ah... Thank you for helping me recover my consciousness for a while.";
- mes "But... I think that the curse has been with me too long.";
- mes "Get away from me quickly.";
- delitem 11517,1; //Puri_Potion
- percentheal 100,100;
- // may requitre new SCs
- sc_start SC_INCFLEE,3600000,20;
- sc_start SC_INCCRI,3600000,10;
- sc_start SC_STRFOOD,1200000,3;
- sc_start SC_DEXFOOD,1200000,3;
- sc_start SC_AGIFOOD,1200000,3;
- sc_start SC_VITFOOD,1200000,3;
- sc_start SC_INTFOOD,1200000,3;
- sc_start SC_LUKFOOD,1200000,3;
- next;
- mes "[Iara]";
- mes "Ahhh~...";
- specialeffect EF_DEVIL;
- next;
- mes "[Iara]";
- mes "The curse is too strong for me to keep contained.";
- mes "Leave now while you are safe.";
- close;
- case 2:
- mes "[" + strcharinfo(0) + "]";
- mes "(I guess I should ignore her.)";
- close;
- }
- }
- else {
- mes "[Iara]";
- mes "Aaaaaaaaaaaaaaaaaaaaaah.";
- mes "Eeeeeeeeeeeeeeeeeeeh.";
- mes "Oooooooooooooooooh.";
- set .@get_de,rand(1,2);
- if (.@get_de == 1)
- sc_start Sc_Curse,60000,0;
- else
- sc_start Sc_Confusion,60000,0;
- next;
- mes "[" + strcharinfo(0) + "]";
- mes "Ugh! What's this strange voice?";
- close;
- }
- end;
-
-OnTouch:
- if (countitem(11517) < 1) {
- mes "[Iara]";
- mes "Aaaaaaaaaaaaaaaaaaaaaah.";
- mes "Eeeeeeeeeeeeeeeeeeeh.";
- mes "Oooooooooooooooooh.";
- set .@get_de,rand(1,2);
- if (.@get_de == 1)
- sc_start Sc_Curse,60000,0;
- else
- sc_start Sc_Confusion,60000,0;
- next;
- mes "[" + strcharinfo(0) + "]";
- mes "Ugh! What's this strange voice?";
- close;
- }
- end;
-}
-
-bra_fild01,188,301,5 script Native Warrior#nk 472,{
- mes "[Native Warrior]";
- mes "Ah...the face I would never forget even in my dreams.";
- next;
- mes "[Native Warrior]";
- mes "When will she come out of the waterfall again...?";
- next;
- if ((checkquest(4133) >= 0) || (checkquest(4134) >= 0)) {
- mes "[" + strcharinfo(0) + "]";
- mes "(Wh...what's this guy?)";
- }
- else {
- mes "[" + strcharinfo(0) + "]";
- mes "(This guy will never";
- mes "get ocer Iara's curse...)";
- }
- close;
-}
+//===== eAthena Script =======================================
+//= Brasilis Qiests
+//===== By ===================================================
+//= L0ne_W0lf
+//===== Version ==============================================
+//= 1.0
+//===== Compatible With ======================================
+//= eAthena SVN
+//===== Description ==========================================
+//= [Aegis COnversion]
+//= Lost Puppies (Repeatable, 24 hours.)
+//= Suspicious Beach (Repeatable, 24 hours / iRO/cRO version.)
+//= Guarana Candy Quest
+//= Brasilis Water Lily Quest
+//= Brasilis Dungeon Access Quest
+//= Iara (Buff reward. Repeatable, 24 hours.)
+//===== Comments =============================================
+//= 1.0 First version.
+//============================================================
+
+// Lost Puppies, Original file: dogdog.sc
+//============================================================
+brasilis,297,307,5 script Angelo#br 50,{
+ set .@pongku,checkquest(9032,PLAYTIME);
+ set .@br1,checkquest(9030);
+ set .@br2,checkquest(9031);
+ if (BaseLevel < 40) {
+ mes "[Angelo]";
+ mes "Pets went out the village~!!";
+ mes "Gosh... what can I do... ?";
+ close;
+ }
+ else {
+ if ((.@pongku == 0) || (.@pongku == 1)) {
+ mes "[Angelo]";
+ mes "The day is not finished yet.";
+ mes "You can only help once a day. Hehe.";
+ close;
+ }
+ else {
+ if (checkquest(9032) > -1) erasequest 9032;
+ if ((.@br1 == 0) || (.@br1 == 1)) {
+ mes "[Angelo]";
+ mes "My pets are in the field outside of the village.";
+ mes "Why did they leave? Please find them.";
+ close;
+ }
+ else {
+ if ((.@br2 == 0) || (.@br2 == 1)) {
+ mes "[Angelo]";
+ mes "Oh, thank you. You found all of 3 puppies.";
+ mes "Thanks a lot.";
+ mes "I hope this is useful to you. hoho.";
+ getexp 500000,0;
+ erasequest 9031;
+ setquest 9032;
+ set .@bosang,rand(1,10);
+ if (.@bosang < 5) {
+ specialeffect2 EF_ASSUMPTIO;
+ percentheal 100,100;
+ //ConsumeSpecialItem Yggdrasilberry
+ }
+ else if (.@bosang < 9) {
+ specialeffect2 EF_ASSUMPTIO;
+ //ConsumeSpecialItem Yggdrasilberry
+ percentheal 100,100;
+ getitem 504,2; //White_Potion
+ }
+ else {
+ specialeffect2 EF_ASSUMPTIO;
+ //ConsumeSpecialItem Yggdrasilberry
+ percentheal 100,100;
+ getitem 608,1; //Seed_Of_Yggdrasil
+ }
+ close;
+ }
+ else {
+ mes "[Angelo]";
+ mes "Are you an adventurer? You came here right on time.";
+ mes "Puppies have been disappearing.";
+ mes "And someone said that they saw them out on the field just outside the village....";
+ next;
+ mes "[Angelo]";
+ mes "It's pretty difficult and dangerous to find 'em.";
+ mes "You have to find ^0000FF3 puppies^000000.";
+ setquest 9030;
+ close;
+ }
+ }
+ }
+ }
+ end;
+
+OnInit:
+ initnpctimer;
+ end;
+
+OnTimer10000:
+ stopnpctimer;
+ donpcevent "Angelo#br::Ongo";
+ end;
+
+Ongo:
+ emotion e_gasp;
+ initnpctimer;
+ end;
+}
+
+//Puppya1
+bra_fild01,98,96,3 script Puppy#a1 81,{
+ set .@br1,checkquest(9030);
+ if ((.@br1 == 0) || (.@br1 == 1)) {
+ if (brazil_kid < 3) {
+ mes "[Puppy]";
+ mes "bow wow bow wow!!";
+ next;
+ set brazil_kid,brazil_kid+1;
+ if (brazil_kid == 3) {
+ mes "["+strcharinfo(0)+"]";
+ mes "Good. I found all 3 puppies.";
+ mes "Now I need to go tell Angelo.";
+ set brazil_kid,0;
+ erasequest 9030;
+ setquest 9031;
+ set .@pk,rand(1,2);
+ if (.@pk == 1) {
+ donpcevent "Puppy#a2::OnEnable";
+ disablenpc "Puppy#a1";
+ }
+ else {
+ donpcevent "Puppy#a3::OnEnable";
+ disablenpc "Puppy#a1";
+ }
+ close;
+ }
+ else {
+ mes "["+strcharinfo(0)+"]";
+ mes "Ah... who's a good puppy?";
+ mes "Ok, where are the others?";
+ set .@pk,rand(1,2);
+ if (.@pk == 1) {
+ donpcevent "Puppy#a2::OnEnable";
+ disablenpc "Puppy#a1";
+ }
+ else {
+ donpcevent "Puppy#a3::OnEnable";
+ disablenpc "Puppy#a1";
+ }
+ }
+ close;
+ }
+ else {
+ mes "[Puppy]";
+ mes "bow! wow wow!";
+ close;
+ }
+ }
+ else {
+ mes "[Puppy]";
+ mes "bow! wow wow!";
+ close;
+ }
+ end;
+
+OnEnable:
+ enablenpc "Puppy#a1";
+ end;
+
+OnDisable:
+ disablenpc "Puppy#a1";
+ end;
+}
+
+//Puppya2
+bra_fild01,59,116,5 script Puppy#a2 81,{
+ set .@br1,checkquest(9030);
+ set name,strcharinfo(0);
+ if ((.@br1 == 0) || (.@br1 == 1)) {
+ if (brazil_kid < 3) {
+ mes "[Puppy]";
+ mes "bow wow bow wow!!";
+ next;
+ set brazil_kid,brazil_kid+1;
+ if (brazil_kid == 3) {
+ mes "["+strcharinfo(0)+"]";
+ mes "Good. I found all 3 puppies.";
+ mes "Now I need to go tell Angelo.";
+ set brazil_kid,0;
+ erasequest 9030;
+ setquest 9031;
+ set .@pk,rand(1,2);
+ if (.@pk == 1) {
+ donpcevent "Puppy#a1::OnEnable";
+ disablenpc "Puppy#a2";
+ }
+ else {
+ donpcevent "Puppy#a3::OnEnable";
+ disablenpc "Puppy#a2";
+ }
+ close;
+ }
+ else {
+ mes "["+strcharinfo(0)+"]";
+ mes "Ah... who's a good puppy?";
+ mes "Ok, where are the others?";
+ set .@pk,rand(1,2);
+ if (.@pk == 1) {
+ donpcevent "Puppy#a1::OnEnable";
+ disablenpc "Puppy#a2";
+ }
+ else {
+ donpcevent "Puppy#a3::OnEnable";
+ disablenpc "Puppy#a2";
+ }
+ }
+ close;
+ }
+ else {
+ mes "[Puppy]";
+ mes "bow! wow wow!";
+ close;
+ }
+ }
+ else {
+ mes "[Puppy]";
+ mes "bow! wow wow!";
+ close;
+ }
+ end;
+
+OnInit:
+ disablenpc "Puppy#a2";
+ end;
+
+OnEnable:
+ enablenpc "Puppy#a2";
+ end;
+
+OnDisable:
+ disablenpc "Puppy#a2";
+ end;
+}
+
+//Puppya3
+bra_fild01,62,142,3 script Puppy#a3 81,{
+ set .@br1,checkquest(9030);
+ if ((.@br1 == 0) || (.@br1 == 1)) {
+ if (brazil_kid < 3) {
+ mes "[Puppy]";
+ mes "bow wow bow wow!!";
+ next;
+ set brazil_kid,brazil_kid+1;
+ if (brazil_kid == 3) {
+ mes "["+strcharinfo(0)+"]";
+ mes "Good. I found all 3 puppies.";
+ mes "Now I need to go tell Angelo.";
+ set brazil_kid,0;
+ erasequest 9030;
+ setquest 9031;
+ set .@pk,rand(1,2);
+ if (.@pk == 1) {
+ donpcevent "Puppy#a1::OnEnable";
+ disablenpc "Puppy#a3";
+ }
+ else {
+ donpcevent "Puppy#a2::OnEnable";
+ disablenpc "Puppy#a3";
+ }
+ close;
+ }
+ else {
+ mes "["+strcharinfo(0)+"]";
+ mes "Ah... who's a good puppy?";
+ mes "Ok, where are the others?";
+ set .@pk,rand(1,2);
+ if (.@pk == 1) {
+ donpcevent "Puppy#a1::OnEnable";
+ disablenpc "Puppy#a3";
+ }
+ else {
+ donpcevent "Puppy#a2::OnEnable";
+ disablenpc "Puppy#a3";
+ }
+ }
+ close;
+ }
+ else {
+ mes "[Puppy]";
+ mes "bow! wow wow!";
+ close;
+ }
+ }
+ else {
+ mes "[Puppy]";
+ mes "bow! wow wow!";
+ close;
+ }
+ end;
+
+OnInit:
+ disablenpc "Puppy#a3";
+ end;
+
+OnEnable:
+ enablenpc "Puppy#a3";
+ end;
+
+OnDisable:
+ disablenpc "Puppy#a3";
+ end;
+}
+
+//Puppy b1
+bra_fild01,80,163,3 script Puppy#b1 81,{
+ set .@br1,checkquest(9030);
+ if ((.@br1 == 0) || (.@br1 == 1)) {
+ if (brazil_kid < 3) {
+ mes "[Puppy]";
+ mes "bow wow bow wow!!";
+ next;
+ set brazil_kid,brazil_kid+1;
+ if (brazil_kid == 3) {
+ mes "["+strcharinfo(0)+"]";
+ mes "Good. I found all 3 puppies.";
+ mes "Now I need to go tell Angelo.";
+ set brazil_kid,0;
+ erasequest 9030;
+ setquest 9031;
+ set .@pk,rand(1,2);
+ if (.@pk == 1) {
+ donpcevent "Puppy#b2::OnEnable";
+ disablenpc "Puppy#b1";
+ }
+ else {
+ donpcevent "Puppy#b3::OnEnable";
+ disablenpc "Puppy#b1";
+ }
+ close;
+ }
+ else {
+ mes "["+strcharinfo(0)+"]";
+ mes "Ah... who's a good puppy?";
+ mes "Ok, where are the others?";
+ set .@pk,rand(1,2);
+ if (.@pk == 1) {
+ donpcevent "Puppy#b2::OnEnable";
+ disablenpc "Puppy#b1";
+ }
+ else {
+ donpcevent "Puppy#b3::OnEnable";
+ disablenpc "Puppy#b1";
+ }
+ }
+ close;
+ }
+ else {
+ mes "[Puppy]";
+ mes "bow! wow wow!";
+ close;
+ }
+ }
+ else {
+ mes "[Puppy]";
+ mes "bow! wow wow!";
+ close;
+ }
+ end;
+
+OnEnable:
+ enablenpc "Puppy#b1";
+ end;
+
+OnDisable:
+ disablenpc "Puppy#b1";
+ end;
+}
+
+//Puppy b2
+bra_fild01,73,210,3 script Puppy#b2 81,{
+ set .@br1,checkquest(9030);
+ if ((.@br1 == 0) || (.@br1 == 1)) {
+ if (brazil_kid < 3) {
+ mes "[Puppy]";
+ mes "bow wow bow wow!!";
+ next;
+ set brazil_kid,brazil_kid+1;
+ if (brazil_kid == 3) {
+ mes "["+strcharinfo(0)+"]";
+ mes "Good. I found all 3 puppies.";
+ mes "Now I need to go tell Angelo.";
+ set brazil_kid,0;
+ erasequest 9030;
+ setquest 9031;
+ set .@pk,rand(1,2);
+ if (.@pk == 1) {
+ donpcevent "Puppy#b1::OnEnable";
+ disablenpc "Puppy#b2";
+ }
+ else {
+ donpcevent "Puppy#b3::OnEnable";
+ disablenpc "Puppy#b2";
+ }
+ close;
+ }
+ else {
+ mes "["+strcharinfo(0)+"]";
+ mes "Ah... who's a good puppy?";
+ mes "Ok, where are the others?";
+ set .@pk,rand(1,2);
+ if (.@pk == 1) {
+ donpcevent "Puppy#b1::OnEnable";
+ disablenpc "Puppy#b2";
+ }
+ else {
+ donpcevent "Puppy#b3::OnEnable";
+ disablenpc "Puppy#b2";
+ }
+ }
+ close;
+ }
+ else {
+ mes "[Puppy]";
+ mes "bow! wow wow!";
+ close;
+ }
+ }
+ else {
+ mes "[Puppy]";
+ mes "bow! wow wow!";
+ close;
+ }
+ end;
+
+OnInit:
+ disablenpc "Puppy#b2";
+ end;
+
+OnEnable:
+ enablenpc "Puppy#b2";
+ end;
+
+OnDisable:
+ disablenpc "Puppy#b2";
+ end;
+}
+
+//Puppy b3
+bra_fild01,80,210,3 script Puppy#b3 81,{
+ set .@br1,checkquest(9030);
+ if ((.@br1 == 0) || (.@br1 == 1)) {
+ if (brazil_kid < 3) {
+ mes "[Puppy]";
+ mes "bow wow bow wow!!";
+ next;
+ set brazil_kid,brazil_kid+1;
+ if (brazil_kid == 3) {
+ mes "["+strcharinfo(0)+"]";
+ mes "Good. I found all 3 puppies.";
+ mes "Now I need to go tell Angelo.";
+ set brazil_kid,0;
+ erasequest 9030;
+ setquest 9031;
+ set .@pk,rand(1,2);
+ if (.@pk == 1) {
+ donpcevent "Puppy#b1::OnEnable";
+ disablenpc "Puppy#b3";
+ }
+ else {
+ donpcevent "Puppy#b2::OnEnable";
+ disablenpc "Puppy#b3";
+ }
+ close;
+ }
+ else {
+ mes "["+strcharinfo(0)+"]";
+ mes "Ah... who's a good puppy?";
+ mes "Ok, where are the others?";
+ set .@pk,rand(1,2);
+ if (.@pk == 1) {
+ donpcevent "Puppy#b1::OnEnable";
+ disablenpc "Puppy#b3";
+ }
+ else {
+ donpcevent "Puppy#b2::OnEnable";
+ disablenpc "Puppy#b3";
+ }
+ }
+ close;
+ }
+ else {
+ mes "[Puppy]";
+ mes "bow! wow wow!";
+ close;
+ }
+ }
+ else {
+ mes "[Puppy]";
+ mes "bow! wow wow!";
+ close;
+ }
+ end;
+
+OnInit:
+ disablenpc "Puppy#b3";
+ end;
+
+OnEnable:
+ enablenpc "Puppy#b3";
+ end;
+
+OnDisable:
+ disablenpc "Puppy#b3";
+ end;
+}
+
+//Puppyc1
+bra_fild01,38,235,3 script Puppy#c1 81,{
+ set .@br1,checkquest(9030);
+ if ((.@br1 == 0) || (.@br1 == 1)) {
+ if (brazil_kid < 3) {
+ mes "[Puppy]";
+ mes "bow wow bow wow!!";
+ next;
+ set brazil_kid,brazil_kid+1;
+ if (brazil_kid == 3) {
+ mes "["+strcharinfo(0)+"]";
+ mes "Good. I found all 3 puppies.";
+ mes "Now I need to go tell Angelo.";
+ set brazil_kid,0;
+ erasequest 9030;
+ setquest 9031;
+ set .@pk,rand(1,2);
+ if (.@pk == 1) {
+ donpcevent "Puppy#c2::OnEnable";
+ disablenpc "Puppy#c1";
+ }
+ else {
+ donpcevent "Puppy#c3::OnEnable";
+ disablenpc "Puppy#c1";
+ }
+ close;
+ }
+ else {
+ mes "["+strcharinfo(0)+"]";
+ mes "Ah... who's a good puppy?";
+ mes "Ok, where are the others?";
+ set .@pk,rand(1,2);
+ if (.@pk == 1) {
+ donpcevent "Puppy#c2::OnEnable";
+ disablenpc "Puppy#c1";
+ }
+ else {
+ donpcevent "Puppy#c3::OnEnable";
+ disablenpc "Puppy#c1";
+ }
+ }
+ close;
+ }
+ else {
+ mes "[Puppy]";
+ mes "bow! wow wow!";
+ close;
+ }
+ }
+ else {
+ mes "[Puppy]";
+ mes "bow! wow wow!";
+ close;
+ }
+ end;
+
+OnEnable:
+ enablenpc "Puppy#c1";
+ end;
+
+OnDisable:
+ disablenpc "Puppy#c1";
+ end;
+}
+
+//Puppy c2
+bra_fild01,307,64,3 script Puppy#c2 81,{
+ set .@br1,checkquest(9030);
+ if ((.@br1 == 0) || (.@br1 == 1)) {
+ if (brazil_kid < 3) {
+ mes "[Puppy]";
+ mes "bow wow bow wow!!";
+ next;
+ set brazil_kid,brazil_kid+1;
+ if (brazil_kid == 3) {
+ mes "["+strcharinfo(0)+"]";
+ mes "Good. I found all 3 puppies.";
+ mes "Now I need to go tell Angelo.";
+ set brazil_kid,0;
+ erasequest 9030;
+ setquest 9031;
+ set .@pk,rand(1,2);
+ if (.@pk == 1) {
+ donpcevent "Puppy#c1::OnEnable";
+ disablenpc "Puppy#c2";
+ }
+ else {
+ donpcevent "Puppy#c3::OnEnable";
+ disablenpc "Puppy#c2";
+ }
+ close;
+ }
+ else {
+ mes "["+strcharinfo(0)+"]";
+ mes "Ah... who's a good puppy?";
+ mes "Ok, where are the others?";
+ set .@pk,rand(1,2);
+ if (.@pk == 1) {
+ donpcevent "Puppy#c1::OnEnable";
+ disablenpc "Puppy#c2";
+ }
+ else {
+ donpcevent "Puppy#c3::OnEnable";
+ disablenpc "Puppy#c2";
+ }
+ }
+ close;
+ }
+ else {
+ mes "[Puppy]";
+ mes "bow! wow wow!";
+ close;
+ }
+ }
+ else {
+ mes "[Puppy]";
+ mes "bow! wow wow!";
+ close;
+ }
+ end;
+
+OnInit:
+ disablenpc "Puppy#c2";
+ end;
+
+OnEnable:
+ enablenpc "Puppy#c2";
+ end;
+
+OnDisable:
+ disablenpc "Puppy#c2";
+ end;
+}
+
+//Puppy c3
+bra_fild01,260,60,3 script Puppy#c3 81,{
+ set .@br1,checkquest(9030);
+ if ((.@br1 == 0) || (.@br1 == 1)) {
+ if (brazil_kid < 3) {
+ mes "[Puppy]";
+ mes "bow wow bow wow!!";
+ next;
+ set brazil_kid,brazil_kid+1;
+ if (brazil_kid == 3) {
+ mes "["+strcharinfo(0)+"]";
+ mes "Good. I found all 3 puppies.";
+ mes "Now I need to go tell Angelo.";
+ set brazil_kid,0;
+ erasequest 9030;
+ setquest 9031;
+ set .@pk,rand(1,2);
+ if (.@pk == 1) {
+ donpcevent "Puppy#c1::OnEnable";
+ disablenpc "Puppy#c3";
+ }
+ else {
+ donpcevent "Puppy#c2::OnEnable";
+ disablenpc "Puppy#c3";
+ }
+ close;
+ }
+ else {
+ mes "["+strcharinfo(0)+"]";
+ mes "Ah... who's a good puppy?";
+ mes "Ok, where are the others?";
+ set .@pk,rand(1,2);
+ if (.@pk == 1) {
+ donpcevent "Puppy#c1::OnEnable";
+ disablenpc "Puppy#c3";
+ }
+ else {
+ donpcevent "Puppy#c2::OnEnable";
+ disablenpc "Puppy#c3";
+ }
+ }
+ close;
+ }
+ else {
+ mes "[Puppy]";
+ mes "bow! wow wow!";
+ close;
+ }
+ }
+ else {
+ mes "[Puppy]";
+ mes "bow! wow wow!";
+ close;
+ }
+ end;
+ OnInit:
+ disablenpc "Puppy#c3";
+ end;
+
+OnEnable:
+ enablenpc "Puppy#c3";
+ end;
+
+OnDisable:
+ disablenpc "Puppy#c3";
+ end;
+}
+
+//Puppyd1
+bra_fild01,234,101,3 script Puppy#d1 81,{
+ set .@br1,checkquest(9030);
+ if ((.@br1 == 0) || (.@br1 == 1)) {
+ if (brazil_kid < 3) {
+ mes "[Puppy]";
+ mes "bow wow bow wow!!";
+ next;
+ set brazil_kid,brazil_kid+1;
+ if (brazil_kid == 3) {
+ mes "["+strcharinfo(0)+"]";
+ mes "Good. I found all 3 puppies.";
+ mes "Now I need to go tell Angelo.";
+ set brazil_kid,0;
+ erasequest 9030;
+ setquest 9031;
+ set .@pk,rand(1,2);
+ if (.@pk == 1) {
+ donpcevent "Puppy#d2::OnEnable";
+ disablenpc "Puppy#d1";
+ }
+ else {
+ donpcevent "Puppy#d3::OnEnable";
+ disablenpc "Puppy#d1";
+ }
+ close;
+ }
+ else {
+ mes "["+strcharinfo(0)+"]";
+ mes "Ah... who's a good puppy?";
+ mes "Ok, where are the others?";
+ set .@pk,rand(1,2);
+ if (.@pk == 1) {
+ donpcevent "Puppy#d2::OnEnable";
+ disablenpc "Puppy#d1";
+ }
+ else {
+ donpcevent "Puppy#d3::OnEnable";
+ disablenpc "Puppy#d1";
+ }
+ }
+ close;
+ }
+ else {
+ mes "[Puppy]";
+ mes "bow! wow wow!";
+ close;
+ }
+ }
+ else {
+ mes "[Puppy]";
+ mes "bow! wow wow!";
+ close;
+ }
+ end;
+
+OnEnable:
+ enablenpc "Puppy#d1";
+ end;
+
+OnDisable:
+ disablenpc "Puppy#d1";
+ end;
+}
+
+//Puppy d2
+bra_fild01,200,84,3 script Puppy#d2 81,{
+ set .@br1,checkquest(9030);
+ if ((.@br1 == 0) || (.@br1 == 1)) {
+ if (brazil_kid < 3) {
+ mes "[Puppy]";
+ mes "bow wow bow wow!!";
+ next;
+ set brazil_kid,brazil_kid+1;
+ if (brazil_kid == 3) {
+ mes "["+strcharinfo(0)+"]";
+ mes "Good. I found all 3 puppies.";
+ mes "Now I need to go tell Angelo.";
+ set brazil_kid,0;
+ erasequest 9030;
+ setquest 9031;
+ set .@pk,rand(1,2);
+ if (.@pk == 1) {
+ donpcevent "Puppy#d1::OnEnable";
+ disablenpc "Puppy#d2";
+ }
+ else {
+ donpcevent "Puppy#d3::OnEnable";
+ disablenpc "Puppy#d2";
+ }
+ close;
+ }
+ else {
+ mes "["+strcharinfo(0)+"]";
+ mes "Ah... who's a good puppy?";
+ mes "Ok, where are the others?";
+ set .@pk,rand(1,2);
+ if (.@pk == 1) {
+ donpcevent "Puppy#d1::OnEnable";
+ disablenpc "Puppy#d2";
+ }
+ else {
+ donpcevent "Puppy#d3::OnEnable";
+ disablenpc "Puppy#d2";
+ }
+ }
+ close;
+ }
+ else {
+ mes "[Puppy]";
+ mes "bow! wow wow!";
+ close;
+ }
+ }
+ else {
+ mes "[Puppy]";
+ mes "bow! wow wow!";
+ close;
+ }
+ end;
+
+OnInit:
+ disablenpc "Puppy#d2";
+ end;
+
+OnEnable:
+ enablenpc "Puppy#d2";
+ end;
+
+OnDisable:
+ disablenpc "Puppy#d2";
+ end;
+}
+
+//Puppy d3
+bra_fild01,176,63,5 script Puppy#d3 81,{
+ set .@br1,checkquest(9030);
+ if ((.@br1 == 0) || (.@br1 == 1)) {
+ if (brazil_kid < 3) {
+ mes "[Puppy]";
+ mes "bow wow bow wow!!";
+ next;
+ set brazil_kid,brazil_kid+1;
+ if (brazil_kid == 3) {
+ mes "["+strcharinfo(0)+"]";
+ mes "Good. I found all 3 puppies.";
+ mes "Now I need to go tell Angelo.";
+ set brazil_kid,0;
+ erasequest 9030;
+ setquest 9031;
+ set .@pk,rand(1,2);
+ if (.@pk == 1) {
+ donpcevent "Puppy#d1::OnEnable";
+ disablenpc "Puppy#d3";
+ }
+ else {
+ donpcevent "Puppy#d2::OnEnable";
+ disablenpc "Puppy#d3";
+ }
+ close;
+ }
+ else {
+ mes "["+strcharinfo(0)+"]";
+ mes "Ah... who's a good puppy?";
+ mes "Ok, where are the others?";
+ set .@pk,rand(1,2);
+ if (.@pk == 1) {
+ donpcevent "Puppy#d1::OnEnable";
+ disablenpc "Puppy#d3";
+ }
+ else {
+ donpcevent "Puppy#d2::OnEnable";
+ disablenpc "Puppy#d3";
+ }
+ }
+ close;
+ }
+ else {
+ mes "[Puppy]";
+ mes "bow! wow wow!";
+ close;
+ }
+ }
+ else {
+ mes "[Puppy]";
+ mes "bow! wow wow!";
+ close;
+ }
+ end;
+
+OnInit:
+ disablenpc "Puppy#d3";
+ end;
+
+OnEnable:
+ enablenpc "Puppy#d3";
+ end;
+
+OnDisable:
+ disablenpc "Puppy#d3";
+ end;
+}
+
+// Suspicious Beach, original file: Suspicious_Beach.sc
+//============================================================
+brasilis,192,133,6 script Lucia#brasilis 478,{
+ /*
+ if (countitem(12408) > 0) {
+ delitem 12408,1; //Leaf_Cat_Ball
+ getitem 12408,1; //Leaf_Cat_Ball
+ }
+ else if (countitem(6221) > 0) {
+ delitem 6221,1; //Mystic_Leaf_Cat_Ball
+ getitem 6221,1; //Mystic_Leaf_Cat_Ball
+ }
+ */
+ if (BaseLevel < 40) {
+ mes "[Lucia]";
+ mes "Hello.";
+ mes "I'm worried about ^FF0000Strange Hydra^000000's on";
+ mes "the south beach.";
+ mes "I hope some experienced adventurers";
+ mes "will come to help.";
+ emotion e_sigh;
+ close;
+ }
+ else {
+ set .@nQState1,checkquest(9028);
+ set .@nQState2,checkquest(9029);
+ if (.@nQState1 == 0) {
+ mes "[Lucia]";
+ mes "Hello.";
+ mes "Have you come here to hunt ^FF0000Strange Hydra^000000s?";
+ next;
+ switch(select("Yes.:No.:^006400What is happening here?^000000")) {
+ case 1:
+ setquest 9028;
+ getitem 12408,1; //Leaf_Cat_Ball
+ mes "[Lucia]";
+ mes "Here, take this ^006400Hydra Ball^000000.";
+ mes "Use it to capture a ^FF0000Strange Hydra^8B4513.^000000";
+ mes "I hope you can do it~!";
+ close;
+ case 2:
+ mes "[Lucia]";
+ mes "Ah, I misunderstood.";
+ mes "See you then.";
+ close;
+ case 3:
+ mes "[Lucia]";
+ mes "One day ^FF0000Strange Hydra^000000s";
+ mes "came here and surrounded the town.";
+ mes "We're not sure what attracted them but some say that it's because of you adventurers.";
+ next;
+ mes "[Lucia]";
+ mes "In any case, to contain the ^FF0000Strange Hydra^000000s,";
+ mes "you have to use this specially designed tool a.k.a. a ^8B4513Hydra Ball^000000";
+ next;
+ mes "[Lucia]";
+ mes "If you still have the ^006400Hydra Ball^000000,";
+ mes "please use it on the ^FF0000Strange Hydra^000000s that";
+ mes "you can find at the beach.";
+ mes "If you are lucky, the tool will work perfectly.";
+ next;
+ mes "[Lucia]";
+ mes "I hope many adventurers";
+ mes "volunteer for this job.";
+ mes " ";
+ mes "I really hate Hydra!";
+ emotion e_sob;
+ close;
+ }
+ }
+ else if ((.@nQState1 == 0) || (.@nQState1 == 1)) {
+ if (countitem(6221) > 0) {
+ mes "[Lucia]";
+ mes "Hello, you really did it!";
+ if (checkweight(11502,3)) {
+ //mes "I don't have enough ^006400Hydra Ball^000000s to give you."; //Poorly translated by iRO?
+ mes "I hope you will come";
+ mes "again to help me.";
+ mes "Have a nice day~!";
+ delitem 6221,1; //Mystic_Leaf_Cat_Ball
+ completequest 9028;
+ //recall_completequest 9029;
+ if (.@nQState2 > -1) erasequest 9029;
+ setquest 9029;
+ //ConsumeSpecialItem Yggdrasilberry
+ percentheal 100,100;
+ //ConsumeSpecialItem Luk_Dish05
+ sc_start SC_LUKFOOD, 1200000, 5; percentheal 5,2;
+ //ConsumeSpecialItem Vit_Dish05
+ sc_start SC_VITFOOD, 1200000, 5; percentheal 10,0;
+ //ConsumeSpecialItem Dex_Dish05
+ sc_start SC_DEXFOOD, 1200000, 5; percentheal 5,5;
+ getitem 11502,3; //Light_Blue_Pot
+ close;
+ }
+ else {
+ mes " ";
+ mes "I'd like to reward you,";
+ mes "however your bags are full.";
+ mes "Please make room and come back!";
+ close;
+ }
+ }
+ else {
+ mes "[Lucia]";
+ if (countitem(12408) < 1) {
+ mes "Did you need another ^006400Hydra Ball^000000?";
+ mes "I will give you one more.";
+ getitem 12408,1; //Leaf_Cat_Ball
+ close;
+ }
+ else {
+ mes "Any problems?";
+ next;
+ switch(select("No.:^006400Tell me again what happened^000000")) {
+ case 1:
+ mes "[Lucia]";
+ mes "Ok, please do me a favor.";
+ close;
+ case 2:
+ mes "[Lucia]";
+ mes "One day ^FF0000Strange Hydra^000000s";
+ mes "came here and surrounded the town.";
+ mes "We're not sure what attracted them but some say that it's because of you adventurers.";
+ next;
+ mes "[Lucia]";
+ mes "In any case, to contain the ^FF0000Strange Hydra^000000s,";
+ mes "you have to use this specially designed tool a.k.a. a ^8B4513Hydra Ball^000000";
+ next;
+ mes "[Lucia]";
+ mes "If you still have the ^006400Hydra Ball^000000,";
+ mes "please use it on the ^FF0000Strange Hydra^000000s that";
+ mes "you can find at the beach.";
+ mes "If you are lucky, the tool will work perfectly.";
+ next;
+ mes "[Lucia]";
+ mes "I hope many adventurers";
+ mes "volunteer for this job.";
+ mes " ";
+ mes "I really hate Hydra!";
+ emotion e_sob;
+ close;
+ }
+ }
+ }
+ }
+ else {
+ mes "[Lucia]";
+ mes "Oh, ^0000FF"+strcharinfo(0)+"^000000 you're back.";
+ set .@nCheckTime,checkquest(9029,PLAYTIME);
+ if ((.@nCheckTime == 0) || (.@nCheckTime == 1)) {
+ mes "I'm so grateful for your help.";
+ mes "Each ^006400Hydra Ball^000000 is provided ^006400every 24 hours^000000";
+ mes "Please come at the appropriate time.";
+ close;
+ }
+ else {
+ //recall_completequest 9028;
+ if (.@nQState1 > -1) erasequest 9028;
+ completequest 9029;
+ mes "Did you come here to hunt ^FF0000Strange Hydra^000000s?";
+ next;
+ switch(select("Yes.:No.:^006400What is happening here?^000000")) {
+ case 1:
+ setquest 9028;
+ getitem 12408,1; //Leaf_Cat_Ball
+ mes "[Lucia]";
+ mes "Here, take this ^006400Hydra Ball^000000.";
+ mes "Use it to capture a ^FF0000Strange Hydra^8B4513.^000000";
+ mes "I hope you can do it~!";
+ close;
+ case 2:
+ mes "[Lucia]";
+ mes "Ah, I misunderstood.";
+ mes "See you then.";
+ close;
+ case 3:
+ mes "[Lucia]";
+ mes "One day ^FF0000Strange Hydra^000000s";
+ mes "came here and surrounded the town.";
+ mes "We're not sure what attracted them but some say that it's because of you adventurers.";
+ next;
+ mes "[Lucia]";
+ mes "In any case, to contain the ^FF0000Strange Hydra^000000s,";
+ mes "you have to use this specially designed tool a.k.a. a ^8B4513Hydra Ball^000000";
+ next;
+ mes "[Lucia]";
+ mes "If you still have the ^006400Hydra Ball^000000,";
+ mes "please use it on the ^FF0000Strange Hydra^000000s that";
+ mes "you can find at the beach.";
+ mes "If you are lucky, the tool will work perfectly.";
+ next;
+ mes "[Lucia]";
+ mes "I hope many adventurers";
+ mes "volunteer for this job.";
+ mes " ";
+ mes "I really hate Hydra!";
+ emotion e_sob;
+ close;
+ }
+ }
+ }
+ }
+ end;
+
+OnInit:
+ initnpctimer;
+ end;
+
+OnTimer7000:
+ emotion e_gasp;
+ stopnpctimer;
+ initnpctimer;
+ end;
+}
+
+// Guarana Quest, Original file: brazil_tre.sc
+//============================================================
+brasilis,187,162,5 script Candy Maker 476,{
+ if (!checkweight(1201,1)) {
+ mes "- You can't start the quest. Please reduce the weight in your inventory. -";
+ close;
+ }
+ if (brazil_gua == 0) {
+ mes "[Candy Maker]";
+ mes "Yo, do you know a berry called ^FF0000Guarana^000000?";
+ next;
+ mes "[Candy Maker]";
+ mes "Guarana is a really special berry raised in a specific area, it relieves physical fatigue, and gives power to the body. It even detoxes waste from the body.";
+ next;
+ mes "[Candy Maker]";
+ mes "I used to sell the candy made of it back in the day.";
+ mes "I got a prize sometimes every year in the <annual best product contest>. Those were the good 'ol days.";
+ next;
+ mes "[Candy Maker]";
+ mes "Since then, the output of that fruit has reduced and the price has gone up so now candy ingredients were changed to coconuts or other tropical fruits instead. I miss the guarana candy.";
+ next;
+ switch(select("How can I taste this guarana candy?:End conversation.")) {
+ case 1:
+ mes "[Candy Maker]";
+ mes "Hmm? I already sold out of all my old supply.";
+ next;
+ mes "[Candy Maker]";
+ mes "But if you can find some guarana, I can make it for you.";
+ next;
+ switch(select("How do I find guarana?:End conversation.")) {
+ case 1:
+ mes "[Candy Maker]";
+ mes "Will you find the guarana?? Hoooooh~";
+ next;
+ mes "[Candy Maker]";
+ mes "Can you find it?";
+ mes "It's probably very expensive.";
+ mes "Trading isn't my thing. Let me think.";
+ next;
+ mes "[Candy Maker]";
+ mes "Let me introduce you to someone with whom I used to do guarana business with.";
+ mes "He might still be dealing it.";
+ next;
+ mes "[Candy Maker]";
+ mes "His name is Cherto.";
+ mes "If you can't find him in the city, go to museum.";
+ mes "He's a vain person so he likes to act big.";
+ mes "He's probably wandering in the museum trying to show off to someone for sure.";
+ set brazil_gua,1;
+ setquest 2192;
+ close;
+ case 2:
+ mes "[Candy Maker]";
+ mes "Don't you want to try the guarana candy?";
+ close;
+ }
+ case 2:
+ mes "[Candy Maker]";
+ mes "Those were the good 'ole days...";
+ close;
+ }
+ }
+ else if (brazil_gua == 1) {
+ mes "[Candy Maker]";
+ mes "If you want to get the guarana, find Cherto.";
+ mes "Maybe he will be in the museum.";
+ close;
+ }
+ else if (brazil_gua == 10) {
+ if (!countitem(6237)) {
+ mes "- The guarana that I had has disappeared. -";
+ close;
+ }
+ delitem 6237,1; //Guarana_Fruit
+ mes "[Candy Maker]";
+ mes "Did you get the guarana?";
+ next;
+ mes "- You give the guarana to him. -";
+ next;
+ mes "[Candy Maker]";
+ mes "Wow! You have special talent.";
+ mes "It's the best thing I have ever seen so far. Cool~!";
+ next;
+ mes "[Candy Maker]";
+ mes "Good, let's make the candy~!";
+ mes "Long time no see my wonderful guarana candy...";
+ next;
+ mes "- hash hash hash hash hash hash -";
+ mes "- hash hash hash hash hash hash -";
+ next;
+ mes "[Candy Maker]";
+ mes "Look! It's the popular guarana candy.";
+ mes "Try to savor its amazing taste hey~ take it easy. hahaha!!";
+ set brazil_gua,11;
+ completequest 2200;
+ getitem 12414,1; //Guarana_Candy
+ getexp 700000,100000;
+ close;
+ }
+ else if (brazil_gua == 11) {
+ mes "[Candy Maker]";
+ mes "Guarana candy. That was the most unique masterpiece in my life for sure!";
+ next;
+ mes "[Candy Maker]";
+ mes "Since you helped me, guarana supply has been steadily rising.";
+ mes "So, naturally I'm back to making guarana candy.";
+ next;
+ mes "[Candy Maker]";
+ mes "What about it? Wanna buy some?";
+ mes "It's 4000 zeny each.";
+ next;
+ switch(select("Buy a Guarana Candy.:Cancel.")) {
+ case 1:
+ if (Zeny > 3999) {
+ mes "[Candy Maker]";
+ mes "Here is a delicious guarana candy.";
+ set zeny,zeny-4000;
+ getitem 12414,1; //Guarana_Candy
+ close;
+ }
+ else {
+ mes "[Candy Maker]";
+ mes "What? You should say before if you don't have money!";
+ mes "Even if you are poor, I can't give this away for free.";
+ close;
+ }
+ case 2:
+ mes "[Candy Maker]";
+ mes "Sometimes some people don't like it due to it's arousal effect.";
+ close;
+ }
+ close;
+ }
+ else {
+ mes "[Candy Maker]";
+ mes "Guarana candy. That was the most unique masterpiece in my life for sure!";
+ close;
+ }
+}
+
+bra_in01,95,179,3 script Cherto 477,{
+ if (brazil_gua == 0) {
+ mes "[Cherto]";
+ mes "Hmm... hey man, you are from outside, aren't you?";
+ next;
+ mes "[Cherto]";
+ mes "Cherto can figure it out even if it's the first time. You can't trick Cherto.";
+ mes "Cherto has sharp eyes like an eagle! Hahaha!";
+ next;
+ mes "[Cherto]";
+ mes "Ok, ok. Yes, yes. I see!";
+ next;
+ mes "[Cherto]";
+ mes "Anyway, you arrived in Brasilis but don't know what to do?";
+ mes "Am I right?";
+ mes "You don't know how fortunate you are to have found a really proper helper as myself.";
+ next;
+ mes "[Cherto]";
+ mes "Cherto takes it by your expression that you want to say, ''You are a master!'' Right?";
+ mes "Cherto, I can read and figure out all at once! That is written in your face!";
+ next;
+ mes "[Cherto]";
+ mes "Cherto would love to stay here and explain everything to you but he is a busy man.";
+ close;
+ }
+ else if (brazil_gua == 1) {
+ mes "[Cherto]";
+ mes "Hmm... hey man, you are from outside, aren't you?";
+ next;
+ mes "[Cherto]";
+ mes "Cherto can figure it out even if it's the first time. You can't trick Cherto.";
+ mes "Cherto has sharp eyes like an eagle! Hahaha!";
+ next;
+ mes "[Cherto]";
+ mes "Ok, ok. Yes, yes. I see!";
+ next;
+ mes "[Cherto]";
+ mes "Anyway, you arrived in Brasilis but don't know what to do?";
+ mes "Am I right?";
+ mes "You don't know how fortunate you are to have found a really proper helper as myself.";
+ next;
+ mes "[Cherto]";
+ mes "Cherto takes it by your expression that you want to say, ''You are a master!'' Right?";
+ mes "Cherto, I can read and figure out all at once! That is written in your face!";
+ next;
+ mes "[Cherto]";
+ mes "If you have a curious thing to ask to Cherto. Cherto will be kind enough to answer.";
+ next;
+ select("Guarana?");
+ mes "[Cherto]";
+ mes "What? Do you want to find a guarana?";
+ next;
+ mes "[Cherto]";
+ mes "Guarana is only raised in this area, it has a soft inside and is coverd with a light fur.";
+ mes "It seems a little bit weird but the flower is really big and smells beautiful.";
+ next;
+ mes "[Cherto]";
+ mes "A long time ago, guarana was used to relieve desease and thirst. But recently it's getting popular to revitalize body power and increase blood circulation.";
+ next;
+ mes "[Cherto]";
+ mes "Although it has such great effects, Cherto is sorry to inform you that we can't get it anymore.";
+ next;
+ select("Whaaaat??");
+ mes "[Cherto]";
+ mes "For a while now, guarana berries haven't been growing here.";
+ next;
+ mes "[Cherto]";
+ mes "Even if Cherto managed to find one, it will rot quickly.";
+ next;
+ mes "[Cherto]";
+ mes "If only it didn't happen!";
+ next;
+ select("What are you talking about?");
+ mes "[Cherto]";
+ mes "Quiet!!!!!!!!!!!!!!!!";
+ mes "This story has been forbidden! Someone might be listening to our conversation...";
+ next;
+ mes "[Cherto]";
+ mes "If Cherto tells you, you might get us into trouble. But you look like you really wanna know so let me give you a tip.";
+ mes "Come closer. Cherto will whisper so nobody can listen in.";
+ set brazil_gua,2;
+ close;
+ }
+ else if (brazil_gua == 2) {
+ mes "[Cherto]";
+ mes "A Guarana boy was born.";
+ next;
+ select("Guarana kid?");
+ mes "[Cherto]";
+ mes "There was woman who was an expert botanist.";
+ mes "The woman was really popular to all living creatures.";
+ next;
+ mes "[Cherto]";
+ mes "At around the time her baby was born, she started a guarana farm. For some reason, her brothers were jealous so they destroyed the farm and disappeared.";
+ mes "That kind of story...";
+ next;
+ mes "[Cherto]";
+ mes "We can't be sure that baby was born in the world but since that time, all guarana in Brasilis disappeared.";
+ next;
+ mes "[Cherto]";
+ mes "Who is the guarana kid?";
+ mes "Pedro who is famous as a greedy man?";
+ mes "Meto who can't endure about all the fruits?";
+ mes "Hovenue who is gloomy?";
+ mes "They might know~!";
+ next;
+ mes "[Cherto]";
+ mes "What about you?";
+ mes "Who is the guarana kid?";
+ mes "Will you figure out it? hohohhhhh~";
+ set brazil_gua,3;
+ changequest 2192,2193;
+ close;
+ }
+ else if (brazil_gua == 3) {
+ mes "[Cherto]";
+ mes "Can you find the guarana kid?";
+ mes "Maybe yes? Maybe no?";
+ close;
+ }
+ else if (brazil_gua == 4) {
+ mes "[Cherto]";
+ mes "Did you find guarana kid?";
+ next;
+ mes "- I tell Cherto about the kid making animal-like sounds. -";
+ next;
+ mes "[Cherto]";
+ mes "Hoooh. That's unbelivable.";
+ mes "That kid might be a guarana kid. Sure...";
+ mes "According to the story the kid can have conversations with animals.";
+ next;
+ mes "[Cherto]";
+ mes "If he can make crying sounds of animals, they might be able to converse!";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "Now, what can I do?";
+ mes "If he is the kid from the legend, is there any way to raise the guarana again?";
+ next;
+ mes "[Cherto]";
+ mes "Haha!! What'd Cherto say?";
+ mes "Cherto knows all~!!";
+ mes "Cherto's already thought";
+ mes "of the next step.";
+ next;
+ mes "[Cherto]";
+ mes "In Brasilis there is an expert Mage.";
+ mes "His name is Paje.";
+ mes "Take this note over to him.";
+ mes "He will show the solution for you and the kid.";
+ set brazil_gua,5;
+ changequest 2194,2195;
+ close;
+ }
+ else {
+ mes "[Cherto]";
+ mes "hoho tickle~tickle~~~~!!!";
+ close;
+ }
+}
+
+brasilis,203,64,3 script Strange Kid#bra 706,{
+ if (brazil_gua < 3) {
+ mes "[Strange Kid]";
+ mes "................";
+ close;
+ }
+ else if (brazil_gua == 3) {
+ mes "[Strange Kid]";
+ mes "................";
+ next;
+ switch(select("Try to talk.:Pretend to pass by.")) {
+ case 1:
+ break;
+ case 2:
+ mes "[Strange Kid]";
+ mes "................";
+ close;
+ }
+ mes "What can I say to him?";
+ next;
+ while(1) {
+ switch(select("What's your name?:How old are you?:What are you doing?:End conversation.")) {
+ case 1:
+ mes "[Strange Kid]";
+ mes "Kaaaaaaao~";
+ mes "Grrrrrrrrr - kaaan-";
+ next;
+ break;
+ case 2:
+ mes "[Strange Kid]";
+ mes "Booooowoooooo-";
+ mes "Booooowoooooo- -";
+ next;
+ break;
+ case 3:
+ mes "[Strange Kid]";
+ mes "chamber pot braeee chamber pot brae chamber pot brae -";
+ mes "Bbeeeebbeee -";
+ next;
+ break;
+ case 4:
+ mes "[Strange Kid]";
+ mes "Kaaaaaaao~";
+ mes "Grrrrrrrrr - kaaan-";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "He makes strange sound like an animals.";
+ mes "Should I ask advice from Cherto?";
+ set brazil_gua,4;
+ changequest 2193,2194;
+ close;
+ }
+ }
+ }
+ else if (brazil_gua == 4) {
+ mes "["+strcharinfo(0)+"]";
+ mes "He makes strange sounds like an animal.";
+ mes "Should I ask advice from Cherto?";
+ close;
+ }
+ else if ((brazil_gua > 4) && (brazil_gua < 9)) {
+ mes "[Strange Kid]";
+ mes "Ah...? ah.....?";
+ close;
+ }
+ else if (brazil_gua == 9) {
+ mes "[Strange Kid]";
+ mes "ah... ahah.....";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "I don't have a story but there are lots of friends waiting outside.";
+ next;
+ mes "- You give the feather, fresh meat and branch of grapes to the kid -";
+ next;
+ mes "[Strange Kid]";
+ mes "Ah.............";
+ next;
+ mes "[Strange Kid]";
+ mes "Un, uhh....";
+ mes "mooo... mommy.....";
+ next;
+ mes "[Strange Kid]";
+ mes "Ah..........";
+ mes "bird....";
+ mes "mon, mon, mon...key......";
+ mes "boo, booow...........";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "Dog?!";
+ mes "kkk yes. Lots of friends want to meet you.";
+ mes "Don't be lonely anymore and be happy with your friends.";
+ next;
+ mes "[Strange Kid]";
+ mes "ah....he...hehe....";
+ next;
+ mes "- He starts to smile lightly and laughs. -";
+ next;
+ mes "[Strange Kid]";
+ mes "Ye......yes.......";
+ mes "tha... than......thank......yo.........you.";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "Alright such a cute smile!";
+ mes "Be a happy kid as always.";
+ next;
+ mes "[Strange Kid]";
+ mes "Uh......";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "what?";
+ next;
+ mes "[Strange Kid]";
+ mes "hey..........";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "Do you want to say anything?";
+ next;
+ mes "- You get closer and pretend to take caution. -";
+ next;
+ emotion e_kis;
+ mes "(kiss~)";
+ next;
+ mes "- The kid laughs again lightly then puts something in your hand. -";
+ next;
+ mes "- It's a fresh berry that's colored red and hard. -";
+ next;
+ mes "[Strange Kid]";
+ mes "ga...ra..........na...";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "Oops, guarana berry?";
+ mes "Ah! Thank you very much!";
+ emotion e_kis2,1;
+ emotion e_heh;
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "If I have this, I can make a guarana candy.";
+ mes "I better find that Candy Maker!";
+ set brazil_gua,10;
+ changequest 2199,2200;
+ getitem 6237,1; //Guarana_Fruit
+ close;
+ }
+ else if (brazil_gua == 10) {
+ if (!countitem(6237)) {
+ mes "[Strange Kid]";
+ mes "He.........";
+ getitem 6237,1; //Guarana_Fruit
+ close;
+ }
+ }
+ else {
+ mes "- The kid is smiling. -";
+ close;
+ }
+ end;
+}
+
+brasilis,56,224,7 script Mage Paje#bra 704,{
+ if (brazil_gua < 5) {
+ mes "[Mage Paje]";
+ mes "Abracadabra~";
+ set .@cspr_bra,rand(1,3);
+ if (.@cspr_bra == 1) {
+ specialeffect EF_POISONHIT,AREA,"Poring#bra";
+ setnpcdisplay "Poring#bra",876;
+ }
+ else if (.@cspr_bra == 2) {
+ specialeffect EF_POISONHIT,AREA,"Poring#bra";
+ setnpcdisplay "Poring#bra",800;
+ }
+ else {
+ specialeffect EF_POISONHIT,AREA,"Poring#bra";
+ setnpcdisplay "Poring#bra",909;
+ }
+ close;
+ }
+ else if (brazil_gua == 5) {
+ mes "[Mage Paje]";
+ mes "Abracadabra~";
+ set .@cspr_bra,rand(1,3);
+ if (.@cspr_bra == 1) {
+ specialeffect EF_POISONHIT,AREA,"Poring#bra";
+ setnpcdisplay "Poring#bra",876;
+ }
+ else if (.@cspr_bra == 2) {
+ specialeffect EF_POISONHIT,AREA,"Poring#bra";
+ setnpcdisplay "Poring#bra",800;
+ }
+ else {
+ specialeffect EF_POISONHIT,AREA,"Poring#bra";
+ setnpcdisplay "Poring#bra",909;
+ }
+ next;
+ mes "[Mage Paje]";
+ mes "Ohoooh~!";
+ mes "I have a guest.";
+ mes "Good to see you.";
+ mes "I am the Mage Paje.";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "Hello. Mr. Cherto told me to find you.";
+ next;
+ mes "[Mage Paje]";
+ mes "Um.. Mr. Cherto? What's happened?";
+ mes "Have you come here to ask about lots of weird rumors?";
+ next;
+ mes "- You give the note to Paje-";
+ next;
+ mes "[Mage Paje]";
+ mes "Ohoooh~";
+ mes "Hmm gosh.. that's what happened.";
+ next;
+ mes "[Mage Paje]";
+ mes "I can't help you directly.";
+ mes "But I will give you simple magic so you can figure it out by yourself.";
+ next;
+ select("What kind of magic?");
+ mes "[Mage Paje]";
+ mes "It's a magic that will make you appear as an animal to other animals. Pretty cool huh?";
+ next;
+ mes "[Mage Paje]";
+ mes "Ok~ I will give you the magic.";
+ mes "Most animals are really sensitive so they might be aware of it. Find a Toucan in the field that's oblivious to the spell. You'll know when you talk to it.";
+ next;
+ mes "[Mage Paje]";
+ mes "Good luck~!";
+ set brazil_gua,6;
+ changequest 2195,2196;
+ specialeffect2 EF_ASSUMPTIO;
+ close;
+ }
+ else {
+ mes "[Mage Paje]";
+ mes "Abrakatabra~";
+ set .@cspr_bra,rand(1,3);
+ if (.@cspr_bra == 1) {
+ specialeffect EF_POISONHIT,AREA,"Poring#bra";
+ setnpcdisplay "Poring#bra",876;
+ }
+ else if (.@cspr_bra == 2) {
+ specialeffect EF_POISONHIT,AREA,"Poring#bra";
+ setnpcdisplay "Poring#bra",800;
+ }
+ else {
+ specialeffect EF_POISONHIT,AREA,"Poring#bra";
+ setnpcdisplay "Poring#bra",909;
+ }
+ close;
+ }
+ end;
+}
+
+brasilis,59,226,3 script Poring#bra 909,{
+ end;
+}
+
+bra_fild01,75,83,5 script Toucan#bra 2073,2,2,{
+OnTouch:
+ if (brazil_gua == 6) {
+ mes "[Toucan]";
+ mes "Baaeecc!";
+ mes "I've never seen you before.";
+ mes "Baaeec!";
+ next;
+ mes "[Toucan]";
+ mes "It's the middle of the new and old continent... I know I've never seen you before but you seem familiar, like a woman dancing a samba. ";
+ next;
+ select("What are you talking about?");
+ mes "[Toucan]";
+ mes "I can feel some similar power like guarana kid. bbaaaeeeccc!";
+ next;
+ mes "[Toucan]";
+ mes "That kid has had a really lonely time, baaecc! Perhaps you are a friend of him? Baaeec!!";
+ next;
+ select("Not yet... but I want to be a friend.");
+ mes "[Toucan]";
+ mes "The kid who received care from guarana woman is also a friend of animals. Bbaaeecc!";
+ next;
+ mes "[Toucan]";
+ mes "I'd like to give the symbol of a toucan representative for the kid. Bbaaeecc!";
+ next;
+ mes "[Toucan]";
+ mes "If you want to relieve his loneliness, can you help me?";
+ next;
+ select("Absolutely!");
+ mes "[Toucan]";
+ mes "It's my feather.";
+ mes "Send it to the kid.";
+ mes "We will keep our promise of friendship between guarana kid and Toucan forever. Bbaaeecc!";
+ next;
+ mes "- You take a feather from Toucan. - ";
+ next;
+ mes "[Toucan]";
+ mes "There have to be others around here like me.";
+ mes "Why don't you find a jaguar Bbaaeecc!";
+ next;
+ mes "[Toucan]";
+ mes "I will give a blessing from Toucan to you.";
+ next;
+ mes "[Toucan]";
+ mes "Fly fly far away. bbaaaeeeccckkk--!";
+ set brazil_gua,7;
+ changequest 2196,2197;
+ specialeffect2 EF_SEISMICWEAPON;
+ close2;
+ warp "bra_fild01",68,146;
+ end;
+ }
+ else {
+ mes "[Toucan]";
+ mes "Bbbaaeec~! Baaeec~!";
+ close;
+ }
+ end;
+}
+
+bra_fild01,34,184,5 script Jaguar#bra 2072,2,2,{
+OnTouch_:
+ if (brazil_gua == 7) {
+ mes "[Jaguar]";
+ mes "Hhooww..hhooww.....";
+ next;
+ mes "[Jaguar]";
+ mes "Smelling! This smell is from a human!";
+ mes "Somewhere, a human!";
+ mes "I got it. You are!!!";
+ specialeffect EF_HIT1,AREA,"Jaguar#bra";
+ emotion e_omg,1;
+ next;
+ mes "[Jaguar]";
+ mes "Don't be afraid human.";
+ mes "I don't have enough power to hunt humans, just waiting time to end my lifetime in this jungle.";
+ next;
+ mes "[Jaguar]";
+ mes "Anyway you can talk with me, are you a guarana kid?";
+ next;
+ select("Yes? N...o......actually....");
+ mes "[Jaguar]";
+ mes "The son of guarana woman became our friend also.";
+ mes "They treated all life preciously.";
+ mes "I hope you are same the as her.";
+ next;
+ mes "[Jaguar]";
+ mes "Bird's chirpings informed me.";
+ mes "The son of guarana woman has a diseased heart.";
+ mes "Her brothers made him lonely, don't you think?";
+ next;
+ mes "[Jaguar]";
+ mes "Here is fresh meat that I hunted just a few days ago.";
+ mes "Take it and give it to the poor kid.";
+ next;
+ mes "[Jaguar]";
+ mes "I can give this tiny thing to you so, don't forget it.";
+ mes "The jungle will welcome you whenever!";
+ next;
+ mes "- You get fresh meat from Jaguar. -";
+ next;
+ mes "[Jaguar]";
+ mes "Monkey, who's always meddling with others, wants to meet you.";
+ next;
+ mes "[Jaguar]";
+ mes "I will give you a Jaguar's high blessing.";
+ mes "Go to monkey by flowing through the wind like a bee.";
+ mes "Let's meet again my friend!";
+ set brazil_gua,8;
+ changequest 2197,2198;
+ close2;
+ //ConsumeSpecialItem Speed_Up_Potion
+ sc_start SC_SpeedUp1,5000,0;
+ end;
+ }
+ else {
+ mes "[Jaguar]";
+ mes "krrrrrr....";
+ close;
+ }
+ end;
+}
+
+bra_fild01,245,53,3 script #Monkeybra 1057,{
+ end;
+}
+
+bra_fild01,245,52,3 script Monkey#bra 111,{
+ if (brazil_gua == 8) {
+ mes "[Monkey]";
+ mes "What is it??!!";
+ mes "We don't tolerate humans? Get out~!!";
+ next;
+ mes "[Monkey]";
+ mes "Nono... wait.... that scent!!";
+ mes "I can smell Jaguar from you, who are you?";
+ mes "Gosh, maybe there's no jaguar without fur and weird shape!";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "........................";
+ mes "Are you saying that I look like an animal?!?!";
+ next;
+ mes "[Monkey]";
+ mes "Uh? Aren't you a jaguar?";
+ next;
+ mes "[Monkey]";
+ mes "Ahhha. Jaguar send you to me, right?? kkkikkki";
+ mes "But you don't look like guarana kid.";
+ next;
+ select("I've come here to help him.");
+ mes "[Monkey]";
+ mes "I heard guarana kid became lonely, is he?";
+ mes "We are experts in acrobatic acts, does kid like it?? kkkickkksk!";
+ next;
+ mes "[Monkey]";
+ mes "Give this branch of grapes to guarana kid.";
+ mes "We will make him have fun during the whole night whenever he comes to us!! kkkickkksk!";
+ next;
+ mes "- You get a bunch of grapes from Monkey. -";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "Good~ Now it's time to go back to the kid~!!";
+ set brazil_gua,9;
+ changequest 2198,2199;
+ close;
+ }
+ else {
+ mes "[Monkey]";
+ mes "kkkickkksk!";
+ close;
+ }
+}
+
+// Water Lily Quest, Original file: brazil_tre.sc
+//============================================================
+brasilis,203,286,3 script Botanist Karmen#bra 893,{
+ if (brazil_regia == 0) {
+ mes "[Karmen]";
+ mes "Brasilis' climate is special.";
+ mes "This climate offers special cases in botany classes different from any other regions of the world.";
+ next;
+ mes "[Karmen]";
+ mes "The plants here have robust frames and are clear and colorful.";
+ mes "Here the plants are really huge and we can feel their presence.";
+ next;
+ mes "[Karmen]";
+ mes "One of them, a Water Lily, is a really gorgeous and unique plant.";
+ mes "This flower is quite sensitive so it doesn't bloom everywhere.";
+ next;
+ switch(select("Interesting.:End conversation.")) {
+ case 1:
+ break;
+ case 2:
+ mes "[Karmen]";
+ mes "I guess you aren't interested in botany.";
+ close;
+ }
+ mes "[Karmen]";
+ mes "It doesn't appear easily and it is a mysterious flower even to the natives, so the Brasilis people believe that a person will get great luck if someone finds it.";
+ next;
+ mes "[Karmen]";
+ mes "As a botanist, I have been hanging around here to find the lucky flower but as I expected, it hasn't shown itself yet.";
+ next;
+ mes "[Karmen]";
+ mes "I believe that with enough perseverence, this flower will show me it's beautiful brilliance.";
+ next;
+ mes "[Karmen]";
+ mes "Ah, if you are interested more in the Water Lily story, find someone named Marta.";
+ mes "She is wise and knows lots of stories here in Brasilis.";
+ set brazil_regia,1;
+ setquest 2201;
+ close;
+ }
+ else if (brazil_regia == 1) {
+ mes "[Karmen]";
+ mes "Ah, if you are interested more in the Water Lily story, find someone named Marta.";
+ mes "She is wise and knows lots of stories here in Brasilis.";
+ close;
+ }
+ else if (brazil_regia == 9) {
+ mes "- You show a lotus flower to Karmen and talk about the story so far. -";
+ next;
+ mes "[Karmen]";
+ mes "Wow!! You had a really good experience.";
+ mes "So~~~ the water lily lives in the depths of brasilis, right?";
+ mes "I wil try to find it again by myself, I won't give up!!";
+ next;
+ mes "[Karmen]";
+ mes "I am so grateful that I met you.";
+ mes "The water lily must truly be a lucky flower. hahaha";
+ set brazil_regia,10;
+ completequest 2207;
+ getexp 500000,100000;
+ close;
+ }
+ else {
+ mes "[Karmen]";
+ mes "This climate offers special cases in botany classes different from any other regions of the world.";
+ next;
+ mes "[Karmen]";
+ mes "The plants here have robust frames and are clear and colorful.";
+ mes "Here the plants are really huge and we can feel their presence.";
+ next;
+ mes "[Karmen]";
+ mes "It's a botanist's dream.";
+ close;
+ }
+}
+
+bra_in01,142,27,5 script Marta#bra 474,{
+ if (brazil_regia == 1) {
+ mes "[Brasilis Boy]";
+ mes "Grandma! That person has a weird smell.";
+ next;
+ mes "[Marta]";
+ mes "This person isn't from here.";
+ mes "Say hello to our guest.";
+ next;
+ mes "[Brasilis Boy]";
+ mes "heee~ hi!!";
+ mes "I am Kaka!!";
+ mes "Whats your name?";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "I am "+strcharinfo(0)+".";
+ next;
+ mes "[Brasilis Boy]";
+ mes "The outsider has a weird name!";
+ mes "Thas ok! If we keep talking we'll be friends! Cheer up!";
+ next;
+ mes "[Marta]";
+ mes "Hehe...";
+ mes "So, why have you come here stranger~?";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "I heard you knows lots of stories, is that true?";
+ next;
+ mes "[Kaka]";
+ mes "Wooo! how you know my grandma knows lots of stories, amazing~?";
+ mes "Grandma is really wise and kind so, I heard lotsa things.";
+ next;
+ mes "[Marta]";
+ mes "Hehe. Kaka always listens to many stories every night, he really likes my stories.";
+ mes "Kaka always makes me happy because he asks so many curious things. That is pure happiness.";
+ next;
+ mes "[Marta]";
+ mes "Ok, Kaka why don't you invite our guest today to our small meeting?";
+ next;
+ mes "[Kaka]";
+ mes "Ok grandma~!!";
+ next;
+ mes "[Marta]";
+ mes "Hey~ do you have special story that you want to listen to?";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "About the mysterious water lily?";
+ next;
+ mes "[Marta]";
+ mes "Water lily....";
+ mes "It's from a long long time ago.";
+ next;
+ mes "[Marta]";
+ mes "Before Brasilis was established.";
+ mes "A tribe that lived with the giant waterfall and jungle as friends spent their whole time with nature.";
+ next;
+ mes "[Marta]";
+ mes "One of tribe chiefs had a pretty daughter called 'Naia'.";
+ next;
+ mes "[Marta]";
+ mes "Naia liked listening to stories like Kaka so, her mom told her stories every night about nature and gods.";
+ next;
+ mes "[Kaka]";
+ mes "Woooa, she's just like me!";
+ mes "Maybe she would be pretty... hehe.";
+ next;
+ mes "[Marta]";
+ mes "According to her mother...";
+ mes "If the moon in the sky loves some woman in the earth, he turns her into a star so that they can stay together forever.";
+ next;
+ mes "[Marta]";
+ mes "After Naia heard this story, she went to her dad to ask if it was true or not.";
+ next;
+ mes "[Kaka]";
+ mes "So, what did he say?";
+ next;
+ mes "[Marta]";
+ mes "^3131FF'My dear, Naia the moon is one of the bravest men. But he can no longer have a bride. So you can't become a star... Sorry~.^000000";
+ next;
+ mes "[Kaka]";
+ mes "Did Naia wants to be the bride of the man?";
+ next;
+ mes "[Marta]";
+ mes "Yes Kaka, imagine the moon how beautiful and mysterious, that's just ideal for girls.";
+ next;
+ mes "[Kaka]";
+ mes "But the moon doesn't meet a human as his wife anymore? What was going on with Naia?";
+ next;
+ mes "[Marta]";
+ mes "Naia was really a nice girl.";
+ next;
+ mes "[Marta]";
+ mes "Although her parents tried to prevent her, she still went to the forest to meet the moon every night.";
+ mes "Sadly, even with all of her effort, the moon didn't show any reaction to her.";
+ next;
+ mes "[Marta]";
+ mes "One day she also went to the top of the mountain to be closer to him. She decided to take a rest for a while around the lake.";
+ next;
+ mes "[Marta]";
+ mes "That's when.. Naia saw it.";
+ mes "It was the moon he was shining beautifully over the waving lake lightly.";
+ next;
+ mes "[Kaka]";
+ mes "I know, it's just the moon reflecting on the water. Right?!";
+ next;
+ mes "[Marta]";
+ mes "Yes, but to her, the image made her fall into the lake without hesitating and drowned.";
+ next;
+ mes "[Kaka]";
+ mes "Oh no.";
+ next;
+ mes "[Marta]";
+ mes "The moon was also watching her from the sky.";
+ mes "He felt sad and pitied her. So he decided to turn her into a beautiful flower to thank her for her love.";
+ next;
+ mes "[Marta]";
+ mes "That is the story of the mysterious flower people called the Brasilis Water Flower.";
+ mes "This Naia flower appears as light white during daytime but in the night turns into red due to it's love connection to the moon.";
+ next;
+ mes "[Kaka]";
+ mes "How sad but beautiful!";
+ next;
+ mes "[Marta]";
+ mes "How about you stranger?";
+ mes "Did you enjoy this story?";
+ mes "If you want to listen to another story, just come to me.";
+ mes "If you don't mind playing with my grandson a ~ little. hoohoo.";
+ set brazil_regia,2;
+ close;
+ }
+ else if (brazil_regia > 1) {
+ mes "[Kaka]";
+ mes "My grandma is really a bit tired doing some tribe stuff!";
+ mes "Could you come another day?";
+ close;
+ }
+ else {
+ mes "[Marta]";
+ mes "You are not from around here.";
+ mes "I can sense a strange earth smell.";
+ next;
+ mes "[Marta]";
+ mes "But your eyes shine with strength.";
+ mes "Indeed you are spreading out spirit and will from your whole body.";
+ next;
+ mes "[Marta]";
+ mes "If you work at it you will be a great person someday.";
+ close;
+ }
+}
+
+bra_in01,145,27,3 script Brasilis Boy#bra 472,{
+ if (brazil_regia == 1) {
+ mes "[Brasilis Boy]";
+ mes "Grandma! That person has a weird smell.";
+ next;
+ mes "[Marta]";
+ mes "This person isn't from here.";
+ mes "Say hello to our guest.";
+ next;
+ mes "[Brasilis Boy]";
+ mes "heee~ hi!!";
+ mes "I am Kaka!!";
+ mes "Whats your name?";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "I am "+strcharinfo(0)+".";
+ next;
+ mes "[Brasilis Boy]";
+ mes "The outsider has a weird name!";
+ mes "Thas ok! If we keep talking we'll be friends! Cheer up!";
+ next;
+ mes "[Marta]";
+ mes "Hehe...";
+ mes "So, why have you come here stranger~?";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "I heard you knows lots of stories, is that true?";
+ next;
+ mes "[Kaka]";
+ mes "Wooo! how you know my grandma knows lots of stories, amazing~?";
+ mes "Grandma is really wise and kind so, I heard lotsa things.";
+ next;
+ mes "[Marta]";
+ mes "Hehe. Kaka always listens to many stories every night, he really likes my stories.";
+ mes "Kaka always makes me happy because he asks so many curious things. That is pure happiness.";
+ next;
+ mes "[Marta]";
+ mes "Ok, Kaka why don't you invite our guest today to our small meeting?";
+ next;
+ mes "[Kaka]";
+ mes "Ok grandma~!!";
+ next;
+ mes "[Marta]";
+ mes "Hey~ do you have special story that you want to listen to?";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "About the mysterious water lily?";
+ next;
+ mes "[Marta]";
+ mes "Water lily....";
+ mes "It's from a long long time ago.";
+ next;
+ mes "[Marta]";
+ mes "Before Brasilis was established.";
+ mes "A tribe that lived with the giant waterfall and jungle as friends spent their whole time with nature.";
+ next;
+ mes "[Marta]";
+ mes "One of tribe chiefs had a pretty daughter called 'Naia'.";
+ next;
+ mes "[Marta]";
+ mes "Naia liked listening to stories like Kaka so, her mom told her stories every night about nature and gods.";
+ next;
+ mes "[Kaka]";
+ mes "Woooa, she's just like me!";
+ mes "Maybe she would be pretty... hehe.";
+ next;
+ mes "[Marta]";
+ mes "According to her mother...";
+ mes "If the moon in the sky loves some woman in the earth, he turns her into a star so that they can stay together forever.";
+ next;
+ mes "[Marta]";
+ mes "After Naia heard this story, she went to her dad to ask if it was true or not.";
+ next;
+ mes "[Kaka]";
+ mes "So, what did he say?";
+ next;
+ mes "[Marta]";
+ mes "^3131FF'My dear, Naia the moon is one of the bravest men. But he can no longer have a bride. So you can't become a star... Sorry~.^000000";
+ next;
+ mes "[Kaka]";
+ mes "Did Naia wants to be the bride of the man?";
+ next;
+ mes "[Marta]";
+ mes "Yes Kaka, imagine the moon how beautiful and mysterious, that's just ideal for girls.";
+ next;
+ mes "[Kaka]";
+ mes "But the moon doesn't meet a human as his wife anymore? What was going on with Naia?";
+ next;
+ mes "[Marta]";
+ mes "Naia was really a nice girl.";
+ next;
+ mes "[Marta]";
+ mes "Although her parents tried to prevent her, she still went to the forest to meet the moon every night.";
+ mes "Sadly, even with all of her effort, the moon didn't show any reaction to her.";
+ next;
+ mes "[Marta]";
+ mes "One day she also went to the top of the mountain to be closer to him. She decided to take a rest for a while around the lake.";
+ next;
+ mes "[Marta]";
+ mes "That's when.. Naia saw it.";
+ mes "It was the moon he was shining beautifully over the waving lake lightly.";
+ next;
+ mes "[Kaka]";
+ mes "I know, it's just the moon reflecting on the water. Right?!";
+ next;
+ mes "[Marta]";
+ mes "Yes, but to her, the image made her fall into the lake without hesitating and drowned.";
+ next;
+ mes "[Kaka]";
+ mes "Oh no.";
+ next;
+ mes "[Marta]";
+ mes "The moon was also watching her from the sky.";
+ mes "He felt sad and pitied her. So he decided to turn her into a beautiful flower to thank her for her love.";
+ next;
+ mes "[Marta]";
+ mes "That is the story of the mysterious flower people called the Brasilis Water Flower.";
+ mes "This Naia flower appears as light white during daytime but in the night turns into red due to it's love connection to the moon.";
+ next;
+ mes "[Kaka]";
+ mes "How sad but beautiful!";
+ next;
+ mes "[Marta]";
+ mes "How about you stranger?";
+ mes "Did you enjoy this story?";
+ mes "If you want to listen to another story, just come to me.";
+ mes "If you don't mind playing with my grandson a ~ little. hoohoo.";
+ set brazil_regia,2;
+ close;
+ }
+ else if (brazil_regia > 1) {
+ mes "[Kaka]";
+ mes "My grandma is really a bit tired doing some tribe stuff!";
+ mes "Could you come another day?";
+ close;
+ }
+ else {
+ mes "[Marta]";
+ mes "You are not from around here.";
+ mes "I can sense a strange earth smell.";
+ next;
+ mes "[Marta]";
+ mes "But your eyes shine with strength.";
+ mes "Indeed you are spreading out spirit and will from your whole body.";
+ next;
+ mes "[Marta]";
+ mes "If you work at it you will be a great person someday.";
+ close;
+ }
+}
+
+brasilis,270,145,5 script Brasilis Girl#bra 473,5,5,{
+ if (!checkweight(1201,1)) {
+ mes "- wait a second!! -";
+ mes "- you have too many items -";
+ mes "- so you can't get any more items. -";
+ mes "- make your body lighter -";
+ mes "- then try again. -";
+ close;
+ }
+ if (brazil_regia == 2) {
+ mes "[Distant Sound]";
+ mes "Jasira!!!";
+ mes "Where are you going again?!!";
+ mes "come back~, please!!";
+ next;
+ mes "[Brasilis Girl]";
+ mes "Mom, I have to go out!!";
+ next;
+ mes "[Distant Sound]";
+ mes "No way~!! You shouldn't!!";
+ next;
+ mes "[Brasilis Girl]";
+ mes "Gosh.. today also failed.";
+ next;
+ mes "[Brasilis Girl]";
+ mes "......";
+ mes "What's up? Why are you looking at me?";
+ mes "I don't want to be a showgirl!! Get out!!";
+ next;
+ switch(select("Nothing, sorry.:What's wrong?")) {
+ case 1:
+ mes "[Brasilis Girl]";
+ mes "I am so sad!!!";
+ close;
+ case 2:
+ break;
+ }
+ mes "[Brasilis Girl]";
+ mes "It's not your business.";
+ mes "You are just an outsider!";
+ next;
+ switch(select("How rude!:Just trying to help.")) {
+ case 1:
+ mes "[Brasilis Girl]";
+ mes "What's it matter to you that I'm rude??!!";
+ close;
+ case 2:
+ break;
+ }
+ mes "["+strcharinfo(0)+"]";
+ mes "I know that I'm just passing by but I might be able to help you. What do you think?";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "This kind of meeting could be more than just a coincidence.";
+ next;
+ mes "[Brasilis Girl]";
+ mes "......................";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "Hmm can you tell me your name?";
+ next;
+ mes "[Brasilis Girl]";
+ mes "ja...";
+ mes "Jasira.";
+ mes "My name is Jasira.";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "Nice name~.";
+ mes "Jasira what's going on?";
+ next;
+ mes "[Jasira]";
+ mes ".............";
+ next;
+ mes "[Jasira]";
+ mes "I have to meet 'Jasi' but I can't go out....";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "who is Jasi?";
+ mes "Your.... lover?";
+ next;
+ emotion e_omg;
+ mes "[Jasira]";
+ mes "l...o...v...e...lover??!!";
+ mes "No way~";
+ next;
+ mes "[Jasira]";
+ mes "If he is my lover, it would be great... but...";
+ next;
+ mes "[Jasira]";
+ mes "Jasi is......";
+ mes "the great moon.";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "The moon?";
+ mes "Maybe... are you talking about the moon from the story?";
+ next;
+ mes "[Jasira]";
+ mes "Yeah!";
+ mes "Dear Jasi is from the moon from the sky!";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "Why are you thinking like that?";
+ next;
+ mes "[Jasira]";
+ mes "Cuz' Jasi is really gorgeous and the most important thing is he is taking care of the water lily in Brasilis.";
+ next;
+ emotion e_omg,1;
+ mes "["+strcharinfo(0)+"]";
+ mes "Brasilis water lily??!!";
+ mes "Isn't it the uniqe flower?";
+ next;
+ mes "[Jasira]";
+ mes "Right. It's a really mysterious flower and difficult to find.";
+ mes "But around Jasi there are lots of water lilies.";
+ mes "That's why I believe Jasi is the moon.";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "Where is Jasi?";
+ next;
+ mes "[Jasira]";
+ mes "He is deep inside the Jungle.";
+ mes "As you can see I am so weak so, I've been staying home. But once, I was strong enough to leave this village.";
+ next;
+ mes "[Jasira]";
+ mes "I just wandered the jungle and fell down somewhere and that's where I saw him.";
+ mes "He was so nice. He helped heal me and guided me back home.";
+ mes "That was really really great time.";
+ next;
+ mes "[Jasira]";
+ mes "Since I came back home, my parents punished me.";
+ mes "I can understand why they are worrying but i missed Jasi a lot!";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "Why don't you meet him after recovering your strength?";
+ next;
+ mes "[Jasira]";
+ mes ".................";
+ mes "I wanna see him right now...";
+ next;
+ switch(select("Help Jasira.:Ignore her.")) {
+ case 1:
+ break;
+ case 2:
+ mes "["+strcharinfo(0)+"]";
+ mes "Sorry I can't help you. Cheer up!";
+ next;
+ mes "[Jasira]";
+ mes "Crying........";
+ close;
+ }
+ mes "["+strcharinfo(0)+"]";
+ mes "Jasira I came here to find the Brasilis water lily.";
+ mes "Don't you think fate has brought us together?";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "If you tell me how to find Jasi, I can help you.";
+ next;
+ mes "[Jasira]";
+ mes "Really? But I don't know exactly how to get there. I was just wandering around when I met him.";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "Can't you remember anything?";
+ mes "If you know something you've gotta tell me.";
+ next;
+ mes "[Jasira]";
+ mes "Let's see... I was wandering around a waterfall then fell down into the water then I was sucked into somewhere.";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "Good, that's better than nothing! I will look for a similar place.";
+ next;
+ mes "[Jasira]";
+ mes "I gave you your information, so can you do me a favor?";
+ mes "It's really simple...";
+ next;
+ mes "[Jasira]";
+ mes "I'd like to give a delicious fruit.";
+ mes "The place where Jas seemed cozy but I didn't see any food around... So if he sees a yummy fruit he will be happy!";
+ next;
+ mes "[Jasira]";
+ mes "Give him 10 Banana and tell him that I really miss him.";
+ mes "Sorry for ignoring you before. Please, only you can help me!";
+ set brazil_regia,3;
+ changequest 2201,2202;
+ close;
+ }
+ else if ((brazil_regia == 3) || (brazil_regia == 4)) {
+ mes "[Jasira]";
+ mes "If you meet Jasi, give him 10 Bananas.";
+ mes "Let's see... I was wandering around a waterfall then fell down into the water then I was sucked into somewhere.";
+ next;
+ mes "[Jasira]";
+ mes "If you can't find the way, go up to the waterfall and ask the kids in Brasilis village.";
+ mes "I heard one of the children went to a strange place before. He might've gone to the same place as me!";
+ close;
+ }
+ else if (brazil_regia == 5) {
+ mes "[Jasira]";
+ mes "Did you meet Jasi?";
+ mes "Did you talk about me?";
+ mes "You didn't? Uh? Stupid! Gosh~!";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "Hey girl~ you've got a short temper.";
+ mes "I did see him and I talked about you!";
+ next;
+ mes "[Jasira]";
+ mes "Did you?";
+ mes "What did he say?";
+ mes "Does he remember me?";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "That you have a really good heart~";
+ mes "I told him that you will try to meet him when your condition gets better.";
+ next;
+ mes "[Jasira]";
+ mes "Yeahhhhh!!";
+ mes "Thank you! You are more reliable than I thought you would be.";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "Anyway, I'm looking for a fruit that's brown and has a hard shell.";
+ mes "It has juice inside and can be used as a cup to drink out of.";
+ next;
+ mes "[Jasira]";
+ mes "Duh! You mean a coconut right?!";
+ mes "They're everywhere here in Brasilis.";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "Thanks Jasira!";
+ set brazil_regia,6;
+ changequest 2204,2205;
+ close;
+ }
+ else if ((brazil_regia == 6) || (brazil_regia == 7)) {
+ mes "[Jasira]";
+ mes "I should take care of my strength by myself!";
+ mes "I can't just lie in my bed forever. Don't you agree?";
+ close;
+ }
+ else if (brazil_regia == 8) {
+ mes "[Jasira]";
+ mes "Uh? Why have you come back?";
+ next;
+ mes "- You tell her what Jasi told you to tell her -";
+ next;
+ mes "[Jasira]";
+ mes "Oh... really?";
+ mes "Did he say that?";
+ mes "Gosh! Gosh!!!";
+ mes "Kkkkkaaaaa - !!";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "Thanks to you, I was able to get a flower.";
+ mes "Thanks a lot!!";
+ next;
+ mes "[Jasira]";
+ mes "Wooow. It's so beautiful.";
+ next;
+ mes "[Jasira]";
+ mes "Ah... can I see it for a second?";
+ next;
+ mes "[Jasira]";
+ mes "Surprise~!!";
+ mes "I've been working on this hat while you were gone and now it's complete with the water lily flower!";
+ next;
+ mes "[Jasira]";
+ mes "I know, I know! I'm the best...";
+ delitem 7553,1; //Lotus_Flower
+ set brazil_regia,9;
+ changequest 2206,2207;
+ set .@regiahat,rand(1,3);
+ if (.@regiahat == 1)
+ getitem2 5302,1,1,0,0,4195,0,0,0; //Lotus_Flower_Hat, Leaf_Cat_Card
+ else if (.@regiahat == 2)
+ getitem2 5302,1,1,0,0,4177,0,0,0; //Lotus_Flower_Hat, Dryad_Card
+ else
+ getitem2 5302,1,1,0,0,4188,0,0,0; //Lotus_Flower_Hat, Leib_Olmai_Card
+ close;
+ }
+ else if (brazil_regia > 8) {
+ mes "[Jasira]";
+ mes "I just need to get a little bit stronger!";
+ mes "I can't just lie in bed forever. My Jasi is waiting for me~";
+ close;
+ }
+ else {
+ mes "[Distant Sound]";
+ mes "Jasira!!!";
+ mes "Where are you going again?!!";
+ mes "Come back~, please!!";
+ next;
+ mes "[Brasilis Girl]";
+ mes "Please mom~!";
+ mes "Please let me go!";
+ close;
+ }
+ end;
+
+OnTouch:
+ if (brazil_regia == 2) {
+ emotion e_an;
+ }
+ end;
+}
+
+bra_dun02,67,205,5 script Recluse#bra 475,3,3,{
+ if (brazil_regia == 3) {
+ mes "[Recluse]";
+ mes "Oh, I haven't seen another person in such a long time.";
+ next;
+ switch(select("Keep going.:Are you the moon?")) {
+ case 1:
+ mes "[Recluse]";
+ mes "You don't have specific business with me.";
+ close;
+ case 2:
+ break;
+ }
+ mes "[Recluse]";
+ mes "Moon?";
+ mes "My name is Jasi.";
+ mes "My family has worked to take care of the water lily from generation to generation.";
+ next;
+ mes "[Jasi]";
+ mes "Basically the Brasilis water lily is too shy to appear in front of people so, they only bloom in rare places. I guess they like it here, though, that's why I've been staying here for such a long time.";
+ next;
+ mes "[Jasi]";
+ mes "My family has taken care of the water lily calmly to prevent harm from people's hand or monsters.";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "Do you remember a girl named Jasi.";
+ next;
+ mes "[Jasi]";
+ mes "Ja...si..........";
+ mes "Ah!! a hurry scurry girl. ";
+ mes "Gosh.. I was in trouble due to that girl.";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "Trouble?";
+ next;
+ mes "[Jasi]";
+ mes "One day a young lady appeared with lots of scars so I helped her. Then suddenly she tried to pick up the water lily and asked me to accept her as my wife or make her into a water lily what a nutcase!";
+ next;
+ mes "[Jasi]";
+ mes "I was barely able to calm down and send her to the village.";
+ mes "My life is that water lily so I didn't want anything embarrassing to happen.";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "This is a gift from Jasira to say sorry for that time.";
+ mes "She is really sad that can't come here by herself due to private difficulties.";
+ next;
+ if (countitem(513) < 10) {
+ mes "[Jasi]";
+ mes "What are you saying?";
+ next;
+ mes "- Oh yeah, I forgot to bring 10 Bananas -";
+ close;
+ }
+ mes "[Jasi]";
+ mes "Ah! Bananas! Wow it's been a long time. She's pretty considerate isn't she?";
+ next;
+ mes "[Jasi]";
+ mes "Anyway is that all the business you have with me?";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "Umm honestly I was wondering to find water lily and met you by coincidence. Jasira told me her sad story so that's what led me here.";
+ next;
+ mes "[Jasi]";
+ mes "I got it.";
+ mes "As you can see, there are lots of Brasilis water lily around here.";
+ mes "If you make sure that you won't destroy them you can appreciate them as you wish.";
+ set brazil_regia,4;
+ changequest 2202,2203;
+ close;
+ }
+ else if (brazil_regia == 4) {
+ mes "[Jasi]";
+ mes "Did you enjoy the water lily?";
+ close;
+ }
+ else if (brazil_regia == 5) {
+ mes "[Jasi]";
+ mes "I forgot what the name of that fruit was...";
+ close;
+ }
+ else if (brazil_regia == 6) {
+ if (countitem(11515) < 5) {
+ mes "[Jasi]";
+ mes "I forgot what the name of that fruit was...";
+ close;
+ }
+ else {
+ mes "[Jasi]";
+ mes "Did you find the fruit?";
+ mes "Oh right this is....?";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "It's called a 'coconut'.";
+ next;
+ mes "[Jasi]";
+ mes "Ahah! COCONUT!!";
+ mes "Now I remember thank you very much. I can't remember the last time I had this fruit.";
+ next;
+ mes "[Jasi]";
+ mes "I guess I should keep my promise.";
+ mes "You can take one Water lily.";
+ next;
+ mes "[Jasi]";
+ mes "I hope the Brasilis water lily will understand me.";
+ mes "You better grab the flower while you have a chance~";
+ next;
+ mes "[Jasi]";
+ mes "Oh, can you tell that girl Jasira something for me?";
+ mes "Tell her that I am not the moon from the story, but I want to become the moon to shine only for her.";
+ delitem 11515,5; //Coconut
+ set brazil_regia,7;
+ changequest 2205,2206;
+ close;
+ }
+ }
+ else {
+ mes "[Jasi]";
+ mes "The flowers blooming from the Water lily today is wonderful.";
+ close;
+ }
+ end;
+
+OnTouchNPC:
+ unitwarp 0,"this",67,215;
+ end;
+}
+
+bra_dun02,71,200,3 script Water lily#bra 111,{
+ if (brazil_regia == 4) {
+ mes "An unusual Water lily is blooming here. You can't stop staring at it, knowing that few people have seen this flower bloom.";
+ next;
+ switch(select("Pick up the flower.:Keep gazing.")) {
+ case 1:
+ break;
+ case 2:
+ mes "- You can't avoid staring at it's beauty. -";
+ close;
+ }
+ mes "[Jasi]";
+ mes "Uh! What are you doing??!!";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "There is a person who really needs this flower, can I just take one of 'em?";
+ next;
+ mes "[Jasi]";
+ mes "As I said earlier, I am the guardian of this water lily.";
+ mes "I can't just stand by here and watch you pluck even a single flower from it.";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "Hey man~ I brought these delicious fruits for you... try it! They are really well matured and fresh bananas.";
+ next;
+ if (countitem(513) < 10) {
+ mes "[Jasi]";
+ mes "What are you saying?";
+ next;
+ mes "- Oh yeah, I forgot to bring 10 Bananas -";
+ close;
+ }
+ mes "[Jasi]";
+ mes "Hmm... It's been so long since I've had this fruit.";
+ next;
+ mes "[Jasi]";
+ mes "I will just try one. That's all.";
+ next;
+ mes "- munch -";
+ mes "- mumble mumble mumble -";
+ specialeffect EF_POTION7,AREA,"Recluse#bra";
+ next;
+ mes "[Jasi]";
+ mes "Uh, this taste... is!";
+ mes "I remember my mom baking these into a tasty bread!";
+ next;
+ mes "[Jasi]";
+ mes "It makes me miss my childhood.";
+ next;
+ emotion e_omg,0,"Recluse#bra";
+ mes "[Jasi]";
+ mes "Hoho!!!!";
+ mes "I've been here for as long as I can remember...";
+ mes "I don't have enough time to even do simple things like eat delicious fruit.";
+ next;
+ mes "[Jasi]";
+ mes "It was a really delicious banana.";
+ mes "But rules are rules!";
+ mes "I must do my duty.";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "Please! I just need one flower~ What can I do to convince you?";
+ next;
+ mes "[Jasi]";
+ mes "Rules are rules, what do you want from me?";
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "Didn't that banana remind you of your childhood? What can I get for you?";
+ next;
+ mes "[Jasi]";
+ mes "Now that you mention it, there is one fruit that I really miss.";
+ mes "It was my favorite when I was young but I don't remember what it was called.";
+ next;
+ mes "[Jasi]";
+ mes "It's brown and has a hard shell around it. It has juice inside and you can use it as a cup when you're done eating the fruit.";
+ mes "Do you know what it is?";
+ next;
+ mes "[Jasi]";
+ mes "If you bring 5 of those things, I will reconsider your suggestion.";
+ delitem 513,10; //Banana
+ set brazil_regia,5;
+ changequest 2203,2204;
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes "Ok so I have to bring 5 fruits with hard shells.";
+ mes "Hmm what is it?";
+ close;
+ }
+ else if (brazil_regia == 5) {
+ mes "[Jasi]";
+ mes "It was my favorite when I was young but I don't remember what it was called.";
+ next;
+ mes "[Jasi]";
+ mes "It's brown and has a hard shell around it. It has juice inside and you can use it as a cup when you're done eating the fruit.";
+ mes "Do you know what it is?";
+ close;
+ }
+ else if (brazil_regia == 7) {
+ if (!checkweight(1201,1)) {
+ mes "- wait a second!! -";
+ mes "- you have too many items -";
+ mes "- so you can't get any more items. -";
+ mes "- make your body lighter -";
+ mes "- then try again. -";
+ close;
+ }
+ mes "- You take a beautiful water lily carefully in your hands. -";
+ set brazil_regia,8;
+ getitem 7553,1; //Lotus_Flower
+ close;
+ }
+}
+
+// Dungeon Access Quest, Original file: brazil_tre.sc
+//============================================================
+brasilis,185,246,5 script Pedro#bra 62,{
+ if (brazil_ghost == 0) {
+ mes "[Pedro]";
+ mes "Wow it's really a great statue!";
+ next;
+ mes "[Mariana]";
+ mes "It is, isn't it?";
+ mes "This statue is called Verass Monument.";
+ next;
+ mes "[Mariana]";
+ mes "A long time ago there was a really brave adventurer named Verass, thanks to his dedicated exploration, Brasilis was able to develop into this great city.";
+ next;
+ mes "[Pedro]";
+ mes "Awesome!!";
+ mes "i wanna become a real man like Verass.";
+ next;
+ mes "[Mariana]";
+ mes "Pedro, you can become whatever you want.";
+ next;
+ mes "[Pedro]";
+ mes "Mariana is so smart, isn't she? hehe.";
+ next;
+ mes "[Fabio]";
+ mes "Ooooh! You love her don't you!";
+ next;
+ mes "[Daniel]";
+ mes "Wooooaaaa Pedro and Mari sitting in a tree!";
+ next;
+ mes "[Fabio]";
+ mes "Woooo k-i-s-s-i-n-g~!!!";
+ next;
+ mes "[Daniel]";
+ mes "Nya nya nya!";
+ next;
+ mes "[Fabio]";
+ mes "Hahahahaha.";
+ next;
+ mes "[Pedro]";
+ mes "Stop acting like babies!";
+ next;
+ mes "[Mariana]";
+ mes "Boys~!";
+ next;
+ mes "[Daniel]";
+ mes "Yah yah...";
+ mes "Hey guys, did you hear that something happened a few days ago?";
+ next;
+ mes "[Mariana]";
+ mes "Oh yeah~ I heard that something really scary happened.";
+ next;
+ mes "[Fabio]";
+ mes "Uh, yeah that's why Mariana got scared of going ot the bathroom for 3 days and everything was stinky. Ewwww~";
+ next;
+ mes "[Daniel]";
+ mes "Ha ha ha! Smelly Mari!";
+ next;
+ mes "[Mariana]";
+ mes "I hate you~!";
+ mes "Stop spreading rumors about me. I'm not scared of the bathroom.";
+ mes "Pedro, do you think that I stink?";
+ next;
+ mes "[Pedro]";
+ mes "Uh? Uh?";
+ mes "N......no... no way.";
+ mes "Hey guys~ be nice to her~";
+ next;
+ mes "[Fabio]";
+ mes "kkkickkkkkkkkick";
+ next;
+ mes "[Daniel]";
+ mes "kkkickkkkkkkk";
+ next;
+ switch(select("Walk by.:Ask about the gossip.")) {
+ case 1:
+ mes "[Fabio]";
+ mes "Mariana~ smells~ Nya nya~";
+ next;
+ mes "[Daniel]";
+ mes "Oh man you stink too~! Nya nya~";
+ close;
+ case 2:
+ break;
+ }
+ mes "[Fabio]";
+ mes "Haven't you heard?";
+ mes "The ghost story in the art museum.";
+ next;
+ mes "[Daniel]";
+ mes "Ooohhhh! Scary~~~!";
+ next;
+ select("Can you tell me more?");
+ mes "[Fabio]";
+ mes "A coupla days ago we went to the art museum for a picnic at school.";
+ mes "You know nothing special, just a ordinary field trip.";
+ next;
+ mes "[Fabio]";
+ mes "Museums are boring so me and some friends snuck away from the group~!";
+ next;
+ mes "[Fabio]";
+ mes "That's when we heard a scream echoing through the whole museum.";
+ next;
+ mes "[Daniel]";
+ mes "kkakkakkaaaah!!";
+ mes "kkieeeeeeh!";
+ mes "kehkeh..";
+ next;
+ mes "[Mariana]";
+ mes "I heard the scream too...";
+ mes "You boys are always making noises where you're not supposed to.";
+ next;
+ mes "[Pedro]";
+ mes "What else are we supposed to do? If we don't do it someone else will.";
+ next;
+ emotion e_an,0,"Mariana#bra";
+ mes "[Mariana]";
+ mes "Argh~ Boys are so frustrating sometimes.";
+ next;
+ select("So then what happened?");
+ mes "[Fabio]";
+ mes "Daniel and me guessed something weird was goin' on so we ran to where we thought the screams were comin' from.";
+ next;
+ mes "[Fabio]";
+ mes "They were coming from the bathroom.";
+ mes "Some kids got so scared that they started screaming too and closing their eyes. It got pretty bad.";
+ next;
+ mes "[Daniel]";
+ mes "I think you pissed or pooped your pants. It smelled freakin' gross.";
+ next;
+ mes "[Fabio]";
+ mes "Nah uh~ Your mom pissed her pants~ Nyah!";
+ next;
+ mes "[Daniel]";
+ mes "Nah uh~ You~ pissed your pants~";
+ next;
+ mes "[Fabio]";
+ mes "Anyway, so yeah, anyway that's how the rumor of the ghost in the museum started.";
+ next;
+ mes "[Daniel]";
+ mes "Liar, there's no such thing as ghosts~";
+ next;
+ select("So was it a ghost?");
+ mes "[Fabio]";
+ mes "How should I know?";
+ mes "No one could say they saw one and no one wanted to get in trouble from the teachers.";
+ next;
+ mes "[Pedro]";
+ mes "I heard if you say special magic words that the ghost will come out.";
+ next;
+ mes "[Daniel]";
+ mes "Quit butting into our conversation Pedro.";
+ next;
+ mes "[Fabio]";
+ mes "Yah, what are you talking about, Pedro?";
+ mes "So did you see the ghost?";
+ next;
+ mes "[Pedro]";
+ mes "N... no. I'm scared of ghosts.";
+ mes "But my friends said they saw one and they're not liars.";
+ next;
+ select("Did anyone tell you the magic words?");
+ mes "[Pedro]";
+ mes "I heard it in a kind of song.";
+ mes "the special magic words are...";
+ next;
+ mes "[Pedro]";
+ mes "'^3131FFMother the door won't open!^000000'";
+ mes "'^FF0000Turn the key as many times as there are colors in the rainbow.^000000'";
+ mes "";
+ mes "'^3131FFMother the water is flooding!^000000'";
+ mes "'^FF0000If the moon disappears 3 times, don't worry.^000000'";
+ mes "";
+ mes "'^3131FFMother the drought has started!^000000'";
+ mes "'^FF0000Don't worry, the waterfall will help it.^000000'";
+ mes "";
+ mes "'^3131FFMother where are my friends?^000000'";
+ mes "'^FF0000Your 7 friends are sleeping. now it's time to wake them.^000000'";
+ mes "";
+ mes "'^3131FFWhere are you mom?^000000'";
+ next;
+ mes "[Mariana]";
+ mes "Umm it seems like a riddle.";
+ next;
+ select("Wanna help me find this ghost?");
+ mes "[Pedro]";
+ mes "You're on your own pal~.";
+ next;
+ mes "[Mariana]";
+ mes "I don't like scary things!";
+ next;
+ mes "[Fabio]";
+ mes "Pfft, I can't believe you're gonna believe that story.";
+ next;
+ mes "[Daniel]";
+ mes "I'll do whatever Fabio does, as always!";
+ next;
+ mes "[Fabio]";
+ mes "Maybe you're just scared...";
+ set brazil_ghost,1;
+ setquest 2208;
+ close;
+ }
+ else if (brazil_ghost == 1) {
+ mes "[Pedro]";
+ mes "Do you wanna hear the magic words again?";
+ next;
+ mes "[Pedro]";
+ mes "'^3131FFMother the door won't open!^000000'";
+ mes "'^FF0000Turn the key as many times as there are colors in the rainbow.^000000'";
+ mes "";
+ mes "'^3131FFMother the water is flooding!^000000'";
+ mes "'^FF0000If the moon disappears 3 times, don't worry.^000000'";
+ mes "";
+ mes "'^3131FFMother the drought has started!^000000'";
+ mes "'^FF0000Don't worry, the waterfall will help it.^000000'";
+ mes "";
+ mes "'^3131FFMother where are my friends?^000000'";
+ mes "'^FF0000Your 7 friends are sleeping. now it's time to wake them.^000000'";
+ mes "";
+ mes "'^3131FFWhere are you mom?^000000'";
+ close;
+ }
+ else {
+ mes "[Pedro]";
+ mes "I wonder what I need to do to have a statue made of me?";
+ close;
+ }
+}
+
+brasilis,187,244,1 script Mariana#bra 72,{
+ if (brazil_ghost == 0) {
+ mes "[Pedro]";
+ mes "Wow it's really a great statue!";
+ next;
+ mes "[Mariana]";
+ mes "It is, isn't it?";
+ mes "This statue is called Verass Monument.";
+ next;
+ mes "[Mariana]";
+ mes "A long time ago there was a really brave adventurer named Verass, thanks to his dedicated exploration, Brasilis was able to develop into this great city.";
+ next;
+ mes "[Pedro]";
+ mes "Awesome!!";
+ mes "i wanna become a real man like Verass.";
+ next;
+ mes "[Mariana]";
+ mes "Pedro, you can become whatever you want.";
+ next;
+ mes "[Pedro]";
+ mes "Mariana is so smart, isn't she? hehe.";
+ next;
+ mes "[Fabio]";
+ mes "Ooooh! You love her don't you!";
+ next;
+ mes "[Daniel]";
+ mes "Wooooaaaa Pedro and Mari sitting in a tree!";
+ next;
+ mes "[Fabio]";
+ mes "Woooo k-i-s-s-i-n-g~!!!";
+ next;
+ mes "[Daniel]";
+ mes "Nya nya nya!";
+ next;
+ mes "[Fabio]";
+ mes "Hahahahaha.";
+ next;
+ mes "[Pedro]";
+ mes "Stop acting like babies!";
+ next;
+ mes "[Mariana]";
+ mes "Boys~!";
+ next;
+ mes "[Daniel]";
+ mes "Yah yah...";
+ mes "Hey guys, did you hear that something happened a few days ago?";
+ next;
+ mes "[Mariana]";
+ mes "Oh yeah~ I heard that something really scary happened.";
+ next;
+ mes "[Fabio]";
+ mes "Uh, yeah that's why Mariana got scared of going ot the bathroom for 3 days and everything was stinky. Ewwww~";
+ next;
+ mes "[Daniel]";
+ mes "Ha ha ha! Smelly Mari!";
+ next;
+ mes "[Mariana]";
+ mes "I hate you~!";
+ mes "Stop spreading rumors about me. I'm not scared of the bathroom.";
+ mes "Pedro, do you think that I stink?";
+ next;
+ mes "[Pedro]";
+ mes "Uh? Uh?";
+ mes "N......no... no way.";
+ mes "Hey guys~ be nice to her~";
+ next;
+ mes "[Fabio]";
+ mes "kkkickkkkkkkkick";
+ next;
+ mes "[Daniel]";
+ mes "kkkickkkkkkkk";
+ next;
+ switch(select("Walk by.:Ask about the gossip.")) {
+ case 1:
+ mes "[Fabio]";
+ mes "Mariana~ smells~ Nya nya~";
+ next;
+ mes "[Daniel]";
+ mes "Oh man you stink too~! Nya nya~";
+ close;
+ case 2:
+ break;
+ }
+ mes "[Fabio]";
+ mes "Haven't you heard?";
+ mes "The ghost story in the art museum.";
+ next;
+ mes "[Daniel]";
+ mes "Ooohhhh! Scary~~~!";
+ next;
+ select("Can you tell me more?");
+ mes "[Fabio]";
+ mes "A coupla days ago we went to the art museum for a picnic at school.";
+ mes "You know nothing special, just a ordinary field trip.";
+ next;
+ mes "[Fabio]";
+ mes "Museums are boring so me and some friends snuck away from the group~!";
+ next;
+ mes "[Fabio]";
+ mes "That's when we heard a scream echoing through the whole museum.";
+ next;
+ mes "[Daniel]";
+ mes "kkakkakkaaaah!!";
+ mes "kkieeeeeeh!";
+ mes "kehkeh..";
+ next;
+ mes "[Mariana]";
+ mes "I heard the scream too...";
+ mes "You boys are always making noises where you're not supposed to.";
+ next;
+ mes "[Pedro]";
+ mes "What else are we supposed to do? If we don't do it someone else will.";
+ next;
+ emotion e_an,0,"Mariana#bra";
+ mes "[Mariana]";
+ mes "Argh~ Boys are so frustrating sometimes.";
+ next;
+ select("So then what happened?");
+ mes "[Fabio]";
+ mes "Daniel and me guessed something weird was goin' on so we ran to where we thought the screams were comin' from.";
+ next;
+ mes "[Fabio]";
+ mes "They were coming from the bathroom.";
+ mes "Some kids got so scared that they started screaming too and closing their eyes. It got pretty bad.";
+ next;
+ mes "[Daniel]";
+ mes "I think you pissed or pooped your pants. It smelled freakin' gross.";
+ next;
+ mes "[Fabio]";
+ mes "Nah uh~ Your mom pissed her pants~ Nyah!";
+ next;
+ mes "[Daniel]";
+ mes "Nah uh~ You~ pissed your pants~";
+ next;
+ mes "[Fabio]";
+ mes "Anyway, so yeah, anyway that's how the rumor of the ghost in the museum started.";
+ next;
+ mes "[Daniel]";
+ mes "Liar, there's no such thing as ghosts~";
+ next;
+ select("So was it a ghost?");
+ mes "[Fabio]";
+ mes "How should I know?";
+ mes "No one could say they saw one and no one wanted to get in trouble from the teachers.";
+ next;
+ mes "[Pedro]";
+ mes "I heard if you say special magic words that the ghost will come out.";
+ next;
+ mes "[Daniel]";
+ mes "Quit butting into our conversation Pedro.";
+ next;
+ mes "[Fabio]";
+ mes "Yah, what are you talking about, Pedro?";
+ mes "So did you see the ghost?";
+ next;
+ mes "[Pedro]";
+ mes "N... no. I'm scared of ghosts.";
+ mes "But my friends said they saw one and they're not liars.";
+ next;
+ select("Did anyone tell you the magic words?");
+ mes "[Pedro]";
+ mes "I heard it in a kind of song.";
+ mes "the special magic words are...";
+ next;
+ mes "[Pedro]";
+ mes "'^3131FFMother the door won't open!^000000'";
+ mes "'^FF0000Turn the key as many times as there are colors in the rainbow.^000000'";
+ mes "";
+ mes "'^3131FFMother the water is flooding!^000000'";
+ mes "'^FF0000If the moon disappears 3 times, don't worry.^000000'";
+ mes "";
+ mes "'^3131FFMother the drought has started!^000000'";
+ mes "'^FF0000Don't worry, the waterfall will help it.^000000'";
+ mes "";
+ mes "'^3131FFMother where are my friends?^000000'";
+ mes "'^FF0000Your 7 friends are sleeping. now it's time to wake them.^000000'";
+ mes "";
+ mes "'^3131FFWhere are you mom?^000000'";
+ next;
+ mes "[Mariana]";
+ mes "Umm it seems like a riddle.";
+ next;
+ select("Wanna help me find this ghost?");
+ mes "[Pedro]";
+ mes "You're on your own pal~.";
+ next;
+ mes "[Mariana]";
+ mes "I don't like scary things!";
+ next;
+ mes "[Fabio]";
+ mes "Pfft, I can't believe you're gonna believe that story.";
+ next;
+ mes "[Daniel]";
+ mes "I'll do whatever Fabio does, as always!";
+ next;
+ mes "[Fabio]";
+ mes "Maybe you're just scared...";
+ set brazil_ghost,1;
+ setquest 2208;
+ close;
+ }
+ else if (brazil_ghost == 1) {
+ mes "[Mariana]";
+ mes "Can you guys stop talking about the ghosts?";
+ mes "I've already got goosebumps all over.";
+ close;
+ }
+ else {
+ mes "[Mariana]";
+ mes "Why do Fabio and Daniel always bother us?";
+ close;
+ }
+}
+
+brasilis,181,250,5 script Fabio#bra 706,{
+ if (brazil_ghost == 0) {
+ mes "[Pedro]";
+ mes "Wow it's really a great statue!";
+ next;
+ mes "[Mariana]";
+ mes "It is, isn't it?";
+ mes "This statue is called Verass Monument.";
+ next;
+ mes "[Mariana]";
+ mes "A long time ago there was a really brave adventurer named Verass, thanks to his dedicated exploration, Brasilis was able to develop into this great city.";
+ next;
+ mes "[Pedro]";
+ mes "Awesome!!";
+ mes "i wanna become a real man like Verass.";
+ next;
+ mes "[Mariana]";
+ mes "Pedro, you can become whatever you want.";
+ next;
+ mes "[Pedro]";
+ mes "Mariana is so smart, isn't she? hehe.";
+ next;
+ mes "[Fabio]";
+ mes "Ooooh! You love her don't you!";
+ next;
+ mes "[Daniel]";
+ mes "Wooooaaaa Pedro and Mari sitting in a tree!";
+ next;
+ mes "[Fabio]";
+ mes "Woooo k-i-s-s-i-n-g~!!!";
+ next;
+ mes "[Daniel]";
+ mes "Nya nya nya!";
+ next;
+ mes "[Fabio]";
+ mes "Hahahahaha.";
+ next;
+ mes "[Pedro]";
+ mes "Stop acting like babies!";
+ next;
+ mes "[Mariana]";
+ mes "Boys~!";
+ next;
+ mes "[Daniel]";
+ mes "Yah yah...";
+ mes "Hey guys, did you hear that something happened a few days ago?";
+ next;
+ mes "[Mariana]";
+ mes "Oh yeah~ I heard that something really scary happened.";
+ next;
+ mes "[Fabio]";
+ mes "Uh, yeah that's why Mariana got scared of going ot the bathroom for 3 days and everything was stinky. Ewwww~";
+ next;
+ mes "[Daniel]";
+ mes "Ha ha ha! Smelly Mari!";
+ next;
+ mes "[Mariana]";
+ mes "I hate you~!";
+ mes "Stop spreading rumors about me. I'm not scared of the bathroom.";
+ mes "Pedro, do you think that I stink?";
+ next;
+ mes "[Pedro]";
+ mes "Uh? Uh?";
+ mes "N......no... no way.";
+ mes "Hey guys~ be nice to her~";
+ next;
+ mes "[Fabio]";
+ mes "kkkickkkkkkkkick";
+ next;
+ mes "[Daniel]";
+ mes "kkkickkkkkkkk";
+ next;
+ switch(select("Walk by.:Ask about the gossip.")) {
+ case 1:
+ mes "[Fabio]";
+ mes "Mariana~ smells~ Nya nya~";
+ next;
+ mes "[Daniel]";
+ mes "Oh man you stink too~! Nya nya~";
+ close;
+ case 2:
+ break;
+ }
+ mes "[Fabio]";
+ mes "Haven't you heard?";
+ mes "The ghost story in the art museum.";
+ next;
+ mes "[Daniel]";
+ mes "Ooohhhh! Scary~~~!";
+ next;
+ select("Can you tell me more?");
+ mes "[Fabio]";
+ mes "A coupla days ago we went to the art museum for a picnic at school.";
+ mes "You know nothing special, just a ordinary field trip.";
+ next;
+ mes "[Fabio]";
+ mes "Museums are boring so me and some friends snuck away from the group~!";
+ next;
+ mes "[Fabio]";
+ mes "That's when we heard a scream echoing through the whole museum.";
+ next;
+ mes "[Daniel]";
+ mes "kkakkakkaaaah!!";
+ mes "kkieeeeeeh!";
+ mes "kehkeh..";
+ next;
+ mes "[Mariana]";
+ mes "I heard the scream too...";
+ mes "You boys are always making noises where you're not supposed to.";
+ next;
+ mes "[Pedro]";
+ mes "What else are we supposed to do? If we don't do it someone else will.";
+ next;
+ emotion e_an,0,"Mariana#bra";
+ mes "[Mariana]";
+ mes "Argh~ Boys are so frustrating sometimes.";
+ next;
+ select("So then what happened?");
+ mes "[Fabio]";
+ mes "Daniel and me guessed something weird was goin' on so we ran to where we thought the screams were comin' from.";
+ next;
+ mes "[Fabio]";
+ mes "They were coming from the bathroom.";
+ mes "Some kids got so scared that they started screaming too and closing their eyes. It got pretty bad.";
+ next;
+ mes "[Daniel]";
+ mes "I think you pissed or pooped your pants. It smelled freakin' gross.";
+ next;
+ mes "[Fabio]";
+ mes "Nah uh~ Your mom pissed her pants~ Nyah!";
+ next;
+ mes "[Daniel]";
+ mes "Nah uh~ You~ pissed your pants~";
+ next;
+ mes "[Fabio]";
+ mes "Anyway, so yeah, anyway that's how the rumor of the ghost in the museum started.";
+ next;
+ mes "[Daniel]";
+ mes "Liar, there's no such thing as ghosts~";
+ next;
+ select("So was it a ghost?");
+ mes "[Fabio]";
+ mes "How should I know?";
+ mes "No one could say they saw one and no one wanted to get in trouble from the teachers.";
+ next;
+ mes "[Pedro]";
+ mes "I heard if you say special magic words that the ghost will come out.";
+ next;
+ mes "[Daniel]";
+ mes "Quit butting into our conversation Pedro.";
+ next;
+ mes "[Fabio]";
+ mes "Yah, what are you talking about, Pedro?";
+ mes "So did you see the ghost?";
+ next;
+ mes "[Pedro]";
+ mes "N... no. I'm scared of ghosts.";
+ mes "But my friends said they saw one and they're not liars.";
+ next;
+ select("Did anyone tell you the magic words?");
+ mes "[Pedro]";
+ mes "I heard it in a kind of song.";
+ mes "the special magic words are...";
+ next;
+ mes "[Pedro]";
+ mes "'^3131FFMother the door won't open!^000000'";
+ mes "'^FF0000Turn the key as many times as there are colors in the rainbow.^000000'";
+ mes "";
+ mes "'^3131FFMother the water is flooding!^000000'";
+ mes "'^FF0000If the moon disappears 3 times, don't worry.^000000'";
+ mes "";
+ mes "'^3131FFMother the drought has started!^000000'";
+ mes "'^FF0000Don't worry, the waterfall will help it.^000000'";
+ mes "";
+ mes "'^3131FFMother where are my friends?^000000'";
+ mes "'^FF0000Your 7 friends are sleeping. now it's time to wake them.^000000'";
+ mes "";
+ mes "'^3131FFWhere are you mom?^000000'";
+ next;
+ mes "[Mariana]";
+ mes "Umm it seems like a riddle.";
+ next;
+ select("Wanna help me find this ghost?");
+ mes "[Pedro]";
+ mes "You're on your own pal~.";
+ next;
+ mes "[Mariana]";
+ mes "I don't like scary things!";
+ next;
+ mes "[Fabio]";
+ mes "Pfft, I can't believe you're gonna believe that story.";
+ next;
+ mes "[Daniel]";
+ mes "I'll do whatever Fabio does, as always!";
+ next;
+ mes "[Fabio]";
+ mes "Maybe you're just scared...";
+ set brazil_ghost,1;
+ setquest 2208;
+ close;
+ }
+ else if (brazil_ghost == 1) {
+ mes "[Fabio]";
+ mes "You still wasting your time with that ghost story?";
+ close;
+ }
+ else {
+ mes "[Fabio]";
+ mes "Mariana, wanna see something cool?";
+ next;
+ mes "[Mariana]";
+ mes "kkkkkkkaaaaaacck!! Bugs!! Get 'em away!";
+ close;
+ }
+}
+
+brasilis,180,249,5 script Daniel#bra 706,{
+ if (brazil_ghost == 0) {
+ mes "[Pedro]";
+ mes "Wow it's really a great statue!";
+ next;
+ mes "[Mariana]";
+ mes "It is, isn't it?";
+ mes "This statue is called Verass Monument.";
+ next;
+ mes "[Mariana]";
+ mes "A long time ago there was a really brave adventurer named Verass, thanks to his dedicated exploration, Brasilis was able to develop into this great city.";
+ next;
+ mes "[Pedro]";
+ mes "Awesome!!";
+ mes "i wanna become a real man like Verass.";
+ next;
+ mes "[Mariana]";
+ mes "Pedro, you can become whatever you want.";
+ next;
+ mes "[Pedro]";
+ mes "Mariana is so smart, isn't she? hehe.";
+ next;
+ mes "[Fabio]";
+ mes "Ooooh! You love her don't you!";
+ next;
+ mes "[Daniel]";
+ mes "Wooooaaaa Pedro and Mari sitting in a tree!";
+ next;
+ mes "[Fabio]";
+ mes "Woooo k-i-s-s-i-n-g~!!!";
+ next;
+ mes "[Daniel]";
+ mes "Nya nya nya!";
+ next;
+ mes "[Fabio]";
+ mes "Hahahahaha.";
+ next;
+ mes "[Pedro]";
+ mes "Stop acting like babies!";
+ next;
+ mes "[Mariana]";
+ mes "Boys~!";
+ next;
+ mes "[Daniel]";
+ mes "Yah yah...";
+ mes "Hey guys, did you hear that something happened a few days ago?";
+ next;
+ mes "[Mariana]";
+ mes "Oh yeah~ I heard that something really scary happened.";
+ next;
+ mes "[Fabio]";
+ mes "Uh, yeah that's why Mariana got scared of going ot the bathroom for 3 days and everything was stinky. Ewwww~";
+ next;
+ mes "[Daniel]";
+ mes "Ha ha ha! Smelly Mari!";
+ next;
+ mes "[Mariana]";
+ mes "I hate you~!";
+ mes "Stop spreading rumors about me. I'm not scared of the bathroom.";
+ mes "Pedro, do you think that I stink?";
+ next;
+ mes "[Pedro]";
+ mes "Uh? Uh?";
+ mes "N......no... no way.";
+ mes "Hey guys~ be nice to her~";
+ next;
+ mes "[Fabio]";
+ mes "kkkickkkkkkkkick";
+ next;
+ mes "[Daniel]";
+ mes "kkkickkkkkkkk";
+ next;
+ switch(select("Walk by.:Ask about the gossip.")) {
+ case 1:
+ mes "[Fabio]";
+ mes "Mariana~ smells~ Nya nya~";
+ next;
+ mes "[Daniel]";
+ mes "Oh man you stink too~! Nya nya~";
+ close;
+ case 2:
+ break;
+ }
+ mes "[Fabio]";
+ mes "Haven't you heard?";
+ mes "The ghost story in the art museum.";
+ next;
+ mes "[Daniel]";
+ mes "Ooohhhh! Scary~~~!";
+ next;
+ select("Can you tell me more?");
+ mes "[Fabio]";
+ mes "A coupla days ago we went to the art museum for a picnic at school.";
+ mes "You know nothing special, just a ordinary field trip.";
+ next;
+ mes "[Fabio]";
+ mes "Museums are boring so me and some friends snuck away from the group~!";
+ next;
+ mes "[Fabio]";
+ mes "That's when we heard a scream echoing through the whole museum.";
+ next;
+ mes "[Daniel]";
+ mes "kkakkakkaaaah!!";
+ mes "kkieeeeeeh!";
+ mes "kehkeh..";
+ next;
+ mes "[Mariana]";
+ mes "I heard the scream too...";
+ mes "You boys are always making noises where you're not supposed to.";
+ next;
+ mes "[Pedro]";
+ mes "What else are we supposed to do? If we don't do it someone else will.";
+ next;
+ emotion e_an,0,"Mariana#bra";
+ mes "[Mariana]";
+ mes "Argh~ Boys are so frustrating sometimes.";
+ next;
+ select("So then what happened?");
+ mes "[Fabio]";
+ mes "Daniel and me guessed something weird was goin' on so we ran to where we thought the screams were comin' from.";
+ next;
+ mes "[Fabio]";
+ mes "They were coming from the bathroom.";
+ mes "Some kids got so scared that they started screaming too and closing their eyes. It got pretty bad.";
+ next;
+ mes "[Daniel]";
+ mes "I think you pissed or pooped your pants. It smelled freakin' gross.";
+ next;
+ mes "[Fabio]";
+ mes "Nah uh~ Your mom pissed her pants~ Nyah!";
+ next;
+ mes "[Daniel]";
+ mes "Nah uh~ You~ pissed your pants~";
+ next;
+ mes "[Fabio]";
+ mes "Anyway, so yeah, anyway that's how the rumor of the ghost in the museum started.";
+ next;
+ mes "[Daniel]";
+ mes "Liar, there's no such thing as ghosts~";
+ next;
+ select("So was it a ghost?");
+ mes "[Fabio]";
+ mes "How should I know?";
+ mes "No one could say they saw one and no one wanted to get in trouble from the teachers.";
+ next;
+ mes "[Pedro]";
+ mes "I heard if you say special magic words that the ghost will come out.";
+ next;
+ mes "[Daniel]";
+ mes "Quit butting into our conversation Pedro.";
+ next;
+ mes "[Fabio]";
+ mes "Yah, what are you talking about, Pedro?";
+ mes "So did you see the ghost?";
+ next;
+ mes "[Pedro]";
+ mes "N... no. I'm scared of ghosts.";
+ mes "But my friends said they saw one and they're not liars.";
+ next;
+ select("Did anyone tell you the magic words?");
+ mes "[Pedro]";
+ mes "I heard it in a kind of song.";
+ mes "the special magic words are...";
+ next;
+ mes "[Pedro]";
+ mes "'^3131FFMother the door won't open!^000000'";
+ mes "'^FF0000Turn the key as many times as there are colors in the rainbow.^000000'";
+ mes "";
+ mes "'^3131FFMother the water is flooding!^000000'";
+ mes "'^FF0000If the moon disappears 3 times, don't worry.^000000'";
+ mes "";
+ mes "'^3131FFMother the drought has started!^000000'";
+ mes "'^FF0000Don't worry, the waterfall will help it.^000000'";
+ mes "";
+ mes "'^3131FFMother where are my friends?^000000'";
+ mes "'^FF0000Your 7 friends are sleeping. now it's time to wake them.^000000'";
+ mes "";
+ mes "'^3131FFWhere are you mom?^000000'";
+ next;
+ mes "[Mariana]";
+ mes "Umm it seems like a riddle.";
+ next;
+ select("Wanna help me find this ghost?");
+ mes "[Pedro]";
+ mes "You're on your own pal~.";
+ next;
+ mes "[Mariana]";
+ mes "I don't like scary things!";
+ next;
+ mes "[Fabio]";
+ mes "Pfft, I can't believe you're gonna believe that story.";
+ next;
+ mes "[Daniel]";
+ mes "I'll do whatever Fabio does, as always!";
+ next;
+ mes "[Fabio]";
+ mes "Maybe you're just scared...";
+ set brazil_ghost,1;
+ setquest 2208;
+ close;
+ }
+ else if (brazil_ghost == 1) {
+ mes "[Daniel]";
+ mes "Nyah nyah nyah~";
+ close;
+ }
+ else {
+ mes "[Daniel]";
+ mes "Keke Here~ I found more bugs~";
+ close;
+ }
+}
+
+bra_in01,149,184,3 script Door#bra 844,{
+ if (brazil_ghost > 0) {
+ mes "- A key is inserted in the locked door.-";
+ next;
+ switch(select("Turn the key.:Ignore it.")) {
+ case 1:
+ mes "You start saying the first line of the magic words.";
+ input .@input$;
+ next;
+ mes "["+strcharinfo(0)+"]";
+ mes ""+.@input$+"";
+ next;
+ set .@braspell$,"Mother the door won't open!";
+ set .@chkspell,compare(.@braspell$,.@input$);
+ if (!.@chkspell) {
+ mes "Seems like you said something wrong.";
+ close;
+ }
+ else {
+ if (brazil_ghost == 2) {
+ mes "[Sobbing Voice]";
+ mes "'^FF0000Turn the key as many times as there are colors in the rainbow.^000000'";
+ next;
+ switch(select("Open the door:Knock on the door.:Turn the key.:Take the key out.")) {
+ case 1:
+ mes "The door is locked.";
+ mes "So nothing happens.";
+ close;
+ case 2:
+ mes "How many times should I try to knock?";
+ input .@input,0,999;
+ next;
+ mes "You knocked on the door "+.@input+" times.";
+ next;
+ mes "But, nothing happens.";
+ close;
+ case 3:
+ mes "How many times should I turn the key?";
+ input .@input,0,999;
+ next;
+ if (.@input == 7) {
+ mes "You turn the key 7 times.";
+ next;
+ mes "Click! Click! Click!";
+ mes "Click! Click! Click!";
+ mes "Click...!";
+ next;
+ mes "[Distant Sound]";
+ mes "^FF0000kkkkhee- hihihihi!!!^000000";
+ mes "You hear water flushing.";
+ next;
+ specialeffect2 EF_VENOMDUST;
+ mes "Faint laughing can be heard off in the direction of the toilet.";
+ set brazil_ghost,3;
+ changequest 2208,60351;
+ close;
+ }
+ else {
+ mes "You turned over the key "+.@input+" times.";
+ next;
+ mes "But nothing doesn't happened.";
+ close;
+ }
+ case 4:
+ mes "How many times should I insert the key into the door?";
+ input .@input,0,999;
+ next;
+ mes "You inserted the key "+.@input+" times.";
+ next;
+ mes "But nothing happened.";
+ close;
+ }
+ }
+ else {
+ mes "Mother the door won't open!";
+ close;
+ }
+ }
+ case 2:
+ mes "You do nothing.";
+ close;
+ }
+ }
+ else {
+ mes "- A key is inserted in the locked door.-";
+ close;
+ }
+}
+
+bra_in01,144,187,3 script Toilet#bra 844,{
+ if (brazil_ghost > 0) {
+ mes "- Looks like an ordinary toilet -";
+ next;
+ if (brazil_ghost > 6) {
+ switch(select("Flush the toilet.:Doing nothing.")) {
+ case 1:
+ mes "After flushing the toilet, you suddenly feel dizzy and are suddenly swept away somewhere.";
+ specialeffect2 EF_WATERFALL_SMALL_T2_90;
+ close2;
+ warp "bra_in01",206,102;
+ end;
+ case 2:
+ mes "The water in the toilet looks gross.";
+ close;
+ }
+ }
+ switch(select("Use the toilet:Ignore.")) {
+ case 1:
+ mes "- What was the second line to that spell now? -";
+ input .@input$;
+ next;
+ set urspell,inputstr;
+ mes "["+strcharinfo(0)+"]";
+ mes ""+.@input$+"";
+ next;
+ set .@braspell$,"Mother the water is flooding!";
+ set .@chkspell,compare(.@braspell$,.@input$);
+ if (!.@chkspell) {
+ mes "Seems like you said something wrong.";
+ close;
+ }
+ else {
+ if (brazil_ghost == 3) {
+ mes "[Sobbing Voice]";
+ mes "^FF0000If the moon disappears 3 times... don't worry.....^000000";
+ next;
+ switch(select("Flush the toilet.:Close the lid.")) {
+ case 1:
+ mes "How many times should I flush?";
+ input .@input,0,999;
+ next;
+ if (.@input == 3) {
+ mes "You flush the toilet 3 times.";
+ next;
+ mes "qwaaaaaaaaa!";
+ mes "kwaaaaaaaaaa!";
+ mes "kwaaaaaaaaaaaaaaaaaaa!";
+ next;
+ mes "[Distant Sound]";
+ mes "^FF0000kkkkhee- hihihihi!!!^000000";
+ mes "Suddenly the sink sounds like water is flowing freely from it.";
+ next;
+ specialeffect2 EF_VENOMDUST;
+ mes "Faint laughing can be heard off in the direction of the faucet.";
+ set brazil_ghost,4;
+ changequest 60351,60352;
+ close;
+ }
+ else {
+ mes "You flush the toilet "+.@input+" times.";
+ next;
+ mes "But nothing happens.";
+ close;
+ }
+ case 2:
+ mes "You close the lid of the toilet.";
+ mes "Nothing seems to be happening.";
+ close;
+ }
+ }
+ else {
+ mes "Nothing happens.";
+ close;
+ }
+ }
+ case 2:
+ mes "You do nothing.";
+ close;
+ }
+ }
+ else {
+ mes "- Looks like an ordinary toilet -";
+ close;
+ }
+}
+
+bra_in01,134,189,3 script Faucet#bra 844,{
+ if (brazil_ghost > 0) {
+ mes "- It seems like an ordinary faucet -";
+ next;
+ switch(select("Examine it.:Ignore.")) {
+ case 1:
+ mes "- What was the next line to that spell now? -";
+ input .@input$;
+ next;
+ set urspell,inputstr;
+ mes "["+strcharinfo(0)+"]";
+ mes ""+.@input$+"";
+ next;
+ set .@braspell$,"Mother the drought has started!";
+ set .@chkspell,compare(.@braspell$,.@input$);
+ if (!.@chkspell) {
+ mes "Seems like you said something wrong.";
+ close;
+ }
+ else {
+ if (brazil_ghost == 4) {
+ mes "[Sobbing Voice]";
+ mes "^FF0000Don't worry... the waterfall will help it....^000000";
+ next;
+ switch(select("Tap on the faucet.:Turn on the water.")) {
+ case 1:
+ mes "How many times will you tap the faucet?";
+ input .@input,0,999;
+ next;
+ mes "You tap the faucet "+.@input+" times.";
+ next;
+ mes "But nothing happens.";
+ close;
+ case 2:
+ mes "How many times should I turn the water on?";
+ input .@input,0,999;
+ next;
+ if (.@input == 1) {
+ mes "You turn the faucet on once.";
+ next;
+ mes "swwwaaaaaaa-";
+ next;
+ mes "[Distant Sound]";
+ mes "^FF0000kkkkhee- hihihihi!!!^000000";
+ mes "You see the carpet move.";
+ next;
+ specialeffect2 EF_VENOMDUST;
+ mes "Faint laughing can be heard off in the direction of the carpet.";
+ set brazil_ghost,5;
+ changequest 60352,60353;
+ close;
+ }
+ else {
+ mes "You turn the faucet on "+.@input+" times.";
+ next;
+ mes "But nothing happens.";
+ close;
+ }
+ }
+ }
+ else {
+ mes "Nothing happens.";
+ close;
+ }
+ }
+ case 2:
+ mes "You do nothing.";
+ close;
+ }
+ }
+ else {
+ mes "- It seems like an ordinary faucet -";
+ close;
+ }
+}
+
+bra_in01,138,184,3 script Carpet#bra 844,{
+ if (brazil_ghost > 0) {
+ mes "- A carpet with an intricate pattern on it -";
+ next;
+ switch(select("Examine it.:Ignore.")) {
+ case 1:
+ mes "- What was the next line to that spell now? -";
+ input .@input$;
+ next;
+ set urspell,inputstr;
+ mes "["+strcharinfo(0)+"]";
+ mes ""+.@input$+"";
+ next;
+ set .@braspell$,"Mother where are my friends?";
+ set .@chkspell,compare(.@braspell$,.@input$);
+ if (!.@chkspell) {
+ mes "Seems like you said something wrong.";
+ close;
+ }
+ else {
+ if (brazil_ghost == 5) {
+ mes "[Sobbing Voice]";
+ mes "^FF0000your 7 friends....are...sleeping... now it...'s time ....to wake them........^000000";
+ next;
+ switch(select("Jump on the carpet.:Lie on the carpet.:Shake the carpet.")) {
+ case 1:
+ mes "How many times should I jump?";
+ input .@input,0,999;
+ next;
+ mes "You jump on the carpet "+.@input+" times.";
+ next;
+ mes "But nothing happens.";
+ close;
+ case 2:
+ mes "How many times should I lie on the carpet?";
+ input .@input,0,999;
+ next;
+ mes "You lie on the carpet "+.@input+" times.";
+ next;
+ mes "But nothing happens.";
+ close;
+ case 3:
+ mes "How many times should I shake the carpet?";
+ input .@input,0,999;
+ next;
+ if (.@input == 7) {
+ mes "You shake the carpet 7 times.";
+ next;
+ mes "- fly~ fly~ fly~ fly~ fly~ fly~ fly~ -";
+ next;
+ mes "[Distant Sound]";
+ mes "^FF0000kkkkhee- hihihihi!!!^000000";
+ next;
+ specialeffect2 EF_VENOMDUST;
+ mes "Faint laughing can be heard off in the direction of the mirror.";
+ set brazil_ghost,6;
+ changequest 60353,60354;
+ close;
+ }
+ else {
+ mes "You shake the carpet "+.@input+" times.";
+ next;
+ mes "But nothing happens.";
+ close;
+ }
+ }
+ }
+ else {
+ mes "Nothing happens.";
+ close;
+ }
+ }
+ case 2:
+ mes "You do nothing.";
+ close;
+ }
+ }
+ else {
+ mes "- A carpet with an intricate pattern on it -";
+ close;
+ }
+}
+
+bra_in01,151,180,3 script Mirror#bra 844,{
+ if (brazil_ghost > 0) {
+ mes "- You can see a clean mirror without any marks or dust -";
+ next;
+ switch(select("Examine it.:Ignore.")) {
+ case 1:
+ mes "- What was the next line to that spell now? -";
+ input .@input$;
+ next;
+ set urspell,inputstr;
+ mes "["+strcharinfo(0)+"]";
+ mes ""+.@input$+"";
+ next;
+ set .@braspell$,"Where are you mom?";
+ set .@chkspell,compare(.@braspell$,.@input$);
+ if (!.@chkspell) {
+ mes "Seems like you said something wrong.";
+ close;
+ }
+ else {
+ if (brazil_ghost == 6) {
+ mes "[Distant Sound]";
+ mes "^FF0000kihe! hit! hit! hit! hit!^000000";
+ next;
+ mes "[Distant Sound]";
+ mes "^FF0000kihe! hit! hit! hit! hit!^000000";
+ mes "^FF0000kihe! hit! hit! hit! hit!^000000";
+ next;
+ mes "[Distant Sound]";
+ mes "Behind you...";
+ enablenpc "Ghost#bra";
+ next;
+ emotion e_omg,1;
+ mes "["+strcharinfo(0)+"]";
+ mes "The stories about the ghost are true~!";
+ next;
+ mes "[Ghost]";
+ mes "^FF0000my baby....^000000";
+ next;
+ mes "[Ghost]";
+ mes "^FF0000I can't see.... my eye....^000000";
+ mes "^FF0000What's going on....?^000000";
+ next;
+ mes "- You take a deep breath and then look at the Ghost and notice it has an eye patch -";
+ next;
+ mes "[Ghost]";
+ mes "^FF0000My eyes are so tight... can you take this off?^000000";
+ next;
+ mes "You step carefully towards the ghost.";
+ next;
+ mes "His face was covered with dust making strange contortions with it's face.";
+ next;
+ mes "[Ghost]";
+ mes "^FF0000Come on help mom.....^000000";
+ next;
+ switch(select("Take the eye bandage off.:Run away~.")) {
+ case 1:
+ while(1) {
+ set .@cpudice,rand(1,6);
+ set .@pcdice,rand(1,6);
+ if (.@cpudice != .@pcdice) {
+ emotion (57+.@cpudice),0,"Ghost#bra";
+ emotion (57+.@cpudice),1;
+ break;
+ }
+ }
+ if (.@cpudice > .@pcdice) {
+ specialeffect2 EF_DEVIL;
+ mes "[Ghost]";
+ mes "^FF0000Go away!^000000";
+ set brazil_ghost,1;
+ changequest 60354,2208;
+ percentheal -50,-50;
+ close2;
+ disablenpc "Ghost#bra";
+ warp "bra_in01",12,183;
+ end;
+ }
+ else {
+ emotion e_bzz,1;
+ mes "[Ghost]";
+ mes "^FF0000Ahh!^000000";
+ mes "The Ghost disappeared into the toilet.";
+ set brazil_ghost,7;
+ changequest 60354,60355;
+ close2;
+ disablenpc "Ghost#bra";
+ warp "bra_in01",206,100;
+ end;
+ }
+ case 2:
+ mes "You run away from the ghost.";
+ close2;
+ set brazil_ghost,1;
+ changequest 60354,2208;
+ warp "bra_in01",12,183;
+ disablenpc "Ghost#bra";
+ end;
+ }
+ close;
+ }
+ else {
+ mes "Nothing happens.";
+ close;
+ }
+ }
+ case 2:
+ mes "You do nothing.";
+ close;
+ }
+ }
+ else {
+ mes "- You can see a clean mirror without any marks or dust -";
+ close;
+ }
+}
+
+bra_in01,136,180,5 script Ghost#bra 1867,{
+ end;
+
+OnInit:
+ disablenpc "Ghost#bra";
+ end;
+}
+
+bra_in01,7,181,5 script Curator#bra 477,{
+ if (BaseLevel < 40) {
+ mes "[Curator]";
+ mes "I'm sorry but this area is under construction right now.";
+ close;
+ }
+ if ((brazil_ghost > 0) && (brazil_ghost < 7)) {
+ if (countitem(11515) > 0) {
+ mes "[Curator]";
+ mes "What can I do for you?";
+ next;
+ select("I need to use the bathroom.");
+ mes "[Curator]";
+ mes "Sorry we are remodeling inside right now so, it's closed.";
+ mes "Please use the other one.";
+ next;
+ switch(select("But I forgot something inside.:Give up.")) {
+ case 1:
+ mes "[Curator]";
+ mes "That's tooooo bad.";
+ mes "But my manager ordered me to stop anyone from entering this bathroom so, I should follow his orders.";
+ next;
+ select("It's such a hot day!");
+ mes "[Curator]";
+ mes "It's always hot in Brasilis but today is ridiculously hot.";
+ mes "Maybe I need to drink some coconut juice to cool down.";
+ next;
+ mes "You give a coconut to the Curator.";
+ next;
+ mes "[Curator]";
+ mes "Oh really can I have it?";
+ mes "Thanks a lot!";
+ next;
+ mes "[Curator]";
+ mes "Pay it forward right?";
+ mes "Ok I'll let you through this one time.";
+ next;
+ mes "The curator looks around calmly then opens the door.";
+ delitem 11515,1; //Coconut
+ set brazil_ghost,2;
+ close2;
+ warp "bra_in01",138,176;
+ end;
+ case 2:
+ mes "You give up trying to enter.";
+ close;
+ }
+ }
+ else {
+ mes "[Curator]";
+ mes "What can I do for you?";
+ next;
+ select("I need to use the bathroom.");
+ mes "[Curator]";
+ mes "Sorry we are remodeling inside right now so, it's closed.";
+ mes "Please use the other one.";
+ next;
+ switch(select("But I forgot something inside.:Give up.")) {
+ case 1:
+ mes "[Curator]";
+ mes "That's tooooo bad.";
+ mes "But my manager ordered me to stop anyone from entering this bathroom so, I should follow his orders.";
+ next;
+ select("It's such a hot day!");
+ mes "[Curator]";
+ mes "It's always hot in Brasilis but today is ridiculously hot.";
+ mes "Maybe I need to drink some coconut juice to cool down.";
+ close;
+ case 2:
+ mes "You give up trying to enter.";
+ close;
+ }
+ }
+ }
+ else if (brazil_ghost > 6) {
+ mes "[Curator]";
+ mes "Hey thanks for the Coconut earlier it really helped me cool down.";
+ close;
+ }
+ else {
+ mes "[Curator]";
+ mes "Is it just me? Or is it hotter than it's ever been today!";
+ close;
+ }
+}
+
+bra_in01,12,185,0 script inbathroom#bra 45,1,1,{
+OnTouch_:
+ if (brazil_ghost > 6)
+ warp "bra_in01",138,176;
+ else {
+ mes "The entrance has been blocked.";
+ close;
+ }
+ end;
+}
+
+bra_in01,138,174,0 warp outbathroom#bra 1,1,bra_in01,12,183
+bra_in01,206,98,0 warp tobath#bra 1,1,bra_in01,138,176
+
+bra_in01,206,188,1 script Open Manhole#todunbra 844,{
+ if (brazil_ghost == 7) {
+ enablenpc "Ghost#bra_end";
+ mes "[Ghost]";
+ mes "I am a ghost who died while wandering the jungle many years ago.";
+ next;
+ mes "[Ghost]";
+ mes "I found a pipeline in the jungle and followed the voice of a man to this very spot.";
+ next;
+ mes "[Ghost]";
+ mes "That's also where I hurt one of my eyes while walking around in the dark.";
+ next;
+ mes "[Ghost]";
+ mes "I wandered these sewers for days until I found the end of this line connected to the toilet in the museum. I shouted forever begging for help but no one answered my calls.";
+ next;
+ mes "[Ghost]";
+ mes "You finally answered my call but it's already way too late. Thank you for at least checking. No one else has bothered to this day.";
+ next;
+ mes "[Ghost]";
+ mes "There are many dangerous creatures at the end of this sewer.";
+ mes "You seem brave though. I bet you wouldn't worry about the monsters there anyways.";
+ next;
+ mes "[Ghost]";
+ mes "I guess now I can finally rest in peace.";
+ mes "Thank you friend.";
+ set brazil_ghost,8;
+ //completequest 2208;
+ completequest 60355;
+ getexp 900000,0;
+ disablenpc "Ghost#bra_end";
+ close;
+ }
+ warp "bra_dun01",87,47;
+ end;
+}
+
+
+bra_dun01,87,43,1 script Pipe#bra 844,{
+ warp "bra_in01",206,185;
+ end;
+}
+
+bra_fild01,323,136,1 script Pipe#brafild 844,{
+ if (brazil_ghost > 6) {
+ mes "You see a rusty pipe. It seems to be linked to somewhere beneath the jungle.";
+ next;
+ switch(select("Examine it:Ignore.")) {
+ case 1:
+ mes "You swim through a gap in the pipe and are swept by a sudden rush of water.";
+ close2;
+ warp "bra_in01",206,182;
+ end;
+ case 2:
+ mes "It might be dangerous, I better not act rashly.";
+ close;
+ }
+ }
+ else {
+ mes "You see a rusty pipe. It seems to be linked to somewhere beneath the jungle.";
+ close;
+ }
+}
+
+bra_in01,206,190,3 script Ghost#bra_end 1867,{
+ end;
+
+OnInit:
+ disablenpc "Ghost#bra_end";
+ end;
+}
+
+// Iara, Original file: iara.sc
+//============================================================
+brasilis,315,334,5 script Shaman#nk 474,{
+ set .@iara_re,checkquest(4135,PLAYTIME);
+ if ((.@iara_re == 0) || (.@iara_re == 1)) {
+ mes "[Anori]";
+ mes "I'm still preparing.";
+ mes "I don't require your help at this time.";
+ mes "Please come back later...";
+ close;
+ }
+ else {
+ if (checkquest(4135) > 1) erasequest 4135;
+ set .@iara_q,checkquest(4133);
+ if ((.@iara_q == 0) || (.@iara_q == 1)) {
+ mes "[Anori]";
+ mes "To block Iara ";
+ mes "seducing the tribes";
+ mes "we need a purifying potion...";
+ next;
+ mes "[Anori]";
+ mes "Did you bring the materials";
+ mes "to make the purifying potion?";
+ next;
+ if ((countitem(950) > 19) && (countitem(7172) > 9) && (countitem(1054) > 2)) {
+ mes "[Anori]";
+ mes "Um... it seems to be okay.";
+ mes "I'll make you a potion which will";
+ mes "weaken Iara's power.";
+ next;
+ mes "[Anori]";
+ mes "Let's see grind this...";
+ mes "and mix in that...";
+ mes "then add some magic...";
+ next;
+ setquest 4135;
+ erasequest 4133;
+ setquest 4134;
+ completequest 4134;
+ delitem 950,20; //Heart_Of_Mermaid
+ delitem 7172,10; //Leopard_Talon
+ delitem 1054,3; //Lip_Of_Ancient_Fish
+ getitem 11517,2; //Puri_Potion
+ mes "[Anori]";
+ mes "Here, it's completed.";
+ mes "Take this.";
+ mes "It will make Iara stop";
+ mes "training at the cave";
+ mes "for a while.";
+ next;
+ mes "[Anori]";
+ mes "Please block the Iara threatening the security of the tribe.";
+ close;
+ }
+ else {
+ mes "[Anori]";
+ mes "You haven't brought enough materials yet.";
+ mes "We cannot make the purification potion with only these.";
+ close;
+ }
+ }
+ else {
+ if (BaseLevel < 40) {
+ mes "[Anori]";
+ mes "Ah... we need a strong adventurer.";
+ mes "The tribe is facing a major threat.";
+ close;
+ }
+ set .@re_q,checkquest(4134);
+ if (.@re_q == 2) {
+ mes "[Anori]";
+ mes "you are...";
+ mes "the adventurer who came for the";
+ mes "purification potion...";
+ next;
+ mes "[Anori]";
+ mes "Maybe because of the purification potion...";
+ mes "After that, the Iara stopped seducing tribesmen but the effect didn't last long.";
+ next;
+ mes "[Anori]";
+ mes "Could you get the same";
+ mes "materials as before...";
+ mes "I need your power.";
+ next;
+ switch(select("No.:Okay, I'll do it.")) {
+ case 1:
+ mes "[Anori]";
+ mes "This, ah...";
+ mes "There is no other way.";
+ close;
+ case 2:
+ mes "[Anori]";
+ mes "You are truly brave!";
+ mes "I, on behalf of the tribe,";
+ mes "offer you my thanks.";
+ next;
+ mes "[Anori]";
+ mes "Materials are the same as before.";
+ mes "If you just get^ff0000 20 Hearts of Mermaids,";
+ mes "10 Leopard Claws and";
+ mes "3 Ancient Lips^000000,";
+ mes "I will make you a potion that purifies evil spirits";
+ mes "by using a secret formula handed down to the tribe.";
+ next;
+ mes "[Anori]";
+ mes "The destiny of the tribe is up to you.";
+ mes "please get the materials quickly.";
+ mes "I will be preparing to make";
+ mes "the purification potion right here.";
+ setquest 4133;
+ close;
+ }
+ }
+ else {
+ mes "[Anori]";
+ mes "There are some people I haven't seen before around here.";
+ mes "It's a good sign...";
+ next;
+ mes "[Anori]";
+ mes "Hey you...";
+ mes "Could you listen to my stories for a moment.";
+ mes "There's an emergency in our tribe.";
+ next;
+ switch(select("No.:Okay.")) {
+ case 1:
+ mes "[Anori]";
+ mes "You are a heartless person...";
+ mes "You don't seem the helpful type.";
+ mes "Just keep on going your way.";
+ close;
+ case 2:
+ mes "[Anori]";
+ mes "Thank you, I met a kind person.";
+ mes "It's a secret of our tribe that";
+ mes "you cannot tell anyone.";
+ next;
+ break;
+ }
+ mes "[Anori]";
+ mes "Lately young men from";
+ mes "the tribe are disappearing.";
+ mes "Our entire tribe is being threatened.";
+ next;
+ mes "[Anori]";
+ mes "It is likely because of a witch called Iara.";
+ mes "She is a water nymph seducing the hearts of young tribesmen at a cave behind the waterfall.";
+ next;
+ mes "[Anori]";
+ mes "How can I stop these young tribesmen?";
+ mes "But I discovered a way to make a purification potion to reverse the effects of the Iara's spells.";
+ next;
+ mes "[Anori]";
+ mes "This potion has been handed down from many generations in our tribe.";
+ mes "This purification potion possesses the power to cleanse evil spirits.";
+ next;
+ mes "[Anori]";
+ mes "If you could get the materials";
+ mes "I will make you";
+ mes "the purification potion.";
+ mes "Could you do that for me?";
+ next;
+ switch(select("No.:Yes, I can.")) {
+ case 1:
+ mes "[Anori]";
+ mes "Hm...";
+ mes "Well, then.";
+ mes "If you change your mind you can come to me again.";
+ next;
+ mes "[Anori]";
+ mes "You shouldn't talk about";
+ mes "what you heard now to anyone";
+ mes "It's kind of embarrassing...";
+ close;
+ case 2:
+ mes "[Anori]";
+ mes "Oh! You are the savior";
+ mes "of our tribe indeed.";
+ mes "On behalf of the tribe, I offer you my thanks.";
+ next;
+ mes "[Anori]";
+ mes "Well, what we need is this.";
+ mes "It's all you can get from near here.";
+ mes "Note down well.";
+ next;
+ mes "[Anori]";
+ mes "^ff0000 20 Hearts of Mermaids";
+ mes "10 Leopard Claws";
+ mes "3 Ancient Lips^000000";
+ mes "are the only ones that are needed as the materials.";
+ next;
+ mes "[Anori]";
+ mes "When you get those, I will make you a potion that purifies evil spirits using a secret formula handed down to the tribe.";
+ setquest 4133;
+ next;
+ mes "[Anori]";
+ mes "The destiny of the tribe is up to you.";
+ mes "I hope you move quickly.";
+ mes "Even at this moment, the village men are being seduced and slipping way...";
+ close;
+ }
+ }
+ }
+ }
+}
+
+bra_dun02,157,74,5 script Iara#nk 478,2,2,{
+ if (countitem(11517) > 0) {
+ mes "[" + strcharinfo(0) + "]";
+ mes "Should I use a Purification Potion?";
+ next;
+ switch(select("Yes.:No.")) {
+ case 1:
+ specialeffect EF_MAPPILLAR;
+ mes "[Iara]";
+ mes "Ah...this light is...";
+ mes "It's like getting cleansed of evil thoughts";
+ mes "from deep within my heart.";
+ next;
+ mes "[Iara]";
+ mes "At last I can forget the curse that I placed on myself when I drowned in the water.";
+ next;
+ mes "[Iara]";
+ mes "Do you think I can be born again as a kind water nymph?";
+ next;
+ specialeffect EF_GHOST;
+ mes "[Iara]";
+ mes "Ah... Thank you for helping me recover my consciousness for a while.";
+ mes "But... I think that the curse has been with me too long.";
+ mes "Get away from me quickly.";
+ delitem 11517,1; //Puri_Potion
+ percentheal 100,100;
+ // may requitre new SCs
+ sc_start SC_INCFLEE,3600000,20;
+ sc_start SC_INCCRI,3600000,10;
+ sc_start SC_STRFOOD,1200000,3;
+ sc_start SC_DEXFOOD,1200000,3;
+ sc_start SC_AGIFOOD,1200000,3;
+ sc_start SC_VITFOOD,1200000,3;
+ sc_start SC_INTFOOD,1200000,3;
+ sc_start SC_LUKFOOD,1200000,3;
+ next;
+ mes "[Iara]";
+ mes "Ahhh~...";
+ specialeffect EF_DEVIL;
+ next;
+ mes "[Iara]";
+ mes "The curse is too strong for me to keep contained.";
+ mes "Leave now while you are safe.";
+ close;
+ case 2:
+ mes "[" + strcharinfo(0) + "]";
+ mes "(I guess I should ignore her.)";
+ close;
+ }
+ }
+ else {
+ mes "[Iara]";
+ mes "Aaaaaaaaaaaaaaaaaaaaaah.";
+ mes "Eeeeeeeeeeeeeeeeeeeh.";
+ mes "Oooooooooooooooooh.";
+ set .@get_de,rand(1,2);
+ if (.@get_de == 1)
+ sc_start Sc_Curse,60000,0;
+ else
+ sc_start Sc_Confusion,60000,0;
+ next;
+ mes "[" + strcharinfo(0) + "]";
+ mes "Ugh! What's this strange voice?";
+ close;
+ }
+ end;
+
+OnTouch:
+ if (countitem(11517) < 1) {
+ mes "[Iara]";
+ mes "Aaaaaaaaaaaaaaaaaaaaaah.";
+ mes "Eeeeeeeeeeeeeeeeeeeh.";
+ mes "Oooooooooooooooooh.";
+ set .@get_de,rand(1,2);
+ if (.@get_de == 1)
+ sc_start Sc_Curse,60000,0;
+ else
+ sc_start Sc_Confusion,60000,0;
+ next;
+ mes "[" + strcharinfo(0) + "]";
+ mes "Ugh! What's this strange voice?";
+ close;
+ }
+ end;
+}
+
+bra_fild01,188,301,5 script Native Warrior#nk 472,{
+ mes "[Native Warrior]";
+ mes "Ah...the face I would never forget even in my dreams.";
+ next;
+ mes "[Native Warrior]";
+ mes "When will she come out of the waterfall again...?";
+ next;
+ if ((checkquest(4133) >= 0) || (checkquest(4134) >= 0)) {
+ mes "[" + strcharinfo(0) + "]";
+ mes "(Wh...what's this guy?)";
+ }
+ else {
+ mes "[" + strcharinfo(0) + "]";
+ mes "(This guy will never";
+ mes "get ocer Iara's curse...)";
+ }
+ close;
+}
diff --git a/npc/quests/quests_ein.txt b/npc/quests/quests_ein.txt
index ba589a159..aa5d62139 100644
--- a/npc/quests/quests_ein.txt
+++ b/npc/quests/quests_ein.txt
@@ -3424,7 +3424,7 @@ einbroch,132,84,3 script Liotzburg#ein 853,2,2,{
close;
OnTouch:
- if ($EinPolution > 9) {
+ if ($EinPolution > 9 && !$@AlrdEinPoll) {
mes "[Liotzburg]";
mes "What's going on?!";
mes "Who's responsible?!";
@@ -3438,8 +3438,10 @@ OnTouch:
mes "fix this! I gotta hide and find";
mes "someplace safe!";
close2;
- donpcevent "Einbroch Smog Alert::OnEnable";
- hideonnpc "Liotzburg#ein";
+ if ($EinPolution > 9 && !$@AlrdEinPoll) {
+ donpcevent "Einbroch Smog Alert::OnEnable";
+ hideonnpc "Liotzburg#ein";
+ }
end;
}
else {
@@ -5896,7 +5898,7 @@ ein_in01,31,138,3 script Calla#ein 90,{
mes "[Calla]";
mes "I just heard from my mother";
mes "that she's planning to have";
- mes "tea with Clitzer! I'm sure that";
+ mes "tea with Klitzer! I'm sure that";
mes "I have you to thank for this~";
next;
mes "[Calla]";
@@ -5911,7 +5913,7 @@ ein_in01,31,138,3 script Calla#ein 90,{
mes "I feel like such a fool,";
mes "thinking it was all hopeless.";
mes "I'll be doing my best to have";
- mes "my parents accept Clitzer and";
+ mes "my parents accept Klitzer and";
mes "someday we'll be married~";
next;
mes "[Calla]";
@@ -5977,7 +5979,7 @@ ein_in01,31,138,3 script Calla#ein 90,{
if ((EIN_LOVERQ == 5) && (countitem(712) > 0)) {
mes "[Calla]";
mes "You've spoken";
- mes "with Clitzer? How";
+ mes "with Klitzer? How";
mes "is he? What did he say?";
next;
mes "[Calla]";
@@ -6002,7 +6004,7 @@ ein_in01,31,138,3 script Calla#ein 90,{
mes "Ah, " + strcharinfo(0) + "!";
mes "Such a lovely name~";
mes "I promise that I won't ever";
- mes "forget it. Oh, and if you pass by Einbech, would you thank Clitzer for the flower for me please?";
+ mes "forget it. Oh, and if you pass by Einbech, would you thank Klitzer for the flower for me please?";
next;
mes "[Calla]";
mes "A-and... And...";
@@ -6040,7 +6042,7 @@ ein_in01,31,138,3 script Calla#ein 90,{
mes "[Calla]";
mes "Would you please";
mes "take this Violin and";
- mes "try to make it to Clitzer";
+ mes "try to make it to Klitzer";
mes "this time? Thank you";
mes "for your help~";
set EIN_LOVERQ,3;
@@ -6050,7 +6052,7 @@ ein_in01,31,138,3 script Calla#ein 90,{
if ((EIN_LOVERQ == 3) || (EIN_LOVERQ == 5)) {
mes "[Calla]";
mes "Oh, please send my";
- mes "regards to Clitzer for me.";
+ mes "regards to Klitzer for me.";
mes "I wish I could comfort";
mes "him in person, but this";
mes "is the best I can do for now.";
@@ -6066,8 +6068,8 @@ ein_in01,31,138,3 script Calla#ein 90,{
mes "a prison to me...";
next;
mes "[Calla]";
- mes "Oh, you've met Clitzer?";
- mes "Isn't he so kind, such";
+ mes "Oh, you've met Klitzer?";
+ mes "Isn't he so kind, and such";
mes "a perfect gentleman?";
next;
mes "[Calla]";
@@ -6076,12 +6078,12 @@ ein_in01,31,138,3 script Calla#ein 90,{
mes "impossible. My parents think";
mes "he's not good enough for me,";
mes "but they're wrong! What am";
- mes "I going to do? Oh, Clitzer...";
+ mes "I going to do? Oh, Klitzer...";
next;
mes "[Calla]";
mes "Well, maybe I can't see";
mes "him, but would you give";
- mes "my violin to Clitzer for me?";
+ mes "my violin to Klitzer for me?";
mes "I used to play this for him";
mes "all the time...";
next;
@@ -6091,7 +6093,7 @@ ein_in01,31,138,3 script Calla#ein 90,{
mes "I'm sorry to trouble you,";
mes "but please understand";
mes "that I want to comfort my";
- mes "Clitzer in any way that";
+ mes "Klitzer in any way that";
mes "I possibly can. Thank";
mes "you so much, adventurer...";
close;
@@ -6126,9 +6128,9 @@ ein_in01,31,138,3 script Calla#ein 90,{
}
}
-ein_in01,200,101,5 script Clitzer#ein 854,{
+ein_in01,200,101,5 script Klitzer#ein 854,{
if (EIN_LOVERQ == 16) {
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "Look out, world!";
mes "I'm gonna become";
mes "worthy of Calla's love!";
@@ -6137,7 +6139,7 @@ ein_in01,200,101,5 script Clitzer#ein 854,{
close;
}
if ((EIN_LOVERQ == 15) && (countitem(7170) > 0)) {
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "Waaaah!";
mes "What should I wear?!";
mes "I can't for the life of me";
@@ -6145,7 +6147,7 @@ ein_in01,200,101,5 script Clitzer#ein 854,{
mes "um, formal? I've never worn";
mes "anything like that before!";
next;
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "Wait, " + strcharinfo(0) + ".";
mes "What's that you've got";
mes "there? I've seen something";
@@ -6155,19 +6157,19 @@ ein_in01,200,101,5 script Clitzer#ein 854,{
next;
switch(select("Give it to him.:Ignore Him.")) {
case 1:
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "I can have this?";
mes "Oh, thank you so much!";
mes "Finally, I have something";
mes "nice enough to wear to meet";
mes "Calla's mom! What a relief!";
next;
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "You've been helping me all";
mes "this time and I haven't properly expressed my gratitude. I'm sorry";
mes "if I've been too absorbed in my own problems. I may be poor, but I need to repay you somehow...";
next;
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "Wait...";
mes "Why don't you have this";
mes "ore? I don't know how";
@@ -6199,7 +6201,7 @@ ein_in01,200,101,5 script Clitzer#ein 854,{
getitem 7296,1; //Pyroxene
}
next;
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "" + strcharinfo(0) + ",";
mes "you've really opened";
mes "my eyes. From now on,";
@@ -6208,7 +6210,7 @@ ein_in01,200,101,5 script Clitzer#ein 854,{
mes "become worthy of Calla's love.";
close;
case 2:
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "But how can I get";
mes "a Tuxedo? Ooh, I hope";
mes "it doesn't cost too much";
@@ -6218,14 +6220,14 @@ ein_in01,200,101,5 script Clitzer#ein 854,{
}
}
if (EIN_LOVERQ == 15) {
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "Noooooo!";
mes "I've got to find";
mes "the perfect thing";
mes "to wear or Calla's";
mes "mother might ^FF0000hate^000000 me!";
next;
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "What am I gonna do?!";
mes "Okay, nothing too flashy";
mes "or revealing. Can't let her";
@@ -6235,15 +6237,15 @@ ein_in01,200,101,5 script Clitzer#ein 854,{
close;
}
if (EIN_LOVERQ == 14) {
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "Noooooo!";
mes "I've got to find";
mes "the perfect thing";
mes "to wear or Calla's";
mes "mother might ^FF0000hate^000000 me!";
next;
- mes "[Clitzer]";
- mes "Think, Clitzer, think!";
+ mes "[Klitzer]";
+ mes "Think, Klitzer, think!";
mes "Okay, no fun colors.";
mes "I don't want her to";
mes "think I'm not serious";
@@ -6252,20 +6254,20 @@ ein_in01,200,101,5 script Clitzer#ein 854,{
close;
}
if (EIN_LOVERQ == 13) {
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "Eh...?";
mes "What did you just say?";
mes "You did something for";
mes "the Kapellthaines?";
next;
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "What...?";
mes "Did you just say";
mes "that Calla's mother";
mes "wants me to have tea";
mes "with her? Holy moley...!";
next;
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "Okay, okay.";
mes "I-I I'll need something";
mes "nice to wear, right? Oh.";
@@ -6273,7 +6275,7 @@ ein_in01,200,101,5 script Clitzer#ein 854,{
mes "W-what should I do?";
next;
set EIN_LOVERQ,14;
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "This monkey suit";
mes "that I've got on just";
mes "won't do! Arrrgh! But I've";
@@ -6283,7 +6285,7 @@ ein_in01,200,101,5 script Clitzer#ein 854,{
close;
}
if (EIN_LOVERQ > 6) {
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "*Sigh...*";
mes "What can I do to";
mes "get Calla's parents";
@@ -6293,13 +6295,13 @@ ein_in01,200,101,5 script Clitzer#ein 854,{
close;
}
if (EIN_LOVERQ == 6) {
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "You've given her";
mes "the flower? That's";
mes "great! Thank you,";
mes "thank you so mu--";
next;
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "...Oh!";
mes "Gosh! I was thinking so";
mes "much about myself that";
@@ -6307,13 +6309,13 @@ ein_in01,200,101,5 script Clitzer#ein 854,{
mes "name! I'm sorry for being";
mes "so knuckle-headed...";
next;
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "So...";
mes "What's your name?";
next;
input .@input$;
if (.@input$ == strcharinfo(0)) {
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "" + strcharinfo(0) + "...";
mes "That's very nice. Thank you,";
mes "I'm really grateful for your help. Although I can't see Calla in";
@@ -6321,7 +6323,7 @@ ein_in01,200,101,5 script Clitzer#ein 854,{
mes "my regards if you help me.";
next;
set EIN_LOVERQ,7;
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "I feel so much";
mes "better now. Oh!";
mes "When you have the";
@@ -6331,7 +6333,7 @@ ein_in01,200,101,5 script Clitzer#ein 854,{
close;
}
else {
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "Hm...?";
mes "Oh, don't be";
mes "so nervous~";
@@ -6342,13 +6344,13 @@ ein_in01,200,101,5 script Clitzer#ein 854,{
}
}
if (EIN_LOVERQ == 5) {
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "Have you left to";
mes "see Calla for me yet?";
mes "I'm sorry if I sound";
mes "pretty demanding...";
next;
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "Anyway, please";
mes "remember to bring";
mes "Calla ^FF00001 Flower^000000 for me.";
@@ -6358,20 +6360,20 @@ ein_in01,200,101,5 script Clitzer#ein 854,{
close;
}
if ((EIN_LOVERQ == 3) && (countitem(1901) == 1)) {
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "What brings you here?";
mes "Aren't you tired of hearing";
mes "me moan and whine about";
mes "lost love? ^333333*Siiiiigh...*^000000";
next;
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "Hey, this violin...";
mes "Calla used to play";
mes "such beautiful music";
mes "on this for me. Did";
mes "she give this to you?";
next;
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "I see. Calla must have";
mes "known that I'm all broken up";
mes "right now. She's too good to";
@@ -6379,21 +6381,21 @@ ein_in01,200,101,5 script Clitzer#ein 854,{
mes "my feelings before thinking";
mes "about herself?";
next;
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "I know I'm being";
mes "shameless, but I have";
mes "a favor to ask. Adventurer,";
mes "would you please send";
mes "Calla a present for me?";
next;
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "All you need to do is";
mes "just give her ^FF00001 Flower^000000.";
mes "I don't have the zeny and";
mes "I don't think I'm welcome";
mes "at Kapellthaine Manor.";
next;
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "Here, in return, I'll";
mes "give you this health";
mes "massage. It's not a";
@@ -6426,20 +6428,20 @@ ein_in01,200,101,5 script Clitzer#ein 854,{
getexp 20000,0;
}
next;
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "Would you please bring";
mes "1 Flower to Calla for me?";
mes "I'm sorry for troubling you... ";
close;
}
if (EIN_LOVERQ == 2) {
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "^333333*Sigh*^000000";
mes "I really appreciate your";
mes "sympathy, but I'm merely";
mes "a coward and a fool.";
next;
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "Yeah...";
mes "I'm a coward for doing";
mes "nothing about my feelings";
@@ -6448,26 +6450,26 @@ ein_in01,200,101,5 script Clitzer#ein 854,{
close;
}
if (EIN_LOVERQ == 1) {
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "That faintly sweet";
mes "and pleasant scent...";
mes "It's just like the fragrance";
mes "they use in Calla's house.";
next;
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "Ah, so you visited";
mes "Calla in Einbroch?";
mes "I miss her sooo much!";
mes "Is she doing alright?";
next;
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "Calla's so beautiful.";
mes "And she's so lovely.";
mes "Every time I close my";
mes "eyes, I can still see";
mes "her lovely smile.";
next;
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "I'm sorry if I sound";
mes "silly, but I can't help";
mes "it. I know I'm acting like";
@@ -6475,7 +6477,7 @@ ein_in01,200,101,5 script Clitzer#ein 854,{
mes "give anything to see her...";
next;
set EIN_LOVERQ,2;
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "Just...";
mes "Just don't listen";
mes "to anything I say.";
@@ -6484,13 +6486,13 @@ ein_in01,200,101,5 script Clitzer#ein 854,{
mes "person. That has to be it...";
close;
}
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "Is there something";
mes "that you really want";
mes "in life, but it's just";
mes "beyond your grasp?";
next;
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "I wish I were more";
mes "like you adventurers.";
mes "People like you never";
@@ -6498,7 +6500,7 @@ ein_in01,200,101,5 script Clitzer#ein 854,{
mes "what the obstacles may be.";
mes "But I'm so helpless...";
next;
- mes "[Clitzer]";
+ mes "[Klitzer]";
mes "I can't even see";
mes "the one person that";
mes "I love. We've just so";
@@ -6585,7 +6587,7 @@ ein_in01,31,151,3 script Satra#ein 850,{
mes "honor to most commoners.";
next;
mes "[Satra]";
- mes "However, Clitzer";
+ mes "However, Klitzer";
mes "has no reason to feel so";
mes "intimidated. Tell the poor";
mes "boy that he's earned the";
@@ -6627,9 +6629,9 @@ ein_in01,31,151,3 script Satra#ein 850,{
mes "who actually gathered these?";
next;
input .@input$;
- if (.@input$ == "Clitzer") {
+ if (.@input$ == "Klitzer") {
mes "[Satra]";
- mes "Ah, Clitzer?";
+ mes "Ah, Klitzer?";
mes "I must say, that's";
mes "a very humble name.";
mes "Yet it's so familiar...";
@@ -6638,7 +6640,7 @@ ein_in01,31,151,3 script Satra#ein 850,{
mes "Ah, I recall there";
mes "was a hooligan that";
mes "has been pestering my";
- mes "daughter named Clitzer.";
+ mes "daughter named Klitzer.";
mes "Perhaps they are one";
mes "and the same. Hmm...";
next;
@@ -6661,7 +6663,7 @@ ein_in01,31,151,3 script Satra#ein 850,{
mes "For a humble peasant,";
mes "this must be like a dream";
mes "come true! And to have tea";
- mes "with Clitzer. Oh, what would";
+ mes "with Klitzer. Oh, what would";
mes "the girls say? Ah, but I did";
mes "marry that oafish Megass~";
next;
@@ -6669,7 +6671,7 @@ ein_in01,31,151,3 script Satra#ein 850,{
set EIN_LOVERQ,13;
mes "[Satra]";
mes "Anyway, when you next";
- mes "meet Clitzer, please tell";
+ mes "meet Klitzer, please tell";
mes "him to pay me a visit soon.";
mes "Oh, and remind him to dress";
mes "appropriately for this special";
@@ -7092,7 +7094,7 @@ ein_in01,191,102,5 script Kaijeta#ein 846,{
if (EIN_LOVERQ == 15) {
mes "[Kaijeta]";
mes "Thank you for helping";
- mes "my son Clitzer. Sadly, the";
+ mes "my son Klitzer. Sadly, the";
mes "little fool doesn't have any";
mes "clue when it comes to certain";
mes "things like choosing clothing.";
@@ -7109,7 +7111,7 @@ ein_in01,191,102,5 script Kaijeta#ein 846,{
if (EIN_LOVERQ == 14) {
mes "[Kaijeta]";
mes "Thank you for helping";
- mes "my son Clitzer. Sadly, the";
+ mes "my son Klitzer. Sadly, the";
mes "little fool doesn't have any";
mes "clue when it comes to certain";
mes "things like choosing clothing.";
@@ -7287,13 +7289,13 @@ einbech,176,125,3 script Ellhenje#ein 850,{
mes "that everyone here likes...";
next;
mes "[Ellhenje]";
- mes "I'm talking about Clitzer!";
+ mes "I'm talking about Klitzer!";
mes "He's almost too honest and";
mes "almost too diligent. But most";
mes "of all, he's the nicest guy~";
next;
mes "[Ellhenje]";
- mes "Clitzer was born in one of";
+ mes "Klitzer was born in one of";
mes "Einbech's poorest families,";
mes "but he's usually happy and always thinks about others. I guess that's why people like to think of him";
mes "as representing all of Einbech.";
diff --git a/npc/quests/quiz/quiz_qt.txt b/npc/quests/quiz/quiz_qt.txt
index 518191833..ab77197a5 100644
--- a/npc/quests/quiz/quiz_qt.txt
+++ b/npc/quests/quiz/quiz_qt.txt
@@ -1482,7 +1482,7 @@ if(quiz_rvl == 18) {
mes "Name of monster which drop";
mes "'Big Ribbon'?";
next;
- menu "Eclipse",sM1_6,"Dragon Fly",sM1_6,"Vocal",sM1_6,"Toad,",-;
+ menu "Eclipse",sM1_6,"Dragon Fly",sM1_6,"Vocal",sM1_6,"Toad",-;
set @score_test2, @score_test2 + 10;
@@ -1676,11 +1676,11 @@ if(quiz_rvl == 20) {
mes "For reference, number of particapants are";
next;
mes "[Kantryl]";
- mes "1st Quiz Revolution - " + quiz1 + "/200";
- mes "2nd Quiz Revolution - " + quiz2 + "/200";
- mes "3rd Quiz Revolution - " + quiz3 + "/200";
- mes "4th Quiz Revolution - " + quiz4 + "/200";
- mes "5th Quiz Revolution - " + quiz5 + "/200";
+ mes "1st Quiz Revolution - " + $quiz1 + "/200";
+ mes "2nd Quiz Revolution - " + $quiz2 + "/200";
+ mes "3rd Quiz Revolution - " + $quiz3 + "/200";
+ mes "4th Quiz Revolution - " + $quiz4 + "/200";
+ mes "5th Quiz Revolution - " + $quiz5 + "/200";
mes "keep it in your mind.";
close;
@@ -1719,15 +1719,15 @@ if(quiz_rvl == 20) {
mes "So please make right decision.";
next;
mes "[Kantryl]";
- mes "1st Quiz Revolution - " + quiz1 + "/200";
- mes "2nd Quiz Revolution - " + quiz2 + "/200";
- mes "3rd Quiz Revolution - " + quiz3 + "/200";
- mes "4th Quiz Revolution - " + quiz4 + "/200";
- mes "5th Quiz Revolution - " + quiz5 + "/200";
+ mes "1st Quiz Revolution - " + $quiz1 + "/200";
+ mes "2nd Quiz Revolution - " + $quiz2 + "/200";
+ mes "3rd Quiz Revolution - " + $quiz3 + "/200";
+ mes "4th Quiz Revolution - " + $quiz4 + "/200";
+ mes "5th Quiz Revolution - " + $quiz5 + "/200";
next;
menu "Join 1st round",-,"Join 2nd round",s2nd,"Join 3rd round",s3nd,"Join 4th round",s4nd,"Join 5th round",s5nd;
- if(quiz1 > 199){
+ if($quiz1 > 199){
mes "[Kantryl]";
mes "I'm sorry. We are all full at";
mes "1st round of quiz revolution";
@@ -1740,7 +1740,7 @@ if(quiz_rvl == 20) {
mes "I have received your application";
mes "Try hard and study hard.";
set quiz_rvl,19;
- set quiz1,quiz1 + 1;
+ set $quiz1,$quiz1 + 1;
getitem 7280,1; //Quiz_Ticket01
close;
@@ -1748,7 +1748,7 @@ if(quiz_rvl == 20) {
s2nd:
- if(quiz2 > 199){
+ if($quiz2 > 199){
mes "[Kantryl]";
mes "I'm sorry. We are all full at";
mes "2nd round of quiz revolution";
@@ -1761,14 +1761,14 @@ if(quiz_rvl == 20) {
mes "I have received your application";
mes "Try hard and study hard.";
set quiz_rvl,19;
- set quiz2,quiz2 + 1;
+ set $quiz2,$quiz2 + 1;
getitem 7281,1; //Quiz_Ticket02
close;
s3nd:
- if(quiz3 > 199){
+ if($quiz3 > 199){
mes "[Kantryl]";
mes "I'm sorry. We are all full at";
mes "3rd round of quiz revolution.";
@@ -1782,7 +1782,7 @@ if(quiz_rvl == 20) {
mes "I have received your application.";
mes "Try hard and study hard.";
set quiz_rvl,19;
- set quiz3,quiz3 + 1;
+ set $quiz3,$quiz3 + 1;
getitem 7282,1; //Quiz_Ticket03
close;
@@ -1790,7 +1790,7 @@ if(quiz_rvl == 20) {
s4nd:
- if(quiz4 > 199){
+ if($quiz4 > 199){
mes "[Kantryl]";
mes "I'm sorry. We are all full at";
mes "4th round of quiz revolution.";
@@ -1803,7 +1803,7 @@ if(quiz_rvl == 20) {
mes "I have received your application.";
mes "Try hard and study hard.";
set quiz_rvl,19;
- set quiz4,quiz4 + 1;
+ set $quiz4,$quiz4 + 1;
getitem 7283,1; //Quiz_Ticket04
close;
@@ -1811,7 +1811,7 @@ if(quiz_rvl == 20) {
s5nd:
- if(quiz5 > 199){
+ if($quiz5 > 199){
mes "[Kantryl]";
mes "I'm sorry. We are all full at";
mes "5th round of quiz revolution.";
@@ -1824,7 +1824,7 @@ if(quiz_rvl == 20) {
mes "I have received your application.";
mes "Try hard and study hard.";
set quiz_rvl,19;
- set quiz5,quiz5 + 1;
+ set $quiz5,$quiz5 + 1;
getitem 7284,1; //Quiz_Ticket05
close;
diff --git a/npc/warps/dungeons/anthell.txt b/npc/warps/dungeons/anthell.txt
index 4ac200321..9cb30b8f5 100644
--- a/npc/warps/dungeons/anthell.txt
+++ b/npc/warps/dungeons/anthell.txt
@@ -3,7 +3,7 @@
//===== By: ==================================================
//= Nana (1.0)
//===== Current Version: =====================================
-//= 1.6
+//= 1.7
//===== Compatible With: =====================================
//= Any Athena Version
//===== Description: =========================================
@@ -13,7 +13,7 @@
//= 1.4 Removed Duplicates [Silent]
//= 1.5 Updated warps for episode 12.1 [L0ne_W0lf]
//= 1.6 Renewal warp adjustments.
-//= 1.6 Fixed coordinates for pre-2010/06/09 maps (bugreport:3589)
+//= 1.7 Fixed coordinates for pre-2010/06/09 maps (bugreport:3589)
//= Moved entrance to cmd_fild08 to match mapcache [Gepard]
//============================================================
diff --git a/npc/warps/dungeons/bra_dun.txt b/npc/warps/dungeons/bra_dun.txt
index 58073b97b..0c95f3642 100644
--- a/npc/warps/dungeons/bra_dun.txt
+++ b/npc/warps/dungeons/bra_dun.txt
@@ -1,17 +1,17 @@
-//===== eAthena Script =======================================
-//= Brasilis Dungeon Warp
-//===== By: ==================================================
-//= L0ne_W0lf
-//===== Current Version: =====================================
-//= 1.0
-//===== Compatible With: =====================================
-//= Any Athena Version
-//===== Description: =========================================
-//= [Aegis Conversion]
-//= Brasilis Dungeon warp script
-//===== Additional Comments: =================================
-//= 1.0 First version.
-//============================================================
-
-bra_dun01,199,35,0 warp brad1tobrad2 1,1,bra_dun02,261,263
-bra_dun02,261,265,0 warp brad2tobrad1 1,1,bra_dun01,199,37
+//===== eAthena Script =======================================
+//= Brasilis Dungeon Warp
+//===== By: ==================================================
+//= L0ne_W0lf
+//===== Current Version: =====================================
+//= 1.0
+//===== Compatible With: =====================================
+//= Any Athena Version
+//===== Description: =========================================
+//= [Aegis Conversion]
+//= Brasilis Dungeon warp script
+//===== Additional Comments: =================================
+//= 1.0 First version.
+//============================================================
+
+bra_dun01,199,35,0 warp brad1tobrad2 1,1,bra_dun02,261,263
+bra_dun02,261,265,0 warp brad2tobrad1 1,1,bra_dun01,199,37
diff --git a/npc/warps/dungeons/juperos.txt b/npc/warps/dungeons/juperos.txt
index e2a8c10c7..5a835d577 100644
--- a/npc/warps/dungeons/juperos.txt
+++ b/npc/warps/dungeons/juperos.txt
@@ -20,7 +20,7 @@
//= 1.6a COrrected new warps [L0ne_W0lf]
//= 1.7 Removed duplicated quest warp portal [Brainstorm]
//============================================================
-
+
yuno_fild07,207,175,0 warp jupwrp01 1,1,jupe_cave,143,52
jupe_cave,148,52,0 warp jupwrp02 1,1,yuno_fild07,212,175
jupe_cave,26,52,0 warp jupwrp03 1,1,juperos_01,53,247
diff --git a/npc/warps/dungeons/prt_maze.txt b/npc/warps/dungeons/prt_maze.txt
index fc038d31a..558e8718e 100644
--- a/npc/warps/dungeons/prt_maze.txt
+++ b/npc/warps/dungeons/prt_maze.txt
@@ -227,7 +227,7 @@ prt_maze03,176,34,0 warp mazewarp5359 1,1,prt_maze03,88,56 /*To No.3-18*/
prt_maze03,176,5,0 warp mazewarp5360 1,1,prt_maze03,111,95 /*To No.3-13*/
prt_maze03,194,15,0 warp mazewarp5361 1,1,prt_maze03,8,58 /*To No.3-16*/
prt_maze03,165,22,0 warp mazewarp5362 1,1,prt_maze03,111,145 /*To No.3-8*/
-
+
//= Prontera Sewers ==============================================
prt_sewb1,135,248,0 warp prts001 2,2,prt_fild05,274,208
prt_sewb1,188,247,0 warp prts01 1,3,prt_sewb2,19,19
diff --git a/npc/warps/fields/veins_fild.txt b/npc/warps/fields/veins_fild.txt
index e64bf0546..6634bb847 100644
--- a/npc/warps/fields/veins_fild.txt
+++ b/npc/warps/fields/veins_fild.txt
@@ -9,7 +9,7 @@
//===== Description: =========================================
//= Warp Points for Veins Field
//===== Additional Comments: =================================
-//= 1.4 Rescripted to Aegis 11.2 Standards. [L0ne_W0lf
+//= 1.4 Rescripted to Aegis 11.2 Standards. [L0ne_W0lf]
//= 1.5 Renewal warp adjustments.
//============================================================
diff --git a/npc/warps/guild/guildcastles.txt b/npc/warps/guild/guildcastles.txt
index 89c9d0d61..5283340af 100644
--- a/npc/warps/guild/guildcastles.txt
+++ b/npc/warps/guild/guildcastles.txt
@@ -128,119 +128,119 @@ aldeg_cas05,166,194,0 warp aldg506-1 1,1,aldeg_cas05,13,179
aldeg_cas05,156,231,0 warp aldg507 1,1,aldeg_cas05,18,88
aldeg_cas05,14,88,0 warp aldg507-1 1,1,aldeg_cas05,156,227
-// Geffen Castles Map
-gef_fild13,112,269,0 warp gefg05 1,1,gefg_cas03,100,280
-gef_fild13,139,240,0 warp gefg06 1,1,gefg_cas03,125,250
-gef_fild13,150,54,0 warp gefg01 1,1,gefg_cas01,34,140
-gef_fild13,196,281,0 warp gefg08 1,1,gefg_cas04,24,149
-gef_fild13,210,75,0 warp gefg02 1,1,gefg_cas01,95,178
-gef_fild13,256,57,0 warp gefg09 1,1,gefg_cas05,11,134
-gef_fild13,305,83,0 warp gefg09-1 1,1,gefg_cas05,99,200
-gef_fild13,308,244,0 warp gefg03 1,1,gefg_cas02,70,143
-gef_fild13,77,284,0 warp gefg04 1,1,gefg_cas03,60,286
-gef_fild13,83,185,0 warp gefg07 1,1,gefg_cas03,89,159
+// Geffen Castles Map
+gef_fild13,112,269,0 warp gefg05 1,1,gefg_cas03,100,280
+gef_fild13,139,240,0 warp gefg06 1,1,gefg_cas03,125,250
+gef_fild13,150,54,0 warp gefg01 1,1,gefg_cas01,34,140
+gef_fild13,196,281,0 warp gefg08 1,1,gefg_cas04,24,149
+gef_fild13,210,75,0 warp gefg02 1,1,gefg_cas01,95,178
+gef_fild13,256,57,0 warp gefg09 1,1,gefg_cas05,11,134
+gef_fild13,305,83,0 warp gefg09-1 1,1,gefg_cas05,99,200
+gef_fild13,308,244,0 warp gefg03 1,1,gefg_cas02,70,143
+gef_fild13,77,284,0 warp gefg04 1,1,gefg_cas03,60,286
+gef_fild13,83,185,0 warp gefg07 1,1,gefg_cas03,89,159
//Geffen Guild Castles
-gefg_cas01,170,14,0 warp gefg106-1 1,1,gefg_cas01,50,84
-gefg_cas01,170,34,0 warp gefg105-1 1,1,gefg_cas01,30,167
-gefg_cas01,181,52,0 warp gefg107 1,1,gefg_cas01,198,160
-gefg_cas01,202,160,0 warp gefg107-1 1,1,gefg_cas01,185,52
-gefg_cas01,209,34,0 warp gefg103-1 1,1,gefg_cas01,56,170
-gefg_cas01,31,185,0 warp gefg104 1,1,gefg_cas01,33,47
-gefg_cas01,33,51,0 warp gefg104-1 1,1,gefg_cas01,35,185
-gefg_cas01,34,136,0 warp gefg01-1 1,1,gef_fild13,150,50
-gefg_cas01,34,167,0 warp gefg105 1,1,gefg_cas01,174,34
-gefg_cas01,39,196,0 warp gefg101 1,1,gefg_cas01,62,13
-gefg_cas01,54,84,0 warp gefg106 1,1,gefg_cas01,174,14
-gefg_cas01,58,185,0 warp gefg102 1,1,gefg_cas01,90,47
-gefg_cas01,59,170,0 warp gefg103 1,1,gefg_cas01,205,34
-gefg_cas01,62,9,0 warp gefg101-1 1,1,gefg_cas01,39,192
-gefg_cas01,90,51,0 warp gefg102-1 1,1,gefg_cas01,54,185
-gefg_cas01,99,178,0 warp gefg02-1 1,1,gef_fild13,214,75
-gefg_cas02,148,18,0 warp gefg205-1 1,1,gefg_cas02,35,150
-gefg_cas02,150,36,0 warp gefg208 1,1,gefg_cas02,152,186
-gefg_cas02,152,190,0 warp gefg208-1 1,1,gefg_cas02,150,41
-gefg_cas02,174,11,0 warp gefg207-1 1,1,gefg_cas02,21,13
-gefg_cas02,184,36,0 warp gefg204-1 1,1,gefg_cas02,48,155
-gefg_cas02,185,18,0 warp gefg206-1 1,1,gefg_cas02,53,136
-gefg_cas02,22,160,0 warp gefg203 1,1,gefg_cas02,34,17
-gefg_cas02,25,13,0 warp gefg207 1,1,gefg_cas02,170,11
-gefg_cas02,34,13,0 warp gefg203-1 1,1,gefg_cas02,22,156
-gefg_cas02,34,152,0 warp gefg205 1,1,gefg_cas02,153,18
-gefg_cas02,34,68,0 warp gefg202-1 1,1,gefg_cas02,50,175
-gefg_cas02,35,173,0 warp gefg201 1,1,gefg_cas02,76,42
-gefg_cas02,46,175,0 warp gefg202 1,1,gefg_cas02,34,64
-gefg_cas02,48,159,0 warp gefg204 1,1,gefg_cas02,184,41
-gefg_cas02,57,136,0 warp gefg206 1,1,gefg_cas02,180,18
-gefg_cas02,70,147,0 warp gefg03-1 1,1,gef_fild13,308,240
-gefg_cas02,80,42,0 warp gefg201-1 1,1,gefg_cas02,39,173
-gefg_cas03,103,283,0 warp gefg05-1 1,1,gef_fild13,117,273
-gefg_cas03,106,217,0 warp gefg307 1,1,gefg_cas03,131,15
-gefg_cas03,115,210,0 warp gefg308 1,1,gefg_cas03,92,215
-gefg_cas03,130,250,0 warp gefg06-1 1,1,gef_fild13,143,240
-gefg_cas03,135,15,0 warp gefg307-1 1,1,gefg_cas03,110,217
-gefg_cas03,135,92,0 warp gefg302-1 1,1,gefg_cas03,34,282
-gefg_cas03,152,92,0 warp gefg304-1 1,1,gefg_cas03,59,255
-gefg_cas03,154,16,0 warp gefg314 1,1,gefg_cas03,252,11
-gefg_cas03,17,206,0 warp gefg306-1 1,1,gefg_cas03,29,219
-gefg_cas03,212,46,0 warp gefg315 1,1,gefg_cas03,225,158
-gefg_cas03,225,154,0 warp gefg315-1 1,1,gefg_cas03,212,42
-gefg_cas03,237,74,0 warp gefg312-1 1,1,gefg_cas03,62,213
-gefg_cas03,256,11,0 warp gefg314-1 1,1,gefg_cas03,159,16
-gefg_cas03,266,47,0 warp gefg309-1 1,1,gefg_cas03,45,175
-gefg_cas03,27,215,0 warp gefg306-2 1,1,gefg_cas03,17,202
-gefg_cas03,34,286,0 warp gefg302 1,1,gefg_cas03,131,92
-gefg_cas03,38,243,0 warp gefg306 1,1,gefg_cas03,29,219
-gefg_cas03,38,259,0 warp gefg303-1 1,1,gefg_cas03,43,271
-gefg_cas03,42,175,0 warp gefg309 1,1,gefg_cas03,266,43
-gefg_cas03,43,191,0 warp gefg310-1 1,1,gefg_cas03,70,185
-gefg_cas03,47,271,0 warp gefg303 1,1,gefg_cas03,38,255
-gefg_cas03,50,248,0 warp gefg305 1,1,gefg_cas03,54,229
-gefg_cas03,58,232,0 warp gefg305-1 1,1,gefg_cas03,62,213
-gefg_cas03,63,255,0 warp gefg304 1,1,gefg_cas03,156,92
-gefg_cas03,65,215,0 warp gefg312 1,1,gefg_cas03,233,74
-gefg_cas03,66,223,0 warp gefg301 1,1,gefg_cas03,96,53
-gefg_cas03,68,290,0 warp gefg04-1 1,1,gef_fild13,74,287
-gefg_cas03,70,182,0 warp gefg310 1,1,gefg_cas03,39,191
-gefg_cas03,79,244,0 warp gefg313-1 1,1,gefg_cas03,91,250
-gefg_cas03,88,248,0 warp gefg311-1 1,1,gefg_cas03,76,242
-gefg_cas03,90,218,0 warp gefg308-1 1,1,gefg_cas03,111,210
-gefg_cas03,92,53,0 warp gefg301-1 1,1,gefg_cas03,62,223
-gefg_cas03,93,159,0 warp gefg07-1 1,1,gef_fild13,83,181
-gefg_cas03,93,209,0 warp gefg311 1,1,gefg_cas03,92,250
-gefg_cas03,95,251,0 warp gefg313 1,1,gefg_cas03,91,209
-gefg_cas04,140,168,0 warp gefg407-1 1,1,gefg_cas04,178,61
-gefg_cas04,142,33,0 warp gefg406-1 1,1,gefg_cas04,52,21
-gefg_cas04,142,55,0 warp gefg404-1 1,1,gefg_cas04,32,180
-gefg_cas04,174,36,0 warp gefg403-1 1,1,gefg_cas04,53,192
-gefg_cas04,178,57,0 warp gefg407 1,1,gefg_cas04,143,166
-gefg_cas04,18,82,0 warp gefg401-1 1,1,gefg_cas04,34,215
-gefg_cas04,18,9,0 warp gefg402-1 1,1,gefg_cas04,57,220
-gefg_cas04,24,145,0 warp gefg08-1 1,1,gef_fild13,193,278
-gefg_cas04,27,180,0 warp gefg404 1,1,gefg_cas04,142,59
-gefg_cas04,34,211,0 warp gefg401 1,1,gefg_cas04,18,78
-gefg_cas04,42,81,0 warp gefg405 1,1,gefg_cas04,42,13
-gefg_cas04,42,9,0 warp gefg405-1 1,1,gefg_cas04,42,77
-gefg_cas04,52,25,0 warp gefg406 1,1,gefg_cas04,142,37
-gefg_cas04,53,196,0 warp gefg403 1,1,gefg_cas04,170,36
-gefg_cas04,57,224,0 warp gefg402 1,1,gefg_cas04,18,13
-gefg_cas05,149,44,0 warp gefg506-1 1,1,gefg_cas05,37,20
-gefg_cas05,178,72,0 warp gefg501-1 1,1,gefg_cas05,46,165
-gefg_cas05,190,20,0 warp gefg508 1,1,gefg_cas05,194,151
-gefg_cas05,194,147,0 warp gefg508-1 1,1,gefg_cas05,190,16
-gefg_cas05,206,44,0 warp gefg507-1 1,1,gefg_cas05,93,20
-gefg_cas05,37,16,0 warp gefg506 1,1,gefg_cas05,153,44
-gefg_cas05,43,62,0 warp gefg505-1 1,1,gefg_cas05,78,138
-gefg_cas05,44,143,0 warp gefg503 1,1,gefg_cas05,70,155
-gefg_cas05,50,165,0 warp gefg501 1,1,gefg_cas05,178,68
-gefg_cas05,66,76,0 warp gefg504-1 1,1,gefg_cas05,80,155
-gefg_cas05,68,150,0 warp gefg503-1 1,1,gefg_cas05,44,147
-gefg_cas05,7,134,0 warp gefg10 1,1,gef_fild13,252,57
-gefg_cas05,74,138,0 warp gefg505 1,1,gefg_cas05,47,62
-gefg_cas05,83,152,0 warp gefg504 1,1,gefg_cas05,66,72
-gefg_cas05,87,165,0 warp gefg502 1,1,gefg_cas05,84,62
-gefg_cas05,88,62,0 warp gefg502-1 1,1,gefg_cas05,83,165
-gefg_cas05,93,16,0 warp gefg507 1,1,gefg_cas05,202,44
+gefg_cas01,170,14,0 warp gefg106-1 1,1,gefg_cas01,50,84
+gefg_cas01,170,34,0 warp gefg105-1 1,1,gefg_cas01,30,167
+gefg_cas01,181,52,0 warp gefg107 1,1,gefg_cas01,198,160
+gefg_cas01,202,160,0 warp gefg107-1 1,1,gefg_cas01,185,52
+gefg_cas01,209,34,0 warp gefg103-1 1,1,gefg_cas01,56,170
+gefg_cas01,31,185,0 warp gefg104 1,1,gefg_cas01,33,47
+gefg_cas01,33,51,0 warp gefg104-1 1,1,gefg_cas01,35,185
+gefg_cas01,34,136,0 warp gefg01-1 1,1,gef_fild13,150,50
+gefg_cas01,34,167,0 warp gefg105 1,1,gefg_cas01,174,34
+gefg_cas01,39,196,0 warp gefg101 1,1,gefg_cas01,62,13
+gefg_cas01,54,84,0 warp gefg106 1,1,gefg_cas01,174,14
+gefg_cas01,58,185,0 warp gefg102 1,1,gefg_cas01,90,47
+gefg_cas01,59,170,0 warp gefg103 1,1,gefg_cas01,205,34
+gefg_cas01,62,9,0 warp gefg101-1 1,1,gefg_cas01,39,192
+gefg_cas01,90,51,0 warp gefg102-1 1,1,gefg_cas01,54,185
+gefg_cas01,99,178,0 warp gefg02-1 1,1,gef_fild13,214,75
+gefg_cas02,148,18,0 warp gefg205-1 1,1,gefg_cas02,35,150
+gefg_cas02,150,36,0 warp gefg208 1,1,gefg_cas02,152,186
+gefg_cas02,152,190,0 warp gefg208-1 1,1,gefg_cas02,150,41
+gefg_cas02,174,11,0 warp gefg207-1 1,1,gefg_cas02,21,13
+gefg_cas02,184,36,0 warp gefg204-1 1,1,gefg_cas02,48,155
+gefg_cas02,185,18,0 warp gefg206-1 1,1,gefg_cas02,53,136
+gefg_cas02,22,160,0 warp gefg203 1,1,gefg_cas02,34,17
+gefg_cas02,25,13,0 warp gefg207 1,1,gefg_cas02,170,11
+gefg_cas02,34,13,0 warp gefg203-1 1,1,gefg_cas02,22,156
+gefg_cas02,34,152,0 warp gefg205 1,1,gefg_cas02,153,18
+gefg_cas02,34,68,0 warp gefg202-1 1,1,gefg_cas02,50,175
+gefg_cas02,35,173,0 warp gefg201 1,1,gefg_cas02,76,42
+gefg_cas02,46,175,0 warp gefg202 1,1,gefg_cas02,34,64
+gefg_cas02,48,159,0 warp gefg204 1,1,gefg_cas02,184,41
+gefg_cas02,57,136,0 warp gefg206 1,1,gefg_cas02,180,18
+gefg_cas02,70,147,0 warp gefg03-1 1,1,gef_fild13,308,240
+gefg_cas02,80,42,0 warp gefg201-1 1,1,gefg_cas02,39,173
+gefg_cas03,103,283,0 warp gefg05-1 1,1,gef_fild13,117,273
+gefg_cas03,106,217,0 warp gefg307 1,1,gefg_cas03,131,15
+gefg_cas03,115,210,0 warp gefg308 1,1,gefg_cas03,92,215
+gefg_cas03,130,250,0 warp gefg06-1 1,1,gef_fild13,143,240
+gefg_cas03,135,15,0 warp gefg307-1 1,1,gefg_cas03,110,217
+gefg_cas03,135,92,0 warp gefg302-1 1,1,gefg_cas03,34,282
+gefg_cas03,152,92,0 warp gefg304-1 1,1,gefg_cas03,59,255
+gefg_cas03,154,16,0 warp gefg314 1,1,gefg_cas03,252,11
+gefg_cas03,17,206,0 warp gefg306-1 1,1,gefg_cas03,29,219
+gefg_cas03,212,46,0 warp gefg315 1,1,gefg_cas03,225,158
+gefg_cas03,225,154,0 warp gefg315-1 1,1,gefg_cas03,212,42
+gefg_cas03,237,74,0 warp gefg312-1 1,1,gefg_cas03,62,213
+gefg_cas03,256,11,0 warp gefg314-1 1,1,gefg_cas03,159,16
+gefg_cas03,266,47,0 warp gefg309-1 1,1,gefg_cas03,45,175
+gefg_cas03,27,215,0 warp gefg306-2 1,1,gefg_cas03,17,202
+gefg_cas03,34,286,0 warp gefg302 1,1,gefg_cas03,131,92
+gefg_cas03,38,243,0 warp gefg306 1,1,gefg_cas03,29,219
+gefg_cas03,38,259,0 warp gefg303-1 1,1,gefg_cas03,43,271
+gefg_cas03,42,175,0 warp gefg309 1,1,gefg_cas03,266,43
+gefg_cas03,43,191,0 warp gefg310-1 1,1,gefg_cas03,70,185
+gefg_cas03,47,271,0 warp gefg303 1,1,gefg_cas03,38,255
+gefg_cas03,50,248,0 warp gefg305 1,1,gefg_cas03,54,229
+gefg_cas03,58,232,0 warp gefg305-1 1,1,gefg_cas03,62,213
+gefg_cas03,63,255,0 warp gefg304 1,1,gefg_cas03,156,92
+gefg_cas03,65,215,0 warp gefg312 1,1,gefg_cas03,233,74
+gefg_cas03,66,223,0 warp gefg301 1,1,gefg_cas03,96,53
+gefg_cas03,68,290,0 warp gefg04-1 1,1,gef_fild13,74,287
+gefg_cas03,70,182,0 warp gefg310 1,1,gefg_cas03,39,191
+gefg_cas03,79,244,0 warp gefg313-1 1,1,gefg_cas03,91,250
+gefg_cas03,88,248,0 warp gefg311-1 1,1,gefg_cas03,76,242
+gefg_cas03,90,218,0 warp gefg308-1 1,1,gefg_cas03,111,210
+gefg_cas03,92,53,0 warp gefg301-1 1,1,gefg_cas03,62,223
+gefg_cas03,93,159,0 warp gefg07-1 1,1,gef_fild13,83,181
+gefg_cas03,93,209,0 warp gefg311 1,1,gefg_cas03,92,250
+gefg_cas03,95,251,0 warp gefg313 1,1,gefg_cas03,91,209
+gefg_cas04,140,168,0 warp gefg407-1 1,1,gefg_cas04,178,61
+gefg_cas04,142,33,0 warp gefg406-1 1,1,gefg_cas04,52,21
+gefg_cas04,142,55,0 warp gefg404-1 1,1,gefg_cas04,32,180
+gefg_cas04,174,36,0 warp gefg403-1 1,1,gefg_cas04,53,192
+gefg_cas04,178,57,0 warp gefg407 1,1,gefg_cas04,143,166
+gefg_cas04,18,82,0 warp gefg401-1 1,1,gefg_cas04,34,215
+gefg_cas04,18,9,0 warp gefg402-1 1,1,gefg_cas04,57,220
+gefg_cas04,24,145,0 warp gefg08-1 1,1,gef_fild13,193,278
+gefg_cas04,27,180,0 warp gefg404 1,1,gefg_cas04,142,59
+gefg_cas04,34,211,0 warp gefg401 1,1,gefg_cas04,18,78
+gefg_cas04,42,81,0 warp gefg405 1,1,gefg_cas04,42,13
+gefg_cas04,42,9,0 warp gefg405-1 1,1,gefg_cas04,42,77
+gefg_cas04,52,25,0 warp gefg406 1,1,gefg_cas04,142,37
+gefg_cas04,53,196,0 warp gefg403 1,1,gefg_cas04,170,36
+gefg_cas04,57,224,0 warp gefg402 1,1,gefg_cas04,18,13
+gefg_cas05,149,44,0 warp gefg506-1 1,1,gefg_cas05,37,20
+gefg_cas05,178,72,0 warp gefg501-1 1,1,gefg_cas05,46,165
+gefg_cas05,190,20,0 warp gefg508 1,1,gefg_cas05,194,151
+gefg_cas05,194,147,0 warp gefg508-1 1,1,gefg_cas05,190,16
+gefg_cas05,206,44,0 warp gefg507-1 1,1,gefg_cas05,93,20
+gefg_cas05,37,16,0 warp gefg506 1,1,gefg_cas05,153,44
+gefg_cas05,43,62,0 warp gefg505-1 1,1,gefg_cas05,78,138
+gefg_cas05,44,143,0 warp gefg503 1,1,gefg_cas05,70,155
+gefg_cas05,50,165,0 warp gefg501 1,1,gefg_cas05,178,68
+gefg_cas05,66,76,0 warp gefg504-1 1,1,gefg_cas05,80,155
+gefg_cas05,68,150,0 warp gefg503-1 1,1,gefg_cas05,44,147
+gefg_cas05,7,134,0 warp gefg10 1,1,gef_fild13,252,57
+gefg_cas05,74,138,0 warp gefg505 1,1,gefg_cas05,47,62
+gefg_cas05,83,152,0 warp gefg504 1,1,gefg_cas05,66,72
+gefg_cas05,87,165,0 warp gefg502 1,1,gefg_cas05,84,62
+gefg_cas05,88,62,0 warp gefg502-1 1,1,gefg_cas05,83,165
+gefg_cas05,93,16,0 warp gefg507 1,1,gefg_cas05,202,44
gefg_cas05,99,204,0 warp gefg10-1 1,1,gef_fild13,305,87
//Payon Guild Castles Map Connection
@@ -469,25 +469,25 @@ nguild_alde,46,197,0 warp naldg107-1 1,1,nguild_alde,232,182
nguild_alde,171,175,0 warp naldg108 1,1,nguild_alde,35,197
nguild_alde,31,197,0 warp naldg108-1 1,1,nguild_alde,175,175
-//Novices Guild: Geffen Castles Map
+//Novices Guild: Geffen Castles Map
n_castle,183,183,0 warp ngefg01 1,1,nguild_gef,34,140
nguild_gef,34,136,0 warp ngefg01-1 1,1,n_castle,183,180
nguild_gef,99,178,0 warp ngefg02-1 1,1,n_castle,183,180
-nguild_gef,170,14,0 warp ngefg106-1 1,1,nguild_gef,50,84
-nguild_gef,170,34,0 warp ngefg105-1 1,1,nguild_gef,30,167
-nguild_gef,181,52,0 warp ngefg107 1,1,nguild_gef,198,160
-nguild_gef,202,160,0 warp ngefg107-1 1,1,nguild_gef,185,52
-nguild_gef,209,34,0 warp ngefg103-1 1,1,nguild_gef,56,170
-nguild_gef,31,185,0 warp ngefg104 1,1,nguild_gef,33,47
-nguild_gef,33,51,0 warp ngefg104-1 1,1,nguild_gef,35,185
-nguild_gef,34,167,0 warp ngefg105 1,1,nguild_gef,174,34
-nguild_gef,39,196,0 warp ngefg101 1,1,nguild_gef,62,13
-nguild_gef,54,84,0 warp ngefg106 1,1,nguild_gef,174,14
-nguild_gef,58,185,0 warp ngefg102 1,1,nguild_gef,90,47
-nguild_gef,59,170,0 warp ngefg103 1,1,nguild_gef,205,34
-nguild_gef,62,9,0 warp ngefg101-1 1,1,nguild_gef,39,192
-nguild_gef,90,51,0 warp ngefg102-1 1,1,nguild_gef,54,185
+nguild_gef,170,14,0 warp ngefg106-1 1,1,nguild_gef,50,84
+nguild_gef,170,34,0 warp ngefg105-1 1,1,nguild_gef,30,167
+nguild_gef,181,52,0 warp ngefg107 1,1,nguild_gef,198,160
+nguild_gef,202,160,0 warp ngefg107-1 1,1,nguild_gef,185,52
+nguild_gef,209,34,0 warp ngefg103-1 1,1,nguild_gef,56,170
+nguild_gef,31,185,0 warp ngefg104 1,1,nguild_gef,33,47
+nguild_gef,33,51,0 warp ngefg104-1 1,1,nguild_gef,35,185
+nguild_gef,34,167,0 warp ngefg105 1,1,nguild_gef,174,34
+nguild_gef,39,196,0 warp ngefg101 1,1,nguild_gef,62,13
+nguild_gef,54,84,0 warp ngefg106 1,1,nguild_gef,174,14
+nguild_gef,58,185,0 warp ngefg102 1,1,nguild_gef,90,47
+nguild_gef,59,170,0 warp ngefg103 1,1,nguild_gef,205,34
+nguild_gef,62,9,0 warp ngefg101-1 1,1,nguild_gef,39,192
+nguild_gef,90,51,0 warp ngefg102-1 1,1,nguild_gef,54,185
//Novices Guild: Payon Guild Castles Map
n_castle,18,181,0 warp npayg01 1,1,nguild_pay,214,48
diff --git a/npc/warps/other/arena.txt b/npc/warps/other/arena.txt
index 9770a8537..2ccaf6dcd 100644
--- a/npc/warps/other/arena.txt
+++ b/npc/warps/other/arena.txt
@@ -40,24 +40,24 @@ DLGTEMP:
}
else if (@input_arena == 1357)
{
- mes "Opening Control Panel";
- mes "' A - R - E - N - A '";
+ mes "Opening Control Panel";
+ mes "' A - R - E - N - A '";
next;
- mes "Please select a";
- mes "state for the arena.";
+ mes "Please select a";
+ mes "state for the arena.";
next;
switch( select( "Open.","Closed.") )
{
case 1:
- mes "Currently";
- mes "opening arena.";
+ mes "Currently";
+ mes "opening arena.";
misceffect EF_ENHANCE; //CHECK
enablenpc "welcome_arena";
next;
break;
case 2:
- mes "Currently";
- mes "closing arena.";
+ mes "Currently";
+ mes "closing arena.";
misceffect EF_EXIT; //CHECK
disablenpc "welcome_arena";
next;
@@ -66,7 +66,7 @@ DLGTEMP:
}
else
{
- mes "Closing control panel.";
+ mes "Closing control panel.";
close;
}
} \ No newline at end of file
diff --git a/npc/warps/other/god.txt b/npc/warps/other/god.txt
index 08168c836..6ff9e65e8 100644
--- a/npc/warps/other/god.txt
+++ b/npc/warps/other/god.txt
@@ -14,8 +14,8 @@
yuno,218,180,0 warp yuno_god01 1,1,que_god01,99,84
que_god01,99,81,0 warp god01_yuno 1,1,yuno,218,177
-que_god01,63,88,0 warp god_sl_w0-1 1,1,que_god01,87,92
-que_god01,62,116,0 warp god_sl_w1-1 1,1,que_god01,46,94
-que_god01,12,116,0 warp god_sl_w2-1 1,1,que_god01,16,94
-que_god01,12,55,0 warp god_sl_w3-1 1,1,que_god01,17,83
-que_god01,50,55,0 warp god_sl_w4-1 1,1,que_god01,47,83
+que_god01,63,88,0 warp god_sl_w0-1 1,1,que_god01,87,92
+que_god01,62,116,0 warp god_sl_w1-1 1,1,que_god01,46,94
+que_god01,12,116,0 warp god_sl_w2-1 1,1,que_god01,16,94
+que_god01,12,55,0 warp god_sl_w3-1 1,1,que_god01,17,83
+que_god01,50,55,0 warp god_sl_w4-1 1,1,que_god01,47,83
diff --git a/readme.html b/readme.html
index b133957f6..ee95a106c 100644
--- a/readme.html
+++ b/readme.html
@@ -1,12 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
- <title>eAthena | Intro</title>
+ <title>RAthena | Intro</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="./readme/style.css">
</head>
<body>
- <div id="template">
+ <div id="template">
<div id="header">
- <div class="logo">eAthena<br /><span class="subtitle">- RAGNAROK Online Server Emulator</span></div>
+ <div class="logo">RAthena<br><span class="subtitle">- RAGNAROK Online Server Emulator</span></div>
<div class="title">Intro</div>
</div>
<div id="navcontainer">
@@ -22,19 +24,20 @@
<div class="body-container">
<ul>
- <li><span class="body-title">What is eAthena?</span><br>
- eAthena is a collaborative software development project revolving around the creation of a robust massively multiplayer online role playing game (MMORPG) server package. Written in C, the program is very versatile and provides NPCs, warps and modifications. The project is jointly managed by a group of volunteers located around the world as well as a tremendous community providing QA and support. eAthena is a continuation of the original jAthena project.</li>
+ <li><span class="body-title">What is RAthena?</span><br>
+ RAthena is a collaborative software development project revolving around the creation of a robust massively multiplayer online role playing game (MMORPG) server package. Written in C, the program is very versatile and provides NPCs, warps and modifications. The project is jointly managed by a group of volunteers located around the world as well as a tremendous community providing QA and support. RAthena is a continuation of the eAthena project.
+ </li>
</ul>
<ul>
- <li><span class="body-title">Who are the eAthena developers?</span><br>
- You can find a list of the currently active eAthena developers at:<br>
- <a href="http://code.google.com/p/eathena-project/people/list" target="_new">http://code.google.com/p/eathena-project/people/list</a>
+ <li><span class="body-title">Who are the RAthena developers?</span><br>
+ You can find a list of the currently active RAthena developers at:<br>
+ <a href="http://sourceforge.net/project/memberlist.php?group_id=637719" target="_new">http://sourceforge.net/project/memberlist.php?group_id=637719</a>
</li>
</ul>
</div>
- <div id="footer">"Read Me" Created & Designed by <a href="http://www.kisuka.com" target="_new">Kisuka</a></div>
- </div>
+ <div id="footer">"Read Me" Created &amp; Designed by <a href="http://www.kisuka.com" target="_new">Kisuka</a></div>
+ </div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/readme/commands.html b/readme/commands.html
index 6cc5e5591..ff79a3349 100644
--- a/readme/commands.html
+++ b/readme/commands.html
@@ -1,12 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
- <title>eAthena | GM Commands</title>
+ <title>RAthena | GM Commands</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
- <div id="template">
+ <div id="template">
<div id="header">
- <div class="logo">eAthena<br /><span class="subtitle">- RAGNAROK Online Server Emulator</span></div>
+ <div class="logo">RAthena<br><span class="subtitle">- RAGNAROK Online Server Emulator</span></div>
<div class="title">GM Commands</div>
</div>
<div id="navcontainer">
@@ -21,12 +23,12 @@
</div>
<div class="body-container">
- The following are the GM Commands which can be used in-game on an eAthena server.<br /><br />
- <iframe width="100%" height="35%" src="../conf/help.txt"></iframe><br /><br />
+ The following are the GM Commands which can be used in-game on an RAthena server.<br><br>
+ <iframe width="100%" height="35%" src="../conf/help.txt"></iframe><br><br>
<iframe width="100%" height="35%" src="../conf/help2.txt"></iframe>
</div>
<div id="footer">"Read Me" Created & Designed by <a href="http://www.kisuka.com" target="_new">Kisuka</a></div>
- </div>
+ </div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/readme/faq-content.html b/readme/faq-content.html
deleted file mode 100644
index 0100a2f65..000000000
--- a/readme/faq-content.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<html>
-<body>
-<ul>
- <li><strong>Where can I set the exp rates?</strong><br />
- - Go to /conf/battle/exp.conf<br />
- - Find base_exp_rate and job_exp_rate. Change the value there to raise or lower the rates.<br />
- - 100 = 1x, 1000 = 10x rates, etc<br />
- <br />
- </li>
- <li><strong>Where can I set the item drop rates?</strong><br />
- - Go to /conf/battle/drops.conf<br />
- - You can set the drop rates by changing the values:<br />
- item_rate_common: 100 &lt;-- 100 = 1x drop rate, 1000 = 10x drop rate, etc<br />
- item_rate_common_boss: 100 &lt;--- drop rate for bosses<br />
- item_drop_common_min: 1 &lt;--- minimal drop rate<br />
- item_drop_common_max: 10000 &lt;--- maximum drop rate.<br />
- (You can set the rates of different items in the same file)<br />
- <br />
- </li>
- <li><strong>I found a bug, where to I report it?</strong><br />
- If you find a bug in eAthena, report it here: <a href="http://www.eathena.ws/board/index.php?autocom=bugtracker" target="_blank">Bug Tracker</a><br />
- <br />
- </li>
- <li><strong>I'm a well-experienced programmer, can I join the eAthena dev team?</strong><br />
- Contact <a href="http://www.eathena.ws/board/index.php?showuser=121372" target="_blank">Paradox924X</a><br />
- <br />
- </li>
- <li><strong>My character won't move, and no windows open when I login to the game, what's wrong?</strong><br />
- Your packet_db_ver is most likely set wrong, change it in /db/packet_db.txt to match your client's packet ver.
- </li>
-</ul>
-</body>
-</html> \ No newline at end of file
diff --git a/readme/faq.html b/readme/faq.html
index 0c5619830..9b7a53b02 100644
--- a/readme/faq.html
+++ b/readme/faq.html
@@ -1,12 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
- <title>eAthena | FAQ</title>
+ <title>RAthena | FAQ</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
- <div id="template">
+ <div id="template">
<div id="header">
- <div class="logo">eAthena<br /><span class="subtitle">- RAGNAROK Online Server Emulator</span></div>
+ <div class="logo">RAthena<br><span class="subtitle">- RAGNAROK Online Server Emulator</span></div>
<div class="title">FAQ</div>
</div>
<div id="navcontainer">
@@ -19,13 +21,46 @@
<li><a href="resources.html">Resources</a></li>
</ul>
</div>
-
+
<div class="body-container">
- The following are frequently asked questions regarding eAthena.<br /><br />
- <iframe width="100%" height="75%" src="faq-content.html"></iframe><br />
+ The following are frequently asked questions regarding RAthena.<br><br>
+ <dl>
+ <dt>Where can I set the exp rates?</dt>
+ <dd>
+ <ul>
+ <li>Go to /conf/battle/exp.conf</li>
+ <li>Find base_exp_rate and job_exp_rate. Change the value there to raise or lower the rates.</li>
+ <li>100 = 1x, 1000 = 10x rates, etc</li>
+ </ul>
+ </dd>
+
+ <dt>Where can I set the item drop rates?</dt>
+ <dd>
+ <ul>
+ <li>Go to /conf/battle/drops.conf</li>
+ <li>You can set the drop rates by changing the values:<br>
+ <code>
+ item_rate_common: 100 &lt;-- 100 = 1x drop rate, 1000 = 10x drop rate, etc<br>
+ item_rate_common_boss: 100 &lt;--- drop rate for bosses<br>
+ item_drop_common_min: 1 &lt;--- minimal drop rate<br>
+ item_drop_common_max: 10000 &lt;--- maximum drop rate.
+ </code><br>
+ (You can set the rates of different items in the same file)
+ </ul>
+ </dd>
+
+ <dt>I found a bug, where to I report it?</dt>
+ <dd>If you find a bug in RAthena, report it here: <a href="http://rathena.org/board/tracker/" target="_blank">Bug Tracker</a></dd>
+
+ <dt>I'm a well-experienced programmer, can I join the RAthena dev team?</dt>
+ <dd>You can apply in the <a href="http://rathena.org/board/topic/53712-developer-applications/" target="_blank">Developer Applications</a> topic.</dd>
+
+ <dt>My character won't move, and no windows open when I login to the game, what's wrong?</dt>
+ <dd>Your packet_db_ver is most likely set wrong, change it in /db/packet_db.txt to match your client's packet ver.</dd>
+ </dl>
</div>
-
- <div id="footer">"Read Me" Created & Designed by <a href="http://www.kisuka.com" target="_new">Kisuka</a></div>
- </div>
+
+ <div id="footer">"Read Me" Created &amp; Designed by <a href="http://www.kisuka.com" target="_new">Kisuka</a></div>
+ </div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/readme/resources.html b/readme/resources.html
index 87947b80d..cc6cf87c8 100644
--- a/readme/resources.html
+++ b/readme/resources.html
@@ -1,12 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
- <title>eAthena | Resources</title>
+ <title>RAthena | Resources</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
- <div id="template">
+ <div id="template">
<div id="header">
- <div class="logo">eAthena<br /><span class="subtitle">- RAGNAROK Online Server Emulator</span></div>
+ <div class="logo">RAthena<br><span class="subtitle">- RAGNAROK Online Server Emulator</span></div>
<div class="title">Resources</div>
</div>
<div id="navcontainer">
@@ -19,49 +21,40 @@
<li><a href="resources.html">Resources</a></li>
</ul>
</div>
-
+
<div class="body-container">
- The following are some links to various resources which can be helpful when using eAthena.<br />
+ The following are some links to various resources which can be helpful when using RAthena.<br>
<ul>
- <li><a href="http://www.eathena.ws/" target="_new">http://www.eathena.ws/</a><br>
- The official eAthena project website.
- </li><br>
-
- <li><a href="http://eathena-project.googlecode.com/svn/" target="_new">
- http://eathena-project.googlecode.com/svn/</a><br>
- The official SVN of the eAthena project.</li><br>
-
- <li><a href="irc://irc.deltaanime.net/#athena" target="_new">irc://irc.deltaanime.net/#athena</a><br>
- The official eAthena IRC Channel.</li><br>
-
- <li><a href="http://forum.asb-sakray.net/" target="_new">http://forum.asb-sakray.net/</a><br>
- The official AEGIS Support Board.</li><br>
-
- <li><a href="http://www.ragnarokonline.com/" target="_new">
- http://www.ragnarokonline.com/</a><br>
- The official Ragnarok Online website.
- </li><br>
-
- <li><a href="http://nn.nachtwolke.com/dev/npclist/" target="_new">
- http://nn.nachtwolke.com/dev/npclist/</a><br>
- List of Ragnarok Online NPC sprite names and IDs.
- </li><br>
-
+ <li><a href="http://rathena.org/" target="_new">http://rathena.org/</a><br>
+ The official RAthena project website.</li>
+
+ <li><a href="https://rathena.svn.sourceforge.net/svnroot/rathena/" target="_new">https://rathena.svn.sourceforge.net/svnroot/rathena/</a><br>
+ The official SVN of the RAthena project.</li>
+
+ <li><a href="irc://irc.rizon.net/RAthena" target="_new">irc://irc.rizon.net/RAthena</a><br>
+ The official RAthena IRC Channel.</li>
+
+ <li><a href="http://forum.asb-sakray.net/" target="_new">http://forum.asb-sakray.net/</a><br>
+ The official AEGIS Support Board.</li>
+
+ <li><a href="http://www.ragnarokonline.com/" target="_new">http://www.ragnarokonline.com/</a><br>
+ The official Ragnarok Online website.</li>
+
+ <li><a href="http://nn.nachtwolke.com/dev/npclist/" target="_new">http://nn.nachtwolke.com/dev/npclist/</a><br>
+ List of Ragnarok Online NPC sprite names and IDs.</li>
+
<li><a href="../doc/script_commands.txt" target="_new">Script Commands</a><br>
- Documentation of the script commands available in eAthena.
- </li><br>
-
+ Documentation of the script commands available in RAthena.</li>
+
<li><a href="../doc/effect_list.txt" target="_new">Effect List</a><br>
- Documentation of the visual effects available in eAthena.
- </li><br>
-
+ Documentation of the visual effects available in RAthena.</li>
+
<li><a href="../doc/item_bonus.txt" target="_new">Item Bonuses</a><br>
- Documentation of the item bonuses available in eAthena.
- </li><br>
+ Documentation of the item bonuses available in RAthena.</li>
</ul>
</div>
-
- <div id="footer">"Read Me" Created & Designed by <a href="http://www.kisuka.com" target="_new">Kisuka</a></div>
- </div>
+
+ <div id="footer">"Read Me" Created &amp; Designed by <a href="http://www.kisuka.com" target="_new">Kisuka</a></div>
+ </div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/readme/scripting.html b/readme/scripting.html
index af68e58ce..1253c0117 100644
--- a/readme/scripting.html
+++ b/readme/scripting.html
@@ -1,12 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
- <title>eAthena | Scripting</title>
+ <title>RAthena | Scripting</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="style.css">
</head>
-<body>
- <div id="template">
+ <body>
+ <div id="template">
<div id="header">
- <div class="logo">eAthena<br /><span class="subtitle">- RAGNAROK Online Server Emulator</span></div>
+ <div class="logo">RAthena<br><span class="subtitle">- RAGNAROK Online Server Emulator</span></div>
<div class="title">Scripting</div>
</div>
<div id="navcontainer">
@@ -19,51 +21,50 @@
<li><a href="resources.html">Resources</a></li>
</ul>
</div>
-
+
<div class="body-container">
- <p>
- How to create an NPC using eAthena's scripting:<br /><br />
- <font color="#0000FF">map_name</font>,<font color="#009900">x_cord</font>,<font color="#0CF305">y_cord</font>,<font color="#FF0000">npc_facing_direction</font> <strong>-TAB-</strong> script <strong>-TAB-</strong> <font color="#FF6600">NPC Name</font>#<font color="#FFCC00">HiddenName</font> <strong>-TAB-</strong> <font color="#CC3399">Sprite ID</font>,{<br />
- &nbsp;&nbsp;&nbsp;mes "[NPC Name]";<br>
- &nbsp;&nbsp;&nbsp;mes "Hello World";<br>
- &nbsp;&nbsp;&nbsp;close;<br>
- }
- </p>
- <p>
- <strong>Common Script Commands:</strong>
+ How to create an NPC using RAthena's scripting:<br><br>
+ <code><font color="#0000FF">map_name</font>,<font color="#009900">x_cord</font>,<font color="#0CF305">y_cord</font>,<font color="#FF0000">npc_facing_direction</font> <strong>-TAB-</strong> script <strong>-TAB-</strong> <font color="#FF6600">NPC Name</font>#<font color="#FFCC00">HiddenName</font> <strong>-TAB-</strong> <font color="#CC3399">Sprite ID</font>,{<br>
+ &nbsp;&nbsp;&nbsp;mes "[NPC Name]";<br>
+ &nbsp;&nbsp;&nbsp;mes "Hello World";<br>
+ &nbsp;&nbsp;&nbsp;close;<br>
+ }</code><br><br>
+
+ <strong>Common Script Commands:</strong>
<ul>
- <li><strong>mes</strong><br>
- usage: mes &quot;&lt;message&gt;&quot;;<br>
- info: displays a line of text in an NPC's dialog window.</li>
- <li><strong>close</strong><br>
- usage: close;<br>
- info: displays a &quot;Close&quot; button in an NPC's dialog window.
- </li>
- <li><strong>next</strong><br>
- usage: next;<br>
- info: displays a &quot;Next&quot; button in an NPC's dialog window.</li>
- <li><strong>getitem</strong><br>
- usage: getitem &lt;item id&gt;,&lt;amount&gt;;<br>
- info: gives the player an item.
- </li>
- <li><strong>delitem</strong><br>
- usage: delitem &lt;item id&gt;,&lt;amount&gt;;<br>
- info: deletes an item from the player.
- </li>
- </ul>
- <p><strong>Script Command Documentation:</strong><br>
-
- All the script commands in eAthena can be found <a href="../doc/script_commands.txt" target="_new">here</a>.</p>
- <p><strong>How to enable your NPC:</strong><br>
- 1. Save it as a text file in your /npc/custom/ folder.<br>
- 2. Open /npc/scripts_custom.conf<br>
- 3. Add the following line:<br>
- <em>npc: npc/custom/name_of_your_text_file.txt</em><br>
- 4. Save and close.</p>
- </p>
- </div>
-
- <div id="footer">"Read Me" Created & Designed by <a href="http://www.kisuka.com" target="_new">Kisuka</a></div>
- </div>
+ <li><strong>mes</strong><br>
+ usage: mes &quot;&lt;message&gt;&quot;;<br>
+ info: displays a line of text in an NPC's dialog window.</li>
+ <li><strong>close</strong><br>
+ usage: close;<br>
+ info: displays a &quot;Close&quot; button in an NPC's dialog window.
+ </li>
+ <li><strong>next</strong><br>
+ usage: next;<br>
+ info: displays a &quot;Next&quot; button in an NPC's dialog window.
+ </li>
+ <li><strong>getitem</strong><br>
+ usage: getitem &lt;item id&gt;,&lt;amount&gt;;<br>
+ info: gives the player an item.
+ </li>
+ <li><strong>delitem</strong><br>
+ usage: delitem &lt;item id&gt;,&lt;amount&gt;;<br>
+ info: deletes an item from the player.
+ </li>
+ </ul>
+ <strong>Script Command Documentation:</strong><br>
+ All the script commands in RAthena can be found <a href="../doc/script_commands.txt" target="_new">here</a>.<br><br>
+ <strong>How to enable your NPC:</strong>
+ <ol>
+ <li>Save it as a text file in your /npc/custom/ folder.</li>
+ <li>Open /npc/scripts_custom.conf</li>
+ <li>Add the following line:<br>
+ <code>npc: npc/custom/name_of_your_text_file.txt</code></li>
+ <li>Save and close.</li>
+ </ol>
+ </div>
+
+ <div id="footer">"Read Me" Created &amp; Designed by <a href="http://www.kisuka.com" target="_new">Kisuka</a></div>
+ </div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/readme/setup.html b/readme/setup.html
index 7f91852b8..558c2dc89 100644
--- a/readme/setup.html
+++ b/readme/setup.html
@@ -1,12 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
- <title>eAthena | Setup</title>
+ <title>RAthena | Setup</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
- <div id="template">
+ <div id="template">
<div id="header">
- <div class="logo">eAthena<br /><span class="subtitle">- RAGNAROK Online Server Emulator</span></div>
+ <div class="logo">RAthena<br><span class="subtitle">- RAGNAROK Online Server Emulator</span></div>
<div class="title">Setup</div>
</div>
<div id="navcontainer">
@@ -19,44 +21,44 @@
<li><a href="resources.html">Resources</a></li>
</ul>
</div>
-
- <div class="body-container">
- <strong>Character Server:<br></strong>
- <ol>
- <li>Open /conf/char_athena.conf</li>
+
+ <div class="body-container">
+ <strong>Character Server:</strong>
+ <ol>
+ <li>Open /conf/char_athena.conf</li>
<li>Change userid and passwd (s1/p1) to what you want your server's communication details to be.</li>
<li>Change Server_Name to what you want to call your server.</li>
<li>Remove the <strong>//</strong> before login_ip.
<li>Remove the <strong>//</strong> before char_ip and change 127.0.0.1 to your <a href="http://www.whatismyip.com" target="_new">WAN IP</a>.
- </ol>
-
- <strong>Map Server:<br></strong>
- <ol>
- <li>Open /conf/map_athena.conf</li>
+ </ol>
+
+ <strong>Map Server:</strong>
+ <ol>
+ <li>Open /conf/map_athena.conf</li>
<li>Change userid and passwd to the same thing you set in char_athena.</li>
<li>Remove the <strong>//</strong> before char_ip.</li>
<li>Remove the <strong>//</strong> before map_ip and change 127.0.0.1 to your <a href="http://www.whatismyip.com" target="_new">WAN IP</a>.
- </ol>
-
- <strong>Subnet:<br></strong>
- <ol>
- <li>Open /conf/subnet_athena.conf</li>
+ </ol>
+
+ <strong>Subnet:</strong>
+ <ol>
+ <li>Open /conf/subnet_athena.conf</li>
<li>Change 255.0.0.0 to your <strong>"Subnet Mask"</strong>, change the two 127.0.0.1 to your <strong>LAN IP</strong>.
- </ol>
-
- <strong>MySQL Settings:<br></strong>
- <ol>
- <li>Open /conf/inter_athena.conf</li>
+ </ol>
+
+ <strong>MySQL Settings:</strong>
+ <ol>
+ <li>Open /conf/inter_athena.conf</li>
<li>Find the "Global SQL Settings" and change them to your SQL server's settings.</li>
- </ol>
-
- <strong>Message of the Day:<br></strong>
- <ol>
- <li>Open /conf/motd.txt and edit it to change the in-game MOTD.</li>
- </ol>
- </div>
-
- <div id="footer">"Read Me" Created & Designed by <a href="http://www.kisuka.com" target="_new">Kisuka</a></div>
- </div>
+ </ol>
+
+ <strong>Message of the Day:</strong>
+ <ol>
+ <li>Open /conf/motd.txt and edit it to change the in-game MOTD.</li>
+ </ol>
+ </div>
+
+ <div id="footer">"Read Me" Created &amp; Designed by <a href="http://www.kisuka.com" target="_new">Kisuka</a></div>
+ </div>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/readme/style.css b/readme/style.css
index de9b300a2..9b49a32b0 100644
--- a/readme/style.css
+++ b/readme/style.css
@@ -11,7 +11,7 @@ body {
border-left:thin solid #000;
border-right:thin solid #000;
margin-left:auto;
- margin-right:auto;
+ margin-right:auto;
background:#FFF url(images/clown.png) no-repeat fixed right bottom;
}
#template { position:relative; min-height:100%; }
@@ -32,7 +32,7 @@ body {
padding-top:10px;
}
.body-title {
- font-size:x-large;
+ font-size:x-large;
}
.subtitle {
font-size:14px;
@@ -76,5 +76,8 @@ font-family: arial, helvetica, sans-serif;
border-top: 1px solid #fff;
}
#footer a {
- color: White;
-} \ No newline at end of file
+ color: White;
+}
+dt {
+ font-weight:bold;
+}
diff --git a/sql-files/convert_engine_innodb.sql b/sql-files/convert_engine_innodb.sql
index dabce6eed..9588a9536 100644
--- a/sql-files/convert_engine_innodb.sql
+++ b/sql-files/convert_engine_innodb.sql
@@ -24,7 +24,6 @@ ALTER TABLE `ipbanlist` ENGINE = InnoDB;
#ALTER TABLE `item_db` ENGINE = InnoDB;
#ALTER TABLE `item_db2` ENGINE = InnoDB;
ALTER TABLE `login` ENGINE = InnoDB;
-#ALTER TABLE `loginlog` ENGINE = InnoDB;
ALTER TABLE `mail` ENGINE = InnoDB;
ALTER TABLE `mapreg` ENGINE = InnoDB;
ALTER TABLE `memo` ENGINE = InnoDB;
diff --git a/sql-files/convert_engine_myisam.sql b/sql-files/convert_engine_myisam.sql
index dbbc919a5..5ae7fb2cb 100644
--- a/sql-files/convert_engine_myisam.sql
+++ b/sql-files/convert_engine_myisam.sql
@@ -24,7 +24,6 @@ ALTER TABLE `ipbanlist` ENGINE = MyISAM;
#ALTER TABLE `item_db` ENGINE = MyISAM;
#ALTER TABLE `item_db2` ENGINE = MyISAM;
ALTER TABLE `login` ENGINE = MyISAM;
-#ALTER TABLE `loginlog` ENGINE = MyISAM;
ALTER TABLE `mail` ENGINE = MyISAM;
ALTER TABLE `mapreg` ENGINE = MyISAM;
ALTER TABLE `memo` ENGINE = MyISAM;
diff --git a/sql-files/item_db.sql b/sql-files/item_db.sql
index f93ce6480..9f3176be7 100644
--- a/sql-files/item_db.sql
+++ b/sql-files/item_db.sql
@@ -152,7 +152,7 @@ REPLACE INTO `item_db` VALUES (614,'Golden_Hammer','Golden Hammer',2,3000,NULL,3
REPLACE INTO `item_db` VALUES (615,'Oridecon_Hammer','Oridecon Hammer',2,5000,NULL,400,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'produce 3;',NULL,NULL);
REPLACE INTO `item_db` VALUES (616,'Old_Card_Album','Old Card Album',2,10000,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem groupranditem(IG_CardAlbum),1;',NULL,NULL);
REPLACE INTO `item_db` VALUES (617,'Old_Violet_Box','Old Purple Box',2,10000,NULL,200,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem groupranditem(IG_VioletBox),1;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (618,'Worn_Out_Scroll','Worn Out Scroll',2,50,NULL,20,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem groupranditem(IG_ScrollBox),1;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (618,'Worn_Out_Scroll','Worn Out Scroll',2,50,NULL,20,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `item_db` VALUES (619,'Unripe_Apple','Unripe Apple',2,1000,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'pet 1002;',NULL,NULL);
REPLACE INTO `item_db` VALUES (620,'Orange_Juice','Orange Juice',2,1500,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'pet 1113;',NULL,NULL);
REPLACE INTO `item_db` VALUES (621,'Bitter_Herb','Bitter Herb',2,20,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'pet 1031;',NULL,NULL);
@@ -1572,7 +1572,7 @@ REPLACE INTO `item_db` VALUES (2640,'Kafra_Ring','Kafra Ring',5,40000,NULL,200,N
REPLACE INTO `item_db` VALUES (2641,'Fashionable_Sack','Fashion Hip Sack',5,20,NULL,700,NULL,0,NULL,0,0x00040420,7,2,136,NULL,50,0,0,'bonus bStr,2;',NULL,NULL);
REPLACE INTO `item_db` VALUES (2642,'Serin\'s_Gold_Ring','Serin\'s Gold Ring',5,20,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,7,2,136,NULL,0,0,0,NULL,NULL,NULL);
REPLACE INTO `item_db` VALUES (2643,'Serin\'s_Gold_Ring_','Serin\'s Gold Ring',5,45000,NULL,100,NULL,0,NULL,0,0xFFFFFFFF,7,2,136,NULL,0,0,0,NULL,NULL,NULL);
-REPLACE INTO `item_db` VALUES (2644,'The_Sign_','The Sign',5,2,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,7,2,136,NULL,0,0,0,'bonus2 bAddRace,RC_NonBoss,5; bonus2 bAddRace,RC_Boss,5; bonus bMatkRate,5;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (2644,'The_Sign_','The Sign',5,2,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,7,2,136,NULL,0,0,0,'bonus2 bAddRace,RC_NonBoss,5; bonus2 bAddRace,RC_Boss,5; bonus2 bMagicAddRace,RC_NonBossn,5; bonus2 bMagicAddRace,RC_Boss,5;',NULL,NULL);
REPLACE INTO `item_db` VALUES (2645,'Moonlight_Ring','Moonlight Ring',5,40000,NULL,200,NULL,0,NULL,0,0x02021040,7,2,136,NULL,60,0,0,'bonus bMdef,2;',NULL,NULL);
REPLACE INTO `item_db` VALUES (2646,'Bunch_Of_Carnation','Bunch of Carnations',5,2,NULL,100,NULL,0,NULL,0,0xFFFFFFFF,7,2,136,NULL,0,0,0,'bonus bAllStats,3;',NULL,NULL);
REPLACE INTO `item_db` VALUES (2647,'Nile_Rose','Nile Rose',5,2,NULL,100,NULL,0,NULL,1,0xFFFFFFFF,7,2,136,NULL,0,0,0,'bonus bMaxHP,10;',NULL,NULL);
@@ -1672,7 +1672,7 @@ REPLACE INTO `item_db` VALUES (2740,'Rusty_Coin','Rusty Coin',5,0,NULL,0,NULL,0,
REPLACE INTO `item_db` VALUES (2741,'All_In_One_Ring','All In One Ring',5,20,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,7,2,136,NULL,0,0,0,'bonus bAllStats,1; bonus bNoCastCancel,0; bonus bCastRate,10; skill \"AL_HEAL\",1; skill \"AL_TELEPORT\",1;',NULL,NULL);
# REPLACE INTO `item_db` VALUES (2742,'Lucky_Clip','Lucky Clip',5,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,7,2,136,NULL,0,0,0,NULL,NULL,NULL);
REPLACE INTO `item_db` VALUES (2743,'Angelic_Ring','Angelic Ring',5,20,NULL,100,NULL,0,NULL,0,0x00CFFF80,2,2,136,NULL,70,0,0,'bonus bInt,2; bonus bDex,1; bonus bMdef,2; autobonus3 \"{ bonus bHealPower,20; }\",50,2000,\"AL_HEAL\"; autobonus3 \"{ bonus bHealPower,20; }\",50,2000,\"AM_POTIONPITCHER\"; autobonus3 \"{ bonus bHealPower,20; }\",50,2000,\"PR_SANCTUARY\";',NULL,NULL);
-REPLACE INTO `item_db` VALUES (2744,'Sprint_Ring','Sprint Ring',5,20,NULL,100,NULL,0,NULL,0,0x00CFFF80,2,2,136,NULL,70,0,0,'bonus bCastrate,-10; bonus bDelayRate,-5;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (2744,'Sprint_Ring','Sprint Ring',5,20,NULL,100,NULL,0,NULL,0,0x00CFFF80,2,2,136,NULL,70,0,0,'bonus bCastrate,-10; bonus bDelayRate,5;',NULL,NULL);
REPLACE INTO `item_db` VALUES (2745,'Pinguicula_Corsage','Pinguicula Corsage',5,20,NULL,200,NULL,0,NULL,1,0x00CFFF80,2,2,136,NULL,70,0,0,'bonus bMdef,2; bonus bMaxSP,25;',NULL,NULL);
REPLACE INTO `item_db` VALUES (2746,'Cold_Heart','Cold Heart',5,20,NULL,100,NULL,1,NULL,0,0x00001000,2,2,136,NULL,80,0,0,'bonus bAgi,3; if( isequipped(2620) ) { bonus2 bAddSize,1,8; bonus bAspdRate,getequiprefinerycnt(EQI_HAND_R)/2; }',NULL,NULL);
REPLACE INTO `item_db` VALUES (2747,'Black_Cat','Black Cat',5,20,NULL,100,NULL,1,NULL,0,0x00020000,2,2,136,NULL,80,0,0,'bonus bDex,3; if( isequipped(2620) ) { bonus2 bAddSize,2,8; bonus bHit,getequiprefinerycnt(EQI_HAND_R)/2; bonus bCastrate,-getequiprefinerycnt(EQI_HAND_R)/2; }',NULL,NULL);
@@ -2139,7 +2139,7 @@ REPLACE INTO `item_db` VALUES (4339,'Mineral_Card','Mineral Card',6,20,NULL,10,N
REPLACE INTO `item_db` VALUES (4340,'Teddy_Bear_Card','Teddy Bear Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,32,NULL,NULL,NULL,NULL,'bonus2 bSubRace,RC_Undead,30;',NULL,NULL);
REPLACE INTO `item_db` VALUES (4341,'Metaling_Card','Metaling Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus3 bAutoSpell,\"RG_STRIPWEAPON\",1,50;',NULL,NULL);
REPLACE INTO `item_db` VALUES (4342,'Rsx_0806_Card','RSX-0806 Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16,NULL,NULL,NULL,NULL,'bonus bVit,3; bonus bUnbreakableArmor,0; bonus bNoKnockback,0;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (4343,'Mole_Card','Holden Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,769,NULL,NULL,NULL,NULL,'bonus bLuk,2; if(isequipped(4186,4281,4036,4233)) { bonus bStr,4; bonus bMaxHPrate,7; bonus bMaxSPrate,7; bonus2 bSkillAtk,\"MC_MAMMONITE\",20; bonus bSPDrainValue,1; if(BaseJob == Job_Alchemist) { bonus3 bAutoSpell,\"BS_ADRENALINE\",1,10; bonus2 bAddMonsterDropItem,7139,3; bonus2 bAddMonsterDropItem,905,10; } }',NULL,NULL);
+REPLACE INTO `item_db` VALUES (4343,'Mole_Card','Holden Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,769,NULL,NULL,NULL,NULL,'bonus bLuk,2; if(isequipped(4186,4281,4036,4233)) { bonus bStr,4; bonus bMaxHPrate,7; bonus bMaxSPrate,7; bonus2 bSkillAtk,\"MC_MAMMONITE\",20; bonus bSPDrainValue,1; if(BaseJob == Job_Alchemist) { bonus4 bAutoSpell,\"BS_ADRENALINE\",1,10,0; bonus2 bAddMonsterDropItem,7139,3; bonus2 bAddMonsterDropItem,905,10; } }',NULL,NULL);
REPLACE INTO `item_db` VALUES (4344,'Anopheles_Card','Anopheles Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,136,NULL,NULL,NULL,NULL,'bonus3 bAddMonsterDropItem,12058,RC_Insect,50;',NULL,NULL);
REPLACE INTO `item_db` VALUES (4345,'Hill_Wind_Card','Hill Wind Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus2 bSkillAtk,\"MG_THUNDERSTORM\",5; bonus2 bSkillAtk,\"WZ_JUPITEL\",5; bonus2 bSkillAtk,\"WZ_VERMILION\",5;',NULL,'heal 0,-50;');
REPLACE INTO `item_db` VALUES (4346,'Ygnizem_Card','Egnigem Cenia Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16,NULL,NULL,NULL,NULL,'bonus bStr,readparam(bInt)/18;',NULL,NULL);
@@ -2411,7 +2411,7 @@ REPLACE INTO `item_db` VALUES (5047,'Fashion_Sunglass','Fashionable Glasses',5,2
REPLACE INTO `item_db` VALUES (5048,'First_Moon_Hair_Pin','Cresent Hairpin',5,20,NULL,100,NULL,0,NULL,0,0xFFFFFFFF,7,2,256,NULL,0,1,132,NULL,NULL,NULL);
REPLACE INTO `item_db` VALUES (5049,'Stripe_Band','Striped Hairband',5,20,NULL,150,NULL,1,NULL,0,0xFFFFFFFF,7,2,256,NULL,0,0,133,NULL,NULL,NULL);
REPLACE INTO `item_db` VALUES (5050,'Mystery_Fruit_Shell','Wonder Nutshell',5,20,NULL,300,NULL,5,NULL,0,0xFFFFFFFF,7,2,256,NULL,30,0,134,NULL,NULL,NULL);
-REPLACE INTO `item_db` VALUES (5051,'Kitty_Bell','Pussy Cat Bell',5,20,NULL,100,NULL,0,NULL,0,0x0,7,2,1,NULL,0,0,135,NULL,NULL,NULL);
+REPLACE INTO `item_db` VALUES (5051,'Kitty_Bell','Pussy Cat Bell',5,20,NULL,100,NULL,0,NULL,0,0xFFFFFFFF,7,2,1,NULL,0,0,135,NULL,NULL,NULL);
REPLACE INTO `item_db` VALUES (5052,'Blue_Hair_Band','Blue Hairband',5,20,NULL,150,NULL,1,NULL,0,0xFFFFFFFF,7,2,256,NULL,0,1,136,NULL,NULL,NULL);
REPLACE INTO `item_db` VALUES (5053,'Spinx_Helm','Sphinx Hat',5,20,NULL,3000,NULL,5,NULL,0,0x00004082,7,2,257,NULL,65,0,137,'bonus bStr,2;',NULL,NULL);
REPLACE INTO `item_db` VALUES (5054,'Assassin_Mask','Assassin Mask',5,20,NULL,100,NULL,0,NULL,0,0x00001100,7,2,1,NULL,70,0,180,NULL,NULL,NULL);
diff --git a/sql-files/item_db_re.sql b/sql-files/item_db_re.sql
new file mode 100644
index 000000000..07050ba0a
--- /dev/null
+++ b/sql-files/item_db_re.sql
@@ -0,0 +1,102 @@
+#
+# Table structure for table `item_db_re`
+#
+
+DROP TABLE IF EXISTS `item_db_re`;
+CREATE TABLE `item_db_re` (
+ `id` smallint(5) unsigned NOT NULL default '0',
+ `name_english` varchar(50) NOT NULL default '',
+ `name_japanese` varchar(50) NOT NULL default '',
+ `type` tinyint(2) unsigned NOT NULL default '0',
+ `price_buy` mediumint(10) unsigned default NULL,
+ `price_sell` mediumint(10) unsigned default NULL,
+ `weight` smallint(5) unsigned NOT NULL default '0',
+ `attack` smallint(3) unsigned default NULL,
+ `defence` tinyint(3) unsigned default NULL,
+ `range` tinyint(2) unsigned default NULL,
+ `slots` tinyint(2) unsigned default NULL,
+ `equip_jobs` int(12) unsigned default NULL,
+ `equip_upper` tinyint(8) unsigned default NULL,
+ `equip_genders` tinyint(2) unsigned default NULL,
+ `equip_locations` smallint(4) unsigned default NULL,
+ `weapon_level` tinyint(2) unsigned default NULL,
+ `equip_level` tinyint(3) unsigned default NULL,
+ `refineable` tinyint(1) unsigned default NULL,
+ `view` smallint(3) unsigned default NULL,
+ `script` text,
+ `equip_script` text,
+ `unequip_script` text,
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM;
+
+# Renewal-Specific Database
+# specially for renewal-modified items, when compiled in RRMODE entries in this file override item_db.txt and are overriden by item_db2.txt
+#
+# Structure of Database:
+# REPLACE INTO `item_db_re` VALUES ('ID','Name','Name','Type','Price','Sell','Weight','ATK','DEF','Range','Slot','Job','Upper','Gender','Loc','wLV','eLV','Refineable','View','Script','OnEquip_Script','OnUnequip_Script');
+
+# Matk updates. Work in progress.
+# Daggers
+REPLACE INTO `item_db_re` VALUES (13010,'Asura','Asura',4,3000,NULL,600,50,NULL,1,2,0x02000000,7,2,2,1,12,1,1,'bonus bMatk,50;','','');
+REPLACE INTO `item_db_re` VALUES (13011,'Asura_','Asura',4,3000,NULL,600,50,NULL,1,3,0x02000000,7,2,2,1,12,1,1,'bonus bMatk,50;','','');
+REPLACE INTO `item_db_re` VALUES (1231,'Bazerald','Bazerald',4,20,NULL,500,70,NULL,1,0,0x028F5EEE,7,2,2,4,36,1,1,'bonus bAtkEle,Ele_Fire; bonus bInt,5; bonus bMatk,105;','','');
+
+# Staffs
+REPLACE INTO `item_db_re` VALUES (1472,'Staff_Of_Soul','Soul Staff',4,20,NULL,1400,25,NULL,1,0,0x00810204,7,2,34,3,73,1,10,'bonus bInt,5; bonus bAgi,2; bonus bMatk,200; if(isequipped(2677) || isequipped(2711)){ bonus bMatkRate,6; bonus bDex,2; bonus bCastrate,-getrefine(); }','','');
+REPLACE INTO `item_db_re` VALUES (1601,'Rod','Rod',4,50,NULL,400,15,NULL,1,3,0x00818315,7,2,2,1,1,1,10,'bonus bMatk,30;','','');
+REPLACE INTO `item_db_re` VALUES (1602,'Rod_','Rod',4,50,NULL,400,15,NULL,1,4,0x00818315,7,2,2,1,1,1,10,'bonus bMatk,30;','','');
+REPLACE INTO `item_db_re` VALUES (1603,'Rod__','Rod',4,50,NULL,400,15,NULL,1,0,0x00818315,7,2,2,1,1,1,10,'bonus bMatk,30;','','');
+REPLACE INTO `item_db_re` VALUES (1604,'Wand','Wand',4,2500,NULL,400,25,NULL,1,2,0x00818315,7,2,2,2,12,1,10,'bonus bInt,1; bonus bMatk,45;','','');
+REPLACE INTO `item_db_re` VALUES (1605,'Wand_','Wand',4,2500,NULL,400,25,NULL,1,3,0x00818315,7,2,2,2,12,1,10,'bonus bInt,1; bonus bMatk,45;','','');
+REPLACE INTO `item_db_re` VALUES (1606,'Wand__','Wand',4,2500,NULL,400,25,NULL,1,0,0x00818315,7,2,2,2,12,1,10,'bonus bInt,1; bonus bMatk,45;','','');
+REPLACE INTO `item_db_re` VALUES (1607,'Staff','Staff',4,9500,NULL,400,40,NULL,1,2,0x00818314,7,2,2,2,12,1,10,'bonus bInt,2; bonus bMatk,70;','','');
+REPLACE INTO `item_db_re` VALUES (1608,'Staff_','Staff',4,9500,NULL,400,40,NULL,1,3,0x00818314,7,2,2,2,12,1,10,'bonus bInt,2; bonus bMatk,70;','','');
+REPLACE INTO `item_db_re` VALUES (1609,'Staff__','Staff',4,9500,NULL,400,40,NULL,1,0,0x00818314,7,2,2,2,12,1,10,'bonus bInt,2; bonus bMatk,70;','','');
+REPLACE INTO `item_db_re` VALUES (1610,'Arc_Wand','Arc Wand',4,45000,NULL,400,60,NULL,1,1,0x00818314,7,2,2,3,24,1,10,'bonus bInt,3; bonus bMatk,95;','','');
+REPLACE INTO `item_db_re` VALUES (1611,'Arc_Wand_','Arc Wand',4,45000,NULL,400,60,NULL,1,2,0x00818314,7,2,2,3,24,1,10,'bonus bInt,3; bonus bMatk,95;','','');
+REPLACE INTO `item_db_re` VALUES (1612,'Arc_Wand__','Arc Wand',4,45000,NULL,400,60,NULL,1,0,0x00818314,7,2,2,3,24,1,10,'bonus bInt,3; bonus bMatk,95;','','');
+REPLACE INTO `item_db_re` VALUES (1613,'Mighty_Staff','Mighty Staff',4,20,NULL,700,130,NULL,1,0,0x00818314,7,2,2,3,24,1,10,'bonus bStr,10; bonus bMatk,100; bonus bSPDrainValue,-2;','','');
+REPLACE INTO `item_db_re` VALUES (1614,'Blessed_Wand','Wand of Occult',4,20,NULL,700,75,NULL,1,0,0x00818314,7,2,2,3,24,1,10,'bonus bInt,3; bonus bMatk,105;','','');
+REPLACE INTO `item_db_re` VALUES (1616,'Staff_Of_Wing','Wing Staff',4,20,NULL,500,60,NULL,1,0,0x00810204,7,2,2,4,40,1,10,'bonus bMatk,115; bonus bCastrate,-5;','','');
+REPLACE INTO `item_db_re` VALUES (1617,'Survival_Rod','Survivor\'s Rod',4,85000,NULL,1000,50,NULL,1,0,0x00818314,7,2,2,3,24,1,10,'bonus bDex,2; bonus bMatk,120; bonus bMaxHP,300;','','');
+REPLACE INTO `item_db_re` VALUES (1618,'Survival_Rod_','Survivor\'s Rod',4,85000,NULL,1000,50,NULL,1,1,0x00818314,7,2,2,3,24,1,10,'bonus bDex,3; bonus bMatk,120; bonus bMaxHP,400;','','');
+REPLACE INTO `item_db_re` VALUES (1619,'Survival_Rod2','Survivor\'s Rod',4,85000,NULL,1000,50,NULL,1,0,0x00818314,7,2,2,3,24,1,10,'bonus bInt,2; bonus bMatk,120; bonus bMaxHP,300;','','');
+REPLACE INTO `item_db_re` VALUES (1620,'Survival_Rod2_','Survivor\'s Rod',4,85000,NULL,1000,50,NULL,1,1,0x00818314,7,2,2,3,24,1,10,'bonus bInt,3; bonus bMatk,120; bonus bMaxHP,400;','','');
+REPLACE INTO `item_db_re` VALUES (1621,'Hypnotist\'s_Staff','Hypnotist\'s Staff',4,43000,NULL,500,70,NULL,1,1,0x00000001,7,2,2,3,30,1,10,'bonus bInt,1; bonus bMatk,120;','','');
+REPLACE INTO `item_db_re` VALUES (1622,'Hypnotist\'s_Staff_','Hypnotist\'s Staff',4,20,NULL,500,70,NULL,1,2,0x00000001,7,2,2,3,30,1,10,'bonus bInt,1; bonus bMatk,120;','','');
+REPLACE INTO `item_db_re` VALUES (1624,'Lich_Bone_Wand','Lich\'s Bone Wand',4,20,NULL,800,60,NULL,1,2,0x00018314,2,2,2,3,70,1,10,'bonus bInt,1; bonus bDex,1; bonus bAtkEle,Ele_Undead; bonus bMatk,170; bonus3 bAutoSpellWhenHit,"NPC_WIDECURSE",5,10+getrefine(); if(getrefine()>=9){ bonus bMatkRate,3; bonus bMaxSP,300; }','','');
+REPLACE INTO `item_db_re` VALUES (1625,'Healing_Staff','Healing Staff',4,20,NULL,400,10,NULL,1,0,0x00008110,7,2,2,3,55,1,10,'bonus bAtkEle,Ele_Holy; bonus bMatk,105; bonus bHealPower,(getrefine()*3/2);','','');
+REPLACE INTO `item_db_re` VALUES (1626,'Piercing_Staff','Piercing Staff',4,20,NULL,500,80,NULL,1,0,0x00018314,2,2,2,3,70,1,10,'bonus bInt,4; bonus bMatk,145; bonus bIgnoreMdefRate,10+getrefine();','','');
+REPLACE INTO `item_db_re` VALUES (1629,'Walking_Stick','Gentleman\'s Staff',4,20,NULL,500,40,NULL,1,1,0x00818314,7,2,2,4,50,1,10,'bonus bMatk,125; bonus bDex,1; if (isequipped(5045)) { bonus bDex,2; bonus bInt,2; bonus bSPrecovRate,5; bonus bMatkRate,getrefine(); }','','');
+REPLACE INTO `item_db_re` VALUES (1630,'Release_Of_Wish','Release of Wish',4,20,NULL,500,30,NULL,1,0,0x00810204,7,2,2,3,50,1,10,'bonus bMatk,125; bonus bInt,3; bonus bHealPower,5; autobonus "{ bonus2 bSPRegenRate,100,2000; bonus2 bHPRegenRate,50,2000; }",10,10000,BF_MAGIC,"{ specialeffect2 EF_HEAL; }";','','');
+REPLACE INTO `item_db_re` VALUES (1636,'Thorn_Staff','Thorn Staff of Darkness',4,20,NULL,700,60,NULL,1,0,0x00018314,2,2,2,4,75,1,10,'bonus bInt,3; bonus bDex,3; bonus bMatk,160; bonus bIgnoreMdefRate,getrefine(); bonus bDelayRate,-(getrefine()*3/2);','','');
+REPLACE INTO `item_db_re` VALUES (1637,'Eraser','Eraser',4,20,NULL,500,80,NULL,1,0,0x00018314,2,2,2,4,70,1,10,'bonus bMatk,170; bonus bInt,3; bonus bDex,2; bonus bSPrecovRate,8; if( getrefine() > 9 ) bonus5 bAutoSpell,"NPC_WIDESOULDRAIN",3,5,BF_MAGIC,0; else bonus5 bAutoSpell,"NPC_WIDESOULDRAIN",1,5,BF_MAGIC,0;','','');
+REPLACE INTO `item_db_re` VALUES (2000,'Destruction_Rod','Staff of Destruction',4,20,NULL,2500,130,NULL,1,1,0x00000200,2,2,34,4,80,1,23,'bonus bMatk,280; bonus bInt,3; bonus bAgi,10; bonus bUseSPrate,(getrefine()*2); bonus3 bAutoSpellWhenHit,"WZ_JUPITEL",5,(getrefine()*20); bonus2 bCastrate,366,-50;','','');
+REPLACE INTO `item_db_re` VALUES (2001,'Divine_Cross','Divine Cross',4,20,NULL,1500,120,NULL,1,0,0x00008100,7,2,34,4,70,1,23,'bonus bAtkEle,Ele_Holy; bonus bMatk,210; bonus bDex,4; bonus2 bSubRace,RC_Demon,15; bonus2 bSubRace,RC_Undead,15; if (isequipped(2677) || isequipped(2711)) { bonus bMatkRate,10; bonus bDex,2; bonus2 bSubRace,RC_Demon,10; bonus2 bSubRace,RC_Undead,10; };','','');
+
+# Books
+REPLACE INTO `item_db_re` VALUES (1560,'Diary_Of_Great_Sage','Sage\'s Diary',4,20,NULL,1100,100,NULL,1,2,0x00410100,7,2,2,3,60,1,15,'bonus bMatk,120; if(readparam(bStr)>=50) bonus bAspdRate,5; if(readparam(bInt)>=70) bonus bMatkRate,5;','','');
+REPLACE INTO `item_db_re` VALUES (1561,'Hardback','Hardcover Book',4,20,NULL,1500,140,NULL,1,1,0x00410100,7,2,2,4,55,1,15,'bonus bStr,3; bonus bDex,2;','','');
+REPLACE INTO `item_db_re` VALUES (1572,'Principles_Of_Magic','Principles of Magic',4,20,NULL,300,60,NULL,1,2,0x00410100,7,2,2,3,60,1,15,'bonus bMatk,160; bonus bInt,3; bonus bSPrecovRate,5;','','');
+REPLACE INTO `item_db_re` VALUES (1573,'Ancient_Magic','Ancient Magic',4,20,NULL,700,30,NULL,1,2,0x00410100,7,2,2,3,70,1,15,'bonus bMatk,140; if (isequipped(2334) || isequipped(2372)) { bonus bMdef,8; bonus bMaxSPRate,10; bonus bInt,4; };','','');
+REPLACE INTO `item_db_re` VALUES (1564,'Encyclopedia','Encyclopedia',4,20,NULL,2000,110,NULL,1,2,0x00410100,7,2,2,3,70,1,15,'bonus bMatk,100; bonus bInt,3; bonus bDex,2; bonus bCritical,20+(readparam(bLuk)*2);','','');
+
+# Training Grounds Items
+REPLACE INTO `item_db_re` VALUES (2819,'Swordman_Manual','Swordsman Manual',5,0,NULL,100,NULL,0,NULL,0,0x00000001,7,2,136,NULL,1,0,0,'bonus bMaxSP,100; skill \"SM_BASH\",1; skill \"SM_PROVOKE\",1; skill \"SM_MAGNUM\",1;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (2820,'Thief_Manual','Thief Manual',5,0,NULL,100,NULL,0,NULL,0,0x00000001,7,2,136,NULL,1,0,0,'bonus bMaxSP,100; skill \"TF_DOUBLE\",3; skill \"TF_STEAL\",1; skill \"TF_HIDING\",1; skill \"TF_POISON\",1;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (2821,'Acolyte_Manual','Acolyte Manual',5,0,NULL,100,NULL,0,NULL,0,0x00000001,7,2,136,NULL,1,0,0,'bonus bMaxSP,100; skill \"AL_HEAL\",1; skill \"AL_INCAGI\",1; skill \"AL_BLESSING\",1;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (2822,'Archer_Manual','Archer Manual',5,0,NULL,100,NULL,0,NULL,0,0x00000001,7,2,136,NULL,1,0,0,'bonus bMaxSP,100; skill \"AC_OWL\",1; skill \"AC_CONCENTRATION\",1;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (2823,'Merchant_Manual','Merchant Manual',5,0,NULL,100,NULL,0,NULL,0,0x00000001,7,2,136,NULL,1,0,0,'bonus bMaxSP,100; skill \"MC_DISCOUNT\",1; skill \"MC_OVERCHARGE\",10; skill \"MC_IDENTIFY\",1; skill \"MC_MAMMONITE\",1;',NULL,NULL);
+REPLACE INTO `item_db_re` VALUES (2824,'Mage_Manual','Mage Manual',5,0,NULL,100,NULL,0,NULL,0,0x00000001,7,2,136,NULL,1,0,0,'bonus bMaxSP,100; skill \"MG_SRECOVERY\",1; skill \"MG_COLDBOLT\",1; skill \"MG_FIREWALL\",1; skill \"MG_FIREBOLT\",1;',NULL,NULL);
+
+# //[Ind] keeping these 2 here until we confirm: these ids are conflicting, I think they're wrong.
+# // Minstrel And Wanderer Cough Drop
+# //11513,Cough_Drop,Cough Drop,3,200,,10,,,,,,,,,,,,,{},{},{}
+#
+# // Genetic Cure Free
+# //11518,Cure_Free,Cure Free,0,10,,30,,,,,0xFFFFFFFF,7,2,,,,,,{ itemheal rand(1000,1200),0; sc_end SC_Silence; sc_end SC_Bleeding; sc_end SC_Curse; },{},{}
+#
+#
+# // Unknown Item. Rune Knight Armor???
+# //15002,Rune_Plate,Rune Plate,3,10,,10,,,,,,,,,,,,,{},{},{}
+#
diff --git a/sql-files/main.sql b/sql-files/main.sql
index feafcae3e..22ccc186f 100644
--- a/sql-files/main.sql
+++ b/sql-files/main.sql
@@ -164,7 +164,7 @@ CREATE TABLE IF NOT EXISTS `global_reg_value` (
`char_id` int(11) unsigned NOT NULL default '0',
`str` varchar(255) NOT NULL default '',
`value` varchar(255) NOT NULL default '0',
- `type` int(11) NOT NULL default '3',
+ `type` tinyint(1) NOT NULL default '3',
`account_id` int(11) unsigned NOT NULL default '0',
PRIMARY KEY (`char_id`,`str`,`account_id`),
KEY `account_id` (`account_id`),
diff --git a/sql-files/upgrade_svn15003.sql b/sql-files/upgrade_svn15003.sql
new file mode 100644
index 000000000..e30a3b0fd
--- /dev/null
+++ b/sql-files/upgrade_svn15003.sql
@@ -0,0 +1 @@
+ALTER TABLE `global_reg_value` MODIFY `type` TINYINT(1) UNSIGNED NOT NULL DEFAULT '3';
diff --git a/src/char/char.c b/src/char/char.c
index 0f23744c0..90e954002 100644
--- a/src/char/char.c
+++ b/src/char/char.c
@@ -1793,7 +1793,7 @@ int count_users(void)
// Writes char data to the buffer in the format used by the client.
// Used in packets 0x6b (chars info) and 0x6d (new char info)
// Returns the size
-#define MAX_CHAR_BUF 136 //Max size (for WFIFOHEAD calls)
+#define MAX_CHAR_BUF 140 //Max size (for WFIFOHEAD calls)
int mmo_char_tobuf(uint8* buffer, struct mmo_charstatus* p)
{
unsigned short offset = 0;
@@ -1828,7 +1828,7 @@ int mmo_char_tobuf(uint8* buffer, struct mmo_charstatus* p)
WBUFW(buf,50) = DEFAULT_WALK_SPEED; // p->speed;
WBUFW(buf,52) = p->class_;
WBUFW(buf,54) = p->hair;
- WBUFW(buf,56) = p->option&0x7E80020 ? 0 : p->weapon; //When the weapon is sent and your option is riding, the client crashes on login!?
+ WBUFW(buf,56) = p->option&0x20 ? 0 : p->weapon; //When the weapon is sent and your option is riding, the client crashes on login!?
WBUFW(buf,58) = p->base_level;
WBUFW(buf,60) = min(p->skill_point, INT16_MAX);
WBUFW(buf,62) = p->head_bottom;
@@ -1861,6 +1861,10 @@ int mmo_char_tobuf(uint8* buffer, struct mmo_charstatus* p)
WBUFL(buf,128) = p->robe;
offset += 4;
#endif
+#if PACKETVER >= 20110928
+ WBUFL(buf,132) = 0; // change slot feature (0 = disabled, otherwise enabled)
+ offset += 4;
+#endif
return 106+offset;
}
diff --git a/src/char/int_party.c b/src/char/int_party.c
index b340aa9cf..2ae9e5319 100644
--- a/src/char/int_party.c
+++ b/src/char/int_party.c
@@ -309,29 +309,29 @@ int mapif_party_created(int fd,int account_id, int char_id, struct party *p)
}
// ƒp?ƒeƒBî•ñŒ©‚‚©‚炸
-int mapif_party_noinfo(int fd, int party_id) {
- WFIFOHEAD(fd, 8);
+static void mapif_party_noinfo(int fd, int party_id, int char_id)
+{
+ WFIFOHEAD(fd, 12);
WFIFOW(fd,0) = 0x3821;
- WFIFOW(fd,2) = 8;
- WFIFOL(fd,4) = party_id;
- WFIFOSET(fd,8);
- ShowWarning("int_party: info not found %d\n", party_id);
-
- return 0;
+ WFIFOW(fd,2) = 12;
+ WFIFOL(fd,4) = char_id;
+ WFIFOL(fd,8) = party_id;
+ WFIFOSET(fd,12);
+ ShowWarning("int_party: info not found (party_id=%d char_id=%d)\n", party_id, char_id);
}
// ƒp?ƒeƒBî•ñ‚Ü‚Æ‚ß‘—‚è
-int mapif_party_info(int fd, struct party *p) {
- unsigned char buf[2048];
-
+static void mapif_party_info(int fd, struct party* p, int char_id)
+{
+ unsigned char buf[8 + sizeof(struct party)];
WBUFW(buf,0) = 0x3821;
- memcpy(buf + 4, p, sizeof(struct party));
- WBUFW(buf,2) = 4 + sizeof(struct party);
+ WBUFW(buf,2) = 8 + sizeof(struct party);
+ WBUFL(buf,4) = char_id;
+ memcpy(WBUFP(buf,8), p, sizeof(struct party));
if (fd < 0)
mapif_sendall(buf, WBUFW(buf,2));
else
mapif_send(fd, buf, WBUFW(buf,2));
- return 0;
}
// ƒp?ƒeƒBƒƒ“ƒo’ljÁ‰Â”Û
@@ -472,25 +472,23 @@ int mapif_parse_CreateParty(int fd, char *name, int item, int item2, struct part
int_party_calc_state(p);
idb_put(party_db, p->party.party_id, p);
+ mapif_party_info(fd, &p->party, 0);
mapif_party_created(fd, leader->account_id, leader->char_id, &p->party);
- mapif_party_info(fd, &p->party);
return 0;
}
// ƒp?ƒeƒBî•ñ—v‹
-int mapif_parse_PartyInfo(int fd, int party_id)
+static void mapif_parse_PartyInfo(int fd, int party_id, int char_id)
{
struct party_data *p;
p = (struct party_data*)idb_get(party_db, party_id);
if (p != NULL)
- mapif_party_info(fd, &p->party);
+ mapif_party_info(fd, &p->party, char_id);
else {
- mapif_party_noinfo(fd, party_id);
+ mapif_party_noinfo(fd, party_id, char_id);
}
-
- return 0;
}
// ƒp[ƒeƒB’ljÁ—v‹
@@ -524,8 +522,8 @@ int mapif_parse_PartyAddMember(int fd, int party_id, struct party_member *member
int_party_check_lv(p);
}
+ mapif_party_info(-1, &p->party, 0);
mapif_party_memberadded(fd, party_id, member->account_id, member->char_id, 0);
- mapif_party_info(-1, &p->party);
return 0;
}
@@ -574,7 +572,7 @@ int mapif_parse_PartyLeave(int fd, int party_id, int account_id, int char_id)
int_party_check_lv(p);
}
if (party_check_empty(&p->party) == 0)
- mapif_party_info(-1, &p->party);
+ mapif_party_info(-1, &p->party, 0);
return 0;
}
}
@@ -679,7 +677,7 @@ int inter_party_parse_frommap(int fd) {
RFIFOHEAD(fd);
switch(RFIFOW(fd,0)) {
case 0x3020: mapif_parse_CreateParty(fd, (char*)RFIFOP(fd,4), RFIFOB(fd,28), RFIFOB(fd,29), (struct party_member*)RFIFOP(fd,30)); break;
- case 0x3021: mapif_parse_PartyInfo(fd, RFIFOL(fd,2)); break;
+ case 0x3021: mapif_parse_PartyInfo(fd, RFIFOL(fd,2), RFIFOL(fd,6)); break;
case 0x3022: mapif_parse_PartyAddMember(fd, RFIFOL(fd,4), (struct party_member*)RFIFOP(fd,8)); break;
case 0x3023: mapif_parse_PartyChangeOption(fd, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOW(fd,10), RFIFOW(fd,12)); break;
case 0x3024: mapif_parse_PartyLeave(fd, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10)); break;
diff --git a/src/char/inter.c b/src/char/inter.c
index 8d9cac99f..298ed38a5 100644
--- a/src/char/inter.c
+++ b/src/char/inter.c
@@ -52,7 +52,7 @@ int inter_send_packet_length[]={
int inter_recv_packet_length[]={
-1,-1, 7,-1, -1,13,36, 0, 0, 0, 0, 0, 0, 0, 0, 0, //0x3000-0x300f
6,-1, 0, 0, 0, 0, 0, 0, 10,-1, 0, 0, 0, 0, 0, 0, //0x3010-0x301f
- -1, 6,-1,14, 14,19, 6,-1, 14,14, 0, 0, 0, 0, 0, 0, //0x3020-0x302f
+ -1,10,-1,14, 14,19, 6,-1, 14,14, 0, 0, 0, 0, 0, 0, //0x3020-0x302f Party
-1, 6,-1,-1, 55,19, 6,-1, 14,-1,-1,-1, 18,19,186,-1, //0x3030-0x303f
5, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //0x3040-0x304f
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //0x3050-0x305f
diff --git a/src/char_sql/char.c b/src/char_sql/char.c
index 30800d95b..19ea01f66 100644
--- a/src/char_sql/char.c
+++ b/src/char_sql/char.c
@@ -1591,7 +1591,7 @@ int count_users(void)
// Writes char data to the buffer in the format used by the client.
// Used in packets 0x6b (chars info) and 0x6d (new char info)
// Returns the size
-#define MAX_CHAR_BUF 136 //Max size (for WFIFOHEAD calls)
+#define MAX_CHAR_BUF 140 //Max size (for WFIFOHEAD calls)
int mmo_char_tobuf(uint8* buffer, struct mmo_charstatus* p)
{
unsigned short offset = 0;
@@ -1626,7 +1626,7 @@ int mmo_char_tobuf(uint8* buffer, struct mmo_charstatus* p)
WBUFW(buf,50) = DEFAULT_WALK_SPEED; // p->speed;
WBUFW(buf,52) = p->class_;
WBUFW(buf,54) = p->hair;
- WBUFW(buf,56) = p->option&0x7E80020 ? 0 : p->weapon; //When the weapon is sent and your option is riding, the client crashes on login!?
+ WBUFW(buf,56) = p->option&0x20 ? 0 : p->weapon; //When the weapon is sent and your option is riding, the client crashes on login!?
WBUFW(buf,58) = p->base_level;
WBUFW(buf,60) = min(p->skill_point, INT16_MAX);
WBUFW(buf,62) = p->head_bottom;
@@ -1659,6 +1659,10 @@ int mmo_char_tobuf(uint8* buffer, struct mmo_charstatus* p)
WBUFL(buf,128) = p->robe;
offset += 4;
#endif
+#if PACKETVER >= 20110928
+ WBUFL(buf,132) = 0; // change slot feature (0 = disabled, otherwise enabled)
+ offset += 4;
+#endif
return 106+offset;
}
diff --git a/src/char_sql/int_party.c b/src/char_sql/int_party.c
index 07dbcdb7d..d62e9f6a7 100644
--- a/src/char_sql/int_party.c
+++ b/src/char_sql/int_party.c
@@ -42,7 +42,10 @@ static int int_party_check_lv(struct party_data *p) {
p->min_lv = UINT_MAX;
p->max_lv = 0;
for(i=0;i<MAX_PARTY;i++){
- if(!p->party.member[i].online)
+ /**
+ * - If not online OR if it's a family party and this is the child (doesn't affect exp range)
+ **/
+ if(!p->party.member[i].online || p->party.member[i].char_id == p->family )
continue;
lv=p->party.member[i].lv;
@@ -75,7 +78,13 @@ static void int_party_calc_state(struct party_data *p)
if(p->party.member[i].online)
p->party.count++;
}
- if(p->size == 3) {
+ if( p->size == 2 && ( char_child(p->party.member[0].char_id,p->party.member[1].char_id) || char_child(p->party.member[1].char_id,p->party.member[2].char_id) ) ) {
+ //Child should be able to share with either of their parents [RoM]
+ if(p->party.member[0].class_&0x2000) //first slot is the child?
+ p->family = p->party.member[0].char_id;
+ else
+ p->family = p->party.member[1].char_id;
+ } else if( p->size == 3 ) {
//Check Family State.
p->family = char_family(
p->party.member[0].char_id,
@@ -357,29 +366,29 @@ int mapif_party_created(int fd,int account_id,int char_id,struct party *p)
}
// ƒp[ƒeƒBî•ñŒ©‚‚©‚炸
-int mapif_party_noinfo(int fd,int party_id)
+static void mapif_party_noinfo(int fd, int party_id, int char_id)
{
- WFIFOHEAD(fd,8);
- WFIFOW(fd,0)=0x3821;
- WFIFOW(fd,2)=8;
- WFIFOL(fd,4)=party_id;
- WFIFOSET(fd,8);
- ShowWarning("int_party: info not found %d\n",party_id);
- return 0;
+ WFIFOHEAD(fd, 12);
+ WFIFOW(fd,0) = 0x3821;
+ WFIFOW(fd,2) = 12;
+ WFIFOL(fd,4) = char_id;
+ WFIFOL(fd,8) = party_id;
+ WFIFOSET(fd,12);
+ ShowWarning("int_party: info not found (party_id=%d char_id=%d)\n", party_id, char_id);
}
// ƒp[ƒeƒBî•ñ‚Ü‚Æ‚ß‘—‚è
-int mapif_party_info(int fd,struct party *p)
+static void mapif_party_info(int fd, struct party* p, int char_id)
{
- unsigned char buf[5+sizeof(struct party)];
- WBUFW(buf,0)=0x3821;
- WBUFW(buf,2)=4+sizeof(struct party);
- memcpy(buf+4,p,sizeof(struct party));
+ unsigned char buf[8 + sizeof(struct party)];
+ WBUFW(buf,0) = 0x3821;
+ WBUFW(buf,2) = 8 + sizeof(struct party);
+ WBUFL(buf,4) = char_id;
+ memcpy(WBUFP(buf,8), p, sizeof(struct party));
if(fd<0)
mapif_sendall(buf,WBUFW(buf,2));
else
mapif_send(fd,buf,WBUFW(buf,2));
- return 0;
}
// ƒp[ƒeƒBƒƒ“ƒo’ljÁ‰Â”Û
int mapif_party_memberadded(int fd, int party_id, int account_id, int char_id, int flag) {
@@ -506,8 +515,8 @@ int mapif_parse_CreateParty(int fd, char *name, int item, int item2, struct part
//Add party to db
int_party_calc_state(p);
idb_put(party_db_, p->party.party_id, p);
+ mapif_party_info(fd, &p->party, 0);
mapif_party_created(fd,leader->account_id,leader->char_id,&p->party);
- mapif_party_info(fd,&p->party);
} else { //Failed to create party.
aFree(p);
mapif_party_created(fd,leader->account_id,leader->char_id,NULL);
@@ -516,16 +525,15 @@ int mapif_parse_CreateParty(int fd, char *name, int item, int item2, struct part
return 0;
}
// ƒp[ƒeƒBî•ñ—v‹
-int mapif_parse_PartyInfo(int fd,int party_id)
+static void mapif_parse_PartyInfo(int fd, int party_id, int char_id)
{
struct party_data *p;
p = inter_party_fromsql(party_id);
if (p)
- mapif_party_info(fd,&p->party);
+ mapif_party_info(fd, &p->party, char_id);
else
- mapif_party_noinfo(fd,party_id);
- return 0;
+ mapif_party_noinfo(fd, party_id, char_id);
}
// ƒp[ƒeƒB’ljÁ—v‹
int mapif_parse_PartyAddMember(int fd, int party_id, struct party_member *member)
@@ -550,7 +558,7 @@ int mapif_parse_PartyAddMember(int fd, int party_id, struct party_member *member
p->party.member[i].leader = 0;
if (p->party.member[i].online) p->party.count++;
p->size++;
- if (p->size == 3) //Check family state.
+ if (p->size == 2 || p->size == 3) // Check family state. And also accept either of their Parents. [RoM]
int_party_calc_state(p);
else //Check even share range.
if (member->lv < p->min_lv || member->lv > p->max_lv || p->family) {
@@ -558,8 +566,8 @@ int mapif_parse_PartyAddMember(int fd, int party_id, struct party_member *member
int_party_check_lv(p);
}
+ mapif_party_info(-1, &p->party, 0);
mapif_party_memberadded(fd, party_id, member->account_id, member->char_id, 0);
- mapif_party_info(-1, &p->party);
inter_party_tosql(&p->party, PS_ADDMEMBER, i);
return 0;
@@ -633,7 +641,7 @@ int mapif_parse_PartyLeave(int fd, int party_id, int account_id, int char_id)
}
if (party_check_empty(p) == 0)
- mapif_party_info(-1,&p->party);
+ mapif_party_info(-1, &p->party, 0);
return 0;
}
// When member goes to other map or levels up.
@@ -746,7 +754,7 @@ int inter_party_parse_frommap(int fd)
RFIFOHEAD(fd);
switch(RFIFOW(fd,0)) {
case 0x3020: mapif_parse_CreateParty(fd, (char*)RFIFOP(fd,4), RFIFOB(fd,28), RFIFOB(fd,29), (struct party_member*)RFIFOP(fd,30)); break;
- case 0x3021: mapif_parse_PartyInfo(fd, RFIFOL(fd,2)); break;
+ case 0x3021: mapif_parse_PartyInfo(fd, RFIFOL(fd,2), RFIFOL(fd,6)); break;
case 0x3022: mapif_parse_PartyAddMember(fd, RFIFOL(fd,4), (struct party_member*)RFIFOP(fd,8)); break;
case 0x3023: mapif_parse_PartyChangeOption(fd, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOW(fd,10), RFIFOW(fd,12)); break;
case 0x3024: mapif_parse_PartyLeave(fd, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10)); break;
diff --git a/src/char_sql/int_storage.c b/src/char_sql/int_storage.c
index 0719685ae..e4d2395f1 100644
--- a/src/char_sql/int_storage.c
+++ b/src/char_sql/int_storage.c
@@ -17,7 +17,7 @@
#define STORAGE_MEMINC 16
-/// Save guild_storage data to sql
+/// Save storage data to sql
int storage_tosql(int account_id, struct storage_data* p)
{
memitemdata_to_sql(p->items, MAX_STORAGE, account_id, TABLE_STORAGE);
@@ -25,7 +25,7 @@ int storage_tosql(int account_id, struct storage_data* p)
}
#ifndef TXT_SQL_CONVERT
-/// Load guild_storage data to mem
+/// Load storage data to mem
int storage_fromsql(int account_id, struct storage_data* p)
{
StringBuf buf;
diff --git a/src/char_sql/inter.c b/src/char_sql/inter.c
index 97c48bdf1..50f05f6a3 100644
--- a/src/char_sql/inter.c
+++ b/src/char_sql/inter.c
@@ -47,7 +47,7 @@ char main_chat_nick[16] = "Main";
int inter_recv_packet_length[] = {
-1,-1, 7,-1, -1,13,36, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 3000-
6,-1, 0, 0, 0, 0, 0, 0, 10,-1, 0, 0, 0, 0, 0, 0, // 3010-
- -1, 6,-1,14, 14,19, 6,-1, 14,14, 0, 0, 0, 0, 0, 0, // 3020-
+ -1,10,-1,14, 14,19, 6,-1, 14,14, 0, 0, 0, 0, 0, 0, // 3020- Party
-1, 6,-1,-1, 55,19, 6,-1, 14,-1,-1,-1, 18,19,186,-1, // 3030-
5, 9, 0, 0, 0, 0, 0, 0, 7, 6,10,10, 10,-1, 0, 0, // 3040-
-1,-1,10,10, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 3050- Auction System [Zephyrus]
@@ -580,7 +580,6 @@ int mapif_parse_WisToGM(int fd)
{
unsigned char buf[2048]; // 0x3003/0x3803 <packet_len>.w <wispname>.24B <min_gm_level>.w <message>.?B
- ShowDebug("Sent packet back!\n");
memcpy(WBUFP(buf,0), RFIFOP(fd,0), RFIFOW(fd,2));
WBUFW(buf, 0) = 0x3803;
mapif_sendall(buf, RFIFOW(fd,2));
diff --git a/src/common/core.c b/src/common/core.c
index d528861c2..5b00f228b 100644
--- a/src/common/core.c
+++ b/src/common/core.c
@@ -180,26 +180,22 @@ const char* get_svn_revision(void)
/*======================================
* CORE : Display title
+ * ASCII By CalciumKid 1/12/2011
*--------------------------------------*/
static void display_title(void)
{
//ClearScreen(); // clear screen and go up/left (0, 0 position in text)
ShowMessage("\n");
- ShowMessage(""CL_WTBL" (=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=)"CL_CLL""CL_NORMAL"\n");
- ShowMessage(""CL_XXBL" ("CL_BT_YELLOW" eAthena Development Team presents "CL_XXBL")"CL_CLL""CL_NORMAL"\n");
- ShowMessage(""CL_XXBL" ("CL_BOLD" ______ __ __ "CL_XXBL")"CL_CLL""CL_NORMAL"\n");
- ShowMessage(""CL_XXBL" ("CL_BOLD" /\\ _ \\/\\ \\__/\\ \\ "CL_XXBL")"CL_CLL""CL_NORMAL"\n");
- ShowMessage(""CL_XXBL" ("CL_BOLD" __\\ \\ \\_\\ \\ \\ ,_\\ \\ \\___ __ ___ __ "CL_XXBL")"CL_CLL""CL_NORMAL"\n");
- ShowMessage(""CL_XXBL" ("CL_BOLD" /'__`\\ \\ __ \\ \\ \\/\\ \\ _ `\\ /'__`\\/' _ `\\ /'__`\\ "CL_XXBL")"CL_CLL""CL_NORMAL"\n");
- ShowMessage(""CL_XXBL" ("CL_BOLD" /\\ __/\\ \\ \\/\\ \\ \\ \\_\\ \\ \\ \\ \\/\\ __//\\ \\/\\ \\/\\ \\_\\.\\_ "CL_XXBL")"CL_CLL""CL_NORMAL"\n");
- ShowMessage(""CL_XXBL" ("CL_BOLD" \\ \\____\\\\ \\_\\ \\_\\ \\__\\\\ \\_\\ \\_\\ \\____\\ \\_\\ \\_\\ \\__/.\\_\\ "CL_XXBL")"CL_CLL""CL_NORMAL"\n");
- ShowMessage(""CL_XXBL" ("CL_BOLD" \\/____/ \\/_/\\/_/\\/__/ \\/_/\\/_/\\/____/\\/_/\\/_/\\/__/\\/_/ "CL_XXBL")"CL_CLL""CL_NORMAL"\n");
- ShowMessage(""CL_XXBL" ("CL_BOLD" _ _ _ _ _ _ _ _ _ _ _ _ _ "CL_XXBL")"CL_CLL""CL_NORMAL"\n");
- ShowMessage(""CL_XXBL" ("CL_BOLD" / \\ / \\ / \\ / \\ / \\ / \\ / \\ / \\ / \\ / \\ / \\ / \\ / \\ "CL_XXBL")"CL_CLL""CL_NORMAL"\n");
- ShowMessage(""CL_XXBL" ("CL_BOLD" ( e | n | g | l | i | s | h ) ( A | t | h | e | n | a ) "CL_XXBL")"CL_CLL""CL_NORMAL"\n");
- ShowMessage(""CL_XXBL" ("CL_BOLD" \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ "CL_XXBL")"CL_CLL""CL_NORMAL"\n");
- ShowMessage(""CL_XXBL" ("CL_BOLD" "CL_XXBL")"CL_CLL""CL_NORMAL"\n");
- ShowMessage(""CL_WTBL" (=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=)"CL_CLL""CL_NORMAL"\n\n");
+ ShowMessage(""CL_PASS" "CL_BOLD" "CL_PASS""CL_CLL""CL_NORMAL"\n");
+ ShowMessage(""CL_PASS" "CL_BT_WHITE" RAthena Development Team presents "CL_PASS""CL_CLL""CL_NORMAL"\n");
+ ShowMessage(""CL_PASS" "CL_BOLD" ____ ___ __ __ "CL_PASS""CL_CLL""CL_NORMAL"\n");
+ ShowMessage(""CL_PASS" "CL_BOLD" / __ \\/ | / /_/ /_ ___ ____ ____ _ "CL_PASS""CL_CLL""CL_NORMAL"\n");
+ ShowMessage(""CL_PASS" "CL_BOLD" / /_/ / /| |/ __/ __ \\/ _ \\/ __ \\/ __ `/ "CL_PASS""CL_CLL""CL_NORMAL"\n");
+ ShowMessage(""CL_PASS" "CL_BOLD" / _, _/ ___ / /_/ / / / __/ / / / /_/ / "CL_PASS""CL_CLL""CL_NORMAL"\n");
+ ShowMessage(""CL_PASS" "CL_BOLD" /_/ |_/_/ |_\\__/_/ /_/\\___/_/ /_/\\___,_/ "CL_PASS""CL_CLL""CL_NORMAL"\n");
+ ShowMessage(""CL_PASS" "CL_BOLD" "CL_PASS""CL_CLL""CL_NORMAL"\n");
+ ShowMessage(""CL_PASS" "CL_GREEN" http://rathena.org/board/ "CL_PASS""CL_CLL""CL_NORMAL"\n");
+ ShowMessage(""CL_PASS" "CL_BOLD" "CL_PASS""CL_CLL""CL_NORMAL"\n");
ShowInfo("SVN Revision: '"CL_WHITE"%s"CL_RESET"'.\n", get_svn_revision());
}
diff --git a/src/common/mmo.h b/src/common/mmo.h
index 49a738b08..f8ef63390 100644
--- a/src/common/mmo.h
+++ b/src/common/mmo.h
@@ -41,10 +41,11 @@
// 20100803 - 2010-08-03aRagexeRE+ - 0x6b, 0x6d, 0x827, 0x828, 0x829, 0x82a, 0x82b, 0x82c, 0x842, 0x843
// 20101124 - 2010-11-24aRagexeRE+ - 0x856, 0x857, 0x858
// 20110111 - 2011-01-11aRagexeRE+ - 0x6b, 0x6d
+// 20110928 - 2011-09-28aRagexeRE+ - 0x6b, 0x6d
#ifndef PACKETVER
- #define PACKETVER 20081126
- //#define PACKETVER 20100707
+ #define PACKETVER 20110609
+ //#define PACKETVER 20100730
#endif
// backward compatible PACKETVER 8 and 9
#if PACKETVER == 8
@@ -175,6 +176,7 @@ enum item_types {
IT_UNKNOWN2,//9
IT_AMMO, //10
IT_DELAYCONSUME,//11
+ IT_THROWWEAPON= 17,//17
IT_CASH = 18,
IT_MAX
};
@@ -645,21 +647,27 @@ enum {
JOB_STAR_GLADIATOR,
JOB_STAR_GLADIATOR2,
JOB_SOUL_LINKER,
-
+ /**
+ * 3.1 (2.1)
+ **/
JOB_RUNE_KNIGHT = 4054,
JOB_WARLOCK,
JOB_RANGER,
- JOB_ARCHBISHOP,
+ JOB_ARCH_BISHOP,
JOB_MECHANIC,
JOB_GUILLOTINE_CROSS,
-
- JOB_RUNE_KNIGHT_H,
- JOB_WARLOCK_H,
- JOB_RANGER_H,
- JOB_ARCHBISHOP_H,
- JOB_MECHANIC_H,
- JOB_GUILLOTINE_CROSS_H,
-
+ /**
+ * 3.1 (2.1 Trans)
+ **/
+ JOB_RUNE_KNIGHT_T,
+ JOB_WARLOCK_T,
+ JOB_RANGER_T,
+ JOB_ARCH_BISHOP_T,
+ JOB_MECHANIC_T,
+ JOB_GUILLOTINE_CROSS_T,
+ /**
+ * 3.2 (2.2)
+ **/
JOB_ROYAL_GUARD,
JOB_SORCERER,
JOB_MINSTREL,
@@ -667,42 +675,27 @@ enum {
JOB_SURA,
JOB_GENETIC,
JOB_SHADOW_CHASER,
-
- JOB_ROYAL_GUARD_H,
- JOB_SORCERER_H,
- JOB_MINSTREL_H,
- JOB_WANDERER_H,
- JOB_SURA_H,
- JOB_GENETIC_H,
- JOB_SHADOW_CHASER_H,
-
+ /**
+ * 3.2 (2.2 Trans)
+ **/
+ JOB_ROYAL_GUARD_T,
+ JOB_SORCERER_T,
+ JOB_MINSTREL_T,
+ JOB_WANDERER_T,
+ JOB_SURA_T,
+ JOB_GENETIC_T,
+ JOB_SHADOW_CHASER_T,
+ /**
+ * 3.x Mounts / Vehicles
+ **/
JOB_RUNE_KNIGHT2,
- JOB_RUNE_KNIGHT_H2,
+ JOB_RUNE_KNIGHT_T2,
JOB_ROYAL_GUARD2,
- JOB_ROYAL_GUARD_H2,
+ JOB_ROYAL_GUARD_T2,
JOB_RANGER2,
- JOB_RANGER_H2,
+ JOB_RANGER_T2,
JOB_MECHANIC2,
- JOB_MECHANIC_H2,
-
- JOB_BABY_RUNE = 4096,
- JOB_BABY_WARLOCK,
- JOB_BABY_RANGER,
- JOB_BABY_BISHOP,
- JOB_BABY_MECHANIC,
- JOB_BABY_CROSS,
- JOB_BABY_GUARD,
- JOB_BABY_SORCERER,
- JOB_BABY_MINSTREL,
- JOB_BABY_WANDERER,
- JOB_BABY_SURA,
- JOB_BABY_GENETIC,
- JOB_BABY_CHASER,
-
- JOB_BABY_RUNE2,
- JOB_BABY_GUARD2,
- JOB_BABY_RANGER2,
- JOB_BABY_MECHANIC2,
+ JOB_MECHANIC_T2,
JOB_MAX,
};
diff --git a/src/common/showmsg.c b/src/common/showmsg.c
index fc1badd26..a69c73ba2 100644
--- a/src/common/showmsg.c
+++ b/src/common/showmsg.c
@@ -4,6 +4,8 @@
#include "../common/cbasetypes.h"
#include "../common/strlib.h" // StringBuf
#include "showmsg.h"
+#include "core.h" //[Ind] - For SERVER_TYPE
+#include "version.h" //[Ind] - For SERVER_TYPE values
#include <stdio.h>
#include <string.h>
@@ -51,6 +53,8 @@ int stdout_with_ansisequence = 0;
int msg_silent = 0; //Specifies how silent the console is.
+int console_msg_log = 0;//[Ind] msg error logging
+
///////////////////////////////////////////////////////////////////////////////
/// static/dynamic buffer for the messages
@@ -684,6 +688,29 @@ int _vShowMessage(enum msg_type flag, const char *string, va_list ap)
return 1;
}
if(
+ ( flag == MSG_WARNING && console_msg_log&1 ) ||
+ ( ( flag == MSG_ERROR || flag == MSG_SQL ) && console_msg_log&2 ) ||
+ ( flag == MSG_DEBUG && console_msg_log&4 ) ) {//[Ind]
+ FILE *log = NULL;
+ if( (log = fopen(SERVER_TYPE == ATHENA_SERVER_MAP ? "./log/map-msg_log.log" : "./log/unknown.log","a+")) ) {
+ char timestring[255];
+ time_t curtime;
+ time(&curtime);
+ strftime(timestring, 254, "%m/%d/%Y %H:%M:%S", localtime(&curtime));
+ fprintf(log,"(%s) [ %s ] : ",
+ timestring,
+ flag == MSG_WARNING ? "Warning" :
+ flag == MSG_ERROR ? "Error" :
+ flag == MSG_SQL ? "SQL Error" :
+ flag == MSG_DEBUG ? "Debug" :
+ "Unknown");
+ va_copy(apcopy, ap);
+ vfprintf(log,string,apcopy);
+ va_end(apcopy);
+ fclose(log);
+ }
+ }
+ if(
(flag == MSG_INFORMATION && msg_silent&1) ||
(flag == MSG_STATUS && msg_silent&2) ||
(flag == MSG_NOTICE && msg_silent&4) ||
diff --git a/src/common/showmsg.h b/src/common/showmsg.h
index 998296b66..5f80a4312 100644
--- a/src/common/showmsg.h
+++ b/src/common/showmsg.h
@@ -67,6 +67,7 @@
extern int stdout_with_ansisequence; //If the color ansi sequences are to be used. [flaviojs]
extern int msg_silent; //Specifies how silent the console is. [Skotlex]
+extern int console_msg_log; //Specifies what error messages to log. [Ind]
extern char timestamp_format[20]; //For displaying Timestamps [Skotlex]
enum msg_type {
diff --git a/src/common/socket.c b/src/common/socket.c
index b522ac607..4f7afd8fd 100644
--- a/src/common/socket.c
+++ b/src/common/socket.c
@@ -647,6 +647,14 @@ int WFIFOSET(int fd, size_t len)
ShowFatalError("WFIFOSET: Packet 0x%x is too big. (len=%u, max=%u)\n", (*(uint16*)(s->wdata + s->wdata_size)), (unsigned int)len, 0xFFFF);
exit(EXIT_FAILURE);
}
+ else if( len == 0 )
+ {
+ // abuses the fact, that the code that did WFIFOHEAD(fd,0), already wrote
+ // the packet type into memory, even if it could have overwritten vital data
+ // this can happen when a new packet was added on map-server, but packet len table was not updated
+ ShowWarning("WFIFOSET: Attempted to send zero-length packet, most likely 0x%04x (please report this).\n", WFIFOW(fd,0));
+ return 0;
+ }
if( !s->flag.server && len > socket_max_client_packet )
{// see declaration of socket_max_client_packet for details
@@ -1222,6 +1230,7 @@ int socket_getips(uint32* ips, int max)
void socket_init(void)
{
char *SOCKET_CONF_FILENAME = "conf/packet_athena.conf";
+ unsigned int rlim_cur = FD_SETSIZE;
#ifdef WIN32
{// Start up windows networking
@@ -1265,6 +1274,7 @@ void socket_init(void)
if( err == EPERM )
errmsg = "permission denied";
ShowWarning("socket_init: failed to set socket limit to %d, setting to maximum allowed (original limit=%d, current limit=%d, maximum allowed=%d, error=%s).\n", FD_SETSIZE, rlim_ori, (int)rlp.rlim_cur, (int)rlp.rlim_max, errmsg);
+ rlim_cur = rlp.rlim_cur;
}
}
}
@@ -1294,6 +1304,8 @@ void socket_init(void)
add_timer_func_list(connect_check_clear, "connect_check_clear");
add_timer_interval(gettick()+1000, connect_check_clear, 0, 0, 5*60*1000);
#endif
+
+ ShowInfo("Server supports up to '"CL_WHITE"%u"CL_RESET"' concurrent connections.\n", rlim_cur);
}
diff --git a/src/common/sql.h b/src/common/sql.h
index 5b318ab4d..898e2c778 100644
--- a/src/common/sql.h
+++ b/src/common/sql.h
@@ -14,7 +14,10 @@
#define SQL_SUCCESS 0
#define SQL_NO_DATA 100
-
+// macro definition to determine whether the mySQL engine is running on InnoDB (rather than MyISAM)
+// uncomment this line if the your mySQL tables have been changed to run on InnoDB
+// this macro will adjust how logs are recorded in the database to accommodate the change
+//#define SQL_INNODB
/// Data type identifier.
/// String, enum and blob data types need the buffer length specified.
diff --git a/src/map/Makefile.in b/src/map/Makefile.in
index 09e92dde2..492300c3d 100644
--- a/src/map/Makefile.in
+++ b/src/map/Makefile.in
@@ -34,7 +34,9 @@ MAP_H = map.h chrif.h clif.h pc.h status.h npc.h \
storage.h skill.h atcommand.h battle.h battleground.h \
intif.h trade.h party.h vending.h guild.h pet.h \
log.h mail.h date.h unit.h homunculus.h mercenary.h quest.h instance.h mapreg.h \
- buyingstore.h searchstore.h duel.h
+ buyingstore.h searchstore.h duel.h \
+ config/Core.h config/Renewal.h config/Secure.h config/Data/Const.h \
+ config/Skills/General.h config/Skills/Mage_Classes.h config/Skills/Swordsman_Classes.h
HAVE_MYSQL=@HAVE_MYSQL@
ifeq ($(HAVE_MYSQL),yes)
diff --git a/src/map/atcommand.c b/src/map/atcommand.c
index b1a395afa..9290f844a 100644
--- a/src/map/atcommand.c
+++ b/src/map/atcommand.c
@@ -1255,7 +1255,7 @@ ACMD_FUNC(jobchange)
if (!message || !*message || sscanf(message, "%d %d", &job, &upper) < 1)
{
int i, found = 0;
- const struct { char name[22]; int id; } jobs[] = {
+ const struct { char name[24]; int id; } jobs[] = {
{ "novice", 0 },
{ "swordsman", 1 },
{ "mage", 2 },
@@ -1332,43 +1332,30 @@ ACMD_FUNC(jobchange)
{ "soul linker", 4049 },
{ "rune knight", 4054 },
{ "warlock", 4055 },
- { "ranger", 4056 },
+ { "ranger", 4056 },
{ "arch bishop", 4057 },
{ "mechanic", 4058 },
- { "guillotine cross", 4059 },
- { "rune knight2", 4060 },
- { "warlock2", 4061 },
- { "ranger2", 4062 },
- { "arch bishop2", 4063 },
- { "mechanic2", 4064 },
- { "guillotine cross2", 4065 },
+ { "guillotine", 4059 },
+ { "rune knight (Trans)", 4060 },
+ { "warlock (Trans)", 4061 },
+ { "ranger (Trans)", 4062 },
+ { "arch bishop (Trans)", 4063 },
+ { "mechanic (Trans)", 4064 },
+ { "guillotine (Trans)", 4065 },
{ "royal guard", 4066 },
{ "sorcerer", 4067 },
{ "minstrel", 4068 },
{ "wanderer", 4069 },
- { "sura", 4070 },
+ { "sura", 4070 },
{ "genetic", 4071 },
{ "shadow chaser", 4072 },
- { "royal guard2", 4073 },
- { "sorcerer2", 4074 },
- { "minstrel2", 4075 },
- { "wanderer2", 4076 },
- { "sura2", 4077 },
- { "genetic2", 4078 },
- { "shadow chaser2", 4079 },
- { "baby rune knight", 4096 },
- { "baby warlock", 4097 },
- { "baby ranger", 4098 },
- { "baby arch bishop", 4099 },
- { "baby mechanic", 4100 },
- { "baby guillotine cross", 4101 },
- { "baby royal guard", 4102 },
- { "baby sorcerer", 4103 },
- { "baby minstrel", 4104 },
- { "baby wanderer", 4105 },
- { "baby sura", 4106 },
- { "baby genetic", 4107 },
- { "baby shadow chaser", 4108 },
+ { "royal guard (Trans)", 4073 },
+ { "sorcerer (Trans)", 4074 },
+ { "minstrel (Trans)", 4075 },
+ { "wanderer (Trans)", 4076 },
+ { "sura (Trans)", 4077 },
+ { "genetic (Trans)", 4078 },
+ { "shadow chaser (Trans)", 4079 },
};
for (i=0; i < ARRAYLENGTH(jobs); i++) {
@@ -1393,50 +1380,53 @@ ACMD_FUNC(jobchange)
clif_displaymessage(fd, "----- High Novice / High 1st Class -----");
clif_displaymessage(fd, "4001 Novice High 4002 Swordman High 4003 Mage High 4004 Archer High");
clif_displaymessage(fd, "4005 Acolyte High 4006 Merchant High 4007 Thief High");
- clif_displaymessage(fd, "----- Transcendent Class -----");
+ clif_displaymessage(fd, "----- Transcendent 2nd Class -----");
clif_displaymessage(fd, "4008 Lord Knight 4009 High Priest 4010 High Wizard 4011 Whitesmith");
clif_displaymessage(fd, "4012 Sniper 4013 Assassin Cross 4015 Paladin 4016 Champion");
clif_displaymessage(fd, "4017 Professor 4018 Stalker 4019 Creator 4020 Clown");
clif_displaymessage(fd, "4021 Gypsy");
- clif_displaymessage(fd, "----- 3rd Class (Regular 3rd) -----");
+ clif_displaymessage(fd, "----- 3rd Class (Regular to 3rd) -----");
clif_displaymessage(fd, "4054 Rune Knight 4055 Warlock 4056 Ranger 4057 Arch Bishop");
clif_displaymessage(fd, "4058 Mechanic 4059 Guillotine Cross 4066 Royal Guard 4067 Sorcerer");
clif_displaymessage(fd, "4068 Minstrel 4069 Wanderer 4070 Sura 4071 Genetic");
clif_displaymessage(fd, "4072 Shadow Chaser");
- clif_displaymessage(fd, "----- 3rd Class (Trans 3rd) -----");
+ clif_displaymessage(fd, "----- 3rd Class (Transcendent to 3rd) -----");
clif_displaymessage(fd, "4060 Rune Knight 4061 Warlock 4062 Ranger 4063 Arch Bishop");
clif_displaymessage(fd, "4064 Mechanic 4065 Guillotine Cross 4073 Royal Guard 4074 Sorcerer");
clif_displaymessage(fd, "4075 Minstrel 4076 Wanderer 4077 Sura 4078 Genetic");
clif_displaymessage(fd, "4079 Shadow Chaser");
clif_displaymessage(fd, "----- Expanded Class -----");
- clif_displaymessage(fd, " 23 Super Novice 24 Gunslinger 25 Ninja 4046 Taekwon");
- clif_displaymessage(fd, "4047 Star Gladiator 4049 Soul Linker");
- clif_displaymessage(fd, "---- Baby 1st / 2nd Class ----");
+ clif_displaymessage(fd, " 23 Super Novice 24 Gunslinger 25 Ninja 26 Xmas");
+ clif_displaymessage(fd, " 27 Summer 4046 Taekwon 4047 Star Gladiator 4049 Soul Linker");
+ //clif_displaymessage(fd, "4050 Gangsi 4051 Death Knight 4052 Dark Collector");
+ clif_displaymessage(fd, "---- 1st And 2nd Baby Class ----");
clif_displaymessage(fd, "4023 Baby Novice 4024 Baby Swordsman 4025 Baby Mage 4026 Baby Archer");
clif_displaymessage(fd, "4027 Baby Acolyte 4028 Baby Merchant 4029 Baby Thief 4030 Baby Knight");
clif_displaymessage(fd, "4031 Baby Priest 4032 Baby Wizard 4033 Baby Blacksmith 4034 Baby Hunter");
clif_displaymessage(fd, "4035 Baby Assassin 4037 Baby Crusader 4038 Baby Monk 4039 Baby Sage");
clif_displaymessage(fd, "4040 Baby Rogue 4041 Baby Alchemist 4042 Baby Bard 4043 Baby Dancer");
clif_displaymessage(fd, "4045 Super Baby");
- clif_displaymessage(fd, "---- Baby 3rd Class ----");
- clif_displaymessage(fd, "4096 Baby Rune Knight 4097 Baby Warlock 4098 Baby Ranger");
- clif_displaymessage(fd, "4099 Baby Arch Bishop 4100 Baby Mechanic 4101 Baby Guillotine Cross");
- clif_displaymessage(fd, "4102 Baby Royal Guard 4103 Baby Sorcerer 4104 Baby Minstrel");
- clif_displaymessage(fd, "4105 Baby Wanderer 4106 Baby Sura 4107 Baby Genetic");
- clif_displaymessage(fd, "4108 Baby Shadow Chaser");
- clif_displaymessage(fd, "[upper]: -1 (default) to automatically determine the 'level', 0 to force normal job, 1 to force high job.");
+ //clif_displaymessage(fd, "---- 3rd Baby Class ----");
+ //clif_displaymessage(fd, "4096 Baby Rune Knight 4097 Baby Warlock 4098 Baby Ranger");
+ //clif_displaymessage(fd, "4099 Baby Arch Bishop 4100 Baby Mechanic 4101 Baby Guillotine Cross");
+ //clif_displaymessage(fd, "4102 Baby Royal Guard 4103 Baby Sorcerer 4104 Baby Minstrel");
+ //clif_displaymessage(fd, "4105 Baby Wanderer 4106 Baby Sura 4107 Baby Genetic");
+ //clif_displaymessage(fd, "4108 Baby Shadow Chaser");
+ //clif_displaymessage(fd, "---- Mounts, Modes, And Others ----");
+ //clif_displaymessage(fd, " 13 Knight (Peco) 21 Crusader (Peco) 22 Wedding 26 Christmas");
+ //clif_displaymessage(fd, " 27 Summer 4014 Lord Knight (Peco) 4022 Paladin (Peco) 4036 Baby Knight (Peco)");
+ //clif_displaymessage(fd, "4044 Baby Crusader (Peco) 4048 Star Gladiator (Union) 4080 Rune Knight (Dragon)");
+ //clif_displaymessage(fd, "4081 Rune Knight Trans (Dragon) 4082 Royal Guard (Gryphon)");
+ //clif_displaymessage(fd, "4083 Royal Guard Trans (Gryphon) 4084 Ranger (Warg) 4085 Ranger Trans (Warg)");
+ //clif_displaymessage(fd, "4086 Mechanic (Mado) 4087 Mechanic Trans (Mado)");
return -1;
}
}
- switch(job)
- {
- case 13: case 21: case 4014: case 4022: case 4036:
- case 4044: case 4080: case 4081: case 4082: case 4083:
- case 4084: case 4085: case 4086: case 4087: case 4109:
- case 4110: case 4111: case 4112:
- return 0; // Deny direct transformation into dummy jobs
- }
+ if (job == 13 || job == 21 || job == 22 || job == 26 || job == 27
+ || job == 4014 || job == 4022 || job == 4036 || job == 4044 || job == 4048
+ ) // Deny direct transformation into dummy jobs
+ return 0;
if (pcdb_checkid(job))
{
@@ -1448,49 +1438,56 @@ ACMD_FUNC(jobchange)
}
} else {
clif_displaymessage(fd, "Please, enter job ID (usage: @job/@jobchange <job name/ID>).");
- clif_displaymessage(fd, "----- Novice / 1st Class -----");
- clif_displaymessage(fd, " 0 Novice 1 Swordman 2 Mage 3 Archer");
- clif_displaymessage(fd, " 4 Acolyte 5 Merchant 6 Thief");
- clif_displaymessage(fd, "----- 2nd Class -----");
- clif_displaymessage(fd, " 7 Knight 8 Priest 9 Wizard 10 Blacksmith");
- clif_displaymessage(fd, " 11 Hunter 12 Assassin 14 Crusader 15 Monk");
- clif_displaymessage(fd, " 16 Sage 17 Rogue 18 Alchemist 19 Bard");
- clif_displaymessage(fd, " 20 Dancer");
- clif_displaymessage(fd, "----- High Novice / High 1st Class -----");
- clif_displaymessage(fd, "4001 Novice High 4002 Swordman High 4003 Mage High 4004 Archer High");
- clif_displaymessage(fd, "4005 Acolyte High 4006 Merchant High 4007 Thief High");
- clif_displaymessage(fd, "----- Transcendent Class -----");
- clif_displaymessage(fd, "4008 Lord Knight 4009 High Priest 4010 High Wizard 4011 Whitesmith");
- clif_displaymessage(fd, "4012 Sniper 4013 Assassin Cross 4015 Paladin 4016 Champion");
- clif_displaymessage(fd, "4017 Professor 4018 Stalker 4019 Creator 4020 Clown");
- clif_displaymessage(fd, "4021 Gypsy");
- clif_displaymessage(fd, "----- 3rd Class (Regular 3rd) -----");
- clif_displaymessage(fd, "4054 Rune Knight 4055 Warlock 4056 Ranger 4057 Arch Bishop");
- clif_displaymessage(fd, "4058 Mechanic 4059 Guillotine Cross 4066 Royal Guard 4067 Sorcerer");
- clif_displaymessage(fd, "4068 Minstrel 4069 Wanderer 4070 Sura 4071 Genetic");
- clif_displaymessage(fd, "4072 Shadow Chaser");
- clif_displaymessage(fd, "----- 3rd Class (Trans 3rd) -----");
- clif_displaymessage(fd, "4060 Rune Knight 4061 Warlock 4062 Ranger 4063 Arch Bishop");
- clif_displaymessage(fd, "4064 Mechanic 4065 Guillotine Cross 4073 Royal Guard 4074 Sorcerer");
- clif_displaymessage(fd, "4075 Minstrel 4076 Wanderer 4077 Sura 4078 Genetic");
- clif_displaymessage(fd, "4079 Shadow Chaser");
- clif_displaymessage(fd, "----- Expanded Class -----");
- clif_displaymessage(fd, " 23 Super Novice 24 Gunslinger 25 Ninja 4046 Taekwon");
- clif_displaymessage(fd, "4047 Star Gladiator 4049 Soul Linker");
- clif_displaymessage(fd, "---- Baby 1st / 2nd Class ----");
- clif_displaymessage(fd, "4023 Baby Novice 4024 Baby Swordsman 4025 Baby Mage 4026 Baby Archer");
- clif_displaymessage(fd, "4027 Baby Acolyte 4028 Baby Merchant 4029 Baby Thief 4030 Baby Knight");
- clif_displaymessage(fd, "4031 Baby Priest 4032 Baby Wizard 4033 Baby Blacksmith 4034 Baby Hunter");
- clif_displaymessage(fd, "4035 Baby Assassin 4037 Baby Crusader 4038 Baby Monk 4039 Baby Sage");
- clif_displaymessage(fd, "4040 Baby Rogue 4041 Baby Alchemist 4042 Baby Bard 4043 Baby Dancer");
- clif_displaymessage(fd, "4045 Super Baby");
- clif_displaymessage(fd, "---- Baby 3rd Class ----");
- clif_displaymessage(fd, "4096 Baby Rune Knight 4097 Baby Warlock 4098 Baby Ranger");
- clif_displaymessage(fd, "4099 Baby Arch Bishop 4100 Baby Mechanic 4101 Baby Guillotine Cross");
- clif_displaymessage(fd, "4102 Baby Royal Guard 4103 Baby Sorcerer 4104 Baby Minstrel");
- clif_displaymessage(fd, "4105 Baby Wanderer 4106 Baby Sura 4107 Baby Genetic");
- clif_displaymessage(fd, "4108 Baby Shadow Chaser");
- clif_displaymessage(fd, "[upper]: -1 (default) to automatically determine the 'level', 0 to force normal job, 1 to force high job.");
+ clif_displaymessage(fd, "----- Novice / 1st Class -----");
+ clif_displaymessage(fd, " 0 Novice 1 Swordman 2 Mage 3 Archer");
+ clif_displaymessage(fd, " 4 Acolyte 5 Merchant 6 Thief");
+ clif_displaymessage(fd, "----- 2nd Class -----");
+ clif_displaymessage(fd, " 7 Knight 8 Priest 9 Wizard 10 Blacksmith");
+ clif_displaymessage(fd, " 11 Hunter 12 Assassin 14 Crusader 15 Monk");
+ clif_displaymessage(fd, " 16 Sage 17 Rogue 18 Alchemist 19 Bard");
+ clif_displaymessage(fd, " 20 Dancer");
+ clif_displaymessage(fd, "----- High Novice / High 1st Class -----");
+ clif_displaymessage(fd, "4001 Novice High 4002 Swordman High 4003 Mage High 4004 Archer High");
+ clif_displaymessage(fd, "4005 Acolyte High 4006 Merchant High 4007 Thief High");
+ clif_displaymessage(fd, "----- Transcendent 2nd Class -----");
+ clif_displaymessage(fd, "4008 Lord Knight 4009 High Priest 4010 High Wizard 4011 Whitesmith");
+ clif_displaymessage(fd, "4012 Sniper 4013 Assassin Cross 4015 Paladin 4016 Champion");
+ clif_displaymessage(fd, "4017 Professor 4018 Stalker 4019 Creator 4020 Clown");
+ clif_displaymessage(fd, "4021 Gypsy");
+ clif_displaymessage(fd, "----- 3rd Class (Regular to 3rd) -----");
+ clif_displaymessage(fd, "4054 Rune Knight 4055 Warlock 4056 Ranger 4057 Arch Bishop");
+ clif_displaymessage(fd, "4058 Mechanic 4059 Guillotine Cross 4066 Royal Guard 4067 Sorcerer");
+ clif_displaymessage(fd, "4068 Minstrel 4069 Wanderer 4070 Sura 4071 Genetic");
+ clif_displaymessage(fd, "4072 Shadow Chaser");
+ clif_displaymessage(fd, "----- 3rd Class (Transcendent to 3rd) -----");
+ clif_displaymessage(fd, "4060 Rune Knight 4061 Warlock 4062 Ranger 4063 Arch Bishop");
+ clif_displaymessage(fd, "4064 Mechanic 4065 Guillotine Cross 4073 Royal Guard 4074 Sorcerer");
+ clif_displaymessage(fd, "4075 Minstrel 4076 Wanderer 4077 Sura 4078 Genetic");
+ clif_displaymessage(fd, "4079 Shadow Chaser");
+ clif_displaymessage(fd, "----- Expanded Class -----");
+ clif_displaymessage(fd, " 23 Super Novice 24 Gunslinger 25 Ninja 26 Xmas");
+ clif_displaymessage(fd, " 27 Summer 4046 Taekwon 4047 Star Gladiator 4049 Soul Linker");
+ //clif_displaymessage(fd, "4050 Gangsi 4051 Death Knight 4052 Dark Collector");
+ clif_displaymessage(fd, "---- 1st And 2nd Baby Class ----");
+ clif_displaymessage(fd, "4023 Baby Novice 4024 Baby Swordsman 4025 Baby Mage 4026 Baby Archer");
+ clif_displaymessage(fd, "4027 Baby Acolyte 4028 Baby Merchant 4029 Baby Thief 4030 Baby Knight");
+ clif_displaymessage(fd, "4031 Baby Priest 4032 Baby Wizard 4033 Baby Blacksmith 4034 Baby Hunter");
+ clif_displaymessage(fd, "4035 Baby Assassin 4037 Baby Crusader 4038 Baby Monk 4039 Baby Sage");
+ clif_displaymessage(fd, "4040 Baby Rogue 4041 Baby Alchemist 4042 Baby Bard 4043 Baby Dancer");
+ clif_displaymessage(fd, "4045 Super Baby");
+ //clif_displaymessage(fd, "---- 3rd Baby Class ----");
+ //clif_displaymessage(fd, "4096 Baby Rune Knight 4097 Baby Warlock 4098 Baby Ranger");
+ //clif_displaymessage(fd, "4099 Baby Arch Bishop 4100 Baby Mechanic 4101 Baby Guillotine Cross");
+ //clif_displaymessage(fd, "4102 Baby Royal Guard 4103 Baby Sorcerer 4104 Baby Minstrel");
+ //clif_displaymessage(fd, "4105 Baby Wanderer 4106 Baby Sura 4107 Baby Genetic");
+ //clif_displaymessage(fd, "4108 Baby Shadow Chaser");
+ //clif_displaymessage(fd, "---- Mounts, Modes, And Others ----");
+ //clif_displaymessage(fd, " 13 Knight (Peco) 21 Crusader (Peco) 22 Wedding 26 Christmas");
+ //clif_displaymessage(fd, " 27 Summer 4014 Lord Knight (Peco) 4022 Paladin (Peco) 4036 Baby Knight (Peco)");
+ //clif_displaymessage(fd, "4044 Baby Crusader (Peco) 4048 Star Gladiator (Union) 4080 Rune Knight (Dragon)");
+ //clif_displaymessage(fd, "4081 Rune Knight Trans (Dragon) 4082 Royal Guard (Gryphon)");
+ //clif_displaymessage(fd, "4083 Royal Guard Trans (Gryphon) 4084 Ranger (Warg) 4085 Ranger Trans (Warg)");
+ //clif_displaymessage(fd, "4086 Mechanic (Mado) 4087 Mechanic Trans (Mado)");
return -1;
}
@@ -1710,8 +1707,7 @@ ACMD_FUNC(item)
if(log_config.enable_logs&0x400)
log_pick_pc(sd, "A", item_id, number, NULL);
- if (!flag)
- clif_displaymessage(fd, msg_txt(18)); // Item created.
+ clif_displaymessage(fd, msg_txt(18)); // Item created.
return 0;
}
@@ -1786,8 +1782,7 @@ ACMD_FUNC(item2)
if(log_config.enable_logs&0x400)
log_pick_pc(sd, "A", item_tmp.nameid, number, &item_tmp);
- if (!flag)
- clif_displaymessage(fd, msg_txt(18)); // Item created.
+ clif_displaymessage(fd, msg_txt(18)); // Item created.
} else {
clif_displaymessage(fd, msg_txt(19)); // Invalid item ID or name.
return -1;
@@ -2929,7 +2924,7 @@ ACMD_FUNC(displaystatus)
if (i < 2) flag = 1;
if (i < 3) tick = 0;
- clif_status_change(&sd->bl, type, flag, tick);
+ clif_status_change(&sd->bl, type, flag, tick, 0, 0, 0);
return 0;
}
@@ -3070,7 +3065,7 @@ ACMD_FUNC(zeny)
*------------------------------------------*/
ACMD_FUNC(param)
{
- int i, value = 0, new_value;
+ int i, value = 0, new_value, max;
const char* param[] = { "str", "agi", "vit", "int", "dex", "luk" };
short* status[6];
//we don't use direct initialization because it isn't part of the c standard.
@@ -3099,16 +3094,16 @@ ACMD_FUNC(param)
status[4] = &sd->status.dex;
status[5] = &sd->status.luk;
- if(value < 0 && *status[i] <= -value)
- {
- new_value = 1;
- }
- else if(SHRT_MAX - *status[i] < value)
- {
- new_value = SHRT_MAX;
- }
+ if( battle_config.atcommand_max_stat_bypass )
+ max = SHRT_MAX;
else
- {
+ max = pc_maxparameter(sd);
+
+ if(value < 0 && *status[i] <= -value) {
+ new_value = 1;
+ } else if(max - *status[i] < value) {
+ new_value = max;
+ } else {
new_value = *status[i] + value;
}
@@ -3150,7 +3145,10 @@ ACMD_FUNC(stat_all)
value = pc_maxparameter(sd);
max = pc_maxparameter(sd);
} else {
- max = SHRT_MAX;
+ if( battle_config.atcommand_max_stat_bypass )
+ max = SHRT_MAX;
+ else
+ max = pc_maxparameter(sd);
}
count = 0;
@@ -4218,6 +4216,7 @@ ACMD_FUNC(reloadmobdb)
mob_reload();
read_petdb();
merc_reload();
+ read_mercenarydb();
clif_displaymessage(fd, msg_txt(98)); // Monster database has been reloaded.
return 0;
@@ -4231,6 +4230,7 @@ ACMD_FUNC(reloadskilldb)
nullpo_retr(-1, sd);
skill_reload();
merc_skill_reload();
+ read_mercenary_skilldb();
clif_displaymessage(fd, msg_txt(99)); // Skill database has been reloaded.
return 0;
@@ -4482,8 +4482,11 @@ ACMD_FUNC(mapinfo)
strcat(atcmd_output, "Fireworks | ");
if (map[m_id].flag.leaves)
strcat(atcmd_output, "Leaves | ");
- if (map[m_id].flag.rain)
- strcat(atcmd_output, "Rain | ");
+ /**
+ * No longer available, keeping here just in case it's back someday. [Ind]
+ **/
+ //if (map[m_id].flag.rain)
+ // strcat(atcmd_output, "Rain | ");
if (map[m_id].flag.nightenabled)
strcat(atcmd_output, "Displays Night | ");
clif_displaymessage(fd, atcmd_output);
@@ -4597,7 +4600,26 @@ ACMD_FUNC(mapinfo)
ACMD_FUNC(mount_peco)
{
nullpo_retr(-1, sd);
-
+ if( pc_checkskill(sd,RK_DRAGONTRAINING) > 0 ) {
+ if( !(sd->sc.option&OPTION_DRAGON1) ) {
+ clif_displaymessage(sd->fd,"You have mounted your Dragon");
+ pc_setoption(sd, sd->sc.option|OPTION_DRAGON1);
+ } else {
+ clif_displaymessage(sd->fd,"You have released your Dragon");
+ pc_setoption(sd, sd->sc.option&~OPTION_DRAGON1);
+ }
+ return 0;
+ }
+ if( (sd->class_&MAPID_THIRDMASK) == MAPID_MECHANIC ) {
+ if( !(sd->sc.option&OPTION_MADOGEAR) ) {
+ clif_displaymessage(sd->fd,"You have mounted your Mado Gear");
+ pc_setoption(sd, sd->sc.option|OPTION_MADOGEAR);
+ } else {
+ clif_displaymessage(sd->fd,"You have released your Mado Gear");
+ pc_setoption(sd, sd->sc.option&~OPTION_MADOGEAR);
+ }
+ return 0;
+ }
if (!pc_isriding(sd)) { // if actually no peco
if (!pc_checkskill(sd, KN_RIDING))
{
@@ -6204,24 +6226,26 @@ ACMD_FUNC(autolootitem)
return 0;
}
-
+/**
+ * No longer available, keeping here just in case it's back someday. [Ind]
+ **/
/*==========================================
* It is made to rain.
*------------------------------------------*/
-ACMD_FUNC(rain)
-{
- nullpo_retr(-1, sd);
- if (map[sd->bl.m].flag.rain) {
- map[sd->bl.m].flag.rain=0;
- clif_weather(sd->bl.m);
- clif_displaymessage(fd, "The rain has stopped.");
- } else {
- map[sd->bl.m].flag.rain=1;
- clif_weather(sd->bl.m);
- clif_displaymessage(fd, "It is made to rain.");
- }
- return 0;
-}
+//ACMD_FUNC(rain)
+//{
+// nullpo_retr(-1, sd);
+// if (map[sd->bl.m].flag.rain) {
+// map[sd->bl.m].flag.rain=0;
+// clif_weather(sd->bl.m);
+// clif_displaymessage(fd, "The rain has stopped.");
+// } else {
+// map[sd->bl.m].flag.rain=1;
+// clif_weather(sd->bl.m);
+// clif_displaymessage(fd, "It is made to rain.");
+// }
+// return 0;
+//}
/*==========================================
* It is made to snow.
@@ -6360,7 +6384,10 @@ ACMD_FUNC(fireworks)
ACMD_FUNC(clearweather)
{
nullpo_retr(-1, sd);
- map[sd->bl.m].flag.rain=0;
+ /**
+ * No longer available, keeping here just in case it's back someday. [Ind]
+ **/
+ //map[sd->bl.m].flag.rain=0;
map[sd->bl.m].flag.snow=0;
map[sd->bl.m].flag.sakura=0;
map[sd->bl.m].flag.clouds=0;
@@ -7850,13 +7877,72 @@ ACMD_FUNC(fakename)
}
/*==========================================
- * @mapflag [flag name] [1|0|on|off] [map name] by Lupus
- * => Shows information about the map flags [map name]
- * Also set flags
+ * Ragnarok Resources
*------------------------------------------*/
-ACMD_FUNC(mapflag)
-{
-// WIP
+ACMD_FUNC(mapflag) {
+#define checkflag( cmd ) if ( map[ sd->bl.m ].flag.cmd ) clif_displaymessage(sd->fd,#cmd)
+#define setflag( cmd ) \
+ if ( strcmp( flag_name , #cmd ) == 0 && ( flag == 0 || flag == 1 ) ){\
+ map[ sd->bl.m ].flag.cmd = flag;\
+ sprintf(atcmd_output,"[ @mapflag ] %s flag has been set to %s",#cmd,flag?"On":"Off");\
+ clif_displaymessage(sd->fd,atcmd_output);\
+ return 0;\
+ }
+ unsigned char flag_name[100];
+ int flag=9,i;
+ nullpo_retr(-1, sd);
+ memset(flag_name, '\0', sizeof(flag_name));
+
+ if (!message || !*message || (sscanf(message, "%99s %d", flag_name, &flag) < 1)) {
+ clif_displaymessage(sd->fd,"Enabled Mapflags in this map:");
+ clif_displaymessage(sd->fd,"----------------------------------");
+ checkflag(autotrade); checkflag(allowks); checkflag(nomemo); checkflag(noteleport);
+ checkflag(noreturn); checkflag(monster_noteleport); checkflag(nosave); checkflag(nobranch);
+ checkflag(noexppenalty); checkflag(pvp); checkflag(pvp_noparty); checkflag(pvp_noguild);
+ checkflag(pvp_nightmaredrop); checkflag(pvp_nocalcrank); checkflag(gvg_castle); checkflag(gvg);
+ checkflag(gvg_dungeon); checkflag(gvg_noparty); checkflag(battleground);checkflag(nozenypenalty);
+ checkflag(notrade); checkflag(noskill); checkflag(nowarp); checkflag(nowarpto);
+ checkflag(noicewall); checkflag(snow); checkflag(clouds); checkflag(clouds2);
+ checkflag(fog); checkflag(fireworks); checkflag(sakura); checkflag(leaves);
+ checkflag(nogo); checkflag(nobaseexp);
+ checkflag(nojobexp); checkflag(nomobloot); checkflag(nomvploot); checkflag(nightenabled);
+ checkflag(restricted); checkflag(nodrop); checkflag(novending); checkflag(loadevent);
+ checkflag(nochat); checkflag(partylock); checkflag(guildlock); checkflag(src4instance);
+ clif_displaymessage(sd->fd," ");
+ clif_displaymessage(sd->fd,"Usage: \"@mapflag monster_teleport 1\" (0=Off 1=On)");
+ clif_displaymessage(sd->fd,"Use: \"@mapflag available\" to list the available mapflags");
+ return 1;
+ }
+ for (i = 0; flag_name[i]; i++) flag_name[i] = tolower(flag_name[i]); //lowercase
+
+ setflag(autotrade); setflag(allowks); setflag(nomemo); setflag(noteleport);
+ setflag(noreturn); setflag(monster_noteleport);setflag(nosave); setflag(nobranch);
+ setflag(noexppenalty); setflag(pvp); setflag(pvp_noparty); setflag(pvp_noguild);
+ setflag(pvp_nightmaredrop); setflag(pvp_nocalcrank); setflag(gvg_castle); setflag(gvg);
+ setflag(gvg_dungeon); setflag(gvg_noparty); setflag(battleground); setflag(nozenypenalty);
+ setflag(notrade); setflag(noskill); setflag(nowarp); setflag(nowarpto);
+ setflag(noicewall); setflag(snow); setflag(clouds); setflag(clouds2);
+ setflag(fog); setflag(fireworks); setflag(sakura); setflag(leaves);
+ setflag(nogo); setflag(nobaseexp);
+ setflag(nojobexp); setflag(nomobloot); setflag(nomvploot); setflag(nightenabled);
+ setflag(restricted); setflag(nodrop); setflag(novending); setflag(loadevent);
+ setflag(nochat); setflag(partylock); setflag(guildlock); setflag(src4instance);
+
+ clif_displaymessage(sd->fd,"Invalid flag name or flag");
+ clif_displaymessage(sd->fd,"Usage: \"@mapflag monster_teleport 1\" (0=Off | 1=On)");
+ clif_displaymessage(sd->fd,"Available Flags:");
+ clif_displaymessage(sd->fd,"----------------------------------");
+ clif_displaymessage(sd->fd,"town, autotrade, allowks, nomemo, noteleport, noreturn, monster_noteleport, nosave,");
+ clif_displaymessage(sd->fd,"nobranch, noexppenalty, pvp, pvp_noparty, pvp_noguild, pvp_nightmaredrop,");
+ clif_displaymessage(sd->fd,"pvp_nocalcrank, gvg_castle, gvg, gvg_dungeon, gvg_noparty, battleground,");
+ clif_displaymessage(sd->fd,"nozenypenalty, notrade, noskill, nowarp, nowarpto, noicewall, snow, clouds, clouds2,");
+ clif_displaymessage(sd->fd,"fog, fireworks, sakura, leaves, nogo, nobaseexp, nojobexp, nomobloot,");
+ clif_displaymessage(sd->fd,"nomvploot, nightenabled, restricted, nodrop, novending, loadevent, nochat, partylock,");
+ clif_displaymessage(sd->fd,"guildlock, src4instance");
+
+#undef checkflag
+#undef setflag
+
return 0;
}
@@ -8072,6 +8158,7 @@ ACMD_FUNC(reject)
*-----------------------------------*/
ACMD_FUNC(cash)
{
+ char output[128];
int value;
nullpo_retr(-1, sd);
@@ -8082,17 +8169,27 @@ ACMD_FUNC(cash)
if( !strcmpi(command+1,"cash") )
{
- if( value > 0 )
+ if( value > 0 ) {
pc_getcash(sd, value, 0);
- else
+ sprintf(output, msg_txt(505), value, sd->cashPoints);
+ clif_disp_onlyself(sd, output, strlen(output));
+ } else {
pc_paycash(sd, -value, 0);
+ sprintf(output, msg_txt(410), value, sd->cashPoints);
+ clif_disp_onlyself(sd, output, strlen(output));
+ }
}
else
{ // @points
- if( value > 0 )
+ if( value > 0 ) {
pc_getcash(sd, 0, value);
- else
+ sprintf(output, msg_txt(506), value, sd->kafraPoints);
+ clif_disp_onlyself(sd, output, strlen(output));
+ } else {
pc_paycash(sd, -value, -value);
+ sprintf(output, msg_txt(411), -value, sd->kafraPoints);
+ clif_disp_onlyself(sd, output, strlen(output));
+ }
}
return 0;
@@ -8668,8 +8765,17 @@ ACMD_FUNC(font)
return 0;
}
-
-
+ACMD_FUNC(new_mount) {
+ clif_displaymessage(sd->fd,"NOTICE: If you crash with mount your LUA is outdated");
+ if( !(sd->sc.option&OPTION_MOUNTING) ) {
+ clif_displaymessage(sd->fd,"You have mounted.");
+ pc_setoption(sd, sd->sc.option|OPTION_MOUNTING);
+ } else {
+ clif_displaymessage(sd->fd,"You have released your mount");
+ pc_setoption(sd, sd->sc.option&~OPTION_MOUNTING);
+ }
+ return 0;
+}
/*==========================================
* atcommand_info[] structure definition
*------------------------------------------*/
@@ -8972,6 +9078,10 @@ AtCommandInfo atcommand_info[] = {
{ "delitem", 60,60, atcommand_delitem },
{ "charcommands", 1,1, atcommand_commands },
{ "font", 1,1, atcommand_font },
+ /**
+ * For Testing Purposes, not going to be here after we're done.
+ **/
+ { "newmount", 0,99, atcommand_new_mount },
};
@@ -9112,11 +9222,21 @@ bool is_atcommand(const int fd, struct map_session_data* sd, const char* message
info = get_atcommandinfo_byname(command);
if( info == NULL || info->func == NULL || ( type && ((*atcmd_msg == atcommand_symbol && pc_isGM(sd) < info->level) || (*atcmd_msg == charcommand_symbol && pc_isGM(sd) < info->level2)) ) )
{
+ if( pc_isGM(sd) ) {
sprintf(output, msg_txt(153), command); // "%s is Unknown Command."
clif_displaymessage(fd, output);
return true;
+ } else
+ return false;
}
+ //Log atcommands
+ if( log_config.gm && info->level >= log_config.gm && *atcmd_msg == atcommand_symbol )
+ log_atcommand(sd, atcmd_msg);
+ //Log Charcommands
+ else if( log_config.gm && info->level2 >= log_config.gm && *atcmd_msg == charcommand_symbol && ssd != NULL )
+ log_atcommand(sd, message);
+
//Attempt to use the command
if( strcmpi("adjgmlvl",command+1) && ssd ) { lv = ssd->gmlevel; ssd->gmlevel = sd->gmlevel; }
if ( (info->func(fd, (*atcmd_msg == atcommand_symbol) ? sd : ssd, command, params) != 0) )
@@ -9126,14 +9246,6 @@ bool is_atcommand(const int fd, struct map_session_data* sd, const char* message
}
if( strcmpi("adjgmlvl",command+1) && ssd ) ssd->gmlevel = lv;
- //Log atcommands
- if( log_config.gm && info->level >= log_config.gm && *atcmd_msg == atcommand_symbol )
- log_atcommand(sd, atcmd_msg);
-
- //Log Charcommands
- if( log_config.gm && info->level2 >= log_config.gm && *atcmd_msg == charcommand_symbol && ssd != NULL )
- log_atcommand(sd, message);
-
return true;
}
diff --git a/src/map/battle.c b/src/map/battle.c
index f338a50bb..8b0aa22fb 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -118,7 +118,7 @@ static int battle_getenemy_sub(struct block_list *bl, va_list ap)
if (bl->id == target->id)
return 0;
- if (*c >= 24)
+ if (*c >= 23)
return 0;
if (status_isdead(bl))
return 0;
@@ -136,8 +136,47 @@ struct block_list* battle_getenemy(struct block_list *target, int type, int rang
int c = 0;
memset(bl_list, 0, sizeof(bl_list));
map_foreachinrange(battle_getenemy_sub, target, range, type, bl_list, &c, target);
- if (c == 0 || c > 24)
+ if (c == 0 )
return NULL;
+ if( c >= 24 )
+ c = 23;
+ return bl_list[rand()%c];
+}
+static int battle_getenemyarea_sub(struct block_list *bl, va_list ap)
+{
+ struct block_list **bl_list, *src;
+ int *c, ignore_id;
+
+ bl_list = va_arg(ap, struct block_list **);
+ c = va_arg(ap, int *);
+ src = va_arg(ap, struct block_list *);
+ ignore_id = va_arg(ap, int);
+
+ if( bl->id == src->id || bl->id == ignore_id )
+ return 0; // Ignores Caster and a possible pre-target
+ if( *c >= 23 )
+ return 0;
+ if( status_isdead(bl) )
+ return 0;
+ if( battle_check_target(src, bl, BCT_ENEMY) > 0 )
+ { // Is Enemy!...
+ bl_list[(*c)++] = bl;
+ return 1;
+ }
+ return 0;
+}
+
+// Pick a random enemy
+struct block_list* battle_getenemyarea(struct block_list *src, int x, int y, int range, int type, int ignore_id)
+{
+ struct block_list *bl_list[24];
+ int c = 0;
+ memset(bl_list, 0, sizeof(bl_list));
+ map_foreachinarea(battle_getenemyarea_sub, src->m, x - range, y - range, x + range, y + range, type, bl_list, &c, src, ignore_id);
+ if( c == 0 )
+ return NULL;
+ if( c >= 24 )
+ c = 23;
return bl_list[rand()%c];
}
@@ -212,7 +251,6 @@ int battle_delay_damage (unsigned int tick, int amotion, struct block_list *src,
return 0;
}
-
int battle_attr_ratio(int atk_elem,int def_type, int def_lv)
{
@@ -265,9 +303,6 @@ int battle_attr_fix(struct block_list *src, struct block_list *target, int damag
if( tsc->data[SC_SPIDERWEB]->val2 == 0 )
status_change_end(target, SC_SPIDERWEB, INVALID_TIMER);
}
- if( atk_elem == ELE_HOLY && tsc && tsc->count && tsc->data[SC_ORATIO] )
- ratio += tsc->data[SC_ORATIO]->val2;
-
return damage*ratio/100;
}
@@ -319,6 +354,20 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,struct Damag
d->dmg_lv = ATK_BLOCK;
return 0;
}
+ if( sc->data[SC_WHITEIMPRISON] && skill_num != HW_GRAVITATION && skill_num != PA_PRESSURE ) { // Gravitation and Pressure do damage without removing the effect
+ if( skill_num == MG_NAPALMBEAT ||
+ skill_num == MG_SOULSTRIKE ||
+ skill_num == WL_SOULEXPANSION ||
+ (skill_num && skill_get_ele(skill_num, skill_lv) == ELE_GHOST) ||
+ (!skill_num && (status_get_status_data(src))->rhw.ele == ELE_GHOST)
+ )
+ status_change_end(bl,SC_WHITEIMPRISON,-1); // Those skills do damage and removes effect
+ else
+ {
+ d->dmg_lv = ATK_BLOCK;
+ return 0;
+ }
+ }
if( sc->data[SC_SAFETYWALL] && (flag&(BF_SHORT|BF_MAGIC))==BF_SHORT )
{
@@ -337,7 +386,13 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,struct Damag
d->dmg_lv = ATK_BLOCK;
return 0;
}
-
+ if( sc->data[SC_WEAPONBLOCKING] && flag&(BF_SHORT|BF_WEAPON) && rand()%100 < sc->data[SC_WEAPONBLOCKING]->val2 )
+ {
+ clif_skill_nodamage(bl,src,GC_WEAPONBLOCKING,1,1);
+ d->dmg_lv = ATK_NONE;
+ sc_start2(bl,SC_COMBO,100,GC_WEAPONBLOCKING,src->id,2000);
+ return 0;
+ }
if( (sce=sc->data[SC_AUTOGUARD]) && flag&BF_WEAPON && !(skill_get_nk(skill_num)&NK_NO_CARDFIX_ATK) && rand()%100 < sce->val2 )
{
int delay;
@@ -361,26 +416,7 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,struct Damag
clif_skill_nodamage(bl, bl, LK_PARRYING, sce->val1,1);
return 0;
}
-
- if((sce=sc->data[SC_MILLENNIUMSHIELD]) && damage > 0) {
- if(sce->val2 > 0)
- {
- sce->val3 -= damage;
- if( sce->val3 <= 0 )
- { // Reduce remaining shields and create new one.
- sc_start(bl,SC_STUN,15,0,1000);
- sce->val3 = 1000;
- sce->val2--;
- if( sd )
- clif_millenniumshield(sd,sce->val2);
- }
-
- damage = 0; // Nullify damage even if shield is destroyed.
- }
- if(sce->val2 <= 0)
- status_change_end(bl, SC_MILLENNIUMSHIELD, INVALID_TIMER);
- }
-
+
if(sc->data[SC_DODGE] && !sc->opt1 &&
(flag&BF_LONG || sc->data[SC_SPURT])
&& rand()%100 < 20) {
@@ -434,7 +470,7 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,struct Damag
}
//Finally damage reductions....
- if( sc->data[SC_ASSUMPTIO] && skill_num != RK_DRAGONBREATH )
+ if( sc->data[SC_ASSUMPTIO] )
{
if( map_flag_vs(bl->m) )
damage = damage*2/3; //Receive 66% damage
@@ -447,11 +483,10 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,struct Damag
damage=damage*(100-sc->data[SC_DEFENDER]->val2)/100;
if(sc->data[SC_ADJUSTMENT] &&
- (flag&(BF_LONG|BF_WEAPON)) == (BF_LONG|BF_WEAPON) &&
- skill_num != RK_DRAGONBREATH)
+ (flag&(BF_LONG|BF_WEAPON)) == (BF_LONG|BF_WEAPON))
damage -= 20*damage/100;
- if(sc->data[SC_FOGWALL] && skill_num != RK_DRAGONBREATH) {
+ if(sc->data[SC_FOGWALL]) {
if(flag&BF_SKILL) //25% reduction
damage -= 25*damage/100;
else if ((flag&(BF_LONG|BF_WEAPON)) == (BF_LONG|BF_WEAPON))
@@ -510,10 +545,18 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,struct Damag
status_change_end(bl, SC_REJECTSWORD, INVALID_TIMER);
}
+ //Finally added to remove the status of immobile when aimedbolt is used. [Jobbie]
+ if( skill_num == RA_AIMEDBOLT && (sc->data[SC_BITE] || sc->data[SC_ANKLE] || sc->data[SC_ELECTRICSHOCKER]) )
+ {
+ status_change_end(bl, SC_BITE, -1);
+ status_change_end(bl, SC_ANKLE, -1);
+ status_change_end(bl, SC_ELECTRICSHOCKER, -1);
+ }
+
//Finally Kyrie because it may, or not, reduce damage to 0.
if((sce = sc->data[SC_KYRIE]) && damage > 0){
sce->val2-=damage;
- if(flag&BF_WEAPON || skill_num == TF_THROWSTONE || skill_num == RK_DRAGONBREATH){
+ if(flag&BF_WEAPON || skill_num == TF_THROWSTONE){
if(sce->val2>=0)
damage=0;
else
@@ -523,13 +566,6 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,struct Damag
status_change_end(bl, SC_KYRIE, INVALID_TIMER);
}
- if((sce = sc->data[SC_STONEHARDSKIN]) && damage > 0)
- {
- sce->val2-=damage; // Reduce Stone Skin's HP by damage taken.
- if( sce->val2 <= 0 )
- status_change_end(bl, SC_STONEHARDSKIN, INVALID_TIMER);
- }
-
if (!damage) return 0;
//Probably not the most correct place, but it'll do here
@@ -569,9 +605,11 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,struct Damag
break;
}
}
+ if( sc->data[SC_POISONINGWEAPON] && skill_num != GC_VENOMPRESSURE && (flag&BF_WEAPON) && damage > 0 && rand()%100 < sc->data[SC_POISONINGWEAPON]->val3 )
+ sc_start(bl,sc->data[SC_POISONINGWEAPON]->val2,100,sc->data[SC_POISONINGWEAPON]->val1,skill_get_time2(GC_POISONINGWEAPON,sc->data[SC_POISONINGWEAPON]->val1));
}
- if (battle_config.pk_mode && sd && bl->type == BL_PC && damage)
+ if (battle_config.pk_mode && sd && bl->type == BL_PC && damage && !map_flag_gvg(sd->bl.m))
{
if (flag & BF_SKILL) { //Skills get a different reduction than non-skills. [Skotlex]
if (flag&BF_WEAPON)
@@ -628,7 +666,6 @@ int battle_calc_bg_damage(struct block_list *src, struct block_list *bl, int dam
case PA_PRESSURE:
case HW_GRAVITATION:
case NJ_ZENYNAGE:
- case RK_DRAGONBREATH:
break;
default:
if( flag&BF_SKILL )
@@ -690,9 +727,13 @@ int battle_calc_gvg_damage(struct block_list *src,struct block_list *bl,int dama
case PA_PRESSURE:
case HW_GRAVITATION:
case NJ_ZENYNAGE:
- case RK_DRAGONBREATH:
break;
default:
+ /* Uncomment if you want god-mode Emperiums at 100 defense. [Kisuka]
+ if (md && md->guardian_data) {
+ damage -= damage * (md->guardian_data->castle->defense/100) * battle_config.castle_defense_rate/100;
+ }
+ */
if (flag & BF_SKILL) { //Skills get a different reduction than non-skills. [Skotlex]
if (flag&BF_WEAPON)
damage = damage * battle_config.gvg_weapon_damage_rate/100;
@@ -747,6 +788,12 @@ int battle_addmastery(struct map_session_data *sd,struct block_list *target,int
(battle_check_undead(status->race,status->def_ele) || status->race==RC_DEMON) )
damage += (skill*(int)(3+(sd->status.base_level+1)*0.05)); // submitted by orn
//damage += (skill * 3);
+ if( (skill = pc_checkskill(sd, RA_RANGERMAIN)) > 0 && (status->race == RC_BRUTE || status->race == RC_PLANT || status->race == RC_FISH) )
+ damage += (skill * 5);
+ if( (skill = pc_checkskill(sd,NC_RESEARCHFE)) > 0 && (status->def_ele == ELE_FIRE || status->def_ele == ELE_EARTH) )
+ damage += (skill * 10);
+ if( (sd->sc.option&OPTION_MADOGEAR) )
+ damage += 20 + 20 * pc_checkskill(sd, NC_MADOLICENCE);
if((skill = pc_checkskill(sd,HT_BEASTBANE)) > 0 && (status->race==RC_BRUTE || status->race==RC_INSECT) ) {
damage += (skill * 4);
@@ -772,24 +819,25 @@ int battle_addmastery(struct map_session_data *sd,struct block_list *target,int
case W_1HSPEAR:
case W_2HSPEAR:
if((skill = pc_checkskill(sd,KN_SPEARMASTERY)) > 0) {
- if(!pc_isriding(sd) && !pc_isdragon(sd))
+ if(!pc_isriding(sd))
damage += (skill * 4);
else
damage += (skill * 5);
- // increase damage by level of KN_SPEARMASTERY * 10
- if (pc_checkskill(sd,RK_DRAGONTRAINING) > 0)
- damage += (skill * 10);
}
break;
case W_1HAXE:
case W_2HAXE:
if((skill = pc_checkskill(sd,AM_AXEMASTERY)) > 0)
damage += (skill * 3);
+ if((skill = pc_checkskill(sd,NC_TRAININGAXE)) > 0)
+ damage += (skill * 5);
break;
case W_MACE:
case W_2HMACE:
if((skill = pc_checkskill(sd,PR_MACEMASTERY)) > 0)
damage += (skill * 3);
+ if((skill = pc_checkskill(sd,NC_TRAININGAXE)) > 0)
+ damage += (skill * 5);
break;
case W_FIST:
if((skill = pc_checkskill(sd,TK_RUN)) > 0)
@@ -1022,7 +1070,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
wd.type=0; //Normal attack
wd.div_=skill_num?skill_get_num(skill_num,skill_lv):1;
wd.amotion=(skill_num && skill_get_inf(skill_num)&INF_GROUND_SKILL)?0:sstatus->amotion; //Amotion should be 0 for ground skills.
- if(skill_num == KN_AUTOCOUNTER || skill_num == RK_DEATHBOUND)
+ if(skill_num == KN_AUTOCOUNTER)
wd.amotion >>= 1;
wd.dmotion=tstatus->dmotion;
wd.blewcount=skill_get_blewcount(skill_num,skill_lv);
@@ -1095,7 +1143,6 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
break;
case KN_AUTOCOUNTER:
- case RK_DEATHBOUND:
wd.flag=(wd.flag&~BF_SKILLMASK)|BF_NORMAL;
break;
@@ -1222,7 +1269,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
if (flag.cri)
{
wd.type = 0x0a;
- flag.hit = 1;
+ flag.idef = flag.idef2 = flag.hit = 1;
} else { //Check for Perfect Hit
if(sd && sd->perfect_hit > 0 && rand()%100 < sd->perfect_hit)
flag.hit = 1;
@@ -1309,6 +1356,9 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
if(sd && pc_checkskill(sd,AS_SONICACCEL)>0)
hitrate += hitrate * 50 / 100;
break;
+ case GC_VENOMPRESSURE:
+ hitrate += 10 + 4 * skill_lv;
+ break;
}
// Weaponry Research hidden bonus
@@ -1436,15 +1486,6 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
if( (i = party_foreachsamemap(party_sub_count, sd, 0)) > 1 ) // exclude the player himself [Inkfish]
ATK_ADDRATE(2*skill*i);
}
- if(sd->status.party_id && sc && sc->data[SC_FIGHTINGSPIRIT])
- {
- i = party_foreachsamemap(party_sub_count, sd, 0);
- if( (sc->data[SC_FIGHTINGSPIRIT]->val2) > 0){
- ATK_ADDRATE(7*i); //Caster gets full effect.
- }else{
- ATK_ADDRATE(7*i/4); //Party members get 1/4.
- }
- }
}
break;
} //End default case
@@ -1767,65 +1808,160 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
case NPC_VAMPIRE_GIFT:
skillratio += ((skill_lv-1)%5+1)*100;
break;
- case RK_SONICWAVE:
- skillratio += ((skill_lv + 5) * 100) * (1 + (status_get_lv(src) -100) / 200);
+ case RK_SONICWAVE: {
+ int level = status_get_lv(src);
+ skillratio += 400 + 100 * skill_lv;
+ if( level > 100 )
+ skillratio += skillratio * (level - 100) / 200;
+ }
break;
- case RK_HUNDREDSPEAR:
- {
- int weight = 1, dmg = 0;
- if (sd) {
- short index = sd->equip_index[EQI_HAND_R];
-
- if (index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->type == IT_WEAPON)
- weight = sd->inventory_data[index]->weight; //80% of weight
- }
-
- dmg = (600 + (skill_lv * 80) + (1000 - (weight>1000?1000:weight)) * ((1 + status_get_lv(src) - 100) / 200));
-
- if(sd) // Add clashing spiral bonus damage (Skill level * 50% damage)
- dmg += pc_checkskill(sd,LK_SPIRALPIERCE) * (dmg * 50 /100);
-
- skillratio = dmg;
- break;
+ case RK_HUNDREDSPEAR: {
+ int level = status_get_lv(src);
+ skillratio += 500 + 40 * skill_lv;
+ if( level > 100 )
+ skillratio += skillratio * (level - 100) / 200;
}
- case RK_WINDCUTTER:
- skillratio += ((skill_lv + 2) * 50) * status_get_lv(src) / 100;
break;
- case RK_IGNITIONBREAK:
- {
- int dmg = 300; // Base maximum damage at less than 3 cells.
+ case RK_WINDCUTTER: {
+ int level = status_get_lv(src);
+ skillratio += 50 * skill_lv;
+ if( level > 100 )
+ skillratio += skillratio * (level - 50) / 200;
+ }
+ break;
+ case RK_IGNITIONBREAK: {
+ int level = status_get_lv(src);
i = distance_bl(src,target);
- if( i > 7 )
- dmg -= 100; // Greather than 7 cells. (200 damage)
- else if( i > 3 )
- dmg -= 50; // Greater than 3 cells, less than 7. (250 damage)
-
- dmg = (dmg * skill_lv) * (1+ (status_get_lv(src) - 100) / 120);
-
- // Elemental check, +100% damage if your element is fire.
- if( sstatus->rhw.ele == ELE_FIRE )
- dmg += skill_lv * 100 / 100;
-
- skillratio = dmg;
- break;
+ if( i < 2 )
+ skillratio = 200 + 200 * skill_lv;
+ else if( i < 4 )
+ skillratio = 100 + 200 * skill_lv;
+ else
+ skillratio = 100 + 100 * skill_lv;
+ if( level > 100 )
+ skillratio += skillratio * (level - 100) / 200;
+ if( sstatus->rhw.ele == ELE_FIRE )
+ skillratio += skillratio / 2;
}
+ break;
case RK_CRUSHSTRIKE:
- if(sd)
- {
- short index = sd->equip_index[EQI_HAND_R];
- if( index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->type == IT_WEAPON )
- skillratio = (sd->inventory_data[index]->wlv * (sd->status.inventory[index].refine + 6) * 100) + sd->inventory_data[index]->atk + sd->inventory_data[index]->weight;
- }
- break;
+ if( sd )
+ {
+ short index = sd->equip_index[EQI_HAND_R];
+ if( index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->type == IT_WEAPON )
+ skillratio = sstatus->rhw.atk + 100 * sd->inventory_data[index]->wlv * (sd->status.inventory[index].refine + 6);
+ }
+ break;
case RK_STORMBLAST:
- skillratio = ((sd?pc_checkskill(sd,RK_RUNEMASTERY):1) + (sstatus->int_ / 8)) * 100;
+ skillratio = 100 * (sd ? pc_checkskill(sd,RK_RUNEMASTERY) : 1) + 100 * (sstatus->int_ / 4);
break;
case RK_PHANTOMTHRUST:
- skillratio = ((skill_lv * 50) + (sd?pc_checkskill(sd,KN_SPEARMASTERY):0) * 10) * status_get_lv(src) / 150;
+ skillratio = 50 * skill_lv + 10 * ( sd ? pc_checkskill(sd,KN_SPEARMASTERY) : 10);
+ //if( s_level > 100 ) skillratio += skillratio * s_level / 150; // Base level bonus. This is official, but is disabled until I can confirm something with was changed or not. [Rytech]
+ //if( s_level > 100 ) skillratio += skillratio * (s_level - 100) / 200; // Base level bonus.
+ break;
+ /**
+ * GC Guilotine Cross
+ **/
+ case GC_CROSSIMPACT:
+ skillratio += 1050 + 50 * skill_lv;
break;
+ case GC_PHANTOMMENACE:
+ skillratio += 200;
+ break;
+ case GC_COUNTERSLASH:
+ skillratio += 200 + (100 * skill_lv) + sstatus->agi;
+ break;
+ case GC_ROLLINGCUTTER:
+ skillratio += 20 * skill_lv;
+ break;
+ case GC_CROSSRIPPERSLASHER:
+ skillratio += 60 + 40 * skill_lv;
+ if( sc && sc->data[SC_ROLLINGCUTTER] )
+ skillratio += 25 * sc->data[SC_ROLLINGCUTTER]->val1;
+ break;
+ /**
+ * Arch Bishop
+ **/
case AB_DUPLELIGHT_MELEE:
skillratio += 10 * skill_lv;
break;
+ /**
+ * Ranger
+ **/
+ case RA_ARROWSTORM:
+ skillratio += 100 + 50 * skill_lv;
+ if( status_get_lv(src) > 100 ) skillratio += skillratio * (status_get_lv(src) - 100) / 200; // Base level bonus.
+ break;
+ case RA_AIMEDBOLT:
+ skillratio += 400 + 50 * skill_lv;
+ if( status_get_lv(src) > 100 ) skillratio += skillratio * (status_get_lv(src) - 100) / 200; // Base level bonus.
+ if( tsc && (tsc->data[SC_BITE] || tsc->data[SC_ANKLE] || tsc->data[SC_ELECTRICSHOCKER]) )
+ wd.div_ = tstatus->size + 2 + rand()%2;
+ break;
+ case RA_CLUSTERBOMB:
+ skillratio += 100 + 100 * skill_lv;
+ break;
+ case RA_WUGDASH:
+ skillratio = 500;
+ break;
+ case RA_WUGSTRIKE:
+ skillratio = 200 * skill_lv;
+ break;
+ case RA_WUGBITE:
+ skillratio += 300 + 200 * skill_lv;
+ if ( skill_lv == 5 ) skillratio += 100;
+ break;
+ case RA_SENSITIVEKEEN:
+ skillratio += 50 * skill_lv;
+ break;
+ /**
+ * Mechanic
+ **/
+ case NC_BOOSTKNUCKLE:
+ skillratio += 100 + 100 * skill_lv + sstatus->dex;
+ if( status_get_lv(src) > 100 ) skillratio += skillratio * (status_get_lv(src) - 100) / 200; // Base level bonus.
+ break;
+ case NC_PILEBUNKER:
+ skillratio += 200 + 100 * skill_lv + sstatus->str;
+ if( status_get_lv(src) > 100 ) skillratio += skillratio * (status_get_lv(src) - 100) / 200; // Base level bonus.
+ break;
+ case NC_VULCANARM:
+ skillratio = 70 * skill_lv + sstatus->dex;
+ if( status_get_lv(src) > 100 ) skillratio += skillratio * (status_get_lv(src) - 100) / 200; // Base level bonus.
+ break;
+ case NC_FLAMELAUNCHER:
+ case NC_COLDSLOWER:
+ skillratio += 200 + 300 * skill_lv;
+ if( status_get_lv(src) > 100 ) skillratio += skillratio * (status_get_lv(src) - 100) / 200; // Base level bonus.
+ break;
+ case NC_ARMSCANNON:
+ switch( tstatus->size ) {
+ case 0: skillratio += 100 + 500 * skill_lv; break;// Small
+ case 1: skillratio += 100 + 400 * skill_lv; break;// Medium
+ case 2: skillratio += 100 + 300 * skill_lv; break;// Large
+ }
+ if( status_get_lv(src) > 100 ) skillratio += skillratio * (status_get_lv(src) - 100) / 200; // Base level bonus.
+ //NOTE: Their's some other factors that affects damage, but not sure how exactly. Will recheck one day. [Rytech]
+ break;
+ case NC_AXEBOOMERANG:
+ skillratio += 60 + 40 * skill_lv;
+ if( sd ) {
+ short index = sd->equip_index[EQI_HAND_R];
+ if( index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->type == IT_WEAPON )
+ skillratio += sd->inventory_data[index]->weight / 10;// Weight is divided by 10 since 10 weight in coding make 1 whole actural weight. [Rytech]
+ }
+ if( status_get_lv(src) > 100 ) skillratio += skillratio * (status_get_lv(src) - 100) / 200; // Base level bonus.
+ break;
+ case NC_POWERSWING:
+ skillratio += 80 + 20 * skill_lv + sstatus->str + sstatus->dex;
+ if( status_get_lv(src) > 100 ) skillratio += skillratio * (status_get_lv(src) - 100) / 200; // Base level bonus.
+ break;
+ case NC_AXETORNADO:
+ skillratio += 100 + 100 * skill_lv + sstatus->vit;
+ if( status_get_lv(src) > 100 ) skillratio += skillratio * (status_get_lv(src) - 100) / 200; // Base level bonus.
+ break;
+
}
ATK_RATE(skillratio);
@@ -1854,6 +1990,16 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
case NJ_SYURIKEN:
ATK_ADD(4*skill_lv);
break;
+ /**
+ * Ranger
+ **/
+ case RA_WUGDASH:
+ case RA_WUGSTRIKE:
+ case RA_WUGBITE:
+ if(sd)
+ ATK_ADD(30*pc_checkskill(sd, RA_TOOTHOFWUG));
+ break;
+
}
}
//Div fix.
@@ -1863,14 +2009,17 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
if (sc) {
if(sc->data[SC_TRUESIGHT])
ATK_ADDRATE(2*sc->data[SC_TRUESIGHT]->val1);
-
+ #if RE_EDP == 0
+ /**
+ * In RE EDP doesn't affect your final damage but your atk and weapon atk
+ **/
if(sc->data[SC_EDP] &&
skill_num != ASC_BREAKER &&
skill_num != ASC_METEORASSAULT &&
skill_num != AS_SPLASHER &&
- skill_num != AS_VENOMKNIFE &&
- skill_num != AS_GRIMTOOTH) // RE disabled Grimtooth carrying EDP.
+ skill_num != AS_VENOMKNIFE)
ATK_ADDRATE(sc->data[SC_EDP]->val3);
+ #endif
}
switch (skill_num) {
@@ -1887,6 +2036,10 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
sc->data[SC_SPIRIT]->val2 == SL_CRUSADER)
ATK_ADDRATE(100);
break;
+ case NC_AXETORNADO:
+ if( (sstatus->rhw.ele) == ELE_WIND || (sstatus->lhw.ele) == ELE_WIND )
+ ATK_ADDRATE(50);
+ break;
}
if( sd )
@@ -1939,15 +2092,9 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
if (!flag.idef || !flag.idef2)
{ //Defense reduction
short vit_def;
- signed short def1 = status_get_def(target); //Don't use tstatus->def1 due to skill timer reductions.
+ signed char def1 = status_get_def(target); //Don't use tstatus->def1 due to skill timer reductions.
short def2 = (short)tstatus->def2;
- if( sc && sc->data[SC_EXPIATIO] )
- {
- def1 -= def1 * sc->data[SC_EXPIATIO]->val2 / 100;
- def2 -= def2 * sc->data[SC_EXPIATIO]->val2 / 100;
- }
-
if( sd )
{
i = sd->ignore_def[is_boss(target)?RC_BOSS:RC_NONBOSS];
@@ -1987,6 +2134,9 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
if((battle_check_undead(sstatus->race,sstatus->def_ele) || sstatus->race==RC_DEMON) && //This bonus already doesnt work vs players
src->type == BL_MOB && (skill=pc_checkskill(tsd,AL_DP)) > 0)
vit_def += skill*(int)(3 +(tsd->status.base_level+1)*0.04); // submitted by orn
+ if( src->type == BL_MOB && (skill=pc_checkskill(tsd,RA_RANGERMAIN))>0 &&
+ (sstatus->race == RC_BRUTE || sstatus->race == RC_FISH || sstatus->race == RC_PLANT) )
+ vit_def += skill*5;
} else { //Mob-Pet vit-eq
//VIT + rnd(0,[VIT/20]^2-1)
vit_def = (def2/20)*(def2/20);
@@ -2399,11 +2549,10 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
struct Damage md = battle_calc_misc_attack(src, target, skill_num, skill_lv, wflag);
wd.damage += md.damage;
}
-
- if ( sc )
- { // I don't see the point in repeating the SC check now that there are more things that use it. [L0ne_W0lf]
+ if( sc ) {
+ //SG_FUSION hp penalty [Komurka]
if (sc->data[SC_FUSION])
- { //SG_FUSION hp penalty [Komurka]
+ {
int hp= sstatus->max_hp;
if (sd && tsd) {
hp = 8*hp/100;
@@ -2413,38 +2562,21 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
hp = 2*hp/100; //2% hp loss per hit
status_zap(src, hp, 0);
}
-
- if(sc->data[SC_ENCHANTBLADE] && !skill_num && wd.flag&BF_SHORT )
- {
- if (tsc && tsc->data[SC_SAFETYWALL])
- ; // Although this is suposed to be considered a magic atttack, Safety Wall still blocks it? May be impemented wrong.
- else
- {
- struct Damage ebd = battle_calc_attack(BF_MAGIC,src,target,RK_ENCHANTBLADE,sc->data[SC_ENCHANTBLADE]->val1,wd.flag);
- wd.damage += (sc->data[SC_ENCHANTBLADE]->val1 * 20 + 100) * (status_get_lv(src) / 150) + sstatus->int_ + ebd.damage;
- }
- }
-
- if(sc->data[SC_GIANTGROWTH] && !skill_num )
- {
- int rate = battle_config.equip_natural_break_rate;
- rate += 10;
- skill_break_equip(src, EQP_WEAPON, rate, BCT_SELF);
- if( rand() % 100 <= 10 )
- ATK_RATE(300);
- }
-
- if(sc->data[SC_STONEHARDSKIN] && !skill_num)
- { // SC_STRIPWEAPON will reduce damage by 25% so piggyback off that since there is no offensive status for this.
- int rate = battle_config.equip_natural_break_rate;
- rate += 300; //chance to break gear, or reduce attack by 25% in hte case of monsters.
- if( sd )
- skill_break_equip(src,EQP_WEAPON,rate,BCT_ENEMY);
- if (!sd && !(status_get_mode(src)&MD_BOSS))
- status_change_start(src,SC_STRIPWEAPON,rate,0,0,0,0,10000,0);
+ /**
+ * affecting non-skills
+ **/
+ if( !skill_num ) {
+ /**
+ * RK Enchant Blade
+ **/
+ if( sc->data[SC_ENCHANTBLADE] && sd && ( (flag.rh && sd->weapontype1) || (flag.lh && sd->weapontype2) ) ) {
+ struct Damage md = battle_calc_magic_attack(src, target, RK_ENCHANTBLADE, pc_checkskill(sd,RK_ENCHANTBLADE), wflag);
+ wd.damage += md.damage;
+ wd.flag |= md.flag;
}
- }
+ }
+ }
return wd;
}
@@ -2536,6 +2668,9 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
case AL_HEAL:
case PR_BENEDICTIO:
case PR_SANCTUARY:
+ /**
+ * Arch Bishop
+ **/
case AB_HIGHNESSHEAL:
ad.damage = skill_calc_heal(src, target, skill_num, skill_lv, false);
break;
@@ -2556,17 +2691,31 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
case PF_SOULBURN:
ad.damage = tstatus->sp * 2;
break;
+ /**
+ * Arch Bishop
+ **/
case AB_RENOVATIO:
+ //Damage calculation from iRO wiki. [Jobbie]
ad.damage = (int)((15 * status_get_lv(src)) + (1.5 * sstatus->int_));
break;
default:
{
+ #if RRMODE //Renewal MATK Appliance according to doddler (?title=Renewal_Changes#Upgrade_MATK)
+ /**
+ * min: (weaponMATK+upgradeMATK) * 2 + 1.5 * statusMATK
+ * max: [weaponMATK+upgradeMATK+(wMatk*wLvl)/10] * 2 + 1.5 * statusMATK
+ * yes this formula MATCHES their site: matk_max already holds weaponmatk+upgradematk, and
+ * -> statusMATK holds the %Matk modifier stuff from earlier and lastly:
+ * -> the mdef part is not applied at this point, but later.
+ **/ //1:bugreport:5101 //1:bugreport:5101
+ MATK_ADD((1+sstatus->matk_max) * 2 + 15/10 * sstatus->matk_min + rand()% ( sstatus->matk_max + (1 + (sstatus->matk_max*sstatus->wlv) / 10 * 2 * 10/15 * sstatus->matk_min ) ));
+ #else //Ancient MATK Appliance
if (sstatus->matk_max > sstatus->matk_min) {
MATK_ADD(sstatus->matk_min+rand()%(1+sstatus->matk_max-sstatus->matk_min));
} else {
MATK_ADD(sstatus->matk_min);
}
-
+ #endif
if(nk&NK_SPLASHSPLIT){ // Divide MATK in case of multiple targets skill
if(mflag>0)
ad.damage/= mflag;
@@ -2612,6 +2761,11 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
case WZ_SIGHTRASHER:
skillratio += 20*skill_lv;
break;
+#if FIREIVY_ON
+ case WZ_FIREIVY:
+ skillratio += 20*skill_lv-15;
+ break;
+#endif
case WZ_VERMILION:
skillratio += 20*skill_lv-20;
break;
@@ -2655,15 +2809,193 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
case NPC_EARTHQUAKE:
skillratio += 100 +100*skill_lv +100*(skill_lv/2);
break;
+ /**
+ * Arch Bishop
+ **/
case AB_JUDEX:
- skillratio += ((skill_lv * 20) + 300) * status_get_lv(src) / 100;
+ skillratio += 180 + 20 * skill_lv;
+ if (skill_lv > 4) skillratio += 20;
+ if( status_get_lv(src) > 100 ) skillratio += skillratio * (status_get_lv(src) - 100) / 200; // Base level bonus.
break;
case AB_ADORAMUS:
- skillratio += ((skill_lv * 100) + 500) * status_get_lv(src) / 100;
+ skillratio += 400 + 100 * skill_lv;
+ if( status_get_lv(src) > 100 ) skillratio += skillratio * (status_get_lv(src) - 100) / 200; // Base level bonus.
break;
case AB_DUPLELIGHT_MAGIC:
- skillratio = 200 + 20 * skill_lv;
+ skillratio += 100 + 20 * skill_lv;
+ break;
+ /**
+ * Warlock
+ **/
+ case WL_SOULEXPANSION:
+ skillratio += 300 + 100 * skill_lv + sstatus->int_;
+ if( status_get_lv(src) > 100 ) skillratio += skillratio * (status_get_lv(src) - 100) / 200; // Base level bonus.
+ break;
+ case WL_FROSTMISTY:
+ skillratio += 100 + 100 * skill_lv;
+ if( status_get_lv(src) > 100 ) skillratio += skillratio * (status_get_lv(src) - 100) / 200; // Base level bonus.
+ break;
+ case WL_JACKFROST:
+ {
+ struct status_change *tsc = status_get_sc(target);
+ if( tsc && tsc->data[SC_FREEZING] )
+ {
+ skillratio += 900 + 300 * skill_lv;
+ if( status_get_lv(src) > 100 ) skillratio += skillratio * (status_get_lv(src) - 100) / 200; // Base level bonus.
+ }
+ else
+ skillratio += 400 + 100 * skill_lv;
+ if( status_get_lv(src) > 100 ) skillratio += skillratio * (status_get_lv(src) - 100) / 200; // Base level bonus.
+ }
+ break;
+ case WL_DRAINLIFE:
+ skillratio = 200 * skill_lv + sstatus->int_;
+ if( status_get_lv(src) > 100 ) skillratio += skillratio * (status_get_lv(src) - 100) / 200; // Base level bonus.
+ break;
+ case WL_CRIMSONROCK:
+ skillratio += 1200 + 300 * skill_lv;
+ if( status_get_lv(src) > 100 ) skillratio += skillratio * (status_get_lv(src) - 100) / 200; // Base level bonus.
+ break;
+ case WL_HELLINFERNO:
+ if( status_get_element(target) == ELE_FIRE )
+ skillratio = 60 * skill_lv;
+ else
+ skillratio = 240 * skill_lv;
+ if( status_get_lv(src) > 100 ) skillratio += skillratio * (status_get_lv(src) - 100) / 200; // Base level bonus.
+ break;
+ case WL_COMET: {
+ struct status_change * sc = status_get_sc(src);
+ if( sc )
+ i = distance_xy(target->x, target->y, sc->comet_x, sc->comet_y);
+ else
+ i = 8;
+ if( i < 2 ) skillratio = 2500 + 500 * skill_lv;
+ else
+ if( i < 4 ) skillratio = 1600 + 400 * skill_lv;
+ else
+ if( i < 6 ) skillratio = 1200 + 300 * skill_lv;
+ else
+ skillratio = 800 + 200 * skill_lv;
+ }
+ break;
+ case WL_CHAINLIGHTNING_ATK:
+ skillratio += 100 + 300 * skill_lv;
+ if( status_get_lv(src) > 100 ) skillratio += skillratio * (status_get_lv(src) - 100) / 200; // Base level bonus.
+ break;
+ case WL_EARTHSTRAIN:
+ skillratio += 1900 + 100 * skill_lv;
+ if( status_get_lv(src) > 100 ) skillratio += skillratio * (status_get_lv(src) - 100) / 200; // Base level bonus.
+ break;
+ case WL_TETRAVORTEX_FIRE:
+ case WL_TETRAVORTEX_WATER:
+ case WL_TETRAVORTEX_WIND:
+ case WL_TETRAVORTEX_GROUND:
+ skillratio += 400 + 500 * skill_lv;
break;
+ case WL_SUMMON_ATK_FIRE:
+ case WL_SUMMON_ATK_WATER:
+ case WL_SUMMON_ATK_WIND:
+ case WL_SUMMON_ATK_GROUND:
+ skillratio = skill_lv * (status_get_lv(src) + ( sd ? sd->status.job_level : 50 ));// This is close to official, but lacking a little info to finalize. [Rytech]
+ if( status_get_lv(src) > 100 ) skillratio += skillratio * (status_get_lv(src) - 100) / 200; // Base level bonus.
+ break;
+ case LG_RAYOFGENESIS:
+ skillratio = (skillratio + 200) * skill_lv;
+ if( status_get_lv(src) > 100 ) skillratio += skillratio * (status_get_lv(src) - 100) / 200; // Base level bonus.
+ break;
+ case WM_METALICSOUND:
+ skillratio += 120 * skill_lv + 60 * ( sd? pc_checkskill(sd, WM_LESSON) : 10 ) - 100;
+ break;
+ case WM_SEVERE_RAINSTORM:
+ skillratio += 50 * skill_lv;
+ break;
+ case WM_REVERBERATION_MAGIC:
+ skillratio += 100 * (sd ? pc_checkskill(sd, WM_REVERBERATION) : 1);
+ break;
+ case SO_FIREWALK: {
+ struct status_change * sc = status_get_sc(src);
+ skillratio = 300;
+ if( status_get_lv(src) > 100 ) skillratio += skillratio * (status_get_lv(src) - 100) / 200; // Base level bonus.
+ if( sc && sc->data[SC_HEATER_OPTION] )
+ skillratio += skillratio * sc->data[SC_HEATER_OPTION]->val3 / 100;
+ }
+ break;
+ case SO_ELECTRICWALK: {
+ struct status_change * sc = status_get_sc(src);
+ skillratio = 300;
+ if( status_get_lv(src) > 100 ) skillratio += skillratio * (status_get_lv(src) - 100) / 200; // Base level bonus.
+ if( sc && sc->data[SC_BLAST_OPTION] )
+ skillratio += skillratio * sc->data[SC_BLAST_OPTION]->val2 / 100;
+ }
+ break;
+ case SO_EARTHGRAVE: {
+ struct status_change * sc = status_get_sc(src);
+ skillratio = ( 200 * ( sd ? pc_checkskill(sd, SA_SEISMICWEAPON) : 10 ) + sstatus->int_ * skill_lv );
+ if( status_get_lv(src) > 100 ) skillratio += skillratio * (status_get_lv(src) - 100) / 200; // Base level bonus.
+ if( sc && sc->data[SC_CURSED_SOIL_OPTION] )
+ skillratio += skillratio * sc->data[SC_CURSED_SOIL_OPTION]->val2 / 100;
+ }
+ break;
+ case SO_DIAMONDDUST: {
+ struct status_change * sc = status_get_sc(src);
+ skillratio = ( 200 * ( sd ? pc_checkskill(sd, SA_FROSTWEAPON) : 10 ) + sstatus->int_ * skill_lv );
+ if( status_get_lv(src) > 100 ) skillratio += skillratio * (status_get_lv(src) - 100) / 200; // Base level bonus.
+ if( sc && sc->data[SC_COOLER_OPTION] )
+ skillratio += skillratio * sc->data[SC_COOLER_OPTION]->val3 / 100;
+ }
+ break;
+ case SO_POISON_BUSTER: {
+ struct status_change * sc = status_get_sc(src);
+ skillratio += 1100 + 300 * skill_lv;
+ if( sc && sc->data[SC_CURSED_SOIL_OPTION] )
+ skillratio += skillratio * sc->data[SC_CURSED_SOIL_OPTION]->val2 / 100;
+ }
+ break;
+ case SO_PSYCHIC_WAVE: {
+ struct status_change * sc = status_get_sc(src);
+ skillratio += -100 + skill_lv * 70 + (sstatus->int_ * 3);
+ if( status_get_lv(src) > 100 ) skillratio += skillratio * (status_get_lv(src) - 100) / 200; // Base level bonus.
+ if( sc ){
+ if( sc->data[SC_HEATER_OPTION] )
+ skillratio += skillratio * sc->data[SC_HEATER_OPTION]->val3 / 100;
+ else if(sc->data[SC_COOLER_OPTION] )
+ skillratio += skillratio * sc->data[SC_COOLER_OPTION]->val3 / 100;
+ else if(sc->data[SC_BLAST_OPTION] )
+ skillratio += skillratio * sc->data[SC_BLAST_OPTION]->val2 / 100;
+ else if(sc->data[SC_CURSED_SOIL_OPTION] )
+ skillratio += skillratio * sc->data[SC_CURSED_SOIL_OPTION]->val3 / 100;
+ }
+ }
+ break;
+ case SO_VARETYR_SPEAR: {
+ struct status_change * sc = status_get_sc(src);
+ skillratio += -100 + ( 100 * ( sd ? pc_checkskill(sd, SA_LIGHTNINGLOADER) : 10 ) + sstatus->int_ * skill_lv );
+ if( status_get_lv(src) > 100 ) skillratio += skillratio * (status_get_lv(src) - 100) / 200; // Base level bonus.
+ if( sc && sc->data[SC_BLAST_OPTION] )
+ skillratio += skillratio * sc->data[SC_BLAST_OPTION]->val2 / 100;
+ }
+ break;
+ case SO_CLOUD_KILL: {
+ struct status_change * sc = status_get_sc(src);
+ skillratio += -100 + skill_lv * 40;
+ if( status_get_lv(src) > 100 ) skillratio += skillratio * (status_get_lv(src) - 100) / 200; // Base level bonus.
+ if( sc && sc->data[SC_CURSED_SOIL_OPTION] )
+ skillratio += skillratio * sc->data[SC_CURSED_SOIL_OPTION]->val2 / 100;
+ }
+ break;
+ case GN_DEMONIC_FIRE:
+ if( skill_lv > 20)
+ { // Fire expansion Lv.2
+ skillratio += 110 + 20 * (skill_lv - 20) + status_get_int(src) * 3; // Need official INT bonus. [LimitLine]
+ }
+ else if( skill_lv > 10 )
+ { // Fire expansion Lv.1
+ skillratio += 110 + 20 * (skill_lv - 10) / 2;
+ }
+ else
+ skillratio += 110 + 20 * skill_lv;
+ break;
+
}
MATK_RATE(skillratio);
@@ -2689,7 +3021,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
}
if(!flag.imdef){
- short mdef = tstatus->mdef;
+ char mdef = tstatus->mdef;
int mdef2= tstatus->mdef2;
if(sd) {
i = sd->ignore_mdef[is_boss(target)?RC_BOSS:RC_NONBOSS];
@@ -2701,10 +3033,19 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
//mdef2-= mdef2* i/100;
}
}
+ #if RRMODE
+ /**
+ * RE MDEF Reduction (from doddler:?title=Renewal_Changes#MDEF)
+ * Damage from magic = Magic Attack * 111.5/(111.5+eMDEF)
+ * Damage = Magic Attack * 111.5/(111.5+eMDEF) - sMDEF
+ **/
+ ad.damage = ad.damage * ((1115/10) - mdef)/(1115/10) - mdef2;
+ #else
if(battle_config.magic_defense_type)
ad.damage = ad.damage - mdef*battle_config.magic_defense_type - mdef2;
else
ad.damage = ad.damage * (100-mdef)/100 - mdef2;
+ #endif
}
if (skill_num == NPC_EARTHQUAKE)
@@ -2957,7 +3298,31 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
md.damage = skill_calc_heal(src,target,skill_num,skill_lv,false);
break;
case RK_DRAGONBREATH:
- md.damage = (sstatus->hp / 50 + sstatus->max_sp / 4) * (skill_lv * status_get_lv(src)/150) * (95 + 5 * (sd?pc_checkskill(sd,RK_DRAGONTRAINING):10)) / 100;
+ md.damage = ((status_get_hp(src) / 50) + (status_get_max_sp(src) / 4)) * skill_lv;
+ if (status_get_lv(src) > 100) md.damage = md.damage * status_get_lv(src) / 150;
+ if (sd) md.damage = md.damage * (100 + 5 * (pc_checkskill(sd,RK_DRAGONTRAINING) - 1)) / 100;
+ break;
+ /**
+ * Ranger
+ **/
+ case RA_CLUSTERBOMB:
+ case RA_FIRINGTRAP:
+ case RA_ICEBOUNDTRAP:
+ md.damage = (2 * skill_lv * (sstatus->dex + 100));
+ if (status_get_lv(src) > 100) md.damage += md.damage * (status_get_lv(src) - 50) / 200 + 15 / 10;
+ md.damage = md.damage * 2;// Without BaseLv Bonus
+ md.damage = md.damage + (5 * sstatus->int_) + (40 * ( sd ? pc_checkskill(sd,RA_RESEARCHTRAP) : 10 ) );
+ break;
+ /**
+ * Mechanic
+ **/
+ case NC_SELFDESTRUCTION:
+ md.damage = (sd?pc_checkskill(sd,NC_MAINFRAME):10) * skill_lv * (status_get_sp(src) + sstatus->vit);
+ if (status_get_lv(src) > 100) md.damage = md.damage * status_get_lv(src) / 150;// Base level bonus.
+ if (sd) md.damage = md.damage + status_get_hp(src);
+ status_set_sp(src, 0, 0);
+ break;
+
}
if (nk&NK_SPLASHSPLIT){ // Divide ATK among targets
@@ -3059,11 +3424,23 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
else if( map[target->m].flag.battleground )
md.damage=battle_calc_bg_damage(src,target,md.damage,md.div_,skill_num,skill_lv,md.flag);
- if (skill_num == NJ_ZENYNAGE && sd)
- { //Time to Pay Up.
- if ( md.damage > sd->status.zeny )
- md.damage=sd->status.zeny;
- pc_payzeny(sd, md.damage);
+ switch( skill_num ) {
+ case RA_CLUSTERBOMB:
+ case RA_FIRINGTRAP:
+ case RA_ICEBOUNDTRAP:
+ {
+ struct Damage wd;
+ wd = battle_calc_weapon_attack(src,target,skill_num,skill_lv,mflag);
+ md.damage += wd.damage;
+ }
+ break;
+ case NJ_ZENYNAGE:
+ if( sd ) {
+ if ( md.damage > sd->status.zeny )
+ md.damage = sd->status.zeny;
+ pc_payzeny(sd, md.damage);
+ }
+ break;
}
return md;
@@ -3096,10 +3473,10 @@ struct Damage battle_calc_attack(int attack_type,struct block_list *bl,struct bl
}
//Calculates BF_WEAPON returned damage.
-int battle_calc_return_damage(struct block_list* bl, int damage, int flag)
+int battle_calc_return_damage(struct block_list* bl, struct block_list *src, int *dmg, int flag)
{
struct map_session_data* sd = NULL;
- int rdamage = 0;
+ int rdamage = 0, damage = *dmg;
sd = BL_CAST(BL_PC, bl);
@@ -3112,10 +3489,24 @@ int battle_calc_return_damage(struct block_list* bl, int damage, int flag)
if(rdamage < 1) rdamage = 1;
}
sc = status_get_sc(bl);
- if (sc && sc->data[SC_REFLECTSHIELD])
- {
- rdamage += damage * sc->data[SC_REFLECTSHIELD]->val2 / 100;
- if (rdamage < 1) rdamage = 1;
+ if( sc && sc->count ) {
+ if (sc->data[SC_REFLECTSHIELD]) {
+ rdamage += damage * sc->data[SC_REFLECTSHIELD]->val2 / 100;
+ if (rdamage < 1) rdamage = 1;
+ }
+ if(sc->data[SC_DEATHBOUND] && !(src->type == BL_MOB && is_boss(src)) ) {
+ int dir = map_calc_dir(bl,src->x,src->y),
+ t_dir = unit_getdir(bl), rd1 = 0;
+
+ if( distance_bl(src,bl) <= 0 || !map_check_dir(dir,t_dir) ) {
+ rd1 = min(damage,status_get_max_hp(bl)) * sc->data[SC_DEATHBOUND]->val2 / 100; // Amplify damage.
+ *dmg = rd1 * 30 / 100; // Received damge = 30% of amplifly damage.
+ clif_skill_damage(src,bl,gettick(), status_get_amotion(src), 0, -30000, 1, RK_DEATHBOUND, sc->data[SC_DEATHBOUND]->val1,6);
+ status_change_end(bl,SC_DEATHBOUND,-1);
+ rdamage += rd1;
+ if (rdamage < 1) rdamage = 1;
+ }
+ }
}
} else {
if (sd && sd->long_weapon_damage_return)
@@ -3318,27 +3709,17 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t
damage = wd.damage + wd.damage2;
if( damage > 0 && src != target )
{
- if( sc && sc->data[SC_DUPLELIGHT] ) {
- int skilllv = sc->data[SC_DUPLELIGHT]->val1;
- if( rand()%100 < sc->data[SC_DUPLELIGHT]->val2 )
- skill_addtimerskill(src,tick+status_get_adelay(src) / 2,target->id,0,0,AB_DUPLELIGHT_MELEE,skilllv,BF_WEAPON,flag);
- else if( rand()%100 < sc->data[SC_DUPLELIGHT]->val3 )
- skill_addtimerskill(src,tick+status_get_adelay(src) / 2,target->id,0,0,AB_DUPLELIGHT_MAGIC,skilllv,BF_MAGIC,flag);
- }
-
- if(tsc && tsc->data[SC_DEATHBOUND] && !is_boss(src) && map_check_dir(map_calc_dir(src,target->x,target->y),unit_getdir(target)))
- {
- int skilllv = tsc->data[SC_DEATHBOUND]->val1;
- clif_skill_damage(src,src, tick, 0, 0, 0, 0, RK_DEATHBOUND,-1, 1);
- rdamage = wd.damage * ((500 + 100*skilllv) / 100);
- wd.damage = rdamage * 30 / 100;
- status_zap(target, wd.damage, 0);
- skill_blown(src, src, skill_get_blewcount(RK_DEATHBOUND,skilllv), unit_getdir(src), 0);
- status_change_end(target,SC_DEATHBOUND,INVALID_TIMER);
+ if( sc && sc->data[SC_DUPLELIGHT] && (wd.flag&BF_SHORT) && rand()%100 <= 10+2*sc->data[SC_DUPLELIGHT]->val1 )
+ { // Activates it only from melee damage
+ int skillid;
+ if( rand()%2 == 1 )
+ skillid = AB_DUPLELIGHT_MELEE;
+ else
+ skillid = AB_DUPLELIGHT_MAGIC;
+ skill_attack(skill_get_type(skillid), src, src, target, skillid, sc->data[SC_DUPLELIGHT]->val1, tick, SD_LEVEL);
}
- else
- rdamage = battle_calc_return_damage(target, damage, wd.flag);
+ rdamage = battle_calc_return_damage(target,src, &damage, wd.flag);
if( rdamage > 0 )
{
rdelay = clif_damage(src, src, tick, wd.amotion, sstatus->dmotion, rdamage, 1, 4, 0);
@@ -3399,11 +3780,6 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t
}
}
}
- if (sc && sc->data[SC_CRUSHSTRIKE])
- {
- skill_castend_damage_id(src, target, RK_CRUSHSTRIKE, 1, tick, flag);
- status_change_end(src,SC_CRUSHSTRIKE, INVALID_TIMER);
- }
if (sd) {
if (wd.flag & BF_WEAPON && src != target && damage > 0) {
if (battle_config.left_cardfix_to_right)
@@ -3551,6 +3927,8 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
case WZ_SIGHTBLASTER:
case SM_MAGNUM:
case MS_MAGNUM:
+ case RA_DETONATOR:
+ case RA_SENSITIVEKEEN:
state |= BCT_ENEMY;
strip_enemy = 0;
break;
@@ -3814,6 +4192,8 @@ static const struct _battle_data {
{ "enable_perfect_flee", &battle_config.enable_perfect_flee, BL_PC|BL_PET, BL_NUL, BL_ALL, },
{ "casting_rate", &battle_config.cast_rate, 100, 0, INT_MAX, },
{ "delay_rate", &battle_config.delay_rate, 100, 0, INT_MAX, },
+ { "delay_dependon_dex", &battle_config.delay_dependon_dex, 0, 0, 1, },
+ { "delay_dependon_agi", &battle_config.delay_dependon_agi, 0, 0, 1, },
{ "skill_delay_attack_enable", &battle_config.sdelay_attack_enable, 0, 0, 1, },
{ "left_cardfix_to_right", &battle_config.left_cardfix_to_right, 0, 0, 1, },
{ "skill_add_range", &battle_config.skill_add_range, 0, 0, INT_MAX, },
@@ -3940,16 +4320,14 @@ static const struct _battle_data {
{ "arrow_decrement", &battle_config.arrow_decrement, 1, 0, 2, },
{ "max_aspd", &battle_config.max_aspd, 199, 100, 199, },
{ "max_walk_speed", &battle_config.max_walk_speed, 300, 100, 100*DEFAULT_WALK_SPEED, },
- { "max_lv", &battle_config.max_lv, 99, 0, 150, },
+ { "max_lv", &battle_config.max_lv, 99, 0, 127, },
{ "aura_lv", &battle_config.aura_lv, 99, 0, INT_MAX, },
{ "max_hp", &battle_config.max_hp, 32500, 100, 1000000000, },
{ "max_sp", &battle_config.max_sp, 32500, 100, 1000000000, },
{ "max_cart_weight", &battle_config.max_cart_weight, 8000, 100, 1000000, },
{ "max_parameter", &battle_config.max_parameter, 99, 10, 10000, },
{ "max_baby_parameter", &battle_config.max_baby_parameter, 80, 10, 10000, },
- { "max_third_parameter", &battle_config.max_third_parameter, 120, 10, 10000, },
- { "max_baby_third_parameter", &battle_config.max_baby_third_parameter, 108, 10, 10000, },
- { "max_def", &battle_config.max_def, SHRT_MAX, 0, INT_MAX, },
+ { "max_def", &battle_config.max_def, 99, 0, INT_MAX, },
{ "over_def_bonus", &battle_config.over_def_bonus, 0, 0, 1000, },
{ "skill_log", &battle_config.skill_log, BL_NUL, BL_NUL, BL_ALL, },
{ "battle_log", &battle_config.battle_log, 0, 0, 1, },
@@ -4083,6 +4461,7 @@ static const struct _battle_data {
{ "min_cloth_color", &battle_config.min_cloth_color, 0, 0, INT_MAX, },
{ "max_cloth_color", &battle_config.max_cloth_color, 4, 0, INT_MAX, },
{ "pet_hair_style", &battle_config.pet_hair_style, 100, 0, INT_MAX, },
+ { "castrate_dex_scale", &battle_config.castrate_dex_scale, 150, 1, INT_MAX, },
{ "area_size", &battle_config.area_size, 14, 0, INT_MAX, },
{ "zeny_from_mobs", &battle_config.zeny_from_mobs, 0, 0, 1, },
{ "mobs_level_up", &battle_config.mobs_level_up, 0, 0, 1, },
@@ -4200,13 +4579,11 @@ static const struct _battle_data {
{ "bg_magic_attack_damage_rate", &battle_config.bg_magic_damage_rate, 60, 0, INT_MAX, },
{ "bg_misc_attack_damage_rate", &battle_config.bg_misc_damage_rate, 60, 0, INT_MAX, },
{ "bg_flee_penalty", &battle_config.bg_flee_penalty, 20, 0, INT_MAX, },
-// MVP Decrease AGI
- { "max_decagi_lv", &battle_config.max_decagi_lv, 11, 1, INT_MAX, },
- { "max_decagi_dur", &battle_config.max_decagi_dur, 120000, 1, INT_MAX, },
- { "max_decagi", &battle_config.max_decagi, 50, 0, INT_MAX, },
-// Third jobs
- { "rune_block_by_skill", &battle_config.rune_block_by_skill, 1, 0, 1, },
- { "rune_block_by_status", &battle_config.rune_block_by_status, 0, 0, 1, },
+ /**
+ * rAthena
+ **/
+ { "max_third_parameter", &battle_config.max_third_parameter, 20, 0, INT_MAX, },
+ { "atcommand_max_stat_bypass", &battle_config.atcommand_max_stat_bypass, 0, 0, 100, },
};
@@ -4253,8 +4630,8 @@ void battle_adjust_conf()
battle_config.max_walk_speed = 100*DEFAULT_WALK_SPEED/battle_config.max_walk_speed;
battle_config.max_cart_weight *= 10;
- if(battle_config.max_def > SHRT_MAX && !battle_config.weapon_defense_type) // added by [Skotlex]
- battle_config.max_def = SHRT_MAX;
+ if(battle_config.max_def > 100 && !battle_config.weapon_defense_type) // added by [Skotlex]
+ battle_config.max_def = 100;
if(battle_config.min_hitrate > battle_config.max_hitrate)
battle_config.min_hitrate = battle_config.max_hitrate;
diff --git a/src/map/battle.h b/src/map/battle.h
index 7570f77b7..41ff70850 100644
--- a/src/map/battle.h
+++ b/src/map/battle.h
@@ -35,7 +35,7 @@ struct block_list;
struct Damage battle_calc_attack(int attack_type,struct block_list *bl,struct block_list *target,int skill_num,int skill_lv,int count);
-int battle_calc_return_damage(struct block_list *bl, int damage, int flag);
+int battle_calc_return_damage(struct block_list *bl, struct block_list *src, int *, int flag);
void battle_drain(struct map_session_data *sd, struct block_list *tbl, int rdamage, int ldamage, int race, int boss);
@@ -111,6 +111,7 @@ extern struct Battle_Config
int enable_baseatk;
int enable_perfect_flee;
int cast_rate, delay_rate;
+ int delay_dependon_dex, delay_dependon_agi;
int sdelay_attack_enable;
int left_cardfix_to_right;
int skill_add_range;
@@ -234,7 +235,7 @@ extern struct Battle_Config
int max_hp;
int max_sp;
int max_lv, aura_lv;
- int max_parameter, max_baby_parameter, max_third_parameter, max_baby_third_parameter;
+ int max_parameter, max_baby_parameter;
int max_cart_weight;
int skill_log;
int battle_log;
@@ -362,6 +363,7 @@ extern struct Battle_Config
int max_cloth_color; // added by [MouseJstr]
int pet_hair_style; // added by [Skotlex]
+ int castrate_dex_scale; // added by [MouseJstr]
int area_size; // added by [MouseJstr]
int max_def, over_def_bonus; //added by [Skotlex]
@@ -495,12 +497,9 @@ extern struct Battle_Config
int bg_magic_damage_rate;
int bg_misc_damage_rate;
int bg_flee_penalty;
-
- int max_decagi_lv;
- int max_decagi_dur;
- int max_decagi;
- int rune_block_by_skill;
- int rune_block_by_status;
+ // rAthena
+ int max_third_parameter;
+ int atcommand_max_stat_bypass;
} battle_config;
void do_init_battle(void);
@@ -511,4 +510,7 @@ extern void battle_set_defaults(void);
int battle_set_value(const char* w1, const char* w2);
int battle_get_value(const char* w1);
+//
+struct block_list* battle_getenemyarea(struct block_list *src, int x, int y, int range, int type, int ignore_id);
+
#endif /* _BATTLE_H_ */
diff --git a/src/map/buyingstore.c b/src/map/buyingstore.c
index 94f390c10..8d3179745 100644
--- a/src/map/buyingstore.c
+++ b/src/map/buyingstore.c
@@ -56,12 +56,18 @@ bool buyingstore_setup(struct map_session_data* sd, unsigned char slots)
return false;
}
- if( map[sd->bl.m].flag.novending || map_getcell(sd->bl.m, sd->bl.x, sd->bl.y, CELL_CHKNOVENDING) )
- {// custom: no vending maps/cells
+ if( map[sd->bl.m].flag.novending )
+ {// custom: no vending maps
clif_displaymessage(sd->fd, msg_txt(276)); // "You can't open a shop on this map"
return false;
}
+ if( map_getcell(sd->bl.m, sd->bl.x, sd->bl.y, CELL_CHKNOVENDING) )
+ {// custom: no vending cells
+ clif_displaymessage(sd->fd, msg_txt(204)); // "You can't open a shop on this cell."
+ return false;
+ }
+
if( slots > MAX_BUYINGSTORE_SLOTS )
{
ShowWarning("buyingstore_setup: Requested %d slots, but server supports only %d slots.\n", (int)slots, MAX_BUYINGSTORE_SLOTS);
@@ -105,12 +111,18 @@ void buyingstore_create(struct map_session_data* sd, int zenylimit, unsigned cha
return;
}
- if( map[sd->bl.m].flag.novending || map_getcell(sd->bl.m, sd->bl.x, sd->bl.y, CELL_CHKNOVENDING) )
- {// custom: no vending maps/cells
+ if( map[sd->bl.m].flag.novending )
+ {// custom: no vending maps
clif_displaymessage(sd->fd, msg_txt(276)); // "You can't open a shop on this map"
return;
}
+ if( map_getcell(sd->bl.m, sd->bl.x, sd->bl.y, CELL_CHKNOVENDING) )
+ {// custom: no vending cells
+ clif_displaymessage(sd->fd, msg_txt(204)); // "You can't open a shop on this cell."
+ return;
+ }
+
weight = sd->weight;
// check item list
diff --git a/src/map/chrif.c b/src/map/chrif.c
index d1332fab2..947cb0bdc 100644
--- a/src/map/chrif.c
+++ b/src/map/chrif.c
@@ -505,7 +505,13 @@ void chrif_on_ready(void)
ShowStatus("Map Server is now online.\n");
chrif_state = 2;
chrif_check_shutdown();
-
+ /**
+ * while we're not fully ready
+ **/
+ ShowMessage(""CL_XXBL""CL_BT_YELLOW"============= WARNING ============="CL_XXBL""CL_CLL""CL_NORMAL"\n");
+ ShowMessage(""CL_XXBL"- "CL_BT_YELLOW"This version is under development and shouldn't be used as a real server"CL_XXBL""CL_CLL""CL_NORMAL"\n");
+ ShowMessage(""CL_XXBL"- "CL_BT_YELLOW"For bugs, comments and suggestions: http://ro-resources.net "CL_XXBL""CL_CLL""CL_NORMAL"\n");
+ ShowMessage(""CL_XXBL"- "CL_BT_YELLOW"Thank you for trying out"CL_XXBL""CL_CLL""CL_NORMAL"\n");
//If there are players online, send them to the char-server. [Skotlex]
send_users_tochar();
diff --git a/src/map/clif.c b/src/map/clif.c
index a8cfa48cd..75c00187e 100644
--- a/src/map/clif.c
+++ b/src/map/clif.c
@@ -63,35 +63,60 @@ static inline int itemtype(int type)
return ( type == IT_PETEGG ) ? IT_WEAPON : type;
}
-#define WBUFPOS(p,pos,x,y,dir) \
- do { \
- uint8 *__p = (p); \
- __p+=(pos); \
- __p[0] = (uint8)((x)>>2); \
- __p[1] = (uint8)(((x)<<6) | (((y)>>4)&0x3f)); \
- __p[2] = (uint8)(((y)<<4) | ((dir)&0xf)); \
- } while(0)
+
+static inline void WBUFPOS(uint8* p, unsigned short pos, short x, short y, unsigned char dir)
+{
+ p += pos;
+ p[0] = (uint8)(x>>2);
+ p[1] = (uint8)((x<<6) | ((y>>4)&0x3f));
+ p[2] = (uint8)((y<<4) | (dir&0xf));
+}
+
+
// client-side: x0+=sx0*0.0625-0.5 and y0+=sy0*0.0625-0.5
-#define WBUFPOS2(p,pos,x0,y0,x1,y1,sx0,sy0) \
- do { \
- uint8 *__p = (p); \
- __p+=(pos); \
- __p[0]=(uint8)((x0)>>2); \
- __p[1]=(uint8)(((x0)<<6) | (((y0)>>4)&0x3f)); \
- __p[2]=(uint8)(((y0)<<4) | (((x1)>>6)&0x0f)); \
- __p[3]=(uint8)(((x1)<<2) | (((y1)>>8)&0x03)); \
- __p[4]=(uint8)(y1); \
- __p[5]=(uint8)(((sx0)<<4) | ((sy0)&0x0f)); \
- } while(0)
-
-#define WFIFOPOS(fd,pos,x,y,dir) WBUFPOS(WFIFOP(fd,pos),0,x,y,dir)
-#define WFIFOPOS2(fd,pos,x0,y0,x1,y1,sx0,sy0) WBUFPOS2(WFIFOP(fd,pos),0,x0,y0,x1,y1,sx0,sy0)
+static inline void WBUFPOS2(uint8* p, unsigned short pos, short x0, short y0, short x1, short y1, unsigned char sx0, unsigned char sy0)
+{
+ p += pos;
+ p[0] = (uint8)(x0>>2);
+ p[1] = (uint8)((x0<<6) | ((y0>>4)&0x3f));
+ p[2] = (uint8)((y0<<4) | ((x1>>6)&0x0f));
+ p[3] = (uint8)((x1<<2) | ((y1>>8)&0x03));
+ p[4] = (uint8)y1;
+ p[5] = (uint8)((sx0<<4) | (sy0&0x0f));
+}
+
+
+static inline void WFIFOPOS(int fd, unsigned short pos, short x, short y, unsigned char dir)
+{
+ WBUFPOS(WFIFOP(fd,pos), 0, x, y, dir);
+}
+
+
+inline void WFIFOPOS2(int fd, unsigned short pos, short x0, short y0, short x1, short y1, unsigned char sx0, unsigned char sy0)
+{
+ WBUFPOS2(WFIFOP(fd,pos), 0, x0, y0, x1, y1, sx0, sy0);
+}
+
//To idenfity disguised characters.
-#define disguised(bl) ((bl)->type==BL_PC && ((TBL_PC*)bl)->disguise)
+static inline bool disguised(struct block_list* bl)
+{
+ return (bool)( bl->type == BL_PC && ((TBL_PC*)bl)->disguise );
+}
+
+
+//Guarantees that the given string does not exceeds the allowed size, as well as making sure it's null terminated. [Skotlex]
+static inline unsigned int mes_len_check(char* mes, unsigned int len, unsigned int max)
+{
+ if( len > max )
+ len = max;
+
+ mes[len-1] = '\0';
+
+ return len;
+}
+
-//Guarantees that the given string does not exceeds the allowed size, as well as making sure it's null terminated. [Skotlex\]
-#define mes_len_check(mes, len, max) if (len > max) { mes[max-1] = '\0'; len = max; } else mes[len-1] = '\0';
static char map_ip_str[128];
static uint32 map_ip;
static uint32 bind_ip = INADDR_ANY;
@@ -129,7 +154,8 @@ void clif_setbindip(const char* ip)
}
/*==========================================
- * mapŽI‚ÌportÝ’è
+ * Sets map port to 'port'
+ * is run from map.c upon loading map server configuration
*------------------------------------------*/
void clif_setport(uint16 port)
{
@@ -137,7 +163,7 @@ void clif_setport(uint16 port)
}
/*==========================================
- * mapŽI‚Ìip“Ç‚Ýo‚µ
+ * Returns map server IP
*------------------------------------------*/
uint32 clif_getip(void)
{
@@ -159,7 +185,7 @@ uint32 clif_refresh_ip(void)
}
/*==========================================
- * mapŽI‚Ìport“Ç‚Ýo‚µ
+ * Returns map port which is set by clif_setport()
*------------------------------------------*/
uint16 clif_getport(void)
{
@@ -185,7 +211,14 @@ static inline unsigned char clif_bl_type(struct block_list *bl) {
#endif
/*==========================================
- * clif_send‚ÅAREA*Žw’莞—p
+ * sub process of clif_send
+ * Called from a map_foreachinarea (grabs all players in specific area and subjects them to this function)
+ * In order to send area-wise packets, such as:
+ * - AREA : everyone nearby your area
+ * - AREA_WOSC (AREA WITHOUT SAME CHAT) : Not run for people in the same chat as yours
+ * - AREA_WOC (AREA WITHOUT CHAT) : Not run for people inside a chat
+ * - AREA_WOS (AREA WITHOUT SELF) : Not run for self
+ * - AREA_CHAT_WOC : Everyone in the area of your chat without a chat
*------------------------------------------*/
int clif_send_sub(struct block_list *bl, va_list ap)
{
@@ -248,7 +281,8 @@ int clif_send_sub(struct block_list *bl, va_list ap)
}
/*==========================================
- *
+ * Packet Delegation (called on all packets that require data to be sent to more than one client)
+ * functions that are sent solely to one use whose ID it posses use WFIFOSET
*------------------------------------------*/
int clif_send(const uint8* buf, int len, struct block_list* bl, enum send_target type)
{
@@ -529,11 +563,10 @@ int clif_send(const uint8* buf, int len, struct block_list* bl, enum send_target
return 0;
}
-//
-// ƒpƒPƒbƒgì‚Á‚Ä‘—M
-//
+
/*==========================================
- *
+ * Tells client that its player is fully loaded and that it can proceed to the map screen
+ * Provides client with player position and facing direction
*------------------------------------------*/
int clif_authok(struct map_session_data *sd)
{
@@ -632,7 +665,8 @@ int clif_dropflooritem(struct flooritem_data* fitem)
}
/*==========================================
- *
+ * Server tells client to remove item of ID ('fitem->bl.id') from FD player area
+ * If FD is 0 it tells all clients nearby this item that it is gone
*------------------------------------------*/
int clif_clearflooritem(struct flooritem_data *fitem, int fd)
{
@@ -1080,7 +1114,8 @@ static void clif_setdisguise(struct block_list *bl, unsigned char *buf,int len)
}
/*==========================================
- * ƒNƒ‰ƒXƒ`ƒFƒ“ƒW type‚ÍMob‚ÌꇂÍ1‚Å‘¼‚Í0H
+ * Acronym for 'clif_mob_class_change' used to tell clients around the monster that it's identity changed
+ * for example, it's run when a pupa transforms into a creamy.
*------------------------------------------*/
int clif_class_change(struct block_list *bl,int class_,int type)
{
@@ -1099,7 +1134,7 @@ int clif_class_change(struct block_list *bl,int class_,int type)
}
/*==========================================
- *
+ * Server tells client to display (sd->spiritball) amount of spiritballs on target of account id (sd->bl.id)
*------------------------------------------*/
static void clif_spiritball_single(int fd, struct map_session_data *sd)
{
@@ -1111,7 +1146,8 @@ static void clif_spiritball_single(int fd, struct map_session_data *sd)
}
/*==========================================
- *
+ * Run when player changes map / refreshes
+ * Tells its client to display all weather settings being used by this map
*------------------------------------------*/
static void clif_weather_check(struct map_session_data *sd)
{
@@ -1123,7 +1159,10 @@ static void clif_weather_check(struct map_session_data *sd)
|| map[m].flag.fireworks
|| map[m].flag.sakura
|| map[m].flag.leaves
- || map[m].flag.rain
+ /**
+ * No longer available, keeping here just in case it's back someday. [Ind]
+ **/
+ //|| map[m].flag.rain
|| map[m].flag.clouds2)
{
if (map[m].flag.snow)
@@ -1143,11 +1182,16 @@ static void clif_weather_check(struct map_session_data *sd)
clif_specialeffect_single(&sd->bl, 163, fd);
if (map[m].flag.leaves)
clif_specialeffect_single(&sd->bl, 333, fd);
- if (map[m].flag.rain)
- clif_specialeffect_single(&sd->bl, 161, fd);
+ /**
+ * No longer available, keeping here just in case it's back someday. [Ind]
+ **/
+ //if (map[m].flag.rain)
+ // clif_specialeffect_single(&sd->bl, 161, fd);
}
}
-
+/**
+ * Run when the weather on a map changes, throws all players in map id 'm' to clif_weather_check function
+ **/
void clif_weather(int m)
{
struct s_mapiterator* iter;
@@ -1161,7 +1205,9 @@ void clif_weather(int m)
}
mapit_free(iter);
}
-
+/**
+ * Main function to spawn a unit on the client (player/mob/pet/etc)
+ **/
int clif_spawn(struct block_list *bl)
{
unsigned char buf[128];
@@ -1193,8 +1239,10 @@ int clif_spawn(struct block_list *bl)
clif_specialeffect(bl,421,AREA);
if( sd->bg_id && map[sd->bl.m].flag.battleground )
clif_sendbgemblem_area(sd);
- if(sd->sc.data[SC_MILLENNIUMSHIELD] && sd->sc.data[SC_MILLENNIUMSHIELD]->val2 > 0) // Ensure that we have shields to display.
- clif_millenniumshield(sd,sd->sc.data[SC_MILLENNIUMSHIELD]->val2);
+ if( sd->sc.option&OPTION_MOUNTING ) {
+ //New Mounts are not complaint to the original method, so we gotta tell this guy that he is mounting.
+ clif_status_load_notick(&sd->bl,SI_ALL_RIDING,2,1,0,0);
+ }
}
break;
case BL_MOB:
@@ -1850,7 +1898,7 @@ int clif_viewpoint(struct map_session_data *sd, int npc_id, int type, int x, int
}
/*==========================================
- *
+ * Server tells client to display cutin of name 'image' to client, in position 'type' (255, etc)
*------------------------------------------*/
int clif_cutin(struct map_session_data* sd, const char* image, int type)
{
@@ -1922,7 +1970,8 @@ static void clif_addcards(unsigned char* buf, struct item* item)
}
/*==========================================
- *
+ * Server tells client he got item of index 'n' and amount 'amount',
+ * when 'fail' is 1 it tells the client it failed to receive said item
*------------------------------------------*/
int clif_additem(struct map_session_data *sd, int n, int amount, int fail)
{
@@ -1991,7 +2040,7 @@ int clif_additem(struct map_session_data *sd, int n, int amount, int fail)
}
/*==========================================
- *
+ *
*------------------------------------------*/
int clif_dropitem(struct map_session_data *sd,int n,int amount)
{
@@ -2434,8 +2483,9 @@ int clif_guild_xy_remove(struct map_session_data *sd)
}
/*==========================================
- * ƒXƒe[ƒ^ƒX‚ð‘—‚è‚‚¯‚é
- * •\Ž¦ê—p”Žš‚Í‚±‚Ì’†‚ÅŒvŽZ‚µ‚Ä‘—‚é
+ * Server tells client that data 'type' has changed and sends it's new value
+ * For example, when server updates the client max weight, say, due to higher STR,
+ * It calls this function with SP_MAXWEIGHT type
*------------------------------------------*/
int clif_updatestatus(struct map_session_data *sd,int type)
{
@@ -2514,31 +2564,35 @@ int clif_updatestatus(struct map_session_data *sd,int type)
WFIFOL(fd,4)=sd->battle_status.amotion;
break;
case SP_ATK1:
- WFIFOL(fd,4)=sd->battle_status.batk;
+ WFIFOL(fd,4)=sd->battle_status.batk +sd->battle_status.rhw.atk +sd->battle_status.lhw.atk;
break;
case SP_DEF1:
- WFIFOL(fd,4)=sd->battle_status.def2;
+ WFIFOL(fd,4)=sd->battle_status.def;
break;
case SP_MDEF1:
- WFIFOL(fd,4)= sd->battle_status.mdef2;
+ WFIFOL(fd,4)=sd->battle_status.mdef;
break;
case SP_ATK2:
- WFIFOL(fd,4)=sd->battle_status.rhw.atk + sd->battle_status.rhw.atk2 + sd->battle_status.equipment_atk;
+ WFIFOL(fd,4)=sd->battle_status.rhw.atk2 + sd->battle_status.lhw.atk2;
break;
case SP_DEF2:
- WFIFOL(fd,4)=sd->battle_status.def;
+ WFIFOL(fd,4)=sd->battle_status.def2;
break;
case SP_MDEF2:
- WFIFOL(fd,4)=sd->battle_status.mdef;
+ //negative check (in case you have something like Berserk active)
+ len = sd->battle_status.mdef2 - (sd->battle_status.vit>>1);
+ if (len < 0) len = 0;
+ WFIFOL(fd,4)= len;
+ len = 8;
break;
case SP_CRITICAL:
WFIFOL(fd,4)=sd->battle_status.cri/10;
break;
case SP_MATK1:
- WFIFOL(fd,4)=sd->weapon_matk + sd->battle_status.rhw.atk2 + sd->equipment_matk;
+ WFIFOL(fd,4)=sd->battle_status.matk_max;
break;
case SP_MATK2:
- WFIFOL(fd,4)=sd->battle_status.status_matk;
+ WFIFOL(fd,4)=sd->battle_status.matk_min;
break;
@@ -2563,7 +2617,9 @@ int clif_updatestatus(struct map_session_data *sd,int type)
WFIFOL(fd,4)=pc_nextjobexp(sd);
break;
- // 00be I—¹
+ /**
+ * SP_U<STAT> are used to update the amount of points necessary to increase that stat
+ **/
case SP_USTR:
case SP_UAGI:
case SP_UVIT:
@@ -2575,14 +2631,15 @@ int clif_updatestatus(struct map_session_data *sd,int type)
len=5;
break;
- // 013a I—¹
+ /**
+ * Tells the client how far it is allowed to attack (weapon range)
+ **/
case SP_ATTACKRANGE:
WFIFOW(fd,0)=0x13a;
WFIFOW(fd,2)=sd->battle_status.rhw.range;
len=4;
break;
- // 0141 I—¹
case SP_STR:
WFIFOW(fd,0)=0x141;
WFIFOL(fd,2)=type;
@@ -2672,7 +2729,7 @@ int clif_changestatus(struct block_list *bl,int type,int val)
}
/*==========================================
- *
+ * Updates BL unit view data to nearby clients
*------------------------------------------*/
void clif_changelook(struct block_list *bl,int type,int val)
{
@@ -2865,14 +2922,17 @@ int clif_initialstatus(struct map_session_data *sd)
WBUFB(buf,14)=min(sd->status.luk, UINT8_MAX);
WBUFB(buf,15)=pc_need_status_point(sd,SP_LUK,1);
- WBUFW(buf,16) = sd->battle_status.batk;
- WBUFW(buf,18) = sd->battle_status.rhw.atk + sd->battle_status.lhw.atk2 + sd->battle_status.equipment_atk; //atk bonus
- WBUFW(buf,20) = sd->weapon_matk + sd->battle_status.rhw.atk2 + sd->equipment_matk;
- WBUFW(buf,22) = sd->battle_status.status_matk;
- WBUFW(buf,24) = sd->battle_status.def2;
- WBUFW(buf,26) = sd->battle_status.def; // def
- WBUFW(buf,28) = sd->battle_status.mdef2;
- WBUFW(buf,30) = sd->battle_status.mdef; // mdef
+ WBUFW(buf,16) = sd->battle_status.batk + sd->battle_status.rhw.atk + sd->battle_status.lhw.atk;
+ WBUFW(buf,18) = sd->battle_status.rhw.atk2 + sd->battle_status.lhw.atk2; //atk bonus
+ WBUFW(buf,20) = sd->battle_status.matk_max;
+ WBUFW(buf,22) = sd->battle_status.matk_min;
+ WBUFW(buf,24) = sd->battle_status.def; // def
+ WBUFW(buf,26) = sd->battle_status.def2;
+ WBUFW(buf,28) = sd->battle_status.mdef; // mdef
+ fd = sd->battle_status.mdef2 - (sd->battle_status.vit>>1);
+ if (fd < 0) fd = 0; //Negative check for Frenzy'ed characters.
+ WBUFW(buf,30) = fd;
+ fd = sd->fd;
WBUFW(buf,32) = sd->battle_status.hit;
WBUFW(buf,34) = sd->battle_status.flee;
WBUFW(buf,36) = sd->battle_status.flee2/10;
@@ -2892,20 +2952,11 @@ int clif_initialstatus(struct map_session_data *sd)
clif_updatestatus(sd,SP_ATTACKRANGE);
clif_updatestatus(sd,SP_ASPD);
- clif_updatestatus(sd,SP_ATK1);
- clif_updatestatus(sd,SP_ATK2);
- clif_updatestatus(sd,SP_MATK1);
- clif_updatestatus(sd,SP_MATK2);
- clif_updatestatus(sd,SP_DEF1);
- clif_updatestatus(sd,SP_DEF2);
- clif_updatestatus(sd,SP_MDEF1);
- clif_updatestatus(sd,SP_MDEF2);
-
return 0;
}
/*==========================================
- *–î‘•”õ
+ * Server tells client item idx 'val' is meant to be shown in equipment's window arrow slot
*------------------------------------------*/
int clif_arrowequip(struct map_session_data *sd,int val)
{
@@ -2947,7 +2998,8 @@ int clif_arrow_fail(struct map_session_data *sd,int type)
}
/*==========================================
- * 쬉”\ –ƒXƒg‘—M
+ * Server tells client to display a window similar to Mangifier (item) one
+ * Server populates the window with avilable arrow crafting options according to player's inventory
*------------------------------------------*/
int clif_arrow_create_list(struct map_session_data *sd)
{
@@ -2983,7 +3035,7 @@ int clif_arrow_create_list(struct map_session_data *sd)
}
/*==========================================
- *
+ * Server tells client his response regarding the earlier request to increase status
*------------------------------------------*/
int clif_statusupack(struct map_session_data *sd,int type,int ok,int val)
{
@@ -3069,7 +3121,7 @@ int clif_misceffect(struct block_list* bl,int type)
}
/*==========================================
- * •\Ž¦ƒIƒvƒVƒ‡ƒ“•ÏX
+ * Server tells BL unit and all nearby clients that his unit-view options (e.g. stone curse appearance) changed
*------------------------------------------*/
int clif_changeoption(struct block_list* bl)
{
@@ -3462,7 +3514,7 @@ void clif_tradestart(struct map_session_data* sd, uint8 type)
}
/*==========================================
- * ‘ŠŽè•û‚©‚ç‚̃AƒCƒeƒ€’ljÁ
+ * Server tells 'tsd' player client info on the items 'sd' player just added to the trade window
*------------------------------------------*/
void clif_tradeadditem(struct map_session_data* sd, struct map_session_data* tsd, int index, int amount)
{
@@ -3526,7 +3578,9 @@ void clif_tradeadditem(struct map_session_data* sd, struct map_session_data* tsd
}
/*==========================================
- * ƒAƒCƒeƒ€’ljÁ¬Œ÷/Ž¸”s
+ * Server tells client on the status of it's OK request
+ * fail 1 : the other person did 'ok'
+ * fail 0 : you did 'ok'
*------------------------------------------*/
void clif_tradeitemok(struct map_session_data* sd, int index, int fail)
{
@@ -3542,7 +3596,9 @@ void clif_tradeitemok(struct map_session_data* sd, int index, int fail)
}
/*==========================================
- * Žæ‚èˆø‚«ok‰Ÿ‚µ
+ * Server tells client on the status of it's lock request
+ * fail 1 : The other trader lock request
+ * fail 0 : Your lock request
*------------------------------------------*/
void clif_tradedeal_lock(struct map_session_data* sd, int fail)
{
@@ -3557,7 +3613,7 @@ void clif_tradedeal_lock(struct map_session_data* sd, int fail)
}
/*==========================================
- * Žæ‚èˆø‚«‚ªƒLƒƒƒ“ƒZƒ‹‚³‚ê‚Ü‚µ‚½
+ * Server tells client it's trade request was cancelled
*------------------------------------------*/
void clif_tradecancelled(struct map_session_data* sd)
{
@@ -3571,7 +3627,7 @@ void clif_tradecancelled(struct map_session_data* sd)
}
/*==========================================
- * Žæ‚èˆø‚«Š®—¹
+ * Server tells client the final status on his trade request
*------------------------------------------*/
void clif_tradecompleted(struct map_session_data* sd, int fail)
{
@@ -3586,7 +3642,7 @@ void clif_tradecompleted(struct map_session_data* sd, int fail)
}
/*==========================================
- * ƒJƒvƒ‰‘qŒÉ‚̃AƒCƒeƒ€”‚ðXV
+ * Server tells client it's quantity of items in storage changed
*------------------------------------------*/
void clif_updatestorageamount(struct map_session_data* sd, int amount)
{
@@ -3603,7 +3659,7 @@ void clif_updatestorageamount(struct map_session_data* sd, int amount)
}
/*==========================================
- * ƒJƒvƒ‰‘qŒÉ‚ɃAƒCƒeƒ€‚ð’ljÁ‚·‚é
+ * Server tells client it's status on his request to add a item to storage
*------------------------------------------*/
void clif_storageitemadded(struct map_session_data* sd, struct item* i, int index, int amount)
{
@@ -3658,7 +3714,7 @@ void clif_updateguildstorageamount(struct map_session_data* sd, int amount)
}
/*==========================================
- * ƒJƒvƒ‰‘qŒÉ‚©‚çƒAƒCƒeƒ€‚ðŽæ‚è‹Ž‚é
+ * Server tells client its status on his request to remove a item from storage
*------------------------------------------*/
void clif_storageitemremoved(struct map_session_data* sd, int index, int amount)
{
@@ -3675,7 +3731,7 @@ void clif_storageitemremoved(struct map_session_data* sd, int index, int amount)
}
/*==========================================
- * ƒJƒvƒ‰‘qŒÉ‚ð•Â‚¶‚é
+ * Server tells client his storage was closed
*------------------------------------------*/
void clif_storageclose(struct map_session_data* sd)
{
@@ -3688,9 +3744,9 @@ void clif_storageclose(struct map_session_data* sd)
WFIFOW(fd,0) = 0xf8; // Storage Closed
WFIFOSET(fd,packet_len(0xf8));
}
-
+int clif_status_load_single(int fd, int id,int type,int flag,int val1, int val2, int val3);
/*==========================================
- * PC•\Ž¦
+ * Server tells 'sd' player client the abouts of 'dstsd' player
*------------------------------------------*/
static void clif_getareachar_pc(struct map_session_data* sd,struct map_session_data* dstsd)
{
@@ -3714,7 +3770,10 @@ static void clif_getareachar_pc(struct map_session_data* sd,struct map_session_d
if(dstsd->spiritball > 0)
clif_spiritball_single(sd->fd, dstsd);
-
+ if( dstsd->sc.option&OPTION_MOUNTING ) {
+ //New Mounts are not complaint to the original method, so we gotta tell this guy that I'm mounting.
+ clif_status_load_single(sd->fd,dstsd->bl.id,SI_ALL_RIDING,2,1,0,0);
+ }
if( (sd->status.party_id && dstsd->status.party_id == sd->status.party_id) || //Party-mate, or hpdisp setting.
(sd->bg_id && sd->bg_id == dstsd->bg_id) || //BattleGround
(battle_config.disp_hpmeter && (gmlvl = pc_isGM(sd)) >= battle_config.disp_hpmeter && gmlvl >= pc_isGM(dstsd)) )
@@ -3796,7 +3855,10 @@ void clif_getareachar_unit(struct map_session_data* sd,struct block_list *bl)
//Modifies the type of damage according to status changes [Skotlex]
//Aegis data specifies that: 4 endure against single hit sources, 9 against multi-hit.
-#define clif_calc_delay(type,div,damage,delay) ((delay)==0&&(damage)>0?((div)>1?9:4):type)
+static inline int clif_calc_delay(int type, int div, int damage, int delay)
+{
+ return ( delay == 0 && damage > 0 ) ? ( div > 1 ? 9 : 4 ) : type;
+}
/*==========================================
* Estimates walk delay based on the damage criteria. [Skotlex]
@@ -3894,11 +3956,12 @@ int clif_damage(struct block_list* src, struct block_list* dst, unsigned int tic
WBUFL(buf,2) = -src->id;
if (disguised(dst))
WBUFL(buf,6) = dst->id;
- if(damage > 0) WBUFW(buf,22) = -1;
#if PACKETVER < 20071113
+ if(damage > 0) WBUFW(buf,22) = -1;
if(damage2 > 0) WBUFW(buf,27) = -1;
#else
- if(damage2 > 0) WBUFW(buf,29) = -1;
+ if(damage > 0) WBUFL(buf,22) = -1;
+ if(damage2 > 0) WBUFL(buf,29) = -1;
#endif
clif_send(buf,packet_len(cmd),src,SELF);
}
@@ -4019,7 +4082,7 @@ void clif_getareachar_item(struct map_session_data* sd,struct flooritem_data* fi
}
/*==========================================
- * ꊃXƒLƒ‹ƒGƒtƒFƒNƒg‚ªŽ‹ŠE‚É“ü‚é
+ * Server tells client 'sd' of all nearby skill units (e.g. safety wall)
*------------------------------------------*/
static void clif_getareachar_skillunit(struct map_session_data *sd, struct skill_unit *unit)
{
@@ -4059,7 +4122,7 @@ static void clif_getareachar_skillunit(struct map_session_data *sd, struct skill
}
/*==========================================
- * ꊃXƒLƒ‹ƒGƒtƒFƒNƒg‚ªŽ‹ŠE‚©‚çÁ‚¦‚é
+ * Server tells client to remove unit of id 'unit->bl.id'
*------------------------------------------*/
static void clif_clearchar_skillunit(struct skill_unit *unit, int fd)
{
@@ -4075,7 +4138,7 @@ static void clif_clearchar_skillunit(struct skill_unit *unit, int fd)
}
/*==========================================
- * ꊃXƒLƒ‹ƒGƒtƒFƒNƒgíœ
+ * Server tells all clients in sight of 'unit->bl.id' ID to remove itself from sight (delete)
*------------------------------------------*/
void clif_skill_delunit(struct skill_unit *unit)
{
@@ -4220,7 +4283,7 @@ int clif_insight(struct block_list *bl,va_list ap)
}
/*==========================================
- * ƒXƒLƒ‹ƒŠƒXƒg‚ð‘—M‚·‚é
+ * Server tells the client information on 'sd' player's skill tree
*------------------------------------------*/
int clif_skillinfoblock(struct map_session_data *sd)
{
@@ -4257,7 +4320,9 @@ int clif_skillinfoblock(struct map_session_data *sd)
return 1;
}
-
+/**
+ * Server tells client 'sd' to add skill of id 'id' to it's skill tree (e.g. with Ice Falcion item)
+ **/
int clif_addskill(struct map_session_data *sd, int id )
{
int fd;
@@ -4308,7 +4373,7 @@ int clif_deleteskill(struct map_session_data *sd, int id)
}
/*==========================================
- * ƒXƒLƒ‹Š„‚èU‚è’Ê’m
+ * Server tells client it's skill of id 'skill_num' level changed
*------------------------------------------*/
int clif_skillup(struct map_session_data *sd,int skill_num)
{
@@ -4419,8 +4484,7 @@ int clif_skillcastcancel(struct block_list* bl)
/// btype==5 "no shout" MsgStringTable[164]
/// btype==6 "no PKing" MsgStringTable[165]
/// btype==7 "no alligning" MsgStringTable[383]
-/// btype==8: "Insufficient level for joining a Party"
-/// btype>=9: Ignored.
+/// btype>=8: ignored
/// if(skill_id==AL_WARP) "not enough skill level" MsgStringTable[214]
/// if(skill_id==TF_STEAL) "steal failed" MsgStringTable[205]
/// if(skill_id==TF_POISON) "envenom failed" MsgStringTable[207]
@@ -4436,38 +4500,7 @@ int clif_skillcastcancel(struct block_list* bl)
/// type==8 "blue gemstone needed" MsgStringTable[247]
/// type==9 "overweight" MsgStringTable[580]
/// type==10 "skill failed" MsgStringTable[285]
-/// type==11 "This skill can't be used on that object"
-/// type==12 "You can't use skill because you have exceeded the number Ansila possession limit"
-/// type==13 "need Holy Water"
-/// type==14 "need Ancilla to cast skill"
-/// type==15 "Can't be duplicated with certain distance"
-/// type==16 "In order to use this skill, you need other skill"
-/// type==17 "This skill can't be used alone"
-/// type==18 "This skill can be used to certain direction only"
-/// type==19 "Can't summon anymore"
-/// type==20 "There is no summoned sphere"
-/// type==21 "There exists no usable imitaion skill"
-/// type==22 "You can't reuse this skill"
-/// type==23 "Skill can't be used in this state"
-/// type==24 "Paintbrush is needed"
-/// type==25 "available only on the dragon"
-/// type==26 "Skill can't be used on designated spot "
-/// type==27 "Assistant SP is not enough"
-/// type==31 "Can only be used for linked to weapon blocking"
-/// type==32 "Need a weapon coated with poison of a guillotine cross v"
-/// type==33 "Can only be used while riding Madogear"
-/// type==37 "Load a Cannon Ball"
-/// type==40 "Can only be used in Hovering state"
-/// type==43 "Need a Guillotine Poison"
-/// type==50 "Can't be used while on Magic Gear"
-/// type==51 "Need a Magic Book"
-/// type==52 "Feel sleepy since Magic Book is too difficult to understand"
-/// type==53 "Not enough saved point"
-/// type==54 "Can't read a Magic Book anymore"
-/// type==57 "usable only when cart is put on"
-/// type==60 "Can't cast anymore"
-/// type==71 "[ITEMID] need AMOUNT"
-/// type==72 "Need to put on [ITEMID] in order to use"
+/// type>=11 ignored
///
/// if(success!=0) doesn't display any of the previous messages
/// Note: when this packet is received an unknown flag is always set to 0,
@@ -4496,13 +4529,11 @@ int clif_skill_fail(struct map_session_data *sd,int skill_id,int type,int btype)
if(skill_id == TF_POISON && battle_config.display_skill_fail&8)
return 0;
- // This is the correct packet structure.
- // If you need to pack 2 numbers into bytes 4~7 (btype) use MakeDWord [Gepard]
WFIFOHEAD(fd,packet_len(0x110));
WFIFOW(fd,0) = 0x110;
WFIFOW(fd,2) = skill_id;
WFIFOL(fd,4) = btype;
- WFIFOB(fd,8) = 0;
+ WFIFOB(fd,8) = 0;// success
WFIFOB(fd,9) = type;
WFIFOSET(fd,packet_len(0x110));
@@ -4677,7 +4708,7 @@ int clif_skill_damage2(struct block_list *src,struct block_list *dst,unsigned in
*/
/*==========================================
- * Žx‰‡/‰ñ•œƒXƒLƒ‹ƒGƒtƒFƒNƒg
+ * Server tells client(s) that 'src' casted a skill of nodamage type (e.g. heal) on 'dst'
*------------------------------------------*/
int clif_skill_nodamage(struct block_list *src,struct block_list *dst,int skill_id,int heal,int fail)
{
@@ -4710,7 +4741,8 @@ int clif_skill_nodamage(struct block_list *src,struct block_list *dst,int skill_
}
/*==========================================
- * ꊃXƒLƒ‹ƒGƒtƒFƒNƒg
+ * Server tells client 'src' to display effect of skill id 'skill_id' on location 'x' and 'y'
+ * 'val' is used for information that varies from skill to skill, usually it's the skill level
*------------------------------------------*/
int clif_skill_poseffect(struct block_list *src,int skill_id,int val,int x,int y,int tick)
{
@@ -4736,7 +4768,7 @@ int clif_skill_poseffect(struct block_list *src,int skill_id,int val,int x,int y
}
/*==========================================
- * ꊃXƒLƒ‹ƒGƒtƒFƒNƒg•\Ž¦
+ * Tells all client's nearby 'unit' sight range that it spawned
*------------------------------------------*/
//FIXME: this is just an AREA version of clif_getareachar_skillunit()
void clif_skill_setunit(struct skill_unit *unit)
@@ -4774,7 +4806,7 @@ void clif_skill_setunit(struct skill_unit *unit)
}
/*==========================================
- * ƒ[ƒvꊑI‘ð
+ * Used to display 'teleport' and 'warp portal' information on it's respective dialogs
*------------------------------------------*/
void clif_skill_warppoint(struct map_session_data* sd, short skill_num, short skill_lv, unsigned short map1, unsigned short map2, unsigned short map3, unsigned short map4)
{
@@ -4841,7 +4873,7 @@ void clif_skill_teleportmessage(struct map_session_data *sd, int type)
}
/*==========================================
- * ƒ‚ƒ“ƒXƒ^[î•ñ
+ * Server tells client to display 'estimation' (Sense) information for monster (bl) 'dst'
*------------------------------------------*/
int clif_skill_estimation(struct map_session_data *sd,struct block_list *dst)
{
@@ -4877,14 +4909,15 @@ int clif_skill_estimation(struct map_session_data *sd,struct block_list *dst)
return 0;
}
/*==========================================
- * ƒAƒCƒeƒ€‡¬‰Â”\ƒŠƒXƒg
+ * Server tells client to display a window similar to Mangifier (item) one
+ * Server populates the window with avilable crafting options according to skill used to call this
*------------------------------------------*/
-int clif_skill_produce_mix_list(struct map_session_data *sd, int trigger)
+int clif_skill_produce_mix_list(struct map_session_data *sd, int skillid , int trigger)
{
int i,c,view,fd;
nullpo_ret(sd);
- if(sd->menuskill_id == AM_PHARMACY)
+ if(sd->menuskill_id == skillid)
return 0; //Avoid resending the menu twice or more times...
fd=sd->fd;
WFIFOHEAD(fd, MAX_SKILL_PRODUCE_DB * 8 + 8);
@@ -4904,7 +4937,7 @@ int clif_skill_produce_mix_list(struct map_session_data *sd, int trigger)
WFIFOW(fd, 2)=c*8+8;
WFIFOSET(fd,WFIFOW(fd,2));
if(c > 0) {
- sd->menuskill_id = AM_PHARMACY;
+ sd->menuskill_id = skillid;
sd->menuskill_val = trigger;
return 1;
}
@@ -4975,9 +5008,9 @@ int clif_status_load(struct block_list *bl,int type, int flag)
return 0;
}
/*==========================================
- * ó‘ÔˆÙíƒAƒCƒRƒ“/ƒƒbƒZ[ƒW•\Ž¦
+ * Server tell's BL and nearby clients of his status change
*------------------------------------------*/
-int clif_status_change(struct block_list *bl,int type,int flag,unsigned int tick)
+int clif_status_change(struct block_list *bl,int type,int flag,unsigned int tick,int val1, int val2, int val3)
{
unsigned char buf[32];
@@ -4992,8 +5025,7 @@ int clif_status_change(struct block_list *bl,int type,int flag,unsigned int tick
type == SI_TENSIONRELAX || type == SI_LANDENDOW || type == SI_AUTOBERSERK ||
type == SI_BUMP || type == SI_READYSTORM || type == SI_READYDOWN ||
type == SI_READYTURN || type == SI_READYCOUNTER || type == SI_DODGE ||
- type == SI_DEVIL || type == SI_NIGHT || type == SI_INTRAVISION ||
- type == SI_CLOAKING)
+ type == SI_DEVIL || type == SI_NIGHT || type == SI_INTRAVISION)
tick=0;
if( battle_config.display_status_timers && tick>0 )
@@ -5006,9 +5038,9 @@ int clif_status_change(struct block_list *bl,int type,int flag,unsigned int tick
if( battle_config.display_status_timers && tick>0 )
{
WBUFL(buf,9)=tick;
- WBUFL(buf,13)=0;
- WBUFL(buf,17)=0;
- WBUFL(buf,21)=0;
+ WBUFL(buf,13) = val1;
+ WBUFL(buf,17) = val2;
+ WBUFL(buf,21) = val3;
}
clif_send(buf,packet_len(WBUFW(buf,0)),bl,AREA);
return 0;
@@ -5041,7 +5073,6 @@ int clif_displaymessage(const int fd, const char* mes)
}
/*==========================================
- * “V‚̺‚ð‘—M‚·‚é
* Send broadcast message in yellow or blue (without font formatting).
* S 009A <len>.W <message>.?B
*------------------------------------------*/
@@ -5065,7 +5096,8 @@ int clif_broadcast(struct block_list* bl, const char* mes, int len, int type, en
}
/*==========================================
- * ƒOƒ[ƒoƒ‹ƒƒbƒZ[ƒW
+ * Displays a message on a 'bl' to all it's nearby clients
+ * Used by npc_globalmessage
*------------------------------------------*/
void clif_GlobalMessage(struct block_list* bl, const char* message)
{
@@ -5088,7 +5120,7 @@ void clif_GlobalMessage(struct block_list* bl, const char* message)
WBUFW(buf,0)=0x8d;
WBUFW(buf,2)=len+8;
WBUFL(buf,4)=bl->id;
- strncpy((char *) WBUFP(buf,8),message,len);
+ safestrncpy((char *) WBUFP(buf,8),message,len);
clif_send((unsigned char *) buf,WBUFW(buf,2),bl,ALL_CLIENT);
}
@@ -5097,7 +5129,7 @@ void clif_GlobalMessage(struct block_list* bl, const char* message)
*------------------------------------------*/
void clif_MainChatMessage(const char* message)
{
- char buf[200];
+ uint8 buf[200];
int len;
if(!message)
@@ -5111,8 +5143,8 @@ void clif_MainChatMessage(const char* message)
WBUFW(buf,0)=0x8d;
WBUFW(buf,2)=len+8;
WBUFL(buf,4)=0;
- strncpy((char *) WBUFP(buf,8),message,len);
- clif_send((unsigned char *) buf,WBUFW(buf,2),NULL,CHAT_MAINCHAT);
+ safestrncpy((char *) WBUFP(buf,8),message,len);
+ clif_send(buf,WBUFW(buf,2),NULL,CHAT_MAINCHAT);
}
/*==========================================
@@ -5138,7 +5170,8 @@ int clif_broadcast2(struct block_list* bl, const char* mes, int len, unsigned lo
return 0;
}
/*==========================================
- * HPSP‰ñ•œƒGƒtƒFƒNƒg‚ð‘—M‚·‚é
+ * Server tells self client to heal self for 'val', is either SP_HP or SP_SP
+ * It displays these green and blue heal numbers that show up at your body and go up until they fade away
*------------------------------------------*/
int clif_heal(int fd,int type,int val)
{
@@ -5152,7 +5185,7 @@ int clif_heal(int fd,int type,int val)
}
/*==========================================
- * •œŠˆ‚·‚é
+ * Server tells nearby clients of 'bl' that it ressurected (and plays ress effect)
*------------------------------------------*/
int clif_resurrection(struct block_list *bl,int type)
{
@@ -5200,7 +5233,8 @@ void clif_map_type(struct map_session_data* sd, enum map_type type)
}
/*==========================================
- * PVPŽÀ‘•H(‰¼)
+ * Server tells client on it's pvp rank and map status,
+ * (it controls the counter on the bottom right of the map existent in pvp rooms)
*------------------------------------------*/
int clif_pvpset(struct map_session_data *sd,int pvprank,int pvpnum,int type)
{
@@ -5249,7 +5283,8 @@ void clif_map_property_mapall(int map, enum map_property property)
}
/*==========================================
- * ¸˜BƒGƒtƒFƒNƒg‚ð‘—M‚·‚é
+ * Server tells client the status on refine of item index 'index' from refine 'val'
+ * Message displayed depends on 'fail' (broken(red) or success(blue))
*------------------------------------------*/
void clif_refine(int fd, int fail, int index, int val)
{
@@ -5318,7 +5353,8 @@ int clif_wis_end(int fd, int flag)
}
/*==========================================
- * ƒLƒƒƒ‰ID–¼‘Oˆø‚«Œ‹‰Ê‚ð‘—M‚·‚é
+ * Server tells client that char id 'charid' is to be assigned the name of 'name'
+ * This is used when client requests the server the name written in a item, e.g. crafted alche potions
*------------------------------------------*/
int clif_solved_charname(int fd, int charid, const char* name)
{
@@ -5331,7 +5367,7 @@ int clif_solved_charname(int fd, int charid, const char* name)
}
/*==========================================
- * ƒJ[ƒh‚Ì‘}“ü‰Â”\ƒŠƒXƒg‚ð•Ô‚·
+ * Server tells client to list all items that may be worn by card item of index 'idx'
*------------------------------------------*/
int clif_use_card(struct map_session_data *sd,int idx)
{
@@ -5381,7 +5417,7 @@ int clif_use_card(struct map_session_data *sd,int idx)
return 0;
}
/*==========================================
- * ƒJ[ƒh‚Ì‘}“üI—¹
+ * Server tells client his status on the previous clif_use_card (failed or OK)
*------------------------------------------*/
int clif_insert_card(struct map_session_data *sd,int idx_equip,int idx_card,int flag)
{
@@ -5400,7 +5436,7 @@ int clif_insert_card(struct map_session_data *sd,int idx_equip,int idx_card,int
}
/*==========================================
- * ŠÓ’è‰Â”\ƒAƒCƒeƒ€ƒŠƒXƒg‘—M
+ * Server tells client it's list of unidentified items
*------------------------------------------*/
int clif_item_identify_list(struct map_session_data *sd)
{
@@ -5429,7 +5465,7 @@ int clif_item_identify_list(struct map_session_data *sd)
}
/*==========================================
- * ŠÓ’茋‰Ê
+ * Server tells client his item of index 'idx' has been identified
*------------------------------------------*/
int clif_item_identified(struct map_session_data *sd,int idx,int flag)
{
@@ -5447,7 +5483,7 @@ int clif_item_identified(struct map_session_data *sd,int idx,int flag)
}
/*==========================================
- * C—‰Â”\ƒAƒCƒeƒ€ƒŠƒXƒg‘—M
+ * Server tells client the list of broken items
*------------------------------------------*/
int clif_item_repair_list(struct map_session_data *sd,struct map_session_data *dstsd)
{
@@ -5547,7 +5583,9 @@ int clif_item_refine_list(struct map_session_data *sd)
}
/*==========================================
- * ƒAƒCƒeƒ€‚É‚æ‚éˆêŽž“I‚ȃXƒLƒ‹Œø‰Ê
+ * Server tells client to display the 'green skill name' at the top of the screen + target cursor,
+ * for skill 'skillid' of 'skilllv' level
+ * Used for example when player uses a skill scroll (e.g. Fire Bolt Scroll)
*------------------------------------------*/
int clif_item_skill(struct map_session_data *sd,int skillid,int skilllv)
{
@@ -5571,7 +5609,7 @@ int clif_item_skill(struct map_session_data *sd,int skillid,int skilllv)
}
/*==========================================
- * ƒJ[ƒg‚ɃAƒCƒeƒ€’ljÁ
+ * Server tells client it's status on trying to add item of index 'n' and amount 'amount' to it's cart
*------------------------------------------*/
int clif_cart_additem(struct map_session_data *sd,int n,int amount,int fail)
{
@@ -5621,7 +5659,7 @@ int clif_cart_additem(struct map_session_data *sd,int n,int amount,int fail)
}
/*==========================================
- * ƒJ[ƒg‚©‚çƒAƒCƒeƒ€íœ
+ * Server tells client it's status on trying to remove item of index 'n' and amount 'amount' from it's cart to invent
*------------------------------------------*/
int clif_cart_delitem(struct map_session_data *sd,int n,int amount)
{
@@ -5963,43 +6001,54 @@ void clif_party_invite(struct map_session_data *sd,struct map_session_data *tsd)
WFIFOSET(fd,packet_len(cmd));
}
-/*==========================================
- * Party invitation result.
- * R 00fd <nick>.24S <flag>.B
- * R 02c5 <nick>.24S <flag>.L
- * Flag values are:
- * 0 -> char is already in a party
- * 1 -> party invite was rejected
- * 2 -> party invite was accepted
- * 3 -> party is full
- * 4 -> char of the same account already joined the party
- *------------------------------------------*/
-void clif_party_inviteack(struct map_session_data* sd, const char* nick, int flag)
+
+/// Party invite result.
+/// R 00fd <nick>.24S <result>.B
+/// R 02c5 <nick>.24S <result>.L
+/// result=0 : char is already in a party -> MsgStringTable[80]
+/// result=1 : party invite was rejected -> MsgStringTable[81]
+/// result=2 : party invite was accepted -> MsgStringTable[82]
+/// result=3 : party is full -> MsgStringTable[83]
+/// result=4 : char of the same account already joined the party -> MsgStringTable[608]
+/// result=5 : char blocked party invite -> MsgStringTable[1324] (since 20070904)
+/// result=7 : char is not online or doesn't exist -> MsgStringTable[71] (since 20070904)
+/// result=8 : (%s) TODO instance related? -> MsgStringTable[1388] (since 20080527)
+/// return=9 : TODO map prohibits party joining? -> MsgStringTable[1871] (since 20110205)
+void clif_party_inviteack(struct map_session_data* sd, const char* nick, int result)
{
int fd;
nullpo_retv(sd);
fd=sd->fd;
+#if PACKETVER < 20070904
+ if( result == 7 ) {
+ clif_displaymessage(fd, msg_txt(3));
+ return;
+ }
+#endif
+
#if PACKETVER < 20070821
WFIFOHEAD(fd,packet_len(0xfd));
WFIFOW(fd,0) = 0xfd;
safestrncpy((char*)WFIFOP(fd,2),nick,NAME_LENGTH);
- WFIFOB(fd,26) = flag;
+ WFIFOB(fd,26) = result;
WFIFOSET(fd,packet_len(0xfd));
#else
WFIFOHEAD(fd,packet_len(0x2c5));
WFIFOW(fd,0) = 0x2c5;
safestrncpy((char*)WFIFOP(fd,2),nick,NAME_LENGTH);
- WFIFOL(fd,26) = flag;
+ WFIFOL(fd,26) = result;
WFIFOSET(fd,packet_len(0x2c5));
#endif
}
+
/*==========================================
- * ƒp[ƒeƒBÝ’è‘—M
- * flag & 0x001=exp•ÏXƒ~ƒX
- * 0x010=item•ÏXƒ~ƒX
- * 0x100=ˆêl‚É‚Ì‚Ý‘—M
+ * Server tells client (and it's party members) of a change in the party settings
+ * 'Flag' Options
+ * - 0x01 (exp)
+ * - 0x10 (item)
+ * - 0x100 (party member logged in / was added to party)
*------------------------------------------*/
int clif_party_option(struct party_data *p,struct map_session_data *sd,int flag)
{
@@ -6034,7 +6083,7 @@ int clif_party_option(struct party_data *p,struct map_session_data *sd,int flag)
return 0;
}
/*==========================================
- * ƒp[ƒeƒB’E‘Þi’E‘Þ‘O‚ɌĂԂ±‚Æj
+ * Server tells party members of party 'p' that 'sd' player left
*------------------------------------------*/
int clif_party_withdraw(struct party_data* p, struct map_session_data* sd, int account_id, const char* name, int flag)
{
@@ -6056,15 +6105,14 @@ int clif_party_withdraw(struct party_data* p, struct map_session_data* sd, int a
WBUFL(buf,2)=account_id;
memcpy(WBUFP(buf,6),name,NAME_LENGTH);
WBUFB(buf,30)=flag&0x0f;
-
if((flag&0xf0)==0)
clif_send(buf,packet_len(0x105),&sd->bl,PARTY);
- else
+ else
clif_send(buf,packet_len(0x105),&sd->bl,SELF);
return 0;
}
/*==========================================
- * ƒp[ƒeƒBƒƒbƒZ[ƒW‘—M
+ * Server deploys a message to all party members, called from party.c:party_recv_message()
*------------------------------------------*/
int clif_party_message(struct party_data* p, int account_id, const char* mes, int len)
{
@@ -6086,7 +6134,7 @@ int clif_party_message(struct party_data* p, int account_id, const char* mes, in
return 0;
}
/*==========================================
- * ƒp[ƒeƒBÀ•W’Ê’m
+ * Server tells all party members of 'sd' player that 'sd' player location changed
*------------------------------------------*/
int clif_party_xy(struct map_session_data *sd)
{
@@ -6119,7 +6167,7 @@ int clif_party_xy_single(int fd, struct map_session_data *sd)
/*==========================================
- * ƒp[ƒeƒBHP’Ê’m
+ * Server tells nearby party members of 'sd' that his hp bar has updated
*------------------------------------------*/
int clif_party_hp(struct map_session_data *sd)
{
@@ -6224,7 +6272,7 @@ int clif_hpmeter_sub(struct block_list *bl, va_list ap)
}
/*==========================================
- * GM‚ÖꊂÆHP’Ê’m
+ * Server tells all nearby gms to 'sd' that 'sd' hp bar was updated
*------------------------------------------*/
int clif_hpmeter(struct map_session_data *sd)
{
@@ -6237,7 +6285,7 @@ int clif_hpmeter(struct map_session_data *sd)
}
/*==========================================
- * ƒp[ƒeƒBꊈړ®i–¢Žg—pj
+ * (?) Server tells 'sd' party members that 'sd' state 'changed'
*------------------------------------------*/
void clif_party_move(struct party* p, struct map_session_data* sd, int online)
{
@@ -6258,7 +6306,8 @@ void clif_party_move(struct party* p, struct map_session_data* sd, int online)
clif_send(buf,packet_len(0x104),&sd->bl,PARTY);
}
/*==========================================
- * UŒ‚‚·‚邽‚߂Ɉړ®‚ª•K—v
+ * Server tells client to attack bl, if not in range of attack (rhw.range) it'll move to bl
+ * called from unit.c
*------------------------------------------*/
int clif_movetoattack(struct map_session_data *sd,struct block_list *bl)
{
@@ -6280,7 +6329,7 @@ int clif_movetoattack(struct map_session_data *sd,struct block_list *bl)
return 0;
}
/*==========================================
- * »‘¢ƒGƒtƒFƒNƒg
+ * Server tells client to display produce effect (refine-like), success or failure depends on 'flag'
*------------------------------------------*/
int clif_produceeffect(struct map_session_data* sd,int flag,int nameid)
{
@@ -6331,7 +6380,7 @@ int clif_pet_roulette(struct map_session_data *sd,int data)
}
/*==========================================
- * pet—‘ƒŠƒXƒgì¬
+ * Server tells client to list it's eggs (used in hatching window to select a egg)
*------------------------------------------*/
int clif_sendegg(struct map_session_data *sd)
{
@@ -6461,7 +6510,7 @@ int clif_pet_food(struct map_session_data *sd,int foodid,int fail)
}
/*==========================================
- * ƒI[ƒgƒXƒyƒ‹ ƒŠƒXƒg‘—M
+ * Server tells client to display autospell (Sage Skill) skill selection list
*------------------------------------------*/
int clif_autospell(struct map_session_data *sd,int skilllv)
{
@@ -6549,7 +6598,7 @@ void clif_devotion(struct block_list *src, struct map_session_data *tsd)
}
/*==========================================
- * Ÿ†‹…
+ * Server tells clients nearby 'sd' (and himself) to display 'sd->spiritball' number of spiritballs on 'sd'
*------------------------------------------*/
int clif_spiritball(struct map_session_data *sd)
{
@@ -6581,7 +6630,8 @@ int clif_combo_delay(struct block_list *bl,int wait)
return 0;
}
/*==========================================
- *”’nŽæ‚è
+ * Server tells client to display blade stop animation 'link' from 'src' to 'dst_id' (account id of target)
+ * active toggles the state
*------------------------------------------*/
void clif_bladestop(struct block_list *src, int dst_id, int active)
{
@@ -6598,7 +6648,7 @@ void clif_bladestop(struct block_list *src, int dst_id, int active)
}
/*==========================================
- * MVPƒGƒtƒFƒNƒg
+ * Server tells clients nearby 'sd' (and itself) to display MvP killed effect on 'sd' player
*------------------------------------------*/
int clif_mvp_effect(struct map_session_data *sd)
{
@@ -6612,7 +6662,7 @@ int clif_mvp_effect(struct map_session_data *sd)
return 0;
}
/*==========================================
- * MVPƒAƒCƒeƒ€Š“¾
+ * Server tells client to display mvp drop prize info to player 'sd' for item id 'nameid'
*------------------------------------------*/
int clif_mvp_item(struct map_session_data *sd,int nameid)
{
@@ -6631,7 +6681,7 @@ int clif_mvp_item(struct map_session_data *sd,int nameid)
return 0;
}
/*==========================================
- * MVPŒoŒ±’lŠ“¾
+ * Server tells client to display mvp exp prize to player 'sd' for amount 'exp'
*------------------------------------------*/
int clif_mvp_exp(struct map_session_data *sd, unsigned int exp)
{
@@ -6693,7 +6743,7 @@ void clif_guild_belonginfo(struct map_session_data *sd, struct guild *g)
/*==========================================
- * ƒMƒ‹ƒhƒƒ“ƒoƒƒOƒCƒ“’Ê’m
+ * Server tells all members of 'g' guild that member of index 'idx' is online or offline (flag 1:0)
*------------------------------------------*/
int clif_guild_memberlogin_notice(struct guild *g,int idx,int flag)
{
@@ -6755,7 +6805,7 @@ int clif_guild_send_onlineinfo(struct map_session_data *sd)
}
/*==========================================
- * ƒMƒ‹ƒhƒ}ƒXƒ^[’Ê’m(14d‚ւ̉ž“š)
+ * Tells 'sd' whether he is the guild master of his guild or not (relies on sd->state.gmaster_flag)
*------------------------------------------*/
int clif_guild_masterormember(struct map_session_data *sd)
{
@@ -6814,7 +6864,7 @@ int clif_guild_basicinfo(struct map_session_data *sd)
}
/*==========================================
- * ƒMƒ‹ƒh“¯–¿/“G‘Îî•ñ
+ * Server tells client 'sd' it's guild alliances
*------------------------------------------*/
int clif_guild_allianceinfo(struct map_session_data *sd)
{
@@ -6843,7 +6893,7 @@ int clif_guild_allianceinfo(struct map_session_data *sd)
}
/*==========================================
- * ƒMƒ‹ƒhƒƒ“ƒo[ƒŠƒXƒg
+ * Server tells client it's guild member list
*------------------------------------------*/
int clif_guild_memberlist(struct map_session_data *sd)
{
@@ -6873,7 +6923,7 @@ int clif_guild_memberlist(struct map_session_data *sd)
WFIFOL(fd,c*104+22)=(int)cap_value(m->exp,0,INT32_MAX);
WFIFOL(fd,c*104+26)=m->online;
WFIFOL(fd,c*104+30)=m->position;
- memset(WFIFOP(fd,c*104+34),0,50); // ƒƒ‚H
+ memset(WFIFOP(fd,c*104+34),0,50); //[Ind] - This is displayed in the 'note' column but being you can't edit it it's sent empty.
memcpy(WFIFOP(fd,c*104+84),m->name,NAME_LENGTH);
c++;
}
@@ -6882,7 +6932,7 @@ int clif_guild_memberlist(struct map_session_data *sd)
return 0;
}
/*==========================================
- * ƒMƒ‹ƒh–ðE–¼ƒŠƒXƒg
+ * Server tell client it's guild position list
*------------------------------------------*/
int clif_guild_positionnamelist(struct map_session_data *sd)
{
@@ -6905,7 +6955,7 @@ int clif_guild_positionnamelist(struct map_session_data *sd)
return 0;
}
/*==========================================
- * ƒMƒ‹ƒh–ðEî•ñƒŠƒXƒg
+ * Server tell client about it's guild position permissions and tax
*------------------------------------------*/
int clif_guild_positioninfolist(struct map_session_data *sd)
{
@@ -6931,7 +6981,7 @@ int clif_guild_positioninfolist(struct map_session_data *sd)
return 0;
}
/*==========================================
- * ƒMƒ‹ƒh–ðE•ÏX’Ê’m
+ * Server tells client about position 'idx' information, being it changed
*------------------------------------------*/
int clif_guild_positionchanged(struct guild *g,int idx)
{
@@ -6952,7 +7002,7 @@ int clif_guild_positionchanged(struct guild *g,int idx)
return 0;
}
/*==========================================
- * ƒMƒ‹ƒhƒƒ“ƒo•ÏX’Ê’m
+ * Server tells client about a specific guild member index that changed
*------------------------------------------*/
int clif_guild_memberpositionchanged(struct guild *g,int idx)
{
@@ -6971,7 +7021,7 @@ int clif_guild_memberpositionchanged(struct guild *g,int idx)
return 0;
}
/*==========================================
- * ƒMƒ‹ƒhƒGƒ“ƒuƒŒƒ€‘—M
+ * Server tells client about this new cool emblem a specific guild got
*------------------------------------------*/
int clif_guild_emblem(struct map_session_data *sd,struct guild *g)
{
@@ -7076,7 +7126,7 @@ int clif_guild_notice(struct map_session_data* sd, struct guild* g)
}
/*==========================================
- * ƒMƒ‹ƒhƒƒ“ƒoŠ©—U
+ * Server tells client 'sd' that guild 'g' wants to invite him
*------------------------------------------*/
int clif_guild_invite(struct map_session_data *sd,struct guild *g)
{
@@ -7116,7 +7166,7 @@ int clif_guild_inviteack(struct map_session_data *sd,int flag)
}
/*==========================================
- * ƒMƒ‹ƒhƒƒ“ƒo’E‘Þ’Ê’m
+ * Server tells guild members of 'sd' that he left his guild for a reason
*------------------------------------------*/
int clif_guild_leave(struct map_session_data *sd,const char *name,const char *mes)
{
@@ -7132,7 +7182,7 @@ int clif_guild_leave(struct map_session_data *sd,const char *name,const char *me
}
/*==========================================
- * ƒMƒ‹ƒhƒƒ“ƒo’Ç•ú’Ê’m
+ * Server tells guild members of 'sd' that 'name' of account id 'account_id' was expelled for reason 'mes'
*------------------------------------------*/
void clif_guild_expulsion(struct map_session_data* sd, const char* name, const char* mes, int account_id)
{
@@ -7155,7 +7205,7 @@ void clif_guild_expulsion(struct map_session_data* sd, const char* name, const c
}
/*==========================================
- * ƒMƒ‹ƒh’Ç•úƒƒ“ƒoƒŠƒXƒg
+ * Server tells client on sd's guild expulsion records
*------------------------------------------*/
void clif_guild_expulsionlist(struct map_session_data* sd)
{
@@ -7197,29 +7247,35 @@ void clif_guild_expulsionlist(struct map_session_data* sd)
WFIFOSET(fd,WFIFOW(fd,2));
}
-/*==========================================
- * ƒMƒ‹ƒh‰ï˜b
- *------------------------------------------*/
-int clif_guild_message(struct guild *g,int account_id,const char *mes,int len)
-{
+
+/// Notification of a guild chat message (ZC_GUILD_CHAT)
+/// 017f <packet len>.W <message>.?B
+void clif_guild_message(struct guild *g,int account_id,const char *mes,int len)
+{// TODO: account_id is not used, candidate for deletion? [Ai4rei]
struct map_session_data *sd;
- unsigned char *buf;
+ uint8 buf[256];
- buf = (unsigned char*)aMallocA((len + 4)*sizeof(unsigned char));
+ if( len == 0 )
+ {
+ return;
+ }
+ else if( len > sizeof(buf)-5 )
+ {
+ ShowWarning("clif_guild_message: Truncated message '%s' (len=%d, max=%d, guild_id=%d).\n", mes, len, sizeof(buf)-5, g->guild_id);
+ len = sizeof(buf)-5;
+ }
WBUFW(buf, 0) = 0x17f;
- WBUFW(buf, 2) = len + 4;
- memcpy(WBUFP(buf,4), mes, len);
+ WBUFW(buf, 2) = len + 5;
+ safestrncpy((char*)WBUFP(buf,4), mes, len+1);
if ((sd = guild_getavailablesd(g)) != NULL)
clif_send(buf, WBUFW(buf,2), &sd->bl, GUILD_NOBG);
+}
- if(buf) aFree(buf);
- return 0;
-}
/*==========================================
- * ƒMƒ‹ƒhƒXƒLƒ‹Š„‚èU‚è’Ê’m
+ * Server tells client 'sd' that his guild skill 'skill_num' gone to level 'lv'
*------------------------------------------*/
int clif_guild_skillup(struct map_session_data *sd,int skill_num,int lv)
{
@@ -7239,7 +7295,7 @@ int clif_guild_skillup(struct map_session_data *sd,int skill_num,int lv)
return 0;
}
/*==========================================
- * ƒMƒ‹ƒh“¯–¿—v¿
+ * Server tells client 'sd' that 'account_id' from guild name 'name' wants to invite 'sd's guild for alliance
*------------------------------------------*/
int clif_guild_reqalliance(struct map_session_data *sd,int account_id,const char *name)
{
@@ -7278,7 +7334,7 @@ int clif_guild_allianceack(struct map_session_data *sd,int flag)
return 0;
}
/*==========================================
- * ƒMƒ‹ƒhŠÖŒW‰ðÁ’Ê’m
+ * Server tells client 'sd' that guild_id is either in or out of it's alliance list (depend on flag)
*------------------------------------------*/
int clif_guild_delalliance(struct map_session_data *sd,int guild_id,int flag)
{
@@ -7331,7 +7387,7 @@ int clif_guild_oppositionack(struct map_session_data *sd,int flag)
}*/
/*==========================================
- * ƒMƒ‹ƒh‰ðŽU’Ê’m
+ * Server tells client 'sd' that guild broke because of 'flag' reason
*------------------------------------------*/
int clif_guild_broken(struct map_session_data *sd,int flag)
{
@@ -7348,7 +7404,7 @@ int clif_guild_broken(struct map_session_data *sd,int flag)
}
/*==========================================
- * ƒGƒ‚[ƒVƒ‡ƒ“
+ * Server tells all nearby clients of 'bl' to display emoticon number 'type'
*------------------------------------------*/
void clif_emotion(struct block_list *bl,int type)
{
@@ -7363,7 +7419,7 @@ void clif_emotion(struct block_list *bl,int type)
}
/*==========================================
- * ƒg[ƒL[ƒ{ƒbƒNƒX
+ * Server tells all clients nearby 'bl' that he stepped in a talkie box (and displays the message)
*------------------------------------------*/
void clif_talkiebox(struct block_list* bl, const char* talkie)
{
@@ -7377,7 +7433,7 @@ void clif_talkiebox(struct block_list* bl, const char* talkie)
}
/*==========================================
- * Œ‹¥ƒGƒtƒFƒNƒg
+ * Server tells bl and nearby clients to display marriage effect
*------------------------------------------*/
void clif_wedding_effect(struct block_list *bl)
{
@@ -7390,7 +7446,7 @@ void clif_wedding_effect(struct block_list *bl)
clif_send(buf, packet_len(0x1ea), bl, AREA);
}
/*==========================================
- * ?‚È‚½‚Ɉ§‚¢‚½‚¢Žg—pŽž–¼‘O‹©‚Ñ
+ * Server tells client 'sd' to create a warp to call his partner (wedding skill)
*------------------------------------------*/
void clif_callpartner(struct map_session_data *sd)
@@ -7459,18 +7515,9 @@ void clif_parse_ReqMarriage(int fd, struct map_session_data *sd)
/*==========================================
*
*------------------------------------------*/
-int clif_disp_onlyself(struct map_session_data *sd, const char *mes, int len)
+void clif_disp_onlyself(struct map_session_data *sd, const char *mes, int len)
{
- int fd;
- nullpo_ret(sd);
- fd = sd->fd;
- if (!fd || !len) return 0; //Disconnected player.
- WFIFOHEAD(fd, len+5);
- WFIFOW(fd, 0) = 0x17f;
- WFIFOW(fd, 2) = len + 5;
- memcpy(WFIFOP(fd,4), mes, len);
- WFIFOSET(fd, WFIFOW(fd,2));
- return 1;
+ clif_disp_message(&sd->bl, mes, len, SELF);
}
/*==========================================
@@ -7478,13 +7525,22 @@ int clif_disp_onlyself(struct map_session_data *sd, const char *mes, int len)
*------------------------------------------*/
void clif_disp_message(struct block_list* src, const char* mes, int len, enum send_target target)
{
- unsigned char buf[1024];
- if (!len) return;
+ unsigned char buf[256];
+
+ if( len == 0 )
+ {
+ return;
+ }
+ else if( len > sizeof(buf)-5 )
+ {
+ ShowWarning("clif_disp_message: Truncated message '%s' (len=%d, max=%d, aid=%d).\n", mes, len, sizeof(buf)-5, src->id);
+ len = sizeof(buf)-5;
+ }
+
WBUFW(buf, 0) = 0x17f;
WBUFW(buf, 2) = len + 5;
- memcpy(WBUFP(buf,4), mes, len);
+ safestrncpy((char*)WBUFP(buf,4), mes, len+1);
clif_send(buf, WBUFW(buf,2), src, target);
- return;
}
/*==========================================
@@ -7556,41 +7612,41 @@ void clif_GM_silence(struct map_session_data* sd, struct map_session_data* tsd,
}
/*==========================================
- * Wis‹‘”Û‹–‰Â‰ž“š
+ * ? Unknown functionality : not called anywhere
*------------------------------------------*/
-int clif_wisexin(struct map_session_data *sd,int type,int flag)
-{
- int fd;
-
- nullpo_ret(sd);
-
- fd=sd->fd;
- WFIFOHEAD(fd,packet_len(0xd1));
- WFIFOW(fd,0)=0xd1;
- WFIFOB(fd,2)=type;
- WFIFOB(fd,3)=flag;
- WFIFOSET(fd,packet_len(0xd1));
-
- return 0;
-}
+//int clif_wisexin(struct map_session_data *sd,int type,int flag)
+//{
+// int fd;
+//
+// nullpo_ret(sd);
+//
+// fd=sd->fd;
+// WFIFOHEAD(fd,packet_len(0xd1));
+// WFIFOW(fd,0)=0xd1;
+// WFIFOB(fd,2)=type;
+// WFIFOB(fd,3)=flag;
+// WFIFOSET(fd,packet_len(0xd1));
+//
+// return 0;
+//}
/*==========================================
- * Wis‘S‹‘”Û‹–‰Â‰ž“š
+ * ? Unknown functionality : not called anywhere
*------------------------------------------*/
-int clif_wisall(struct map_session_data *sd,int type,int flag)
-{
- int fd;
-
- nullpo_ret(sd);
-
- fd=sd->fd;
- WFIFOHEAD(fd,packet_len(0xd2));
- WFIFOW(fd,0)=0xd2;
- WFIFOB(fd,2)=type;
- WFIFOB(fd,3)=flag;
- WFIFOSET(fd,packet_len(0xd2));
-
- return 0;
-}
+//int clif_wisall(struct map_session_data *sd,int type,int flag)
+//{
+// int fd;
+//
+// nullpo_ret(sd);
+//
+// fd=sd->fd;
+// WFIFOHEAD(fd,packet_len(0xd2));
+// WFIFOW(fd,0)=0xd2;
+// WFIFOB(fd,2)=type;
+// WFIFOB(fd,3)=flag;
+// WFIFOSET(fd,packet_len(0xd2));
+//
+// return 0;
+//}
/*==========================================
* Play a BGM! [Rikter/Yommy]
@@ -7609,7 +7665,8 @@ void clif_playBGM(struct map_session_data* sd, const char* name)
}
/*==========================================
- * ƒTƒEƒ“ƒhƒGƒtƒFƒNƒg
+ * Server tells 'bl' to play a .wav music file in client's /wav/ folder named 'name'
+ * functionality of 'type' is unclear. it's normally sent as '0'
*------------------------------------------*/
void clif_soundeffect(struct map_session_data* sd, struct block_list* bl, const char* name, int type)
{
@@ -7707,12 +7764,12 @@ int clif_messagecolor(struct block_list* bl, unsigned long color, const char* ms
}
// messages (from mobs/npcs) [Valaris]
-int clif_message(struct block_list* bl, const char* msg)
+void clif_message(struct block_list* bl, const char* msg)
{
unsigned short msg_len = strlen(msg) + 1;
uint8 buf[256];
- nullpo_ret(bl);
+ nullpo_retv(bl);
if( msg_len > sizeof(buf)-8 )
{
@@ -7723,11 +7780,9 @@ int clif_message(struct block_list* bl, const char* msg)
WBUFW(buf,0) = 0x8d;
WBUFW(buf,2) = msg_len + 8;
WBUFL(buf,4) = bl->id;
- memcpy(WBUFP(buf,8), msg, msg_len);
+ safestrncpy((char*)WBUFP(buf,8), msg, msg_len);
clif_send(buf, WBUFW(buf,2), bl, AREA_CHAT_WOC);
-
- return 0;
}
// refresh the client's screen, getting rid of any effects
@@ -8001,29 +8056,27 @@ void clif_slide(struct block_list *bl, int x, int y)
/*------------------------------------------
* @me command by lordalfa, rewritten implementation by Skotlex
*------------------------------------------*/
-int clif_disp_overhead(struct map_session_data *sd, const char* mes)
+void clif_disp_overhead(struct map_session_data *sd, const char* mes)
{
unsigned char buf[256]; //This should be more than sufficient, the theorical max is CHAT_SIZE + 8 (pads and extra inserted crap)
int len_mes = strlen(mes)+1; //Account for \0
- if (len_mes + 8 >= 256) {
+ if (len_mes > sizeof(buf)-8) {
ShowError("clif_disp_overhead: Message too long (length %d)\n", len_mes);
- len_mes = 247; //Trunk it to avoid problems.
+ len_mes = sizeof(buf)-8; //Trunk it to avoid problems.
}
// send message to others
WBUFW(buf,0) = 0x8d;
WBUFW(buf,2) = len_mes + 8; // len of message + 8 (command+len+id)
WBUFL(buf,4) = sd->bl.id;
- memcpy(WBUFP(buf,8), mes, len_mes);
+ safestrncpy((char*)WBUFP(buf,8), mes, len_mes);
clif_send(buf, WBUFW(buf,2), &sd->bl, AREA_CHAT_WOC);
// send back message to the speaker
WBUFW(buf,0) = 0x8e;
WBUFW(buf, 2) = len_mes + 4;
- memcpy(WBUFP(buf,4), mes, len_mes);
+ safestrncpy((char*)WBUFP(buf,4), mes, len_mes);
clif_send(buf, WBUFW(buf,2), &sd->bl, SELF);
-
- return 0;
}
/*==========================
@@ -8457,7 +8510,7 @@ static int clif_guess_PacketVer(int fd, int get_previous, int *error)
// ------------
// clif_parse_*
// ------------
-// ƒpƒPƒbƒg“Ç‚ÝŽæ‚Á‚ÄFX‘€ì
+// Parses incoming (player) connection
/*==========================================
*
*------------------------------------------*/
@@ -8546,8 +8599,9 @@ void clif_parse_WantToConnection(int fd, TBL_PC* sd)
}
/*==========================================
- * 007d ƒNƒ‰ƒCƒAƒ“ƒg‘¤ƒ}ƒbƒv“Ç‚Ýž‚ÝŠ®—¹
- * mapN“üŽž‚É•K—v‚ȃf[ƒ^‚ð‘S‚Ä‘—‚è‚‚¯‚é
+ * 007d : Server/Client tells that he is able to proceed
+ * This is run by both server (from pc.c) and client (on map load/refresh
+ * (teleport/warping in same map also triggers this)
*------------------------------------------*/
void clif_parse_LoadEndAck(int fd,struct map_session_data *sd)
{
@@ -8711,9 +8765,6 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd)
if (sd->sc.option&OPTION_RIDING)
clif_status_load(&sd->bl, SI_RIDING, 1);
- if (sd->sc.option&OPTION_DRAGON)
- clif_status_load(&sd->bl, SI_RIDING, 1);
-
if(sd->status.manner < 0)
sc_start(&sd->bl,SC_NOCHAT,100,0,0);
@@ -8932,7 +8983,7 @@ void clif_parse_WalkToXY(int fd, struct map_session_data *sd)
return;
}
- if (sd->sc.opt1 && (sd->sc.opt1 == OPT1_STONEWAIT || sd->sc.opt1 == OPT1_BURNING))
+ if (sd->sc.opt1 && sd->sc.opt1 == OPT1_STONEWAIT)
; //You CAN walk on this OPT1 value.
else if( sd->progressbar.npc_id )
clif_progressbar_abort(sd);
@@ -9021,9 +9072,11 @@ void clif_parse_GlobalMessage(int fd, struct map_session_data* sd)
const char* text = (char*)RFIFOP(fd,4);
int textlen = RFIFOW(fd,2) - 4;
- char *name, *message;
+ char *name, *message, *fakename = NULL;
int namelen, messagelen;
+ bool is_fake;
+
// validate packet and retrieve name and message
if( !clif_process_message(sd, 0, &name, &namelen, &message, &messagelen) )
return;
@@ -9040,21 +9093,35 @@ void clif_parse_GlobalMessage(int fd, struct map_session_data* sd)
return;
sd->cantalk_tick = gettick() + battle_config.min_chat_delay;
}
-
+ /**
+ * Fake Name Design by FatalEror (bug report #9)
+ **/
+ if( ( is_fake = ( sd->fakename[0] ) ) ) {
+ fakename = (char*) malloc(strlen(sd->fakename)+messagelen+3);
+ strcpy(fakename, sd->fakename);
+ strcat(fakename, " : ");
+ strcat(fakename, message);
+ textlen = strlen(fakename) + 1;
+ }
// send message to others (using the send buffer for temp. storage)
WFIFOHEAD(fd, 8 + textlen);
WFIFOW(fd,0) = 0x8d;
WFIFOW(fd,2) = 8 + textlen;
WFIFOL(fd,4) = sd->bl.id;
- safestrncpy((char*)WFIFOP(fd,8), text, textlen);
+ safestrncpy((char*)WFIFOP(fd,8), is_fake ? fakename : text, textlen);
//FIXME: chat has range of 9 only
clif_send(WFIFOP(fd,0), WFIFOW(fd,2), &sd->bl, sd->chatID ? CHAT_WOS : AREA_CHAT_WOC);
// send back message to the speaker
- memcpy(WFIFOP(fd,0), RFIFOP(fd,0), RFIFOW(fd,2));
- WFIFOW(fd,0) = 0x8e;
+ if( is_fake ) {
+ WFIFOW(fd,0) = 0x8e;
+ WFIFOW(fd,2) = textlen + 4;
+ safestrncpy((char*)WFIFOP(fd,4), fakename, textlen);
+ } else {
+ memcpy(WFIFOP(fd,0), RFIFOP(fd,0), RFIFOW(fd,2));
+ WFIFOW(fd,0) = 0x8e;
+ }
WFIFOSET(fd, WFIFOW(fd,2));
-
#ifdef PCRE_SUPPORT
// trigger listening npcs
map_foreachinrange(npc_chat_sub, &sd->bl, AREA_SIZE, BL_NPC, text, textlen, &sd->bl);
@@ -9182,8 +9249,7 @@ void clif_parse_ActionRequest_sub(struct map_session_data *sd, int action_type,
if (sd->sc.count &&
(sd->sc.data[SC_TRICKDEAD] ||
sd->sc.data[SC_AUTOCOUNTER] ||
- sd->sc.data[SC_BLADESTOP] ||
- sd->sc.data[SC_DEATHBOUND]))
+ sd->sc.data[SC_BLADESTOP]))
return;
pc_stop_walking(sd, 1);
@@ -9229,7 +9295,7 @@ void clif_parse_ActionRequest_sub(struct map_session_data *sd, int action_type,
return;
}
- if (sd->ud.skilltimer != INVALID_TIMER || (sd->sc.opt1 && sd->sc.opt1 != OPT1_BURNING))
+ if (sd->ud.skilltimer != INVALID_TIMER || sd->sc.opt1)
break;
if (sd->sc.count && (
@@ -9454,7 +9520,7 @@ void clif_parse_Broadcast(int fd, struct map_session_data* sd)
return;
// as the length varies depending on the command used, just block unreasonably long strings
- mes_len_check(msg, len, CHAT_SIZE_MAX);
+ len = mes_len_check(msg, len, CHAT_SIZE_MAX);
intif_broadcast(msg, len, 0);
@@ -9525,7 +9591,6 @@ void clif_parse_DropItem(int fd, struct map_session_data *sd)
if (sd->sc.count && (
sd->sc.data[SC_AUTOCOUNTER] ||
sd->sc.data[SC_BLADESTOP] ||
- sd->sc.data[SC_DEATHBOUND] ||
(sd->sc.data[SC_NOCHAT] && sd->sc.data[SC_NOCHAT]->val1&MANNER_NOITEM)
))
break;
@@ -9552,7 +9617,7 @@ void clif_parse_UseItem(int fd, struct map_session_data *sd)
return;
}
- if (sd->sc.opt1 > 0 && sd->sc.opt1 != OPT1_STONEWAIT && sd->sc.opt1 != OPT1_BURNING)
+ if (sd->sc.opt1 > 0 && sd->sc.opt1 != OPT1_STONEWAIT)
return;
//This flag enables you to use items while in an NPC. [Skotlex]
@@ -9591,7 +9656,7 @@ void clif_parse_EquipItem(int fd,struct map_session_data *sd)
if(sd->npc_id) {
if (sd->npc_id != sd->npc_item_flag)
return;
- } else if (sd->state.storage_flag || (sd->sc.opt1 && sd->sc.opt1 != OPT1_BURNING))
+ } else if (sd->state.storage_flag || sd->sc.opt1)
; //You can equip/unequip stuff while storage is open/under status changes
else if (pc_cant_act(sd))
return;
@@ -9840,7 +9905,7 @@ static void clif_noask_sub(struct map_session_data *src, struct map_session_data
}
/*==========================================
- * Žæˆø—v¿‚ð‘ŠŽè‚É‘—‚é
+ * Client tells server to send a trade request to char id RFIFOL(fd,2)
*------------------------------------------*/
void clif_parse_TradeRequest(int fd,struct map_session_data *sd)
{
@@ -9867,7 +9932,7 @@ void clif_parse_TradeRequest(int fd,struct map_session_data *sd)
}
/*==========================================
- * Žæˆø—v¿
+ * Client tells server he replied to a trade request sent to him
*------------------------------------------*/
void clif_parse_TradeAck(int fd,struct map_session_data *sd)
{
@@ -9875,7 +9940,7 @@ void clif_parse_TradeAck(int fd,struct map_session_data *sd)
}
/*==========================================
- * ƒAƒCƒeƒ€’ljÁ
+ * Client tells server to add RFIFOL(fd,4) quantity of item index RFIFOW(fd,2)
*------------------------------------------*/
void clif_parse_TradeAddItem(int fd,struct map_session_data *sd)
{
@@ -9889,7 +9954,7 @@ void clif_parse_TradeAddItem(int fd,struct map_session_data *sd)
}
/*==========================================
- * ƒAƒCƒeƒ€’ljÁŠ®—¹(ok‰Ÿ‚µ)
+ * Client tells server player he is done adding items to his trade window
*------------------------------------------*/
void clif_parse_TradeOk(int fd,struct map_session_data *sd)
{
@@ -9897,7 +9962,7 @@ void clif_parse_TradeOk(int fd,struct map_session_data *sd)
}
/*==========================================
- * ŽæˆøƒLƒƒƒ“ƒZƒ‹
+ * Client tells server player cancelled the trade
*------------------------------------------*/
void clif_parse_TradeCancel(int fd,struct map_session_data *sd)
{
@@ -9905,7 +9970,7 @@ void clif_parse_TradeCancel(int fd,struct map_session_data *sd)
}
/*==========================================
- * Žæˆø‹–‘ø(trade‰Ÿ‚µ)
+ * Client tells server player 'locked' the trade screen (can't add/remove items)
*------------------------------------------*/
void clif_parse_TradeCommit(int fd,struct map_session_data *sd)
{
@@ -9921,7 +9986,7 @@ void clif_parse_StopAttack(int fd,struct map_session_data *sd)
}
/*==========================================
- * ƒJ[ƒg‚ÖƒAƒCƒeƒ€‚ðˆÚ‚·
+ * Client tells server player dragged (RFIFOL(fd,4))x of item idx RIFOFW(fd,2)-2 to cart
*------------------------------------------*/
void clif_parse_PutItemToCart(int fd,struct map_session_data *sd)
{
@@ -9932,7 +9997,7 @@ void clif_parse_PutItemToCart(int fd,struct map_session_data *sd)
pc_putitemtocart(sd,RFIFOW(fd,2)-2,RFIFOL(fd,4));
}
/*==========================================
- * ƒJ[ƒg‚©‚çƒAƒCƒeƒ€‚ðo‚·
+ * Client tells server to take y (RFIFOL(fd,4)) amount of item (idx:RFIFOW(fd,2)-2) from cart and add to inventory
*------------------------------------------*/
void clif_parse_GetItemFromCart(int fd,struct map_session_data *sd)
{
@@ -9942,16 +10007,18 @@ void clif_parse_GetItemFromCart(int fd,struct map_session_data *sd)
}
/*==========================================
- * •t‘®•i(‘é,ƒyƒR,ƒJ[ƒg)‚ð‚Í‚¸‚·
+ * Client tells server the user hit the 'OFF' button in the equip window (appears when mounting, with falcon, etc)
*------------------------------------------*/
void clif_parse_RemoveOption(int fd,struct map_session_data *sd)
{
- //Can only remove Cart/Riding/Falcon.
- pc_setoption(sd,sd->sc.option&~(OPTION_CART|OPTION_RIDING|OPTION_FALCON|OPTION_DRAGON));
+ /**
+ * Attempts to remove these options when this function is called (will remove all available)
+ **/
+ pc_setoption(sd,sd->sc.option&~(OPTION_CART|OPTION_RIDING|OPTION_FALCON|OPTION_DRAGON|OPTION_MADOGEAR));
}
/*==========================================
- * ƒ`ƒFƒ“ƒWƒJ[ƒg
+ * Client tells server the user selected cart type 'type', comes from cart selection screen (Change Cart Skill)
*------------------------------------------*/
void clif_parse_ChangeCart(int fd,struct map_session_data *sd)
{
@@ -9971,7 +10038,7 @@ void clif_parse_ChangeCart(int fd,struct map_session_data *sd)
}
/*==========================================
- * ƒXƒe[ƒ^ƒXƒAƒbƒv
+ * Client tells Server to process a /str, /vit, etc(others)
*------------------------------------------*/
void clif_parse_StatusUp(int fd,struct map_session_data *sd)
{
@@ -9979,7 +10046,7 @@ void clif_parse_StatusUp(int fd,struct map_session_data *sd)
}
/*==========================================
- * ƒXƒLƒ‹ƒŒƒxƒ‹ƒAƒbƒv
+ * Client tells server to level up skill (RFIFOW(fd,2)) by 1
*------------------------------------------*/
void clif_parse_SkillUp(int fd,struct map_session_data *sd)
{
@@ -10059,7 +10126,7 @@ static void clif_parse_UseSkillToPos_mercenary(struct mercenary_data *md, struct
}
/*==========================================
- * ƒXƒLƒ‹Žg—piIDŽw’èj
+ * Client tells server he'd like to use skill of id 'skillnum' and level 'skilllv' on 'target_id'
*------------------------------------------*/
void clif_parse_UseSkillToId(int fd, struct map_session_data *sd)
{
@@ -10115,7 +10182,7 @@ void clif_parse_UseSkillToId(int fd, struct map_session_data *sd)
{
if( sd->skillitem != skillnum )
{
- clif_skill_fail(sd, skillnum, 0x04, 0);
+ clif_skill_fail(sd, skillnum, 4, 0);
return;
}
}
@@ -10166,7 +10233,7 @@ void clif_parse_UseSkillToId(int fd, struct map_session_data *sd)
}
/*==========================================
- * ƒXƒLƒ‹Žg—piꊎw’èj
+ * Client tells server he'd like to use AoE skill id 'skillnum' of level 'skilllv' on 'x','y' location
*------------------------------------------*/
void clif_parse_UseSkillToPosSub(int fd, struct map_session_data *sd, short skilllv, short skillnum, short x, short y, int skillmoreinfo)
{
@@ -10276,7 +10343,7 @@ void clif_parse_UseSkillToPosMoreInfo(int fd, struct map_session_data *sd)
);
}
/*==========================================
- * ƒXƒLƒ‹Žg—pimapŽw’èj
+ * (?) I *think* this one is for skills cast on self, not entirely sure
*------------------------------------------*/
void clif_parse_UseSkillMap(int fd, struct map_session_data* sd)
{
@@ -10297,7 +10364,7 @@ void clif_parse_UseSkillMap(int fd, struct map_session_data* sd)
skill_castend_map(sd,skill_num,map_name);
}
/*==========================================
- * ƒƒ‚—v‹
+ * Client tells server he did '/memo'
*------------------------------------------*/
void clif_parse_RequestMemo(int fd,struct map_session_data *sd)
{
@@ -10305,13 +10372,12 @@ void clif_parse_RequestMemo(int fd,struct map_session_data *sd)
pc_memo(sd,-1);
}
/*==========================================
- * ƒAƒCƒeƒ€‡¬
+ * Client tells server he selected something from a crafting window (e.g. pharmacy)
*------------------------------------------*/
void clif_parse_ProduceMix(int fd,struct map_session_data *sd)
{
- if (sd->menuskill_id != AM_PHARMACY)
+ if( sd->menuskill_id != -1 && sd->menuskill_id != AM_PHARMACY && sd->menuskill_id != RK_RUNEMASTERY )
return;
-
if (pc_istrading(sd)) {
//Make it fail to avoid shop exploits where you sell something different than you see.
clif_skill_fail(sd,sd->ud.skillid,0,0);
@@ -10344,7 +10410,7 @@ void clif_parse_Cooking(int fd,struct map_session_data *sd)
sd->menuskill_val = sd->menuskill_id = 0;
}
/*==========================================
- * •ŠíC—
+ * Client tells server he selected something in his 'repair item list'
*------------------------------------------*/
void clif_parse_RepairItem(int fd, struct map_session_data *sd)
{
@@ -10449,7 +10515,7 @@ void clif_parse_NpcCloseClicked(int fd,struct map_session_data *sd)
}
/*==========================================
- * ƒAƒCƒeƒ€ŠÓ’è
+ * Client tells server he selected something in his 'magnifier item list'
*------------------------------------------*/
void clif_parse_ItemIdentify(int fd,struct map_session_data *sd)
{
@@ -10466,23 +10532,35 @@ void clif_parse_ItemIdentify(int fd,struct map_session_data *sd)
sd->menuskill_val = sd->menuskill_id = 0;
}
/*==========================================
- * –îì¬
+ * Client tells server he selected something in his 'arrow crafting list'
*------------------------------------------*/
void clif_parse_SelectArrow(int fd,struct map_session_data *sd)
{
- if (sd->menuskill_id != AC_MAKINGARROW)
- return;
if (pc_istrading(sd)) {
//Make it fail to avoid shop exploits where you sell something different than you see.
clif_skill_fail(sd,sd->ud.skillid,0,0);
sd->menuskill_val = sd->menuskill_id = 0;
return;
}
- skill_arrow_create(sd,RFIFOW(fd,2));
+ switch( sd->menuskill_id ) {
+ case AC_MAKINGARROW:
+ skill_arrow_create(sd,RFIFOW(fd,2));
+ break;
+ case WL_READING_SB:
+ skill_spellbook(sd,RFIFOW(fd,2));
+ break;
+ case GC_POISONINGWEAPON:
+ skill_poisoningweapon(sd,RFIFOW(fd,2));
+ break;
+ case NC_MAGICDECOY:
+ skill_magicdecoy(sd,RFIFOW(fd,2));
+ break;
+ }
+
sd->menuskill_val = sd->menuskill_id = 0;
}
/*==========================================
- * ƒI[ƒgƒXƒyƒ‹ŽóM
+ * Client tells server he selected something in his 'autospell skill list'
*------------------------------------------*/
void clif_parse_AutoSpell(int fd,struct map_session_data *sd)
{
@@ -10492,7 +10570,7 @@ void clif_parse_AutoSpell(int fd,struct map_session_data *sd)
sd->menuskill_val = sd->menuskill_id = 0;
}
/*==========================================
- * ƒJ[ƒhŽg—p
+ * Client tells server he clicked on a card item, requests the can-add-to list
*------------------------------------------*/
void clif_parse_UseCard(int fd,struct map_session_data *sd)
{
@@ -10501,7 +10579,7 @@ void clif_parse_UseCard(int fd,struct map_session_data *sd)
clif_use_card(sd,RFIFOW(fd,2)-2);
}
/*==========================================
- * ƒJ[ƒh‘}“ü‘•”õ‘I‘ð
+ * Client tells server he selected something in his 'carding list' (the one that lists all items you got that can receive that card)
*------------------------------------------*/
void clif_parse_InsertCard(int fd,struct map_session_data *sd)
{
@@ -10511,7 +10589,7 @@ void clif_parse_InsertCard(int fd,struct map_session_data *sd)
}
/*==========================================
- * 0193 ƒLƒƒƒ‰ID–¼‘Oˆø‚«
+ * 0193 : Client asks server for nick reference to a specific char id
*------------------------------------------*/
void clif_parse_SolveCharName(int fd, struct map_session_data *sd)
{
@@ -10558,7 +10636,7 @@ void clif_parse_LocalBroadcast(int fd, struct map_session_data* sd)
return;
// as the length varies depending on the command used, just block unreasonably long strings
- mes_len_check(msg, len, CHAT_SIZE_MAX);
+ len = mes_len_check(msg, len, CHAT_SIZE_MAX);
clif_broadcast(&sd->bl, msg, len, 0, ALL_SAMEMAP);
@@ -10570,7 +10648,7 @@ void clif_parse_LocalBroadcast(int fd, struct map_session_data* sd)
}
/*==========================================
- * ƒJƒvƒ‰‘qŒÉ‚Ö“ü‚ê‚é
+ * Client tells server to move (item_amount) quantity of item idx (item_index) from inventory to storage
*------------------------------------------*/
void clif_parse_MoveToKafra(int fd, struct map_session_data *sd)
{
@@ -10592,7 +10670,7 @@ void clif_parse_MoveToKafra(int fd, struct map_session_data *sd)
}
/*==========================================
- * ƒJƒvƒ‰‘qŒÉ‚©‚ço‚·
+ * Client tells server to move (item_amount) quantity of item idx (item_index) from storage to inventory
*------------------------------------------*/
void clif_parse_MoveFromKafra(int fd,struct map_session_data *sd)
{
@@ -10609,7 +10687,7 @@ void clif_parse_MoveFromKafra(int fd,struct map_session_data *sd)
}
/*==========================================
- * ƒJƒvƒ‰‘qŒÉ‚ÖƒJ[ƒg‚©‚ç“ü‚ê‚é
+ * Client tells server to move RFIFOL(fd,4) quantity of item idx RFIFOW(fd,2) from cart to storage
*------------------------------------------*/
void clif_parse_MoveToKafraFromCart(int fd, struct map_session_data *sd)
{
@@ -10626,7 +10704,7 @@ void clif_parse_MoveToKafraFromCart(int fd, struct map_session_data *sd)
}
/*==========================================
- * ƒJƒvƒ‰‘qŒÉ‚©‚ço‚·
+ * Client tells server to move RFIFOL(fd,4) quantity of item idx RFIFOW(fd,2) from storage to cart
*------------------------------------------*/
void clif_parse_MoveFromKafraToCart(int fd, struct map_session_data *sd)
{
@@ -10643,7 +10721,7 @@ void clif_parse_MoveFromKafraToCart(int fd, struct map_session_data *sd)
}
/*==========================================
- * ƒJƒvƒ‰‘qŒÉ‚ð•Â‚¶‚é
+ * Client tells server to close the kafra
*------------------------------------------*/
void clif_parse_CloseKafra(int fd, struct map_session_data *sd)
{
@@ -10774,7 +10852,7 @@ void clif_parse_ReplyPartyInvite2(int fd,struct map_session_data *sd)
}
/*==========================================
- * ƒp[ƒeƒB’E‘Þ—v‹
+ * Client tells server to remove itself from it's party
*------------------------------------------*/
void clif_parse_LeaveParty(int fd, struct map_session_data *sd)
{
@@ -10787,7 +10865,7 @@ void clif_parse_LeaveParty(int fd, struct map_session_data *sd)
}
/*==========================================
- * ƒp[ƒeƒBœ–¼—v‹
+ * Client tells server to remove player account id RFIFOL(fd,2) with char name RFIFOP(fd,6) from his party
*------------------------------------------*/
void clif_parse_RemovePartyMember(int fd, struct map_session_data *sd)
{
@@ -10800,7 +10878,11 @@ void clif_parse_RemovePartyMember(int fd, struct map_session_data *sd)
}
/*==========================================
- * ƒp[ƒeƒBÝ’è•ÏX—v‹
+ * Client tells server to change it's party configuration
+ * - clients before 20090603
+ * -- It only may toggle exp sharing
+ * - 20090603 or newer
+ * -- It may toggle exp (RFIFOW(fd,2) and item sharing options (RFIFOB(fd,6) and RFIFOB(fd,7))
*------------------------------------------*/
void clif_parse_PartyChangeOption(int fd, struct map_session_data *sd)
{
@@ -11075,10 +11157,14 @@ void clif_parse_OpenVending(int fd, struct map_session_data* sd)
if( sd->sc.data[SC_NOCHAT] && sd->sc.data[SC_NOCHAT]->val1&MANNER_NOROOM )
return;
- if( map[sd->bl.m].flag.novending || map_getcell(sd->bl.m,sd->bl.x,sd->bl.y,CELL_CHKNOVENDING) ) {
+ if( map[sd->bl.m].flag.novending ) {
clif_displaymessage (sd->fd, msg_txt(276)); // "You can't open a shop on this map"
return;
}
+ if( map_getcell(sd->bl.m,sd->bl.x,sd->bl.y,CELL_CHKNOVENDING) ) {
+ clif_displaymessage (sd->fd, msg_txt(204)); // "You can't open a shop on this cell."
+ return;
+ }
if( message[0] == '\0' ) // invalid input
return;
@@ -11250,7 +11336,7 @@ void clif_parse_GuildChangeNotice(int fd, struct map_session_data* sd)
}
/*==========================================
- * ƒMƒ‹ƒhŠ©—U
+ * Client tells server to invite account id RFIFOL(fd,2) to his guild
*------------------------------------------*/
void clif_parse_GuildInvite(int fd,struct map_session_data *sd)
{
@@ -11274,7 +11360,8 @@ void clif_parse_GuildInvite(int fd,struct map_session_data *sd)
}
/*==========================================
- * ƒMƒ‹ƒhŠ©—U•ÔM
+ * Client tells server his reply on the request from guild ID RFIFOL(fd,2),
+ * - based on RFIFOB(fd,6) which is either 1 (accept) or 0 (reject)
*------------------------------------------*/
void clif_parse_GuildReplyInvite(int fd,struct map_session_data *sd)
{
@@ -11282,7 +11369,7 @@ void clif_parse_GuildReplyInvite(int fd,struct map_session_data *sd)
}
/*==========================================
- * ƒMƒ‹ƒh’E‘Þ
+ * Client tells server he wants to leave his current guild
*------------------------------------------*/
void clif_parse_GuildLeave(int fd,struct map_session_data *sd)
{
@@ -11350,7 +11437,7 @@ void clif_parse_GuildMessage(int fd, struct map_session_data* sd)
}
/*==========================================
- * ƒMƒ‹ƒh“¯–¿—v‹
+ * Client tells server he'd like to send a alliance request to account id RFIFOL(fd,2)
*------------------------------------------*/
void clif_parse_GuildRequestAlliance(int fd, struct map_session_data *sd)
{
@@ -11377,7 +11464,8 @@ void clif_parse_GuildRequestAlliance(int fd, struct map_session_data *sd)
}
/*==========================================
- * ƒMƒ‹ƒh“¯–¿—v‹•ÔM
+ * Client tells server his response to the alliance request from,
+ * Guild ID RFIFOL(fd,2) based on RFIFOL(fd,6) which is 1 (accepted) or 0 (rejected)
*------------------------------------------*/
void clif_parse_GuildReplyAlliance(int fd, struct map_session_data *sd)
{
@@ -11385,7 +11473,8 @@ void clif_parse_GuildReplyAlliance(int fd, struct map_session_data *sd)
}
/*==========================================
- * ƒMƒ‹ƒhŠÖŒW‰ðÁ
+ * Client tells server he'd like to delete alliance from guild ID RFIFOL(fd,2),
+ * RFIFOL(fd,6) returns a 1 or 0 flag but apparently it is no longer used
*------------------------------------------*/
void clif_parse_GuildDelAlliance(int fd, struct map_session_data *sd)
{
@@ -11401,7 +11490,7 @@ void clif_parse_GuildDelAlliance(int fd, struct map_session_data *sd)
}
/*==========================================
- * ƒMƒ‹ƒh“G‘Î
+ * Client tells server he'd like his guild to be set antagonist of account id RFIFOL(fd,2)'s guild
*------------------------------------------*/
void clif_parse_GuildOpposition(int fd, struct map_session_data *sd)
{
@@ -11428,7 +11517,7 @@ void clif_parse_GuildOpposition(int fd, struct map_session_data *sd)
}
/*==========================================
- * ƒMƒ‹ƒh‰ðŽU
+ * Client tells server he'd like to break (delete) his own guild
*------------------------------------------*/
void clif_parse_GuildBreak(int fd, struct map_session_data *sd)
{
@@ -11475,7 +11564,7 @@ void clif_parse_ChangePetName(int fd, struct map_session_data *sd)
}
/*==========================================
- * /kill <???>
+ * /kill <account_id>
* (or right click menu for GM "(name) force to quit")
* S 00cc <id>.L
*------------------------------------------*/
@@ -11996,7 +12085,7 @@ void clif_parse_PMIgnoreAll(int fd, struct map_session_data *sd)
}
/*==========================================
- * Wis‹‘”ÛƒŠƒXƒg
+ * Client tells server he'd like the server to list him his ignore list
*------------------------------------------*/
void clif_parse_PMIgnoreList(int fd,struct map_session_data *sd)
{
@@ -12014,7 +12103,7 @@ void clif_parse_PMIgnoreList(int fd,struct map_session_data *sd)
}
/*==========================================
- * ƒXƒpƒmƒr‚Ì/doridori‚É‚æ‚éSPR2”{
+ * Client tells server he did a /doridori
*------------------------------------------*/
void clif_parse_NoviceDoriDori(int fd, struct map_session_data *sd)
{
@@ -12048,7 +12137,7 @@ void clif_parse_NoviceExplosionSpirits(int fd, struct map_session_data *sd)
if( ( sd->class_&MAPID_UPPERMASK ) == MAPID_SUPER_NOVICE )
{
unsigned int next = pc_nextbaseexp(sd);
-
+ if( next == 0 ) next = pc_thisbaseexp(sd);
if( next )
{
int percent = (int)( ( (float)sd->status.base_exp/(float)next )*1000. );
@@ -13142,6 +13231,12 @@ void clif_Auction_results(struct map_session_data *sd, short count, short pages,
WFIFOSET(fd,WFIFOW(fd,2));
}
+
+/// Result from request to add an item (ZC_ACK_AUCTION_ADD_ITEM)
+/// 0256 <index>.W <result>.B
+/// result:
+/// 0 = success
+/// 1 = failure
static void clif_Auction_setitem(int fd, int index, bool fail)
{
WFIFOHEAD(fd,packet_len(0x256));
@@ -13151,6 +13246,13 @@ static void clif_Auction_setitem(int fd, int index, bool fail)
WFIFOSET(fd,packet_len(0x256));
}
+
+/// Request to initialize 'new auction' data (CZ_AUCTION_CREATE)
+/// 024b <type>.W
+/// type:
+/// 0 = create (any other action in auction window)
+/// 1 = cancel (cancel pressed on register tab)
+/// ? = junk, uninitialized value (ex. when switching between list filters)
void clif_parse_Auction_cancelreg(int fd, struct map_session_data *sd)
{
if( sd->auction.amount > 0 )
@@ -13159,6 +13261,9 @@ void clif_parse_Auction_cancelreg(int fd, struct map_session_data *sd)
sd->auction.amount = 0;
}
+
+/// Request to add an item to the action (CZ_AUCTION_ADD_ITEM)
+/// 024c <index>.W <count>.L
void clif_parse_Auction_setitem(int fd, struct map_session_data *sd)
{
int idx = RFIFOW(fd,2) - 2;
@@ -13174,8 +13279,8 @@ void clif_parse_Auction_setitem(int fd, struct map_session_data *sd)
return;
}
- if( amount != 1 || amount < 0 || amount > sd->status.inventory[idx].amount )
- { // By client, amount is allways set to 1. Maybe this is a future implementation.
+ if( amount != 1 || amount > sd->status.inventory[idx].amount )
+ { // By client, amount is always set to 1. Maybe this is a future implementation.
ShowWarning("Character %s trying to set invalid amount in auctions.\n", sd->status.name);
return;
}
@@ -13224,7 +13329,7 @@ void clif_Auction_message(int fd, unsigned char flag)
/// result:
/// 0 = You have ended the auction
/// 1 = You cannot end the auction
-/// 2 = Bid number is incorrect
+/// 2 = Auction ID is incorrect
void clif_Auction_close(int fd, unsigned char flag)
{
WFIFOHEAD(fd,packet_len(0x25e));
@@ -13233,6 +13338,9 @@ void clif_Auction_close(int fd, unsigned char flag)
WFIFOSET(fd,packet_len(0x25e));
}
+
+/// Request to add an auction (CZ_AUCTION_ADD)
+/// 024d <now money>.L <max money>.L <delete hour>.W
void clif_parse_Auction_register(int fd, struct map_session_data *sd)
{
struct auction_data auction;
@@ -13277,9 +13385,9 @@ void clif_parse_Auction_register(int fd, struct map_session_data *sd)
auction.auction_id = 0;
auction.seller_id = sd->status.char_id;
- safestrncpy(auction.seller_name, sd->status.name, NAME_LENGTH);
+ safestrncpy(auction.seller_name, sd->status.name, sizeof(auction.seller_name));
auction.buyer_id = 0;
- memset(&auction.buyer_name, '\0', NAME_LENGTH);
+ memset(auction.buyer_name, '\0', sizeof(auction.buyer_name));
if( sd->status.inventory[sd->auction.index].nameid == 0 || sd->status.inventory[sd->auction.index].amount < sd->auction.amount )
{
@@ -13293,7 +13401,7 @@ void clif_parse_Auction_register(int fd, struct map_session_data *sd)
return;
}
- safestrncpy(auction.item_name, item->jname, ITEM_NAME_LENGTH);
+ safestrncpy(auction.item_name, item->jname, sizeof(auction.item_name));
auction.type = item->type;
memcpy(&auction.item, &sd->status.inventory[sd->auction.index], sizeof(struct item));
auction.item.amount = 1;
@@ -13309,6 +13417,9 @@ void clif_parse_Auction_register(int fd, struct map_session_data *sd)
}
}
+
+/// Cancels an auction (CZ_AUCTION_ADD_CANCEL)
+/// 024e <auction id>.L
void clif_parse_Auction_cancel(int fd, struct map_session_data *sd)
{
unsigned int auction_id = RFIFOL(fd,2);
@@ -13316,6 +13427,9 @@ void clif_parse_Auction_cancel(int fd, struct map_session_data *sd)
intif_Auction_cancel(sd->status.char_id, auction_id);
}
+
+/// Closes an auction (CZ_AUCTION_REQ_MY_SELL_STOP)
+/// 025d <auction id>.L
void clif_parse_Auction_close(int fd, struct map_session_data *sd)
{
unsigned int auction_id = RFIFOL(fd,2);
@@ -13323,6 +13437,9 @@ void clif_parse_Auction_close(int fd, struct map_session_data *sd)
intif_Auction_close(sd->status.char_id, auction_id);
}
+
+/// Places a bid on an auction (CZ_AUCTION_BUY)
+/// 024f <auction id>.L <money>.L
void clif_parse_Auction_bid(int fd, struct map_session_data *sd)
{
unsigned int auction_id = RFIFOL(fd,2);
@@ -13345,23 +13462,34 @@ void clif_parse_Auction_bid(int fd, struct map_session_data *sd)
}
}
-/*------------------------------------------
- * Auction Search
- * S 0251 <search type>.w <search price>.l <search text>.24B <page number>.w
- * Search Type: 0 Armor 1 Weapon 2 Card 3 Misc 4 By Text 5 By Price 6 Sell 7 Buy
- *------------------------------------------*/
+
+/// Auction Search (CZ_AUCTION_ITEM_SEARCH)
+/// 0251 <search type>.W <auction id>.L <search text>.24B <page number>.W
+/// search type:
+/// 0 = armor
+/// 1 = weapon
+/// 2 = card
+/// 3 = misc
+/// 4 = name search
+/// 5 = auction id search
void clif_parse_Auction_search(int fd, struct map_session_data* sd)
{
char search_text[NAME_LENGTH];
short type = RFIFOW(fd,2), page = RFIFOW(fd,32);
- int price = RFIFOL(fd,4);
+ int price = RFIFOL(fd,4); // FIXME: bug #5071
clif_parse_Auction_cancelreg(fd, sd);
- safestrncpy(search_text, (char*)RFIFOP(fd,8), NAME_LENGTH);
+ safestrncpy(search_text, (char*)RFIFOP(fd,8), sizeof(search_text));
intif_Auction_requestlist(sd->status.char_id, type, price, search_text, page);
}
+
+/// Requests list of own currently active bids or auctions (CZ_AUCTION_REQ_MY_INFO)
+/// 025c <type>.W
+/// type:
+/// 0 = sell (own auctions)
+/// 1 = buy (own bids)
void clif_parse_Auction_buysell(int fd, struct map_session_data* sd)
{
short type = RFIFOW(fd,2) + 6;
@@ -14288,7 +14416,7 @@ void clif_displayexp(struct map_session_data *sd, unsigned int exp, char type, b
/// 0: Displays 'value' for 5 seconds.
/// 1: Incremental counter (1 tick/second), negated 'value' specifies start value (e.g. using -10 lets the counter start at 10).
/// 2: Decremental counter (1 tick/second), negated 'value' specifies start value (does not stop when reaching 0, but overflows).
-/// 3: Decremental counter (2 ticks/second), 'value' specifies start value (stops when reaching 0, displays at most 2 digits).
+/// 3: Decremental counter (1 tick/second), 'value' specifies start value (stops when reaching 0, displays at most 2 digits).
/// value:
/// Except for type 3 it is interpreted as seconds for displaying as DD:HH:MM:SS, HH:MM:SS, MM:SS or SS (leftmost '00' is not displayed).
void clif_showdigit(struct map_session_data* sd, unsigned char type, int value)
@@ -14813,19 +14941,6 @@ void clif_search_store_info_click_ack(struct map_session_data* sd, short x, shor
WFIFOSET(fd,packet_len(0x83d));
}
-// Correct packet for RK_MILLENIUMSHIELD. Shows spirit spheres.
-void clif_millenniumshield(struct map_session_data *sd, int num)
-{
-#if PACKETVER >= 20081217
- unsigned char buf[10];
-
- WBUFW(buf,0)=0x440;
- WBUFL(buf,2)=sd->bl.id;
- WBUFW(buf,6)=num;
- WBUFW(buf,8)=0;
- clif_send(buf,packet_len(0x440),&sd->bl,AREA);
-#endif
-}
/// Parse function for packet debugging
void clif_parse_debug(int fd,struct map_session_data *sd)
@@ -14858,6 +14973,183 @@ void clif_parse_debug(int fd,struct map_session_data *sd)
ShowDump(RFIFOP(fd,0), packet_len);
}
+/**
+ * Rune Knight
+ **/
+void clif_millenniumshield(struct map_session_data *sd, short shields ) {
+#if PACKETVER >= 20081217
+ unsigned char buf[10];
+
+ WBUFW(buf,0) = 0x440;
+ WBUFL(buf,2) = sd->bl.id;
+ WBUFW(buf,6) = shields;
+ WBUFW(buf,8) = 0;
+ clif_send(buf,packet_len(0x440),&sd->bl,AREA);
+#endif
+}
+/**
+ * Warlock
+ **/
+/*==========================================
+ * Spellbook list [LimitLine/3CeAM]
+ *------------------------------------------*/
+int clif_spellbook_list(struct map_session_data *sd)
+{
+ int i, c;
+ int fd;
+
+ nullpo_ret(sd);
+
+ fd = sd->fd;
+ WFIFOHEAD(fd, 8 * 8 + 8);
+ WFIFOW(fd,0) = 0x1ad;
+
+ for( i = 0, c = 0; i < MAX_INVENTORY; i ++ )
+ {
+ if( itemdb_is_spellbook(sd->status.inventory[i].nameid) )
+ {
+ WFIFOW(fd, c * 2 + 4) = sd->status.inventory[i].nameid;
+ c ++;
+ }
+ }
+
+ if( c > 0 )
+ {
+ WFIFOW(fd,2) = c * 2 + 4;
+ WFIFOSET(fd, WFIFOW(fd, 2));
+ sd->menuskill_id = WL_READING_SB;
+ sd->menuskill_val = c;
+ }
+ else
+ status_change_end(&sd->bl,SC_STOP,-1);
+
+ return 1;
+}
+/**
+ * Mechanic
+ **/
+/*==========================================
+ * Magic Decoy Material List
+ *------------------------------------------*/
+int clif_magicdecoy_list(struct map_session_data *sd, int skill_lv, short x, short y) {
+ int i, c;
+ int fd;
+
+ nullpo_ret(sd);
+
+ fd = sd->fd;
+ WFIFOHEAD(fd, 8 * 8 + 8);
+ WFIFOW(fd,0) = 0x1ad; // This is the official packet. [pakpil]
+
+ for( i = 0, c = 0; i < MAX_INVENTORY; i ++ ) {
+ if( itemdb_is_element(sd->status.inventory[i].nameid) ) {
+ WFIFOW(fd, c * 2 + 4) = sd->status.inventory[i].nameid;
+ c ++;
+ }
+ }
+ if( c > 0 ) {
+ sd->menuskill_id = NC_MAGICDECOY;
+ sd->menuskill_val = skill_lv;
+ sd->sc.comet_x = x;
+ sd->sc.comet_y = y;
+ WFIFOW(fd,2) = c * 2 + 4;
+ WFIFOSET(fd, WFIFOW(fd, 2));
+ } else {
+ clif_skill_fail(sd,NC_MAGICDECOY,0,0);
+ return 0;
+ }
+
+ return 1;
+}
+/**
+ * Guilotine Cross
+ **/
+/*==========================================
+ * Guillotine Cross Poisons List
+ *------------------------------------------*/
+int clif_poison_list(struct map_session_data *sd, int skill_lv) {
+ int i, c;
+ int fd;
+
+ nullpo_ret(sd);
+
+ fd = sd->fd;
+ WFIFOHEAD(fd, 8 * 8 + 8);
+ WFIFOW(fd,0) = 0x1ad; // This is the official packet. [pakpil]
+
+ for( i = 0, c = 0; i < MAX_INVENTORY; i ++ ) {
+ if( itemdb_is_poison(sd->status.inventory[i].nameid) ) {
+ WFIFOW(fd, c * 2 + 4) = sd->status.inventory[i].nameid;
+ c ++;
+ }
+ }
+ if( c > 0 ) {
+ sd->menuskill_id = GC_POISONINGWEAPON;
+ sd->menuskill_val = skill_lv;
+ WFIFOW(fd,2) = c * 2 + 4;
+ WFIFOSET(fd, WFIFOW(fd, 2));
+ } else {
+ clif_skill_fail(sd,GC_POISONINGWEAPON,0x2b,0);
+ return 0;
+ }
+
+ return 1;
+}
+/**
+ * Sends a new status without a tick (currently used by the new mounts)
+ **/
+int clif_status_load_notick(struct block_list *bl,int type,int flag,int val1, int val2, int val3) {
+ unsigned char buf[32];
+
+ nullpo_ret(bl);
+
+ WBUFW(buf,0)=0x043f;
+ WBUFW(buf,2)=type;
+ WBUFL(buf,4)=bl->id;
+ WBUFB(buf,8)=flag;
+ WBUFL(buf,9) = 0;
+ WBUFL(buf,13) = val1;
+ WBUFL(buf,17) = val2;
+ WBUFL(buf,21) = val3;
+
+ clif_send(buf,packet_len(WBUFW(buf,0)),bl,AREA);
+ return 0;
+}
+//Notifies FD of ID's type
+int clif_status_load_single(int fd, int id,int type,int flag,int val1, int val2, int val3) {
+ WFIFOHEAD(fd, packet_len(0x043f));
+ WFIFOW(fd,0)=0x043f;
+ WFIFOW(fd,2)=type;
+ WFIFOL(fd,4)=id;
+ WFIFOB(fd,8)=flag;
+ WFIFOL(fd,9) = 0;
+ WFIFOL(fd,13) = val1;
+ WFIFOL(fd,17) = val2;
+ WFIFOL(fd,21) = val3;
+ WFIFOSET(fd, packet_len(0x043f));
+ return 0;
+}
+// msgstringtable.txt
+// 0x291 <line>.W
+void clif_msgtable(int fd, int line) {
+ WFIFOHEAD(fd, packet_len(0x291));
+ WFIFOW(fd, 0) = 0x291;
+ WFIFOW(fd, 2) = line;
+ WFIFOSET(fd, packet_len(0x291));
+}
+
+// msgstringtable.txt
+// 0x7e2 <line>.W <value>.L
+void clif_msgtable_num(int fd, int line, int num) {
+#if PACKETVER >= 20090805
+ WFIFOHEAD(fd, packet_len(0x7e2));
+ WFIFOW(fd, 0) = 0x7e2;
+ WFIFOW(fd, 2) = line;
+ WFIFOL(fd, 4) = num;
+ WFIFOSET(fd, packet_len(0x7e2));
+#endif
+}
+
/*==========================================
* Main client packet processing function
*------------------------------------------*/
@@ -15027,7 +15319,7 @@ int clif_parse(int fd)
}
/*==========================================
- * ƒpƒPƒbƒgƒf[ƒ^ƒx[ƒX“Ç‚Ýž‚Ý
+ * Reads packet_db.txt and setups its array reference
*------------------------------------------*/
static int packetdb_readdb(void)
{
@@ -15157,7 +15449,7 @@ static int packetdb_readdb(void)
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 25,
//#0x0440
- 10, 4, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 4, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -15569,6 +15861,13 @@ static int packetdb_readdb(void)
if(p2) *p2++=0;
k = atoi(str2[j]);
// if (packet_db[packet_ver][cmd].pos[j] != k && clif_config.prefer_packet_db) // not used for now
+
+ if( j >= MAX_PACKET_POS )
+ {
+ ShowError("Too many positions found for packet 0x%04x (max=%d).\n", cmd, MAX_PACKET_POS);
+ break;
+ }
+
packet_db[packet_ver][cmd].pos[j] = k;
}
}
diff --git a/src/map/clif.h b/src/map/clif.h
index 9d1207901..8b6271075 100644
--- a/src/map/clif.h
+++ b/src/map/clif.h
@@ -27,14 +27,18 @@ struct battleground_data;
struct quest;
struct party_booking_ad_info;
#include <stdarg.h>
-// packet DB
-#define MAX_PACKET_DB 0x900
-#define MAX_PACKET_VER 26
+
+enum
+{// packet DB
+ MAX_PACKET_DB = 0x900,
+ MAX_PACKET_VER = 26,
+ MAX_PACKET_POS = 20,
+};
struct s_packet_db {
short len;
void (*func)(int, struct map_session_data *);
- short pos[20];
+ short pos[MAX_PACKET_POS];
};
// packet_db[SERVER] is reserved for server use
@@ -339,7 +343,7 @@ int clif_skill_estimation(struct map_session_data *sd,struct block_list *dst);
void clif_skill_warppoint(struct map_session_data* sd, short skill_num, short skill_lv, unsigned short map1, unsigned short map2, unsigned short map3, unsigned short map4);
void clif_skill_memomessage(struct map_session_data* sd, int type);
void clif_skill_teleportmessage(struct map_session_data* sd, int type);
-int clif_skill_produce_mix_list(struct map_session_data *sd, int trigger);
+int clif_skill_produce_mix_list(struct map_session_data *sd, int skillid, int trigger);
void clif_cooking_list(struct map_session_data *sd, int trigger);
int clif_produceeffect(struct map_session_data* sd,int flag,int nameid);
@@ -357,7 +361,7 @@ void clif_bladestop(struct block_list* src, int dst_id, int active);
void clif_changemapcell(int fd, int m, int x, int y, int type, enum send_target target);
int clif_status_load(struct block_list *bl,int type, int flag);
-int clif_status_change(struct block_list *bl,int type,int flag,unsigned int tick);
+int clif_status_change(struct block_list *bl,int type,int flag,unsigned int tick,int val1, int val2, int val3);
int clif_wis_message(int fd, const char* nick, const char* mes, int mes_len);
int clif_wis_end(int fd,int flag);
@@ -406,7 +410,7 @@ int clif_party_created(struct map_session_data *sd,int result);
int clif_party_member_info(struct party_data *p, struct map_session_data *sd);
int clif_party_info(struct party_data *p, struct map_session_data *sd);
void clif_party_invite(struct map_session_data *sd,struct map_session_data *tsd);
-void clif_party_inviteack(struct map_session_data* sd, const char* nick, int flag);
+void clif_party_inviteack(struct map_session_data* sd, const char* nick, int result);
int clif_party_option(struct party_data *p,struct map_session_data *sd,int flag);
int clif_party_withdraw(struct party_data* p, struct map_session_data* sd, int account_id, const char* name, int flag);
int clif_party_message(struct party_data* p, int account_id, const char* mes, int len);
@@ -437,7 +441,7 @@ int clif_guild_memberpositionchanged(struct guild *g,int idx);
int clif_guild_emblem(struct map_session_data *sd,struct guild *g);
void clif_guild_emblem_area(struct block_list* bl);
int clif_guild_notice(struct map_session_data *sd,struct guild *g);
-int clif_guild_message(struct guild *g,int account_id,const char *mes,int len);
+void clif_guild_message(struct guild *g,int account_id,const char *mes,int len);
int clif_guild_skillup(struct map_session_data *sd,int skill_num,int lv);
int clif_guild_reqalliance(struct map_session_data *sd,int account_id,const char *name);
int clif_guild_allianceack(struct map_session_data *sd,int flag);
@@ -468,7 +472,7 @@ int clif_font(struct map_session_data *sd);
// atcommand
int clif_displaymessage(const int fd,const char* mes);
-int clif_disp_onlyself(struct map_session_data *sd,const char *mes,int len);
+void clif_disp_onlyself(struct map_session_data *sd,const char *mes,int len);
void clif_disp_message(struct block_list* src, const char* mes, int len, enum send_target target);
int clif_broadcast(struct block_list *bl, const char* mes, int len, int type, enum send_target target);
void clif_MainChatMessage(const char* message); //luzza
@@ -502,7 +506,7 @@ void clif_weather(int m); // [Valaris]
int clif_specialeffect(struct block_list* bl, int type, enum send_target target); // special effects [Valaris]
void clif_specialeffect_single(struct block_list* bl, int type, int fd);
int clif_messagecolor(struct block_list* bl, unsigned long color, const char* msg); // Mob/Npc color talk [SnakeDrak]
-int clif_message(struct block_list *bl, const char* msg); // messages (from mobs/npcs) [Valaris]
+void clif_message(struct block_list *bl, const char* msg); // messages (from mobs/npcs) [Valaris]
int clif_GM_kickack(struct map_session_data *sd,int id);
void clif_GM_kick(struct map_session_data *sd,struct map_session_data *tsd);
@@ -510,7 +514,7 @@ void clif_manner_message(struct map_session_data* sd, uint32 type);
void clif_GM_silence(struct map_session_data* sd, struct map_session_data* tsd, uint8 type);
int clif_timedout(struct map_session_data *sd);
-int clif_disp_overhead(struct map_session_data *sd, const char* mes);
+void clif_disp_overhead(struct map_session_data *sd, const char* mes);
void clif_get_weapon_view(struct map_session_data* sd, unsigned short *rhand, unsigned short *lhand);
@@ -625,8 +629,29 @@ void clif_search_store_info_ack(struct map_session_data* sd);
void clif_search_store_info_failed(struct map_session_data* sd, unsigned char reason);
void clif_open_search_store_info(struct map_session_data* sd);
void clif_search_store_info_click_ack(struct map_session_data* sd, short x, short y);
-
-// Third jobs
-void clif_millenniumshield(struct map_session_data *sd, int num);
-
+/**
+ * 3CeAM
+ **/
+void clif_msgtable(int fd, int line);
+void clif_msgtable_num(int fd, int line, int num);
+/**
+ * Rune Knight
+ **/
+void clif_millenniumshield(struct map_session_data *sd, short shields );
+/**
+ * Warlock
+ **/
+int clif_spellbook_list(struct map_session_data *sd);
+/**
+ * Mechanic
+ **/
+int clif_magicdecoy_list(struct map_session_data *sd, int skill_lv, short x, short y);
+/**
+ * Guilotine Cross
+ **/
+int clif_poison_list(struct map_session_data *sd, int skill_lv);
+/**
+ * [RRInd] for the new mounts
+ **/
+int clif_status_load_notick(struct block_list *bl,int type,int flag,int val1, int val2, int val3);
#endif /* _CLIF_H_ */
diff --git a/src/map/config/Core.h b/src/map/config/Core.h
new file mode 100644
index 000000000..5073d5262
--- /dev/null
+++ b/src/map/config/Core.h
@@ -0,0 +1,28 @@
+#ifndef _RRCONFIGS_
+#define _RRCONFIGS_
+/**
+ * Ragnarok Resources Configuration File (http://ro-resources.net)
+ * The following settings are applied upon compiling the program,
+ * therefore any settings you disable will not even be added to the program
+ * making these settings the most performance-effiecient possible
+ **/
+
+/**
+ * @INFO: RREmu Settings Core
+ * - For detailed guidance on these check http://trac.ro-resources.net/wiki/CoreConfiguration
+ **/
+
+/**
+ * No settings past this point
+ **/
+#include "./Renewal.h"
+#include "./Secure.h"
+#include "./Skills/General.h"
+/**
+ * Constants come last; so they process anything that could've been modified in early includes
+ **/
+#include "./Data/Const.h"
+/**
+ * End of File
+ **/
+#endif
diff --git a/src/map/config/Data/Const.h b/src/map/config/Data/Const.h
new file mode 100644
index 000000000..31f68fdbc
--- /dev/null
+++ b/src/map/config/Data/Const.h
@@ -0,0 +1,33 @@
+#ifndef _RRCONFIGS_CONST_
+#define _RRCONFIGS_CONST_
+/**
+ * Ragnarok Resources Configuration File (http://ro-resources.net)
+ * The following settings are applied upon compiling the program,
+ * therefore any settings you disable will not even be added to the program
+ * making these settings the most performance-effiecient possible
+ **/
+
+/**
+ * @INFO: This file holds constants that aims at making code smoother and more efficient
+ */
+
+/**
+ * "Constants"
+ **/
+#define CONST_CASTRATE_SCALE ( RECASTING ? RECASTING_VMIN : battle_config.castrate_dex_scale )
+#define CONST_CASTRATE_CALC ( RECASTING ? ((status_get_dex(bl)*2)+status_get_int(bl)) : status_get_dex(bl) )
+
+/**
+ * "Sane Checks" to save you from compiling with cool bugs
+ **/
+#if SECURE_NPCTIMEOUT_INTERVAL <= 0
+ #error SECURE_NPCTIMEOUT_INTERVAL should be at least 1 (1s)
+#endif
+#if SECURE_NPCTIMEOUT < 0
+ #error SECURE_NPCTIMEOUT cannot be lower than 0
+#endif
+
+/**
+ * End of File
+ **/
+#endif
diff --git a/src/map/config/Renewal.h b/src/map/config/Renewal.h
new file mode 100644
index 000000000..a1ab30427
--- /dev/null
+++ b/src/map/config/Renewal.h
@@ -0,0 +1,53 @@
+#ifndef _RRCONFIGS_RE_
+#define _RRCONFIGS_RE_
+/**
+ * Ragnarok Resources Configuration File (http://ro-resources.net)
+ * The following settings are applied upon compiling the program,
+ * therefore any settings you disable will not even be added to the program
+ * making these settings the most performance-effiecient possible
+ **/
+
+/**
+ * @INFO: This file holds general-purpose renewal settings, for class-specific ones check /src/map/config/Skills folder
+ **/
+
+/**
+ * Game Server Mode
+ * @values: 1 or 0
+ * 1 : renewal support, such as renewal-exclusive formulas
+ * -> Note some features may be enabled/disabled at this file despite this setting being ON
+ * 0 : renewal support disabled, use original formulas
+ **/
+#define RRMODE 1
+
+/**
+ * Renewal Cast Time
+ * @values: 1 (enabled) or 0 (disabled)
+ * 1 : Cast Time is decreased by DEX*2+INT, 20% of the cast time is not reduced by stats,
+ * - for example, on a skill whose cast time is 10s, only 8s may be reduced. other 2s are
+ * - part of a "fixed cast time" that is only reduced by special items and skills (such as
+ * - Arch Bishop's Sacrament skill).
+ * 0 : the old cast time method, influenced by dex, items and skills.
+ **/
+#define RECASTING 1
+
+/**
+ * Renewal Cast Time : Variable-Free
+ * - Value required for no variable cast time with stats.
+ * - Formula: (casterDex x 2) + (casterInt)
+ * Default: 530
+ **/
+#define RECASTING_VMIN 530
+
+/**
+ * Renewal Enchant Deadly Poison Change
+ * - In RE EDP no longer increases final damage by 400%.
+ * - it increases your weapon atk and your stat atk
+ * - it doesn't affect grimtooth
+ **/
+#define RE_EDP 1
+
+/**
+ * End of File
+ **/
+#endif
diff --git a/src/map/config/Secure.h b/src/map/config/Secure.h
new file mode 100644
index 000000000..6f3da3b90
--- /dev/null
+++ b/src/map/config/Secure.h
@@ -0,0 +1,36 @@
+#ifndef _RRCONFIGS_SECURE_
+#define _RRCONFIGS_SECURE_
+/**
+ * Ragnarok Resources Configuration File (http://ro-resources.net)
+ * The following settings are applied upon compiling the program,
+ * therefore any settings you disable will not even be added to the program
+ * making these settings the most performance-effiecient possible
+ **/
+
+/**
+ * @INFO: This file holds optional security settings
+ **/
+
+/**
+ * Optional NPC Dialog Timer
+ * When enabled all npcs dialog will 'timeout' if user is on idle for longer than the amount of seconds allowed
+ * - On 'timeout' the npc dialog window changes it's next/menu to a 'close' button
+ * @values
+ * - ? : Desired idle time in seconds (e.g. 10)
+ * - 0 : Disabled
+ **/
+#define SECURE_NPCTIMEOUT 0
+
+/**
+ * (Secure) Optional NPC Dialog Timer
+ * @requirement : SECURE_NPCTIMEOUT must be enabled
+ * Minimum Interval Between timeout checks in seconds
+ * Default: 1s
+ **/
+#define SECURE_NPCTIMEOUT_INTERVAL 1
+
+
+/**
+ * End of File
+ **/
+#endif
diff --git a/src/map/config/Skills/General.h b/src/map/config/Skills/General.h
new file mode 100644
index 000000000..7869c0cc9
--- /dev/null
+++ b/src/map/config/Skills/General.h
@@ -0,0 +1,23 @@
+#ifndef _RRCONFIGS_SKILLS_GENERAL_
+#define _RRCONFIGS_SKILLS_GENERAL_
+/**
+ * Ragnarok Resources Configuration File (http://ro-resources.net)
+ * The following settings are applied upon compiling the program,
+ * therefore any settings you disable will not even be added to the program
+ * making these settings the most performance-effiecient possible
+ **/
+
+/**
+ * Default Magical Reflection Behavior
+ * - When reflecting, reflected damage depends on gears caster is wearing, not target
+ * - When disabled damage depends on gears target is wearing, not caster.
+ * @values 1 (enabled) or 0 (disabled)
+ **/
+#define RR_MAGIC_REFLECTION 1
+
+/**
+ * No settings past this point
+ **/
+#include "Mage_Classes.h"
+#include "Swordsman_Classes.h"
+#endif
diff --git a/src/map/config/Skills/Mage_Classes.h b/src/map/config/Skills/Mage_Classes.h
new file mode 100644
index 000000000..26cd1d03c
--- /dev/null
+++ b/src/map/config/Skills/Mage_Classes.h
@@ -0,0 +1,19 @@
+#ifndef _RRCONFIGS_SKILLS_MAGE_
+#define _RRCONFIGS_SKILLS_MAGE_
+/**
+ * Ragnarok Resources Configuration File (http://ro-resources.net)
+ * The following settings are applied upon compiling the program,
+ * therefore any settings you disable will not even be added to the program
+ * making these settings the most performance-effiecient possible
+ **/
+
+/**
+ * (Wizard/HW/Warlock) enable Fire Ivy skill? (1 OR 0)
+ * Default: 0 (disabled)
+ **/
+#define FIREIVY_ON 0
+
+/**
+ * No settings past this point
+ **/
+#endif
diff --git a/src/map/config/Skills/Swordsman_Classes.h b/src/map/config/Skills/Swordsman_Classes.h
new file mode 100644
index 000000000..3792fa5a3
--- /dev/null
+++ b/src/map/config/Skills/Swordsman_Classes.h
@@ -0,0 +1,19 @@
+#ifndef _RRCONFIGS_SKILLS_SWORDS_
+#define _RRCONFIGS_SKILLS_SWORDS_
+/**
+ * Ragnarok Resources Configuration File (http://ro-resources.net)
+ * The following settings are applied upon compiling the program,
+ * therefore any settings you disable will not even be added to the program
+ * making these settings the most performance-effiecient possible
+ **/
+
+/**
+ * (Rune Knight) the maximum rune items a character may have of the same type
+ * Default: 20
+ **/
+#define MAX_RUNE 20
+
+/**
+ * No settings past this point
+ **/
+#endif
diff --git a/src/map/guild.c b/src/map/guild.c
index 0b77aa9a1..8c5988dc8 100644
--- a/src/map/guild.c
+++ b/src/map/guild.c
@@ -52,13 +52,14 @@ struct guild_expcache {
};
static struct eri *expcache_ers; //For handling of guild exp payment.
+#define MAX_GUILD_SKILL_REQUIRE 5
struct{
int id;
int max;
struct{
short id;
short lv;
- }need[6];
+ }need[MAX_GUILD_SKILL_REQUIRE];
} guild_skill_tree[MAX_GUILDSKILL];
int guild_payexp_timer(int tid, unsigned int tick, int id, intptr_t data);
@@ -124,7 +125,7 @@ static bool guild_read_guildskill_tree_db(char* split[], int columns, int curren
guild_skill_tree[id].max = 1;
}
- for( k = 0; k < 5; k++ )
+ for( k = 0; k < MAX_GUILD_SKILL_REQUIRE; k++ )
{
guild_skill_tree[id].need[k].id = atoi(split[k*2+2]);
guild_skill_tree[id].need[k].lv = atoi(split[k*2+3]);
@@ -147,7 +148,7 @@ int guild_check_skill_require(struct guild *g,int id)
if (idx < 0 || idx >= MAX_GUILDSKILL)
return 0;
- for(i=0;i<5;i++)
+ for(i=0;i<MAX_GUILD_SKILL_REQUIRE;i++)
{
if(guild_skill_tree[idx].need[i].id == 0) break;
if(guild_skill_tree[idx].need[i].lv > guild_checkskill(g,guild_skill_tree[idx].need[i].id))
@@ -322,10 +323,14 @@ int guild_send_xy_timer_sub(DBKey key,void *data,va_list ap)
nullpo_ret(g);
+ if( !g->connect_member )
+ {// no members connected to this guild so do not iterate
+ return 0;
+ }
+
for(i=0;i<g->max_member;i++){
- //struct map_session_data* sd = g->member[i].sd;
- struct map_session_data* sd = map_charid2sd(g->member[i].char_id); // temporary crashfix
- if( sd != NULL && (sd->guild_x != sd->bl.x || sd->guild_y != sd->bl.y) && !sd->bg_id )
+ struct map_session_data* sd = g->member[i].sd;
+ if( sd != NULL && sd->fd && (sd->guild_x != sd->bl.x || sd->guild_y != sd->bl.y) && !sd->bg_id )
{
clif_guild_xy(sd);
sd->guild_x = sd->bl.x;
@@ -1943,7 +1948,7 @@ void do_init_guild(void)
sv_readdb(db_path, "castle_db.txt", ',', 4, 5, -1, &guild_read_castledb);
memset(guild_skill_tree,0,sizeof(guild_skill_tree));
- sv_readdb(db_path, "guild_skill_tree.txt", ',', 12, 12, -1, &guild_read_guildskill_tree_db); //guild skill tree [Komurka]
+ sv_readdb(db_path, "guild_skill_tree.txt", ',', 2+MAX_GUILD_SKILL_REQUIRE*2, 2+MAX_GUILD_SKILL_REQUIRE*2, -1, &guild_read_guildskill_tree_db); //guild skill tree [Komurka]
add_timer_func_list(guild_payexp_timer,"guild_payexp_timer");
add_timer_func_list(guild_send_xy_timer, "guild_send_xy_timer");
diff --git a/src/map/intif.c b/src/map/intif.c
index 1b69c0837..9fea3be43 100644
--- a/src/map/intif.c
+++ b/src/map/intif.c
@@ -381,14 +381,15 @@ int intif_create_party(struct party_member *member,char *name,int item,int item2
return 0;
}
// ƒp[ƒeƒBî•ñ—v‹
-int intif_request_partyinfo(int party_id)
+int intif_request_partyinfo(int party_id, int char_id)
{
if (CheckForCharServer())
return 0;
- WFIFOHEAD(inter_fd,6);
+ WFIFOHEAD(inter_fd,10);
WFIFOW(inter_fd,0) = 0x3021;
WFIFOL(inter_fd,2) = party_id;
- WFIFOSET(inter_fd,6);
+ WFIFOL(inter_fd,6) = char_id;
+ WFIFOSET(inter_fd,10);
return 0;
}
// ƒp[ƒeƒB’ljÁ—v‹
@@ -1007,15 +1008,15 @@ int intif_parse_PartyCreated(int fd)
// ƒp[ƒeƒBî•ñ
int intif_parse_PartyInfo(int fd)
{
- if( RFIFOW(fd,2)==8){
- ShowWarning("intif: party noinfo %d\n",RFIFOL(fd,4));
- party_recv_noinfo(RFIFOL(fd,4));
+ if( RFIFOW(fd,2) == 12 ){
+ ShowWarning("intif: party noinfo (char_id=%d party_id=%d)\n", RFIFOL(fd,4), RFIFOL(fd,8));
+ party_recv_noinfo(RFIFOL(fd,8), RFIFOL(fd,4));
return 0;
}
- if( RFIFOW(fd,2)!=sizeof(struct party)+4 )
- ShowError("intif: party info : data size error %d %d %d\n",RFIFOL(fd,4),RFIFOW(fd,2),sizeof(struct party)+4);
- party_recv_info((struct party *)RFIFOP(fd,4));
+ if( RFIFOW(fd,2) != 8+sizeof(struct party) )
+ ShowError("intif: party info : data size error (char_id=%d party_id=%d packet_len=%d expected_len=%d)\n", RFIFOL(fd,4), RFIFOL(fd,8), RFIFOW(fd,2), 8+sizeof(struct party));
+ party_recv_info((struct party *)RFIFOP(fd,8), RFIFOL(fd,4));
return 0;
}
// ƒp[ƒeƒB’ljÁ’Ê’m
diff --git a/src/map/intif.h b/src/map/intif.h
index 73dc5b863..1df990108 100644
--- a/src/map/intif.h
+++ b/src/map/intif.h
@@ -30,7 +30,7 @@ int intif_send_guild_storage(int account_id, struct guild_storage *gstor);
int intif_create_party(struct party_member *member,char *name,int item,int item2);
-int intif_request_partyinfo(int party_id);
+int intif_request_partyinfo(int party_id, int char_id);
int intif_party_addmember(int party_id,struct party_member *member);
int intif_party_changeoption(int party_id, int account_id, int exp, int item);
diff --git a/src/map/itemdb.c b/src/map/itemdb.c
index e8afebdfe..3fc0a5704 100644
--- a/src/map/itemdb.c
+++ b/src/map/itemdb.c
@@ -663,46 +663,6 @@ static bool itemdb_read_itemdelay(char* str[], int columns, int current)
return true;
}
-/*==================================================================
- * Reads item stacking restrictions
- *----------------------------------------------------------------*/
-static bool itemdb_read_stack(char* fields[], int columns, int current)
-{// <item id>,<stack limit amount>,<type>
- unsigned short nameid, amount;
- unsigned int type;
- struct item_data* id;
-
- nameid = (unsigned short)strtoul(fields[0], NULL, 10);
-
- if( ( id = itemdb_exists(nameid) ) == NULL )
- {
- ShowWarning("itemdb_read_stack: Unknown item id '%hu'.\n", nameid);
- return false;
- }
-
- if( !itemdb_isstackable2(id) )
- {
- ShowWarning("itemdb_read_stack: Item id '%hu' is not stackable.\n", nameid);
- return false;
- }
-
- amount = (unsigned short)strtoul(fields[1], NULL, 10);
- type = strtoul(fields[2], NULL, 10);
-
- if( !amount )
- {// ignore
- return true;
- }
-
- id->stack.amount = amount;
- id->stack.inventory = (type&1)!=0;
- id->stack.cart = (type&2)!=0;
- id->stack.storage = (type&4)!=0;
- id->stack.guildstorage = (type&8)!=0;
-
- return true;
-}
-
/// Reads items allowed to be sold in buying stores
static bool itemdb_read_buyingstore(char* fields[], int columns, int current)
@@ -746,7 +706,35 @@ static int itemdb_gendercheck(struct item_data *id)
return (battle_config.ignore_items_gender) ? 2 : id->sex;
}
-
+/**
+ * [RRInd]
+ * For backwards compatibility, in Renewal mode, MATK from weapons comes from the atk slot
+ * We use a ':' delimiter which, if not found, assumes the weapon does not provide any matk.
+ **/
+void itemdb_rr_split_atoi(char *str, int *atk, int *matk) {
+ int i, val[2];
+
+ for (i=0; i<2; i++) {
+ if (!str) break;
+ val[i] = atoi(str);
+ str = strchr(str,':');
+ if (str)
+ *str++=0;
+ }
+ if( i == 0 ) {
+ *atk = *matk = 0;
+ return;//no data found
+ }
+ if( i == 1 ) {//Single Value, we assume it's the ATK
+ *atk = val[0];
+ *matk = 0;
+ return;
+ }
+ //We assume we have 2 values.
+ *atk = val[0];
+ *matk = val[1];
+ return;
+}
/*==========================================
* processes one itemdb entry
*------------------------------------------*/
@@ -776,7 +764,7 @@ static bool itemdb_parse_dbrow(char** str, const char* source, int line, int scr
id->type = atoi(str[3]);
- if( id->type < 0 || id->type == IT_UNKNOWN || id->type == IT_UNKNOWN2 || ( id->type > IT_DELAYCONSUME && id->type < IT_CASH ) || id->type >= IT_MAX )
+ if( id->type < 0 || id->type == IT_UNKNOWN || id->type == IT_UNKNOWN2 || ( id->type > IT_THROWWEAPON && id->type < IT_CASH ) || id->type >= IT_MAX )
{// catch invalid item types
ShowWarning("itemdb_parse_dbrow: Invalid item type %d for item %d. IT_ETC will be used.\n", id->type, nameid);
id->type = IT_ETC;
@@ -813,7 +801,11 @@ static bool itemdb_parse_dbrow(char** str, const char* source, int line, int scr
id->value_buy, id->value_sell, nameid, id->jname);
id->weight = atoi(str[6]);
+#if RRMODE
+ itemdb_rr_split_atoi(str[7],&id->atk,&id->matk);
+#else
id->atk = atoi(str[7]);
+#endif
id->def = atoi(str[8]);
id->range = atoi(str[9]);
id->slot = atoi(str[10]);
@@ -875,7 +867,14 @@ static bool itemdb_parse_dbrow(char** str, const char* source, int line, int scr
*------------------------------------------*/
static int itemdb_readdb(void)
{
- const char* filename[] = { "item_db.txt", "item_db2.txt" };
+ /**
+ * ro-resources inheritance: item_db -> item_db_re -> item_db2 (user customs)
+ **/
+#if RRMODE
+ const char* filename[] = { "item_db.txt","item_db_re.txt","item_db2.txt" };
+#else
+ const char* filename[] = { "item_db.txt","item_db2.txt" };
+#endif
int fi;
for( fi = 0; fi < ARRAYLENGTH(filename); ++fi )
@@ -987,7 +986,11 @@ static int itemdb_readdb(void)
*======================================*/
static int itemdb_read_sqldb(void)
{
+#if RRMODE
+ const char* item_db_name[] = { item_db_db, item_db_re_db, item_db2_db };
+#else
const char* item_db_name[] = { item_db_db, item_db2_db };
+#endif
int fi;
for( fi = 0; fi < ARRAYLENGTH(item_db_name); ++fi )
@@ -1046,7 +1049,6 @@ static void itemdb_read(void)
sv_readdb(db_path, "item_noequip.txt", ',', 2, 2, -1, &itemdb_read_noequip);
sv_readdb(db_path, "item_trade.txt", ',', 3, 3, -1, &itemdb_read_itemtrade);
sv_readdb(db_path, "item_delay.txt", ',', 2, 2, MAX_ITEMDELAYS, &itemdb_read_itemdelay);
- sv_readdb(db_path, "item_stack.txt", ',', 3, 3, -1, &itemdb_read_stack);
sv_readdb(db_path, "item_buyingstore.txt", ',', 1, 1, -1, &itemdb_read_buyingstore);
}
@@ -1090,8 +1092,8 @@ void itemdb_reload(void)
struct s_mapiterator* iter;
struct map_session_data* sd;
- int i;
-
+ int i,d,k;
+
// clear the previous itemdb data
for( i = 0; i < ARRAYLENGTH(itemdb_array); ++i )
if( itemdb_array[i] )
@@ -1100,9 +1102,37 @@ void itemdb_reload(void)
itemdb_other->clear(itemdb_other, itemdb_final_sub);
memset(itemdb_array, 0, sizeof(itemdb_array));
-
+
// read new data
itemdb_read();
+
+ //Epoque's awesome @reloaditemdb fix - thanks! [Ind]
+ //- Fixes the need of a @reloadmobdb after a @reloaditemdb to re-link monster drop data
+ for( i = 0; i < MAX_MOB_DB; i++ ) {
+ struct mob_db *entry;
+ if( !((i < 1324 || i > 1363) && (i < 1938 || i > 1946)) )
+ continue;
+ entry = mob_db(i);
+ for(d = 0; d < MAX_MOB_DROP; d++) {
+ struct item_data *id;
+ if( !entry->dropitem[d].nameid )
+ continue;
+ id = itemdb_search(entry->dropitem[d].nameid);
+
+ for (k = 0; k < MAX_SEARCH; k++) {
+ if (id->mob[k].chance <= entry->dropitem[d].p)
+ break;
+ }
+
+ if (k == MAX_SEARCH)
+ continue;
+
+ if (id->mob[k].id != i)
+ memmove(&id->mob[k+1], &id->mob[k], (MAX_SEARCH-k-1)*sizeof(id->mob[0]));
+ id->mob[k].chance = entry->dropitem[d].p;
+ id->mob[k].id = i;
+ }
+ }
// readjust itemdb pointer cache for each player
iter = mapit_geteachpc();
diff --git a/src/map/itemdb.h b/src/map/itemdb.h
index 6a201008e..801b81be8 100644
--- a/src/map/itemdb.h
+++ b/src/map/itemdb.h
@@ -5,14 +5,20 @@
#define _ITEMDB_H_
#include "../common/mmo.h" // ITEM_NAME_LENGTH
+#include "map.h" //RRMODE
#define MAX_RANDITEM 11000
// The maximum number of item delays
-#define MAX_ITEMDELAYS 18
+#define MAX_ITEMDELAYS 10
#define MAX_SEARCH 5 //Designed for search functions, species max number of matches to display.
+/**
+ * Arch Bishop
+ **/
+#define ITEMID_ANCILLA 12333
+
#define ITEMID_YELLOW_GEMSTONE 715
#define ITEMID_RED_GEMSTONE 716
#define ITEMID_BLUE_GEMSTONE 717
@@ -50,6 +56,9 @@ struct item_data {
int equip;
int weight;
int atk;
+#if RRMODE
+ int matk;//[RRInd] -- used in RE for matk
+#endif
int def;
int range;
int slot;
@@ -61,7 +70,7 @@ struct item_data {
//Lupus: I rearranged order of these fields due to compatibility with ITEMINFO script command
// some script commands should be revised as well...
unsigned int class_base[3]; //Specifies if the base can wear this item (split in 3 indexes per type: 1-1, 2-1, 2-2)
- unsigned class_upper : 3; //Specifies if the upper-type can equip it (bitfield, 1: normal, 2: upper, 3: baby)
+ unsigned class_upper : 4; //Specifies if the upper-type can equip it (bitfield, 1: normal, 2: upper, 3: baby,4:third)
struct {
unsigned short chance;
int id;
@@ -78,14 +87,6 @@ struct item_data {
unsigned autoequip: 1;
unsigned buyingstore : 1;
} flag;
- struct
- {// item stacking limitation
- unsigned short amount;
- unsigned int inventory:1;
- unsigned int cart:1;
- unsigned int storage:1;
- unsigned int guildstorage:1;
- } stack;
short gm_lv_trade_override; //GM-level to override trade_restriction
};
@@ -151,4 +152,35 @@ void itemdb_reload(void);
void do_final_itemdb(void);
int do_init_itemdb(void);
+/**
+ * Rune Knight
+ **/
+enum {
+ ITEMID_NAUTHIZ = 12725,
+ ITEMID_RAIDO,
+ ITEMID_BERKANA,
+ ITEMID_ISA,
+ ITEMID_OTHILA,
+ ITEMID_URUZ,
+ ITEMID_THURISAZ,
+ ITEMID_WYRD,
+ ITEMID_HAGALAZ,
+} rune_list;
+#define itemdb_is_rune(n) (n >= ITEMID_NAUTHIZ && n <= ITEMID_HAGALAZ)
+/**
+ * Warlock
+ **/
+#define itemdb_is_spellbook(n) (n >= 6188 && n <= 6205)
+/**
+ * Ranger
+ **/
+#define ITEMID_TRAP_ALLOY 7940
+/**
+ * Mechanic
+ **/
+#define itemdb_is_element(n) (n >= 990 && n <= 993)
+/**
+ * Guilotine Cross
+ **/
+#define itemdb_is_poison(n) (n >= 12717 && n <= 12724)
#endif /* _ITEMDB_H_ */
diff --git a/src/map/log.c b/src/map/log.c
index 72cfe46d3..af7ae3121 100644
--- a/src/map/log.c
+++ b/src/map/log.c
@@ -1,6 +1,7 @@
// Copyright (c) Athena Dev Teams - Licensed under GNU GPL
// For more information, see LICENCE in the main folder
+#include "../common/sql.h" // SQL_INNODB
#include "../common/strlib.h"
#include "../common/nullpo.h"
#include "../common/showmsg.h"
@@ -21,6 +22,15 @@ struct Log_Config log_config;
char timestring[255];
time_t curtime;
+#ifdef SQL_INNODB
+// database is using an InnoDB engine so do not use DELAYED
+#define LOG_QUERY "INSERT"
+#else
+// database is using a MyISAM engine so use DELAYED
+#define LOG_QUERY "INSERT DELAYED"
+#endif
+
+
//FILTER OPTIONS
//0 = Don't log
//1 = Log any item
@@ -70,7 +80,7 @@ int log_branch(struct map_session_data *sd)
{
SqlStmt* stmt;
stmt = SqlStmt_Malloc(logmysql_handle);
- if( SQL_SUCCESS != SqlStmt_Prepare(stmt, "INSERT DELAYED INTO `%s` (`branch_date`, `account_id`, `char_id`, `char_name`, `map`) VALUES (NOW(), '%d', '%d', ?, '%s')", log_config.log_branch_db, sd->status.account_id, sd->status.char_id, mapindex_id2name(sd->mapindex) )
+ if( SQL_SUCCESS != SqlStmt_Prepare(stmt, LOG_QUERY " INTO `%s` (`branch_date`, `account_id`, `char_id`, `char_name`, `map`) VALUES (NOW(), '%d', '%d', ?, '%s')", log_config.log_branch_db, sd->status.account_id, sd->status.char_id, mapindex_id2name(sd->mapindex) )
|| SQL_SUCCESS != SqlStmt_BindParam(stmt, 0, SQLDT_STRING, sd->status.name, strnlen(sd->status.name, NAME_LENGTH))
|| SQL_SUCCESS != SqlStmt_Execute(stmt) )
{
@@ -107,14 +117,14 @@ int log_pick_pc(struct map_session_data *sd, const char *type, int nameid, int a
if( log_config.sql_logs )
{
if( itm == NULL ) { //We log common item
- if (SQL_ERROR == Sql_Query(logmysql_handle, "INSERT DELAYED INTO `%s` (`time`, `char_id`, `type`, `nameid`, `amount`, `map`) VALUES (NOW(), '%d', '%s', '%d', '%d', '%s')",
+ if (SQL_ERROR == Sql_Query(logmysql_handle, LOG_QUERY " INTO `%s` (`time`, `char_id`, `type`, `nameid`, `amount`, `map`) VALUES (NOW(), '%d', '%s', '%d', '%d', '%s')",
log_config.log_pick_db, sd->status.char_id, type, nameid, amount, mapindex_id2name(sd->mapindex)) )
{
Sql_ShowDebug(logmysql_handle);
return 0;
}
} else { //We log Extended item
- if (SQL_ERROR == Sql_Query(logmysql_handle, "INSERT DELAYED INTO `%s` (`time`, `char_id`, `type`, `nameid`, `amount`, `refine`, `card0`, `card1`, `card2`, `card3`, `map`) VALUES (NOW(), '%d', '%s', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%s')",
+ if (SQL_ERROR == Sql_Query(logmysql_handle, LOG_QUERY " INTO `%s` (`time`, `char_id`, `type`, `nameid`, `amount`, `refine`, `card0`, `card1`, `card2`, `card3`, `map`) VALUES (NOW(), '%d', '%s', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%s')",
log_config.log_pick_db, sd->status.char_id, type, itm->nameid, amount, itm->refine, itm->card[0], itm->card[1], itm->card[2], itm->card[3], mapindex_id2name(sd->mapindex)) )
{
Sql_ShowDebug(logmysql_handle);
@@ -162,14 +172,14 @@ int log_pick_mob(struct mob_data *md, const char *type, int nameid, int amount,
if( log_config.sql_logs )
{
if( itm == NULL ) { //We log common item
- if (SQL_ERROR == Sql_Query(logmysql_handle, "INSERT DELAYED INTO `%s` (`time`, `char_id`, `type`, `nameid`, `amount`, `map`) VALUES (NOW(), '%d', '%s', '%d', '%d', '%s')",
+ if (SQL_ERROR == Sql_Query(logmysql_handle, LOG_QUERY " INTO `%s` (`time`, `char_id`, `type`, `nameid`, `amount`, `map`) VALUES (NOW(), '%d', '%s', '%d', '%d', '%s')",
log_config.log_pick_db, md->class_, type, nameid, amount, mapname) )
{
Sql_ShowDebug(logmysql_handle);
return 0;
}
} else { //We log Extended item
- if (SQL_ERROR == Sql_Query(logmysql_handle, "INSERT DELAYED INTO `%s` (`time`, `char_id`, `type`, `nameid`, `amount`, `refine`, `card0`, `card1`, `card2`, `card3`, `map`) VALUES (NOW(), '%d', '%s', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%s')",
+ if (SQL_ERROR == Sql_Query(logmysql_handle, LOG_QUERY " INTO `%s` (`time`, `char_id`, `type`, `nameid`, `amount`, `refine`, `card0`, `card1`, `card2`, `card3`, `map`) VALUES (NOW(), '%d', '%s', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%s')",
log_config.log_pick_db, md->class_, type, itm->nameid, amount, itm->refine, itm->card[0], itm->card[1], itm->card[2], itm->card[3], mapname) )
{
Sql_ShowDebug(logmysql_handle);
@@ -208,7 +218,7 @@ int log_zeny(struct map_session_data *sd, char *type, struct map_session_data *s
#ifndef TXT_ONLY
if( log_config.sql_logs )
{
- if (SQL_ERROR == Sql_Query(logmysql_handle, "INSERT DELAYED INTO `%s` (`time`, `char_id`, `src_id`, `type`, `amount`, `map`) VALUES (NOW(), '%d', '%d', '%s', '%d', '%s')",
+ if (SQL_ERROR == Sql_Query(logmysql_handle, LOG_QUERY " INTO `%s` (`time`, `char_id`, `src_id`, `type`, `amount`, `map`) VALUES (NOW(), '%d', '%d', '%s', '%d', '%s')",
log_config.log_zeny_db, sd->status.char_id, src_sd->status.char_id, type, amount, mapindex_id2name(sd->mapindex)) )
{
Sql_ShowDebug(logmysql_handle);
@@ -240,7 +250,7 @@ int log_mvpdrop(struct map_session_data *sd, int monster_id, int *log_mvp)
#ifndef TXT_ONLY
if( log_config.sql_logs )
{
- if (SQL_ERROR == Sql_Query(logmysql_handle, "INSERT DELAYED INTO `%s` (`mvp_date`, `kill_char_id`, `monster_id`, `prize`, `mvpexp`, `map`) VALUES (NOW(), '%d', '%d', '%d', '%d', '%s') ",
+ if (SQL_ERROR == Sql_Query(logmysql_handle, LOG_QUERY " INTO `%s` (`mvp_date`, `kill_char_id`, `monster_id`, `prize`, `mvpexp`, `map`) VALUES (NOW(), '%d', '%d', '%d', '%d', '%s') ",
log_config.log_mvpdrop_db, sd->status.char_id, monster_id, log_mvp[0], log_mvp[1], mapindex_id2name(sd->mapindex)) )
{
Sql_ShowDebug(logmysql_handle);
@@ -276,7 +286,7 @@ int log_atcommand(struct map_session_data* sd, const char* message)
SqlStmt* stmt;
stmt = SqlStmt_Malloc(logmysql_handle);
- if( SQL_SUCCESS != SqlStmt_Prepare(stmt, "INSERT DELAYED INTO `%s` (`atcommand_date`, `account_id`, `char_id`, `char_name`, `map`, `command`) VALUES (NOW(), '%d', '%d', ?, '%s', ?)", log_config.log_gm_db, sd->status.account_id, sd->status.char_id, mapindex_id2name(sd->mapindex) )
+ if( SQL_SUCCESS != SqlStmt_Prepare(stmt, LOG_QUERY " INTO `%s` (`atcommand_date`, `account_id`, `char_id`, `char_name`, `map`, `command`) VALUES (NOW(), '%d', '%d', ?, '%s', ?)", log_config.log_gm_db, sd->status.account_id, sd->status.char_id, mapindex_id2name(sd->mapindex) )
|| SQL_SUCCESS != SqlStmt_BindParam(stmt, 0, SQLDT_STRING, sd->status.name, strnlen(sd->status.name, NAME_LENGTH))
|| SQL_SUCCESS != SqlStmt_BindParam(stmt, 1, SQLDT_STRING, (char*)message, safestrnlen(message, 255))
|| SQL_SUCCESS != SqlStmt_Execute(stmt) )
@@ -314,7 +324,7 @@ int log_npc(struct map_session_data* sd, const char* message)
{
SqlStmt* stmt;
stmt = SqlStmt_Malloc(logmysql_handle);
- if( SQL_SUCCESS != SqlStmt_Prepare(stmt, "INSERT DELAYED INTO `%s` (`npc_date`, `account_id`, `char_id`, `char_name`, `map`, `mes`) VALUES (NOW(), '%d', '%d', ?, '%s', ?)", log_config.log_npc_db, sd->status.account_id, sd->status.char_id, mapindex_id2name(sd->mapindex) )
+ if( SQL_SUCCESS != SqlStmt_Prepare(stmt, LOG_QUERY " INTO `%s` (`npc_date`, `account_id`, `char_id`, `char_name`, `map`, `mes`) VALUES (NOW(), '%d', '%d', ?, '%s', ?)", log_config.log_npc_db, sd->status.account_id, sd->status.char_id, mapindex_id2name(sd->mapindex) )
|| SQL_SUCCESS != SqlStmt_BindParam(stmt, 0, SQLDT_STRING, sd->status.name, strnlen(sd->status.name, NAME_LENGTH))
|| SQL_SUCCESS != SqlStmt_BindParam(stmt, 1, SQLDT_STRING, (char*)message, safestrnlen(message, 255))
|| SQL_SUCCESS != SqlStmt_Execute(stmt) )
@@ -365,7 +375,7 @@ int log_chat(const char* type, int type_id, int src_charid, int src_accid, const
SqlStmt* stmt;
stmt = SqlStmt_Malloc(logmysql_handle);
- if( SQL_SUCCESS != SqlStmt_Prepare(stmt, "INSERT DELAYED INTO `%s` (`time`, `type`, `type_id`, `src_charid`, `src_accountid`, `src_map`, `src_map_x`, `src_map_y`, `dst_charname`, `message`) VALUES (NOW(), '%s', '%d', '%d', '%d', '%s', '%d', '%d', ?, ?)", log_config.log_chat_db, type, type_id, src_charid, src_accid, map, x, y)
+ if( SQL_SUCCESS != SqlStmt_Prepare(stmt, LOG_QUERY " INTO `%s` (`time`, `type`, `type_id`, `src_charid`, `src_accountid`, `src_map`, `src_map_x`, `src_map_y`, `dst_charname`, `message`) VALUES (NOW(), '%s', '%d', '%d', '%d', '%s', '%d', '%d', ?, ?)", log_config.log_chat_db, type, type_id, src_charid, src_accid, map, x, y)
|| SQL_SUCCESS != SqlStmt_BindParam(stmt, 0, SQLDT_STRING, (char*)dst_charname, safestrnlen(dst_charname, NAME_LENGTH))
|| SQL_SUCCESS != SqlStmt_BindParam(stmt, 1, SQLDT_STRING, (char*)message, safestrnlen(message, CHAT_SIZE_MAX))
|| SQL_SUCCESS != SqlStmt_Execute(stmt) )
diff --git a/src/map/map.c b/src/map/map.c
index a4b419f65..5dab6634d 100644
--- a/src/map/map.c
+++ b/src/map/map.c
@@ -68,6 +68,7 @@ Sql* mmysql_handle;
int db_use_sqldbs = 0;
char item_db_db[32] = "item_db";
char item_db2_db[32] = "item_db2";
+char item_db_re_db[32] = "item_db_re";
char mob_db_db[32] = "mob_db";
char mob_db2_db[32] = "mob_db2";
@@ -1565,6 +1566,8 @@ int map_quit(struct map_session_data *sd)
if (sd->npc_id)
npc_event_dequeue(sd);
+ if( sd->bg_id )
+ bg_team_leave(sd,1);
npc_script_event(sd, NPCE_LOGOUT);
//Unit_free handles clearing the player related data,
@@ -1584,9 +1587,6 @@ int map_quit(struct map_session_data *sd)
status_change_end(&sd->bl, SC_WEIGHT50, INVALID_TIMER);
status_change_end(&sd->bl, SC_WEIGHT90, INVALID_TIMER);
if (battle_config.debuff_on_logout&1) {
- status_change_end(&sd->bl, SC_DECREASEAGI, INVALID_TIMER);
- status_change_end(&sd->bl, SC_BENEDICTIO, INVALID_TIMER);
- status_change_end(&sd->bl, SC_AETERNA, INVALID_TIMER);
status_change_end(&sd->bl, SC_ORCISH, INVALID_TIMER);
status_change_end(&sd->bl, SC_STRIPWEAPON, INVALID_TIMER);
status_change_end(&sd->bl, SC_STRIPARMOR, INVALID_TIMER);
@@ -1594,8 +1594,6 @@ int map_quit(struct map_session_data *sd)
status_change_end(&sd->bl, SC_STRIPHELM, INVALID_TIMER);
status_change_end(&sd->bl, SC_EXTREMITYFIST, INVALID_TIMER);
status_change_end(&sd->bl, SC_EXPLOSIONSPIRITS, INVALID_TIMER);
- status_change_end(&sd->bl, SC_JOINTBEAT, INVALID_TIMER);
- status_change_end(&sd->bl, SC_MINDBREAKER, INVALID_TIMER);
if(sd->sc.data[SC_REGENERATION] && sd->sc.data[SC_REGENERATION]->val4)
status_change_end(&sd->bl, SC_REGENERATION, INVALID_TIMER);
//TO-DO Probably there are way more NPC_type negative status that are removed
@@ -1606,61 +1604,12 @@ int map_quit(struct map_session_data *sd)
}
if (battle_config.debuff_on_logout&2)
{
- status_change_end(&sd->bl, SC_MAGNIFICAT, INVALID_TIMER);
status_change_end(&sd->bl, SC_MAXIMIZEPOWER, INVALID_TIMER);
status_change_end(&sd->bl, SC_MAXOVERTHRUST, INVALID_TIMER);
- status_change_end(&sd->bl, SC_AURABLADE, INVALID_TIMER);
- status_change_end(&sd->bl, SC_PARRYING, INVALID_TIMER);
- status_change_end(&sd->bl, SC_CONCENTRATION, INVALID_TIMER);
- status_change_end(&sd->bl, SC_TENSIONRELAX, INVALID_TIMER);
- status_change_end(&sd->bl, SC_MAGICPOWER, INVALID_TIMER);
- status_change_end(&sd->bl, SC_EDP, INVALID_TIMER);
- status_change_end(&sd->bl, SC_TRUESIGHT, INVALID_TIMER);
- status_change_end(&sd->bl, SC_WINDWALK, INVALID_TIMER);
- status_change_end(&sd->bl, SC_MELTDOWN, INVALID_TIMER);
- status_change_end(&sd->bl, SC_CARTBOOST, INVALID_TIMER);
- status_change_end(&sd->bl, SC_MEMORIZE, INVALID_TIMER);
- status_change_end(&sd->bl, SC_DEVOTION, INVALID_TIMER);
- status_change_end(&sd->bl, SC_SACRIFICE, INVALID_TIMER);
status_change_end(&sd->bl, SC_STEELBODY, INVALID_TIMER);
status_change_end(&sd->bl, SC_PRESERVE, INVALID_TIMER);
status_change_end(&sd->bl, SC_KAAHI, INVALID_TIMER);
- status_change_end(&sd->bl, SC_KAUPE, INVALID_TIMER);
- status_change_end(&sd->bl, SC_DOUBLECAST, INVALID_TIMER);
- status_change_end(&sd->bl, SC_SHRINK, INVALID_TIMER);
- status_change_end(&sd->bl, SC_SIGHTBLASTER, INVALID_TIMER);
status_change_end(&sd->bl, SC_SPIRIT, INVALID_TIMER);
- status_change_end(&sd->bl, SC_KAITE, INVALID_TIMER);
- status_change_end(&sd->bl, SC_UTSUSEMI, INVALID_TIMER);
- status_change_end(&sd->bl, SC_BUNSINJYUTSU, INVALID_TIMER);
- status_change_end(&sd->bl, SC_SUITON, INVALID_TIMER);
- // Third jobs
- status_change_end(&sd->bl, SC_MILLENNIUMSHIELD, INVALID_TIMER);
- status_change_end(&sd->bl, SC_DEATHBOUND, INVALID_TIMER);
- status_change_end(&sd->bl, SC_REFRESH, INVALID_TIMER);
- status_change_end(&sd->bl, SC_STONEHARDSKIN, INVALID_TIMER);
- //status_change_end(&sd->bl, SC_CLOAKINGEXCEED, INVALID_TIMER);
- //status_change_end(&sd->bl, SC_HALLUCINATIONWALK_POSTDELAY, INVALID_TIMER);
- //status_change_end(&sd->bl, SC_WEAPONBLOCKING_POSTDELAY, INVALID_TIMER);
- //status_change_end(&sd->bl, SC_ROLLINGCUTTER, INVALID_TIMER);
- //status_change_end(&sd->bl, SC_ELECTRICSHOCKER, INVALID_TIMER);
- //status_change_end(&sd->bl, SC_WUGDASH, INVALID_TIMER);
- //status_change_end(&sd->bl, SC_WUGBITE, INVALID_TIMER);
- //status_change_end(&sd->bl, SC_CAMOUFLAGE, INVALID_TIMER);
- //status_change_end(&sd->bl, SC_MAGNETICFIELD, INVALID_TIMER);
- //status_change_end(&sd->bl, SC_NEUTRALBARRIER, INVALID_TIMER);
- //status_change_end(&sd->bl, SC_NEUTRALBARRIER_MASTER, INVALID_TIMER);
- //status_change_end(&sd->bl, SC_STEALTHFIELD_MASTER, INVALID_TIMER);
- //status_change_end(&sd->bl, SC_SHADOWFORM, INVALID_TIMER);
- //status_change_end(&sd->bl, SC_INVISIBILITY, INVALID_TIMER);
- //status_change_end(&sd->bl, SC_RAISINGDRAGON, INVALID_TIMER);
- //status_change_end(&sd->bl, SC_NOEQUIPACCESSARY, INVALID_TIMER);
- //status_change_end(&sd->bl, SC_MANHOLE, INVALID_TIMER);
- //status_change_end(&sd->bl, SC_PROPERTYWALK, INVALID_TIMER);
- //status_change_end(&sd->bl, SC_DEEP_SLEEP, INVALID_TIMER);
- //status_change_end(&sd->bl, SC_WARMER, INVALID_TIMER);
- //status_change_end(&sd->bl, SC_GN_TRAINING_SWORD, INVALID_TIMER);
- //status_change_end(&sd->bl, SC_GN_REMODELING_CART, INVALID_TIMER);
}
}
@@ -3259,6 +3208,9 @@ int map_config_read(char *cfgName)
if (strcmpi(w1, "import") == 0)
map_config_read(w2);
else
+ if (strcmpi(w1, "console_msg_log") == 0)
+ console_msg_log = atoi(w2);//[Ind]
+ else
ShowWarning("Unknown setting '%s' in file %s\n", w1, cfgName);
}
@@ -3580,41 +3532,39 @@ void do_abort(void)
/*======================================================
* Map-Server Version Screen [MC Cameri]
*------------------------------------------------------*/
-void map_helpscreen(int flag)
-{
- puts("Usage: map-server [options]");
- puts("Options:");
- puts(CL_WHITE" Commands\t\t\tDescription"CL_RESET);
- puts("-----------------------------------------------------------------------------");
- puts(" --help, --h, --?, /? Displays this help screen");
- puts(" --map-config <file> Load map-server configuration from <file>");
- puts(" --battle-config <file> Load battle configuration from <file>");
- puts(" --atcommand-config <file> Load atcommand configuration from <file>");
- puts(" --script-config <file> Load script configuration from <file>");
- puts(" --msg-config <file> Load message configuration from <file>");
- puts(" --grf-path-file <file> Load grf path file configuration from <file>");
- puts(" --sql-config <file> Load inter-server configuration from <file>");
- puts(" (SQL Only)");
- puts(" --log-config <file> Load logging configuration from <file>");
- puts(" (SQL Only)");
- puts(" --version, --v, -v, /v Displays the server's version");
- puts("\n");
- if (flag) exit(EXIT_FAILURE);
+static void map_helpscreen(bool do_exit)
+{
+ ShowInfo("Usage: %s [options]\n", SERVER_NAME);
+ ShowInfo("\n");
+ ShowInfo("Options:\n");
+ ShowInfo(" -?, -h [--help]\t\tDisplays this help screen.\n");
+ ShowInfo(" -v [--version]\t\tDisplays the server's version.\n");
+ ShowInfo(" --run-once\t\t\tCloses server after loading (testing).\n");
+ ShowInfo(" --map-config <file>\t\tAlternative map-server configuration.\n");
+ ShowInfo(" --battle-config <file>\tAlternative battle configuration.\n");
+ ShowInfo(" --atcommand-config <file>\tAlternative atcommand configuration.\n");
+ ShowInfo(" --script-config <file>\tAlternative script configuration.\n");
+ ShowInfo(" --msg-config <file>\t\tAlternative message configuration.\n");
+ ShowInfo(" --grf-path <file>\t\tAlternative GRF path configuration.\n");
+ ShowInfo(" --inter-config <file>\t\tAlternative inter-server configuration.\n");
+ ShowInfo(" --log-config <file>\t\tAlternative logging configuration.\n");
+ if( do_exit )
+ exit(EXIT_SUCCESS);
}
/*======================================================
* Map-Server Version Screen [MC Cameri]
*------------------------------------------------------*/
-void map_versionscreen(int flag)
+static void map_versionscreen(bool do_exit)
{
- ShowInfo(CL_WHITE "eAthena version %d.%02d.%02d, Athena Mod version %d" CL_RESET"\n",
- ATHENA_MAJOR_VERSION, ATHENA_MINOR_VERSION, ATHENA_REVISION,
- ATHENA_MOD_VERSION);
- ShowInfo(CL_GREEN "Website/Forum:" CL_RESET "\thttp://eathena.deltaanime.net/\n");
- ShowInfo(CL_GREEN "IRC Channel:" CL_RESET "\tirc://irc.deltaanime.net/#athena\n");
- ShowInfo("\nOpen " CL_WHITE "readme.html" CL_RESET " for more information.");
- if (ATHENA_RELEASE_FLAG) ShowNotice("This version is not for release.\n");
- if (flag) exit(EXIT_FAILURE);
+ ShowInfo(CL_WHITE"RAthena version %d.%02d.%02d, Athena Mod version %d" CL_RESET"\n", ATHENA_MAJOR_VERSION, ATHENA_MINOR_VERSION, ATHENA_REVISION, ATHENA_MOD_VERSION);
+ ShowInfo(CL_GREEN"Website/Forum:"CL_RESET"\thttp://rathena.org/\n");
+ ShowInfo(CL_GREEN"IRC Channel:"CL_RESET"\tirc://irc.rizon.net/#rthena\n");
+ ShowInfo("Open "CL_WHITE"readme.html"CL_RESET" for more information.\n");
+ if(ATHENA_RELEASE_FLAG)
+ ShowNotice("This version is not for release.\n");
+ if( do_exit )
+ exit(EXIT_SUCCESS);
}
/*======================================================
@@ -3645,6 +3595,16 @@ void do_shutdown(void)
}
}
+static bool map_arg_next_value(const char* option, int i, int argc)
+{
+ if( i >= argc-1 )
+ {
+ ShowWarning("Missing value for option '%s'.\n", option);
+ return false;
+ }
+
+ return true;
+}
int do_init(int argc, char *argv[])
{
@@ -3665,31 +3625,67 @@ int do_init(int argc, char *argv[])
srand(gettick());
- for (i = 1; i < argc ; i++) {
- if (strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "--h") == 0 || strcmp(argv[i], "--?") == 0 || strcmp(argv[i], "/?") == 0)
- map_helpscreen(1);
- else if (strcmp(argv[i], "--version") == 0 || strcmp(argv[i], "--v") == 0 || strcmp(argv[i], "-v") == 0 || strcmp(argv[i], "/v") == 0)
- map_versionscreen(1);
- else if (strcmp(argv[i], "--map_config") == 0 || strcmp(argv[i], "--map-config") == 0)
- MAP_CONF_NAME=argv[i+1];
- else if (strcmp(argv[i],"--battle_config") == 0 || strcmp(argv[i],"--battle-config") == 0)
- BATTLE_CONF_FILENAME = argv[i+1];
- else if (strcmp(argv[i],"--atcommand_config") == 0 || strcmp(argv[i],"--atcommand-config") == 0)
- ATCOMMAND_CONF_FILENAME = argv[i+1];
- else if (strcmp(argv[i],"--script_config") == 0 || strcmp(argv[i],"--script-config") == 0)
- SCRIPT_CONF_NAME = argv[i+1];
- else if (strcmp(argv[i],"--msg_config") == 0 || strcmp(argv[i],"--msg-config") == 0)
- MSG_CONF_NAME = argv[i+1];
- else if (strcmp(argv[i],"--grf_path_file") == 0 || strcmp(argv[i],"--grf-path-file") == 0)
- GRF_PATH_FILENAME = argv[i+1];
-#ifndef TXT_ONLY
- else if (strcmp(argv[i],"--inter_config") == 0 || strcmp(argv[i],"--inter-config") == 0)
- INTER_CONF_NAME = argv[i+1];
-#endif
- else if (strcmp(argv[i],"--log_config") == 0 || strcmp(argv[i],"--log-config") == 0)
- LOG_CONF_NAME = argv[i+1];
- else if (strcmp(argv[i],"--run_once") == 0) // close the map-server as soon as its done.. for testing [Celest]
- runflag = 0;
+ for( i = 1; i < argc ; i++ )
+ {
+ const char* arg = argv[i];
+
+ if( arg[0] != '-' && ( arg[0] != '/' || arg[1] == '-' ) )
+ {// -, -- and /
+ ShowError("Unknown option '%s'.\n", argv[i]);
+ exit(EXIT_FAILURE);
+ }
+ else if( (++arg)[0] == '-' )
+ {// long option
+ arg++;
+
+ if( strcmp(arg, "help") == 0 )
+ map_helpscreen(true);
+ else if( strcmp(arg, "version") == 0 )
+ map_versionscreen(true);
+ else if( strcmp(arg, "map-config") == 0 ) {
+ if( map_arg_next_value(arg, i, argc) )
+ MAP_CONF_NAME = argv[++i];
+ } else if( strcmp(arg, "battle-config") == 0 ) {
+ if( map_arg_next_value(arg, i, argc) )
+ BATTLE_CONF_FILENAME = argv[++i];
+ } else if( strcmp(arg, "atcommand-config") == 0 ) {
+ if( map_arg_next_value(arg, i, argc) )
+ ATCOMMAND_CONF_FILENAME = argv[++i];
+ } else if( strcmp(arg, "script-config") == 0 ) {
+ if( map_arg_next_value(arg, i, argc) )
+ SCRIPT_CONF_NAME = argv[++i];
+ } else if( strcmp(arg, "msg-config") == 0 ) {
+ if( map_arg_next_value(arg, i, argc) )
+ MSG_CONF_NAME = argv[++i];
+ } else if( strcmp(arg, "grf-path-file") == 0 ) {
+ if( map_arg_next_value(arg, i, argc) )
+ GRF_PATH_FILENAME = argv[++i];
+ } else if( strcmp(arg, "inter-config") == 0 ) {
+ if( map_arg_next_value(arg, i, argc) )
+ INTER_CONF_NAME = argv[++i];
+ } else if( strcmp(arg, "log-config") == 0 ) {
+ if( map_arg_next_value(arg, i, argc) )
+ LOG_CONF_NAME = argv[++i];
+ } else if( strcmp(arg, "run-once") == 0 ) // close the map-server as soon as its done.. for testing [Celest]
+ runflag = CORE_ST_STOP;
+ else {
+ ShowError("Unknown option '%s'.\n", argv[i]);
+ exit(EXIT_FAILURE);
+ }
+ }
+ else switch( arg[0] )
+ {// short option
+ case '?':
+ case 'h':
+ map_helpscreen(true);
+ break;
+ case 'v':
+ map_versionscreen(true);
+ break;
+ default:
+ ShowError("Unknown option '%s'.\n", argv[i]);
+ exit(EXIT_FAILURE);
+ }
}
map_config_read(MAP_CONF_NAME);
diff --git a/src/map/map.h b/src/map/map.h
index 6fbb36cdc..51678d590 100644
--- a/src/map/map.h
+++ b/src/map/map.h
@@ -10,6 +10,11 @@
#include "../common/mapindex.h"
#include "../common/db.h"
+/**
+ * [ro-resources.net]
+ **/
+#include "./config/Core.h"
+
#include <stdarg.h>
struct npc_data;
@@ -68,17 +73,17 @@ enum E_MAPSERVER_ST
#define JOBL_UPPER 0x1000 //4096
#define JOBL_BABY 0x2000 //8192
-#define JOBL_3 0x4000 //16384
+#define JOBL_THIRD 0x4000 //16384
//for filtering and quick checking.
#define MAPID_UPPERMASK 0x0fff
#define MAPID_BASEMASK 0x00ff
+#define MAPID_THIRDMASK (JOBL_THIRD|MAPID_UPPERMASK)
//First Jobs
//Note the oddity of the novice:
//Super Novices are considered the 2-1 version of the novice! Novices are considered a first class type, too...
enum {
MAPID_NOVICE = 0x0,
-//1st classes
MAPID_SWORDMAN,
MAPID_MAGE,
MAPID_ARCHER,
@@ -92,7 +97,7 @@ enum {
MAPID_XMAS,
MAPID_SUMMER,
//2_1 classes
- MAPID_SUPER_NOVICE = JOBL_2_1|MAPID_NOVICE,
+ MAPID_SUPER_NOVICE = JOBL_2_1|0x0,
MAPID_KNIGHT,
MAPID_WIZARD,
MAPID_HUNTER,
@@ -101,29 +106,15 @@ enum {
MAPID_ASSASSIN,
MAPID_STAR_GLADIATOR,
//2_2 classes
- MAPID_CRUSADER = JOBL_2_2|MAPID_SWORDMAN,
+ MAPID_CRUSADER = JOBL_2_2|0x1,
MAPID_SAGE,
MAPID_BARDDANCER,
MAPID_MONK,
MAPID_ALCHEMIST,
MAPID_ROGUE,
MAPID_SOUL_LINKER,
-//3_1 classes
- MAPID_RUNE_KNIGHT = JOBL_3|JOBL_2_1|MAPID_SWORDMAN,
- MAPID_WARLOCK,
- MAPID_RANGER,
- MAPID_ARCHBISHOP,
- MAPID_MECHANIC,
- MAPID_GUILLOTINE_CROSS,
-//3_2 classes
- MAPID_ROYAL_GUARD = JOBL_3|JOBL_2_2|MAPID_SWORDMAN,
- MAPID_SORCERER,
- MAPID_MINSTRELWANDERER,
- MAPID_SURA,
- MAPID_GENETIC,
- MAPID_SHADOW_CHASER,
-//1st, advanced
- MAPID_NOVICE_HIGH = JOBL_UPPER|MAPID_NOVICE,
+//1-1, advanced
+ MAPID_NOVICE_HIGH = JOBL_UPPER|0x0,
MAPID_SWORDMAN_HIGH,
MAPID_MAGE_HIGH,
MAPID_ARCHER_HIGH,
@@ -131,35 +122,21 @@ enum {
MAPID_MERCHANT_HIGH,
MAPID_THIEF_HIGH,
//2_1 advanced
- MAPID_LORD_KNIGHT = JOBL_UPPER|JOBL_2_1|MAPID_SWORDMAN,
+ MAPID_LORD_KNIGHT = JOBL_UPPER|JOBL_2_1|0x1,
MAPID_HIGH_WIZARD,
MAPID_SNIPER,
MAPID_HIGH_PRIEST,
MAPID_WHITESMITH,
MAPID_ASSASSIN_CROSS,
//2_2 advanced
- MAPID_PALADIN = JOBL_UPPER|JOBL_2_2|MAPID_SWORDMAN,
+ MAPID_PALADIN = JOBL_UPPER|JOBL_2_2|0x1,
MAPID_PROFESSOR,
MAPID_CLOWNGYPSY,
MAPID_CHAMPION,
MAPID_CREATOR,
MAPID_STALKER,
-//3_1 advanced
- MAPID_RUNE_KNIGHT_H = JOBL_3|JOBL_UPPER|JOBL_2_1|MAPID_SWORDMAN,
- MAPID_WARLOCK_H,
- MAPID_RANGER_H,
- MAPID_ARCHBISHOP_H,
- MAPID_MECHANIC_H,
- MAPID_GUILLOTINE_CROSS_H,
-//3_2 advanced
- MAPID_ROYAL_GUARD_H = JOBL_3|JOBL_UPPER|JOBL_2_2|MAPID_SWORDMAN,
- MAPID_SORCERER_H,
- MAPID_MINSTRELWANDERER_H,
- MAPID_SURA_H,
- MAPID_GENETIC_H,
- MAPID_SHADOW_CHASER_H,
-//1st baby
- MAPID_BABY = JOBL_BABY|MAPID_NOVICE,
+//1-1 baby
+ MAPID_BABY = JOBL_BABY|0x0,
MAPID_BABY_SWORDMAN,
MAPID_BABY_MAGE,
MAPID_BABY_ARCHER,
@@ -168,7 +145,7 @@ enum {
MAPID_BABY_THIEF,
MAPID_BABY_TAEKWON,
//2_1 baby
- MAPID_SUPER_BABY = JOBL_BABY|JOBL_2_1|MAPID_NOVICE,
+ MAPID_SUPER_BABY = JOBL_BABY|JOBL_2_1|0x0,
MAPID_BABY_KNIGHT,
MAPID_BABY_WIZARD,
MAPID_BABY_HUNTER,
@@ -177,27 +154,38 @@ enum {
MAPID_BABY_ASSASSIN,
MAPID_BABY_STAR_GLADIATOR,
//2_2 baby
- MAPID_BABY_CRUSADER = JOBL_BABY|JOBL_2_2|MAPID_SWORDMAN,
+ MAPID_BABY_CRUSADER = JOBL_BABY|JOBL_2_2|0x1,
MAPID_BABY_SAGE,
MAPID_BABY_BARDDANCER,
MAPID_BABY_MONK,
MAPID_BABY_ALCHEMIST,
MAPID_BABY_ROGUE,
MAPID_BABY_SOUL_LINKER,
-//3_1 baby
- MAPID_BABY_RUNE = JOBL_3|JOBL_BABY|JOBL_2_1|MAPID_SWORDMAN,
- MAPID_BABY_WARLOCK,
- MAPID_BABY_RANGER,
- MAPID_BABY_BISHOP,
- MAPID_BABY_MECHANIC,
- MAPID_BABY_CROSS,
-//3_2 baby
- MAPID_BABY_GUARD = JOBL_3|JOBL_BABY|JOBL_2_2|MAPID_SWORDMAN,
- MAPID_BABY_SORCERER,
- MAPID_BABY_MINSTRELWANDERER,
- MAPID_BABY_SURA,
- MAPID_BABY_GENETIC,
- MAPID_BABY_CHASER
+ MAPID_RUNE_KNIGHT = JOBL_THIRD|JOBL_2_1|0x1,
+ MAPID_WARLOCK,
+ MAPID_RANGER,
+ MAPID_ARCH_BISHOP,
+ MAPID_MECHANIC,
+ MAPID_GUILLOTINE_CROSS,
+ MAPID_ROYAL_GUARD = JOBL_THIRD|JOBL_2_2|0x1,
+ MAPID_SORCERER,
+ MAPID_MINSTRELWANDERER,
+ MAPID_SURA,
+ MAPID_GENETIC,
+ MAPID_SHADOW_CHASER,
+ MAPID_RUNE_KNIGHT_T = JOBL_THIRD|JOBL_UPPER|JOBL_2_1|0x1,
+ MAPID_WARLOCK_T,
+ MAPID_RANGER_T,
+ MAPID_ARCH_BISHOP_T,
+ MAPID_MECHANIC_T,
+ MAPID_GUILLOTINE_CROSS_T,
+ MAPID_ROYAL_GUARD_T = JOBL_THIRD|JOBL_UPPER|JOBL_2_2|0x1,
+ MAPID_SORCERER_T,
+ MAPID_MINSTRELWANDERER_T,
+ MAPID_SURA_T,
+ MAPID_GENETIC_T,
+ MAPID_SHADOW_CHASER_T,
+
};
//Max size for inputs to Graffiti, Talkie Box and Vending text prompts
@@ -313,7 +301,7 @@ struct spawn_data {
signed short xs,ys;
unsigned short num; //Number of mobs using this structure
unsigned short active; //Number of mobs that are already spawned (for mob_remove_damaged: no)
- unsigned int delay1,delay2; //Min delay before respawning after spawn/death
+ unsigned int delay1,delay2; //Spawn delay (fixed base + random variance)
struct {
unsigned int size :2; //Holds if mob has to be tiny/large
unsigned int ai :2; //Holds if mob is special ai.
@@ -380,7 +368,7 @@ enum _sp {
SP_WEAPON_ATK,SP_WEAPON_ATK_RATE, // 1081-1082
SP_DELAYRATE,SP_HP_DRAIN_RATE_RACE,SP_SP_DRAIN_RATE_RACE, // 1083-1085
SP_IGNORE_MDEF_RATE,SP_IGNORE_DEF_RATE,SP_SKILL_HEAL2,SP_ADDEFF_ONSKILL, //1086-1089
- SP_ADD_HEAL_RATE,SP_ADD_HEAL2_RATE,SP_FIXEDCASTRATE,SP_BASE_MATK,SP_WEAPON_MATK,SP_EQUIPMENT_MATK, //1090-1095
+ SP_ADD_HEAL_RATE,SP_ADD_HEAL2_RATE, //1090-1091
SP_RESTART_FULL_RECOVER=2000,SP_NO_CASTCANCEL,SP_NO_SIZEFIX,SP_NO_MAGIC_DAMAGE,SP_NO_WEAPON_DAMAGE,SP_NO_GEMSTONE, // 2000-2005
SP_NO_CASTCANCEL2,SP_NO_MISC_DAMAGE,SP_UNBREAKABLE_WEAPON,SP_UNBREAKABLE_ARMOR, SP_UNBREAKABLE_HELM, // 2006-2010
@@ -520,7 +508,10 @@ struct map_data {
unsigned fireworks : 1;
unsigned sakura : 1; // [Valaris]
unsigned leaves : 1; // [Valaris]
- unsigned rain : 1; // [Valaris]
+ /**
+ * No longer available, keeping here just in case it's back someday. [Ind]
+ **/
+ //unsigned rain : 1; // [Valaris]
unsigned nogo : 1; // [Valaris]
unsigned nobaseexp : 1; // [Lorky] added by Lupus
unsigned nojobexp : 1; // [Lorky]
@@ -687,7 +678,6 @@ int map_random_dir(struct block_list *bl, short *x, short *y); // [Skotlex]
int cleanup_sub(struct block_list *bl, va_list ap);
-void map_helpscreen(int flag); // [Valaris]
int map_delmap(char* mapname);
void map_flags_init(void);
@@ -711,8 +701,6 @@ extern char *SCRIPT_CONF_NAME;
extern char *MSG_CONF_NAME;
extern char *GRF_PATH_FILENAME;
-extern char *map_server_dns;
-
//Useful typedefs from jA [Skotlex]
typedef struct map_session_data TBL_PC;
typedef struct npc_data TBL_NPC;
@@ -741,6 +729,7 @@ extern Sql* logmysql_handle;
extern char item_db_db[32];
extern char item_db2_db[32];
+extern char item_db_re_db[32];
extern char mob_db_db[32];
extern char mob_db2_db[32];
diff --git a/src/map/mercenary.h b/src/map/mercenary.h
index 1cc689208..f040a3913 100644
--- a/src/map/mercenary.h
+++ b/src/map/mercenary.h
@@ -69,6 +69,12 @@ int mercenary_kills(struct mercenary_data *md);
int mercenary_checkskill(struct mercenary_data *md, int skill_id);
+/**
+ * atcommand.c required
+ **/
+int read_mercenarydb(void);
+int read_mercenary_skilldb(void);
+
int do_init_mercenary(void);
#endif /* _MERCENARY_H_ */
diff --git a/src/map/mob.c b/src/map/mob.c
index 49ca6eb23..df547c77d 100644
--- a/src/map/mob.c
+++ b/src/map/mob.c
@@ -1311,7 +1311,7 @@ static bool mob_ai_sub_hard(struct mob_data *md, unsigned int tick)
return false;
// Abnormalities
- if((md->sc.opt1 > 0 && md->sc.opt1 != OPT1_STONEWAIT && md->sc.opt1 != OPT1_BURNING) || md->sc.data[SC_BLADESTOP])
+ if((md->sc.opt1 > 0 && md->sc.opt1 != OPT1_STONEWAIT) || md->sc.data[SC_BLADESTOP])
{ //Should reset targets.
md->target_id = md->attacked_id = 0;
return false;
@@ -2163,8 +2163,12 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
merc_hom_gainexp(tmpsd[i]->hd, base_exp);
if(base_exp || job_exp)
{
- if( md->dmglog[i].flag != MDLF_PET || battle_config.pet_attack_exp_to_master )
+ if( md->dmglog[i].flag != MDLF_PET || battle_config.pet_attack_exp_to_master ) {
+#if RRMODE
+ party_renewal_exp_mod(&base_exp,&job_exp,tmpsd[i]->status.base_level,md->level);
+#endif
pc_gainexp(tmpsd[i], &md->bl, base_exp, job_exp, false);
+ }
}
if(zeny) // zeny from mobs [Valaris]
pc_getzeny(tmpsd[i], zeny);
@@ -2185,6 +2189,11 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
struct item_drop_list *dlist = ers_alloc(item_drop_list_ers, struct item_drop_list);
struct item_drop *ditem;
int drop_rate;
+#if RRMODE
+ int drop_modifier = mvp_sd ? party_renewal_drop_mod(mvp_sd->status.base_level - md->level) :
+ second_sd ? party_renewal_drop_mod(second_sd->status.base_level - md->level) :
+ third_sd ? party_renewal_drop_mod(third_sd->status.base_level - md->level) : 100;
+#endif
dlist->m = md->bl.m;
dlist->x = md->bl.x;
dlist->y = md->bl.y;
@@ -2226,7 +2235,10 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
// Increase drop rate if user has SC_ITEMBOOST
if (sd && sd->sc.data[SC_ITEMBOOST]) // now rig the drop rate to never be over 90% unless it is originally >90%.
drop_rate = max(drop_rate,cap_value((int)(0.5+drop_rate*(sd->sc.data[SC_ITEMBOOST]->val1)/100.),0,9000));
-
+#if RRMODE
+ if( drop_modifier != 100 )
+ drop_rate = drop_rate * drop_modifier / 100;
+#endif
// attempt to drop the item
if (rand() % 10000 >= drop_rate)
continue;
@@ -2437,8 +2449,11 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
delete_timer(md->deletetimer,mob_timer_delete);
md->deletetimer = INVALID_TIMER;
}
-
- mob_deleteslave(md);
+ /**
+ * Only loops if necessary (e.g. a poring would never need to loop)
+ **/
+ if( md->can_summon )
+ mob_deleteslave(md);
map_freeblock_unlock();
@@ -2700,6 +2715,10 @@ int mob_summonslave(struct mob_data *md2,int *value,int amount,int skill_id)
if(mobdb_checkid(value[0]) == 0)
return 0;
+ /**
+ * Flags this monster is able to summon; saves a worth amount of memory upon deletion
+ **/
+ md2->can_summon = 1;
while(count < 5 && mobdb_checkid(value[count])) count++;
if(count < 1) return 0;
@@ -3574,7 +3593,8 @@ static bool mob_parse_dbrow(char** str)
db->dropitem[i].p = 0; //No drop.
continue;
}
- type = itemdb_type(db->dropitem[i].nameid);
+ id = itemdb_search(db->dropitem[i].nameid);
+ type = id->type;
rate = atoi(str[k+1]);
if( (class_ >= 1324 && class_ <= 1363) || (class_ >= 1938 && class_ <= 1946) )
{ //Treasure box drop rates [Skotlex]
@@ -3618,7 +3638,6 @@ static bool mob_parse_dbrow(char** str)
//calculate and store Max available drop chance of the item
if( db->dropitem[i].p && (class_ < 1324 || class_ > 1363) && (class_ < 1938 || class_ > 1946) )
{ //Skip treasure chests.
- id = itemdb_search(db->dropitem[i].nameid);
if (id->maxchance == -1 || (id->maxchance < db->dropitem[i].p) ) {
id->maxchance = db->dropitem[i].p; //item has bigger drop chance or sold in shops
}
diff --git a/src/map/mob.h b/src/map/mob.h
index 9e86b8d63..2c6d882c9 100644
--- a/src/map/mob.h
+++ b/src/map/mob.h
@@ -161,6 +161,11 @@ struct mob_data {
short skillidx;
unsigned int skilldelay[MAX_MOBSKILL];
char npc_event[EVENT_NAME_LENGTH];
+ /**
+ * Did this monster summon something?
+ * Used to flag summon deletions, saves a worth amount of memory
+ **/
+ bool can_summon : 1;
};
diff --git a/src/map/npc.c b/src/map/npc.c
index 897475f73..880626344 100644
--- a/src/map/npc.c
+++ b/src/map/npc.c
@@ -96,7 +96,7 @@ static struct script_event_s
struct view_data* npc_get_viewdata(int class_)
{ //Returns the viewdata for normal npc classes.
- if (class_ == INVISIBLE_CLASS)
+ if( class_ == HIDDEN_WARP_CLASS || class_ == INVISIBLE_CLASS )
return &npc_viewdb[0];
if (npcdb_checkid(class_) || class_ == WARP_CLASS)
return &npc_viewdb[class_];
@@ -199,7 +199,33 @@ struct npc_data* npc_name2id(const char* name)
{
return (struct npc_data *) strdb_get(npcname_db, name);
}
-
+/**
+ * For the Secure NPC Timeout option (check config/Secure.h) [RR]
+ **/
+#if SECURE_NPCTIMEOUT
+/**
+ * Timer to check for idle time and timeout the dialog if necessary
+ **/
+int npc_rr_secure_timeout_timer(int tid, unsigned int tick, int id, intptr_t data) {
+ struct map_session_data* sd = NULL;
+ if( (sd = map_id2sd(id)) == NULL || !sd->npc_id )
+ return 0;//Not logged in anymore OR no longer attached to a npc
+
+ if( DIFF_TICK(tick,sd->npc_idle_tick) > (SECURE_NPCTIMEOUT*1000) ) {
+ /**
+ * If we still have the NPC script attached, tell it to stop.
+ **/
+ if( sd->st )
+ sd->st->state = END;
+ /**
+ * This guy's been idle for longer than allowed, close him.
+ **/
+ clif_scriptclose(sd,sd->npc_id);
+ } else //Create a new instance of ourselves to continue
+ sd->npc_idle_timer = add_timer(gettick() + (SECURE_NPCTIMEOUT_INTERVAL*1000),npc_rr_secure_timeout_timer,sd->bl.id,0);
+ return 0;
+}
+#endif
/*==========================================
* ƒCƒxƒ“ƒgƒLƒ…[‚̃Cƒxƒ“ƒgˆ—
*------------------------------------------*/
@@ -1114,6 +1140,15 @@ int npc_scriptcont(struct map_session_data* sd, int id)
return 1;
}
}
+ /**
+ * For the Secure NPC Timeout option (check config/Secure.h) [RR]
+ **/
+#if SECURE_NPCTIMEOUT
+ /**
+ * Update the last NPC iteration
+ **/
+ sd->npc_idle_tick = gettick();
+#endif
run_script_main(sd->st);
return 0;
@@ -1389,14 +1424,28 @@ int npc_buylist(struct map_session_data* sd, int n, unsigned short* item_list)
static int npc_selllist_sub(struct map_session_data* sd, int n, unsigned short* item_list, struct npc_data* nd)
{
char npc_ev[EVENT_NAME_LENGTH];
- int i, idx;
+ char card_slot[NAME_LENGTH];
+ int i, j, idx;
int key_nameid = 0;
int key_amount = 0;
+ int key_refine = 0;
+ int key_attribute = 0;
+ int key_identify = 0;
+ int key_card = 0;
// discard old contents
script_cleararray_pc(sd, "@sold_nameid", (void*)0);
script_cleararray_pc(sd, "@sold_quantity", (void*)0);
+ script_cleararray_pc(sd, "@sold_refine", (void*)0);
+ script_cleararray_pc(sd, "@sold_attribute", (void*)0);
+ script_cleararray_pc(sd, "@sold_identify", (void*)0);
+ for( j = 0; MAX_SLOTS > j; j++ )
+ {// clear each of the card slot entries
+ snprintf(card_slot, sizeof(card_slot), "@sold_card%d", j + 1);
+ script_cleararray_pc(sd, card_slot, (void*)0);
+ }
+
// save list of to be sold items
for( i = 0; i < n; i++ )
{
@@ -1404,6 +1453,19 @@ static int npc_selllist_sub(struct map_session_data* sd, int n, unsigned short*
script_setarray_pc(sd, "@sold_nameid", i, (void*)(intptr_t)sd->status.inventory[idx].nameid, &key_nameid);
script_setarray_pc(sd, "@sold_quantity", i, (void*)(intptr_t)item_list[i*2+1], &key_amount);
+
+ if( itemdb_isequip(sd->status.inventory[idx].nameid) )
+ {// process equipment based information into the arrays
+ script_setarray_pc(sd, "@sold_refine", i, (void*)(intptr_t)sd->status.inventory[idx].refine, &key_refine);
+ script_setarray_pc(sd, "@sold_attribute", i, (void*)(intptr_t)sd->status.inventory[idx].attribute, &key_attribute);
+ script_setarray_pc(sd, "@sold_identify", i, (void*)(intptr_t)sd->status.inventory[idx].identify, &key_identify);
+
+ for( j = 0; MAX_SLOTS > j; j++ )
+ {// store each of the cards from the equipment in the array
+ snprintf(card_slot, sizeof(card_slot), "@sold_card%d", j + 1);
+ script_setarray_pc(sd, card_slot, i, (void*)(intptr_t)sd->status.inventory[idx].card[j], &key_card);
+ }
+ }
}
// invoke event
@@ -3058,8 +3120,11 @@ static const char* npc_parse_mapflag(char* w1, char* w2, char* w3, char* w4, con
map[m].flag.sakura=state;
else if (!strcmpi(w3,"leaves"))
map[m].flag.leaves=state;
- else if (!strcmpi(w3,"rain"))
- map[m].flag.rain=state;
+ /**
+ * No longer available, keeping here just in case it's back someday. [Ind]
+ **/
+ //else if (!strcmpi(w3,"rain"))
+ // map[m].flag.rain=state;
else if (!strcmpi(w3,"nightenabled"))
map[m].flag.nightenabled=state;
else if (!strcmpi(w3,"nogo"))
diff --git a/src/map/npc.h b/src/map/npc.h
index 29e3d79cb..ac411697e 100644
--- a/src/map/npc.h
+++ b/src/map/npc.h
@@ -69,15 +69,19 @@ struct npc_data {
#define START_NPC_NUM 110000000
-#define WARP_CLASS 45
-#define WARP_DEBUG_CLASS 722
-#define FLAG_CLASS 722
-#define INVISIBLE_CLASS 32767
+enum actor_classes
+{
+ WARP_CLASS = 45,
+ HIDDEN_WARP_CLASS = 139, // server-side only, never sent to client
+ WARP_DEBUG_CLASS = 722,
+ FLAG_CLASS = 722,
+ INVISIBLE_CLASS = 32767,
+};
#define MAX_NPC_CLASS 1000
//Checks if a given id is a valid npc id. [Skotlex]
//Since new npcs are added all the time, the max valid value is the one before the first mob (Scorpion = 1001)
-#define npcdb_checkid(id) ( ( (id) >= 46 && (id) <= 125) || (id) == 139 || ( (id) > 400 && (id) < MAX_NPC_CLASS ) || (id) == INVISIBLE_CLASS )
+#define npcdb_checkid(id) ( ( (id) >= 46 && (id) <= 125) || (id) == HIDDEN_WARP_CLASS || ( (id) > 400 && (id) < MAX_NPC_CLASS ) || (id) == INVISIBLE_CLASS )
#ifdef PCRE_SUPPORT
void npc_chat_finalize(struct npc_data* nd);
@@ -153,4 +157,11 @@ int npc_cashshop_buy(struct map_session_data *sd, int nameid, int amount, int po
extern struct npc_data* fake_nd;
+/**
+ * For the Secure NPC Timeout option (check config/Secure.h) [RR]
+ **/
+#if SECURE_NPCTIMEOUT
+int npc_rr_secure_timeout_timer(int tid, unsigned int tick, int id, intptr_t data);
+#endif
+
#endif /* _NPC_H_ */
diff --git a/src/map/party.c b/src/map/party.c
index 88f53bcb0..a8a524046 100644
--- a/src/map/party.c
+++ b/src/map/party.c
@@ -28,8 +28,8 @@
#include <string.h>
-static DBMap* party_db; // int party_id -> struct party_data*
-static DBMap* party_booking_db; // Party Booking [Spiria]
+static DBMap* party_db; // int party_id -> struct party_data* (releases data)
+static DBMap* party_booking_db; // int char_id -> struct party_booking_ad_info* (releases data) // Party Booking [Spiria]
static unsigned long party_booking_nextid = 1;
int party_send_xy_timer(int tid, unsigned int tick, int id, intptr_t data);
@@ -38,18 +38,36 @@ int party_send_xy_timer(int tid, unsigned int tick, int id, intptr_t data);
* Fills the given party_member structure according to the sd provided.
* Used when creating/adding people to a party. [Skotlex]
*------------------------------------------*/
-static void party_fill_member(struct party_member *member, struct map_session_data *sd)
+static void party_fill_member(struct party_member* member, struct map_session_data* sd, unsigned int leader)
{
member->account_id = sd->status.account_id;
member->char_id = sd->status.char_id;
- memcpy(member->name, sd->status.name, NAME_LENGTH);
+ safestrncpy(member->name, sd->status.name, NAME_LENGTH);
member->class_ = sd->status.class_;
member->map = sd->mapindex;
member->lv = sd->status.base_level;
member->online = 1;
- member->leader = 0;
+ member->leader = leader;
}
+
+/// Get the member_id of a party member.
+/// Return -1 if not in party.
+int party_getmemberid(struct party_data* p, struct map_session_data* sd)
+{
+ int member_id;
+ nullpo_retr(-1, p);
+ if( sd == NULL )
+ return -1;// no player
+ ARR_FIND(0, MAX_PARTY, member_id,
+ p->party.member[member_id].account_id == sd->status.account_id &&
+ p->party.member[member_id].char_id == sd->status.char_id);
+ if( member_id == MAX_PARTY )
+ return -1;// not found
+ return member_id;
+}
+
+
/*==========================================
* Request an available sd of this party
*------------------------------------------*/
@@ -72,6 +90,8 @@ static TBL_PC* party_sd_check(int party_id, int account_id, int char_id)
if (!(sd && sd->status.char_id == char_id))
return NULL;
+ if( sd->status.party_id == 0 )
+ sd->status.party_id = party_id;// auto-join if not in a party
if (sd->status.party_id != party_id)
{ //If player belongs to a different party, kick him out.
intif_party_leave(party_id,account_id,char_id);
@@ -143,8 +163,7 @@ int party_create(struct map_session_data *sd,char *name,int item,int item2)
sd->party_creating = true;
- party_fill_member(&leader, sd);
- leader.leader = 1;
+ party_fill_member(&leader, sd, 1);
intif_create_party(&leader,name,item,item2);
return 0;
@@ -175,63 +194,26 @@ void party_created(int account_id,int char_id,int fail,int party_id,char *name)
}
-int party_request_info(int party_id)
+int party_request_info(int party_id, int char_id)
{
- return intif_request_partyinfo(party_id);
+ return intif_request_partyinfo(party_id, char_id);
}
-/// Checks if each char having a party actually belongs to that party.
-/// If check fails, the char gets marked as 'not in a party'.
-int party_check_member(struct party *p)
+/// Invoked (from char-server) when the party info is not found.
+int party_recv_noinfo(int party_id, int char_id)
{
- int i;
- struct map_session_data *sd;
- struct s_mapiterator* iter;
-
- nullpo_ret(p);
+ struct map_session_data* sd;
- iter = mapit_getallusers();
- for( sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); sd = (TBL_PC*)mapit_next(iter) )
+ party_broken(party_id);
+ if( char_id != 0 )// requester
{
- if( sd->status.party_id != p->party_id )
- continue;
-
- ARR_FIND( 0, MAX_PARTY, i, p->member[i].account_id == sd->status.account_id && p->member[i].char_id == sd->status.char_id );
- if( i == MAX_PARTY )
- {
- ShowWarning("party_check_member: '%s' (acc:%d) is not member of party '%s' (id:%d)\n",sd->status.name,sd->status.account_id,p->name,p->party_id);
+ sd = map_charid2sd(char_id);
+ if( sd && sd->status.party_id == party_id )
sd->status.party_id = 0;
- }
- }
- mapit_free(iter);
-
- return 0;
-}
-
-/// Marks all chars belonging to this party as 'not in a party'.
-int party_recv_noinfo(int party_id)
-{
- struct map_session_data *sd;
- struct s_mapiterator* iter;
-
- iter = mapit_getallusers();
- for( sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); sd = (TBL_PC*)mapit_next(iter) )
- {
- if( sd->status.party_id == party_id )
- sd->status.party_id = 0; // erase party
}
- mapit_free(iter);
-
return 0;
}
-static void* create_party(DBKey key, va_list args)
-{
- struct party_data *p;
- p=(struct party_data *)aCalloc(1,sizeof(struct party_data));
- return p;
-}
-
static void party_check_state(struct party_data *p)
{
int i;
@@ -259,42 +241,92 @@ static void party_check_state(struct party_data *p)
}
}
-int party_recv_info(struct party *sp)
+int party_recv_info(struct party* sp, int char_id)
{
- struct party_data *p;
+ struct party_data* p;
+ struct party_member* member;
+ struct map_session_data* sd;
+ int removed[MAX_PARTY];// member_id in old data
+ int removed_count = 0;
+ int added[MAX_PARTY];// member_id in new data
+ int added_count = 0;
int i;
- bool party_new = false;
+ int member_id;
nullpo_ret(sp);
- p = (struct party_data*)idb_ensure(party_db, sp->party_id, create_party);
- if (!p->party.party_id) //party just received.
+ p = (struct party_data*)idb_get(party_db, sp->party_id);
+ if( p != NULL )// diff members
+ {
+ for( member_id = 0; member_id < MAX_PARTY; ++member_id )
+ {
+ member = &p->party.member[member_id];
+ if( member->char_id == 0 )
+ continue;// empty
+ ARR_FIND(0, MAX_PARTY, i,
+ sp->member[i].account_id == member->account_id &&
+ sp->member[i].char_id == member->char_id);
+ if( i == MAX_PARTY )
+ removed[removed_count++] = member_id;
+ }
+ for( member_id = 0; member_id < MAX_PARTY; ++member_id )
+ {
+ member = &sp->member[member_id];
+ if( member->char_id == 0 )
+ continue;// empty
+ ARR_FIND(0, MAX_PARTY, i,
+ p->party.member[i].account_id == member->account_id &&
+ p->party.member[i].char_id == member->char_id);
+ if( i == MAX_PARTY )
+ added[added_count++] = member_id;
+ }
+ }
+ else
+ {
+ for( member_id = 0; member_id < MAX_PARTY; ++member_id )
+ if( sp->member[member_id].char_id != 0 )
+ added[added_count++] = member_id;
+ CREATE(p, struct party_data, 1);
+ idb_put(party_db, sp->party_id, p);
+ }
+ while( removed_count > 0 )// no longer in party
{
- party_new = true;
- party_check_member(sp);
+ member_id = removed[--removed_count];
+ sd = p->data[member_id].sd;
+ if( sd == NULL )
+ continue;// not online
+ party_member_withdraw(sp->party_id, sd->status.account_id, sd->status.char_id);
}
- memcpy(&p->party,sp,sizeof(struct party));
+ memcpy(&p->party, sp, sizeof(struct party));
memset(&p->state, 0, sizeof(p->state));
memset(&p->data, 0, sizeof(p->data));
- for(i=0;i<MAX_PARTY;i++){
- if (!p->party.member[i].account_id)
- continue;
- p->data[i].sd = party_sd_check(p->party.party_id, p->party.member[i].account_id, p->party.member[i].char_id);
+ for( member_id = 0; member_id < MAX_PARTY; member_id++ )
+ {
+ member = &p->party.member[member_id];
+ if ( member->char_id == 0 )
+ continue;// empty
+ p->data[member_id].sd = party_sd_check(sp->party_id, member->account_id, member->char_id);
}
party_check_state(p);
- if (party_new) {
- //Send party data to all players.
- struct map_session_data *sd;
- for(i=0;i<MAX_PARTY;i++){
- sd = p->data[i].sd;
- if(!sd) continue;
- clif_charnameupdate(sd); //Update other people's display. [Skotlex]
- clif_party_member_info(p,sd);
- clif_party_option(p,sd,0x100);
- clif_party_info(p,NULL);
- }
+ while( added_count > 0 )// new in party
+ {
+ member_id = added[--added_count];
+ sd = p->data[member_id].sd;
+ if( sd == NULL )
+ continue;// not online
+ clif_charnameupdate(sd); //Update other people's display. [Skotlex]
+ clif_party_member_info(p,sd);
+ clif_party_option(p,sd,0x100);
+ clif_party_info(p,NULL);
+ if( p->instance_id != 0 )
+ clif_instance_join(sd->fd, p->instance_id);
+ }
+ if( char_id != 0 )// requester
+ {
+ sd = map_charid2sd(char_id);
+ if( sd && sd->status.party_id == sp->party_id && party_getmemberid(p,sd) == -1 )
+ sd->status.party_id = 0;// was not in the party
}
-
return 0;
}
@@ -306,8 +338,8 @@ int party_invite(struct map_session_data *sd,struct map_session_data *tsd)
nullpo_ret(sd);
if( ( p = party_search(sd->status.party_id) ) == NULL )
return 0;
- if( tsd == NULL) { //TODO: Find the correct reply packet.
- clif_displaymessage(sd->fd, msg_txt(3));
+ if( tsd == NULL) {
+ clif_party_inviteack(sd, "", 7);
return 0;
}
@@ -385,7 +417,7 @@ void party_reply_invite(struct map_session_data *sd,int party_id,int flag)
if( flag == 1 && !sd->party_creating && !sd->party_joining )
{// accepted and allowed
sd->party_joining = true;
- party_fill_member(&member, sd);
+ party_fill_member(&member, sd, 0);
intif_party_addmember(sd->party_invite, &member);
}
else
@@ -407,7 +439,7 @@ void party_member_joined(struct map_session_data *sd)
int i;
if (!p)
{
- party_request_info(sd->status.party_id);
+ party_request_info(sd->status.party_id, sd->status.char_id);
return;
}
ARR_FIND( 0, MAX_PARTY, i, p->party.member[i].account_id == sd->status.account_id && p->party.member[i].char_id == sd->status.char_id );
@@ -456,14 +488,6 @@ int party_member_added(int party_id,int account_id,int char_id, int flag)
sd->status.party_id = party_id;
- ARR_FIND( 0, MAX_PARTY, i, p->party.member[i].account_id == 0 );
- if (i < MAX_PARTY) {
- //TODO: This is a hack to allow the following clif calls to send the data to the new player.
- //The correct player data is set when party_recv_info arrives soon afterwards.
- party_fill_member(&p->party.member[i], sd);
- p->data[i].sd = sd;
- }
-
clif_party_member_info(p,sd);
clif_party_option(p,sd,0x100);
clif_party_info(p,sd);
@@ -542,7 +566,7 @@ int party_member_withdraw(int party_id, int account_id, int char_id)
ARR_FIND( 0, MAX_PARTY, i, p->party.member[i].account_id == account_id && p->party.member[i].char_id == char_id );
if( i < MAX_PARTY )
{
- clif_party_withdraw(p,sd,account_id,p->party.member[i].name,0x00);
+ clif_party_withdraw(p,sd,account_id,p->party.member[i].name,0x0);
memset(&p->party.member[i], 0, sizeof(p->party.member[0]));
memset(&p->data[i], 0, sizeof(p->data[0]));
p->party.count--;
@@ -849,11 +873,16 @@ int party_send_xy_timer(int tid, unsigned int tick, int id, intptr_t data)
for( p = (struct party_data*)iter->first(iter,NULL); iter->exists(iter); p = (struct party_data*)iter->next(iter,NULL) )
{
int i;
+
+ if( !p->party.count )
+ {// no online party members so do not iterate
+ continue;
+ }
+
// for each member of this party,
for( i = 0; i < MAX_PARTY; i++ )
{
- //struct map_session_data* sd = p->data[i].sd;
- struct map_session_data* sd = map_charid2sd(p->party.member[i].char_id); //temporary crashfix
+ struct map_session_data* sd = p->data[i].sd;
if( !sd ) continue;
if( p->data[i].x != sd->bl.x || p->data[i].y != sd->bl.y )
@@ -888,13 +917,64 @@ int party_send_xy_clear(struct party_data *p)
}
return 0;
}
-
+#if RRMODE
+/**
+ * Renewal Drop Earning Modifier
+ **/
+int party_renewal_drop_mod(int diff) {
+ if( diff >= -10 && diff <= 5 )
+ return 100;//no change.
+ if( diff > 0 ) {
+ if( diff > 5 && diff < 10 )
+ return 90;
+ if( diff > 9 && diff < 15 )
+ return 75;
+ if( diff > 14 && diff < 30 )
+ return 60;
+ } else {
+ if( diff <= -10 && diff <= -14 )
+ return 75;//75%
+ }
+ //other chases: 50%
+ return 50;
+}
+/**
+ * Renewal Experience Earning Mode
+ **/
+void party_renewal_exp_mod(unsigned int *base_exp, unsigned int *job_exp, int lvl, int moblvl) {
+ int diff = lvl - moblvl, boost = 0;
+ //-2 ~ +5: 100%
+ if( diff >= -2 && diff <= 5 )
+ return;//we don't change anything, it's 100% boost
+ //-3 ~ -10: +5% boost for each
+ if( diff >= -10 && diff <= -3 )
+ boost = 100 + (( -diff * 5 ) - 15 );
+ // 40% boost if difference is <= -10
+ else if ( diff <= -10 )
+ boost = 40;
+ else {
+ boost = ( diff > 5 && diff < 11 ) ? 95 :
+ ( diff > 10 && diff < 16 ) ? 90 :
+ ( diff > 15 && diff < 21 ) ? 85 :
+ ( diff > 20 && diff < 26 ) ? 60 :
+ ( diff > 25 && diff < 31 ) ? 35 :
+ 10;
+ }
+ if( *base_exp )
+ *base_exp = (unsigned int)cap_value(*base_exp * boost / 100, 1, UINT_MAX);
+ if( *job_exp )
+ *job_exp = (unsigned int)cap_value(*job_exp * boost / 100, 1, UINT_MAX);
+ return;
+}
+#endif
// exp share and added zeny share [Valaris]
int party_exp_share(struct party_data* p, struct block_list* src, unsigned int base_exp, unsigned int job_exp, int zeny)
{
struct map_session_data* sd[MAX_PARTY];
unsigned int i, c;
-
+#if RRMODE
+ int src_lvl = status_get_lv(src);
+#endif
nullpo_ret(p);
// count the number of players eligible for exp sharing
@@ -921,8 +1001,10 @@ int party_exp_share(struct party_data* p, struct block_list* src, unsigned int b
zeny = (unsigned int) cap_value(zeny * bonus/100, INT_MIN, INT_MAX);
}
- for (i = 0; i < c; i++)
- {
+ for (i = 0; i < c; i++) {
+#if RRMODE
+ party_renewal_exp_mod(&base_exp,&job_exp,sd[i]->status.base_level,src_lvl);
+#endif
pc_gainexp(sd[i], src, base_exp, job_exp, false);
if (zeny) // zeny from mobs [Valaris]
pc_getzeny(sd[i],zeny);
diff --git a/src/map/party.h b/src/map/party.h
index 1c59197b3..4918d9a3a 100644
--- a/src/map/party.h
+++ b/src/map/party.h
@@ -51,11 +51,12 @@ void do_init_party(void);
void do_final_party(void);
struct party_data* party_search(int party_id);
struct party_data* party_searchname(const char* str);
+int party_getmemberid(struct party_data* p, struct map_session_data* sd);
struct map_session_data* party_getavailablesd(struct party_data *p);
int party_create(struct map_session_data *sd,char *name, int item, int item2);
void party_created(int account_id,int char_id,int fail,int party_id,char *name);
-int party_request_info(int party_id);
+int party_request_info(int party_id, int char_id);
int party_invite(struct map_session_data *sd,struct map_session_data *tsd);
void party_member_joined(struct map_session_data *sd);
int party_member_added(int party_id,int account_id,int char_id,int flag);
@@ -63,8 +64,8 @@ int party_leave(struct map_session_data *sd);
int party_removemember(struct map_session_data *sd,int account_id,char *name);
int party_member_withdraw(int party_id,int account_id,int char_id);
void party_reply_invite(struct map_session_data *sd,int party_id,int flag);
-int party_recv_noinfo(int party_id);
-int party_recv_info(struct party *sp);
+int party_recv_noinfo(int party_id, int char_id);
+int party_recv_info(struct party* sp, int char_id);
int party_recv_movemap(int party_id,int account_id,int char_id, unsigned short map,int online,int lv);
int party_broken(int party_id);
int party_optionchanged(int party_id,int account_id,int exp,int item,int flag);
@@ -91,4 +92,9 @@ void party_booking_update(struct map_session_data *sd, short* job);
void party_booking_search(struct map_session_data *sd, short level, short mapid, short job, unsigned long lastindex, short resultcount);
bool party_booking_delete(struct map_session_data *sd);
+#if RRMODE
+void party_renewal_exp_mod(unsigned int *base_exp, unsigned int *job_exp, int lvl, int moblvl);
+int party_renewal_drop_mod(int diff);
+#endif
+
#endif /* _PARTY_H_ */
diff --git a/src/map/pc.c b/src/map/pc.c
index 440c684f4..21588a12d 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -395,7 +395,7 @@ int pc_makesavestatus(struct map_session_data *sd)
//Only copy the Cart/Peco/Falcon options, the rest are handled via
//status change load/saving. [Skotlex]
- sd->status.option = sd->sc.option&(OPTION_CART|OPTION_FALCON|OPTION_RIDING|OPTION_DRAGON);
+ sd->status.option = sd->sc.option&(OPTION_CART|OPTION_FALCON|OPTION_RIDING|OPTION_DRAGON|OPTION_WUGRIDER|OPTION_WUG|OPTION_MADOGEAR|OPTION_MOUNTING);
if (sd->sc.data[SC_JAILED])
{ //When Jailed, do not move last point.
@@ -765,10 +765,14 @@ int pc_isequip(struct map_session_data *sd,int n)
//Not equipable by class. [Skotlex]
if (!(1<<(sd->class_&MAPID_BASEMASK)&item->class_base[(sd->class_&JOBL_2_1)?1:((sd->class_&JOBL_2_2)?2:0)]))
return 0;
-
- //Not equipable by upper class. [Skotlex]
- if(!(1<<((sd->class_&JOBL_UPPER)?1:((sd->class_&JOBL_BABY)?2:0))&item->class_upper))
+ //Not usable by upper class. [Inkfish]
+ while( 1 ) {
+ if( item->class_upper&1 && !(sd->class_&(JOBL_UPPER|JOBL_THIRD|JOBL_BABY)) ) break;
+ if( item->class_upper&2 && sd->class_&(JOBL_UPPER|JOBL_THIRD) ) break;
+ if( item->class_upper&4 && sd->class_&JOBL_BABY ) break;
+ if( item->class_upper&8 && sd->class_&JOBL_THIRD ) break;
return 0;
+ }
return 1;
}
@@ -825,7 +829,17 @@ bool pc_authok(struct map_session_data *sd, int login_id2, time_t expiration_tim
sd->invincible_timer = INVALID_TIMER;
sd->npc_timer_id = INVALID_TIMER;
sd->pvp_timer = INVALID_TIMER;
-
+ /**
+ * For the Secure NPC Timeout option (check config/Secure.h) [RR]
+ **/
+#if SECURE_NPCTIMEOUT
+ /**
+ * Initialize to defaults/expected
+ **/
+ sd->npc_idle_timer = INVALID_TIMER;
+ sd->npc_idle_tick = tick;
+#endif
+
sd->canuseitem_tick = tick;
sd->canusecashfood_tick = tick;
sd->canequip_tick = tick;
@@ -915,7 +929,7 @@ bool pc_authok(struct map_session_data *sd, int login_id2, time_t expiration_tim
if (battle_config.display_version == 1){
char buf[256];
- sprintf(buf, "eAthena SVN version: %s", get_svn_revision());
+ sprintf(buf, "SVN version: %s", get_svn_revision());
clif_displaymessage(sd->fd, buf);
}
@@ -1814,14 +1828,14 @@ int pc_bonus(struct map_session_data *sd,int type,int val)
break;
case SP_BASE_ATK:
if(sd->state.lr_flag != 2) {
- bonus = status->equipment_atk + val;
- status->equipment_atk = cap_value(bonus, 0, USHRT_MAX);
+ bonus = status->batk + val;
+ status->batk = cap_value(bonus, 0, USHRT_MAX);
}
break;
case SP_DEF1:
if(sd->state.lr_flag != 2) {
bonus = status->def + val;
- status->def = cap_value(bonus, SHRT_MIN, SHRT_MAX);
+ status->def = cap_value(bonus, CHAR_MIN, CHAR_MAX);
}
break;
case SP_DEF2:
@@ -1833,7 +1847,7 @@ int pc_bonus(struct map_session_data *sd,int type,int val)
case SP_MDEF1:
if(sd->state.lr_flag != 2) {
bonus = status->mdef + val;
- status->mdef = cap_value(bonus, SHRT_MIN, SHRT_MAX);
+ status->mdef = cap_value(bonus, CHAR_MIN, CHAR_MAX);
}
break;
case SP_MDEF2:
@@ -1925,10 +1939,6 @@ int pc_bonus(struct map_session_data *sd,int type,int val)
if(sd->state.lr_flag != 2)
sd->castrate+=val;
break;
- case SP_FIXEDCASTRATE:
- if(sd->state.lr_flag != 2)
- sd->fixedcastrate+=val;
- break;
case SP_MAXHPRATE:
if(sd->state.lr_flag != 2)
sd->hprate+=val;
@@ -1976,7 +1986,7 @@ int pc_bonus(struct map_session_data *sd,int type,int val)
break;
case SP_ASPD_RATE: //Stackable increase - Made it linear as per rodatazone
if(sd->state.lr_flag != 2)
- status->aspd_rate -= 10 * val;
+ status->aspd_rate -= 10*val;
break;
case SP_HP_RECOV_RATE:
if(sd->state.lr_flag != 2)
@@ -2010,14 +2020,6 @@ int pc_bonus(struct map_session_data *sd,int type,int val)
if(sd->state.lr_flag != 2)
sd->matk_rate += val;
break;
- case SP_WEAPON_MATK:
- if(sd->state.lr_flag != 2)
- sd->weapon_matk += val;
- break;
- case SP_EQUIPMENT_MATK:
- if(sd->state.lr_flag != 2)
- sd->equipment_matk += val;
- break;
case SP_IGNORE_DEF_ELE:
if(val >= ELE_MAX) {
ShowError("pc_bonus: SP_IGNORE_DEF_ELE: Invalid element %d\n", val);
@@ -2713,23 +2715,6 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val)
}
break;
- case SP_FIXEDCASTRATE:
- if(sd->state.lr_flag == 2)
- break;
- ARR_FIND(0, ARRAYLENGTH(sd->fixedskillcast), i, sd->fixedskillcast[i].id == 0 || sd->fixedskillcast[i].id == type2);
- if (i == ARRAYLENGTH(sd->fixedskillcast))
- { //Better mention this so the array length can be updated. [Skotlex]
- ShowDebug("run_script: bonus2 bFixedCastRate reached it's limit (%d skills per character), bonus skill %d (+%d%%) lost.\n", ARRAYLENGTH(sd->fixedskillcast), type2, val);
- break;
- }
- if(sd->fixedskillcast[i].id == type2)
- sd->fixedskillcast[i].val += val;
- else {
- sd->fixedskillcast[i].id = type2;
- sd->fixedskillcast[i].val = val;
- }
- break;
-
case SP_HP_LOSS_RATE:
if(sd->state.lr_flag != 2) {
sd->hp_loss.value = type2;
@@ -3199,25 +3184,19 @@ int pc_modifysellvalue(struct map_session_data *sd,int orig_value)
int pc_checkadditem(struct map_session_data *sd,int nameid,int amount)
{
int i;
- struct item_data* data;
nullpo_ret(sd);
if(amount > MAX_AMOUNT)
return ADDITEM_OVERAMOUNT;
- data = itemdb_search(nameid);
-
- if(!itemdb_isstackable2(data))
+ if(!itemdb_isstackable(nameid))
return ADDITEM_NEW;
- if( data->stack.inventory && amount > data->stack.amount )
- return ADDITEM_OVERAMOUNT;
-
for(i=0;i<MAX_INVENTORY;i++){
// FIXME: This does not consider the checked item's cards, thus could check a wrong slot for stackability.
if(sd->status.inventory[i].nameid==nameid){
- if( amount > MAX_AMOUNT - sd->status.inventory[i].amount || ( data->stack.inventory && amount > data->stack.amount - sd->status.inventory[i].amount ) )
+ if(sd->status.inventory[i].amount+amount > MAX_AMOUNT)
return ADDITEM_OVERAMOUNT;
return ADDITEM_EXIST;
}
@@ -3411,16 +3390,18 @@ int pc_additem(struct map_session_data *sd,struct item *item_data,int amount)
return 5;
data = itemdb_search(item_data->nameid);
-
- if( data->stack.inventory && amount > data->stack.amount )
- {// item stack limitation
- return 7;
- }
-
w = data->weight*amount;
if(sd->weight + w > sd->max_weight)
return 2;
-
+ if( itemdb_is_rune(item_data->nameid) ) {
+ int rune = pc_search_inventory(sd,item_data->nameid);
+ if( ( rune >= 0 && sd->status.inventory[rune].amount + amount > MAX_RUNE ) ||
+ ( rune == -1 && amount > MAX_RUNE )
+ ) {
+ clif_msgtable(sd->fd,0x61b);
+ return 1;
+ }
+ }
i = MAX_INVENTORY;
if( itemdb_isstackable2(data) && item_data->expire_time == 0 )
@@ -3429,7 +3410,7 @@ int pc_additem(struct map_session_data *sd,struct item *item_data,int amount)
{
if( sd->status.inventory[i].nameid == item_data->nameid && memcmp(&sd->status.inventory[i].card, &item_data->card, sizeof(item_data->card)) == 0 )
{
- if( amount > MAX_AMOUNT - sd->status.inventory[i].amount || ( data->stack.inventory && amount > data->stack.amount - sd->status.inventory[i].amount ) )
+ if( amount > MAX_AMOUNT - sd->status.inventory[i].amount )
return 5;
sd->status.inventory[i].amount += amount;
clif_additem(sd,i,amount,0);
@@ -3615,7 +3596,6 @@ int pc_isUseitem(struct map_session_data *sd,int n)
//Not consumable item
if( item->type != IT_HEALING && item->type != IT_USABLE && item->type != IT_CASH )
return 0;
- // This contradicts official behavior. Items with no scripts should be consumed regardless. [L0ne_W0lf]
if( !item->script ) //if it has no script, you can't really consume it!
return 0;
@@ -3694,6 +3674,7 @@ int pc_isUseitem(struct map_session_data *sd,int n)
if( nameid == 12243 && sd->md->db->lv < 80 )
return 0;
break;
+
case 12213: //Neuralizer
if( !map[sd->bl.m].flag.reset )
return 0;
@@ -3703,7 +3684,15 @@ int pc_isUseitem(struct map_session_data *sd,int n)
if( nameid >= 12153 && nameid <= 12182 && sd->md != NULL )
return 0; // Mercenary Scrolls
- if (nameid >= 12725 && nameid <= 12733 && !pc_isUseitem_check_runeskill(sd, sd->status.inventory[n].nameid) )
+ /**
+ * Only Rune Knights may use runes
+ **/
+ if( itemdb_is_rune(nameid) && (sd->class_&MAPID_THIRDMASK) != MAPID_RUNE_KNIGHT )
+ return 0;
+ /**
+ * Only GCross may use poisons
+ **/
+ else if( itemdb_is_poison(nameid) && (sd->class_&MAPID_THIRDMASK) != MAPID_GUILLOTINE_CROSS )
return 0;
//added item_noequip.txt items check by Maya&[Lupus]
@@ -3729,13 +3718,14 @@ int pc_isUseitem(struct map_session_data *sd,int n)
(item->class_base[sd->class_&JOBL_2_1?1:(sd->class_&JOBL_2_2?2:0)])
))
return 0;
-
- //Not usable by upper class. [Skotlex]
- if(!(
- (1<<(sd->class_&JOBL_UPPER?1:(sd->class_&JOBL_BABY?2:0))) &
- item->class_upper
- ))
+ //Not usable by upper class. [Inkfish]
+ while( 1 ) {
+ if( item->class_upper&1 && !(sd->class_&(JOBL_UPPER|JOBL_THIRD|JOBL_BABY)) ) break;
+ if( item->class_upper&2 && sd->class_&(JOBL_UPPER|JOBL_THIRD) ) break;
+ if( item->class_upper&4 && sd->class_&JOBL_BABY ) break;
+ if( item->class_upper&8 && sd->class_&JOBL_THIRD ) break;
return 0;
+ }
//Dead Branch & Bloody Branch & Porings Box
if((log_config.branch > 0) && (nameid == 604 || nameid == 12103 || nameid == 12109))
@@ -3744,45 +3734,6 @@ int pc_isUseitem(struct map_session_data *sd,int n)
return 1;
}
-
-int pc_isUseitem_check_runeskill(TBL_PC *sd, int nameid)
-{
- struct {
- int runeid;
- int skillid;
- } rune2skill_table[] = {
- { 12725, RK_REFRESH },
- { 12726, RK_CRUSHSTRIKE },
- { 12727, RK_MILLENNIUMSHIELD },
- { 12728, RK_VITALITYACTIVATION },
- { 12729, RK_FIGHTINGSPIRIT },
- { 12730, RK_ABUNDANCE },
- { 12731, RK_GIANTGROWTH },
- { 12732, RK_STORMBLAST },
- { 12733, RK_STONEHARDSKIN },
- };
-
- int i;
- int skillid;
-
- nullpo_retr(0, sd);
-
- ARR_FIND(0, ARRAYLENGTH(rune2skill_table), i, rune2skill_table[i].runeid == nameid);
- if ( i == ARRAYLENGTH(rune2skill_table) ) {
- ShowError("pc_isUseitem_check_runeskill: rune %d skill not found.\n", nameid);
- return 0;
- }
-
- skillid = rune2skill_table[i].skillid;
- if ( battle_config.rune_block_by_skill && skillnotok(skillid, sd) )
- return 0;
- if ( battle_config.rune_block_by_status && status_skill2sc(skillid) != SC_NONE && sd->sc.data[status_skill2sc(skillid)] )
- return 0;
-
- return 1;
-}
-
-
/*==========================================
* ƒAƒCƒeƒ€‚ðŽg‚¤
*------------------------------------------*/
@@ -3904,11 +3855,6 @@ int pc_cart_additem(struct map_session_data *sd,struct item *item_data,int amoun
return 1;
data = itemdb_search(item_data->nameid);
- if( data->stack.cart && amount > data->stack.amount )
- {// item stack limitation
- return 1;
- }
-
if( !itemdb_cancartstore(item_data, pc_isGM(sd)) )
{ // Check item trade restrictions [Skotlex]
clif_displaymessage (sd->fd, msg_txt(264));
@@ -3929,7 +3875,7 @@ int pc_cart_additem(struct map_session_data *sd,struct item *item_data,int amoun
if( i < MAX_CART )
{// item already in cart, stack it
- if( amount > MAX_AMOUNT - sd->status.cart[i].amount || ( data->stack.cart && amount > data->stack.amount - sd->status.cart[i].amount ) )
+ if(sd->status.cart[i].amount+amount > MAX_AMOUNT)
return 1; // no room
sd->status.cart[i].amount+=amount;
@@ -4575,21 +4521,6 @@ int pc_jobid2mapid(unsigned short b_class)
case JOB_ALCHEMIST: return MAPID_ALCHEMIST;
case JOB_ROGUE: return MAPID_ROGUE;
case JOB_SOUL_LINKER: return MAPID_SOUL_LINKER;
- //3_1 classes
- case JOB_RUNE_KNIGHT: return MAPID_RUNE_KNIGHT;
- case JOB_WARLOCK: return MAPID_WARLOCK;
- case JOB_RANGER: return MAPID_RANGER;
- case JOB_ARCHBISHOP: return MAPID_ARCHBISHOP;
- case JOB_MECHANIC: return MAPID_MECHANIC;
- case JOB_GUILLOTINE_CROSS: return MAPID_GUILLOTINE_CROSS;
- //3_2 classes
- case JOB_ROYAL_GUARD: return MAPID_ROYAL_GUARD;
- case JOB_SORCERER: return MAPID_SORCERER;
- case JOB_MINSTREL:
- case JOB_WANDERER: return MAPID_MINSTRELWANDERER;
- case JOB_SURA: return MAPID_SURA;
- case JOB_GENETIC: return MAPID_GENETIC;
- case JOB_SHADOW_CHASER: return MAPID_SHADOW_CHASER;
//1st: advanced
case JOB_NOVICE_HIGH: return MAPID_NOVICE_HIGH;
case JOB_SWORDMAN_HIGH: return MAPID_SWORDMAN_HIGH;
@@ -4613,21 +4544,6 @@ int pc_jobid2mapid(unsigned short b_class)
case JOB_CHAMPION: return MAPID_CHAMPION;
case JOB_CREATOR: return MAPID_CREATOR;
case JOB_STALKER: return MAPID_STALKER;
- //3_1 advanced
- case JOB_RUNE_KNIGHT_H: return MAPID_RUNE_KNIGHT_H;
- case JOB_WARLOCK_H: return MAPID_WARLOCK_H;
- case JOB_RANGER_H: return MAPID_RANGER_H;
- case JOB_ARCHBISHOP_H: return MAPID_ARCHBISHOP_H;
- case JOB_MECHANIC_H: return MAPID_MECHANIC_H;
- case JOB_GUILLOTINE_CROSS_H:return MAPID_GUILLOTINE_CROSS_H;
- //3_2 advanced
- case JOB_ROYAL_GUARD_H: return MAPID_ROYAL_GUARD_H;
- case JOB_SORCERER_H: return MAPID_SORCERER_H;
- case JOB_MINSTREL_H:
- case JOB_WANDERER_H: return MAPID_MINSTRELWANDERER_H;
- case JOB_SURA_H: return MAPID_SURA_H;
- case JOB_GENETIC_H: return MAPID_GENETIC_H;
- case JOB_SHADOW_CHASER_H: return MAPID_SHADOW_CHASER_H;
//1-1 baby
case JOB_BABY: return MAPID_BABY;
case JOB_BABY_SWORDMAN: return MAPID_BABY_SWORDMAN;
@@ -4652,21 +4568,36 @@ int pc_jobid2mapid(unsigned short b_class)
case JOB_BABY_MONK: return MAPID_BABY_MONK;
case JOB_BABY_ALCHEMIST: return MAPID_BABY_ALCHEMIST;
case JOB_BABY_ROGUE: return MAPID_BABY_ROGUE;
- //3_1 baby classes
- case JOB_BABY_RUNE: return MAPID_BABY_RUNE;
- case JOB_BABY_WARLOCK: return MAPID_BABY_WARLOCK;
- case JOB_BABY_RANGER: return MAPID_BABY_RANGER;
- case JOB_BABY_BISHOP: return MAPID_BABY_BISHOP;
- case JOB_BABY_MECHANIC: return MAPID_BABY_MECHANIC;
- case JOB_BABY_CROSS: return MAPID_BABY_CROSS;
- //3_2 baby classes
- case JOB_BABY_GUARD: return MAPID_BABY_GUARD;
- case JOB_BABY_SORCERER: return MAPID_BABY_SORCERER;
- case JOB_BABY_WANDERER:
- case JOB_BABY_MINSTREL: return MAPID_BABY_MINSTRELWANDERER;
- case JOB_BABY_SURA: return MAPID_BABY_SURA;
- case JOB_BABY_GENETIC: return MAPID_BABY_GENETIC;
- case JOB_BABY_CHASER: return MAPID_BABY_CHASER;
+ //3.1 non-trans
+ case JOB_RUNE_KNIGHT: return MAPID_RUNE_KNIGHT;
+ case JOB_WARLOCK: return MAPID_WARLOCK;
+ case JOB_RANGER: return MAPID_RANGER;
+ case JOB_ARCH_BISHOP: return MAPID_ARCH_BISHOP;
+ case JOB_MECHANIC: return MAPID_MECHANIC;
+ case JOB_GUILLOTINE_CROSS: return MAPID_GUILLOTINE_CROSS;
+ //3.1 trans
+ case JOB_RUNE_KNIGHT_T: return MAPID_RUNE_KNIGHT_T;
+ case JOB_WARLOCK_T: return MAPID_WARLOCK_T;
+ case JOB_RANGER_T: return MAPID_RANGER_T;
+ case JOB_ARCH_BISHOP_T: return MAPID_ARCH_BISHOP_T;
+ case JOB_MECHANIC_T: return MAPID_MECHANIC_T;
+ case JOB_GUILLOTINE_CROSS_T:return MAPID_GUILLOTINE_CROSS_T;
+ //3.2 non-trans
+ case JOB_ROYAL_GUARD: return MAPID_ROYAL_GUARD;
+ case JOB_SORCERER: return MAPID_SORCERER;
+ case JOB_MINSTREL: return MAPID_MINSTRELWANDERER;
+ case JOB_WANDERER: return MAPID_MINSTRELWANDERER;
+ case JOB_SURA: return MAPID_SURA;
+ case JOB_GENETIC: return MAPID_GENETIC;
+ case JOB_SHADOW_CHASER: return MAPID_SHADOW_CHASER;
+ //3.2 trans
+ case JOB_ROYAL_GUARD_T: return MAPID_ROYAL_GUARD_T;
+ case JOB_SORCERER_T: return MAPID_SORCERER_T;
+ case JOB_MINSTREL_T: return MAPID_MINSTRELWANDERER_T;
+ case JOB_WANDERER_T: return MAPID_MINSTRELWANDERER_T;
+ case JOB_SURA_T: return MAPID_SURA_T;
+ case JOB_GENETIC_T: return MAPID_GENETIC_T;
+ case JOB_SHADOW_CHASER_T: return MAPID_SHADOW_CHASER_T;
default:
return -1;
}
@@ -4708,20 +4639,6 @@ int pc_mapid2jobid(unsigned short class_, int sex)
case MAPID_ALCHEMIST: return JOB_ALCHEMIST;
case MAPID_ROGUE: return JOB_ROGUE;
case MAPID_SOUL_LINKER: return JOB_SOUL_LINKER;
- //3_1 classes
- case MAPID_RUNE_KNIGHT: return JOB_RUNE_KNIGHT;
- case MAPID_WARLOCK: return JOB_WARLOCK;
- case MAPID_RANGER: return JOB_RANGER;
- case MAPID_ARCHBISHOP: return JOB_ARCHBISHOP;
- case MAPID_MECHANIC: return JOB_MECHANIC;
- case MAPID_GUILLOTINE_CROSS:return JOB_GUILLOTINE_CROSS;
- //3_2 classes
- case MAPID_ROYAL_GUARD: return JOB_ROYAL_GUARD;
- case MAPID_SORCERER: return JOB_SORCERER;
- case MAPID_MINSTRELWANDERER:return sex?JOB_MINSTREL:JOB_WANDERER;
- case MAPID_SURA: return JOB_SURA;
- case MAPID_GENETIC: return JOB_GENETIC;
- case MAPID_SHADOW_CHASER: return JOB_SHADOW_CHASER;
//1st: advanced
case MAPID_NOVICE_HIGH: return JOB_NOVICE_HIGH;
case MAPID_SWORDMAN_HIGH: return JOB_SWORDMAN_HIGH;
@@ -4744,20 +4661,6 @@ int pc_mapid2jobid(unsigned short class_, int sex)
case MAPID_CHAMPION: return JOB_CHAMPION;
case MAPID_CREATOR: return JOB_CREATOR;
case MAPID_STALKER: return JOB_STALKER;
- //3_1 advanced
- case MAPID_RUNE_KNIGHT_H: return JOB_RUNE_KNIGHT_H;
- case MAPID_WARLOCK_H: return JOB_WARLOCK_H;
- case MAPID_RANGER_H: return JOB_RANGER_H;
- case MAPID_ARCHBISHOP_H: return JOB_ARCHBISHOP_H;
- case MAPID_MECHANIC_H: return JOB_MECHANIC_H;
- case MAPID_GUILLOTINE_CROSS_H: return JOB_GUILLOTINE_CROSS_H;
- //3_2 advanced
- case MAPID_ROYAL_GUARD_H: return JOB_ROYAL_GUARD_H;
- case MAPID_SORCERER_H: return JOB_SORCERER_H;
- case MAPID_MINSTRELWANDERER_H: return sex?JOB_MINSTREL_H:JOB_WANDERER_H;
- case MAPID_SURA_H: return JOB_SURA_H;
- case MAPID_GENETIC_H: return JOB_GENETIC_H;
- case MAPID_SHADOW_CHASER_H: return JOB_SHADOW_CHASER_H;
//1-1 baby
case MAPID_BABY: return JOB_BABY;
case MAPID_BABY_SWORDMAN: return JOB_BABY_SWORDMAN;
@@ -4781,20 +4684,34 @@ int pc_mapid2jobid(unsigned short class_, int sex)
case MAPID_BABY_MONK: return JOB_BABY_MONK;
case MAPID_BABY_ALCHEMIST: return JOB_BABY_ALCHEMIST;
case MAPID_BABY_ROGUE: return JOB_BABY_ROGUE;
- //3_1 baby classes
- case MAPID_BABY_RUNE: return JOB_BABY_RUNE;
- case MAPID_BABY_WARLOCK: return JOB_BABY_WARLOCK;
- case MAPID_BABY_RANGER: return JOB_BABY_RANGER;
- case MAPID_BABY_BISHOP: return JOB_BABY_BISHOP;
- case MAPID_BABY_MECHANIC: return JOB_BABY_MECHANIC;
- case MAPID_BABY_CROSS: return JOB_BABY_CROSS;
- //3_2 baby classes
- case MAPID_BABY_GUARD: return JOB_BABY_GUARD;
- case MAPID_BABY_SORCERER: return JOB_BABY_SORCERER;
- case MAPID_BABY_MINSTRELWANDERER: return sex?JOB_BABY_MINSTREL:JOB_BABY_WANDERER;
- case MAPID_BABY_SURA: return JOB_BABY_SURA;
- case MAPID_BABY_GENETIC: return JOB_BABY_GENETIC;
- case MAPID_BABY_CHASER: return JOB_BABY_CHASER;
+ //3.1 non-trans
+ case MAPID_RUNE_KNIGHT: return JOB_RUNE_KNIGHT;
+ case MAPID_WARLOCK: return JOB_WARLOCK;
+ case MAPID_RANGER: return JOB_RANGER;
+ case MAPID_ARCH_BISHOP: return JOB_ARCH_BISHOP;
+ case MAPID_MECHANIC: return JOB_MECHANIC;
+ case MAPID_GUILLOTINE_CROSS:return JOB_GUILLOTINE_CROSS;
+ //3.1 trans
+ case MAPID_RUNE_KNIGHT_T: return JOB_RUNE_KNIGHT_T;
+ case MAPID_WARLOCK_T: return JOB_WARLOCK_T;
+ case MAPID_RANGER_T: return JOB_RANGER_T;
+ case MAPID_ARCH_BISHOP_T: return JOB_ARCH_BISHOP_T;
+ case MAPID_MECHANIC_T: return JOB_MECHANIC_T;
+ case MAPID_GUILLOTINE_CROSS_T:return JOB_GUILLOTINE_CROSS_T;
+ //3.2 non-trans
+ case MAPID_ROYAL_GUARD: return JOB_ROYAL_GUARD;
+ case MAPID_SORCERER: return JOB_SORCERER;
+ case MAPID_MINSTRELWANDERER:return sex?JOB_MINSTREL:JOB_WANDERER;
+ case MAPID_SURA: return JOB_SURA;
+ case MAPID_GENETIC: return JOB_GENETIC;
+ case MAPID_SHADOW_CHASER: return JOB_SHADOW_CHASER;
+ //3.2 trans
+ case MAPID_ROYAL_GUARD_T: return JOB_ROYAL_GUARD_T;
+ case MAPID_SORCERER_T: return JOB_SORCERER_T;
+ case MAPID_MINSTRELWANDERER_T:return sex?JOB_MINSTREL_T:JOB_WANDERER_T;
+ case MAPID_SURA_T: return JOB_SURA_T;
+ case MAPID_GENETIC_T: return JOB_GENETIC_T;
+ case MAPID_SHADOW_CHASER_T: return JOB_SHADOW_CHASER_T;
default:
return -1;
}
@@ -4922,86 +4839,9 @@ const char* job_name(int class_)
return msg_txt(617);
case JOB_SOUL_LINKER:
return msg_txt(618);
-
- case JOB_RUNE_KNIGHT:
- case JOB_WARLOCK:
- case JOB_RANGER:
- case JOB_ARCHBISHOP:
- case JOB_MECHANIC:
- case JOB_GUILLOTINE_CROSS:
- return msg_txt(625 - JOB_RUNE_KNIGHT +class_);
-
- case JOB_RUNE_KNIGHT_H:
- case JOB_WARLOCK_H:
- case JOB_RANGER_H:
- case JOB_ARCHBISHOP_H:
- case JOB_MECHANIC_H:
- case JOB_GUILLOTINE_CROSS_H:
- return msg_txt(625 - JOB_RUNE_KNIGHT_H +class_);
-
- case JOB_ROYAL_GUARD:
- case JOB_SORCERER:
- case JOB_MINSTREL:
- case JOB_WANDERER:
- case JOB_SURA:
- case JOB_GENETIC:
- case JOB_SHADOW_CHASER:
- return msg_txt(631 - JOB_ROYAL_GUARD +class_);
-
- case JOB_ROYAL_GUARD_H:
- case JOB_SORCERER_H:
- case JOB_MINSTREL_H:
- case JOB_WANDERER_H:
- case JOB_SURA_H:
- case JOB_GENETIC_H:
- case JOB_SHADOW_CHASER_H:
- return msg_txt(631 - JOB_ROYAL_GUARD_H +class_);
-
- case JOB_RUNE_KNIGHT2:
- case JOB_RUNE_KNIGHT_H2:
- return msg_txt(625);
-
- case JOB_ROYAL_GUARD2:
- case JOB_ROYAL_GUARD_H2:
- return msg_txt(631);
-
- case JOB_RANGER2:
- case JOB_RANGER_H2:
- return msg_txt(627);
-
- case JOB_MECHANIC2:
- case JOB_MECHANIC_H2:
- return msg_txt(629);
-
- case JOB_BABY_RUNE:
- case JOB_BABY_WARLOCK:
- case JOB_BABY_RANGER:
- case JOB_BABY_BISHOP:
- case JOB_BABY_MECHANIC:
- case JOB_BABY_CROSS:
- case JOB_BABY_GUARD:
- case JOB_BABY_SORCERER:
- case JOB_BABY_MINSTREL:
- case JOB_BABY_WANDERER:
- case JOB_BABY_SURA:
- case JOB_BABY_GENETIC:
- case JOB_BABY_CHASER:
- return msg_txt(638 - JOB_BABY_RUNE +class_);
-
- case JOB_BABY_RUNE2:
- return msg_txt(638);
-
- case JOB_BABY_GUARD2:
- return msg_txt(644);
-
- case JOB_BABY_RANGER2:
- return msg_txt(640);
-
- case JOB_BABY_MECHANIC2:
- return msg_txt(642);
-
+
default:
- return msg_txt(651);
+ return msg_txt(650);
}
}
@@ -5150,7 +4990,7 @@ int pc_checkjoblevelup(struct map_session_data *sd)
status_calc_pc(sd,0);
clif_misceffect(&sd->bl,1);
if (pc_checkskill(sd, SG_DEVIL) && !pc_nextjobexp(sd))
- clif_status_change(&sd->bl,SI_DEVIL, 1, 0); //Permanent blind effect from SG_DEVIL.
+ clif_status_change(&sd->bl,SI_DEVIL, 1, 0, 0, 0, 1); //Permanent blind effect from SG_DEVIL.
npc_script_event(sd, NPCE_JOBLVUP);
return 1;
@@ -5191,7 +5031,6 @@ int pc_gainexp(struct map_session_data *sd, struct block_list *src, unsigned int
{
float nextbp=0, nextjp=0;
unsigned int nextb=0, nextj=0;
- int leveldiff = src ? ( sd->status.base_level - status_get_lv(src) ) : 0, modifier = 100;
nullpo_ret(sd);
if(sd->bl.prev == NULL || pc_isdead(sd))
@@ -5230,52 +5069,6 @@ int pc_gainexp(struct map_session_data *sd, struct block_list *src, unsigned int
}
}
- /*Adjust exp by mob level difference vs player level.
- Higher level creatures give more exp, lower level creatures give less
- and you'll get normal experience if they're very close to your level.
-
- -2 to +5 = 100%
- -3 = 105%
- -4 = 110%
- -5 = 115%
- -6 = 120%
- -7 = 125%
- -8 = 130%
- -9 = 135%
- -10 = 140%
- -11 or lower = 40%
-
- +6 to +10 = 95%
- +11 to +15 = 90%
- +15 to +20 = 85%
- +21 to +25 = 60%
- +26 to +30 = 35%
- +31 or higher = 10% */
-
- if (leveldiff >= 6 && leveldiff <= 10)
- modifier = -5;
- if (leveldiff >= 11 && leveldiff <= 15)
- modifier = -10;
- if (leveldiff >= 16 && leveldiff <= 20)
- modifier = -15;
- if (leveldiff >= 21 && leveldiff <= 25)
- modifier = -40;
- if (leveldiff >= 26 && leveldiff <= 30)
- modifier = -65;
- if (leveldiff > 30)
- modifier = -90;
- if (leveldiff <= -3 && leveldiff >= -10)
- modifier = ((leveldiff * -5)-10);
- if (leveldiff <= -10)
- modifier = -60;
-
- if ( modifier < 0 )
- modifier = modifier * -1;
- if ( modifier != 100 ) {
- base_exp = (int)((float)base_exp - (((float)modifier/100) * (float)base_exp));
- job_exp = (int)((float)job_exp - (((float)modifier/100) * (float)job_exp));
- }
-
//Cap exp to the level up requirement of the previous level when you are at max level, otherwise cap at UINT_MAX (this is required for some S. Novice bonuses). [Skotlex]
if (base_exp) {
nextb = nextb?UINT_MAX:pc_thisbaseexp(sd);
@@ -5410,12 +5203,7 @@ int pc_gets_status_point(int level)
if (battle_config.use_statpoint_table) //Use values from "db/statpoint.txt"
return (statp[level+1] - statp[level]);
else //Default increase
- {
- if (level < 100)
- return ((level+15) / 5);
- else
- return ((level+130) / 10);
- }
+ return ((level+15) / 5);
}
/// Returns the number of stat points needed to change the specified stat by val.
@@ -5429,18 +5217,17 @@ int pc_need_status_point(struct map_session_data* sd, int type, int val)
return 0;
low = pc_getstat(sd,type);
- if ( low >= pc_maxparameter(sd) && val > 0 )
- return 0; // Official servers show '0' when max is reached
high = low + val;
if ( val < 0 )
swap(low, high);
for ( ; low < high; low++ )
- if( low < 100 )
- sp += ( 1 + (low + 9) / 10 );
- else
- sp += ( 16 + 4*((low - 100) / 5) );
+#if RRMODE //Renewal Stat Cost Formula
+ sp += (low < 100) ? (2 + (low - 1) / 10) : (16 + 4 * ((low - 100) / 5));
+#else
+ sp += ( 1 + (low + 9) / 10 );
+#endif
return sp;
}
@@ -5789,9 +5576,16 @@ int pc_resetskill(struct map_session_data* sd, int flag)
i &= ~OPTION_CART;
if( i&OPTION_FALCON && pc_checkskill(sd, HT_FALCON) )
i &= ~OPTION_FALCON;
- if( i&OPTION_DRAGON && pc_checkskill(sd, KN_RIDING) ) //RK_DRAGONTRAINING not needed for riding (bug?), assuming KN_RIDING is.
- i&=~OPTION_DRAGON;
-
+ if( i&OPTION_DRAGON && pc_checkskill(sd, RK_DRAGONTRAINING) )
+ i &= ~OPTION_DRAGON;
+ if( i&OPTION_WUG && pc_checkskill(sd, RA_WUGMASTERY) )
+ i &= ~OPTION_WUG;
+ if( i&OPTION_WUGRIDER && pc_checkskill(sd, RA_WUGRIDER) )
+ i &= ~OPTION_WUGRIDER;
+ if( i&OPTION_MADOGEAR && ( sd->class_&MAPID_THIRDMASK ) == MAPID_MECHANIC )
+ i &= ~OPTION_MADOGEAR;
+ if( i&OPTION_MOUNTING )
+ i &= ~OPTION_MOUNTING;
if( i != sd->sc.option )
pc_setoption(sd, i);
@@ -6565,13 +6359,6 @@ int pc_itemheal(struct map_session_data *sd,int itemid, int hp,int sp)
sp -= sp * sd->sc.data[SC_CRITICALWOUND]->val2 / 100;
}
- if (sd->sc.data[SC_VITALITYACTIVATION])
- {
- hp += hp * sd->sc.data[SC_VITALITYACTIVATION]->val2 / 100; //HP +50%
- sp -= sp * sd->sc.data[SC_VITALITYACTIVATION]->val3 / 100; //SP -50%
- }
-
-
return status_heal(&sd->bl, hp, sp, 1);
}
@@ -6690,14 +6477,6 @@ int pc_jobchange(struct map_session_data *sd,int job, int upper)
clif_updatestatus(sd,SP_JOBEXP);
clif_updatestatus(sd,SP_NEXTJOBEXP);
- //New job may have new max_parameter, so update stat points needed to raise a stat
- clif_updatestatus(sd,SP_USTR);
- clif_updatestatus(sd,SP_UAGI);
- clif_updatestatus(sd,SP_UVIT);
- clif_updatestatus(sd,SP_UINT);
- clif_updatestatus(sd,SP_UDEX);
- clif_updatestatus(sd,SP_ULUK);
-
for(i=0;i<EQI_MAX;i++) {
if(sd->equip_index[i] >= 0)
if(!pc_isequip(sd,sd->equip_index[i]))
@@ -6726,9 +6505,14 @@ int pc_jobchange(struct map_session_data *sd,int job, int upper)
i&=~OPTION_CART;
if(i&OPTION_FALCON && !pc_checkskill(sd, HT_FALCON))
i&=~OPTION_FALCON;
- if(i&OPTION_DRAGON && !pc_checkskill(sd, KN_RIDING)) //RK_DRAGONTRAINING not needed for riding (bug?), assuming KN_RIDING is.
+ if( i&OPTION_DRAGON && !pc_checkskill(sd,RK_DRAGONTRAINING) )
i&=~OPTION_DRAGON;
-
+ if( i&OPTION_WUGRIDER && !pc_checkskill(sd,RA_WUGMASTERY) )
+ i&=~OPTION_WUGRIDER;
+ if( i&OPTION_WUG && !pc_checkskill(sd,RA_WUGMASTERY) )
+ i&=~OPTION_WUG;
+ if( i&OPTION_MADOGEAR ) //You do not need a skill for this.
+ i&=~OPTION_MADOGEAR;
if(i != sd->sc.option)
pc_setoption(sd, i);
@@ -6856,19 +6640,15 @@ int pc_setoption(struct map_session_data *sd,int type)
sd->sc.option=type;
clif_changeoption(&sd->bl);
- if (((type&OPTION_RIDING && !(p_type&OPTION_RIDING)) // Knight and Crusader/Royal Guard
- || (type&OPTION_DRAGON && !(p_type&OPTION_DRAGON))) // Rune Knight Dragon
- && (sd->class_&MAPID_BASEMASK) == MAPID_SWORDMAN)
- { //We are going to mount. [Skotlex]
+ if( (type&OPTION_RIDING && !(p_type&OPTION_RIDING)) || (type&OPTION_DRAGON && !(p_type&OPTION_DRAGON) && pc_checkskill(sd,RK_DRAGONTRAINING) > 0) )
+ { // Mounting
clif_status_load(&sd->bl,SI_RIDING,1);
- status_calc_pc(sd,0); //Mounting/Umounting affects walk and attack speeds.
+ status_calc_pc(sd,0);
}
- else if (((!(type&OPTION_RIDING) && p_type&OPTION_RIDING) //Knight and Crusader/Royal Guard
- || (!(type&OPTION_DRAGON) && p_type&OPTION_DRAGON)) // Rune Knight Dragon
- && (sd->class_&MAPID_BASEMASK) == MAPID_SWORDMAN)
- { //We are going to dismount.
+ else if( (!(type&OPTION_RIDING) && p_type&OPTION_RIDING) || (!(type&OPTION_DRAGON) && p_type&OPTION_DRAGON && pc_checkskill(sd,RK_DRAGONTRAINING) > 0) )
+ { // Dismount
clif_status_load(&sd->bl,SI_RIDING,0);
- status_calc_pc(sd,0); //Mounting/Umounting affects walk and attack speeds.
+ status_calc_pc(sd,0);
}
if(type&OPTION_CART && !(p_type&OPTION_CART))
@@ -6885,11 +6665,49 @@ int pc_setoption(struct map_session_data *sd,int type)
status_calc_pc(sd,0); //Remove speed penalty.
}
+ if (type&OPTION_MOUNTING && !(p_type&OPTION_MOUNTING)) {
+ clif_status_load_notick(&sd->bl,SI_ALL_RIDING,2,1,0,0);
+ status_calc_pc(sd,0);
+ } else if (!(type&OPTION_MOUNTING) && p_type&OPTION_MOUNTING) {
+ clif_status_load_notick(&sd->bl,SI_ALL_RIDING,0,0,0,0);
+ status_calc_pc(sd,0);
+ }
+
+
if (type&OPTION_FALCON && !(p_type&OPTION_FALCON)) //Falcon ON
clif_status_load(&sd->bl,SI_FALCON,1);
else if (!(type&OPTION_FALCON) && p_type&OPTION_FALCON) //Falcon OFF
clif_status_load(&sd->bl,SI_FALCON,0);
+ if( (sd->class_&MAPID_THIRDMASK) == MAPID_RANGER ) {
+ if( type&OPTION_WUGRIDER && !(p_type&OPTION_WUGRIDER) ) { // Mounting
+ clif_status_load(&sd->bl,SI_WUGRIDER,1);
+ status_calc_pc(sd,0);
+ } else if( !(type&OPTION_WUGRIDER) && p_type&OPTION_WUGRIDER ) { // Dismount
+ clif_status_load(&sd->bl,SI_WUGRIDER,0);
+ status_calc_pc(sd,0);
+ }
+ }
+ if( (sd->class_&MAPID_THIRDMASK) == MAPID_MECHANIC ) {
+ if( type&OPTION_MADOGEAR && !(p_type&OPTION_MADOGEAR) ) {
+ status_calc_pc(sd, 0);
+ status_change_end(&sd->bl,SC_MAXIMIZEPOWER,-1);
+ status_change_end(&sd->bl,SC_OVERTHRUST,-1);
+ status_change_end(&sd->bl,SC_WEAPONPERFECTION,-1);
+ status_change_end(&sd->bl,SC_ADRENALINE,-1);
+ status_change_end(&sd->bl,SC_CARTBOOST,-1);
+ status_change_end(&sd->bl,SC_MELTDOWN,-1);
+ status_change_end(&sd->bl,SC_MAXOVERTHRUST,-1);
+ } else if( !(type&OPTION_MADOGEAR) && p_type&OPTION_MADOGEAR ) {
+ status_calc_pc(sd, 0);
+ status_change_end(&sd->bl,SC_SHAPESHIFT,-1);
+ status_change_end(&sd->bl,SC_HOVERING,-1);
+ status_change_end(&sd->bl,SC_ACCELERATION,-1);
+ status_change_end(&sd->bl,SC_OVERHEAT_LIMITPOINT,-1);
+ status_change_end(&sd->bl,SC_OVERHEAT,-1);
+ }
+ }
+
if (type&OPTION_FLYING && !(p_type&OPTION_FLYING))
new_look = JOB_STAR_GLADIATOR2;
else if (!(type&OPTION_FLYING) && p_type&OPTION_FLYING)
@@ -6976,29 +6794,13 @@ int pc_setriding(TBL_PC* sd, int flag)
if( pc_checkskill(sd,KN_RIDING) > 0 ) // ƒ‰ƒCƒfƒBƒ“ƒOƒXƒLƒ‹ŠŽ
pc_setoption(sd, sd->sc.option|OPTION_RIDING);
} else if( pc_isriding(sd) ){
- pc_setoption(sd, sd->sc.option&~OPTION_RIDING);
+ pc_setoption(sd, sd->sc.option&~OPTION_RIDING);
}
return 0;
}
/*==========================================
- * Enable Riding Dragons for Rune Knight class.
- *------------------------------------------*/
-int pc_setdragon(TBL_PC* sd, int flag, int color)
-{
- int dragon[5] = {OPTION_DRAGON1,OPTION_DRAGON2,OPTION_DRAGON3,OPTION_DRAGON4,OPTION_DRAGON5};
-
- if( flag ){
- if( pc_checkskill(sd,KN_RIDING) > 0 ) //Possible to rent dragons without RK_DRAGONTRAINING; Source, iRO. (Bug?)
- pc_setoption(sd, sd->sc.option|dragon[color]);
- } else if( pc_isdragon(sd) ){
- pc_setoption(sd, sd->sc.option&~OPTION_DRAGON);
- }
-
- return 0;
-}
-/*==========================================
* ƒAƒCƒeƒ€ƒhƒƒbƒv‰Â•s‰Â”»’è
*------------------------------------------*/
int pc_candrop(struct map_session_data *sd,struct item *item)
@@ -8149,6 +7951,30 @@ void pc_setstand(struct map_session_data *sd){
sd->state.dead_sit = sd->vd.dead_sit = 0;
}
+/**
+ * Mechanic (MADO GEAR)
+ **/
+void pc_overheat(struct map_session_data *sd, int val) {
+ int heat = val, skill,
+ limit[] = { 10, 20, 28, 46, 66 };
+
+ if( !(sd->sc.option&OPTION_MADOGEAR) || sd->sc.data[SC_OVERHEAT] )
+ return; // already burning
+
+ skill = cap_value(pc_checkskill(sd,NC_MAINFRAME),0,4);
+ if( sd->sc.data[SC_OVERHEAT_LIMITPOINT] ) {
+ heat += sd->sc.data[SC_OVERHEAT_LIMITPOINT]->val1;
+ status_change_end(&sd->bl,SC_OVERHEAT_LIMITPOINT,-1);
+ }
+
+ heat = max(0,heat); // Avoid negative HEAT
+ if( heat >= limit[skill] )
+ sc_start(&sd->bl,SC_OVERHEAT,100,0,1000);
+ else
+ sc_start(&sd->bl,SC_OVERHEAT_LIMITPOINT,100,heat,30000);
+
+ return;
+}
int pc_split_str(char *str,char **val,int num)
{
int i;
@@ -8408,7 +8234,11 @@ int pc_readdb(void)
// ƒXƒLƒ‹ƒcƒŠ?
memset(statp,0,sizeof(statp));
i=1;
+#if RRMODE
+ sprintf(line, "%s/statpoint_renewal.txt", db_path);
+#else
sprintf(line, "%s/statpoint.txt", db_path);
+#endif
fp=fopen(line,"r");
if(fp == NULL){
ShowWarning("Can't read '"CL_WHITE"%s"CL_RESET"'... Generating DB.\n",line);
@@ -8427,7 +8257,11 @@ int pc_readdb(void)
i++;
}
fclose(fp);
+ #if RRMODE
+ ShowStatus("Done reading '"CL_WHITE"%s"CL_RESET"'.\n","statpoint_renewal.txt");
+ #else
ShowStatus("Done reading '"CL_WHITE"%s"CL_RESET"'.\n","statpoint.txt");
+ #endif
}
// generate the remaining parts of the db if necessary
k = battle_config.use_statpoint_table; //save setting
diff --git a/src/map/pc.h b/src/map/pc.h
index 4619af878..16c31e69c 100644
--- a/src/map/pc.h
+++ b/src/map/pc.h
@@ -21,6 +21,9 @@
#define MAX_PC_SKILL_REQUIRE 5
#define MAX_PC_FEELHATE 3
+//For Warlock
+#define MAX_SPELLBOOK 10
+
struct weapon_data {
int atkmods[3];
// all the variables except atkmods get zero'ed in each call of status_calc_pc
@@ -249,7 +252,7 @@ struct map_session_data {
struct { //skillatk raises bonus dmg% of skills, skillheal increases heal%, skillblown increases bonus blewcount for some skills.
unsigned short id;
short val;
- } skillatk[MAX_PC_BONUS], skillheal[5], skillheal2[5], skillblown[MAX_PC_BONUS], skillcast[MAX_PC_BONUS], fixedskillcast[MAX_PC_BONUS];
+ } skillatk[MAX_PC_BONUS], skillheal[5], skillheal2[5], skillblown[MAX_PC_BONUS], skillcast[MAX_PC_BONUS];
struct {
short value;
int rate;
@@ -307,9 +310,9 @@ struct map_session_data {
// zeroed vars end here.
- int castrate,fixedcastrate,delayrate,hprate,sprate,dsprate;
+ int castrate,delayrate,hprate,sprate,dsprate;
int hprecov_rate,sprecov_rate;
- int matk_rate,weapon_matk,equipment_matk;
+ int matk_rate;
int critical_rate,hit_rate,flee_rate,flee2_rate,def_rate,def2_rate,mdef_rate,mdef2_rate;
int itemid;
@@ -405,6 +408,13 @@ struct map_session_data {
bool changed; // if true, should sync with charserver on next mailbox request
} mail;
+ // Reading SpellBook
+ struct {
+ unsigned short skillid;
+ unsigned char level;
+ unsigned char points;
+ } rsb[MAX_SPELLBOOK];
+
//Quest log system [Kevin] [Inkfish]
int num_quests;
int avail_quests;
@@ -420,7 +430,24 @@ struct map_session_data {
unsigned int bg_id;
unsigned short user_font;
- int produce_itemusedid; //used to determine the type of item used when creating items via script.
+ /**
+ * For the Secure NPC Timeout option (check config/Secure.h) [RR]
+ **/
+#if SECURE_NPCTIMEOUT
+ /**
+ * ID of the timer
+ * @info
+ * - value is -1 (INVALID_TIMER constant) when not being used
+ * - timer is cancelled upon closure of the current npc's instance
+ **/
+ int npc_idle_timer;
+ /**
+ * Tick on the last recorded NPC iteration (next/menu/whatever)
+ * @info
+ * - It is updated on every NPC iteration as mentioned above
+ **/
+ unsigned int npc_idle_tick;
+#endif
// temporary debugging of bug #3504
const char* delunit_prevfile;
@@ -428,7 +455,8 @@ struct map_session_data {
};
//Update this max as necessary. 55 is the value needed for Super Baby currently
-#define MAX_SKILL_TREE 77
+//Raised to 75 due to 3rds
+#define MAX_SKILL_TREE 75
//Total number of classes (for data storage)
#define CLASS_COUNT (JOB_MAX - JOB_NOVICE_HIGH + JOB_MAX_BASIC)
@@ -528,7 +556,7 @@ enum equip_index {
#define pc_issit(sd) ( (sd)->vd.dead_sit == 2 )
#define pc_isidle(sd) ( (sd)->chatID || (sd)->state.vending || (sd)->state.buyingstore || DIFF_TICK(last_tick, (sd)->idletime) >= battle_config.idle_no_share )
#define pc_istrading(sd) ( (sd)->npc_id || (sd)->state.vending || (sd)->state.buyingstore || (sd)->state.trading )
-#define pc_cant_act(sd) ( (sd)->npc_id || (sd)->state.vending || (sd)->state.buyingstore || (sd)->chatID || ((sd)->sc.opt1 && (sd)->sc.opt1 != OPT1_BURNING) || (sd)->state.trading || (sd)->state.storage_flag )
+#define pc_cant_act(sd) ( (sd)->npc_id || (sd)->state.vending || (sd)->state.buyingstore || (sd)->chatID || (sd)->sc.opt1 || (sd)->state.trading || (sd)->state.storage_flag )
#define pc_setdir(sd,b,h) ( (sd)->ud.dir = (b) ,(sd)->head_dir = (h) )
#define pc_setchatid(sd,n) ( (sd)->chatID = n )
#define pc_ishiding(sd) ( (sd)->sc.option&(OPTION_HIDE|OPTION_CLOAK|OPTION_CHASEWALK) )
@@ -540,8 +568,12 @@ enum equip_index {
#define pc_isinvisible(sd) ( (sd)->sc.option&OPTION_INVISIBLE )
#define pc_is50overweight(sd) ( (sd)->weight*100 >= (sd)->max_weight*battle_config.natural_heal_weight_rate )
#define pc_is90overweight(sd) ( (sd)->weight*10 >= (sd)->max_weight*9 )
-#define pc_maxparameter(sd) ( ((sd)->class_&JOBL_3 ? ((sd)->class_&JOBL_BABY ? battle_config.max_baby_third_parameter : battle_config.max_third_parameter) : ((sd)->class_&JOBL_BABY ? battle_config.max_baby_parameter : battle_config.max_parameter)) )
-#define pc_isdragon(sd) ( (sd)->sc.option&OPTION_DRAGON )
+#define pc_maxparameter(sd) ( (sd)->class_&JOBL_THIRD ? battle_config.max_third_parameter : (sd)->class_&JOBL_BABY ? battle_config.max_baby_parameter : battle_config.max_parameter )
+/**
+ * Ranger
+ **/
+#define pc_iswug(sd) ( (sd)->sc.option&OPTION_WUG )
+#define pc_isridingwug(sd) ( (sd)->sc.option&OPTION_WUGRIDER )
#define pc_stop_walking(sd, type) unit_stop_walking(&(sd)->bl, type)
#define pc_stop_attack(sd) unit_stop_attack(&(sd)->bl)
@@ -554,8 +586,7 @@ enum equip_index {
( \
( (class_) >= JOB_NOVICE && (class_) < JOB_MAX_BASIC ) \
|| ( (class_) >= JOB_NOVICE_HIGH && (class_) <= JOB_SOUL_LINKER ) \
-|| ( (class_) >= JOB_RUNE_KNIGHT && (class_) <= JOB_MECHANIC_H2 ) \
-|| ( (class_) >= JOB_BABY_RUNE && (class_) < JOB_MAX ) \
+|| ( (class_) >= JOB_RUNE_KNIGHT && (class_) < JOB_MAX ) \
)
int pc_class2idx(int class_);
@@ -667,7 +698,6 @@ int pc_equipitem(struct map_session_data*,int,int);
int pc_unequipitem(struct map_session_data*,int,int);
int pc_checkitem(struct map_session_data*);
int pc_useitem(struct map_session_data*,int);
-int pc_isUseitem_check_runeskill(TBL_PC *sd, int nameid);
int pc_skillatk_bonus(struct map_session_data *sd, int skill_num);
int pc_skillheal_bonus(struct map_session_data *sd, int skill_num);
@@ -686,7 +716,6 @@ int pc_setfalcon(struct map_session_data* sd, int flag);
int pc_setriding(struct map_session_data* sd, int flag);
int pc_changelook(struct map_session_data *,int,int);
int pc_equiplookall(struct map_session_data *sd);
-int pc_setdragon(struct map_session_data* sd, int flag, int color);
int pc_readparam(struct map_session_data*,int);
int pc_setparam(struct map_session_data*,int,int);
@@ -792,5 +821,8 @@ void pc_inventory_rental_add(struct map_session_data *sd, int seconds);
int pc_read_motd(void); // [Valaris]
int pc_disguise(struct map_session_data *sd, int class_);
-
+/**
+ * Mechanic (Mado Gear)
+ **/
+void pc_overheat(struct map_session_data *sd, int val);
#endif /* _PC_H_ */
diff --git a/src/map/script.c b/src/map/script.c
index 0f3c09e1e..2ffcad83c 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -171,8 +171,16 @@ enum { LABEL_NEXTLINE=1,LABEL_START };
static unsigned char* script_buf = NULL;
static int script_pos = 0, script_size = 0;
-#define GETVALUE(buf,i) ((int)MakeDWord(MakeWord((buf)[i],(buf)[i+1]),MakeWord((buf)[i+2],0)))
-#define SETVALUE(buf,i,n) ((buf)[i]=GetByte(n,0),(buf)[i+1]=GetByte(n,1),(buf)[i+2]=GetByte(n,2))
+static inline int GETVALUE(const unsigned char* buf, int i)
+{
+ return (int)MakeDWord(MakeWord(buf[i], buf[i+1]), MakeWord(buf[i+2], 0));
+}
+static inline void SETVALUE(unsigned char* buf, int i, int n)
+{
+ buf[i] = GetByte(n, 0);
+ buf[i+1] = GetByte(n, 1);
+ buf[i+2] = GetByte(n, 2);
+}
// String buffer structures.
// str_data stores string information
@@ -317,7 +325,10 @@ enum {
MF_FOG,
MF_SAKURA,
MF_LEAVES,
- MF_RAIN, //20
+ /**
+ * No longer available, keeping here just in case it's back someday. [Ind]
+ **/
+ //MF_RAIN, //20
// 21 free
MF_NOGO = 22,
MF_CLOUDS,
@@ -3357,7 +3368,18 @@ static void script_detach_state(struct script_state* st, bool dequeue_event)
{
sd->st = st->bk_st;
sd->npc_id = st->bk_npcid;
-
+ /**
+ * For the Secure NPC Timeout option (check config/Secure.h) [RR]
+ **/
+ #if SECURE_NPCTIMEOUT
+ /**
+ * We're done with this NPC session, so we cancel the timer (if existent) and move on
+ **/
+ if( sd->npc_idle_timer != INVALID_TIMER ) {
+ delete_timer(sd->npc_idle_timer,npc_rr_secure_timeout_timer);
+ sd->npc_idle_timer = INVALID_TIMER;
+ }
+ #endif
if(st->bk_st)
{
//Remove tag for removal.
@@ -3399,6 +3421,14 @@ static void script_attach_state(struct script_state* st)
}
sd->st = st;
sd->npc_id = st->oid;
+/**
+ * For the Secure NPC Timeout option (check config/Secure.h) [RR]
+ **/
+#if SECURE_NPCTIMEOUT
+ if( sd->npc_idle_timer == INVALID_TIMER )
+ sd->npc_idle_timer = add_timer(gettick() + (SECURE_NPCTIMEOUT_INTERVAL*1000),npc_rr_secure_timeout_timer,sd->bl.id,0);
+ sd->npc_idle_tick = gettick();
+#endif
}
}
@@ -7022,8 +7052,7 @@ BUILDIN_FUNC(bonus)
case SP_ADD_SKILL_BLOW:
case SP_CASTRATE:
case SP_ADDEFF_ONSKILL:
- case SP_FIXEDCASTRATE:
- // these bonuses support skill names
+ // these bonuses support skill names
val1 = ( script_isstring(st,3) ? skill_name2id(script_getstr(st,3)) : script_getnum(st,3) );
break;
default:
@@ -7426,7 +7455,7 @@ BUILDIN_FUNC(setoption)
flag = script_getnum(st,3);
else if( !option ){// Request to remove everything.
flag = 0;
- option = OPTION_CART|OPTION_FALCON|OPTION_RIDING|OPTION_DRAGON;
+ option = OPTION_CART|OPTION_FALCON|OPTION_RIDING;
}
if( flag ){// Add option
if( option&OPTION_WEDDING && !battle_config.wedding_modifydisplay )
@@ -7542,7 +7571,7 @@ BUILDIN_FUNC(checkriding)
if( sd == NULL )
return 0;// no player attached, report source
- if( pc_isriding(sd) || pc_isdragon(sd) )
+ if( pc_isriding(sd) || sd->sc.option&OPTION_MOUNTING )
script_pushint(st, 1);
else
script_pushint(st, 0);
@@ -7571,31 +7600,6 @@ BUILDIN_FUNC(setriding)
return 0;
}
-/// Sets if the player is riding a dragon.
-/// <flag> defaults to 1
-/// <color> defaults to 0
-///
-/// setdragon <flag>{,<color>};
-/// setdragon <flag>;
-/// setdragon;
-BUILDIN_FUNC(setdragon)
-{
- int flag = 1, color = 0;
- TBL_PC* sd;
-
- sd = script_rid2sd(st);
- if( sd == NULL )
- return 0;// no player attached, report source
-
- if( script_hasdata(st,2) )
- flag = script_getnum(st,2);
- if( script_hasdata(st,3) )
- color = cap_value(script_getnum(st,3),0,4);
-
- pc_setdragon(sd, flag, color);
- return 0;
-}
-
/// Sets the save point of the player.
///
/// save "<map name>",<x>,<y>
@@ -7787,31 +7791,9 @@ BUILDIN_FUNC(produce)
sd = script_rid2sd(st);
if( sd == NULL )
return 0;
-
- if( script_hasdata(st,3) )
- { // only used with Rune Knights RK_RUNEMASTERY as part of the calculation.
- struct item_data* id = NULL;
- struct script_data* data;
-
- data = script_getdata(st,3);
- get_val(st, data);
-
- if( data_isstring(data) )
- id = itemdb_searchname(conv_str(st, data));
- else
- id = itemdb_exists(conv_num(st, data));
-
- if( id == NULL )
- {
- ShowError("buildin_produce: Invalid item '%s'.\n", script_getstr(st,3));
- return 1;
- }
- else
- sd->produce_itemusedid = id->nameid;
- }
trigger=script_getnum(st,2);
- clif_skill_produce_mix_list(sd, trigger);
+ clif_skill_produce_mix_list(sd, -1, trigger);
return 0;
}
/*==========================================
@@ -9186,7 +9168,7 @@ BUILDIN_FUNC(roclass)
}
/*==========================================
- *Œg‘Ñ—‘›z‰»‹@Žg—p
+ * Tells client to open a hatching window, used for pet incubator
*------------------------------------------*/
BUILDIN_FUNC(birthpet)
{
@@ -9634,6 +9616,7 @@ BUILDIN_FUNC(getmapflag)
switch(i) {
case MF_NOMEMO: script_pushint(st,map[m].flag.nomemo); break;
case MF_NOTELEPORT: script_pushint(st,map[m].flag.noteleport); break;
+ case MF_NOSAVE: script_pushint(st,map[m].flag.nosave); break;
case MF_NOBRANCH: script_pushint(st,map[m].flag.nobranch); break;
case MF_NOPENALTY: script_pushint(st,map[m].flag.noexppenalty); break;
case MF_NOZENYPENALTY: script_pushint(st,map[m].flag.nozenypenalty); break;
@@ -9642,23 +9625,26 @@ BUILDIN_FUNC(getmapflag)
case MF_PVP_NOGUILD: script_pushint(st,map[m].flag.pvp_noguild); break;
case MF_GVG: script_pushint(st,map[m].flag.gvg); break;
case MF_GVG_NOPARTY: script_pushint(st,map[m].flag.gvg_noparty); break;
- case MF_GVG_DUNGEON: script_pushint(st,map[m].flag.gvg_dungeon); break;
- case MF_GVG_CASTLE: script_pushint(st,map[m].flag.gvg_castle); break;
case MF_NOTRADE: script_pushint(st,map[m].flag.notrade); break;
- case MF_NODROP: script_pushint(st,map[m].flag.nodrop); break;
case MF_NOSKILL: script_pushint(st,map[m].flag.noskill); break;
case MF_NOWARP: script_pushint(st,map[m].flag.nowarp); break;
+ case MF_PARTYLOCK: script_pushint(st,map[m].flag.partylock); break;
case MF_NOICEWALL: script_pushint(st,map[m].flag.noicewall); break;
case MF_SNOW: script_pushint(st,map[m].flag.snow); break;
- case MF_CLOUDS: script_pushint(st,map[m].flag.clouds); break;
- case MF_CLOUDS2: script_pushint(st,map[m].flag.clouds2); break;
case MF_FOG: script_pushint(st,map[m].flag.fog); break;
- case MF_FIREWORKS: script_pushint(st,map[m].flag.fireworks); break;
case MF_SAKURA: script_pushint(st,map[m].flag.sakura); break;
case MF_LEAVES: script_pushint(st,map[m].flag.leaves); break;
- case MF_RAIN: script_pushint(st,map[m].flag.rain); break;
- case MF_NIGHTENABLED: script_pushint(st,map[m].flag.nightenabled); break;
+ /**
+ * No longer available, keeping here just in case it's back someday. [Ind]
+ **/
+ //case MF_RAIN: script_pushint(st,map[m].flag.rain); break;
case MF_NOGO: script_pushint(st,map[m].flag.nogo); break;
+ case MF_CLOUDS: script_pushint(st,map[m].flag.clouds); break;
+ case MF_CLOUDS2: script_pushint(st,map[m].flag.clouds2); break;
+ case MF_FIREWORKS: script_pushint(st,map[m].flag.fireworks); break;
+ case MF_GVG_CASTLE: script_pushint(st,map[m].flag.gvg_castle); break;
+ case MF_GVG_DUNGEON: script_pushint(st,map[m].flag.gvg_dungeon); break;
+ case MF_NIGHTENABLED: script_pushint(st,map[m].flag.nightenabled); break;
case MF_NOBASEEXP: script_pushint(st,map[m].flag.nobaseexp); break;
case MF_NOJOBEXP: script_pushint(st,map[m].flag.nojobexp); break;
case MF_NOMOBLOOT: script_pushint(st,map[m].flag.nomobloot); break;
@@ -9668,12 +9654,13 @@ BUILDIN_FUNC(getmapflag)
case MF_NIGHTMAREDROP: script_pushint(st,map[m].flag.pvp_nightmaredrop); break;
case MF_RESTRICTED: script_pushint(st,map[m].flag.restricted); break;
case MF_NOCOMMAND: script_pushint(st,map[m].nocommand); break;
+ case MF_NODROP: script_pushint(st,map[m].flag.nodrop); break;
case MF_JEXP: script_pushint(st,map[m].jexp); break;
case MF_BEXP: script_pushint(st,map[m].bexp); break;
case MF_NOVENDING: script_pushint(st,map[m].flag.novending); break;
case MF_LOADEVENT: script_pushint(st,map[m].flag.loadevent); break;
case MF_NOCHAT: script_pushint(st,map[m].flag.nochat); break;
- case MF_PARTYLOCK: script_pushint(st,map[m].flag.partylock); break;
+ case MF_NOEXPPENALTY: script_pushint(st,map[m].flag.noexppenalty ); break;
case MF_GUILDLOCK: script_pushint(st,map[m].flag.guildlock); break;
case MF_TOWN: script_pushint(st,map[m].flag.town); break;
case MF_AUTOTRADE: script_pushint(st,map[m].flag.autotrade); break;
@@ -9681,7 +9668,7 @@ BUILDIN_FUNC(getmapflag)
case MF_MONSTER_NOTELEPORT: script_pushint(st,map[m].flag.monster_noteleport); break;
case MF_PVP_NOCALCRANK: script_pushint(st,map[m].flag.pvp_nocalcrank); break;
case MF_BATTLEGROUND: script_pushint(st,map[m].flag.battleground); break;
- case MF_RESET: script_pushint(st,map[m].flag.reset); break;
+ case MF_RESET: script_pushint(st,map[m].flag.reset); break;
}
}
@@ -9702,56 +9689,61 @@ BUILDIN_FUNC(setmapflag)
m = map_mapname2mapid(str);
if(m >= 0) {
switch(i) {
- case MF_NOMEMO: map[m].flag.nomemo=1; break;
- case MF_NOTELEPORT: map[m].flag.noteleport=1; break;
- case MF_NOBRANCH: map[m].flag.nobranch=1; break;
- case MF_NOPENALTY: map[m].flag.noexppenalty=1; map[m].flag.nozenypenalty=1; break;
- case MF_NOZENYPENALTY: map[m].flag.nozenypenalty=1; break;
- case MF_PVP: map[m].flag.pvp=1; break;
- case MF_PVP_NOPARTY: map[m].flag.pvp_noparty=1; break;
- case MF_PVP_NOGUILD: map[m].flag.pvp_noguild=1; break;
- case MF_GVG: map[m].flag.gvg=1; break;
- case MF_GVG_NOPARTY: map[m].flag.gvg_noparty=1; break;
- case MF_GVG_DUNGEON: map[m].flag.gvg_dungeon=1; break;
- case MF_GVG_CASTLE: map[m].flag.gvg_castle=1; break;
- case MF_NOTRADE: map[m].flag.notrade=1; break;
- case MF_NODROP: map[m].flag.nodrop=1; break;
- case MF_NOSKILL: map[m].flag.noskill=1; break;
- case MF_NOWARP: map[m].flag.nowarp=1; break;
- case MF_NOICEWALL: map[m].flag.noicewall=1; break;
- case MF_SNOW: map[m].flag.snow=1; break;
- case MF_CLOUDS: map[m].flag.clouds=1; break;
- case MF_CLOUDS2: map[m].flag.clouds2=1; break;
- case MF_FOG: map[m].flag.fog=1; break;
- case MF_FIREWORKS: map[m].flag.fireworks=1; break;
- case MF_SAKURA: map[m].flag.sakura=1; break;
- case MF_LEAVES: map[m].flag.leaves=1; break;
- case MF_RAIN: map[m].flag.rain=1; break;
- case MF_NIGHTENABLED: map[m].flag.nightenabled=1; break;
- case MF_NOGO: map[m].flag.nogo=1; break;
- case MF_NOBASEEXP: map[m].flag.nobaseexp=1; break;
- case MF_NOJOBEXP: map[m].flag.nojobexp=1; break;
- case MF_NOMOBLOOT: map[m].flag.nomobloot=1; break;
- case MF_NOMVPLOOT: map[m].flag.nomvploot=1; break;
- case MF_NORETURN: map[m].flag.noreturn=1; break;
- case MF_NOWARPTO: map[m].flag.nowarpto=1; break;
- case MF_NIGHTMAREDROP: map[m].flag.pvp_nightmaredrop=1; break;
- case MF_RESTRICTED: map[m].flag.restricted=1; break;
+ case MF_NOMEMO: map[m].flag.nomemo = 1; break;
+ case MF_NOTELEPORT: map[m].flag.noteleport = 1; break;
+ case MF_NOSAVE: map[m].flag.nosave = 1; break;
+ case MF_NOBRANCH: map[m].flag.nobranch = 1; break;
+ case MF_NOPENALTY: map[m].flag.noexppenalty = 1; map[m].flag.nozenypenalty = 1; break;
+ case MF_NOZENYPENALTY: map[m].flag.nozenypenalty = 1; break;
+ case MF_PVP: map[m].flag.pvp = 1; break;
+ case MF_PVP_NOPARTY: map[m].flag.pvp_noparty = 1; break;
+ case MF_PVP_NOGUILD: map[m].flag.pvp_noguild = 1; break;
+ case MF_GVG: map[m].flag.gvg = 1; break;
+ case MF_GVG_NOPARTY: map[m].flag.gvg_noparty = 1; break;
+ case MF_NOTRADE: map[m].flag.notrade = 1; break;
+ case MF_NOSKILL: map[m].flag.noskill = 1; break;
+ case MF_NOWARP: map[m].flag.nowarp = 1; break;
+ case MF_PARTYLOCK: map[m].flag.partylock = 1; break;
+ case MF_NOICEWALL: map[m].flag.noicewall = 1; break;
+ case MF_SNOW: map[m].flag.snow = 1; break;
+ case MF_FOG: map[m].flag.fog = 1; break;
+ case MF_SAKURA: map[m].flag.sakura = 1; break;
+ case MF_LEAVES: map[m].flag.leaves = 1; break;
+ /**
+ * No longer available, keeping here just in case it's back someday. [Ind]
+ **/
+ //case MF_RAIN: map[m].flag.rain = 1; break;
+ case MF_NOGO: map[m].flag.nogo = 1; break;
+ case MF_CLOUDS: map[m].flag.clouds = 1; break;
+ case MF_CLOUDS2: map[m].flag.clouds2 = 1; break;
+ case MF_FIREWORKS: map[m].flag.fireworks = 1; break;
+ case MF_GVG_CASTLE: map[m].flag.gvg_castle = 1; break;
+ case MF_GVG_DUNGEON: map[m].flag.gvg_dungeon = 1; break;
+ case MF_NIGHTENABLED: map[m].flag.nightenabled = 1; break;
+ case MF_NOBASEEXP: map[m].flag.nobaseexp = 1; break;
+ case MF_NOJOBEXP: map[m].flag.nojobexp = 1; break;
+ case MF_NOMOBLOOT: map[m].flag.nomobloot = 1; break;
+ case MF_NOMVPLOOT: map[m].flag.nomvploot = 1; break;
+ case MF_NORETURN: map[m].flag.noreturn = 1; break;
+ case MF_NOWARPTO: map[m].flag.nowarpto = 1; break;
+ case MF_NIGHTMAREDROP: map[m].flag.pvp_nightmaredrop = 1; break;
+ case MF_RESTRICTED: map[m].flag.restricted = 1; break;
case MF_NOCOMMAND: map[m].nocommand = (!val || atoi(val) <= 0) ? 100 : atoi(val); break;
+ case MF_NODROP: map[m].flag.nodrop = 1; break;
case MF_JEXP: map[m].jexp = (!val || atoi(val) < 0) ? 100 : atoi(val); break;
case MF_BEXP: map[m].bexp = (!val || atoi(val) < 0) ? 100 : atoi(val); break;
- case MF_NOVENDING: map[m].flag.novending=1; break;
- case MF_LOADEVENT: map[m].flag.loadevent=1; break;
- case MF_NOCHAT: map[m].flag.nochat=1; break;
- case MF_PARTYLOCK: map[m].flag.partylock=1; break;
- case MF_GUILDLOCK: map[m].flag.guildlock=1; break;
- case MF_TOWN: map[m].flag.town=1; break;
- case MF_AUTOTRADE: map[m].flag.autotrade=1; break;
- case MF_ALLOWKS: map[m].flag.allowks=1; break;
- case MF_MONSTER_NOTELEPORT: map[m].flag.monster_noteleport=1; break;
- case MF_PVP_NOCALCRANK: map[m].flag.pvp_nocalcrank=1; break;
- case MF_BATTLEGROUND: map[m].flag.battleground = (!val || atoi(val) < 0 || atoi(val) > 2) ? 1 : atoi(val); break;
- case MF_RESET: map[m].flag.reset=1; break;
+ case MF_NOVENDING: map[m].flag.novending = 1; break;
+ case MF_LOADEVENT: map[m].flag.loadevent = 1; break;
+ case MF_NOCHAT: map[m].flag.nochat = 1; break;
+ case MF_NOEXPPENALTY: map[m].flag.noexppenalty = 1; break;
+ case MF_GUILDLOCK: map[m].flag.guildlock = 1; break;
+ case MF_TOWN: map[m].flag.town = 1; break;
+ case MF_AUTOTRADE: map[m].flag.autotrade = 1; break;
+ case MF_ALLOWKS: map[m].flag.allowks = 1; break;
+ case MF_MONSTER_NOTELEPORT: map[m].flag.monster_noteleport = 1; break;
+ case MF_PVP_NOCALCRANK: map[m].flag.pvp_nocalcrank = 1; break;
+ case MF_BATTLEGROUND: (!val || atoi(val) < 0 || atoi(val) > 2) ? 1 : atoi(val); break;
+ case MF_RESET: map[m].flag.reset = 1; break;
}
}
@@ -9768,57 +9760,61 @@ BUILDIN_FUNC(removemapflag)
m = map_mapname2mapid(str);
if(m >= 0) {
switch(i) {
- case MF_NOMEMO: map[m].flag.nomemo=0; break;
- case MF_NOTELEPORT: map[m].flag.noteleport=0; break;
- case MF_NOSAVE: map[m].flag.nosave=0; break;
- case MF_NOBRANCH: map[m].flag.nobranch=0; break;
- case MF_NOPENALTY: map[m].flag.noexppenalty=0; map[m].flag.nozenypenalty=0; break;
- case MF_PVP: map[m].flag.pvp=0; break;
- case MF_PVP_NOPARTY: map[m].flag.pvp_noparty=0; break;
- case MF_PVP_NOGUILD: map[m].flag.pvp_noguild=0; break;
- case MF_GVG: map[m].flag.gvg=0; break;
- case MF_GVG_NOPARTY: map[m].flag.gvg_noparty=0; break;
- case MF_GVG_DUNGEON: map[m].flag.gvg_dungeon=0; break;
- case MF_GVG_CASTLE: map[m].flag.gvg_castle=0; break;
- case MF_NOZENYPENALTY: map[m].flag.nozenypenalty=0; break;
- case MF_NOTRADE: map[m].flag.notrade=0; break;
- case MF_NODROP: map[m].flag.nodrop=0; break;
- case MF_NOSKILL: map[m].flag.noskill=0; break;
- case MF_NOWARP: map[m].flag.nowarp=0; break;
- case MF_NOICEWALL: map[m].flag.noicewall=0; break;
- case MF_SNOW: map[m].flag.snow=0; break;
- case MF_CLOUDS: map[m].flag.clouds=0; break;
- case MF_CLOUDS2: map[m].flag.clouds2=0; break;
- case MF_FOG: map[m].flag.fog=0; break;
- case MF_FIREWORKS: map[m].flag.fireworks=0; break;
- case MF_SAKURA: map[m].flag.sakura=0; break;
- case MF_LEAVES: map[m].flag.leaves=0; break;
- case MF_RAIN: map[m].flag.rain=0; break;
- case MF_NIGHTENABLED: map[m].flag.nightenabled=0; break;
- case MF_NOGO: map[m].flag.nogo=0; break;
- case MF_NOBASEEXP: map[m].flag.nobaseexp=0; break;
- case MF_NOJOBEXP: map[m].flag.nojobexp=0; break;
- case MF_NOMOBLOOT: map[m].flag.nomobloot=0; break;
- case MF_NOMVPLOOT: map[m].flag.nomvploot=0; break;
- case MF_NORETURN: map[m].flag.noreturn=0; break;
- case MF_NOWARPTO: map[m].flag.nowarpto=0; break;
- case MF_NIGHTMAREDROP: map[m].flag.pvp_nightmaredrop=0; break;
- case MF_RESTRICTED: map[m].flag.restricted=0; break;
- case MF_NOCOMMAND: map[m].nocommand=0; break;
- case MF_JEXP: map[m].jexp=100; break;
- case MF_BEXP: map[m].bexp=100; break;
- case MF_NOVENDING: map[m].flag.novending=0; break;
- case MF_LOADEVENT: map[m].flag.loadevent=0; break;
- case MF_NOCHAT: map[m].flag.nochat=0; break;
- case MF_PARTYLOCK: map[m].flag.partylock=0; break;
- case MF_GUILDLOCK: map[m].flag.guildlock=0; break;
- case MF_TOWN: map[m].flag.town=0; break;
- case MF_AUTOTRADE: map[m].flag.autotrade=0; break;
- case MF_ALLOWKS: map[m].flag.allowks=0; break;
- case MF_MONSTER_NOTELEPORT: map[m].flag.monster_noteleport=0; break;
- case MF_PVP_NOCALCRANK: map[m].flag.pvp_nocalcrank=0; break;
- case MF_BATTLEGROUND: map[m].flag.battleground=0; break;
- case MF_RESET: map[m].flag.reset=0; break;
+ case MF_NOMEMO: map[m].flag.nomemo = 0; break;
+ case MF_NOTELEPORT: map[m].flag.noteleport = 0; break;
+ case MF_NOSAVE: map[m].flag.nosave = 0; break;
+ case MF_NOBRANCH: map[m].flag.nobranch = 0; break;
+ case MF_NOPENALTY: map[m].flag.noexppenalty = 0; map[m].flag.nozenypenalty = 0; break;
+ case MF_NOZENYPENALTY: map[m].flag.nozenypenalty = 0; break;
+ case MF_PVP: map[m].flag.pvp = 0; break;
+ case MF_PVP_NOPARTY: map[m].flag.pvp_noparty = 0; break;
+ case MF_PVP_NOGUILD: map[m].flag.pvp_noguild = 0; break;
+ case MF_GVG: map[m].flag.gvg = 0; break;
+ case MF_GVG_NOPARTY: map[m].flag.gvg_noparty = 0; break;
+ case MF_NOTRADE: map[m].flag.notrade = 0; break;
+ case MF_NOSKILL: map[m].flag.noskill = 0; break;
+ case MF_NOWARP: map[m].flag.nowarp = 0; break;
+ case MF_PARTYLOCK: map[m].flag.partylock = 0; break;
+ case MF_NOICEWALL: map[m].flag.noicewall = 0; break;
+ case MF_SNOW: map[m].flag.snow = 0; break;
+ case MF_FOG: map[m].flag.fog = 0; break;
+ case MF_SAKURA: map[m].flag.sakura = 0; break;
+ case MF_LEAVES: map[m].flag.leaves = 0; break;
+ /**
+ * No longer available, keeping here just in case it's back someday. [Ind]
+ **/
+ //case MF_RAIN: map[m].flag.rain = 0; break;
+ case MF_NOGO: map[m].flag.nogo = 0; break;
+ case MF_CLOUDS: map[m].flag.clouds = 0; break;
+ case MF_CLOUDS2: map[m].flag.clouds2 = 0; break;
+ case MF_FIREWORKS: map[m].flag.fireworks = 0; break;
+ case MF_GVG_CASTLE: map[m].flag.gvg_castle = 0; break;
+ case MF_GVG_DUNGEON: map[m].flag.gvg_dungeon = 0; break;
+ case MF_NIGHTENABLED: map[m].flag.nightenabled = 0; break;
+ case MF_NOBASEEXP: map[m].flag.nobaseexp = 0; break;
+ case MF_NOJOBEXP: map[m].flag.nojobexp = 0; break;
+ case MF_NOMOBLOOT: map[m].flag.nomobloot = 0; break;
+ case MF_NOMVPLOOT: map[m].flag.nomvploot = 0; break;
+ case MF_NORETURN: map[m].flag.noreturn = 0; break;
+ case MF_NOWARPTO: map[m].flag.nowarpto = 0; break;
+ case MF_NIGHTMAREDROP: map[m].flag.pvp_nightmaredrop = 0; break;
+ case MF_RESTRICTED: map[m].flag.restricted = 0; break;
+ case MF_NOCOMMAND: map[m].nocommand = 0; break;
+ case MF_NODROP: map[m].flag.nodrop = 0; break;
+ case MF_JEXP: map[m].jexp = 0; break;
+ case MF_BEXP: map[m].bexp = 0; break;
+ case MF_NOVENDING: map[m].flag.novending = 0; break;
+ case MF_LOADEVENT: map[m].flag.loadevent = 0; break;
+ case MF_NOCHAT: map[m].flag.nochat = 0; break;
+ case MF_NOEXPPENALTY: map[m].flag.noexppenalty = 0; break;
+ case MF_GUILDLOCK: map[m].flag.guildlock = 0; break;
+ case MF_TOWN: map[m].flag.town = 0; break;
+ case MF_AUTOTRADE: map[m].flag.autotrade = 0; break;
+ case MF_ALLOWKS: map[m].flag.allowks = 0; break;
+ case MF_MONSTER_NOTELEPORT: map[m].flag.monster_noteleport = 0; break;
+ case MF_PVP_NOCALCRANK: map[m].flag.pvp_nocalcrank = 0; break;
+ case MF_BATTLEGROUND: map[m].flag.battleground = 0; break;
+ case MF_RESET: map[m].flag.reset = 0; break;
}
}
@@ -12583,6 +12579,792 @@ BUILDIN_FUNC(charisalpha)
return 0;
}
+//=======================================================
+// charisupper <str>, <index>
+//-------------------------------------------------------
+BUILDIN_FUNC(charisupper)
+{
+ const char *str = script_getstr(st,2);
+ int pos = script_getnum(st,3);
+
+ int val = ( str && pos >= 0 && (unsigned int)pos < strlen(str) ) ? ISUPPER( str[pos] ) : 0;
+
+ script_pushint(st,val);
+ return 0;
+}
+
+//=======================================================
+// charislower <str>, <index>
+//-------------------------------------------------------
+BUILDIN_FUNC(charislower)
+{
+ const char *str = script_getstr(st,2);
+ int pos = script_getnum(st,3);
+
+ int val = ( str && pos >= 0 && (unsigned int)pos < strlen(str) ) ? ISLOWER( str[pos] ) : 0;
+
+ script_pushint(st,val);
+ return 0;
+}
+
+//=======================================================
+// charat <str>, <index>
+//-------------------------------------------------------
+BUILDIN_FUNC(charat)
+{
+ const char *str = script_getstr(st,2);
+ int pos = script_getnum(st,3);
+ char *output;
+
+ output = (char*)aMallocA(2*sizeof(char));
+ output[0] = '\0';
+
+ if(str && pos >= 0 && (unsigned int)pos < strlen(str))
+ sprintf(output, "%c", str[pos]);
+
+ script_pushstr(st, output);
+ return 0;
+}
+
+//=======================================================
+// setchar <string>, <char>, <index>
+//-------------------------------------------------------
+BUILDIN_FUNC(setchar)
+{
+ const char *str = script_getstr(st,2);
+ const char *c = script_getstr(st,3);
+ int index = script_getnum(st,4);
+ char *output;
+ size_t len = strlen(str);
+
+ output = (char*)aMallocA(len + 1);
+ memcpy(output, str, len);
+ output[len] = '\0';
+
+ if(index >= 0 && index < len)
+ output[index] = c[0];
+
+ script_pushstr(st, output);
+ return 0;
+}
+
+//=======================================================
+// insertchar <string>, <char>, <index>
+//-------------------------------------------------------
+BUILDIN_FUNC(insertchar)
+{
+ const char *str = script_getstr(st,2);
+ const char *c = script_getstr(st,3);
+ int index = script_getnum(st,4);
+ char *output;
+ size_t len = strlen(str);
+
+ if(index < 0)
+ index = 0;
+ else if(index > len)
+ index = len;
+
+ output = (char*)aMallocA(len + 2);
+
+ memcpy(output, str, index);
+ output[index] = c[0];
+ memcpy(&output[index+1], &str[index], len - index);
+ output[len+1] = '\0';
+
+ script_pushstr(st, output);
+ return 0;
+}
+
+//=======================================================
+// delchar <string>, <index>
+//-------------------------------------------------------
+BUILDIN_FUNC(delchar)
+{
+ const char *str = script_getstr(st,2);
+ int index = script_getnum(st,3);
+ char *output;
+ size_t len = strlen(str);
+
+ if(index < 0 || index > len) {
+ //return original
+ ++len;
+ output = (char*)aMallocA(len);
+ memcpy(output, str, len);
+ script_pushstr(st, output);
+ return 0;
+ }
+
+ output = (char*)aMallocA(len);
+
+ memcpy(output, str, index);
+ memcpy(&output[index], &str[index+1], len - index);
+
+ script_pushstr(st, output);
+ return 0;
+}
+
+//=======================================================
+// strtoupper <str>
+//-------------------------------------------------------
+BUILDIN_FUNC(strtoupper)
+{
+ const char *str = script_getstr(st,2);
+ char *output;
+ int i = 0;
+
+ output = (char*)aMallocA(strlen(str) + 1);
+
+ while(str[i] != '\0')
+ output[i++] = TOUPPER(str[i]);
+ output[i] = '\0';
+
+ script_pushstr(st, output);
+ return 0;
+}
+
+//=======================================================
+// strtolower <str>
+//-------------------------------------------------------
+BUILDIN_FUNC(strtolower)
+{
+ const char *str = script_getstr(st,2);
+ char *output;
+ int i = 0;
+
+ output = (char*)aMallocA(strlen(str) + 1);
+
+ while(str[i] != '\0')
+ output[i++] = TOLOWER(str[i]);
+ output[i] = '\0';
+
+ script_pushstr(st, output);
+ return 0;
+}
+
+//=======================================================
+// substr <str>, <start>, <end>
+//-------------------------------------------------------
+BUILDIN_FUNC(substr)
+{
+ const char *str = script_getstr(st,2);
+ char *output;
+ int start = script_getnum(st,3);
+ int end = script_getnum(st,4);
+
+ int len = 0;
+
+ if(start >= 0 && end < strlen(str) && start <= end) {
+ len = end - start + 1;
+ output = (char*)aMallocA(len + 1);
+ memcpy(output, &str[start], len);
+ } else
+ output = (char*)aMallocA(1);
+
+ output[len] = '\0';
+
+ script_pushstr(st, output);
+ return 0;
+}
+
+//=======================================================
+// explode <dest_string_array>, <str>, <delimiter>
+// Note: delimiter is limited to 1 char
+//-------------------------------------------------------
+BUILDIN_FUNC(explode)
+{
+ struct script_data* data = script_getdata(st, 2);
+ const char *str = script_getstr(st,3);
+ const char delimiter = script_getstr(st, 4)[0];
+ int32 id;
+ size_t len = strlen(str);
+ int i = 0, j = 0;
+ int start;
+
+
+ char *temp;
+ const char* name;
+
+ TBL_PC* sd = NULL;
+
+ temp = (char*)aMallocA(len + 1);
+
+ if( !data_isreference(data) )
+ {
+ ShowError("script:explode: not a variable\n");
+ script_reportdata(data);
+ st->state = END;
+ return 1;// not a variable
+ }
+
+ id = reference_getid(data);
+ start = reference_getindex(data);
+ name = reference_getname(data);
+
+ if( not_array_variable(*name) )
+ {
+ ShowError("script:explode: illegal scope\n");
+ script_reportdata(data);
+ st->state = END;
+ return 1;// not supported
+ }
+
+ if( !is_string_variable(name) )
+ {
+ ShowError("script:explode: not string array\n");
+ script_reportdata(data);
+ st->state = END;
+ return 1;// data type mismatch
+ }
+
+ if( not_server_variable(*name) )
+ {
+ sd = script_rid2sd(st);
+ if( sd == NULL )
+ return 0;// no player attached
+ }
+
+ while(str[i] != '\0') {
+ if(str[i] == delimiter && start < 127) { //break at delimiter but ignore after reaching last array index
+ temp[j] = '\0';
+ set_reg(st, sd, reference_uid(id, start++), name, (void*)temp, reference_getref(data));
+ j = 0;
+ ++i;
+ } else {
+ temp[j++] = str[i++];
+ }
+ }
+ //set last string
+ temp[j] = '\0';
+ set_reg(st, sd, reference_uid(id, start), name, (void*)temp, reference_getref(data));
+
+ aFree(temp);
+ return 0;
+}
+
+//=======================================================
+// implode <string_array>
+// implode <string_array>, <glue>
+//-------------------------------------------------------
+BUILDIN_FUNC(implode)
+{
+ struct script_data* data = script_getdata(st, 2);
+ const char *glue = NULL, *name, *temp;
+ int32 glue_len = 0, array_size, id;
+ size_t len = 0;
+ int i, k = 0;
+
+ TBL_PC* sd = NULL;
+
+ char *output;
+
+ if( !data_isreference(data) )
+ {
+ ShowError("script:implode: not a variable\n");
+ script_reportdata(data);
+ st->state = END;
+ return 1;// not a variable
+ }
+
+ id = reference_getid(data);
+ name = reference_getname(data);
+
+ if( not_array_variable(*name) )
+ {
+ ShowError("script:implode: illegal scope\n");
+ script_reportdata(data);
+ st->state = END;
+ return 1;// not supported
+ }
+
+ if( !is_string_variable(name) )
+ {
+ ShowError("script:implode: not string array\n");
+ script_reportdata(data);
+ st->state = END;
+ return 1;// data type mismatch
+ }
+
+ if( not_server_variable(*name) )
+ {
+ sd = script_rid2sd(st);
+ if( sd == NULL )
+ return 0;// no player attached
+ }
+
+ //count chars
+ array_size = getarraysize(st, id, reference_getindex(data), is_string_variable(name), reference_getref(data)) - 1;
+
+ if(array_size == -1) //empty array check (AmsTaff)
+ {
+ ShowWarning("script:implode: array length = 0\n");
+ output = (char*)aMallocA(sizeof(char)*5);
+ sprintf(output,"%s","NULL");
+ } else {
+ for(i = 0; i <= array_size; ++i) {
+ temp = (char*) get_val2(st, reference_uid(id, i), reference_getref(data));
+ len += strlen(temp);
+ script_removetop(st, -1, 0);
+ }
+
+ //allocate mem
+ if( script_hasdata(st,3) ) {
+ glue = script_getstr(st,3);
+ glue_len = strlen(glue);
+ len += glue_len * (array_size);
+ }
+ output = (char*)aMallocA(len + 1);
+
+ //build output
+ for(i = 0; i < array_size; ++i) {
+ temp = (char*) get_val2(st, reference_uid(id, i), reference_getref(data));
+ len = strlen(temp);
+ memcpy(&output[k], temp, len);
+ k += len;
+ if(glue_len != 0) {
+ memcpy(&output[k], glue, glue_len);
+ k += glue_len;
+ }
+ script_removetop(st, -1, 0);
+ }
+ temp = (char*) get_val2(st, reference_uid(id, array_size), reference_getref(data));
+ len = strlen(temp);
+ memcpy(&output[k], temp, len);
+ k += len;
+ script_removetop(st, -1, 0);
+
+ output[k] = '\0';
+ }
+
+ script_pushstr(st, output);
+ return 0;
+}
+
+//=======================================================
+// sprintf(<format>, ...);
+// Implements C sprintf, except format %n. The resulting string is
+// returned, instead of being saved in variable by reference.
+//-------------------------------------------------------
+BUILDIN_FUNC(sprintf)
+{
+ unsigned int len, argc = 0, arg = 0, buf2_len = 0;
+ const char* format;
+ char* p;
+ char* q;
+ char* buf = NULL;
+ char* buf2 = NULL;
+ struct script_data* data;
+ StringBuf final_buf;
+
+ // Fetch init data
+ format = script_getstr(st, 2);
+ argc = script_lastdata(st)-2;
+ len = strlen(format);
+
+ // Skip parsing, where no parsing is required.
+ if(len==0){
+ script_pushconststr(st,"");
+ return 0;
+ }
+
+ // Pessimistic alloc
+ CREATE(buf, char, len+1);
+
+ // Need not be parsed, just solve stuff like %%.
+ if(argc==0){
+ sprintf(buf, format);
+ script_pushstrcopy(st, buf);
+ aFree(buf);
+ return 0;
+ }
+
+ safestrncpy(buf, format, len+1);
+
+ // Issue sprintf for each parameter
+ StringBuf_Init(&final_buf);
+ q = buf;
+ while((p = strchr(q, '%'))!=NULL){
+ if(p!=q){
+ len = p-q+1;
+ if(buf2_len<len){
+ RECREATE(buf2, char, len);
+ buf2_len = len;
+ }
+ safestrncpy(buf2, q, len);
+ StringBuf_AppendStr(&final_buf, buf2);
+ q = p;
+ }
+ p = q+1;
+ if(*p=='%'){ // %%
+ StringBuf_AppendStr(&final_buf, "%");
+ q+=2;
+ continue;
+ }
+ if(*p=='n'){ // %n
+ ShowWarning("buildin_sprintf: Format %%n not supported! Skipping...\n");
+ script_reportsrc(st);
+ q+=2;
+ continue;
+ }
+ if(arg>=argc){
+ ShowError("buildin_sprintf: Not enough arguments passed!\n");
+ if(buf) aFree(buf);
+ if(buf2) aFree(buf2);
+ StringBuf_Destroy(&final_buf);
+ script_pushconststr(st,"");
+ return 1;
+ }
+ if((p = strchr(q+1, '%'))==NULL){
+ p = strchr(q, 0); // EOS
+ }
+ len = p-q+1;
+ if(buf2_len<len){
+ RECREATE(buf2, char, len);
+ buf2_len = len;
+ }
+ safestrncpy(buf2, q, len);
+ q = p;
+
+ // Note: This assumes the passed value being the correct
+ // type to the current format specifier. If not, the server
+ // probably crashes or returns anything else, than expected,
+ // but it would behave in normal code the same way so it's
+ // the scripter's responsibility.
+ data = script_getdata(st, arg+3);
+ if(data_isstring(data)){ // String
+ StringBuf_Printf(&final_buf, buf2, script_getstr(st, arg+3));
+ }else if(data_isint(data)){ // Number
+ StringBuf_Printf(&final_buf, buf2, script_getnum(st, arg+3));
+ }else if(data_isreference(data)){ // Variable
+ char* name = reference_getname(data);
+ if(name[strlen(name)-1]=='$'){ // var Str
+ StringBuf_Printf(&final_buf, buf2, script_getstr(st, arg+3));
+ }else{ // var Int
+ StringBuf_Printf(&final_buf, buf2, script_getnum(st, arg+3));
+ }
+ }else{ // Unsupported type
+ ShowError("buildin_sprintf: Unknown argument type!\n");
+ if(buf) aFree(buf);
+ if(buf2) aFree(buf2);
+ StringBuf_Destroy(&final_buf);
+ script_pushconststr(st,"");
+ return 1;
+ }
+ arg++;
+ }
+
+ // Append anything left
+ if(*q){
+ StringBuf_AppendStr(&final_buf, q);
+ }
+
+ // Passed more, than needed
+ if(arg<argc){
+ ShowWarning("buildin_sprintf: Unused arguments passed.\n");
+ script_reportsrc(st);
+ }
+
+ script_pushstrcopy(st, StringBuf_Value(&final_buf));
+
+ if(buf) aFree(buf);
+ if(buf2) aFree(buf2);
+ StringBuf_Destroy(&final_buf);
+
+ return 0;
+}
+
+//=======================================================
+// sscanf(<str>, <format>, ...);
+// Implements C sscanf.
+//-------------------------------------------------------
+BUILDIN_FUNC(sscanf){
+ unsigned int argc, arg = 0, len;
+ struct script_data* data;
+ struct map_session_data* sd = NULL;
+ const char* str;
+ const char* format;
+ const char* p;
+ const char* q;
+ char* buf = NULL;
+ char* buf_p;
+ char* ref_str = NULL;
+ int ref_int;
+
+ // Get data
+ str = script_getstr(st, 2);
+ format = script_getstr(st, 3);
+ argc = script_lastdata(st)-3;
+
+ len = strlen(format);
+ CREATE(buf, char, len*2+1);
+
+ // Issue sscanf for each parameter
+ *buf = 0;
+ q = format;
+ while((p = strchr(q, '%'))){
+ if(p!=q){
+ strncat(buf, q, (size_t)(p-q));
+ q = p;
+ }
+ p = q+1;
+ if(*p=='*' || *p=='%'){ // Skip
+ strncat(buf, q, 2);
+ q+=2;
+ continue;
+ }
+ if(arg>=argc){
+ ShowError("buildin_sscanf: Not enough arguments passed!\n");
+ script_pushint(st, -1);
+ if(buf) aFree(buf);
+ if(ref_str) aFree(ref_str);
+ return 1;
+ }
+ if((p = strchr(q+1, '%'))==NULL){
+ p = strchr(q, 0); // EOS
+ }
+ len = p-q;
+ strncat(buf, q, len);
+ q = p;
+
+ // Validate output
+ data = script_getdata(st, arg+4);
+ if(!data_isreference(data) || !reference_tovariable(data)){
+ ShowError("buildin_sscanf: Target argument is not a variable!\n");
+ script_pushint(st, -1);
+ if(buf) aFree(buf);
+ if(ref_str) aFree(ref_str);
+ return 1;
+ }
+ buf_p = reference_getname(data);
+ if(not_server_variable(*buf_p) && (sd = script_rid2sd(st))==NULL){
+ script_pushint(st, -1);
+ if(buf) aFree(buf);
+ if(ref_str) aFree(ref_str);
+ return 0;
+ }
+
+ // Save value if any
+ if(buf_p[strlen(buf_p)-1]=='$'){ // String
+ if(ref_str==NULL){
+ CREATE(ref_str, char, strlen(str)+1);
+ }
+ if(sscanf(str, buf, ref_str)==0){
+ break;
+ }
+ set_reg(st, sd, add_str(buf_p), buf_p, (void *)(ref_str), reference_getref(data));
+ }else{ // Number
+ if(sscanf(str, buf, &ref_int)==0){
+ break;
+ }
+ set_reg(st, sd, add_str(buf_p), buf_p, (void *)(ref_int), reference_getref(data));
+ }
+ arg++;
+
+ // Disable used format (%... -> %*...)
+ buf_p = strchr(buf, 0);
+ memmove(buf_p-len+2, buf_p-len+1, len);
+ *(buf_p-len+1) = '*';
+ }
+
+ // Passed more, than needed
+ if(arg<argc){
+ ShowWarning("buildin_sscanf: Unused arguments passed.\n");
+ script_reportsrc(st);
+ }
+
+ script_pushint(st, arg);
+ if(buf) aFree(buf);
+ if(ref_str) aFree(ref_str);
+
+ return 0;
+}
+
+//=======================================================
+// strpos(<haystack>, <needle>)
+// strpos(<haystack>, <needle>, <offset>)
+//
+// Implements PHP style strpos. Adapted from code from
+// http://www.daniweb.com/code/snippet313.html, Dave Sinkula
+//-------------------------------------------------------
+BUILDIN_FUNC(strpos) {
+ const char *haystack = script_getstr(st,2);
+ const char *needle = script_getstr(st,3);
+ int i;
+ size_t len;
+
+ if( script_hasdata(st,4) )
+ i = script_getnum(st,4);
+ else
+ i = 0;
+
+ if ( strlen(needle) == 0 ) {
+ script_pushint(st, -1);
+ return 0;
+ }
+
+ len = strlen(haystack);
+ for ( ; i < len; ++i ) {
+ if ( haystack[i] == *needle ) {
+ // matched starting char -- loop through remaining chars
+ const char *h, *n;
+ for ( h = &haystack[i], n = needle; *h && *n; ++h, ++n ) {
+ if ( *h != *n ) {
+ break;
+ }
+ }
+ if ( !*n ) { // matched all of 'needle' to null termination
+ script_pushint(st, i);
+ return 0;
+ }
+ }
+ }
+ script_pushint(st, -1);
+ return 0;
+}
+
+//===============================================================
+// replacestr <input>, <search>, <replace>{, <usecase>{, <count>}}
+//
+// Note: Finds all instances of <search> in <input> and replaces
+// with <replace>. If specified will only replace as many
+// instances as specified in <count>. By default will be case
+// sensitive.
+//---------------------------------------------------------------
+BUILDIN_FUNC(replacestr)
+{
+ const char *input = script_getstr(st, 2);
+ const char *find = script_getstr(st, 3);
+ const char *replace = script_getstr(st, 4);
+ size_t inputlen = strlen(input);
+ size_t findlen = strlen(find);
+ struct StringBuf output;
+ bool usecase = true;
+
+ int count = 0;
+ int numFinds = 0;
+ int i = 0, f = 0;
+
+ if(findlen == 0) {
+ ShowError("script:replacestr: Invalid search length.\n");
+ st->state = END;
+ return 1;
+ }
+
+ if(script_hasdata(st, 5)) {
+ if(script_isint(st,5))
+ usecase = script_getnum(st, 5) != 0;
+ else {
+ ShowError("script:replacestr: Invalid usecase value. Expected int got string\n");
+ st->state = END;
+ return 1;
+ }
+ }
+
+ if(script_hasdata(st, 6)) {
+ if(script_isint(st,6))
+ count = script_getnum(st, 6);
+ else {
+ ShowError("script:replacestr: Invalid count value. Expected int got string\n");
+ st->state = END;
+ return 1;
+ }
+ }
+
+ StringBuf_Init(&output);
+
+ for(; i < inputlen; i++) {
+ if(count && count == numFinds) { //found enough, stop looking
+ break;
+ }
+
+ for(f = 0; f <= findlen; f++) {
+ if(f == findlen) { //complete match
+ numFinds++;
+ StringBuf_AppendStr(&output, replace);
+
+ i += findlen - 1;
+ break;
+ } else {
+ if(usecase) {
+ if((i + f) > inputlen || input[i + f] != find[f]) {
+ StringBuf_Printf(&output, "%c", input[i]);
+ break;
+ }
+ } else {
+ if(((i + f) > inputlen || input[i + f] != find[f]) && TOUPPER(input[i+f]) != TOUPPER(find[f])) {
+ StringBuf_Printf(&output, "%c", input[i]);
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ //append excess after enough found
+ if(i < inputlen)
+ StringBuf_AppendStr(&output, &(input[i]));
+
+ script_pushstrcopy(st, StringBuf_Value(&output));
+ StringBuf_Destroy(&output);
+ return 0;
+}
+
+//========================================================
+// countstr <input>, <search>{, <usecase>}
+//
+// Note: Counts the number of times <search> occurs in
+// <input>. By default will be case sensitive.
+//--------------------------------------------------------
+BUILDIN_FUNC(countstr)
+{
+ const char *input = script_getstr(st, 2);
+ const char *find = script_getstr(st, 3);
+ size_t inputlen = strlen(input);
+ size_t findlen = strlen(find);
+ bool usecase = true;
+
+ int numFinds = 0;
+ int i = 0, f = 0;
+
+ if(findlen == 0) {
+ ShowError("script:countstr: Invalid search length.\n");
+ st->state = END;
+ return 1;
+ }
+
+ if(script_hasdata(st, 4)) {
+ if(script_isint(st,4))
+ usecase = script_getnum(st, 4) != 0;
+ else {
+ ShowError("script:countstr: Invalid usecase value. Expected int got string\n");
+ st->state = END;
+ return 1;
+ }
+ }
+
+ for(; i < inputlen; i++) {
+ for(f = 0; f <= findlen; f++) {
+ if(f == findlen) { //complete match
+ numFinds++;
+ i += findlen - 1;
+ break;
+ } else {
+ if(usecase) {
+ if((i + f) > inputlen || input[i + f] != find[f]) {
+ break;
+ }
+ } else {
+ if(((i + f) > inputlen || input[i + f] != find[f]) && TOUPPER(input[i+f]) != TOUPPER(find[f])) {
+ break;
+ }
+ }
+ }
+ }
+ }
+ script_pushint(st, numFinds);
+ return 0;
+}
+
+
/// Changes the display name and/or display class of the npc.
/// Returns 0 is successful, 1 if the npc does not exist.
///
@@ -13122,7 +13904,7 @@ BUILDIN_FUNC(setitemscript)
n=script_getnum(st,4);
i_data = itemdb_exists(item_id);
- if (!i_data || script==NULL || script[0]!='{') {
+ if (!i_data || script==NULL || ( script[0] && script[0]!='{' )) {
script_pushint(st,0);
return 0;
}
@@ -13140,7 +13922,7 @@ BUILDIN_FUNC(setitemscript)
if(*dstscript)
script_free_code(*dstscript);
- *dstscript = parse_script(script, "script_setitemscript", 0, 0);
+ *dstscript = script[0] ? parse_script(script, "script_setitemscript", 0, 0) : NULL;
script_pushint(st,1);
return 0;
}
@@ -14991,87 +15773,133 @@ BUILDIN_FUNC(searchstores)
searchstore_open(sd, uses, effect);
return 0;
}
-
-/// Returns the successful use of a Rune Knight Runestone.
-///
-/// SuccessRuneUse()
-///
-BUILDIN_FUNC(successruneuse)
+/// Displays a number as large digital clock.
+/// showdigit <value>[,<type>];
+BUILDIN_FUNC(showdigit)
{
- struct item_data* id = NULL;
+ unsigned int type = 0;
+ int value;
struct map_session_data* sd;
- struct script_data* data;
if( ( sd = script_rid2sd(st) ) == NULL )
- return 0; // no player attached, report source
-
- data = script_getdata(st,2);
- get_val(st, data); // convert into value in case of a variable
-
- if( data_isstring(data) )
- id = itemdb_searchname(conv_str(st, data));
- else
- id = itemdb_exists(conv_num(st, data));
-
- if( id == NULL )
{
- ShowError("buildin_successruneuse: Invalid item '%s'.\n", script_getstr(st,2));
- script_pushint(st,0);
- return 1;
+ return 0;
}
- if( (sd->class_&~(JOBL_UPPER|JOBL_BABY)) == MAPID_RUNE_KNIGHT )
+ value = script_getnum(st,2);
+
+ if( script_hasdata(st,3) )
{
- int skilllv = pc_checkskill(sd,RK_RUNEMASTERY);
- int i = (sd->status.dex + sd->status.luk ) / 20 + (skilllv?55+skilllv:0) + 30;
+ type = script_getnum(st,3);
- if (rand() % 100 < i)
- script_pushint(st, 1);
- else
+ if( type > 3 )
{
- script_pushint(st, 0);
+ ShowError("buildin_showdigit: Invalid type %u.\n", type);
+ return 1;
+ }
+ }
- i = rand() % 100; // reroll for fail effects
- if( i < 3 )
- {
- long damage = (1000 * id->weight) - (sd->battle_status.mdef + sd->battle_status.mdef2);
- clif_damage(&sd->bl, &sd->bl, gettick(), 0, 0, damage, 0, 0, 0);
- status_damage(&sd->bl, &sd->bl, damage, 0, 0, 0);
- }
- else if( i < 13 )
- { // Random status effect
- struct {
- sc_type type;
- int duration;
- } effects[] = {
- { SC_FREEZE, 30000 },
- { SC_STUN, 5000 },
- { SC_SLEEP, 20000 },
- { SC_SILENCE, 20000 },
- { SC_BLIND, 20000 },
- };
- i = rand()%ARRAYLENGTH(effects); // redesignate i to random status effect+duration.
- sc_start(&sd->bl, effects[i].type, 100, 1, effects[i].duration);
- }
- else if( i < 15 )
- pc_randomwarp(sd, CLR_TELEPORT);
- else if( i < 18 )
- ; // Unknown effect, however weight of the item used is taken into account.
- else if( i < 19 )
- {
- if (!status_isimmune(&sd->bl))
- status_percent_heal(&sd->bl, 100, 100);
+ clif_showdigit(sd, (unsigned char)type, value);
+ return 0;
+}
+/**
+ * Rune Knight
+ **/
+BUILDIN_FUNC(makerune) {
+ TBL_PC* sd;
+ if( (sd = script_rid2sd(st)) == NULL )
+ return 0;
+ clif_skill_produce_mix_list(sd,RK_RUNEMASTERY,24);
+ sd->itemid = script_getnum(st,2);
+ return 0;
+}
+/**
+ * checkdragon() returns 1 if mounting a dragon or 0 otherwise.
+ **/
+BUILDIN_FUNC(checkdragon) {
+ TBL_PC* sd;
+ if( (sd = script_rid2sd(st)) == NULL )
+ return 0;
+ if( sd->sc.option&OPTION_DRAGON )
+ script_pushint(st,1);
+ else
+ script_pushint(st,0);
+ return 0;
+}
+/**
+ * setdragon({optional Color}) returns 1 on success or 0 otherwise
+ * - Toggles the dragon on a RK if he can mount;
+ * @param Color - when not provided uses the green dragon;
+ * - 1 : Green Dragon
+ * - 2 : Brown Dragon
+ * - 3 : Gray Dragon
+ * - 4 : Blue Dragon
+ * - 5 : Red Dragon
+ **/
+BUILDIN_FUNC(setdragon) {
+ TBL_PC* sd;
+ int color = script_hasdata(st,2) ? script_getnum(st,2) : 0;
+ unsigned int option = OPTION_DRAGON1;
+ if( (sd = script_rid2sd(st)) == NULL )
+ return 0;
+ if( !pc_checkskill(sd,RK_DRAGONTRAINING) || (sd->class_&MAPID_THIRDMASK) != MAPID_RUNE_KNIGHT )
+ script_pushint(st,0);//Doesn't have the skill or it's not a Rune Knight
+ else if ( sd->sc.option&OPTION_DRAGON ) {//Is mounted; release
+ pc_setoption(sd, sd->sc.option&~OPTION_DRAGON);
+ script_pushint(st,1);
+ } else {//Not mounted; Mount now.
+ if( color ) {
+ option = ( color == 1 ? OPTION_DRAGON1 :
+ color == 2 ? OPTION_DRAGON2 :
+ color == 3 ? OPTION_DRAGON3 :
+ color == 4 ? OPTION_DRAGON4 :
+ color == 5 ? OPTION_DRAGON5 : 0);
+ if( !option ) {
+ ShowWarning("script_setdragon: Unknown Color %d used; changing to green (1)\n",color);
+ option = OPTION_DRAGON1;
}
- else if( i >= 20 )
- ; // Unknown effect
}
+ pc_setoption(sd, sd->sc.option|option);
+ script_pushint(st,1);
}
- else
- script_pushint(st, 0);
+ return 0;
+}
+/**
+ * ismounting() returns 1 if mounting a new mount or 0 otherwise
+ **/
+BUILDIN_FUNC(ismounting) {
+ TBL_PC* sd;
+ if( (sd = script_rid2sd(st)) == NULL )
+ return 0;
+ if( sd->sc.option&OPTION_MOUNTING )
+ script_pushint(st,1);
+ else
+ script_pushint(st,0);
return 0;
}
+/**
+ * setmounting() returns 1 on success or 0 otherwise
+ * - Toggles new mounts on a player when he can mount
+ * - Will fail if the player is mounting a non-new mount, e.g. dragon, peco, wug, etc.
+ * - Will unmount the player is he is already mounting
+ **/
+BUILDIN_FUNC(setmounting) {
+ TBL_PC* sd;
+ if( (sd = script_rid2sd(st)) == NULL )
+ return 0;
+ if( sd->sc.option&(OPTION_WUGRIDER|OPTION_RIDING|OPTION_DRAGON|OPTION_MADOGEAR) )
+ script_pushint(st,0);//can't mount with one of these
+ else {
+ if( sd->sc.option&OPTION_MOUNTING )
+ pc_setoption(sd, sd->sc.option&~OPTION_MOUNTING);//release mount
+ else
+ pc_setoption(sd, sd->sc.option|OPTION_MOUNTING);//mount
+ script_pushint(st,1);//in both cases, return 1.
+ }
+ return 0;
+}
// declarations that were supposed to be exported from npc_chat.c
#ifdef PCRE_SUPPORT
BUILDIN_FUNC(defpattern);
@@ -15180,7 +16008,6 @@ struct script_function buildin_func[] = {
BUILDIN_DEF(setfalcon,"?"),
BUILDIN_DEF(checkfalcon,""),
BUILDIN_DEF(setriding,"?"),
- BUILDIN_DEF(setdragon,"??"),
BUILDIN_DEF(checkriding,""),
BUILDIN_DEF2(savepoint,"save","sii"),
BUILDIN_DEF(savepoint,"sii"),
@@ -15190,7 +16017,7 @@ struct script_function buildin_func[] = {
BUILDIN_DEF(openstorage,""),
BUILDIN_DEF(guildopenstorage,""),
BUILDIN_DEF(itemskill,"vi"),
- BUILDIN_DEF(produce,"i?"),
+ BUILDIN_DEF(produce,"i"),
BUILDIN_DEF(cooking,"i"),
BUILDIN_DEF(monster,"siisii?"),
BUILDIN_DEF(getmobdrops,"i"),
@@ -15354,6 +16181,22 @@ struct script_function buildin_func[] = {
BUILDIN_DEF(unequip,"i"), // unequip command [Spectre]
BUILDIN_DEF(getstrlen,"s"), //strlen [Valaris]
BUILDIN_DEF(charisalpha,"si"), //isalpha [Valaris]
+ BUILDIN_DEF(charat,"si"),
+ BUILDIN_DEF(setchar,"ssi"),
+ BUILDIN_DEF(insertchar,"ssi"),
+ BUILDIN_DEF(delchar,"si"),
+ BUILDIN_DEF(strtoupper,"s"),
+ BUILDIN_DEF(strtolower,"s"),
+ BUILDIN_DEF(charisupper, "si"),
+ BUILDIN_DEF(charislower, "si"),
+ BUILDIN_DEF(substr,"sii"),
+ BUILDIN_DEF(explode, "rss"),
+ BUILDIN_DEF(implode, "r?"),
+ BUILDIN_DEF(sprintf,"s*"), // [Mirei]
+ BUILDIN_DEF(sscanf,"ss*"), // [Mirei]
+ BUILDIN_DEF(strpos,"ss?"),
+ BUILDIN_DEF(replacestr,"sss??"),
+ BUILDIN_DEF(countstr,"ss?"),
BUILDIN_DEF(setnpcdisplay,"sv??"),
BUILDIN_DEF(compare,"ss"), // Lordalfa - To bring strstr to scripting Engine.
BUILDIN_DEF(getiteminfo,"ii"), //[Lupus] returns Items Buy / sell Price, etc info
@@ -15437,7 +16280,7 @@ struct script_function buildin_func[] = {
BUILDIN_DEF(pushpc,"ii"),
BUILDIN_DEF(buyingstore,"i"),
BUILDIN_DEF(searchstores,"ii"),
- BUILDIN_DEF(successruneuse,"?"),
+ BUILDIN_DEF(showdigit,"i?"),
// WoE SE
BUILDIN_DEF(agitstart2,""),
BUILDIN_DEF(agitend2,""),
@@ -15469,7 +16312,14 @@ struct script_function buildin_func[] = {
BUILDIN_DEF(instance_npcname,"s?"),
BUILDIN_DEF(has_instance,"s?"),
BUILDIN_DEF(instance_warpall,"sii?"),
-
+ /**
+ * 3rd-related
+ **/
+ BUILDIN_DEF(makerune,"i"),
+ BUILDIN_DEF(checkdragon,""),//[Ind]
+ BUILDIN_DEF(setdragon,"?"),//[Ind]
+ BUILDIN_DEF(ismounting,""),//[Ind]
+ BUILDIN_DEF(setmounting,""),//[Ind]
//Quest Log System [Inkfish]
BUILDIN_DEF(setquest, "i"),
BUILDIN_DEF(erasequest, "i"),
diff --git a/src/map/skill.c b/src/map/skill.c
index 26d812d86..a7e75b6f4 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -37,7 +37,7 @@
#include <stdlib.h>
#include <string.h>
#include <time.h>
-#include <math.h>
+
#define SKILLUNITTIMER_INTERVAL 100
@@ -59,13 +59,28 @@ struct s_skill_db skill_db[MAX_SKILL_DB];
struct s_skill_produce_db skill_produce_db[MAX_SKILL_PRODUCE_DB];
struct s_skill_arrow_db skill_arrow_db[MAX_SKILL_ARROW_DB];
struct s_skill_abra_db skill_abra_db[MAX_SKILL_ABRA_DB];
+//Warlock
+struct s_skill_spellbook_db {
+ int nameid;
+ int skillid;
+ int points;
+};
+
+struct s_skill_spellbook_db skill_spellbook_db[MAX_SKILL_SPELLBOOK_DB];
+//Guillotine Cross
+struct s_skill_magicmushroom_db skill_magicmushroom_db[MAX_SKILL_MAGICMUSHROOM_DB];
struct s_skill_unit_layout skill_unit_layout[MAX_SKILL_UNIT_LAYOUT];
int firewall_unit_pos;
int icewall_unit_pos;
-
+int earthstrain_unit_pos;
+//early declaration
+int skill_stasis_check(struct block_list *bl, int src_id, int skillid);
//Since only mob-casted splash skills can hit ice-walls
-#define splash_target(bl) (bl->type==BL_MOB?BL_SKILL|BL_CHAR:BL_CHAR)
+static inline int splash_target(struct block_list* bl)
+{
+ return ( bl->type == BL_MOB ) ? BL_SKILL|BL_CHAR : BL_CHAR;
+}
/// Returns the id of the skill, or 0 if not found.
int skill_name2id(const char* name)
@@ -143,9 +158,7 @@ int skill_get_itemqty(int id, int idx) { skill_get (skill_db[id].amount[idx],
int skill_get_zeny( int id ,int lv ) { skill_get (skill_db[id].zeny[lv-1], id, lv); }
int skill_get_num( int id ,int lv ) { skill_get (skill_db[id].num[lv-1], id, lv); }
int skill_get_cast( int id ,int lv ) { skill_get (skill_db[id].cast[lv-1], id, lv); }
-int skill_get_fixedcast( int id ,int lv ) { skill_get (skill_db[id].fixedcast[lv-1], id, lv); }
int skill_get_delay( int id ,int lv ) { skill_get (skill_db[id].delay[lv-1], id, lv); }
-int skill_get_cooldown( int id ,int lv ) { skill_get (skill_db[id].cooldown[lv-1], id, lv); }
int skill_get_walkdelay( int id ,int lv ) { skill_get (skill_db[id].walkdelay[lv-1], id, lv); }
int skill_get_time( int id ,int lv ) { skill_get (skill_db[id].upkeep_time[lv-1], id, lv); }
int skill_get_time2( int id ,int lv ) { skill_get (skill_db[id].upkeep_time2[lv-1], id, lv); }
@@ -169,6 +182,7 @@ int skill_get_unit_target( int id ) { skill_get (skill_db[id].unit_target&
int skill_get_unit_bl_target( int id ) { skill_get (skill_db[id].unit_target&BL_ALL, id, 1); }
int skill_get_unit_flag( int id ) { skill_get (skill_db[id].unit_flag, id, 1); }
int skill_get_unit_layout_type( int id ,int lv ){ skill_get (skill_db[id].unit_layout_type[lv-1], id, lv); }
+int skill_get_cooldown( int id ,int lv ) { skill_get (skill_db[id].cooldown[lv-1], id, lv); }
int skill_tree_get_max(int id, int b_class)
{
@@ -240,6 +254,12 @@ int skill_get_range2 (struct block_list *bl, int id, int lv)
case MA_CHARGEARROW:
case SN_FALCONASSAULT:
case HT_POWER:
+ /**
+ * Ranger
+ **/
+ case RA_ARROWSTORM:
+ case RA_AIMEDBOLT:
+ case RA_WUGBITE:
if( bl->type == BL_PC )
range += pc_checkskill((TBL_PC*)bl, AC_VULTURE);
else
@@ -260,6 +280,36 @@ int skill_get_range2 (struct block_list *bl, int id, int lv)
if (bl->type == BL_PC)
range = skill_get_range(NJ_SHADOWJUMP,pc_checkskill((TBL_PC*)bl,NJ_SHADOWJUMP));
break;
+ /**
+ * Warlock
+ **/
+ case WL_WHITEIMPRISON:
+ case WL_SOULEXPANSION:
+ case WL_FROSTMISTY:
+ case WL_MARSHOFABYSS:
+ case WL_SIENNAEXECRATE:
+ case WL_DRAINLIFE:
+ case WL_CRIMSONROCK:
+ case WL_HELLINFERNO:
+ case WL_COMET:
+ case WL_CHAINLIGHTNING:
+ case WL_TETRAVORTEX:
+ case WL_RELEASE:
+ if( bl->type == BL_PC )
+ range += pc_checkskill((TBL_PC*)bl, WL_RADIUS);
+ break;
+ /**
+ * Ranger Bonus
+ **/
+ case HT_LANDMINE:
+ case HT_FREEZINGTRAP:
+ case HT_BLASTMINE:
+ case HT_CLAYMORETRAP:
+ case RA_CLUSTERBOMB:
+ case RA_FIRINGTRAP:
+ case RA_ICEBOUNDTRAP:
+ if( bl->type == BL_PC )
+ range += (1 + pc_checkskill((TBL_PC*)bl, RA_RESEARCHTRAP))/2;
}
if( !range && bl->type != BL_PC )
@@ -269,14 +319,10 @@ int skill_get_range2 (struct block_list *bl, int id, int lv)
int skill_calc_heal(struct block_list *src, struct block_list *target, int skill_id, int skill_lv, bool heal)
{
- int skill, hp, mod = 100;
+ int skill, hp;
struct map_session_data *sd = BL_CAST(BL_PC, src);
struct map_session_data *tsd = BL_CAST(BL_PC, target);
struct status_change* sc;
- struct status_data *status;
- bool FullCalc = false;
-
- status = status_get_status_data(src);
switch( skill_id )
{
@@ -292,83 +338,43 @@ int skill_calc_heal(struct block_list *src, struct block_list *target, int skill
hp = (skill_lv>6)?666:skill_lv*100;
break;
default:
- FullCalc = true; // Enables full calculation, which adds heal variance.
if (skill_lv >= battle_config.max_heal_lv)
return battle_config.max_heal;
-
- // iRO Wiki states as of 2011/08/22:
- // heal = ( [(Base Level + INT) / 5] ?30 ) ?(Heal Level / 10) ?(1 + (Modifiers / 100)) + MATK
- // fixme: Does not match up with iRO's heal, level 1 or level 10
- // with 219 matk + HP_MEDITATO (10) (no gear), level 1 = 361; level 10 = 1839
- if( skill_id == AB_HIGHNESSHEAL ) {
- skill = pc_checkskill(sd,AL_HEAL);
- if( skill < 0 )
- skill = 10;
- }
- else
- skill = skill_lv;
-
- // Calculate base heal rate
- hp = ( ( ( status_get_lv(src) + status_get_int(src) ) / 5) * 30 ) * skill / 10;
-
- // Increment heal by skill/type modifiers
+ #if RRMODE
+ /**
+ * Renewal Heal Formula (from Doddler)
+ * TODO: whats that( 1+ %Modifier / 100 ) ? currently using 'x1' (100/100) until found out
+ * - Min = ( [ ( BaseLvl + INT ) / 5 ] * 30 ) * (1+( %Modifier / 100)) * (HealLvl * 0.1) + StatusMATK + EquipMATK - [(WeaponMATK * WeaponLvl) / 10]
+ * - Max = ( [ ( BaseLvl + INT ) / 5 ] * 30 ) * (1+( %Modifier / 100)) * (HealLvl * 0.1) + StatusMATK + EquipMATK + [(WeaponMATK * WeaponLvl) / 10]
+ **/
+ hp = ( ( ( ( status_get_lv(src) + status_get_int(src) ) / 5 ) * 30 ) * ( skill_lv / 10 ) + status_get_matk_min(src) + status_get_matk_max(src) - ( ( status_get_matk_max(src) * status_get_wlv(src) ) / 10 ) ) + rand()%( ( ( ( status_get_lv(src) + status_get_int(src) ) / 5 ) * 30 ) * ( skill_lv / 10 ) + status_get_matk_min(src) + status_get_matk_max(src) + ( ( status_get_matk_max(src) * status_get_wlv(src) ) / 10 ) );
+ #else
+ hp = ( status_get_lv(src) + status_get_int(src) ) / 8 * (4 + ( skill_id == AB_HIGHNESSHEAL ? ( sd ? pc_checkskill(sd,AL_HEAL) : 10 ) : skill_lv ) * 8);
+ #endif
if( sd && ((skill = pc_checkskill(sd, HP_MEDITATIO)) > 0) )
- mod += skill * 2;
+ hp += hp * skill * 2 / 100;
else if( src->type == BL_HOM && (skill = merc_hom_checkskill(((TBL_HOM*)src), HLIF_BRAIN)) > 0 )
- mod += skill * 2;
+ hp += hp * skill * 2 / 100;
break;
- }
+ }
+
+ if( ( (target && target->type == BL_MER) || !heal ) && skill_id != NPC_EVILLAND )
+ hp >>= 1;
- // Increment heal by item-based modifiers
if( sd && (skill = pc_skillheal_bonus(sd, skill_id)) )
- mod += skill;
+ hp += hp*skill/100;
+
if( tsd && (skill = pc_skillheal2_bonus(tsd, skill_id)) )
- mod += skill;
+ hp += hp*skill/100;
sc = status_get_sc(target);
if( sc && sc->count )
{
if( sc->data[SC_CRITICALWOUND] && heal ) // Critical Wound has no effect on offensive heal. [Inkfish]
- mod -= sc->data[SC_CRITICALWOUND]->val2;
+ hp -= hp * sc->data[SC_CRITICALWOUND]->val2/100;
if( sc->data[SC_INCHEALRATE] && skill_id != NPC_EVILLAND && skill_id != BA_APPLEIDUN )
- mod += sc->data[SC_INCHEALRATE]->val1; // Only affects Heal, Sanctuary and PotionPitcher.(like bHealPower) [Inkfish]
- if( sc->data[SC_VITALITYACTIVATION] && heal && skill_id != BA_APPLEIDUN )
- mod += sc->data[SC_VITALITYACTIVATION]->val2;
+ hp += hp * sc->data[SC_INCHEALRATE]->val1/100; // Only affects Heal, Sanctuary and PotionPitcher.(like bHealPower) [Inkfish]
}
-
- // Adjust the HP recovered rate by adding all of the modifiers together.
- hp = hp * mod / 100;
-
- // Get weapon level and weapon matk for variance calculations if it's a player.
- // Mobs have their own variance, we've assumed:
- // Weapon Level = 1
- // Weapom_Matk = ?
- // Need more information before that can be implemented.
- if( sd && FullCalc)
- {
- int matk = 0;
- int smatk = sd->battle_status.status_matk;
- int ematk = sd->equipment_matk;
- int wmatk = 0;
- int wlv = 1;
- int index = sd->equip_index[EQI_HAND_R];
-
- if( index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->type == IT_WEAPON )
- wlv = sd->inventory_data[index]->wlv;
-
- wmatk = (int)( sd->weapon_matk + ( (float)( ( rand() % 20 ) - 10 ) / 100 * wlv * sd->weapon_matk ) + ( sd->battle_status.rhw.atk2 ) );
- matk = ( smatk + wmatk + ematk );
-
- hp += matk;
- }
-
- // mercenaries only take half-effectiveness from heals.
- if( ( (target && target->type == BL_MER) || !heal ) && skill_id != NPC_EVILLAND )
- hp >>= 1;
-
- // Give Highness Heal it's extra heal
- if( skill_id == AB_HIGHNESSHEAL )
- hp = hp * (170 + 30 * skill_lv) / 100;
return hp;
}
@@ -430,6 +436,9 @@ int skillnotok (int skillid, struct map_session_data *sd)
if(map[m].flag.restricted && map[m].zone && skill_get_nocast (skillid) & (8*map[m].zone))
return 1;
+ if( sd->sc.option&OPTION_MOUNTING )
+ return 1;//You can't use skills while in the new mounts (The client doesn't let you, this is to make cheat-safe)
+
switch (skillid) {
case AL_WARP:
if(map[m].flag.nowarp) {
@@ -462,6 +471,12 @@ int skillnotok (int skillid, struct map_session_data *sd)
return 1;
}
break;
+ case GC_DARKILLUSION:
+ if( map_flag_gvg(m) ) {
+ clif_skill_fail(sd,skillid,0,0);
+ return 1;
+ }
+ break;
case GD_EMERGENCYCALL:
if (
!(battle_config.emergency_call&((agit_flag || agit2_flag)?2:1)) ||
@@ -472,6 +487,23 @@ int skillnotok (int skillid, struct map_session_data *sd)
return 1;
}
break;
+ case BS_GREED:
+ case WS_CARTBOOST:
+ case BS_HAMMERFALL:
+ case BS_ADRENALINE:
+ case MC_CARTREVOLUTION:
+ case MC_MAMMONITE:
+ case WS_MELTDOWN:
+ case MG_SIGHT:
+ case TF_HIDING:
+ /**
+ * These skills cannot be used while in mado gear (credits to Xantara)
+ **/
+ if(sd->sc.option&OPTION_MADOGEAR) {
+ clif_skill_fail(sd,skillid,0,0);
+ return 1;
+ }
+ break;
}
return (map[m].flag.noskill);
}
@@ -523,6 +555,8 @@ struct s_skill_unit_layout* skill_get_unit_layout (int skillid, int skilllv, str
return &skill_unit_layout [firewall_unit_pos + dir];
else if (skillid == WZ_ICEWALL)
return &skill_unit_layout [icewall_unit_pos + dir];
+ else if( skillid == WL_EARTHSTRAIN ) //Warlock
+ return &skill_unit_layout [earthstrain_unit_pos + dir];
ShowError("skill_get_unit_layout: unknown unit layout for skill %d (level %d)\n", skillid, skilllv);
return &skill_unit_layout[0]; // default 1x1 layout
@@ -639,6 +673,9 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int
rate=(sd->status.job_level+9)/10;
skill_castend_damage_id(src,bl,HT_BLITZBEAT,(skill<rate)?skill:rate,tick,SD_LEVEL);
}
+ // Automatic trigger of Warg Strike [Jobbie]
+ if( pc_iswug(sd) && (sd->status.weapon == W_BOW || sd->status.weapon == W_FIST) && (skill=pc_checkskill(sd,RA_WUGSTRIKE)) > 0 && rand()%1000 <= sstatus->luk*10/3+1 )
+ skill_castend_damage_id(src,bl,RA_WUGSTRIKE,skill,tick,0);
// Gank
if(dstmd && sd->status.weapon != W_BOW &&
(skill=pc_checkskill(sd,RG_SNATCHER)) > 0 &&
@@ -735,7 +772,14 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int
case WZ_METEOR:
sc_start(bl,SC_STUN,3*skilllv,skilllv,skill_get_time2(skillid,skilllv));
break;
-
+#if FIREIVY_ON
+ //case WZ_FIREIVY:
+ // Testing for Fire Ivy
+ //sc_start(bl,SC_STUN,3*skilllv,skilllv,skill_get_time2(skillid,skilllv));
+ //sc_start(bl,SC_STUN,(5*skilllv+35),skilllv,skill_get_time2(skillid,skilllv));
+ //sc_start(bl,SC_BURNING,(8*skilllv+35),skilllv,skill_get_time2(skillid,skilllv));
+ //break;
+#endif
case WZ_VERMILION:
sc_start(bl,SC_BLIND,4*skilllv,skilllv,skill_get_time2(skillid,skilllv));
break;
@@ -981,20 +1025,104 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int
case NPC_CRITICALWOUND:
sc_start(bl,SC_CRITICALWOUND,100,skilllv,skill_get_time2(skillid,skilllv));
break;
+ /**
+ * Rune Knight
+ **/
+ case RK_HUNDREDSPEAR:
+ if( !sd || pc_checkskill(sd,KN_SPEARBOOMERANG) == 0 )
+ break; // Spear Boomerang auto cast chance only works if you have mastered Spear Boomerang.
+ rate = 10 + 3 * skilllv;
+ if( rand()%100 < rate )
+ skill_castend_damage_id(src,bl,KN_SPEARBOOMERANG,1,tick,0);
+ break;
case RK_WINDCUTTER:
sc_start(bl,SC_FEAR,3+2*skilllv,skilllv,skill_get_time(skillid,skilllv));
break;
case RK_DRAGONBREATH:
- sc_start4(bl,SC_BURNING,15,skilllv,src->id,0,0,skill_get_time(skillid,skilllv));
+ sc_start4(bl,SC_BURNING,5+5*skilllv,skilllv,1000,src->id,0,skill_get_time(skillid,skilllv));
break;
+ /**
+ * Arch Bishop
+ **/
case AB_ADORAMUS:
- if ( sd )
+ if( tsc && !tsc->data[SC_DECREASEAGI] ) //Prevent duplicate agi-down effect.
+ sc_start(bl, SC_ADORAMUS, 100, skilllv, skill_get_time(skillid, skilllv));
+ break;
+ /**
+ * Warlock
+ **/
+ case WL_CRIMSONROCK:
+ sc_start(bl, SC_STUN, 40, skilllv, skill_get_time(skillid, skilllv));
+ break;
+ case WL_COMET:
+ sc_start4(bl,SC_BURNING,100,skilllv,1000,src->id,0,skill_get_time(skillid,skilllv));
+ break;
+ case WL_EARTHSTRAIN:
{
- int rate = (skilllv*4) + sd->status.job_level / 2;
- sc_start(bl, SC_BLIND, rate, skilllv, skill_get_time(skillid, skilllv));
- sc_start(bl, SC_ADORAMUS, rate, skilllv, skill_get_time2(skillid, skilllv));
+ int rate = 0, i;
+ const int pos[5] = { EQP_WEAPON, EQP_HELM, EQP_SHIELD, EQP_ARMOR, EQP_ACC };
+ rate = 6 * skilllv + sstatus->dex / 10 + (sd? sd->status.job_level / 4 : 0) - tstatus->dex /5;// The tstatus->dex / 5 part is unofficial, but players gotta have some kind of way to have resistance. [Rytech]
+ //rate -= rate * tstatus->dex / 200; // Disabled until official resistance is found.
+
+ for( i = 0; i < skilllv; i++ )
+ skill_strip_equip(bl,pos[i],rate,skilllv,skill_get_time2(skillid,skilllv));
+ }
+ break;
+ case WL_JACKFROST:
+ sc_start(bl,SC_FREEZE,100,skilllv,skill_get_time(skillid,skilllv));
+ break;
+ /**
+ * Ranger
+ **/
+ case RA_WUGBITE:
+ sc_start(bl, SC_BITE, 70, skilllv, skill_get_time(skillid, skilllv) + (sd ? pc_checkskill(sd,RA_TOOTHOFWUG) * 1000 : 0)); // Need official chance.
+ break;
+ case RA_SENSITIVEKEEN:
+ if( rand()%100 < 8 * skilllv )
+ skill_castend_damage_id(src, bl, RA_WUGBITE, sd ? pc_checkskill(sd, RA_WUGBITE):skilllv, tick, SD_ANIMATION);
+ break;
+ case RA_MAGENTATRAP:
+ case RA_COBALTTRAP:
+ case RA_MAIZETRAP:
+ case RA_VERDURETRAP:
+ if( dstmd && !(dstmd->status.mode&MD_BOSS) )
+ sc_start2(bl,SC_ELEMENTALCHANGE,100,skilllv,skill_get_ele(skillid,skilllv),skill_get_time2(skillid,skilllv));
+ break;
+ case RA_FIRINGTRAP:
+ case RA_ICEBOUNDTRAP:
+ sc_start(bl, (skillid == RA_FIRINGTRAP) ? SC_BURNING:SC_FREEZING, 40 + 10 * skilllv, skilllv, skill_get_time2(skillid, skilllv));
+ break;
+ /**
+ * Mechanic
+ **/
+ case NC_PILEBUNKER:
+ if( rand()%100 < 5 + 15*skilllv )
+ { //Deactivatable Statuses: Kyrie Eleison, Auto Guard, Steel Body, Assumptio, and Millennium Shield
+ status_change_end(bl, SC_KYRIE, -1);
+ status_change_end(bl, SC_AUTOGUARD, -1);
+ status_change_end(bl, SC_STEELBODY, -1);
+ status_change_end(bl, SC_ASSUMPTIO, -1);
+ status_change_end(bl, SC_MILLENNIUMSHIELD, -1);
}
break;
+ case NC_FLAMELAUNCHER:
+ sc_start4(bl, SC_BURNING, 50 + 10 * skilllv, skilllv, 1000, src->id, 0, skill_get_time2(skillid, skilllv));
+ break;
+ case NC_COLDSLOWER:
+ sc_start(bl, SC_FREEZE, 10 * skilllv, skilllv, skill_get_time(skillid, skilllv));
+ sc_start(bl, SC_FREEZING, 20 + 10 * skilllv, skilllv, skill_get_time2(skillid, skilllv));
+ break;
+ case NC_POWERSWING:
+ sc_start(bl, SC_STUN, 5*skilllv, skilllv, skill_get_time(skillid, skilllv));
+ if( rand()%100 < 5*skilllv )
+ skill_castend_damage_id(src, bl, NC_AXEBOOMERANG, pc_checkskill(sd, NC_AXEBOOMERANG), tick, 1);
+ break;
+ /**
+ * Guilotine Cross
+ **/
+ case GC_WEAPONCRUSH:
+ skill_castend_nodamage_id(src,bl,skillid,skilllv,tick,BCT_ENEMY);
+ break;
}
if (md && battle_config.summons_trigger_autospells && md->master_id && md->special_state.ai)
@@ -1105,7 +1233,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int
if (DIFF_TICK(ud->canact_tick, tick + rate) < 0){
ud->canact_tick = tick+rate;
if ( battle_config.display_status_timers && sd )
- clif_status_change(src, SI_ACTIONDELAY, 1, rate);
+ clif_status_change(src, SI_ACTIONDELAY, 1, rate, 0, 0, 0);
}
}
}
@@ -1381,7 +1509,7 @@ int skill_counter_additional_effect (struct block_list* src, struct block_list *
if (DIFF_TICK(ud->canact_tick, tick + rate) < 0){
ud->canact_tick = tick+rate;
if ( battle_config.display_status_timers && dstsd )
- clif_status_change(bl, SI_ACTIONDELAY, 1, rate);
+ clif_status_change(bl, SI_ACTIONDELAY, 1, rate, 0, 0, 0);
}
}
}
@@ -1516,7 +1644,7 @@ int skill_strip_equip(struct block_list *bl, unsigned short where, int rate, int
return 0;
sc = status_get_sc(bl);
- if (!sc)
+ if (!sc || sc->option&OPTION_MADOGEAR ) //Mado Gear cannot be divested [Ind]
return 0;
for (i = 0; i < ARRAYLENGTH(pos); i++) {
@@ -1531,8 +1659,8 @@ int skill_strip_equip(struct block_list *bl, unsigned short where, int rate, int
}
return where?1:0;
}
-
-
+//Early declaration
+static int skill_area_temp[8];
/*=========================================================================
Used to knock back players, monsters, traps, etc
- 'count' is the number of squares to knock back
@@ -1721,8 +1849,14 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
sc->data[SC_SPIRIT]->val4 = dsrc->id;
}
}
+ /**
+ * Official Magic Reflection Behavior : damage reflected depends on gears caster wears, not target
+ **/
+ #if RR_MAGIC_REFLECTION
+ if( dmg.dmg_lv != ATK_MISS )//Wiz SL cancelled and consumed fragment
+ dmg = battle_calc_attack(BF_MAGIC,bl,bl,skillid,skilllv,flag&0xFFF);
+ #endif
}
-
if(sc && sc->data[SC_MAGICROD] && src == dsrc) {
int sp = skill_get_sp(skillid,skilllv);
dmg.damage = dmg.damage2 = 0;
@@ -1744,19 +1878,8 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
if( damage > 0 && dmg.flag&BF_WEAPON && src != bl && ( src == dsrc || ( dsrc->type == BL_SKILL && ( skillid == SG_SUN_WARM || skillid == SG_MOON_WARM || skillid == SG_STAR_WARM ) ) )
&& skillid != WS_CARTTERMINATION )
- {
- if( sc && sc->data[SC_DEATHBOUND] && !is_boss(bl) && map_check_dir(map_calc_dir(src,bl->x,bl->y),unit_getdir(bl)))
- {
- int skilllv = sc->data[SC_DEATHBOUND]->val1;
- clif_skill_damage(src,src, tick, 0, 0, 0, 0, RK_DEATHBOUND,-1, 1);
- rdamage = damage * ((500 + 100*skilllv) / 100);
- damage = rdamage * 70 / 100;
- skill_blown(src, src, skill_get_blewcount(skillid,skilllv), unit_getdir(src), 0);
- status_change_end(dsrc,SC_DEATHBOUND,INVALID_TIMER);
- }
- else
- rdamage = battle_calc_return_damage(bl, damage, dmg.flag);
- }
+ rdamage = battle_calc_return_damage(bl,src, &damage, dmg.flag);
+
//Skill hit type
type=(skillid==0)?5:skill_get_hit(skillid);
@@ -1872,7 +1995,6 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
case NPC_CRITICALSLASH:
case TF_DOUBLE:
case GS_CHAINACTION:
- case RK_DEATHBOUND:
dmg.dmotion = clif_damage(src,bl,tick,dmg.amotion,dmg.dmotion,damage,dmg.div_,dmg.type,dmg.damage2);
break;
@@ -1882,7 +2004,31 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
else // the central target doesn't display an animation
dmg.dmotion = clif_skill_damage(dsrc,bl,tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skillid, -2, 5); // needs -2(!) as skill level
break;
-
+ /**
+ * Warlock
+ **/
+ case WL_HELLINFERNO:
+ dmg.dmotion = clif_skill_damage(src,bl,tick,dmg.amotion,dmg.dmotion,damage,1,skillid,-2,6);
+ break;
+ case WL_SOULEXPANSION:
+ case WL_COMET:
+ dmg.dmotion = clif_skill_damage(src,bl,tick,dmg.amotion,dmg.dmotion,damage,dmg.div_,skillid,skilllv,8);
+ break;
+ case WL_CHAINLIGHTNING_ATK:
+ dmg.dmotion = clif_skill_damage(src,bl,tick,dmg.amotion,dmg.dmotion,damage,1,WL_CHAINLIGHTNING,-2,6);
+ break;
+ case WL_TETRAVORTEX_FIRE:
+ case WL_TETRAVORTEX_WATER:
+ case WL_TETRAVORTEX_WIND:
+ case WL_TETRAVORTEX_GROUND:
+ dmg.dmotion = clif_skill_damage(src,bl,tick,dmg.amotion,dmg.dmotion,damage,1,WL_TETRAVORTEX_FIRE,-2,type);
+ break;
+ /**
+ * Arch Bishop
+ **/
+ case AB_DUPLELIGHT_MELEE:
+ case AB_DUPLELIGHT_MAGIC:
+ dmg.amotion = 300;
default:
if( flag&SD_ANIMATION && dmg.div_ < 2 ) //Disabling skill animation doesn't works on multi-hit.
type = 5;
@@ -1897,8 +2043,22 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
&& (!sc || !sc->data[SC_PRESERVE])
&& damage < tsd->battle_status.hp)
{ //Updated to not be able to copy skills if the blow will kill you. [Skotlex]
- if ((tsd->status.skill[skillid].id == 0 || tsd->status.skill[skillid].flag == SKILL_FLAG_PLAGIARIZED) &&
- can_copy(tsd,skillid,bl)) // Split all the check into their own function [Aru]
+ int copy_skill = skillid;
+ /**
+ * Copy Referal: dummy skills should point to their source upon copying
+ **/
+ switch( skillid ) {
+ case AB_DUPLELIGHT_MELEE:
+ case AB_DUPLELIGHT_MAGIC:
+ copy_skill = AB_DUPLELIGHT;
+ break;
+ case WL_CHAINLIGHTNING_ATK:
+ copy_skill = WL_CHAINLIGHTNING;
+ break;
+ }
+
+ if ((tsd->status.skill[copy_skill].id == 0 || tsd->status.skill[copy_skill].flag == SKILL_FLAG_PLAGIARIZED) &&
+ can_copy(tsd,copy_skill,bl)) // Split all the check into their own function [Aru]
{
int lv = skilllv;
if (tsd->cloneskill_id && tsd->status.skill[tsd->cloneskill_id].flag == SKILL_FLAG_PLAGIARIZED){
@@ -1911,11 +2071,11 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
if ((type = pc_checkskill(tsd,RG_PLAGIARISM)) < lv)
lv = type;
- tsd->cloneskill_id = skillid;
- pc_setglobalreg(tsd, "CLONE_SKILL", skillid);
+ tsd->cloneskill_id = copy_skill;
+ pc_setglobalreg(tsd, "CLONE_SKILL", copy_skill);
pc_setglobalreg(tsd, "CLONE_SKILL_LV", lv);
- tsd->status.skill[skillid].id = skillid;
+ tsd->status.skill[skillid].id = copy_skill;
tsd->status.skill[skillid].lv = lv;
tsd->status.skill[skillid].flag = SKILL_FLAG_PLAGIARIZED;
clif_addskill(tsd,skillid);
@@ -1949,6 +2109,12 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
if( damage > 0 ) //Counter status effects [Skotlex]
skill_counter_additional_effect(src,bl,skillid,skilllv,dmg.flag,tick);
}
+ // Hell Inferno burning status only starts if Fire part hits.
+ if( skillid == WL_HELLINFERNO && dmg.damage > 0 )
+ sc_start4(bl,SC_BURNING,55+5*skilllv,skilllv,1000,src->id,0,skill_get_time(skillid,skilllv));
+ // Apply knock back chance in SC_TRIANGLESHOT skill.
+ else if( skillid == SC_TRIANGLESHOT && rand()%100 > (1 + skilllv) )
+ dmg.blewcount = 0;
//Only knockback if it's still alive, otherwise a "ghost" is left behind. [Skotlex]
//Reflected spells do not bounce back (bl == dsrc since it only happens for direct skills)
@@ -1960,6 +2126,8 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
case MG_FIREWALL: direction = unit_getdir(bl); break; // backwards
case WZ_STORMGUST: direction = rand()%8; break; // randomly
case PR_SANCTUARY: direction = unit_getdir(bl); break; // backwards
+ case WL_CRIMSONROCK: direction = map_calc_dir(bl,skill_area_temp[4],skill_area_temp[5]); break;
+
}
skill_blown(dsrc,bl,dmg.blewcount,direction,0);
}
@@ -2015,9 +2183,19 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
battle_drain(tsd, src, rdamage, rdamage, sstatus->race, is_boss(src));
skill_additional_effect(bl, src, CR_REFLECTSHIELD, 1, BF_WEAPON|BF_SHORT|BF_NORMAL,ATK_DEF,tick);
}
-
- if( damage > 0 && skillid == RK_CRUSHSTRIKE )
- skill_break_equip(src,EQP_WEAPON,2000,BCT_SELF);
+ if( damage > 0 ) {
+ if( skillid == RK_CRUSHSTRIKE ) // Your weapon will not be broken if you miss.
+ skill_break_equip(src,EQP_WEAPON,10000,BCT_SELF);
+
+ if( skillid == GC_VENOMPRESSURE ) {
+ struct status_change *ssc = status_get_sc(src);
+ if( ssc && ssc->data[SC_POISONINGWEAPON] && rand()%100 < 70 + 5*skilllv ) {
+ sc_start(bl,ssc->data[SC_POISONINGWEAPON]->val2,100,ssc->data[SC_POISONINGWEAPON]->val1,skill_get_time2(GC_POISONINGWEAPON,ssc->data[SC_POISONINGWEAPON]->val1));
+ status_change_end(src,SC_POISONINGWEAPON,-1);
+ clif_skill_nodamage(src,bl,skillid,skilllv,1);
+ }
+ }
+ }
if (!(flag&2) &&
(
@@ -2044,7 +2222,6 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
* ffff=Ž©—R‚ÉŽg—p‰Â”\
* 0 =—\–ñ?B0‚ɌŒè
*------------------------------------------*/
-static int skill_area_temp[8];
typedef int (*SkillFunc)(struct block_list *, struct block_list *, int, int, unsigned int, int);
int skill_area_sub (struct block_list *bl, va_list ap)
{
@@ -2115,6 +2292,17 @@ static int skill_check_unit_range_sub (struct block_list *bl, va_list ap)
case HT_CLAYMORETRAP:
case HT_TALKIEBOX:
case HP_BASILICA:
+ /**
+ * Ranger
+ **/
+ case RA_ELECTRICSHOCKER:
+ case RA_CLUSTERBOMB:
+ case RA_MAGENTATRAP:
+ case RA_COBALTTRAP:
+ case RA_MAIZETRAP:
+ case RA_VERDURETRAP:
+ case RA_FIRINGTRAP:
+ case RA_ICEBOUNDTRAP:
//Non stackable on themselves and traps (including venom dust which does not has the trap inf2 set)
if (skillid != g_skillid && !(skill_get_inf2(g_skillid)&INF2_TRAP) && g_skillid != AS_VENOMDUST)
return 0;
@@ -2427,15 +2615,60 @@ static int skill_timerskill(int tid, unsigned int tick, int id, intptr_t data)
}
}
break;
- case RK_HUNDREDSPEAR:
- if(src->type == BL_PC)
+ /**
+ * Warlock
+ **/
+ case WL_CHAINLIGHTNING_ATK:
{
- int skill_lv = pc_checkskill((struct map_session_data *)src,KN_SPEARBOOMERANG);
- if(skill_lv > 0)
- skill_attack(BF_WEAPON,src,src,target,KN_SPEARBOOMERANG,skill_lv,tick,skl->flag);
- }
- else
- skill_attack(BF_WEAPON,src,src,target,KN_SPEARBOOMERANG,1,tick,skl->flag);
+ struct block_list *nbl = NULL; // Next Target of Chain
+ skill_attack(BF_MAGIC,src,src,target,skl->skill_id,skl->skill_lv,tick,skl->flag); // Hit a Lightning on the current Target
+ if( skl->type > 1 )
+ { // Remaining Chains Hit
+ nbl = battle_getenemyarea(src,target->x,target->y,2,BL_CHAR|BL_SKILL,target->id); // Search for a new Target around current one...
+ if( nbl == NULL && skl->x > 1 )
+ {
+ nbl = target;
+ skl->x--;
+ }
+ else skl->x = 3;
+ }
+
+ if( nbl )
+ skill_addtimerskill(src,tick+status_get_adelay(src),nbl->id,skl->x,0,WL_CHAINLIGHTNING_ATK,skl->skill_lv,skl->type-1,skl->flag);
+ }
+ break;
+ case WL_TETRAVORTEX_FIRE:
+ case WL_TETRAVORTEX_WATER:
+ case WL_TETRAVORTEX_WIND:
+ case WL_TETRAVORTEX_GROUND:
+ skill_attack(BF_MAGIC,src,src,target,skl->skill_id,skl->skill_lv,tick,skl->flag);
+ if( skl->type >= 3 )
+ { // Final Hit
+ status_change_end(src,SC_MAGICPOWER,-1); // Removes Magic Power
+ if( !status_isdead(target) )
+ { // Final Status Effect
+ int effects[4] = { SC_BURNING, SC_FREEZING, SC_BLEEDING, SC_STUN },
+ applyeffects[4] = { 0, 0, 0, 0 },
+ i, j = 0, k = 0;
+ for( i = 1; i <= 8; i = i + i )
+ {
+ if( skl->x&i )
+ {
+ applyeffects[j] = effects[k];
+ j++;
+ }
+ k++;
+ }
+ if( j )
+ {
+ i = applyeffects[rand()%j];
+ status_change_start(target, i, 10000, skl->skill_lv,
+ (i == SC_BURNING ? 1000 : 0),
+ (i == SC_BURNING ? src->id : 0),
+ 0, skill_get_time(WL_TETRAVORTEX,skl->skill_lv), 0);
+ }
+ }
+ }
break;
default:
skill_attack(skl->type,src,src,target,skl->skill_id,skl->skill_lv,tick,skl->flag);
@@ -2459,7 +2692,13 @@ static int skill_timerskill(int tid, unsigned int tick, int id, intptr_t data)
else if( path_search_long(NULL, src->m, src->x, src->y, skl->x, skl->y, CELL_CHKWALL) )
skill_unitsetting(src,skl->skill_id,skl->skill_lv,skl->x,skl->y,skl->flag);
break;
+ case WL_EARTHSTRAIN:
+ skill_unitsetting(src,skl->skill_id,skl->skill_lv,skl->x,skl->y,(skl->type<<16)|skl->flag);
+ break;
+
}
+ if( skl->skill_id >= WL_TETRAVORTEX_FIRE && skl->skill_id <= WL_TETRAVORTEX_GROUND )
+ status_change_end(src,SC_MAGICPOWER,-1);
}
} while (0);
//Free skl now that it is no longer needed.
@@ -2660,9 +2899,43 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
case NPC_BLEEDING:
case NPC_CRITICALWOUND:
case NPC_HELLPOWER:
+ /**
+ * Rune Knight
+ **/
case RK_SONICWAVE:
+ case RK_HUNDREDSPEAR:
case RK_WINDCUTTER:
+ /**
+ * Arch Bishop
+ **/
case AB_DUPLELIGHT_MELEE:
+ /**
+ * Ranger
+ **/
+ case RA_AIMEDBOLT:
+ /**
+ * Mechanic
+ **/
+ case NC_AXEBOOMERANG:
+ case NC_POWERSWING:
+ /**
+ * Guilotinne Cross
+ **/
+ case GC_CROSSIMPACT:
+ case GC_VENOMPRESSURE:
+
+ skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
+ break;
+
+ /**
+ * Mechanic (MADO GEAR)
+ **/
+ case NC_BOOSTKNUCKLE:
+ case NC_PILEBUNKER:
+ case NC_VULCANARM:
+ case NC_COLDSLOWER:
+ case NC_ARMSCANNON:
+ if (sd) pc_overheat(sd,1);
skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
break;
@@ -2731,6 +3004,8 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
}
break;
+ case NC_FLAMELAUNCHER:
+ if (sd) pc_overheat(sd,1);
case SN_SHARPSHOOTING:
case MA_SHARPSHOOTING:
case NJ_KAMAITACHI:
@@ -2860,7 +3135,35 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
case NPC_PULSESTRIKE:
case NPC_HELLJUDGEMENT:
case NPC_VAMPIRE_GIFT:
+ /**
+ * Rune Knight
+ **/
+ case RK_IGNITIONBREAK:
+ /**
+ * Arch Bishop
+ **/
case AB_JUDEX:
+ /**
+ * Warlock
+ **/
+ case WL_SOULEXPANSION:
+ case WL_CRIMSONROCK:
+ case WL_COMET:
+ /**
+ * Ranger
+ **/
+ case RA_ARROWSTORM:
+ case RA_WUGDASH:
+ /**
+ * Mechanic
+ **/
+ case NC_SELFDESTRUCTION:
+ case NC_AXETORNADO:
+ /**
+ * Guilotine Cross
+ **/
+ case GC_ROLLINGCUTTER:
+ case GC_COUNTERSLASH:
if( flag&1 )
{ //Recursive invocation
// skill_area_temp[0] holds number of targets in area
@@ -2887,7 +3190,10 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
skill_area_temp[0] = 0;
skill_area_temp[1] = bl->id;
skill_area_temp[2] = 0;
-
+ if( skillid == WL_CRIMSONROCK ) {
+ skill_area_temp[4] = bl->x;
+ skill_area_temp[5] = bl->y;
+ }
// if skill damage should be split among targets, count them
//SD_LEVEL -> Forced splash damage for Auto Blitz-Beat -> count targets
//special case: Venom Splasher uses a different range for searching than for splashing
@@ -2895,7 +3201,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
skill_area_temp[0] = map_foreachinrange(skill_area_sub, bl, (skillid == AS_SPLASHER)?1:skill_get_splash(skillid, skilllv), BL_CHAR, src, skillid, skilllv, tick, BCT_ENEMY, skill_area_sub_count);
// recursive invocation of skill_castend_damage_id() with flag|1
- map_foreachinrange(skill_area_sub, bl, skill_get_splash(skillid, skilllv), splash_target(src), src, skillid, skilllv, tick, flag|BCT_ENEMY|SD_SPLASH|1, skill_castend_damage_id);
+ map_foreachinrange(skill_area_sub, bl, skill_get_splash(skillid, skilllv), (skillid == WL_CRIMSONROCK)?BL_CHAR|BL_SKILL:splash_target(src), src, skillid, skilllv, tick, flag|BCT_ENEMY|SD_SPLASH|1, skill_castend_damage_id);
//FIXME: Isn't EarthQuake a ground skill after all?
if( skillid == NPC_EARTHQUAKE )
@@ -3015,10 +3321,20 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
case NJ_KOUENKA:
case NJ_HYOUSENSOU:
case NJ_HUUJIN:
+#if FIREIVY_ON
+ case WZ_FIREIVY:
+#endif
+ /**
+ * Arch Bishop
+ **/
case AB_ADORAMUS:
case AB_RENOVATIO:
case AB_HIGHNESSHEAL:
case AB_DUPLELIGHT_MAGIC:
+ /**
+ * Warlock
+ **/
+ case WL_HELLINFERNO:
skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag);
break;
@@ -3105,6 +3421,9 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
case NPC_SMOKING:
case GS_FLING:
case NJ_ZENYNAGE:
+ /**
+ * Rune Knight
+ **/
case RK_DRAGONBREATH:
skill_attack(BF_MISC,src,src,bl,skillid,skilllv,tick,flag);
break;
@@ -3162,17 +3481,329 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
status_change_end(src, SC_HIDING, INVALID_TIMER);
skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
break;
+ /**
+ * Rune Knight
+ **/
+ case RK_PHANTOMTHRUST:
+ unit_setdir(src,map_calc_dir(src, bl->x, bl->y));
+ clif_skill_nodamage(src,bl,skillid,skilllv,1);
- case RK_HUNDREDSPEAR:
- skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
- if(rand()%100 < (10 + 3*skilllv)) {
- skill_blown(src,bl,6,-1,0);
- skill_addtimerskill(src,tick+800,bl->id,0,0,skillid,skilllv,BF_WEAPON,flag);
- }
+ skill_blown(src,bl,distance_bl(src,bl)-1,unit_getdir(src),0);
+ if( battle_check_target(src,bl,BCT_ENEMY) )
+ skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
break;
+
+ case RK_STORMBLAST:
case RK_CRUSHSTRIKE:
+ if( sd ) {
+ if( pc_checkskill(sd,RK_RUNEMASTERY) >= ( skillid == RK_CRUSHSTRIKE ? 7 : 3 ) )
+ skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
+ else
+ clif_skill_fail(sd,skillid,0,0);
+ } else //non-sd support
+ skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
+ break;
+ /**
+ * Guilotinne Cross
+ **/
+ case GC_DARKILLUSION:
+ {
+ short x, y;
+ short dir = map_calc_dir(src,bl->x,bl->y);
+
+ if( dir > 4 ) x = -1;
+ else if( dir > 0 && dir < 4 ) x = 1;
+ else x = 0;
+ if( dir < 3 || dir > 5 ) y = -1;
+ else if( dir > 3 && dir < 5 ) y = 1;
+ else y = 0;
+
+ if( unit_movepos(src, bl->x+x, bl->y+y, 1, 1) )
+ {
+ clif_slide(src,bl->x+x,bl->y+y);
+ clif_fixpos(src); // the official server send these two packts.
+ skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
+ if( rand()%100 < 4 * skilllv )
+ skill_castend_damage_id(src,bl,GC_CROSSIMPACT,skilllv,tick,flag);
+ }
+
+ }
+ break;
+
+ case GC_WEAPONCRUSH:
+ if( sc && sc->data[SC_COMBO] && sc->data[SC_COMBO]->val1 == GC_WEAPONBLOCKING )
+ skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
+ else if( sd )
+ clif_skill_fail(sd,skillid,0x1f,0);
+ break;
+
+ case GC_CROSSRIPPERSLASHER:
+ if( sd && !(sc && sc->data[SC_ROLLINGCUTTER]) )
+ clif_skill_fail(sd,skillid,0x17,0);
+ else
+ {
+ skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
+ status_change_end(src,SC_ROLLINGCUTTER,-1);
+ }
+ break;
+
+ case GC_PHANTOMMENACE:
+ if( flag&1 )
+ { // Only Hits Invisible Targets
+ struct status_change *tsc = status_get_sc(bl);
+ if(tsc && (tsc->option&(OPTION_HIDE|OPTION_CLOAK|OPTION_CHASEWALK) || tsc->data[SC__INVISIBILITY]) )
+ skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
+ }
+ break;
+ /**
+ * Warlock
+ **/
+ case WL_CHAINLIGHTNING:
+ clif_skill_nodamage(src,bl,skillid,skilllv,1);
+ skill_addtimerskill(src,tick + 150,bl->id,3,0,WL_CHAINLIGHTNING_ATK,skilllv,4+skilllv,flag);
+ break;
+ case WL_DRAINLIFE:
+ {
+ int heal = skill_attack(skill_get_type(skillid), src, src, bl, skillid, skilllv, tick, flag);
+ int rate = 70 + 4 * skilllv + ( sd ? sd->status.job_level : 50 ) / 5;
+
+ heal = 8 * skilllv;
+ if( status_get_lv(src) > 100 ) heal = heal * status_get_lv(src) / 100; // Base level bonus.
+
+ if( bl->type == BL_SKILL )
+ heal = 0; // Don't absorb heal from Ice Walls or other skill units.
+
+ if( heal && rand()%100 < rate )
+ {
+ status_heal(src, heal, 0, 0);
+ clif_skill_nodamage(NULL, src, AL_HEAL, heal, 1);
+ }
+ }
+ break;
+
+ case WL_TETRAVORTEX:
if( sd )
+ {
+ int spheres[5] = { 0, 0, 0, 0, 0 },
+ positions[5] = {-1,-1,-1,-1,-1 },
+ i, j = 0, k, subskill = 0;
+
+ for( i = SC_SPHERE_1; i <= SC_SPHERE_5; i++ )
+ if( sc && sc->data[i] )
+ {
+ spheres[j] = i;
+ positions[j] = sc->data[i]->val2;
+ j++; //
+ }
+
+ if( j < 4 )
+ { // Need 4 spheres minimum
+ clif_skill_fail(sd,skillid,0,0);
+ break;
+ }
+
+ // Sphere Sort, this time from new to old
+ for( i = 0; i <= j - 2; i++ )
+ for( k = i + 1; k <= j - 1; k++ )
+ if( positions[i] < positions[k] )
+ {
+ swap(positions[i],positions[k]);
+ swap(spheres[i],spheres[k]);
+ }
+
+ k = 0;
+ for( i = 0; i < 4; i++ )
+ {
+ switch( sc->data[spheres[i]]->val1 )
+ {
+ case WLS_FIRE: subskill = WL_TETRAVORTEX_FIRE; k |= 1; break;
+ case WLS_WIND: subskill = WL_TETRAVORTEX_WIND; k |= 4; break;
+ case WLS_WATER: subskill = WL_TETRAVORTEX_WATER; k |= 2; break;
+ case WLS_STONE: subskill = WL_TETRAVORTEX_GROUND; k |= 8; break;
+ }
+
+ skill_addtimerskill(src,tick+status_get_adelay(src)*i,bl->id,k,0,subskill,skilllv,i,flag);
+ status_change_end(src, spheres[i], INVALID_TIMER);
+ }
+ }
+ break;
+
+ case WL_RELEASE:
+ if( sd )
+ {
+ int i;
+ // Priority is to release SpellBook
+ ARR_FIND(0,MAX_SPELLBOOK,i,sd->rsb[i].skillid != 0);
+ if( i < MAX_SPELLBOOK )
+ { // SpellBook
+ int rsb_skillid, rsb_skilllv;
+
+ if( skilllv > 1 )
+ {
+ ARR_FIND(0,MAX_SPELLBOOK,i,sd->rsb[i].skillid == 0);
+ i--; // At skilllvl 2, Release uses the last learned skill in spellbook
+ }
+
+ rsb_skillid = sd->rsb[i].skillid;
+ rsb_skilllv = sd->rsb[i].level;
+
+ if( skilllv > 1 )
+ sd->rsb[i].skillid = 0; // Last position - only remove it from list
+ else
+ memmove(&sd->rsb[0],&sd->rsb[1],sizeof(sd->rsb) - sizeof(sd->rsb[0]));
+
+ if( sd->rsb[0].skillid == 0 )
+ status_change_end(src, SC_READING_SB, INVALID_TIMER);
+
+ status_change_end(src, SC_MAGICPOWER, INVALID_TIMER);
+
+ clif_skill_nodamage(src,bl,skillid,skilllv,1);
+ if( !skill_check_condition_castbegin(sd,rsb_skillid,rsb_skilllv) )
+ break;
+
+ switch( skill_get_casttype(rsb_skillid) )
+ {
+ case CAST_GROUND:
+ skill_castend_pos2(src,bl->x,bl->y,rsb_skillid,rsb_skilllv,tick,0);
+ break;
+ case CAST_NODAMAGE:
+ skill_castend_nodamage_id(src,bl,rsb_skillid,rsb_skilllv,tick,0);
+ break;
+ case CAST_DAMAGE:
+ skill_castend_damage_id(src,bl,rsb_skillid,rsb_skilllv,tick,0);
+ break;
+ }
+
+ sd->ud.canact_tick = tick + skill_delayfix(src, rsb_skillid, rsb_skilllv);
+ clif_status_change(src, SI_ACTIONDELAY, 1, skill_delayfix(src, rsb_skillid, rsb_skilllv), 0, 0, 0);
+ }
+ else
+ { // Summon Balls
+ int j = 0, k, skele;
+ int spheres[5] = { 0, 0, 0, 0, 0 },
+ positions[5] = {-1,-1,-1,-1,-1 };
+
+ for( i = SC_SPHERE_1; i <= SC_SPHERE_5; i++ )
+ if( sc && sc->data[i] )
+ {
+ spheres[j] = i;
+ positions[j] = sc->data[i]->val2;
+ sc->data[i]->val2--; // Prepares for next position
+ j++;
+ }
+
+ if( j == 0 )
+ { // No Spheres
+ clif_skill_fail(sd,skillid,0,0);
+ break;
+ }
+
+ // Sphere Sort
+ for( i = 0; i <= j - 2; i++ )
+ for( k = i + 1; k <= j - 1; k++ )
+ if( positions[i] > positions[k] )
+ {
+ swap(positions[i],positions[k]);
+ swap(spheres[i],spheres[k]);
+ }
+
+ status_change_end(src, SC_MAGICPOWER, INVALID_TIMER);
+
+ if( skilllv == 1 ) j = 1; // Limit only to one ball
+ for( i = 0; i < j; i++ )
+ {
+ skele = WL_RELEASE - 5 + sc->data[spheres[i]]->val1 - WLS_FIRE; // Convert Ball Element into Skill ATK for balls
+ // WL_SUMMON_ATK_FIRE, WL_SUMMON_ATK_WIND, WL_SUMMON_ATK_WATER, WL_SUMMON_ATK_GROUND
+ skill_addtimerskill(src,tick+status_get_adelay(src)*i,bl->id,0,0,skele,sc->data[spheres[i]]->val3,BF_MAGIC,flag|SD_LEVEL);
+ status_change_end(src, spheres[i], INVALID_TIMER); // Eliminate ball
+ }
+ clif_skill_nodamage(src,bl,skillid,0,1);
+ }
+ }
+ break;
+ case WL_FROSTMISTY:
+ {
+ struct status_change *tsc = status_get_sc(bl);
+ if( tsc && (tsc->option&(OPTION_HIDE|OPTION_CLOAK|OPTION_CHASEWALK) || tsc->data[SC__INVISIBILITY]) )
+ break; // Doesn't hit/cause Freezing to invisible enemy
+ // Causes Freezing status through walls.
+ sc_start(bl,status_skill2sc(skillid),20+12*skilllv+(sd ? sd->status.job_level : 50)/5,skilllv,skill_get_time(skillid,skilllv));
+ // Doesn't deal damage through non-shootable walls.
+ if( path_search(NULL,src->m,src->x,src->y,bl->x,bl->y,1,CELL_CHKWALL) )
+ skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag);
+ }
+ break;
+
+ case WL_JACKFROST: {
+ struct status_change *tsc = status_get_sc(bl);
+ if( tsc && (tsc->option&(OPTION_HIDE|OPTION_CLOAK|OPTION_CHASEWALK) || tsc->data[SC__INVISIBILITY]) )
+ break; // Do not hit invisible enemy
+ skill_attack(skill_get_type(skillid), src, src, bl, skillid, skilllv, tick, flag);
+ }
+ break;
+ /**
+ * Ranger
+ **/
+ case RA_WUGSTRIKE:
+ case RA_WUGBITE:
+ if( path_search(NULL,src->m,src->x,src->y,bl->x,bl->y,1,CELL_CHKNOREACH) ) {
+ if( skillid == RA_WUGSTRIKE ) {
+ if( sd && pc_isridingwug(sd) && !map_flag_gvg(src->m) && !map[src->m].flag.battleground && unit_movepos(src,bl->x,bl->y,1,1) )
+ clif_slide(src, bl->x, bl->y);
+ }
skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
+ }
+ break;
+
+ case RA_SENSITIVEKEEN:
+ if( bl->type != BL_SKILL ) { // Only Hits Invisible Targets
+ struct status_change * tsc = status_get_sc(bl);
+ if(tsc && (tsc->option&(OPTION_HIDE|OPTION_CLOAK) || tsc->data[SC__INVISIBILITY]) )
+ skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
+ }
+ else
+ {
+ struct skill_unit *su = BL_CAST(BL_SKILL,bl);
+ struct skill_unit_group* sg;
+
+ if( su && (sg=su->group) && skill_get_inf2(sg->skill_id)&INF2_TRAP && sg->src_id != src->id &&
+ battle_check_target(src, map_id2bl(sg->src_id), BCT_ENEMY) > 0 )
+ {
+ if( sd && !(sg->unit_id == UNT_USED_TRAPS || (sg->unit_id == UNT_ANKLESNARE && sg->val2 != 0 )) )
+ {
+ struct item item_tmp;
+ memset(&item_tmp,0,sizeof(item_tmp));
+ item_tmp.nameid = ( sg->unit_id >= UNT_MAGENTATRAP && sg->unit_id <= UNT_CLUSTERBOMB )?ITEMID_TRAP_ALLOY:ITEMID_TRAP;
+ item_tmp.identify = 1;
+ if( item_tmp.nameid )
+ map_addflooritem(&item_tmp,1,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0);
+ }
+ skill_delunit(su);
+ }
+ }
+ break;
+ /**
+ * Mechanic
+ **/
+ case NC_INFRAREDSCAN:
+ if( flag&1 )
+ { //TODO: Need a confirmation if the other type of hidden status is included to be scanned. [Jobbie]
+ if( rand()%100 < 50 )
+ sc_start(bl, SC_INFRAREDSCAN, 10000, skilllv, skill_get_time(skillid, skilllv));
+ status_change_end(bl, SC_HIDING, -1);
+ status_change_end(bl, SC_CLOAKING, -1);
+ status_change_end(bl, SC_CLOAKINGEXCEED, -1); // Need confirm it.
+ }
+ else
+ {
+ map_foreachinrange(skill_area_sub, bl, skill_get_splash(skillid, skilllv), splash_target(src), src, skillid, skilllv, tick, flag|BCT_ENEMY|SD_SPLASH|1, skill_castend_damage_id);
+ clif_skill_damage(src,src,tick, status_get_amotion(src), 0, -30000, 1, skillid, skilllv, 6);
+ if( sd ) pc_overheat(sd,1);
+ }
+ break;
+
+ case NC_MAGNETICFIELD:
+ sc_start2(bl,SC_MAGNETICFIELD,100,skilllv,src->id,skill_get_time(skillid,skilllv));
break;
case 0:
if(sd) {
@@ -3209,9 +3840,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
skill_consume_requirement(sd,skillid,skilllv,2);
}
- if( sd && skill_get_cooldown(skillid,skilllv) )
- skill_blockpc_start (sd, skillid, skill_get_cooldown(skillid, skilllv));
-
return 0;
}
@@ -3268,6 +3896,9 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
case AL_HEAL:
case ALL_RESURRECTION:
case PR_ASPERSIO:
+ /**
+ * Arch Bishop
+ **/
case AB_RENOVATIO:
case AB_HIGHNESSHEAL:
//Apparently only player casted skills can be offensive like this.
@@ -3303,12 +3934,20 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
{
case HLIF_HEAL: //[orn]
case AL_HEAL:
+ /**
+ * Arch Bishop
+ **/
case AB_HIGHNESSHEAL:
{
- int heal = skill_calc_heal(src, bl, skillid, skilllv, true);
+ int heal = skill_calc_heal(src, bl, (skillid == AB_HIGHNESSHEAL)?AL_HEAL:skillid, (skillid == AB_HIGHNESSHEAL)?10:skilllv, true);
int heal_get_jobexp;
-
- if( status_isimmune(bl) || (dstmd && (dstmd->class_ == MOBID_EMPERIUM || mob_is_battleground(dstmd))) )
+ //Highness Heal: starts at 1.5 boost + 0.5 for each level
+ if( skillid == AB_HIGHNESSHEAL ) {
+ heal = heal * ( 15 + 5 * skilllv ) / 10;
+ }
+ if( status_isimmune(bl) ||
+ (dstmd && (dstmd->class_ == MOBID_EMPERIUM || mob_is_battleground(dstmd))) ||
+ (skillid == AL_HEAL && dstsd && dstsd->sc.option&OPTION_MADOGEAR) )//Mado is immune to AL_HEAL
heal=0;
if( sd && dstsd && sd->status.partner_id == dstsd->status.char_id && (sd->class_&MAPID_UPPERMASK) == MAPID_SUPER_NOVICE && sd->status.sex == 0 )
@@ -3421,12 +4060,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
case AL_DECAGI:
case MER_DECAGI:
- if (skilllv = battle_config.max_decagi_lv)
- clif_skill_nodamage (src, bl, skillid, skilllv,
- sc_start(bl, type, (40 + skilllv * 2 + (status_get_lv(src) + sstatus->int_)/5), (battle_config.max_decagi - 2), battle_config.max_decagi_dur));
- else
- clif_skill_nodamage (src, bl, skillid, skilllv,
- sc_start(bl, type, (40 + skilllv * 2 + (status_get_lv(src) + sstatus->int_)/5), skilllv, skill_get_time(skillid,skilllv)));
+ clif_skill_nodamage (src, bl, skillid, skilllv,
+ sc_start(bl, type, (40 + skilllv * 2 + (status_get_lv(src) + sstatus->int_)/5), skilllv, skill_get_time(skillid,skilllv)));
break;
case AL_CRUCIS:
@@ -3721,7 +4356,10 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
sc_start4(src,SC_WATK_ELEMENT,100,3,20,0,0,skill_get_time2(skillid, skilllv));
if (sd) skill_blockpc_start (sd, skillid, skill_get_time(skillid, skilllv));
break;
-
+ case ASC_EDP:
+ clif_skill_nodamage(src,bl,skillid,skilllv,
+ sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv) + ( sd ? 3000 * pc_checkskill(sd,GC_RESEARCHNEWPOISON) : 0 )));
+ break;
case AL_INCAGI:
case AL_BLESSING:
case MER_INCAGI:
@@ -3762,7 +4400,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
case HW_MAGICPOWER:
case PF_MEMORIZE:
case PA_SACRIFICE:
- case ASC_EDP:
case PF_DOUBLECASTING:
case SG_SUN_COMFORT:
case SG_MOON_COMFORT:
@@ -3779,17 +4416,32 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
case ST_PRESERVE:
case NPC_INVINCIBLE:
case NPC_INVINCIBLEOFF:
+ /**
+ * Rune Knight
+ **/
case RK_DEATHBOUND:
- case RK_MILLENNIUMSHIELD:
- case RK_CRUSHSTRIKE:
- case RK_GIANTGROWTH:
- case RK_STONEHARDSKIN:
- case RK_VITALITYACTIVATION:
- case RK_ABUNDANCE:
+ /**
+ * Arch Bishop
+ **/
case AB_RENOVATIO:
case AB_EXPIATIO:
case AB_DUPLELIGHT:
case AB_SECRAMENT:
+ /**
+ * Mechanic
+ **/
+ case NC_ACCELERATION:
+ case NC_HOVERING:
+ case NC_SHAPESHIFT:
+ /**
+ * Warlock
+ **/
+ case WL_RECOGNIZEDSPELL:
+ /**
+ * Guillotine Cross
+ **/
+ case GC_VENOMIMPRESS:
+
clif_skill_nodamage(src,bl,skillid,skilllv,
sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv)));
break;
@@ -4047,14 +4699,14 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
case AM_PHARMACY:
if(sd) {
- clif_skill_produce_mix_list(sd,22);
+ clif_skill_produce_mix_list(sd,skillid,22);
clif_skill_nodamage(src,bl,skillid,skilllv,1);
}
break;
case SA_CREATECON:
if(sd) {
- clif_skill_produce_mix_list(sd,23);
+ clif_skill_produce_mix_list(sd,skillid,23);
clif_skill_nodamage(src,bl,skillid,skilllv,1);
}
break;
@@ -4075,12 +4727,32 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
case ASC_METEORASSAULT:
case GS_SPREADATTACK:
+ /**
+ * Rune Knight
+ **/
+ case RK_STORMBLAST:
+ /**
+ * Mechanic
+ **/
+ case NC_AXETORNADO:
+ /**
+ * Guilotine Cross
+ **/
+ case GC_COUNTERSLASH:
skill_area_temp[1] = 0;
clif_skill_nodamage(src,bl,skillid,skilllv,1);
- map_foreachinrange(skill_area_sub, bl, skill_get_splash(skillid, skilllv), splash_target(src),
+ i = map_foreachinrange(skill_area_sub, bl, skill_get_splash(skillid, skilllv), splash_target(src),
src, skillid, skilllv, tick, flag|BCT_ENEMY|SD_SPLASH|1, skill_castend_damage_id);
+ if( !i && skillid == NC_AXETORNADO )
+ clif_skill_damage(src,src,tick, status_get_amotion(src), 0, -30000, 1, skillid, skilllv, 6);
break;
+ case NC_EMERGENCYCOOL:
+ clif_skill_nodamage(src,bl,skillid,skilllv,1);
+ status_change_end(src,SC_OVERHEAT_LIMITPOINT,-1);
+ status_change_end(src,SC_OVERHEAT,-1);
+ break;
+ case NC_INFRAREDSCAN:
case NPC_EARTHQUAKE:
case NPC_VAMPIRE_GIFT:
case NPC_HELLJUDGEMENT:
@@ -4156,7 +4828,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
case BS_ADRENALINE2:
case BS_WEAPONPERFECT:
case BS_OVERTHRUST:
- case RK_FIGHTINGSPIRIT: //Splash range in skill_db is 0, should be map-wide according to party_foreachsamemap
if (sd == NULL || sd->status.party_id == 0 || (flag & 1)) {
clif_skill_nodamage(bl,bl,skillid,skilllv,
sc_start2(bl,type,100,skilllv,(src == bl)? 1:0,skill_get_time(skillid,skilllv)));
@@ -4225,6 +4896,11 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
clif_skill_nodamage(src,bl,skillid,-1,status_change_end(bl, type, INVALID_TIMER)); //Hide skill-scream animation.
map_freeblock_unlock();
return 0;
+ } else if( tsc && tsc->option&OPTION_MADOGEAR ) {
+ //Mado Gear cannot hide
+ if( sd ) clif_skill_fail(sd,skillid,0,0);
+ map_freeblock_unlock();
+ return 0;
}
clif_skill_nodamage(src,bl,skillid,-1,sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv)));
break;
@@ -4240,6 +4916,11 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
clif_walkok(sd); // So aegis has to resend the walk ok.
break;
case AS_CLOAKING:
+ case RA_CAMOUFLAGE:
+ /**
+ * Guilotine Cross
+ **/
+ case GC_CLOAKINGEXCEED:
if (tsce)
{
i = status_change_end(bl, type, INVALID_TIMER);
@@ -4305,7 +4986,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
if(pc_steal_item(sd,bl,skilllv))
clif_skill_nodamage(src,bl,skillid,skilllv,1);
else
- clif_skill_fail(sd,skillid,10,0);
+ clif_skill_fail(sd,skillid,0x0a,0);
}
break;
@@ -4559,6 +5240,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
case RG_STRIPARMOR:
case RG_STRIPHELM:
case ST_FULLSTRIP:
+ case GC_WEAPONCRUSH:
{
unsigned short location = 0;
int d = 0;
@@ -4577,6 +5259,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
switch (skillid) {
case RG_STRIPWEAPON:
+ case GC_WEAPONCRUSH:
location = EQP_WEAPON;
break;
case RG_STRIPSHIELD:
@@ -4594,14 +5277,14 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
}
//Special message when trying to use strip on FCP [Jobbie]
- if( sd && skillid == ST_FULLSTRIP && tsc && tsc->data[SC_CP_WEAPON] && tsc->data[SC_CP_HELM] && tsc->data[SC_CP_ARMOR] && tsc->data[SC_CP_SHIELD] )
+ if( sd && skillid == ST_FULLSTRIP && tsc && tsc->data[SC_CP_WEAPON] && tsc->data[SC_CP_HELM] && tsc->data[SC_CP_ARMOR] && tsc->data[SC_CP_SHIELD])
{
clif_gospel_info(sd, 0x28);
break;
}
//Attempts to strip at rate i and duration d
- if( (i = skill_strip_equip(bl, location, i, skilllv, d)) || skillid != ST_FULLSTRIP )
+ if( (i = skill_strip_equip(bl, location, i, skilllv, d)) || (skillid != ST_FULLSTRIP && skillid != GC_WEAPONCRUSH ) )
clif_skill_nodamage(src,bl,skillid,skilllv,i);
//Nothing stripped.
@@ -4765,7 +5448,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
clif_skill_nodamage(src,bl,skillid,skilllv,1);
if((dstsd && (dstsd->class_&MAPID_UPPERMASK) == MAPID_SOUL_LINKER)
|| (tsc && tsc->data[SC_SPIRIT] && tsc->data[SC_SPIRIT]->val2 == SL_ROGUE) //Rogue's spirit defends againt dispel.
- || rand()%100 >= 50+10*skilllv)
+ || rand()%100 >= 50+10*skilllv
+ || ( tsc && tsc->option&OPTION_MADOGEAR ) )//Mado Gear is immune to dispell according to bug report 49 [Ind]
{
if (sd)
clif_skill_fail(sd,skillid,0,0);
@@ -5778,19 +6462,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
skill_castend_nodamage_id);
}
break;
- case ALL_PARTYFLEE:
- if( sd && !(flag&1) )
- {
- if( !sd->status.party_id )
- {
- clif_skill_fail(sd,skillid,0,0);
- break;
- }
- party_foreachsamemap(skill_area_sub, sd, skill_get_splash(skillid, skilllv), src, skillid, skilllv, tick, flag|BCT_PARTY|1, skill_castend_nodamage_id);
- }
- else
- clif_skill_nodamage(src,bl,skillid,skilllv,sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv)));
- break;
case NPC_TALK:
case ALL_WEWISH:
clif_skill_nodamage(src,bl,skillid,skilllv,1);
@@ -5802,271 +6473,606 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
}
break;
case RK_ENCHANTBLADE:
- i = status_get_int(src) + status_get_lv(src) / 10;
- clif_skill_nodamage(src,bl,skillid,skilllv,
- sc_start(bl,type,100,i,skill_get_time(skillid,skilllv)));
+ clif_skill_nodamage(src,bl,skillid,skilllv,// formula not confirmed
+ sc_start2(bl,type,100,skilllv,100+20*skilllv/*+sstatus->int_/2+status_get_lv(bl)/10*/,skill_get_time(skillid,skilllv)));
break;
- case RK_IGNITIONBREAK:
- if(flag&1)
- skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
- else
+ case RK_DRAGONHOWLING:
+ if( flag&1)
+ sc_start(bl,type,50 + 6 * skilllv,skilllv,skill_get_time(skillid,skilllv));
+ else
{
+ skill_area_temp[2] = 0;
clif_skill_nodamage(src,bl,skillid,skilllv,1);
- map_foreachinrange(skill_area_sub, bl,
- skill_get_splash(skillid, skilllv),BL_CHAR,
- src,skillid,skilllv,tick, flag|BCT_ENEMY|1,
+ map_foreachinrange(skill_area_sub, src,
+ skill_get_splash(skillid,skilllv),BL_CHAR,
+ src,skillid,skilllv,tick,flag|BCT_ENEMY|SD_PREAMBLE|1,
skill_castend_nodamage_id);
}
break;
- case RK_DRAGONHOWLING:
- if(flag&1)
- sc_start(bl,SC_FEAR,50 + skilllv * 6,skilllv,skill_get_time2(skillid,skilllv));
- else
+ case RK_IGNITIONBREAK:
+ //case LG_EARTHDRIVE:
+ clif_skill_damage(src,bl,tick, status_get_amotion(src), 0, -30000, 1, skillid, skilllv, 6);
+ //if( skillid == LG_EARTHDRIVE )
+ //{
+ // int dummy = 1;
+ // i = skill_get_splash(skillid,skilllv);
+ // map_foreachinarea(skill_cell_overlap, src->m, src->x-i, src->y-i, src->x+i, src->y+i, BL_SKILL, LG_EARTHDRIVE, &dummy, src);
+ //}
+ map_foreachinrange(skill_area_sub, bl,skill_get_splash(skillid,skilllv),BL_CHAR,
+ src,skillid,skilllv,tick,flag|BCT_ENEMY|1,skill_castend_damage_id);
+ break;
+ case RK_STONEHARDSKIN:
+ if( sd && pc_checkskill(sd,RK_RUNEMASTERY) >= 4 )
{
- clif_skill_nodamage(src,bl,skillid,skilllv,1);
- map_foreachinrange(skill_area_sub, bl,
- skill_get_splash(skillid, skilllv),BL_CHAR,
- src,skillid,skilllv,tick, flag|BCT_ENEMY|1,
- skill_castend_nodamage_id);
+ int heal = sstatus->hp / 4; // 25% HP
+ if( status_charge(bl,heal,0) )
+ clif_skill_nodamage(src,bl,skillid,skilllv,sc_start2(bl,type,100,skilllv,heal,skill_get_time(skillid,skilllv)));
+ else
+ clif_skill_fail(sd,skillid,0,0);
}
break;
case RK_REFRESH:
+ if( sd && pc_checkskill(sd,RK_RUNEMASTERY) >= 8 )
{
- int heal = sstatus->max_hp * 25 / 100;
- status_heal(bl,heal,0,0);
+ int heal = status_get_max_hp(bl) * 25 / 100;
clif_skill_nodamage(src,bl,skillid,skilllv,
sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv)));
- status_change_clear_buffs(bl,6);
+ status_heal(bl,heal,0,1);
+ status_change_clear_buffs(bl,2);
}
break;
- case RK_STORMBLAST:
- if( flag&1 )
- skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
+
+ case RK_MILLENNIUMSHIELD:
+ if( sd && pc_checkskill(sd,RK_RUNEMASTERY) >= 9 )
+ {
+ short shields = (rand()%100<50) ? 4 : ((rand()%100<80) ? 3 : 2);
+ sc_start4(bl,type,100,skilllv,shields,1000,0,skill_get_time(skillid,skilllv));
+ clif_millenniumshield(sd,shields);
+ clif_skill_nodamage(src,bl,skillid,1,1);
+ }
+ break;
+
+ case RK_GIANTGROWTH:
+ case RK_VITALITYACTIVATION:
+ case RK_ABUNDANCE:
+ if( sd )
+ {
+ int lv = 1; // RK_GIANTGROWTH
+ if( skillid == RK_VITALITYACTIVATION )
+ lv = 2;
+ else if( skillid == RK_ABUNDANCE )
+ lv = 6;
+ if( pc_checkskill(sd,RK_RUNEMASTERY) >= lv )
+ clif_skill_nodamage(src,bl,skillid,skilllv,sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv)));
+ }
+ break;
+
+ case RK_FIGHTINGSPIRIT:
+ if( flag&1 ) {
+ if( src == bl )
+ sc_start2(bl,type,100,skill_area_temp[5],10*(sd?pc_checkskill(sd,RK_RUNEMASTERY):10),skill_get_time(skillid,skilllv));
+ else
+ sc_start(bl,type,100,skill_area_temp[5]/4,skill_get_time(skillid,skilllv));
+ } else if( sd && pc_checkskill(sd,RK_RUNEMASTERY) >= 5 ) {
+ if( sd->status.party_id ) {
+ i = party_foreachsamemap(skill_area_sub,sd,skill_get_splash(skillid,skilllv),src,skillid,skilllv,tick,BCT_PARTY,skill_area_sub_count);
+ skill_area_temp[5] = 7 * i; // ATK
+ party_foreachsamemap(skill_area_sub,sd,skill_get_splash(skillid,skilllv),src,skillid,skilllv,tick,flag|BCT_PARTY|1,skill_castend_nodamage_id);
+ } else
+ sc_start2(bl,type,100,7,5,skill_get_time(skillid,skilllv));
+ }
+ clif_skill_nodamage(src,bl,skillid,1,1);
+ break;
+ /**
+ * Guilotine Cross
+ **/
+ case GC_ROLLINGCUTTER:
+ {
+ short count = 1;
+ skill_area_temp[2] = 0;
+ map_foreachinrange(skill_area_sub,src,skill_get_splash(skillid,skilllv),BL_CHAR,src,skillid,skilllv,tick,flag|BCT_ENEMY|SD_PREAMBLE|SD_SPLASH|1,skill_castend_damage_id);
+ if( tsc && tsc->data[SC_ROLLINGCUTTER] )
+ { // Every time the skill is casted the status change is reseted adding a counter.
+ count += (short)tsc->data[SC_ROLLINGCUTTER]->val1;
+ if( count > 10 )
+ count = 10; // Max coounter
+ status_change_end(bl, SC_ROLLINGCUTTER, INVALID_TIMER);
+ }
+ sc_start(bl,SC_ROLLINGCUTTER,100,count,skill_get_time(skillid,skilllv));
+ clif_skill_nodamage(src,src,skillid,skilllv,1);
+ }
+ break;
+
+ case GC_WEAPONBLOCKING:
+ if( tsc && tsc->data[SC_WEAPONBLOCKING] )
+ status_change_end(bl, SC_WEAPONBLOCKING, INVALID_TIMER);
else
+ sc_start(bl,SC_WEAPONBLOCKING,100,skilllv,skill_get_time(skillid,skilllv));
+ clif_skill_nodamage(src,bl,skillid,skilllv,1);
+ break;
+
+ case GC_CREATENEWPOISON:
+ if( sd )
{
+ clif_skill_produce_mix_list(sd,skillid,25);
+ clif_skill_nodamage(src, bl, skillid, skilllv, 1);
+ }
+ break;
+
+ case GC_POISONINGWEAPON:
+ if( sd ) {
+ clif_poison_list(sd,skilllv);
clif_skill_nodamage(src,bl,skillid,skilllv,1);
- map_foreachinrange(skill_area_sub, bl,
- skill_get_splash(skillid, skilllv),BL_CHAR,
- src,skillid,skilllv,tick, flag|BCT_ENEMY|1,
- skill_castend_nodamage_id);
}
break;
- case RK_PHANTOMTHRUST:
- if(battle_check_target(src,bl,BCT_ENEMY) > 0 || battle_check_target(src,bl,BCT_PARTY) > 0)
+
+ case GC_ANTIDOTE:
+ clif_skill_nodamage(src,bl,skillid,skilllv,1);
+ if( tsc )
+ {
+ status_change_end(bl, SC_PARALYSE, INVALID_TIMER);
+ status_change_end(bl, SC_PYREXIA, INVALID_TIMER);
+ status_change_end(bl, SC_DEATHHURT, INVALID_TIMER);
+ status_change_end(bl, SC_LEECHESEND, INVALID_TIMER);
+ status_change_end(bl, SC_VENOMBLEED, INVALID_TIMER);
+ status_change_end(bl, SC_MAGICMUSHROOM, INVALID_TIMER);
+ status_change_end(bl, SC_TOXIN, INVALID_TIMER);
+ status_change_end(bl, SC_OBLIVIONCURSE, INVALID_TIMER);
+ }
+ break;
+
+ case GC_PHANTOMMENACE:
+ clif_skill_damage(src,bl,tick, status_get_amotion(src), 0, -30000, 1, skillid, skilllv, 6);
+ clif_skill_nodamage(src,bl,skillid,skilllv,1);
+ map_foreachinrange(skill_area_sub,src,skill_get_splash(skillid,skilllv),BL_CHAR,
+ src,skillid,skilllv,tick,flag|BCT_ENEMY|1,skill_castend_damage_id);
+ break;
+
+ case GC_HALLUCINATIONWALK:
{
- if(!map[bl->m].flag.gvg && !map[bl->m].flag.battleground && !(status_get_mode(bl)&MD_BOSS))
+ int heal = status_get_max_hp(bl) / 10;
+ if( status_get_hp(bl) < heal ) { // if you haven't enough HP skill fails.
+ if( sd ) clif_skill_fail(sd,skillid,0x02,0);
+ break;
+ }
+ if( !status_charge(bl,heal,0) )
{
- int x = 0, y = 0;
- if(bl->x > src->x) x = 1;
- else if(bl->x < src->x) x = -1;
- if(bl->y >= src->y) y = 1;
- else if(bl->y < src->y) y = -1;
- unit_movepos(bl, src->x+x, src->y+y, 1, 0);
- clif_slide(bl,src->x+x, src->y+y);
+ if( sd ) clif_skill_fail(sd,skillid,0x02,0);
+ break;
}
- clif_skill_nodamage(src,bl,skillid,skilllv,1);
- if (battle_check_target(src,bl,BCT_ENEMY) > 0 )
- skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
+ clif_skill_nodamage(src,bl,skillid,skilllv,sc_start(bl,type,100,skilllv,skill_get_time(skillid,skilllv)));
}
break;
+ /**
+ * Arch Bishop
+ **/
case AB_ANCILLA:
- if(sd) {
- if (skill_produce_mix(sd, skillid, 12333, 0, 0, 0, 1))
- clif_skill_nodamage(src,bl,skillid,skilllv,1);
- else
- clif_skill_fail(sd,skillid,0,0);
+ if( sd ) {
+ clif_skill_nodamage(src,bl,skillid,skilllv,1);
+ skill_produce_mix(sd, skillid, ITEMID_ANCILLA, 0, 0, 0, 1);
}
break;
+
case AB_CLEMENTIA:
case AB_CANTO:
- if( sd == NULL || sd->status.party_id == 0 || (flag & 1) ) {
- int lv = 1;
- switch(skillid) {
- case AB_CLEMENTIA: if( sd ) lv = pc_checkskill(sd,AL_BLESSING); break;
- case AB_CANTO: if( sd ) lv = pc_checkskill(sd,AL_INCAGI); break;
- }
- clif_skill_nodamage(bl, bl, skillid, skilllv,
- sc_start4(bl,type,100,lv,0,sd?sd->status.job_level:0,0,skill_get_time(skillid,skilllv)));
+ {
+ int bless_lv = pc_checkskill(sd,AL_BLESSING);
+ int agi_lv = pc_checkskill(sd,AL_INCAGI);
+ if( sd == NULL || sd->status.party_id == 0 || flag&1 )
+ clif_skill_nodamage(bl, bl, skillid, skilllv, sc_start(bl,type,100,
+ (skillid == AB_CLEMENTIA)? bless_lv : (skillid == AB_CANTO)? agi_lv : skilllv, skill_get_time(skillid,skilllv)));
+ else if( sd )
+ party_foreachsamemap(skill_area_sub, sd, skill_get_splash(skillid, skilllv), src, skillid, skilllv, tick, flag|BCT_PARTY|1, skill_castend_nodamage_id);
}
+ break;
+
+ case AB_PRAEFATIO:
+ if( sd == NULL || sd->status.party_id == 0 || flag&1 )
+ clif_skill_nodamage(bl, bl, skillid, skilllv, sc_start4(bl, type, 100, skilllv, 0, 0, 1, skill_get_time(skillid, skilllv)));
else if( sd )
party_foreachsamemap(skill_area_sub, sd, skill_get_splash(skillid, skilllv), src, skillid, skilllv, tick, flag|BCT_PARTY|1, skill_castend_nodamage_id);
break;
+
case AB_CHEAL:
if( sd == NULL || sd->status.party_id == 0 || flag&1 )
{
- int lv = (sd?pc_checkskill(sd, AL_HEAL):1);
if( sd && tstatus && !battle_check_undead(tstatus->race, tstatus->def_ele) )
{
- int heal = skill_calc_heal(src, bl, AL_HEAL, lv, true);
- if( status_isimmune(bl) )
- heal = 0;
-
- if( sd->status.party_id && (i = party_foreachsamemap(party_sub_count, sd, 0)) > 1 )
- heal += ((heal / 100) * (i * 10) / 4);
-
- clif_skill_nodamage(bl, bl, skillid, heal, 1);
- status_heal(bl, heal, 0, 0);
+ i = skill_calc_heal(src, bl, AL_HEAL, pc_checkskill(sd, AL_HEAL), true);
+ status_heal(bl, i, 0, 1);
+ clif_skill_nodamage(bl, bl, skillid, i, 1);
}
}
else if( sd )
party_foreachsamemap(skill_area_sub, sd, skill_get_splash(skillid, skilllv), src, skillid, skilllv, tick, flag|BCT_PARTY|1, skill_castend_nodamage_id);
break;
- case AB_PRAEFATIO:
- if( (flag&1) || sd == NULL || sd->status.party_id == 0 )
- {
- if( dstsd && dstsd->special_state.no_magic_damage )
- break;
- if ( sd && sd->status.party_id && (i = party_foreachsamemap(party_sub_count, sd, 0)) > 0)
- {
- clif_skill_nodamage(bl, bl, skillid, skilllv,
- sc_start4(bl, type, 100, skilllv, 0, 0, i, skill_get_time(skillid, skilllv)));
- }
- }
- else
- party_foreachsamemap(skill_area_sub, sd, skill_get_splash(skillid, skilllv), src, skillid, skilllv, tick, flag|BCT_PARTY|1, skill_castend_nodamage_id);
- break;
case AB_ORATIO:
- if (flag&1)
- sc_start(bl, type, 40+5*skilllv, skilllv, skill_get_time(skillid, skilllv));
+ if( flag&1 )
+ sc_start(bl, type, 40 + 5 * skilllv, skilllv, skill_get_time(skillid, skilllv));
else
{
+ map_foreachinrange(skill_area_sub, src, skill_get_splash(skillid, skilllv), BL_CHAR,
+ src, skillid, skilllv, tick, flag|BCT_ENEMY|1, skill_castend_nodamage_id);
clif_skill_nodamage(src, bl, skillid, skilllv, 1);
- map_foreachinrange(skill_area_sub, bl,
- skill_get_splash(skillid, skilllv), BL_CHAR,
- src, skillid, skilllv, tick, flag|BCT_ENEMY|1,
- skill_castend_nodamage_id);
}
break;
+
case AB_LAUDAAGNUS:
+ if( flag&1 || sd == NULL )
+ {
+ if( (tsc && (tsc->data[SC_FREEZE] || tsc->data[SC_STONE] ||
+ tsc->data[SC_BLIND]))&& (rand()%100 < 30+5*skilllv) )
+ {
+ status_change_end(bl, SC_FREEZE, -1);
+ status_change_end(bl, SC_STONE, -1);
+ status_change_end(bl, SC_BLIND, -1);
+ }
+ // Success rate only applies to the curing effect and not stat bonus.
+ clif_skill_nodamage(bl, bl, skillid, skilllv,
+ sc_start(bl, type, 100, skilllv, skill_get_time(skillid, skilllv)));
+ }
+ else if( sd )
+ party_foreachsamemap(skill_area_sub, sd, skill_get_splash(skillid, skilllv),
+ src, skillid, skilllv, tick, flag|BCT_PARTY|1, skill_castend_nodamage_id);
+ break;
+
case AB_LAUDARAMUS:
- if( (flag&1) || sd == NULL || sd->status.party_id == 0 )
+ if( flag&1 || sd == NULL )
{
- if( tsc && (rand()%100 < 40+10*skilllv) )
+ if( (tsc && (tsc->data[SC_SLEEP] || tsc->data[SC_STUN] ||
+ tsc->data[SC_SILENCE]))&& (rand()%100 < 30+5*skilllv) )
{
- switch(skillid)
- {
- case AB_LAUDAAGNUS:
- if( tsc->data[SC_STONE] || tsc->data[SC_FREEZE] || tsc->data[SC_BLIND] ) //TODO: Freezing, Crystallization and Burning
- {
- status_change_end(bl, SC_STONE, INVALID_TIMER);
- status_change_end(bl, SC_FREEZE, INVALID_TIMER);
- status_change_end(bl, SC_BLIND, INVALID_TIMER);
- }
- else
- clif_skill_nodamage(bl, bl, skillid, skilllv, sc_start(bl, type, 100, skilllv, skill_get_time(skillid, skilllv)));
- break;
- case AB_LAUDARAMUS:
- if( tsc->data[SC_STUN] || tsc->data[SC_SLEEP] || tsc->data[SC_SILENCE] ) // TODO: Howling of Mandragora, and Deep Sleep
- {
- status_change_end(bl, SC_STUN, INVALID_TIMER);
- status_change_end(bl, SC_SLEEP, INVALID_TIMER);
- status_change_end(bl, SC_SILENCE, INVALID_TIMER);
- }
- else
- clif_skill_nodamage(bl, bl, skillid, skilllv, sc_start(bl, type, 100, skilllv, skill_get_time(skillid, skilllv)));
- break;
- }
+ status_change_end(bl, SC_SLEEP, -1);
+ status_change_end(bl, SC_STUN, -1);
+ status_change_end(bl, SC_SILENCE, -1);
}
+ clif_skill_nodamage(bl, bl, skillid, skilllv,
+ sc_start(bl, type, 100, skilllv, skill_get_time(skillid, skilllv)));
+ //Success rate only applies to the curing effect and not stat bonus.
}
else if( sd )
party_foreachsamemap(skill_area_sub, sd, skill_get_splash(skillid, skilllv),
src, skillid, skilllv, tick, flag|BCT_PARTY|1, skill_castend_nodamage_id);
break;
+
case AB_CLEARANCE:
+ if( flag&1 || (i = skill_get_splash(skillid, skilllv)) < 1 )
+ { //As of the behavior in official server Clearance is just a super version of Dispell skill. [Jobbie]
+ clif_skill_nodamage(src,bl,skillid,skilllv,1);
+ if((dstsd && (dstsd->class_&MAPID_UPPERMASK) == MAPID_SOUL_LINKER) || rand()%100 >= 30 + 10 * skilllv)
+ {
+ if (sd)
+ clif_skill_fail(sd,skillid,0,0);
+ break;
+ }
+ if(status_isimmune(bl) || !tsc || !tsc->count)
+ break;
+ for(i=0;i<SC_MAX;i++)
+ {
+ if (!tsc->data[i])
+ continue;
+ switch (i) {
+ case SC_WEIGHT50: case SC_WEIGHT90: case SC_HALLUCINATION:
+ case SC_STRIPWEAPON: case SC_STRIPSHIELD: case SC_STRIPARMOR:
+ case SC_STRIPHELM: case SC_CP_WEAPON: case SC_CP_SHIELD:
+ case SC_CP_ARMOR: case SC_CP_HELM: case SC_COMBO:
+ case SC_STRFOOD: case SC_AGIFOOD: case SC_VITFOOD:
+ case SC_INTFOOD: case SC_DEXFOOD: case SC_LUKFOOD:
+ case SC_HITFOOD: case SC_FLEEFOOD: case SC_BATKFOOD:
+ case SC_WATKFOOD: case SC_MATKFOOD: case SC_DANCING:
+ case SC_GUILDAURA: case SC_SPIRIT: case SC_AUTOBERSERK:
+ case SC_CARTBOOST: case SC_MELTDOWN: case SC_SAFETYWALL:
+ case SC_SMA: case SC_SPEEDUP0: case SC_NOCHAT:
+ case SC_ANKLE: case SC_SPIDERWEB: case SC_JAILED:
+ case SC_ITEMBOOST: case SC_EXPBOOST: case SC_LIFEINSURANCE:
+ case SC_BOSSMAPINFO: case SC_PNEUMA: case SC_AUTOSPELL:
+ case SC_INCHITRATE: case SC_INCATKRATE: case SC_NEN:
+ case SC_READYSTORM: case SC_READYDOWN: case SC_READYTURN:
+ case SC_READYCOUNTER:case SC_DODGE: case SC_WARM:
+ case SC_SPEEDUP1: case SC_AUTOTRADE: case SC_CRITICALWOUND:
+ case SC_JEXPBOOST: case SC_INVINCIBLE: case SC_INVINCIBLEOFF:
+ case SC_HELLPOWER: case SC_MANU_ATK: case SC_MANU_DEF:
+ case SC_SPL_ATK: case SC_SPL_DEF: case SC_MANU_MATK:
+ case SC_SPL_MATK: case SC_RICHMANKIM: case SC_ETERNALCHAOS:
+ case SC_DRUMBATTLE: case SC_NIBELUNGEN: case SC_ROKISWEIL:
+ case SC_INTOABYSS: case SC_SIEGFRIED: case SC_WHISTLE:
+ case SC_ASSNCROS: case SC_POEMBRAGI: case SC_APPLEIDUN:
+ case SC_HUMMING: case SC_DONTFORGETME: case SC_FORTUNE:
+ case SC_SERVICE4U: case SC_FOOD_STR_CASH: case SC_FOOD_AGI_CASH:
+ case SC_FOOD_VIT_CASH: case SC_FOOD_DEX_CASH: case SC_FOOD_INT_CASH:
+ case SC_FOOD_LUK_CASH: /* case SC_ELECTRICSHOCKER: case SC_BITE:
+ case SC__STRIPACCESSORY: case SC__ENERVATION: case SC__GROOMY:
+ case SC__IGNORANCE: case SC__LAZINESS: case SC__UNLUCKY:
+ case SC__WEAKNESS: case SC_SAVAGE_STEAK: case SC_COCKTAIL_WARG_BLOOD:
+ case SC_MAGNETICFIELD:case SC_MINOR_BBQ: case SC_SIROMA_ICE_TEA:
+ case SC_DROCERA_HERB_STEAMED: case SC_PUTTI_TAILS_NOODLES:
+ case SC_NEUTRALBARRIER_MASTER: case SC_NEUTRALBARRIER:
+ case SC_STEALTHFIELD_MASTER: case SC_STEALTHFIELD: */
+ continue;
+ case SC_ASSUMPTIO:
+ if( bl->type == BL_MOB )
+ continue;
+ break;
+ }
+ if(i==SC_BERSERK /*|| i==SC_SATURDAYNIGHTFEVER*/) tsc->data[i]->val2=0; //Mark a dispelled berserk to avoid setting hp to 100 by setting hp penalty to 0.
+ status_change_end(bl,(sc_type)i,-1);
+ }
+ break;
+ }
+ map_foreachinrange(skill_area_sub, bl, i, BL_CHAR, src, skillid, skilllv, tick, flag|1, skill_castend_damage_id);
+ break;
+
+ case AB_SILENTIUM:
+ // Should the level of Lex Divina be equivalent to the level of Silentium or should the highest level learned be used? [LimitLine]
+ map_foreachinrange(skill_area_sub, src, skill_get_splash(skillid, skilllv), BL_CHAR,
+ src, PR_LEXDIVINA, skilllv, tick, flag|BCT_ENEMY|1, skill_castend_nodamage_id);
+ clif_skill_nodamage(src, bl, skillid, skilllv, 1);
+ break;
+ /**
+ * Warlock
+ **/
+ case WL_STASIS:
+ if( flag&1 )
+ sc_start2(bl,type,100,skilllv,src->id,skill_get_time(skillid,skilllv));
+ else
+ {
+ map_foreachinrange(skill_area_sub,src,skill_get_splash(skillid, skilllv),BL_CHAR,src,skillid,skilllv,tick,(map_flag_vs(src->m)?BCT_ALL:BCT_ENEMY|BCT_SELF)|flag|1,skill_castend_nodamage_id);
+ clif_skill_nodamage(src, bl, skillid, skilllv, 1);
+ }
+ break;
+
+ case WL_WHITEIMPRISON:
+ if( !(tsc && tsc->data[type]) && (src == bl || battle_check_target(src, bl, BCT_ENEMY)) )
+ {
+ int rate = 50 + 3 * skilllv + ( sd? sd->status.job_level : 50 ) / 4;
+ i = sc_start2(bl,type,rate,skilllv,src->id,(src == bl)?skill_get_time2(skillid,skilllv):skill_get_time(skillid, skilllv));
+ clif_skill_nodamage(src,bl,skillid,skilllv,i);
+ if( sd && i )
+ skill_blockpc_start(sd,skillid,4000); // Reuse Delay only activated on success
+ }
+ else if( sd )
+ clif_skill_fail(sd,skillid,0,0);
+ break;
+
+ case WL_FROSTMISTY:
+ clif_skill_nodamage(src,bl,skillid,skilllv,1);
+ map_foreachinrange(skill_area_sub,bl,skill_get_splash(skillid,skilllv),BL_CHAR|BL_SKILL,src,skillid,skilllv,tick,flag|BCT_ENEMY,skill_castend_damage_id);
+ break;
+
+ case WL_JACKFROST:
clif_skill_nodamage(src,bl,skillid,skilllv,1);
- if( rand()%100 >= 60+10*skilllv )
+ map_foreachinshootrange(skill_area_sub,bl,skill_get_splash(skillid,skilllv),BL_CHAR|BL_SKILL,src,skillid,skilllv,tick,flag|BCT_ENEMY|1,skill_castend_damage_id);
+ break;
+
+ case WL_MARSHOFABYSS:
+ // Should marsh of abyss still apply half reduction to players after the 28/10 patch? [LimitLine]
+ clif_skill_nodamage(src, bl, skillid, skilllv,
+ sc_start4(bl, type, 100, skilllv, status_get_int(src), sd ? sd->status.job_level : 50, 0,
+ skill_get_time(skillid, skilllv)));
+ break;
+
+ case WL_SIENNAEXECRATE:
+ if( status_isimmune(bl) || !tsc )
+ break;
+
+ if( flag&1 )
{
- if (sd)
+ if( bl->id == skill_area_temp[1] )
+ break; // Already work on this target
+
+ if( tsc && tsc->data[SC_STONE] )
+ status_change_end(bl,SC_STONE,-1);
+ else
+ status_change_start(bl,SC_STONE,10000,skilllv,0,0,1000,(8+2*skilllv)*1000,2);
+ }
+ else
+ {
+ int rate = 40 + 8 * skilllv + ( sd? sd->status.job_level : 50 ) / 4;
+ // IroWiki says Rate should be reduced by target stats, but currently unknown
+ if( rand()%100 < rate )
+ { // Success on First Target
+ rate = 0;
+ if( !tsc->data[SC_STONE] )
+ rate = status_change_start(bl,SC_STONE,10000,skilllv,0,0,1000,(8+2*skilllv)*1000,2);
+ else
+ {
+ rate = 1;
+ status_change_end(bl,SC_STONE,-1);
+ }
+
+ if( rate )
+ {
+ skill_area_temp[1] = bl->id;
+ map_foreachinrange(skill_area_sub,bl,skill_get_splash(skillid,skilllv),BL_CHAR,src,skillid,skilllv,tick,flag|BCT_ENEMY|1,skill_castend_nodamage_id);
+ }
+ // Doesn't send failure packet if it fails on defense.
+ }
+ else if( sd ) // Failure on Rate
clif_skill_fail(sd,skillid,0,0);
- break;
}
+ break;
- if(status_isimmune(bl) || !tsc || !tsc->count)
- break;
- for(i=0;i<SC_MAX;i++)
+ case WL_SUMMONFB:
+ case WL_SUMMONBL:
+ case WL_SUMMONWB:
+ case WL_SUMMONSTONE:
{
- if (!tsc->data[i])
- continue;
- //Initial list of status effects NOT cancelled by Clearance.
- switch (i) {
- case SC_WEIGHT50: case SC_WEIGHT90: case SC_TWOHANDQUICKEN:
- case SC_QUAGMIRE: case SC_SLOWPOISON: case SC_BENEDICTIO:
- case SC_TRICKDEAD: case SC_HALLUCINATION: case SC_ASPDPOTION0:
- case SC_ASPDPOTION1: case SC_SPEEDUP1: case SC_STRIPWEAPON:
- case SC_STRIPSHIELD: case SC_STRIPARMOR: case SC_STRIPHELM:
- case SC_CP_WEAPON: case SC_CP_SHIELD: case SC_CP_ARMOR:
- case SC_CP_HELM: case SC_AUTOGUARD: case SC_REFLECTSHIELD:
- case SC_MAGICROD: case SC_SAFETYWALL: case SC_FIREWEAPON:
- case SC_WATERWEAPON: case SC_WINDWEAPON: case SC_EARTHWEAPON:
- case SC_VOLCANO: case SC_DELUGE: case SC_VIOLENTGALE:
- case SC_AUTOBERSERK: case SC_CARTBOOST: case SC_BLADESTOP:
- case SC_ARMOR_ELEMENT: case SC_STOP: case SC_EXPLOSIONSPIRITS:
- case SC_NOCHAT: case SC_PARRYING: case SC_TENSIONRELAX:
- case SC_SACRIFICE: case SC_BASILICA: case SC_GUILDAURA:
- case SC_BLEEDING: case SC_JOINTBEAT: case SC_FOGWALL:
- case SC_SPIDERWEB: case SC_RUN: case SC_SPURT:
- case SC_SHADOWWEAPON: case SC_GHOSTWEAPON: case SC_SPIRIT:
- case SC_WATKFOOD: case SC_MATKFOOD: case SC_KAITE:
- case SC_KAAHI: case SC_KAUPE: case SC_ONEHAND:
- case SC_CHASEWALK: case SC_SLOWDOWN: case SC_DOUBLECAST:
- case SC_GRAVITATION: case SC_CLOSECONFINE: case SC_CLOSECONFINE2:
- case SC_UTSUSEMI: case SC_BUNSINJYUTSU: case SC_SUITON:
- case SC_STRFOOD: case SC_AGIFOOD: case SC_VITFOOD:
- case SC_DEXFOOD: case SC_INTFOOD: case SC_LUKFOOD:
- case SC_FLEEFOOD: case SC_HITFOOD: case SC_JAILED:
- case SC_SUMMER: case SC_WEDDING: case SC_DANCING:
- case SC_EXPBOOST: case SC_LIFEINSURANCE: case SC_ITEMBOOST:
- case SC_BOSSMAPINFO: case SC_FOOD_STR_CASH: case SC_FOOD_AGI_CASH:
- case SC_FOOD_VIT_CASH: case SC_FOOD_DEX_CASH: case SC_FOOD_INT_CASH:
- case SC_FOOD_LUK_CASH: case SC_MERC_FLEEUP: case SC_MERC_ATKUP:
- case SC_MERC_HPUP: case SC_MERC_SPUP: case SC_MERC_HITUP:
- case SC_SLOWCAST: /*case SC_CRITICALWOUND:*/ case SC_SPEEDUP0:
- case SC_DEF_RATE: case SC_MDEF_RATE: case SC_INCHEALRATE:
- case SC_S_LIFEPOTION: case SC_L_LIFEPOTION: case SC_INCCRI:
- case SC_SPCOST_RATE: case SC_COMMONSC_RESIST: case SC_ELEMENTALCHANGE:
- case SC_INCFLEE2: case SC_PNEUMA: case SC_AUTOTRADE:
- case SC_KSPROTECTED: case SC_ARMOR_RESIST: case SC_HELLPOWER:
- case SC_JEXPBOOST: case SC_ITEMSCRIPT: case SC_INVINCIBLE:
- case SC_INVINCIBLEOFF: case SC_MANU_ATK: case SC_MANU_DEF:
- case SC_SPL_ATK: case SC_SPL_DEF: case SC_MANU_MATK:
- case SC_SPL_MATK: case SC_SEVENWIND: case SC_NEN:
- case SC_READYSTORM: case SC_READYDOWN: case SC_READYTURN:
- case SC_READYCOUNTER: case SC_DODGE: case SC_WARM:
- case SC_SMA: case SC_RICHMANKIM: case SC_ETERNALCHAOS:
- case SC_DRUMBATTLE: case SC_NIBELUNGEN: case SC_ROKISWEIL:
- case SC_INTOABYSS: case SC_SIEGFRIED: case SC_WHISTLE:
- case SC_ASSNCROS: case SC_POEMBRAGI: case SC_APPLEIDUN:
- case SC_HUMMING: case SC_DONTFORGETME: case SC_FORTUNE:
- case SC_SERVICE4U: case SC_PARTYFLEE: /*case SC_ANGEL_PROTECT:*/
- case SC_EPICLESIS: case SC_DEATHBOUND: case SC_FIGHTINGSPIRIT:
- case SC_ABUNDANCE: case SC_MILLENNIUMSHIELD:
- // not implemented
- //case SC_BUCHEDENOEL: case SC_POPECOOKIE:
- //case SC_SAVAGE_STEAK: case SC_COCKTAIL_WARG_BLOOD: case SC_MINOR_BBQ:
- //case SC_SIROMA_ICE_TEA: case SC_DROCERA_HERB_STEAMED: case SC_PUTTI_TAILS_NOODLES:
- //case SC_CRIFOOD: case SC_STR_SCROLL: case SC_INT_SCROLL:
- //case SC_ACARAJE:
- //
- continue;
- case SC_ASSUMPTIO:
- if( bl->type == BL_MOB )
- continue;
+ short element = 0, sctype = 0, pos = -1;
+ struct status_change *sc = status_get_sc(src);
+ if( !sc ) break;
+
+ for( i = SC_SPHERE_1; i <= SC_SPHERE_5; i++ )
+ {
+ if( !sctype && !sc->data[i] )
+ sctype = i; // Take the free SC
+ if( sc->data[i] )
+ pos = max(sc->data[i]->val2,pos);
+ }
+
+ if( !sctype )
+ {
+ if( sd ) // No free slots to put SC
+ clif_skill_fail(sd,skillid,0x13,0);
break;
}
- if(i==SC_BERSERK) tsc->data[i]->val2=0; //Mark a dispelled berserk to avoid setting hp to 100 by setting hp penalty to 0.
- status_change_end(bl, (sc_type)i, INVALID_TIMER);
+
+ pos++; // Used in val2 for SC. Indicates the order of this ball
+ switch( skillid )
+ { // Set val1. The SC element for this ball
+ case WL_SUMMONFB: element = WLS_FIRE; break;
+ case WL_SUMMONBL: element = WLS_WIND; break;
+ case WL_SUMMONWB: element = WLS_WATER; break;
+ case WL_SUMMONSTONE: element = WLS_STONE; break;
+ }
+
+ sc_start4(src,sctype,100,element,pos,skilllv,0,skill_get_time(skillid,skilllv));
+ clif_skill_nodamage(src,bl,skillid,0,0);
}
break;
- case AB_SILENTIUM:
- if (flag&1)
- sc_start(bl,SC_SILENCE,100,skilllv,skill_get_time(skillid,skilllv));
- else {
+
+ case WL_READING_SB:
+ if( sd )
+ {
+ int i, preserved = 0, max_preserve = 4 * pc_checkskill(sd,WL_FREEZE_SP) + sstatus->int_ / 10 + sd->status.base_level / 10;
+ ARR_FIND(0, MAX_SPELLBOOK, i, sd->rsb[i].skillid == 0); // Search for a Free Slot
+ if( i == MAX_SPELLBOOK )
+ {
+ clif_skill_fail(sd,skillid,0x04,0);
+ break;
+ }
+ for( i = 0; i < MAX_SPELLBOOK && sd->rsb[i].skillid; i++ )
+ preserved += sd->rsb[i].points;
+
+ if( preserved >= max_preserve )
+ {
+ clif_skill_fail(sd,skillid,0x04,0);
+ break;
+ }
+
+ sc_start(bl,SC_STOP,100,skilllv,-1); //Can't move while selecting a spellbook.
+ clif_spellbook_list(sd);
+ clif_skill_nodamage(src,bl,skillid,skilllv,1);
+ }
+ break;
+ /**
+ * Ranger
+ **/
+ case RA_FEARBREEZE:
+ clif_skill_damage(src, src, tick, status_get_amotion(src), 0, -30000, 1, skillid, skilllv, 6);
+ clif_skill_nodamage(src, bl, skillid, skilllv, sc_start(bl, type, 100, skilllv, skill_get_time(skillid, skilllv)));
+ break;
+
+ case RA_WUGMASTERY:
+ if( sd )
+ {
+ if( pc_isridingwug(sd) )
+ clif_skill_fail(sd,skillid,0,0);
+ else if( !pc_iswug(sd) )
+ pc_setoption(sd,sd->sc.option|OPTION_WUG);
+ else
+ pc_setoption(sd,sd->sc.option&~OPTION_WUG);
+ clif_skill_nodamage(src,bl,skillid,skilllv,1);
+ }
+ break;
+
+ case RA_WUGRIDER:
+ if( sd ) {
+ if( !pc_isridingwug(sd) && pc_iswug(sd) ) {
+ pc_setoption(sd,sd->sc.option&~OPTION_WUG);
+ pc_setoption(sd,sd->sc.option|OPTION_WUGRIDER);
+ } else if( pc_isridingwug(sd) ) {
+ pc_setoption(sd,sd->sc.option&~OPTION_WUGRIDER);
+ pc_setoption(sd,sd->sc.option|OPTION_WUG);
+ } else if( sd ) {
+ clif_skill_fail(sd,skillid,0,0);
+ }
clif_skill_nodamage(src,bl,skillid,skilllv,1);
- map_foreachinrange(skill_area_sub, bl,
- skill_get_splash(skillid, skilllv),BL_CHAR,
- src,skillid,skilllv,tick, flag|BCT_ENEMY|1,
- skill_castend_nodamage_id);
+ }
+ break;
+
+ case RA_WUGDASH:
+ if( tsce ) {
+ clif_skill_nodamage(src,bl,skillid,skilllv,status_change_end(bl, type, -1));
+ map_freeblock_unlock();
+ return 0;
+ }
+ if( sd && pc_isridingwug(sd) ) {
+ clif_skill_nodamage(src,bl,skillid,skilllv,sc_start4(bl,type,100,skilllv,unit_getdir(bl),0,0,1));
+ clif_walkok(sd);
+ }
+ break;
+
+ case RA_SENSITIVEKEEN:
+ clif_skill_nodamage(src,bl,skillid,skilllv,1);
+ clif_skill_damage(src,src,tick, status_get_amotion(src), 0, -30000, 1, skillid, skilllv, 6);
+ map_foreachinrange(skill_area_sub,src,skill_get_splash(skillid,skilllv),BL_CHAR|BL_SKILL,src,skillid,skilllv,tick,flag|BCT_ENEMY,skill_castend_damage_id);
+ break;
+ /**
+ * Mechanic
+ **/
+ case NC_F_SIDESLIDE:
+ case NC_B_SIDESLIDE:
+ {
+ int dir = (skillid == NC_F_SIDESLIDE) ? (unit_getdir(src)+4)%8 : unit_getdir(src);
+ skill_blown(src,bl,skill_get_blewcount(skillid,skilllv),dir,0x1);
+ clif_slide(src,src->x,src->y);
+ clif_fixpos(src); //Aegis sent this packet
+ clif_skill_nodamage(src,bl,skillid,skilllv,1);
+ }
+ break;
+
+ case NC_SELFDESTRUCTION:
+ if( sd ) {
+ if( sd->sc.option&OPTION_MADOGEAR )
+ pc_setoption(sd, sd->sc.option&~OPTION_MADOGEAR);
+ clif_skill_nodamage(src, bl, skillid, skilllv, 1);
+ skill_castend_damage_id(src, src, skillid, skilllv, tick, flag);
+ }
+ break;
+
+ case NC_ANALYZE:
+ clif_skill_damage(src, bl, tick, status_get_amotion(src), 0, -30000, 1, skillid, skilllv, 6);
+ clif_skill_nodamage(src, bl, skillid, skilllv,
+ sc_start(bl,type, 30 + 12 * skilllv,skilllv,skill_get_time(skillid,skilllv)));
+ if( sd ) pc_overheat(sd,1);
+ break;
+
+ case NC_MAGNETICFIELD:
+ if( (i = sc_start2(bl,type,100,skilllv,src->id,skill_get_time(skillid,skilllv))) )
+ {
+ map_foreachinrange(skill_area_sub,src,skill_get_splash(skillid,skilllv),splash_target(src),src,skillid,skilllv,tick,flag|BCT_ENEMY|SD_SPLASH|1,skill_castend_damage_id);;
+ clif_skill_damage(src,src,tick,status_get_amotion(src),0,-30000,1,skillid,skilllv,6);
+ pc_overheat(sd,1);
+ }
+ clif_skill_nodamage(src,src,skillid,skilllv,i);
+ break;
+
+ case NC_REPAIR:
+ if( sd )
+ {
+ int heal;
+ if( dstsd && (dstsd->sc.option&OPTION_MADOGEAR) )
+ {
+ heal = dstsd->status.max_hp * (3+3*skilllv) / 100;
+ status_heal(bl,heal,0,2);
+ } else {
+ heal = sd->status.max_hp * (3+3*skilllv) / 100;
+ status_heal(src,heal,0,2);
+ }
+
+ clif_skill_damage(src, src, tick, status_get_amotion(src), 0, -30000, 1, skillid, skilllv, 6);
+ clif_skill_nodamage(src, bl, skillid, skilllv, heal);
+ }
+ break;
+
+ case NC_DISJOINT:
+ {
+ if( bl->type != BL_MOB ) break;
+ md = map_id2md(bl->id);
+ if( md && md->class_ >= 2042 && md->class_ <= 2046 )
+ status_kill(bl);
+ clif_skill_nodamage(src, bl, skillid, skilllv, 1);
}
break;
@@ -6090,9 +7096,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
skill_consume_requirement(sd,skillid,skilllv,2);
}
- if( sd && skill_get_cooldown(skillid,skilllv) )
- skill_blockpc_start (sd, skillid, skill_get_cooldown(skillid, skilllv));
-
map_freeblock_unlock();
return 0;
}
@@ -6277,13 +7280,15 @@ int skill_castend_id(int tid, unsigned int tick, int id, intptr_t data)
if (ud->state.running && ud->skillid == TK_JUMPKICK)
flag = 1;
- if (ud->walktimer != INVALID_TIMER && ud->skillid != TK_RUN)
+ if (ud->walktimer != INVALID_TIMER && ud->skillid != TK_RUN && ud->skillid != RA_WUGDASH)
unit_stop_walking(src,1);
if( !sd || sd->skillitem != ud->skillid || skill_get_delay(ud->skillid,ud->skilllv) )
ud->canact_tick = tick + skill_delayfix(src, ud->skillid, ud->skilllv); //Tests show wings don't overwrite the delay but skill scrolls do. [Inkfish]
+ if( sd && skill_get_cooldown(ud->skillid,ud->skilllv) > 0 )
+ skill_blockpc_start(sd, ud->skillid, skill_get_cooldown(ud->skillid, ud->skilllv));
if( battle_config.display_status_timers && sd )
- clif_status_change(src, SI_ACTIONDELAY, 1, skill_delayfix(src, ud->skillid, ud->skilllv));
+ clif_status_change(src, SI_ACTIONDELAY, 1, skill_delayfix(src, ud->skillid, ud->skilllv), 0, 0, 0);
if( sd )
{
switch( ud->skillid )
@@ -6319,7 +7324,7 @@ int skill_castend_id(int tid, unsigned int tick, int id, intptr_t data)
sc = status_get_sc(src);
if(sc && sc->count) {
if(sc->data[SC_MAGICPOWER] &&
- ud->skillid != HW_MAGICPOWER && ud->skillid != WZ_WATERBALL)
+ ud->skillid != HW_MAGICPOWER && ud->skillid != WZ_WATERBALL && ud->skillid != WL_TETRAVORTEX)
status_change_end(src, SC_MAGICPOWER, INVALID_TIMER);
if(sc->data[SC_SPIRIT] &&
sc->data[SC_SPIRIT]->val2 == SL_WIZARD &&
@@ -6496,7 +7501,7 @@ int skill_castend_pos(int tid, unsigned int tick, int id, intptr_t data)
if( !sd || sd->skillitem != ud->skillid || skill_get_delay(ud->skillid,ud->skilllv) )
ud->canact_tick = tick + skill_delayfix(src, ud->skillid, ud->skilllv);
if( battle_config.display_status_timers && sd )
- clif_status_change(src, SI_ACTIONDELAY, 1, skill_delayfix(src, ud->skillid, ud->skilllv));
+ clif_status_change(src, SI_ACTIONDELAY, 1, skill_delayfix(src, ud->skillid, ud->skilllv), 0, 0, 0);
// if( sd )
// {
// switch( ud->skillid )
@@ -6628,6 +7633,9 @@ int skill_castend_pos2(struct block_list* src, int x, int y, int skillid, int sk
case MG_SAFETYWALL:
case MG_FIREWALL:
case MG_THUNDERSTORM:
+#if FIREIVY_ON
+ case WZ_FIREIVY:
+#endif
case AL_PNEUMA:
case WZ_ICEWALL:
case WZ_FIREPILLAR:
@@ -6690,6 +7698,17 @@ int skill_castend_pos2(struct block_list* src, int x, int y, int skillid, int sk
case NJ_RAIGEKISAI:
case NJ_KAMAITACHI:
case NPC_EVILLAND:
+ /**
+ * Ranger
+ **/
+ case RA_ELECTRICSHOCKER:
+ case RA_CLUSTERBOMB:
+ case RA_MAGENTATRAP:
+ case RA_COBALTTRAP:
+ case RA_MAIZETRAP:
+ case RA_VERDURETRAP:
+ case RA_FIRINGTRAP:
+ case RA_ICEBOUNDTRAP:
flag|=1;//Set flag to 1 to prevent deleting ammo (it will be deleted on group-delete).
case GS_GROUNDDRIFT: //Ammo should be deleted right away.
skill_unitsetting(src,skillid,skilllv,x,y,0);
@@ -6937,35 +7956,119 @@ int skill_castend_pos2(struct block_list* src, int x, int y, int skillid, int sk
}
}
break;
-
+ /**
+ * Mechanic
+ **/
+ case NC_COLDSLOWER:
+ case NC_ARMSCANNON:
+ /**
+ * Rune Knight
+ **/
+ case RK_DRAGONBREATH:
case RK_WINDCUTTER:
- i = skill_get_splash(skillid, skilllv);
- clif_skill_damage(src, src, tick, 0, 0, -1, 1, skillid, -1, 0);
- map_foreachinarea(skill_area_sub,
- src->m,x-i,y-i,x+i,y+i,(BL_CHAR|BL_SKILL),
- src,skillid,skilllv,tick,flag|BCT_ENEMY|1,
- skill_castend_damage_id);
+ i = skill_get_splash(skillid,skilllv);
+ map_foreachinarea(skill_area_sub,src->m,x-i,y-i,x+i,y+i,BL_CHAR,
+ src,skillid,skilllv,tick,flag|BCT_ENEMY|1,skill_castend_damage_id);
+ break;
+ /**
+ * Guilotine Cross
+ **/
+ case GC_POISONSMOKE:
+ if( !(sc && sc->data[SC_POISONINGWEAPON]) ) {
+ if( sd )
+ clif_skill_fail(sd,skillid,0x20,0);
+ return 0;
+ }
+ clif_skill_damage(src,src,tick,status_get_amotion(src),0,-30000,1,skillid,skilllv,6);
+ skill_unitsetting(src, skillid, skilllv, x, y, flag);
+ status_change_end(src,SC_POISONINGWEAPON,-1);
+ break;
+ /**
+ * Arch Bishop
+ **/
+ case AB_EPICLESIS:
+ if( (sg = skill_unitsetting(src, skillid, skilllv, x, y, 0)) ) {
+ i = sg->unit->range;
+ map_foreachinarea(skill_area_sub, src->m, x - i, y - i, x + i, y + i, BL_CHAR, src, ALL_RESURRECTION, 1, tick, flag|BCT_NOENEMY|1,skill_castend_nodamage_id);
+ }
+ break;
+ /**
+ * Warlock
+ **/
+ case WL_COMET:
+ if( sc ) {
+ sc->comet_x = x;
+ sc->comet_y = y;
+ }
+ i = skill_get_splash(skillid,skilllv);
+ map_foreachinarea(skill_area_sub,src->m,x-i,y-i,x+i,y+i,BL_CHAR,src,skillid,skilllv,tick,flag|BCT_ENEMY|1,skill_castend_damage_id);
break;
- case RK_DRAGONBREATH:
+ case WL_EARTHSTRAIN:
+ {
+ int i, wave = skilllv + 4, dir = map_calc_dir(src,x,y);
+ int sx = x, sy = y;
+
+ if( sc && sc->data[SC_MAGICPOWER] )
+ flag = flag|2; //Store the magic power flag
+
+ for( i = 0; i < wave; i++ )
+ {
+ switch( dir )
+ {
+ case 0: case 1: case 7: sy = src->y + i; break;
+ case 3: case 4: case 5: sy = src->y - i; break;
+ case 2: sx = src->x - i; break;
+ case 6: sx = src->x + i; break;
+ }
+ skill_addtimerskill(src,gettick() + (200 * i),0,sx,sy,skillid,skilllv,dir,flag&2); // Temp code until animation is replaced. [Rytech]
+ //skill_addtimerskill(src,gettick() + (150 * i),0,sx,sy,skillid,skilllv,dir,flag&2); // Official steping timer, but disabled due to too much noise.
+ }
+ }
+ break;
+ /**
+ * Ranger
+ **/
+ case RA_DETONATOR:
i = skill_get_splash(skillid, skilllv);
- map_foreachinarea(skill_area_sub,
- src->m,x-i,y-i,x+i,y+i,(BL_CHAR|BL_SKILL),
- src,skillid,skilllv,tick,flag|BCT_ENEMY|1,
- skill_castend_damage_id);
+ map_foreachinarea(skill_detonator, src->m, x-i, y-i, x+i, y+i, BL_SKILL, src);
+ clif_skill_damage(src, src, tick, status_get_amotion(src), 0, -30000, 1, skillid, skilllv, 6);
+ break;
+ /**
+ * Mechanic
+ **/
+ case NC_NEUTRALBARRIER:
+ case NC_STEALTHFIELD:
+ skill_clear_unitgroup(src); // To remove previous skills - cannot used combined
+ if( (sg = skill_unitsetting(src,skillid,skilllv,src->x,src->y,0)) != NULL )
+ {
+ sc_start2(src,skillid == NC_NEUTRALBARRIER ? SC_NEUTRALBARRIER_MASTER : SC_STEALTHFIELD_MASTER,100,skilllv,sg->group_id,skill_get_time(skillid,skilllv));
+ if( sd ) pc_overheat(sd,1);
+ }
break;
- case AB_EPICLESIS:
- if( skill_unitsetting(src, skillid, skilllv, x, y, 0) )
+ case NC_SILVERSNIPER:
{
- i = skill_get_splash(skillid,skilllv); // Use Splash Range.
- map_foreachinarea(skill_area_sub,
- src->m, x-i, y-i, x+i, y+i, BL_CHAR,
- src, ALL_RESURRECTION, 1, tick, flag|BCT_NOENEMY|1,
- skill_castend_nodamage_id);
+ int class_ = 2042;
+ struct mob_data *md;
+
+ md = mob_once_spawn_sub(src, src->m, x, y, status_get_name(src), class_, "");
+ if( md )
+ {
+ md->master_id = src->id;
+ md->special_state.ai = 3;
+ if( md->deletetimer != INVALID_TIMER )
+ delete_timer(md->deletetimer, mob_timer_delete);
+ md->deletetimer = add_timer (gettick() + skill_get_time(skillid, skilllv), mob_timer_delete, md->bl.id, 0);
+ mob_spawn( md );
+ }
}
break;
+ case NC_MAGICDECOY:
+ if( sd ) clif_magicdecoy_list(sd,skilllv,x,y);
+ break;
+
default:
ShowWarning("skill_castend_pos2: Unknown skill used:%d\n",skillid);
return 1;
@@ -6981,9 +8084,6 @@ int skill_castend_pos2(struct block_list* src, int x, int y, int skillid, int sk
skill_consume_requirement(sd,skillid,skilllv,2);
}
- if( sd && skill_get_cooldown(skillid,skilllv) )
- skill_blockpc_start (sd, skillid, skill_get_cooldown(skillid, skilllv));
-
return 0;
}
@@ -7017,7 +8117,11 @@ int skill_castend_map (struct map_session_data *sd, short skill_num, const char
sd->sc.data[SC_BERSERK] ||
sd->sc.data[SC_BASILICA] ||
sd->sc.data[SC_MARIONETTE] ||
- sd->sc.data[SC_DEATHBOUND]
+ /**
+ * Warlock
+ **/
+ sd->sc.data[SC_WHITEIMPRISON] ||
+ (sd->sc.data[SC_STASIS] && skill_stasis_check(&sd->bl, sd->sc.data[SC_STASIS]->val2, skill_num))
)) {
skill_failed(sd);
return 0;
@@ -7306,6 +8410,17 @@ struct skill_unit_group* skill_unitsetting (struct block_list *src, short skilli
case HT_FREEZINGTRAP:
case MA_FREEZINGTRAP:
case HT_BLASTMINE:
+ /**
+ * Ranger
+ **/
+ case RA_ELECTRICSHOCKER:
+ case RA_CLUSTERBOMB:
+ case RA_MAGENTATRAP:
+ case RA_COBALTTRAP:
+ case RA_MAIZETRAP:
+ case RA_VERDURETRAP:
+ case RA_FIRINGTRAP:
+ case RA_ICEBOUNDTRAP:
if( map_flag_gvg(src->m) || map[src->m].flag.battleground )
limit *= 4; // longer trap times in WOE [celest]
if( battle_config.vs_traps_bctall && map_flag_vs(src->m) && (src->type&battle_config.vs_traps_bctall) )
@@ -7455,6 +8570,17 @@ struct skill_unit_group* skill_unitsetting (struct block_list *src, short skilli
break;
}
+ /**
+ * Guilotine Cross
+ **/
+ case GC_POISONSMOKE:
+ if( !(sc && sc->data[SC_POISONINGWEAPON]) )
+ return NULL;
+ val1 = sc->data[SC_POISONINGWEAPON]->val1; // Level of Poison, to determine poisoning time
+ val2 = sc->data[SC_POISONINGWEAPON]->val2; // Type of Poison
+ limit = 4000 + 2000 * skilllv;
+ break;
+
}
nullpo_retr(NULL, group=skill_initunitgroup(src,layout->count,skillid,skilllv,skill_get_unit_id(skillid,flag&1)+subunt, limit, interval));
@@ -7529,6 +8655,17 @@ struct skill_unit_group* skill_unitsetting (struct block_list *src, short skilli
case HT_TALKIEBOX:
case HT_SKIDTRAP:
case MA_SKIDTRAP:
+ /**
+ * Ranger
+ **/
+ case RA_ELECTRICSHOCKER:
+ case RA_CLUSTERBOMB:
+ case RA_MAGENTATRAP:
+ case RA_COBALTTRAP:
+ case RA_MAIZETRAP:
+ case RA_VERDURETRAP:
+ case RA_FIRINGTRAP:
+ case RA_ICEBOUNDTRAP:
val1 = 3500;
break;
case GS_DESPERADO:
@@ -7608,8 +8745,8 @@ static int skill_unit_onplace (struct skill_unit *src, struct block_list *bl, un
sc = status_get_sc(bl);
- if (sc && sc->option&OPTION_HIDE && sg->skill_id != WZ_HEAVENDRIVE)
- return 0; //Hidden characters are immune to AoE skills except Heaven's Drive. [Skotlex]
+ if (sc && sc->option&OPTION_HIDE && sg->skill_id != WZ_HEAVENDRIVE && sg->skill_id != WL_EARTHSTRAIN )
+ return 0; //Hidden characters are immune to AoE skills except to these. [Skotlex]
type = status_skill2sc(sg->skill_id);
sce = (sc && type != -1)?sc->data[type]:NULL;
@@ -7992,6 +9129,16 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
case UNT_FLASHER:
case UNT_FREEZINGTRAP:
case UNT_FIREPILLAR_ACTIVE:
+ /**
+ * Ranger
+ **/
+ case UNT_CLUSTERBOMB:
+ case UNT_MAGENTATRAP:
+ case UNT_COBALTTRAP:
+ case UNT_MAIZETRAP:
+ case UNT_VERDURETRAP:
+ case UNT_FIRINGTRAP:
+ case UNT_ICEBOUNDTRAP:
map_foreachinrange(skill_trap_splash,&src->bl, skill_get_splash(sg->skill_id, sg->skill_lv), sg->bl_flag, &src->bl,tick);
if (sg->unit_id != UNT_FIREPILLAR_ACTIVE)
clif_changetraplook(&src->bl, sg->unit_id==UNT_LANDMINE?UNT_FIREPILLAR_ACTIVE:UNT_USED_TRAPS);
@@ -8158,6 +9305,10 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
break;
case UNT_GRAVITATION:
+ case UNT_EARTHSTRAIN:
+ case UNT_FIREWALK:
+ case UNT_ELECTRICWALK:
+ case UNT_PSYCHIC_WAVE:
skill_attack(skill_get_type(sg->skill_id),ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0);
break;
@@ -8173,60 +9324,70 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
//clif_changetraplook(&src->bl, UNT_FIREPILLAR_ACTIVE);
sg->limit=DIFF_TICK(tick,sg->tick)+1500;
break;
+ /**
+ * 3rd stuff
+ **/
+ case UNT_POISONSMOKE:
+ if( battle_check_target(ss,bl,BCT_ENEMY) > 0 && !(tsc && tsc->data[sg->val2]) && rand()%100 < 20 )
+ sc_start(bl,sg->val2,100,sg->val1,skill_get_time2(GC_POISONINGWEAPON,sg->val1));
+ break;
case UNT_EPICLESIS:
- sg->val2--; // track when units should be healed. Initial tick heals immediately.
- if ( !battle_check_undead(tstatus->race, tstatus->def_ele) && bl->type == BL_PC)
- { //Effect only players who are not undead element.
-
- //Unknown if any status effects should prevent Epiclesis.
- //if( tsc->data[SC_BERSERK] )
- // break;
-
- //FIXME: Apply status effect if standing in unit, should cancel upon stepping out of skill_get_splash() area.
- if( tsc && !tsc->data[SC_EPICLESIS] )
- sc_start(bl, type, 100, sg->skill_lv, skill_get_time(sg->skill_id,sg->skill_lv));
-
- //There's probably a better way to handle this...
- if( sg->val2 < 1 )
+ if( bl->type == BL_PC && !battle_check_undead(tstatus->race, tstatus->def_ele) && tstatus->race != RC_DEMON )
+ {
+ int hp, sp;
+ switch( sg->skill_lv )
{
- int heal, sp;
- struct map_session_data *sd = (struct map_session_data *)bl;
-
- if( tstatus->hp < tstatus->max_hp )
- {
- heal = tstatus->max_hp * (((sg->skill_lv - 1) / 2) + 3) / 100;
- if( tstatus->hp + heal > tstatus->max_hp )
- heal = tstatus->max_hp - tstatus->hp;
- if( heal > 0 )
- {
- clif_heal(sd->fd,SP_HP,heal);
- status_heal(bl, heal, 0, 0);
- }
- }
-
- if( tstatus->sp < tstatus->max_sp )
- {
- sp = tstatus->max_sp * (((sg->skill_lv - 1) / 2) + 2) / 100;
- if( tstatus->sp + sp > tstatus->max_sp )
- sp = tstatus->max_sp - tstatus->sp;
- if( sp > 0 )
- {
- clif_heal(sd->fd,SP_SP,sp);
- status_heal(bl, 0, sp, 0);
- }
- }
- sg->val2 = 3; // then every three seconds after.
+ case 1: case 2: hp = 3; sp = 2; break;
+ case 3: case 4: hp = 4; sp = 3; break;
+ case 5: default: hp = 5; sp = 4; break;
+ }
+ hp = tstatus->max_hp * hp / 100;
+ sp = tstatus->max_sp * sp / 100;
+ status_heal(bl, hp, sp, 0);
+ if( tstatus->hp < tstatus->max_hp )
+ clif_skill_nodamage(&src->bl, bl, AL_HEAL, hp, 1);
+ if( tstatus->sp < tstatus->max_sp )
+ clif_skill_nodamage(&src->bl, bl, MG_SRECOVERY, sp, 1);
+ sc_start(bl, type, 100, sg->skill_lv, sg->interval + 100);
+ sg->val2++;
+ // Reveal hidden players every 5 seconds.
+ if( sg->val2 >= 5 )
+ {
+ sg->val2 = 0;
+ // TODO: check if other hidden status can be removed.
+ status_change_end(bl,SC_HIDING,-1);
+ status_change_end(bl,SC_CLOAKING,-1);
}
}
+ /* Enable this if kRO fix the current skill. Currently no damage on undead and demon monster. [Jobbie]
+ else if( battle_check_target(ss, bl, BCT_ENEMY) > 0 && battle_check_undead(tstatus->race, tstatus->def_ele) )
+ skill_castend_damage_id(&src->bl, bl, sg->skill_id, sg->skill_lv, 0, 0);*/
+ break;
- sg->val3--; // track when units should be unhidden. Initial tick unhides units immediately.
- if( sg->val3 < 1 )
- {
- status_change_end(bl,SC_HIDING,-1);
- status_change_end(bl,SC_CLOAKING,-1);
- sg->val3 = 5; //then every five seconds after.
- }
+ case UNT_STEALTHFIELD:
+ if( bl->id == sg->src_id )
+ break; // Dont work on Self (video shows that)
+ case UNT_NEUTRALBARRIER:
+ sc_start(bl,type,100,sg->skill_lv,sg->interval + 100);
+ break;
+
+ case UNT_DIMENSIONDOOR:
+ if( tsd && !map[bl->m].flag.noteleport )
+ pc_randomwarp(tsd,3);
+ else if( bl->type == BL_MOB && battle_config.mob_warp&8 )
+ unit_warp(bl,-1,-1,-1,3);
+ break;
+
+ case UNT_REVERBERATION:
+ clif_changetraplook(&src->bl,UNT_USED_TRAPS);
+ map_foreachinrange(skill_trap_splash,&src->bl, skill_get_splash(sg->skill_id, sg->skill_lv), sg->bl_flag, &src->bl,tick);
+ sg->limit = DIFF_TICK(tick,sg->tick) + 1500;
+ break;
+
+ case UNT_SEVERE_RAINSTORM:
+ if( battle_check_target(&src->bl, bl, BCT_ENEMY) )
+ skill_attack(BF_WEAPON,ss,&src->bl,bl,WM_SEVERE_RAINSTORM_MELEE,sg->skill_lv,tick,0);
break;
}
@@ -8265,7 +9426,7 @@ int skill_unit_onout (struct skill_unit *src, struct block_list *bl, unsigned in
switch(sg->unit_id){
case UNT_SAFETYWALL:
case UNT_PNEUMA:
- case UNT_EPICLESIS:
+ case UNT_EPICLESIS://Arch Bishop
if (sce)
status_change_end(bl, type, INVALID_TIMER);
break;
@@ -8274,7 +9435,6 @@ int skill_unit_onout (struct skill_unit *src, struct block_list *bl, unsigned in
if( sce && sce->val4 == src->bl.id )
status_change_end(bl, type, INVALID_TIMER);
break;
-
case UNT_HERMODE: //Clear Hermode if the owner moved.
if (sce && sce->val3 == BCT_SELF && sce->val4 == sg->group_id)
status_change_end(bl, type, INVALID_TIMER);
@@ -8511,12 +9671,18 @@ static int skill_check_condition_char_sub (struct block_list *bl, va_list ap)
return 1;
}
case AB_ADORAMUS:
- {
- int skilllv = pc_checkskill(sd,skillid);
- if( (tsd->class_&MAPID_UPPERMASK) == MAPID_PRIEST && tsd->status.sp >= 2*skilllv)
- p_sd[(*c)++]=tsd->bl.id;
+ { // Adoramus does not consume Blue Gemstone when there is at least 1 Priest class next to the caster
+ if( (tsd->class_&MAPID_UPPERMASK) == MAPID_PRIEST )
+ p_sd[(*c)++] = tsd->bl.id;
return 1;
}
+ case WL_COMET:
+ { // Comet does not consume Red Gemstones when there is at least 1 Warlock class next to the caster
+ if( tsd->status.class_ == 4055 || tsd->status.class_ == 4061 )
+ p_sd[(*c)++] = tsd->bl.id;
+ return 1;
+ }
+
default: //Warning: Assuming Ensemble Dance/Songs for code speed. [Skotlex]
{
int skilllv;
@@ -8568,8 +9734,11 @@ int skill_check_pc_partner (struct map_session_data *sd, short skill_id, short*
return c;
case AB_ADORAMUS:
if( c > 0 && (tsd = map_id2sd(p_sd[0])) != NULL )
- status_charge(&tsd->bl, 0, 2*(*skill_lv));
- return c;
+ {
+ i = 2 * (*skill_lv);
+ status_charge(&tsd->bl, 0, i);
+ }
+ break;
default: //Warning: Assuming Ensemble skills here (for speed)
if (c > 0 && sd->sc.data[SC_DANCING] && (tsd = map_id2sd(p_sd[0])) != NULL)
{
@@ -8588,7 +9757,7 @@ int skill_check_pc_partner (struct map_session_data *sd, short skill_id, short*
memset (p_sd, 0, sizeof(p_sd));
i = map_foreachinrange(skill_check_condition_char_sub, &sd->bl, range, BL_PC, &sd->bl, &c, &p_sd, skill_id);
- if (skill_id != PR_BENEDICTIO && skill_id != AB_ADORAMUS) //Apply the average lv to encore skills.
+ if (skill_id != PR_BENEDICTIO) //Apply the average lv to encore skills.
*skill_lv = (i+(*skill_lv))/(c+1); //I know c should be one, but this shows how it could be used for the average of n partners.
return c;
}
@@ -9002,34 +10171,97 @@ int skill_check_condition_castbegin(struct map_session_data* sd, short skill, sh
return 0;
}
break;
+ /**
+ * Arch Bishop
+ **/
case AB_ANCILLA:
- i = pc_search_inventory(sd,12333);
- if( i >= 0 && sd->status.inventory[i].amount >= 3 )
{
- clif_skill_fail(sd, skill, 12, 0);
- return 0;
+ int count = 0;
+ for( i = 0; i < MAX_INVENTORY; i ++ )
+ if( sd->status.inventory[i].nameid == ITEMID_ANCILLA )
+ count += sd->status.inventory[i].amount;
+ if( count >= 3 ) {
+ clif_skill_fail(sd, skill, 0x0c, 0);
+ return 0;
+ }
}
break;
- case AB_EPICLESIS: // Skill should fail if items are not present. Why the curveball, RO?
- if ( require.itemid[0] )
+ /**
+ * Keeping as a note:
+ * Bug Report #17 provides a link to a sep-2011 changelog that shows this requirement was removed
+ **/
+ //case AB_LAUDAAGNUS:
+ //case AB_LAUDARAMUS:
+ // if( !sd->status.party_id ) {
+ // clif_skill_fail(sd,skill,0,0);
+ // return 0;
+ // }
+ // break;
+
+ case AB_ADORAMUS:
+ /**
+ * Warlock
+ **/
+ case WL_COMET:
+ if( skill_check_pc_partner(sd,skill,&lv,1,0) <= 0 && ((i = pc_search_inventory(sd,require.itemid[0])) < 0 || sd->status.inventory[i].amount < require.amount[0]) )
{
- i = pc_search_inventory(sd,require.itemid[0]);
- if( i < 0 || sd->status.inventory[i].amount < require.amount[0] )
- {
- clif_skill_fail(sd,skill,14,0); //Ancilla required
- return 0;
- }
+ //clif_skill_fail(sd,skill,0x47,require.amount[0],require.itemid[0]);
+ clif_skill_fail(sd,skill,0,0);
+ return 0;
}
- if ( require.itemid[1] )
+ break;
+ case WL_SUMMONFB:
+ case WL_SUMMONBL:
+ case WL_SUMMONWB:
+ case WL_SUMMONSTONE:
+ if( sc )
{
- i = pc_search_inventory(sd,require.itemid[1]);
- if(i < 0 || sd->status.inventory[i].amount < require.amount[1] )
- {
- clif_skill_fail(sd,skill,13,0); //Holy Water required
+ ARR_FIND(SC_SPHERE_1,SC_SPHERE_5+1,i,!sc->data[i]);
+ if( i == SC_SPHERE_5+1 )
+ { // No more free slots
+ clif_skill_fail(sd,skill,0x13,0);
return 0;
}
}
break;
+ /**
+ * Guilotine Cross
+ **/
+ case GC_HALLUCINATIONWALK:
+ if( sc && (sc->data[SC_HALLUCINATIONWALK] || sc->data[SC_HALLUCINATIONWALK_POSTDELAY]) ) {
+ clif_skill_fail(sd,skill,0x0,0);
+ return 0;
+ }
+ break;
+ case GC_COUNTERSLASH:
+ case GC_WEAPONCRUSH:
+ if( !(sc && sc->data[SC_COMBO] && sc->data[SC_COMBO]->val1 == GC_WEAPONBLOCKING) ) {
+ clif_skill_fail(sd, skill, 0x1f, 0);
+ return 0;
+ }
+ break;
+ case GC_CROSSRIPPERSLASHER:
+ if( !(sc && sc->data[SC_ROLLINGCUTTER]) ) {
+ clif_skill_fail(sd, skill, 0x17, 0);
+ return 0;
+ }
+ break;
+ case GC_POISONSMOKE:
+ case GC_VENOMPRESSURE:
+ if( !(sc && sc->data[SC_POISONINGWEAPON]) ) {
+ clif_skill_fail(sd, skill, 0x20, 0);
+ return 0;
+ }
+ break;
+ /**
+ * Ranger
+ **/
+ case RA_SENSITIVEKEEN:
+ if(!pc_iswug(sd)) {
+ clif_skill_fail(sd,skill,0x17,0);
+ return 0;
+ }
+ break;
}
switch(require.state) {
@@ -9114,26 +10346,51 @@ int skill_check_condition_castbegin(struct map_session_data* sd, short skill, sh
break;
clif_skill_fail(sd,skill,0,0);
return 0;
+ /**
+ * Rune Knight
+ **/
+ case ST_RIDINGDRAGON:
+ if( !(sd->sc.option&OPTION_DRAGON)) {
+ clif_skill_fail(sd,skill,0,0);
+ return 0;
+ }
break;
- case ST_DRAGON:
- if(!pc_isdragon(sd)) {
- clif_skill_fail(sd,skill,25,0);
+ /**
+ * Wug
+ **/
+ case ST_WUG:
+ if( !(sd->sc.option&OPTION_WUG) ) {
+ clif_skill_fail(sd,skill,0,0);
return 0;
}
break;
-/*
- case ST_WARG:
- if(!pc_iswarg(sd)) {
+ /**
+ * Riding Wug
+ **/
+ case ST_RIDINGWUG:
+ if( !(sd->sc.option&OPTION_WUGRIDER) ){
clif_skill_fail(sd,skill,0,0);
return 0;
}
break;
- case ST_MADOGEAR:
- if(!pc_ismadogear(sd)) {
- clif_skill_fail(sd,skill,33,0);
+ /**
+ * Mechanic
+ **/
+ case ST_MADO:
+ if( !(sd->sc.option&OPTION_MADOGEAR) ) {
+ clif_skill_fail(sd,skill,0,0);
return 0;
}
-*/
+ break;
+ /**
+ * Sorcerer
+ **/
+ //case ST_ELEMENTALSPIRIT:
+ // if(!sd->ed) {
+ // clif_skill_fail(sd,skill,0x4f,0,0);
+ // return 0;
+ // }
+ // break;
}
if(require.mhp > 0 && get_percentage(status->hp, status->max_hp) > require.mhp) {
@@ -9208,15 +10465,16 @@ int skill_check_condition_castend(struct map_session_data* sd, short skill, shor
return 0;
}
- require = skill_get_requirement(sd,skill,lv);// Adoramus need this.
-
// perform skill-specific checks (and actions)
switch( skill )
{
case PR_BENEDICTIO:
- case AB_ADORAMUS:
skill_check_pc_partner(sd, skill, &lv, 1, 1);
break;
+ case AB_ADORAMUS:
+ //if( skill_check_pc_partner(sd,skill,&lv, 1, 2) )
+ // sd->state.no_gemstone = 1; // Mark this skill as it don't consume ammo because partners gives SP
+ break;
case AM_CANNIBALIZE:
case AM_SPHEREMINE:
{
@@ -9236,10 +10494,38 @@ int skill_check_condition_castend(struct map_session_data* sd, short skill, shor
}
break;
}
+ case NC_SILVERSNIPER:
+ case NC_MAGICDECOY:
+ {
+ int c = 0, j;
+ int maxcount = skill_get_maxcount(skill,lv);
+ int mob_class = 2042;
+ if( skill == NC_MAGICDECOY )
+ mob_class = 2043;
+
+ if( battle_config.land_skill_limit && maxcount > 0 && ( battle_config.land_skill_limit&BL_PC ) )
+ {
+ if( skill == NC_MAGICDECOY )
+ {
+ for( j = mob_class; j <= 2046; j++ )
+ i = map_foreachinmap(skill_check_condition_mob_master_sub, sd->bl.m, BL_MOB, sd->bl.id, j, skill, &c);
+ }
+ else
+ i = map_foreachinmap(skill_check_condition_mob_master_sub, sd->bl.m, BL_MOB, sd->bl.id, mob_class, skill, &c);
+ if( c >= maxcount )
+ {
+ clif_skill_fail(sd , skill, 0, 0);
+ return 0;
+ }
+ }
+ }
+ break;
}
status = &sd->battle_status;
+ require = skill_get_requirement(sd,skill,lv);
+
if( require.hp > 0 && status->hp <= (unsigned int)require.hp) {
clif_skill_fail(sd,skill,2,0);
return 0;
@@ -9272,15 +10558,8 @@ int skill_check_condition_castend(struct map_session_data* sd, short skill, shor
clif_skill_fail(sd,skill,7,0);// red gemstone required
else if( require.itemid[i] == ITEMID_BLUE_GEMSTONE )
clif_skill_fail(sd,skill,8,0);// blue gemstone required
- else if( require.itemid[i] == 523 )
- clif_skill_fail(sd,skill,13,0); //Holy Water required
- else if( require.itemid[i] == 12333 )
- clif_skill_fail(sd,skill,14,0); //Ancilla required
else
- {
- //clif_skill_fail(sd,skill,71,require.amount[i],require.itemid[i]);
clif_skill_fail(sd,skill,0,0);
- }
return 0;
}
}
@@ -9428,6 +10707,10 @@ struct skill_condition skill_get_requirement(struct map_session_data* sd, short
if (sd->status.hom_id) //Don't delete items when hom is already out.
continue;
break;
+ case NC_SHAPESHIFT:
+ if( i < 4 )
+ continue;
+ break;
case WZ_FIREPILLAR: // celest
if (lv <= 5) // no gems required at level 1-5
continue;
@@ -9439,13 +10722,7 @@ struct skill_condition skill_get_requirement(struct map_session_data* sd, short
if( itemid_isgemstone(req.itemid[i]) && skill != HW_GANBANTEIN )
{
- if( sd->special_state.no_gemstone ||
-// FIXME: [Inkfish]
-// check partners every time trying to get requirement info? not wise
-// but neither check it in castbegin
-// PR_BENEDICTIO is instant cast, so you probably can store info in castbegin and use it in castend without it being modified.
-// but AB_ADORAMUS has cast time. partner info may change during casting.
- (skill == AB_ADORAMUS && skill_check_pc_partner(sd,skill,&lv, 1, 0) )) // Do not require Gemstone if next to another priest.
+ if( sd->special_state.no_gemstone )
{ //Make it substract 1 gem rather than skipping the cost.
if( --req.amount[i] < 1 )
req.itemid[i] = 0;
@@ -9530,39 +10807,22 @@ struct skill_condition skill_get_requirement(struct map_session_data* sd, short
*------------------------------------------*/
int skill_castfix (struct block_list *bl, int skill_id, int skill_lv)
{
- int scale = 0, max_fixedReduction = 0;
- int time = skill_get_cast(skill_id, skill_lv); // Skill's base cast time.
- int fixedcasttime = skill_get_fixedcast(skill_id, skill_lv); // Skills fixed cast time.
+ int time = skill_get_cast(skill_id, skill_lv);
struct map_session_data *sd;
- struct status_change *sc;
nullpo_ret(bl);
sd = BL_CAST(BL_PC, bl);
- sc = status_get_sc(bl);
-
- // calculate base cast time (reduced by dex and int)
- if( !(skill_get_castnodex(skill_id, skill_lv)&1) )
- {
- // iRO Wiki states as of 2011/08/22:
- // castTime = (1 - SQRT((DEX * 2 + INT) / 530)) * (1 - sum_castReduction/100%) * baseCast * 0.8 + (1 - max_fixedReduction/100%) * baseCast * 0.2
- // let's do (DEX * 2 + INT) here; the rest will come after.
- scale = cap_value((status_get_dex(bl) * 2 + status_get_int(bl)) * 10000, 0, INT_MAX);
- }
- //apply variable cast rate modifiers via status effects.
- if( !(skill_get_castnodex(skill_id, skill_lv)&2) && sc && sc->count )
- {
- if (sc->data[SC_SLOWCAST])
- time += time * sc->data[SC_SLOWCAST]->val2 / 100;
- if (sc->data[SC_SUFFRAGIUM])
- time -= time * sc->data[SC_SUFFRAGIUM]->val2 / 100;
- if (sc->data[SC_MEMORIZE])
- time>>=1;
- if (sc->data[SC_POEMBRAGI])
- time -= time * sc->data[SC_POEMBRAGI]->val2 / 100;
+ // calculate base cast time (reduced by dex)
+ if( !(skill_get_castnodex(skill_id, skill_lv)&1) ) {
+ int scale = CONST_CASTRATE_SCALE - CONST_CASTRATE_CALC;
+ if( scale > 0 ) // not instant cast
+ time = time * scale / CONST_CASTRATE_SCALE;
+ else
+ return 0; // instant cast
}
- // calculate variable cast time reduced by item/card bonuses
+ // calculate cast time reduced by item/card bonuses
if( !(skill_get_castnodex(skill_id, skill_lv)&4) && sd )
{
int i;
@@ -9577,51 +10837,61 @@ int skill_castfix (struct block_list *bl, int skill_id, int skill_lv)
}
}
}
-
- // apply fixed cast rate modifiers via status effects.
- if( !(skill_get_castnodex(skill_id, skill_lv)&2) && sc && sc->count )
- {
- if( sc->data[SC_AB_SECRAMENT] && sc->data[SC_AB_SECRAMENT]->val2 > max_fixedReduction )
- max_fixedReduction = sc->data[SC_AB_SECRAMENT]->val2;
- }
-
- // calculate fixed cast time reduced by item/card bonuses
- if( !(skill_get_castnodex(skill_id, skill_lv)&4) && sd )
- {
- int i;
- if( sd->fixedcastrate != 100 )
- fixedcasttime = fixedcasttime * sd->fixedcastrate / 100;
- for( i = 0; i < ARRAYLENGTH(sd->skillcast) && sd->skillcast[i].id; i++ )
- {
- if( sd->skillcast[i].id == skill_id )
- {
- fixedcasttime+= fixedcasttime * sd->skillcast[i].val / 100;
- break;
- }
- }
- }
-
- // Apply more of the cast time formula for variable cast time post reduction.
- // Now let's do (1 - SQRT(scale / 530)) * (1 - sum_castReduction/100%)
- // Ensure this value is not reduced past 0.
- time = cap_value((100 - (int)sqrt(scale/530.)) * time / 100, 0, INT_MAX);
-
- // Reduce fixedcasttime by only the highest max_fixedReduction found
- if( max_fixedReduction )
- fixedcasttime -= fixedcasttime * max_fixedReduction / 100;
-
- // Apply the modified fixed cast time to variable cast time.
- time += fixedcasttime;
-
// config cast time multiplier
if (battle_config.cast_rate != 100)
time = time * battle_config.cast_rate / 100;
-
// return final cast time
return (time > 0) ? time : 0;
}
/*==========================================
+ * Does cast-time reductions based on sc data.
+ *------------------------------------------*/
+int skill_castfix_sc (struct block_list *bl, int time, int skill_id, int skill_lv)
+{
+ struct status_change *sc = status_get_sc(bl);
+#if RECASTING
+ int fixed = skill_get_cast(skill_id, skill_lv);
+ if( fixed > 1 )
+ fixed = fixed * 20 / 100;
+ else
+ fixed = 0;
+#endif
+ if (sc && sc->count) {
+ if (sc->data[SC_SLOWCAST])
+ time += time * sc->data[SC_SLOWCAST]->val2 / 100;
+ if (sc->data[SC_SUFFRAGIUM]) {
+ time -= time * sc->data[SC_SUFFRAGIUM]->val2 / 100;
+ status_change_end(bl, SC_SUFFRAGIUM, INVALID_TIMER);
+ }
+ if (sc->data[SC_MEMORIZE]) {
+ time>>=1;
+ if ((--sc->data[SC_MEMORIZE]->val2) <= 0)
+ status_change_end(bl, SC_MEMORIZE, INVALID_TIMER);
+ }
+ if (sc->data[SC_POEMBRAGI])
+ time -= time * sc->data[SC_POEMBRAGI]->val2 / 100;
+#if RECASTING
+ /**
+ * AB Sacrament reduces fixed cast time by (10 x Level)% (up to 50%)
+ **/
+ if( sc->data[SC_SECRAMENT] )
+ fixed -= fixed * sc->data[SC_SECRAMENT]->val2 / 100;
+#endif
+ }
+#if RECASTING
+ /**
+ * WL_RADIUS decreases 10/15/20% fixed cast time from warlock skills
+ **/
+ if( bl->type == BL_PC && skill_id >= WL_WHITEIMPRISON && skill_id <= WL_FREEZE_SP && ( skill_lv = pc_checkskill((TBL_PC*)bl, WL_RADIUS) ) )
+ fixed -= fixed * (5+(skill_lv*5)) / 100;
+ return (time > 0 || fixed > 0) ? cap_value( time , fixed , INT_MAX ) : 0;
+#else
+ return (time > 0) ? time : 0;
+#endif
+}
+
+/*==========================================
* Does delay reductions based on dex/agi, sc data, item bonuses, ...
*------------------------------------------*/
int skill_delayfix (struct block_list *bl, int skill_id, int skill_lv)
@@ -9657,6 +10927,23 @@ int skill_delayfix (struct block_list *bl, int skill_id, int skill_lv)
if( sc && !sc->data[SC_BASILICA] )
time = 0; // There is no Delay on Basilica creation, only on cancel
break;
+ default:
+ if (battle_config.delay_dependon_dex && !(delaynodex&1))
+ { // if skill delay is allowed to be reduced by dex
+ int scale = battle_config.castrate_dex_scale - status_get_dex(bl);
+ if (scale > 0)
+ time = time * scale / battle_config.castrate_dex_scale;
+ else //To be capped later to minimum.
+ time = 0;
+ }
+ if (battle_config.delay_dependon_agi && !(delaynodex&1))
+ { // if skill delay is allowed to be reduced by agi
+ int scale = battle_config.castrate_dex_scale - status_get_agi(bl);
+ if (scale > 0)
+ time = time * scale / battle_config.castrate_dex_scale;
+ else //To be capped later to minimum.
+ time = 0;
+ }
}
if ( sc && sc->data[SC_SPIRIT] )
@@ -10162,8 +11449,8 @@ int skill_frostjoke_scream (struct block_list *bl, va_list ap)
return 0;
if (bl->type == BL_PC) {
struct map_session_data *sd = (struct map_session_data *)bl;
- if (sd && sd->sc.option&OPTION_INVISIBLE)
- return 0;
+ if ( sd && sd->sc.option&(OPTION_INVISIBLE|OPTION_MADOGEAR) )
+ return 0;//Frost Joke / Scream cannot target invisible or MADO Gear characters [Ind]
}
//It has been reported that Scream/Joke works the same regardless of woe-setting. [Skotlex]
if(battle_check_target(src,bl,BCT_ENEMY) > 0)
@@ -10321,6 +11608,48 @@ int skill_greed (struct block_list *bl, va_list ap)
return 0;
}
+//For Ranger's Detonator [Jobbie/3CeAM]
+int skill_detonator(struct block_list *bl, va_list ap)
+{
+ struct skill_unit *unit=NULL;
+ struct block_list *src;
+ int unit_id;
+
+ nullpo_ret(bl);
+ nullpo_ret(ap);
+ src = va_arg(ap,struct block_list *);
+
+ if( bl->type != BL_SKILL || (unit = (struct skill_unit *)bl) == NULL || !unit->group )
+ return 0;
+ if( unit->group->src_id != src->id )
+ return 0;
+
+ unit_id = unit->group->unit_id;
+ switch( unit_id )
+ { //List of Hunter and Ranger Traps that can be detonate.
+ case UNT_BLASTMINE:
+ case UNT_SANDMAN:
+ case UNT_CLAYMORETRAP:
+ case UNT_TALKIEBOX:
+ case UNT_CLUSTERBOMB:
+ case UNT_FIRINGTRAP:
+ case UNT_ICEBOUNDTRAP:
+ if( unit_id == UNT_TALKIEBOX )
+ {
+ clif_talkiebox(bl,unit->group->valstr);
+ unit->group->val2 = -1;
+ }
+ else
+ map_foreachinrange(skill_trap_splash,bl,skill_get_splash(unit->group->skill_id,unit->group->skill_lv),unit->group->bl_flag,bl,unit->group->tick);
+
+ clif_changetraplook(bl,unit_id == UNT_FIRINGTRAP ? UNT_DUMMYSKILL : UNT_USED_TRAPS);
+ unit->group->unit_id = UNT_USED_TRAPS;
+ unit->range = -1;
+ unit->group->limit = DIFF_TICK(gettick(),unit->group->tick) + (unit_id == UNT_TALKIEBOX ? 5000 : 1500);
+ break;
+ }
+ return 0;
+}
/*==========================================
*
@@ -10487,6 +11816,15 @@ static int skill_trap_splash (struct block_list *bl, va_list ap)
if(skill_attack(BF_WEAPON,ss,src,bl,sg->skill_id,sg->skill_lv,tick,sg->val1))
skill_blown(src,bl,skill_get_blewcount(sg->skill_id,sg->skill_lv),-1,0);
break;
+ case UNT_ELECTRICSHOCKER:
+ clif_skill_damage(src,bl,tick,0,0,-30000,1,sg->skill_id,sg->skill_lv,5);
+ break;
+ case UNT_FIRINGTRAP:
+ case UNT_ICEBOUNDTRAP:
+ case UNT_CLUSTERBOMB:
+ if(skill_attack(BF_MISC,ss,bl,bl,sg->skill_id,sg->skill_lv,tick,sg->val1))
+ clif_skill_damage(bl,bl,tick,0,0,-30000,1,sg->skill_id,sg->skill_lv,5);
+ break;
default:
skill_attack(skill_get_type(sg->skill_id),ss,src,bl,sg->skill_id,sg->skill_lv,tick,0);
break;
@@ -10554,6 +11892,37 @@ bool skill_check_cloaking(struct block_list *bl, struct status_change_entry *sce
return wall;
}
+bool skill_check_camouflage(struct block_list *bl, struct status_change_entry *sce)
+{
+ static int dx[] = { 0, 1, 0, -1, -1, 1, 1, -1};
+ static int dy[] = {-1, 0, 1, 0, -1, -1, 1, 1};
+ bool wall = true;
+ int i;
+
+ if( bl->type == BL_PC )
+ { //Check for walls.
+ ARR_FIND( 0, 8, i, map_getcell(bl->m, bl->x+dx[i], bl->y+dy[i], CELL_CHKNOPASS) != 0 );
+ if( i == 8 )
+ wall = false;
+ }
+
+ if( sce )
+ {
+ if( !wall )
+ {
+ if( sce->val1 < 3 ) //End camouflage.
+ status_change_end(bl, SC_CAMOUFLAGE, -1);
+ else
+ if( sce->val3&1 )
+ { //Remove wall bonus
+ sce->val3&=~1;
+ status_calc_bl(bl,SCB_SPEED);
+ }
+ }
+ }
+
+ return wall;
+}
/*==========================================
*
@@ -10595,6 +11964,16 @@ struct skill_unit *skill_initunit (struct skill_unit_group *group, int idx, int
case HP_BASILICA:
skill_unitsetmapcell(unit,HP_BASILICA,group->skill_lv,CELL_BASILICA,true);
break;
+ /**
+ * Ranger
+ **/
+ case RA_ELECTRICSHOCKER:
+ {
+ struct block_list* target = map_id2bl(group->val2);
+ if( target )
+ status_change_end(target, SC_ELECTRICSHOCKER, -1);
+ }
+ break;
default:
if (group->state.song_dance&0x1) //Check for dissonance.
skill_dance_overlap(unit, 1);
@@ -10793,14 +12172,36 @@ int skill_delunitgroup_(struct skill_unit_group *group, const char* file, int li
}
}
- if (group->skill_id == SG_SUN_WARM ||
- group->skill_id == SG_MOON_WARM ||
- group->skill_id == SG_STAR_WARM) {
- struct status_change *sc = status_get_sc(src);
- if(sc && sc->data[SC_WARM]) {
- sc->data[SC_WARM]->val4 = 0;
- status_change_end(src, SC_WARM, INVALID_TIMER);
- }
+ switch( group->skill_id ) {
+ case SG_SUN_WARM:
+ case SG_MOON_WARM:
+ case SG_STAR_WARM:
+ {
+ struct status_change *sc = NULL;
+ if( (sc = status_get_sc(src)) != NULL && sc->data[SC_WARM] ) {
+ sc->data[SC_WARM]->val4 = 0;
+ status_change_end(src, SC_WARM, INVALID_TIMER);
+ }
+ }
+ break;
+ case NC_NEUTRALBARRIER:
+ {
+ struct status_change *sc = NULL;
+ if( (sc = status_get_sc(src)) != NULL && sc->data[SC_NEUTRALBARRIER_MASTER] ) {
+ sc->data[SC_NEUTRALBARRIER_MASTER]->val2 = 0;
+ status_change_end(src,SC_NEUTRALBARRIER_MASTER,-1);
+ }
+ }
+ break;
+ case NC_STEALTHFIELD:
+ {
+ struct status_change *sc = NULL;
+ if( (sc = status_get_sc(src)) != NULL && sc->data[SC_STEALTHFIELD_MASTER] ) {
+ sc->data[SC_STEALTHFIELD_MASTER]->val2 = 0;
+ status_change_end(src,SC_STEALTHFIELD_MASTER,-1);
+ }
+ }
+ break;
}
if (src->type==BL_PC && group->state.ammo_consume)
@@ -10969,6 +12370,14 @@ static int skill_unit_timer_sub (DBKey key, void* data, va_list ap)
case UNT_FREEZINGTRAP:
case UNT_CLAYMORETRAP:
case UNT_TALKIEBOX:
+ case UNT_CLUSTERBOMB:
+ case UNT_MAGENTATRAP:
+ case UNT_COBALTTRAP:
+ case UNT_MAIZETRAP:
+ case UNT_VERDURETRAP:
+ case UNT_FIRINGTRAP:
+ case UNT_ICEBOUNDTRAP:
+
{
struct block_list* src;
if( unit->val1 > 0 && (src = map_id2bl(group->src_id)) != NULL && src->type == BL_PC )
@@ -11035,6 +12444,11 @@ static int skill_unit_timer_sub (DBKey key, void* data, va_list ap)
case UNT_FREEZINGTRAP:
case UNT_TALKIEBOX:
case UNT_ANKLESNARE:
+ /**
+ * Ranger
+ **/
+ case UNT_ELECTRICSHOCKER:
+ case UNT_CLUSTERBOMB:
if( unit->val1 <= 0 ) {
if( group->unit_id == UNT_ANKLESNARE && group->val2 > 0 )
skill_delunit(unit);
@@ -11407,6 +12821,9 @@ int skill_produce_mix (struct map_session_data *sd, int skill_id, int nameid, in
if (!skill_id) //A skill can be specified for some override cases.
skill_id = skill_produce_db[idx].req_skill;
+ if( skill_id == GC_RESEARCHNEWPOISON )
+ skill_id = GC_CREATENEWPOISON;
+
slot[0]=slot1;
slot[1]=slot2;
slot[2]=slot3;
@@ -11428,22 +12845,27 @@ int skill_produce_mix (struct map_session_data *sd, int skill_id, int nameid, in
ele=ele_table[slot[i]-994];
}
}
-
- if(skill_id == RK_RUNEMASTERY)
- { // Now we figure out how many runes we're going to make. :3
- int skill_lv = pc_checkskill(sd,skill_id);
- if( skill_lv > 4 && skill_lv < 10) // level 5~9 can make 1~2 runes
- qty=(rand()%2)+1;
- else if( skill_lv == 10 ) // Level 10 can make 1~3 runes
- qty=(rand()%3)+1;
-
- // Check to see if the amount of runes will exceed 20.
- i = pc_search_inventory(sd,nameid);
- if( i >= 0 && sd->status.inventory[i].amount+qty > 20 ) // Cancel creation if created stones will exceed 20.
- {
- clif_msg(sd,0x61b);
- return 0;
+ if( skill_id == RK_RUNEMASTERY ) {
+ int temp_qty, skill_lv = pc_checkskill(sd,skill_id);
+ if( skill_lv == 10 ) temp_qty = 1 + rand()%3;
+ else if( skill_lv > 5 ) temp_qty = 1 + rand()%2;
+ else temp_qty = 1;
+ for( i = 0; i < MAX_INVENTORY; i++ ) {
+ if( sd->status.inventory[i].nameid == nameid ) {
+ if( sd->status.inventory[i].amount >= MAX_RUNE ) {
+ clif_msgtable(sd->fd,0x61b);
+ return 0;
+ } else {
+ /**
+ * the amount fits, say we got temp_qty 4 and 19 runes, we trim temp_qty to 1.
+ **/
+ if( temp_qty + sd->status.inventory[i].amount >= MAX_RUNE )
+ temp_qty = MAX_RUNE - sd->status.inventory[i].amount;
+ }
+ break;
+ }
}
+ qty = temp_qty;
}
for(i=0;i<MAX_PRODUCE_RESOURCE;i++){
@@ -11451,10 +12873,7 @@ int skill_produce_mix (struct map_session_data *sd, int skill_id, int nameid, in
if( (id=skill_produce_db[idx].mat_id[i]) <= 0 )
continue;
num++;
- if (skill_id == RK_RUNEMASTERY)
- x=skill_produce_db[idx].mat_amount[i]; // RK_RUNEMASTERY only uses one set of required items, even if making more than 1 item
- else
- x=qty*skill_produce_db[idx].mat_amount[i];
+ x=( skill_id == RK_RUNEMASTERY ? 1 : qty)*skill_produce_db[idx].mat_amount[i];
do{
int y=0;
j = pc_search_inventory(sd,id);
@@ -11499,6 +12918,10 @@ int skill_produce_mix (struct map_session_data *sd, int skill_id, int nameid, in
make_per = (2000 + 40*status->dex + 20*status->luk);
break;
case AL_HOLYWATER:
+ /**
+ * Arch Bishop
+ **/
+ case AB_ANCILLA:
make_per = 100000; //100% success
break;
case AM_PHARMACY: // Potion Preparation - reviewed with the help of various Ragnainfo sources [DracoRPG]
@@ -11547,57 +12970,21 @@ int skill_produce_mix (struct map_session_data *sd, int skill_id, int nameid, in
make_per = make_per * battle_config.pp_rate / 100;
break;
case SA_CREATECON: // Elemental Converter Creation
- case AB_ANCILLA: // Ancilla Creation
make_per = 100000; // should be 100% success rate
break;
- case RK_RUNEMASTERY: //Information from iROWiki and RuneItemInfo.lua
- {
- int skill_lv = pc_checkskill(sd,skill_id);
-
- make_per = 5100 + 20 * skill_lv; // Base chance.
-
- //Take stats into account before applying non-modified values.
- make_per += (status->dex / 30 + status->luk / 10) + sd->status.job_level / 10 * 100;
-
- switch(sd->produce_itemusedid)
- { // Add success rate based on what type of stone is used.
- case 12737:
- make_per += 200; break;
- case 12734:
- make_per += 500; break;
- case 12738:
- make_per += 800; break;
- case 12735:
- make_per += 1100; break;
- case 12736:
- make_per += 1400; break;
- default:
- break;
- }
- sd->produce_itemusedid = 0;
-
- switch(nameid)
- { // Reduce success rate based on what rank stone we're making.
- case 12727: // Runstone_Verkana
- make_per -= 2000; // S Class
- break;
- case 12725: // Runstone_Nosiege
- case 12730: // Runstone_Urj
- make_per -= 1500; // A Rank
- break;
- case 12728: // Runstone_Isia
- case 12732: // Runstone_Pertz
- make_per -= 1000; // B Rank
- break;
- case 12726: // Runstone_Rhydo
- case 12729: // Runstone_Asir
- case 12731: // Runstone_Turisus
- case 12733: // Runstone_Hagalas
- make_per -= 500; // C Rank
- break;
- }
+ /**
+ * Rune Knight
+ **/
+ case RK_RUNEMASTERY:
+ make_per = 5 * (sd->itemid + pc_checkskill(sd,skill_id)) * 100;
+ break;
+ /**
+ * Guilotine Cross
+ **/
+ case GC_CREATENEWPOISON:
+ make_per = 3000 + 500 * pc_checkskill(sd,GC_RESEARCHNEWPOISON);
+ qty = 1+rand()%pc_checkskill(sd,GC_RESEARCHNEWPOISON);
break;
- }
default:
if (sd->menuskill_id == AM_PHARMACY &&
sd->menuskill_val > 10 && sd->menuskill_val <= 20)
@@ -11636,6 +13023,7 @@ int skill_produce_mix (struct map_session_data *sd, int skill_id, int nameid, in
if(make_per < 1) make_per = 1;
+
if(rand()%10000 < make_per || qty > 1){ //Success, or crafting multiple items.
struct item tmp_item;
memset(&tmp_item,0,sizeof(tmp_item));
@@ -11666,6 +13054,10 @@ int skill_produce_mix (struct map_session_data *sd, int skill_id, int nameid, in
flag = battle_config.produce_item_name_input&0x2;
break;
case AL_HOLYWATER:
+ /**
+ * Arch Bishop
+ **/
+ case AB_ANCILLA:
flag = battle_config.produce_item_name_input&0x8;
break;
case ASC_CDP:
@@ -11735,7 +13127,6 @@ int skill_produce_mix (struct map_session_data *sd, int skill_id, int nameid, in
case AM_TWILIGHT2:
case AM_TWILIGHT3:
case ASC_CDP:
- case RK_RUNEMASTERY:
clif_produceeffect(sd,2,nameid);
clif_misceffect(&sd->bl,5);
break;
@@ -11745,6 +13136,11 @@ int skill_produce_mix (struct map_session_data *sd, int skill_id, int nameid, in
clif_produceeffect(sd,0,nameid);
clif_misceffect(&sd->bl,3);
break;
+ case RK_RUNEMASTERY:
+ case GC_CREATENEWPOISON:
+ clif_produceeffect(sd,2,nameid);
+ clif_misceffect(&sd->bl,5);
+ break;
default: //Those that don't require a skill?
if( skill_produce_db[idx].itemlv > 10 && skill_produce_db[idx].itemlv <= 20)
{ //Cooking items.
@@ -11790,6 +13186,7 @@ int skill_produce_mix (struct map_session_data *sd, int skill_id, int nameid, in
clif_misceffect(&sd->bl,2);
break;
case RK_RUNEMASTERY:
+ case GC_CREATENEWPOISON:
clif_produceeffect(sd,3,nameid);
clif_misceffect(&sd->bl,6);
break;
@@ -11846,6 +13243,125 @@ int skill_arrow_create (struct map_session_data *sd, int nameid)
return 0;
}
+int skill_poisoningweapon( struct map_session_data *sd, int nameid) {
+ sc_type type;
+ int t_lv = 0, chance, i;
+ nullpo_ret(sd);
+ if( nameid <= 0 || (i = pc_search_inventory(sd,nameid)) < 0 || pc_delitem(sd,i,1,0,0) ) {
+ clif_skill_fail(sd,GC_POISONINGWEAPON,0,0);
+ return 0;
+ }
+ switch( nameid )
+ { // t_lv used to take duration from skill_get_time2
+ case PO_PARALYSE: type = SC_PARALYSE; t_lv = 1; break;
+ case PO_PYREXIA: type = SC_PYREXIA; t_lv = 2; break;
+ case PO_DEATHHURT: type = SC_DEATHHURT; t_lv = 3; break;
+ case PO_LEECHESEND: type = SC_LEECHESEND; t_lv = 4; break;
+ case PO_VENOMBLEED: type = SC_VENOMBLEED; t_lv = 6; break;
+ case PO_TOXIN: type = SC_TOXIN; t_lv = 7; break;
+ case PO_MAGICMUSHROOM: type = SC_MAGICMUSHROOM; t_lv = 8; break;
+ case PO_OBLIVIONCURSE: type = SC_OBLIVIONCURSE; t_lv = 9; break;
+ default:
+ clif_skill_fail(sd,GC_POISONINGWEAPON,0,0);
+ return 0;
+ }
+
+ chance = 2 + 2 * sd->menuskill_val; // 2 + 2 * skill_lv
+ sc_start4(&sd->bl,SC_POISONINGWEAPON,100,t_lv,type,chance,0,skill_get_time(GC_POISONINGWEAPON,sd->menuskill_val));
+
+ return 0;
+}
+int skill_magicdecoy(struct map_session_data *sd, int nameid) {
+ int x, y, i, class_, skill;
+ struct mob_data *md;
+ nullpo_ret(sd);
+ skill = sd->menuskill_val;
+
+ if( nameid <= 0 || !itemdb_is_element(nameid) || (i = pc_search_inventory(sd,nameid)) < 0 || !skill || pc_delitem(sd,i,1,0,0) )
+ {
+ clif_skill_fail(sd,NC_MAGICDECOY,0,0);
+ return 0;
+ }
+
+ // Spawn Position
+ pc_delitem(sd,i,1,0,0);
+ x = sd->sc.comet_x;
+ y = sd->sc.comet_y;
+ sd->sc.comet_x = sd->sc.comet_y = 0;
+ sd->menuskill_val = 0;
+
+ class_ = (nameid == 990 || nameid == 991) ? 2043 + nameid - 990 : (nameid == 992) ? 2046 : 2045;
+
+
+ md = mob_once_spawn_sub(&sd->bl, sd->bl.m, x, y, sd->status.name, class_, "");
+ if( md ) {
+ md->master_id = sd->bl.id;
+ md->special_state.ai = 3;
+ if( md->deletetimer != INVALID_TIMER )
+ delete_timer(md->deletetimer, mob_timer_delete);
+ md->deletetimer = add_timer (gettick() + skill_get_time(NC_MAGICDECOY,skill), mob_timer_delete, md->bl.id, 0);
+ mob_spawn(md);
+ md->status.matk_min = md->status.matk_max = 250 + (50 * skill);
+ }
+
+ return 0;
+}
+// Warlock Spellbooks. [LimitLine/3CeAM]
+int skill_spellbook (struct map_session_data *sd, int nameid) {
+ int i, j, points, skillid, preserved = 0, max_preserve;
+ nullpo_ret(sd);
+
+ if( sd->sc.data[SC_STOP] ) status_change_end(&sd->bl,SC_STOP,-1);
+ if( nameid <= 0 ) return 0;
+
+ if( pc_search_inventory(sd,nameid) < 0 )
+ { // User with no item on inventory
+ clif_skill_fail(sd,WL_READING_SB,0x04,0);
+ return 0;
+ }
+
+ ARR_FIND(0,MAX_SPELLBOOK,j,sd->rsb[j].skillid == 0); // Search for a free slot
+ if( j == MAX_SPELLBOOK )
+ { // No more free slots
+ clif_skill_fail(sd,WL_READING_SB,0x35,0);
+ return 0;
+ }
+
+ ARR_FIND(0,MAX_SKILL_SPELLBOOK_DB,i,skill_spellbook_db[i].nameid == nameid); // Search for information of this item
+ if( i == MAX_SKILL_SPELLBOOK_DB )
+ { // Fake nameid
+ clif_skill_fail(sd,WL_READING_SB,0x04,0);
+ return 0;
+ }
+
+ skillid = skill_spellbook_db[i].skillid;
+ points = skill_spellbook_db[i].points;
+
+ if( !pc_checkskill(sd,skillid) )
+ { // User don't know the skill
+ sc_start(&sd->bl,SC_SLEEP,100,1,skill_get_time(WL_READING_SB,pc_checkskill(sd,WL_READING_SB)));
+ clif_skill_fail(sd,WL_READING_SB,0x34,0);
+ return 0;
+ }
+
+ max_preserve = 4 * pc_checkskill(sd,WL_FREEZE_SP) + status_get_int(&sd->bl) / 10 + sd->status.base_level / 10;
+ for( i = 0; i < MAX_SPELLBOOK && sd->rsb[i].skillid; i++ )
+ preserved += sd->rsb[i].points;
+
+ if( preserved + points >= max_preserve )
+ { // No more free points
+ clif_skill_fail(sd,WL_READING_SB,0x04,0);
+ return 0;
+ }
+
+ sd->rsb[j].skillid = skillid;
+ sd->rsb[j].level = pc_checkskill(sd,skillid);
+ sd->rsb[j].points = points;
+ sc_start2(&sd->bl,SC_READING_SB,100,0,preserved+points,-1);
+
+ return 1;
+}
+
/*==========================================
*
@@ -12023,6 +13539,7 @@ void skill_init_unit_layout (void)
switch (i) {
case MG_FIREWALL:
case WZ_ICEWALL:
+ case WL_EARTHSTRAIN://Warlock
// these will be handled later
break;
case PR_SANCTUARY:
@@ -12229,6 +13746,90 @@ void skill_init_unit_layout (void)
}
pos++;
}
+ earthstrain_unit_pos = pos;
+ for( i = 0; i < 8; i++ )
+ { // For each Direction
+ skill_unit_layout[pos].count = 3; // Temp code being used as the official method makes too much noise in game. [Rytech]
+ //skill_unit_layout[pos].count = 15; // This line is here to replace the above one once gravity changes the animation.
+ switch( i )
+ {
+ case 0: case 1: case 3: case 4: case 5: case 7:
+ {
+ int dx[] = {-5, 0, 5};
+ int dy[] = { 0, 0, 0};
+ //int dx[] = {-7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7}; // Leave this here for future use.
+ //int dy[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ memcpy(skill_unit_layout[pos].dx,dx,sizeof(dx));
+ memcpy(skill_unit_layout[pos].dy,dy,sizeof(dy));
+ }
+ break;
+ case 2:
+ case 6:
+ {
+ int dx[] = { 0, 0, 0};
+ int dy[] = {-5, 0, 5};
+ //int dx[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // Leave this here for future use.
+ //int dy[] = {-7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7};
+ memcpy(skill_unit_layout[pos].dx,dx,sizeof(dx));
+ memcpy(skill_unit_layout[pos].dy,dy,sizeof(dy));
+ }
+ break;
+ }
+ pos++;
+ }
+
+}
+// Stasis skill usage check. [LimitLine/3CeAM]
+int skill_stasis_check(struct block_list *bl, int src_id, int skillid)
+{
+ int inf = 0;
+ if( !bl || skillid < 1 )
+ return 0; // Can do it
+ inf = skill_get_inf2(skillid);
+ if( inf == INF2_SONG_DANCE || /*skill_get_inf2(skillid) == INF2_CHORUS_SKILL ||*/ inf == INF2_SPIRIT_SKILL )
+ return 1; // Can't do it.
+
+ switch( skillid )
+ {
+ case NV_FIRSTAID: case TF_HIDING: case AS_CLOAKING: case WZ_SIGHTRASHER:
+ case RG_STRIPWEAPON: case RG_STRIPSHIELD: case RG_STRIPARMOR: case WZ_METEOR:
+ case RG_STRIPHELM: case SC_STRIPACCESSARY: case ST_FULLSTRIP: case WZ_SIGHTBLASTER:
+ case ST_CHASEWALK: case SC_ENERVATION: case SC_GROOMY: case WZ_ICEWALL:
+ case SC_IGNORANCE: case SC_LAZINESS: case SC_UNLUCKY: case WZ_STORMGUST:
+ case SC_WEAKNESS: case AL_RUWACH: case AL_PNEUMA: case WZ_JUPITEL:
+ case AL_HEAL: case AL_BLESSING: case AL_INCAGI: case WZ_VERMILION:
+ case AL_TELEPORT: case AL_WARP: case AL_HOLYWATER: case WZ_EARTHSPIKE:
+ case AL_HOLYLIGHT: case PR_IMPOSITIO: case PR_ASPERSIO: case WZ_HEAVENDRIVE:
+ case PR_SANCTUARY: case PR_STRECOVERY: case PR_MAGNIFICAT: case WZ_QUAGMIRE:
+ case ALL_RESURRECTION: case PR_LEXDIVINA: case PR_LEXAETERNA: case HW_GRAVITATION:
+ case PR_MAGNUS: case PR_TURNUNDEAD: case MG_SRECOVERY: case HW_MAGICPOWER:
+ case MG_SIGHT: case MG_NAPALMBEAT: case MG_SAFETYWALL: case HW_GANBANTEIN:
+ case MG_SOULSTRIKE: case MG_COLDBOLT: case MG_FROSTDIVER: case WL_DRAINLIFE:
+ case MG_STONECURSE: case MG_FIREBALL: case MG_FIREWALL: case WL_SOULEXPANSION:
+ case MG_FIREBOLT: case MG_LIGHTNINGBOLT: case MG_THUNDERSTORM: case MG_ENERGYCOAT:
+ case WL_WHITEIMPRISON: case WL_SUMMONFB: case WL_SUMMONBL: case WL_SUMMONWB:
+ case WL_SUMMONSTONE: case WL_SIENNAEXECRATE: case WL_RELEASE: case WL_EARTHSTRAIN:
+ case WL_RECOGNIZEDSPELL: case WL_READING_SB: case SA_MAGICROD: case SA_SPELLBREAKER:
+ case SA_DISPELL: case SA_FLAMELAUNCHER: case SA_FROSTWEAPON: case SA_LIGHTNINGLOADER:
+ case SA_SEISMICWEAPON: case SA_VOLCANO: case SA_DELUGE: case SA_VIOLENTGALE:
+ case SA_LANDPROTECTOR: case PF_HPCONVERSION: case PF_SOULCHANGE: case PF_SPIDERWEB:
+ case PF_FOGWALL: case TK_RUN: case TK_HIGHJUMP: case TK_SEVENWIND:
+ case SL_KAAHI: case SL_KAUPE: case SL_KAITE:
+#if FIREIVY_ON
+ case WZ_FIREIVY:
+#endif
+ // Skills that need to be confirmed.
+ case SO_FIREWALK: case SO_ELECTRICWALK: case SO_SPELLFIST: case SO_EARTHGRAVE:
+ case SO_DIAMONDDUST: case SO_POISON_BUSTER: case SO_PSYCHIC_WAVE: case SO_CLOUD_KILL:
+ case SO_STRIKING: case SO_WARMER: case SO_VACUUM_EXTREME: case SO_VARETYR_SPEAR:
+ case SO_ARRULLO:
+ return 1; // Can't do it.
+
+ default:
+ return 0; // Can do it.
+ }
+
+ return 0; // Can Cast anything else like Weapon Skills
}
/*==========================================
@@ -12259,7 +13860,10 @@ static bool skill_parse_row_skilldb(char* split[], int columns, int current)
i = skill_get_index(id);
if( !i ) // invalid skill id
return false;
-
+#if FIREIVY_ON == 0
+ if( i == WZ_FIREIVY ) //Disabled
+ return true;
+#endif
skill_split_atoi(split[1],skill_db[i].range);
skill_db[i].hit = atoi(split[2]);
skill_db[i].inf = atoi(split[3]);
@@ -12301,7 +13905,10 @@ static bool skill_parse_row_requiredb(char* split[], int columns, int current)
i = skill_get_index(i);
if( !i ) // invalid skill id
return false;
-
+#if FIREIVY_ON == 0
+ if( i == WZ_FIREIVY ) //Disabled
+ return true;
+#endif
skill_split_atoi(split[1],skill_db[i].hp);
skill_split_atoi(split[2],skill_db[i].mhp);
skill_split_atoi(split[3],skill_db[i].sp);
@@ -12359,9 +13966,17 @@ static bool skill_parse_row_requiredb(char* split[], int columns, int current)
else if( strcmpi(split[10],"recover_weight_rate")==0 ) skill_db[i].state = ST_RECOV_WEIGHT_RATE;
else if( strcmpi(split[10],"move_enable")==0 ) skill_db[i].state = ST_MOVE_ENABLE;
else if( strcmpi(split[10],"water")==0 ) skill_db[i].state = ST_WATER;
- else if( strcmpi(split[10],"dragon")==0 ) skill_db[i].state = ST_DRAGON;
- else if( strcmpi(split[10],"warg")==0 ) skill_db[i].state = ST_WARG;
- else if( strcmpi(split[10],"madogear")==0 ) skill_db[i].state = ST_MADOGEAR;
+ /**
+ * New States
+ **/
+ else if( strcmpi(split[10],"dragon")==0 ) skill_db[i].state = ST_RIDINGDRAGON;
+ else if( strcmpi(split[10],"warg")==0 ) skill_db[i].state = ST_WUG;
+ else if( strcmpi(split[10],"ridingwarg")==0 ) skill_db[i].state = ST_RIDINGWUG;
+ else if( strcmpi(split[10],"mado")==0 ) skill_db[i].state = ST_MADO;
+ else if( strcmpi(split[10],"elementalspirit")==0 ) skill_db[i].state = ST_ELEMENTALSPIRIT;
+ /**
+ * Unknown or no state
+ **/
else skill_db[i].state = ST_NONE;
skill_split_atoi(split[11],skill_db[i].spiritball);
@@ -12374,20 +13989,21 @@ static bool skill_parse_row_requiredb(char* split[], int columns, int current)
}
static bool skill_parse_row_castdb(char* split[], int columns, int current)
-{// SkillID,CastingTime,FixedCastingTime,AfterCastActDelay,Cooldown,AfterCastWalkDelay,Duration1,Duration2
+{// SkillID,CastingTime,AfterCastActDelay,AfterCastWalkDelay,Duration1,Duration2
int i = atoi(split[0]);
i = skill_get_index(i);
if( !i ) // invalid skill id
return false;
-
+#if FIREIVY_ON == 0
+ if( i == WZ_FIREIVY ) //Disabled
+ return true;
+#endif
skill_split_atoi(split[1],skill_db[i].cast);
- skill_split_atoi(split[2],skill_db[i].fixedcast);
- skill_split_atoi(split[3],skill_db[i].delay);
- skill_split_atoi(split[4],skill_db[i].cooldown);
- skill_split_atoi(split[5],skill_db[i].walkdelay);
- skill_split_atoi(split[6],skill_db[i].upkeep_time);
- skill_split_atoi(split[7],skill_db[i].upkeep_time2);
-
+ skill_split_atoi(split[2],skill_db[i].delay);
+ skill_split_atoi(split[3],skill_db[i].walkdelay);
+ skill_split_atoi(split[4],skill_db[i].upkeep_time);
+ skill_split_atoi(split[5],skill_db[i].upkeep_time2);
+ skill_split_atoi(split[6],skill_db[i].cooldown);
return true;
}
@@ -12397,7 +14013,10 @@ static bool skill_parse_row_castnodexdb(char* split[], int columns, int current)
i = skill_get_index(i);
if( !i ) // invalid skill id
return false;
-
+#if FIREIVY_ON == 0
+ if( i == WZ_FIREIVY ) //Disabled
+ return true;
+#endif
skill_split_atoi(split[1],skill_db[i].castnodex);
if( split[2] ) // optional column
skill_split_atoi(split[2],skill_db[i].delaynodex);
@@ -12411,7 +14030,10 @@ static bool skill_parse_row_nocastdb(char* split[], int columns, int current)
i = skill_get_index(i);
if( !i ) // invalid skill id
return false;
-
+#if FIREIVY_ON == 0
+ if( i == WZ_FIREIVY ) //Disabled
+ return true;
+#endif
skill_db[i].nocast |= atoi(split[1]);
return true;
@@ -12497,6 +14119,50 @@ static bool skill_parse_row_createarrowdb(char* split[], int columns, int curren
return true;
}
+static bool skill_parse_row_spellbookdb(char* split[], int columns, int current)
+{// SkillID,PreservePoints
+
+ int skillid = atoi(split[0]),
+ points = atoi(split[1]),
+ nameid = atoi(split[2]);
+
+ if( !skill_get_index(skillid) || !skill_get_max(skillid) )
+ ShowError("spellbook_db: Invalid skill ID %d\n", skillid);
+ if ( !skill_get_inf(skillid) )
+ ShowError("spellbook_db: Passive skills cannot be memorized (%d/%s)\n", skillid, skill_get_name(skillid));
+ if( points < 1 )
+ ShowError("spellbook_db: PreservePoints have to be 1 or above! (%d/%s)\n", skillid, skill_get_name(skillid));
+ else
+ {
+ skill_spellbook_db[current].skillid = skillid;
+ skill_spellbook_db[current].points = points;
+ skill_spellbook_db[current].nameid = nameid;
+
+ return true;
+ }
+
+ return false;
+}
+static bool skill_parse_row_magicmushroomdb(char* split[], int column, int current)
+{
+ int i = atoi(split[0]);
+
+ if( !skill_get_index(i) || !skill_get_max(i) )
+ {
+ ShowError("magicmushroom_db: Invalid skill ID %d\n", i);
+ return false;
+ }
+ if ( !skill_get_inf(i) )
+ {
+ ShowError("magicmushroom_db: Passive skills cannot be casted (%d/%s)\n", i, skill_get_name(i));
+ return false;
+ }
+
+ skill_magicmushroom_db[current].skillid = i;
+
+ return true;
+}
+
static bool skill_parse_row_abradb(char* split[], int columns, int current)
{// SkillID,DummyName,RequiredHocusPocusLevel,Rate
@@ -12511,7 +14177,10 @@ static bool skill_parse_row_abradb(char* split[], int columns, int current)
ShowError("abra_db: Passive skills cannot be casted (%d/%s)\n", i, skill_get_name(i));
return false;
}
-
+#if FIREIVY_ON == 0
+ if( i == WZ_FIREIVY ) //Disabled
+ return true;
+#endif
skill_abra_db[current].skillid = i;
skill_abra_db[current].req_lv = atoi(split[2]);
skill_abra_db[current].per = atoi(split[3]);
@@ -12527,13 +14196,14 @@ static void skill_readdb(void)
memset(skill_produce_db,0,sizeof(skill_produce_db));
memset(skill_arrow_db,0,sizeof(skill_arrow_db));
memset(skill_abra_db,0,sizeof(skill_abra_db));
-
+ memset(skill_spellbook_db,0,sizeof(skill_spellbook_db));
+ memset(skill_magicmushroom_db,0,sizeof(skill_magicmushroom_db));
// load skill databases
safestrncpy(skill_db[0].name, "UNKNOWN_SKILL", sizeof(skill_db[0].name));
safestrncpy(skill_db[0].desc, "Unknown Skill", sizeof(skill_db[0].desc));
sv_readdb(db_path, "skill_db.txt" , ',', 17, 17, MAX_SKILL_DB, skill_parse_row_skilldb);
sv_readdb(db_path, "skill_require_db.txt" , ',', 32, 32, MAX_SKILL_DB, skill_parse_row_requiredb);
- sv_readdb(db_path, "skill_cast_db.txt" , ',', 8, 8, MAX_SKILL_DB, skill_parse_row_castdb);
+ sv_readdb(db_path, "skill_cast_db.txt" , ',', 7, 7, MAX_SKILL_DB, skill_parse_row_castdb);
sv_readdb(db_path, "skill_castnodex_db.txt", ',', 2, 3, MAX_SKILL_DB, skill_parse_row_castnodexdb);
sv_readdb(db_path, "skill_nocast_db.txt" , ',', 2, 2, MAX_SKILL_DB, skill_parse_row_nocastdb);
sv_readdb(db_path, "skill_unit_db.txt" , ',', 8, 8, MAX_SKILL_DB, skill_parse_row_unitdb);
@@ -12541,6 +14211,11 @@ static void skill_readdb(void)
sv_readdb(db_path, "produce_db.txt" , ',', 4, 4+2*MAX_PRODUCE_RESOURCE, MAX_SKILL_PRODUCE_DB, skill_parse_row_producedb);
sv_readdb(db_path, "create_arrow_db.txt" , ',', 1+2, 1+2*MAX_ARROW_RESOURCE, MAX_SKILL_ARROW_DB, skill_parse_row_createarrowdb);
sv_readdb(db_path, "abra_db.txt" , ',', 4, 4, MAX_SKILL_ABRA_DB, skill_parse_row_abradb);
+ //Warlock
+ sv_readdb(db_path, "spellbook_db.txt" , ',', 3, 3, MAX_SKILL_SPELLBOOK_DB, skill_parse_row_spellbookdb);
+ //Guillotine Cross
+ sv_readdb(db_path, "magicmushroom_db.txt" , ',', 1, 1, MAX_SKILL_MAGICMUSHROOM_DB, skill_parse_row_magicmushroomdb);
+
}
void skill_reload (void)
diff --git a/src/map/skill.h b/src/map/skill.h
index 0cadd92d7..97bd54252 100644
--- a/src/map/skill.h
+++ b/src/map/skill.h
@@ -90,8 +90,8 @@ struct s_skill_db {
char desc[40];
int range[MAX_SKILL_LEVEL],hit,inf,element[MAX_SKILL_LEVEL],nk,splash[MAX_SKILL_LEVEL],max;
int num[MAX_SKILL_LEVEL];
- int cast[MAX_SKILL_LEVEL],walkdelay[MAX_SKILL_LEVEL],delay[MAX_SKILL_LEVEL],fixedcast[MAX_SKILL_LEVEL],cooldown[MAX_SKILL_LEVEL];
- int upkeep_time[MAX_SKILL_LEVEL],upkeep_time2[MAX_SKILL_LEVEL];
+ int cast[MAX_SKILL_LEVEL],walkdelay[MAX_SKILL_LEVEL],delay[MAX_SKILL_LEVEL];
+ int upkeep_time[MAX_SKILL_LEVEL],upkeep_time2[MAX_SKILL_LEVEL],cooldown[MAX_SKILL_LEVEL];
int castcancel,cast_def_rate;
int inf2,maxcount[MAX_SKILL_LEVEL],skill_type;
int blewcount[MAX_SKILL_LEVEL];
@@ -239,9 +239,7 @@ int skill_get_state(int id);
int skill_get_zeny( int id ,int lv );
int skill_get_num( int id ,int lv );
int skill_get_cast( int id ,int lv );
-int skill_get_fixedcast( int id ,int lv );
int skill_get_delay( int id ,int lv );
-int skill_get_cooldown( int id ,int lv );
int skill_get_walkdelay( int id ,int lv );
int skill_get_time( int id ,int lv );
int skill_get_time2( int id ,int lv );
@@ -292,6 +290,7 @@ int skill_clear_group(struct block_list *bl, int flag);
int skill_unit_ondamaged(struct skill_unit *src,struct block_list *bl,int damage,unsigned int tick);
int skill_castfix( struct block_list *bl, int skill_id, int skill_lv);
+int skill_castfix_sc( struct block_list *bl, int time, int skill_id, int skill_lv);
int skill_delayfix( struct block_list *bl, int skill_id, int skill_lv);
// Skill conditions check and remove [Inkfish]
@@ -369,9 +368,14 @@ enum {
ST_RECOV_WEIGHT_RATE,
ST_MOVE_ENABLE,
ST_WATER,
- ST_DRAGON,
- ST_WARG,
- ST_MADOGEAR
+ /**
+ * 3rd States
+ **/
+ ST_RIDINGDRAGON,
+ ST_WUG,
+ ST_RIDINGWUG,
+ ST_MADO,
+ ST_ELEMENTALSPIRIT,
};
enum e_skill {
@@ -1314,7 +1318,7 @@ enum e_skill {
GN_S_PHARMACY,
GN_SLINGITEM_RANGEMELEEATK,
- AB_SECRAMENT = 2515,
+ AB_SECRAMENT=2515,
WM_SEVERE_RAINSTORM_MELEE,
SR_HOWLINGOFLION,
SR_RIDEINLIGHTNING,
@@ -1505,7 +1509,7 @@ enum {
UNT_EVILLAND,
UNT_DARK_RUNNER, //TODO
UNT_DARK_TRANSFER, //TODO
- UNT_EPICLESIS,
+ UNT_EPICLESIS, //TODO
UNT_EARTHSTRAIN, //TODO
UNT_MANHOLE, //TODO
UNT_DIMENSIONDOOR, //TODO
@@ -1551,5 +1555,46 @@ enum {
UNT_MAX = 0x190
};
-
+/**
+ * Warlock
+ **/
+#define MAX_SKILL_SPELLBOOK_DB 17
+enum wl_spheres {
+ WLS_FIRE = 0x44,
+ WLS_WIND,
+ WLS_WATER,
+ WLS_STONE,
+};
+int skill_spellbook (struct map_session_data *sd, int nameid);
+/**
+ * Guilottine Cross
+ **/
+#define MAX_SKILL_MAGICMUSHROOM_DB 22
+struct s_skill_magicmushroom_db {
+ int skillid;
+};
+extern struct s_skill_magicmushroom_db skill_magicmushroom_db[MAX_SKILL_MAGICMUSHROOM_DB];
+/**
+ * Ranger
+ **/
+int skill_detonator(struct block_list *bl, va_list ap);
+bool skill_check_camouflage(struct block_list *bl, struct status_change_entry *sce);
+/**
+ * Mechanic
+ **/
+int skill_magicdecoy(struct map_session_data *sd, int nameid);
+/**
+ * Guiltoine Cross
+ **/
+int skill_poisoningweapon( struct map_session_data *sd, int nameid);
+enum gx_poison {
+ PO_PARALYSE = 12717,
+ PO_LEECHESEND,
+ PO_OBLIVIONCURSE,
+ PO_DEATHHURT,
+ PO_TOXIN,
+ PO_PYREXIA,
+ PO_MAGICMUSHROOM,
+ PO_VENOMBLEED
+};
#endif /* _SKILL_H_ */
diff --git a/src/map/status.c b/src/map/status.c
index f704ee0d6..dd528660b 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -35,7 +35,7 @@
#include <stdlib.h>
#include <memory.h>
#include <string.h>
-#include <math.h>
+
//Regen related flags.
enum e_regen
@@ -52,12 +52,17 @@ static int hp_coefficient2[CLASS_COUNT];
static int hp_sigma_val[CLASS_COUNT][MAX_LEVEL+1];
static int sp_coefficient[CLASS_COUNT];
static int aspd_base[CLASS_COUNT][MAX_WEAPON_TYPE]; //[blackhole89]
-static int shield_aspd_base[CLASS_COUNT];
static int refinebonus[MAX_REFINE_BONUS][3]; // ¸˜Bƒ{[ƒiƒXƒe[ƒuƒ‹(refine_db.txt)
int percentrefinery[5][MAX_REFINE+1]; // ¸˜B¬Œ÷—¦(refine_db.txt)
static int atkmods[3][MAX_WEAPON_TYPE]; // •ŠíATKƒTƒCƒYC³(size_fix.txt)
static char job_bonus[CLASS_COUNT][MAX_LEVEL];
-
+#if RRMODE
+enum {
+ SHIELD_ASPD,
+ RE_JOB_DB_MAX,
+} RE_JOB_DB;
+static int re_job_db[CLASS_COUNT][RE_JOB_DB_MAX];//[RRInd]
+#endif
static struct eri *sc_data_ers; //For sc_data entries
static struct status_data dummy_status;
@@ -400,7 +405,7 @@ void initChangeTables(void)
set_sc( CASH_INCAGI , SC_INCREASEAGI , SI_INCREASEAGI , SCB_AGI|SCB_SPEED );
set_sc( CASH_ASSUMPTIO , SC_ASSUMPTIO , SI_ASSUMPTIO , SCB_NONE );
- set_sc( ALL_PARTYFLEE , SC_PARTYFLEE , SI_PARTYFLEE , SCB_FLEE );
+ //set_sc( ALL_PARTYFLEE , SC_INCFLEE , SI_PARTYFLEE , SCB_NONE );
set_sc( CR_SHRINK , SC_SHRINK , SI_SHRINK , SCB_NONE );
set_sc( RG_CLOSECONFINE , SC_CLOSECONFINE2 , SI_CLOSECONFINE2 , SCB_NONE );
@@ -413,30 +418,6 @@ void initChangeTables(void)
add_sc( SA_ELEMENTGROUND , SC_ELEMENTALCHANGE );
add_sc( SA_ELEMENTWIND , SC_ELEMENTALCHANGE );
- set_sc( RK_ENCHANTBLADE , SC_ENCHANTBLADE , SI_ENCHANTBLADE , SCB_NONE );
- set_sc( RK_DEATHBOUND , SC_DEATHBOUND , SI_DEATHBOUND , SCB_NONE );
- set_sc( RK_MILLENNIUMSHIELD , SC_MILLENNIUMSHIELD , SI_BLANK , SCB_NONE );
- set_sc( RK_CRUSHSTRIKE , SC_CRUSHSTRIKE , SI_CRUSHSTRIKE , SCB_NONE );
- set_sc( RK_REFRESH , SC_REFRESH , SI_REFRESH , SCB_NONE );
- set_sc( RK_GIANTGROWTH , SC_GIANTGROWTH , SI_GIANTGROWTH , SCB_STR );
- set_sc( RK_STONEHARDSKIN , SC_STONEHARDSKIN , SI_STONEHARDSKIN , SCB_DEF2|SCB_MDEF2 );
- set_sc( RK_VITALITYACTIVATION, SC_VITALITYACTIVATION , SI_VITALITYACTIVATION , SCB_REGEN );
- set_sc( RK_FIGHTINGSPIRIT , SC_FIGHTINGSPIRIT , SI_FIGHTINGSPIRIT , SCB_ASPD );
- set_sc( RK_ABUNDANCE , SC_ABUNDANCE , SI_ABUNDANCE , SCB_NONE );
-
- set_sc( AB_ADORAMUS , SC_ADORAMUS , SI_ADORAMUS , SCB_AGI|SCB_SPEED );
- add_sc( AB_CLEMENTIA , SC_BLESSING );
- add_sc( AB_CANTO , SC_INCREASEAGI );
- add_sc( AB_PRAEFATIO , SC_KYRIE );
- set_sc( AB_EPICLESIS , SC_EPICLESIS , SI_EPICLESIS , SCB_MAXHP );
- set_sc( AB_ORATIO , SC_ORATIO , SI_ORATIO , SCB_NONE );
- set_sc( AB_LAUDAAGNUS , SC_LAUDAAGNUS , SI_LAUDAAGNUS , SCB_VIT );
- set_sc( AB_LAUDARAMUS , SC_LAUDARAMUS , SI_LAUDARAMUS , SCB_LUK );
- set_sc( AB_RENOVATIO , SC_RENOVATIO , SI_RENOVATIO , SCB_REGEN );
- set_sc( AB_EXPIATIO , SC_EXPIATIO , SI_EXPIATIO , SCB_NONE );
- set_sc( AB_DUPLELIGHT , SC_DUPLELIGHT , SI_DUPLELIGHT , SCB_NONE );
- set_sc( AB_SECRAMENT , SC_AB_SECRAMENT , SI_AB_SECRAMENT , SCB_NONE );
-
set_sc( HLIF_AVOID , SC_AVOID , SI_BLANK , SCB_SPEED );
set_sc( HLIF_CHANGE , SC_CHANGE , SI_BLANK , SCB_VIT|SCB_INT );
set_sc( HFLI_FLEET , SC_FLEET , SI_BLANK , SCB_ASPD|SCB_BATK|SCB_WATK );
@@ -470,6 +451,162 @@ void initChangeTables(void)
set_sc( GD_LEADERSHIP , SC_GUILDAURA , SI_BLANK , SCB_STR|SCB_AGI|SCB_VIT|SCB_DEX );
set_sc( GD_BATTLEORDER , SC_BATTLEORDERS , SI_BLANK , SCB_STR|SCB_INT|SCB_DEX );
set_sc( GD_REGENERATION , SC_REGENERATION , SI_BLANK , SCB_REGEN );
+
+ /**
+ * Rune Knight
+ **/
+ set_sc( RK_ENCHANTBLADE , SC_ENCHANTBLADE , SI_ENCHANTBLADE , SCB_NONE );
+ set_sc( RK_DRAGONHOWLING , SC_FEAR , SI_BLANK , SCB_FLEE|SCB_HIT );
+ set_sc( RK_DEATHBOUND , SC_DEATHBOUND , SI_DEATHBOUND , SCB_NONE );
+ set_sc( RK_WINDCUTTER , SC_FEAR , SI_BLANK , SCB_FLEE|SCB_HIT );
+ add_sc( RK_DRAGONBREATH , SC_BURNING );
+ set_sc( RK_MILLENNIUMSHIELD , SC_MILLENNIUMSHIELD , SI_REUSE_MILLENNIUMSHIELD , SCB_NONE );
+ set_sc( RK_REFRESH , SC_REFRESH , SI_REFRESH , SCB_NONE );
+ set_sc( RK_GIANTGROWTH , SC_GIANTGROWTH , SI_GIANTGROWTH , SCB_STR );
+ set_sc( RK_STONEHARDSKIN , SC_STONEHARDSKIN , SI_STONEHARDSKIN , SCB_NONE );
+ set_sc( RK_VITALITYACTIVATION, SC_VITALITYACTIVATION, SI_VITALITYACTIVATION, SCB_REGEN );
+ set_sc( RK_FIGHTINGSPIRIT , SC_FIGHTINGSPIRIT , SI_FIGHTINGSPIRIT , SCB_WATK|SCB_ASPD );
+ set_sc( RK_ABUNDANCE , SC_ABUNDANCE , SI_ABUNDANCE , SCB_NONE );
+ /**
+ * GC Guillotine Cross
+ **/
+ set_sc( GC_VENOMIMPRESS , SC_VENOMIMPRESS , SI_VENOMIMPRESS , SCB_NONE );
+ set_sc( GC_POISONINGWEAPON , SC_POISONINGWEAPON , SI_POISONINGWEAPON , SCB_NONE );
+ set_sc( GC_WEAPONBLOCKING , SC_WEAPONBLOCKING , SI_WEAPONBLOCKING , SCB_NONE );
+ set_sc( GC_CLOAKINGEXCEED , SC_CLOAKINGEXCEED , SI_CLOAKINGEXCEED , SCB_SPEED );
+ set_sc( GC_HALLUCINATIONWALK , SC_HALLUCINATIONWALK, SI_HALLUCINATIONWALK, SCB_FLEE );
+ set_sc( GC_ROLLINGCUTTER , SC_ROLLINGCUTTER , SI_ROLLINGCUTTER , SCB_NONE );
+ /**
+ * Arch Bishop
+ **/
+ set_sc( AB_ADORAMUS , SC_ADORAMUS , SI_ADORAMUS , SCB_AGI|SCB_SPEED );
+ add_sc( AB_CLEMENTIA , SC_BLESSING );
+ add_sc( AB_CANTO , SC_INCREASEAGI );
+ set_sc( AB_EPICLESIS , SC_EPICLESIS , SI_EPICLESIS , SCB_MAXHP );
+ add_sc( AB_PRAEFATIO , SC_KYRIE );
+ set_sc( AB_ORATIO , SC_ORATIO , SI_ORATIO , SCB_NONE );
+ set_sc( AB_LAUDAAGNUS , SC_LAUDAAGNUS , SI_LAUDAAGNUS , SCB_VIT );
+ set_sc( AB_LAUDARAMUS , SC_LAUDARAMUS , SI_LAUDARAMUS , SCB_LUK );
+ set_sc( AB_RENOVATIO , SC_RENOVATIO , SI_RENOVATIO , SCB_REGEN );
+ set_sc( AB_EXPIATIO , SC_EXPIATIO , SI_EXPIATIO , SCB_ATK_ELE );
+ set_sc( AB_DUPLELIGHT , SC_DUPLELIGHT , SI_DUPLELIGHT , SCB_NONE );
+ set_sc( AB_SECRAMENT , SC_SECRAMENT , SI_SECRAMENT , SCB_NONE );
+ /**
+ * Warlock
+ **/
+ add_sc( WL_WHITEIMPRISON , SC_WHITEIMPRISON );
+ set_sc( WL_FROSTMISTY , SC_FREEZING , SI_FROSTMISTY , SCB_ASPD|SCB_SPEED|SCB_DEF|SCB_DEF2 );
+ set_sc( WL_MARSHOFABYSS , SC_MARSHOFABYSS , SI_MARSHOFABYSS , SCB_SPEED|SCB_FLEE|SCB_DEF|SCB_MDEF );
+ set_sc( WL_RECOGNIZEDSPELL , SC_RECOGNIZEDSPELL , SI_RECOGNIZEDSPELL , SCB_NONE );
+ set_sc( WL_STASIS , SC_STASIS , SI_STASIS , SCB_NONE );
+ /**
+ * Ranger
+ **/
+ set_sc( RA_FEARBREEZE , SC_FEARBREEZE , SI_FEARBREEZE , SCB_NONE );
+ set_sc( RA_ELECTRICSHOCKER , SC_ELECTRICSHOCKER , SI_ELECTRICSHOCKER , SCB_NONE );
+ set_sc( RA_WUGDASH , SC_WUGDASH , SI_WUGDASH , SCB_SPEED );
+ set_sc( RA_CAMOUFLAGE , SC_CAMOUFLAGE , SI_CAMOUFLAGE , SCB_CRI|SCB_SPEED );
+ add_sc( RA_MAGENTATRAP , SC_ELEMENTALCHANGE );
+ add_sc( RA_COBALTTRAP , SC_ELEMENTALCHANGE );
+ add_sc( RA_MAIZETRAP , SC_ELEMENTALCHANGE );
+ add_sc( RA_VERDURETRAP , SC_ELEMENTALCHANGE );
+ add_sc( RA_FIRINGTRAP , SC_BURNING );
+ set_sc( RA_ICEBOUNDTRAP , SC_FREEZING , SI_FROSTMISTY , SCB_NONE );
+ /**
+ * Mechanic
+ **/
+ set_sc( NC_ACCELERATION , SC_ACCELERATION , SI_ACCELERATION , SCB_SPEED );
+ set_sc( NC_HOVERING , SC_HOVERING , SI_HOVERING , SCB_SPEED );
+ set_sc( NC_SHAPESHIFT , SC_SHAPESHIFT , SI_SHAPESHIFT , SCB_DEF_ELE );
+ set_sc( NC_INFRAREDSCAN , SC_INFRAREDSCAN , SI_INFRAREDSCAN , SCB_FLEE );
+ set_sc( NC_ANALYZE , SC_ANALYZE , SI_ANALYZE , SCB_DEF|SCB_DEF2|SCB_MDEF|SCB_MDEF2 );
+ set_sc( NC_MAGNETICFIELD , SC_MAGNETICFIELD , SI_MAGNETICFIELD , SCB_NONE );
+ set_sc( NC_NEUTRALBARRIER , SC_NEUTRALBARRIER , SI_NEUTRALBARRIER , SCB_NONE );
+ set_sc( NC_STEALTHFIELD , SC_STEALTHFIELD , SI_STEALTHFIELD , SCB_NONE );
+ ///**
+ // * Shadow Chaser
+ // **/
+ //set_sc( SC_REPRODUCE , SC__REPRODUCE , SI_REPRODUCE , SCB_NONE );
+ //set_sc( SC_AUTOSHADOWSPELL , SC__AUTOSHADOWSPELL, SI_AUTOSHADOWSPELL , SCB_NONE );
+ //set_sc( SC_SHADOWFORM , SC__SHADOWFORM , SI_SHADOWFORM , SCB_NONE );
+ //set_sc( SC_BODYPAINT , SC__BODYPAINT , SI_BODYPAINTING , SCB_ASPD );
+ //set_sc( SC_INVISIBILITY , SC__INVISIBILITY , SI_INVISIBILITY , SCB_ASPD|SCB_CRI|SCB_ATK_ELE );
+ //set_sc( SC_DEADLYINFECT , SC__DEADLYINFECT , SI_DEADLYINFECT , SCB_NONE );
+ //set_sc( SC_ENERVATION , SC__ENERVATION , SI_ENERVATION , SCB_BATK );
+ //set_sc( SC_GROOMY , SC__GROOMY , SI_GROOMY , SCB_ASPD|SCB_HIT|SCB_SPEED );
+ //set_sc( SC_IGNORANCE , SC__IGNORANCE , SI_IGNORANCE , SCB_NONE );
+ //set_sc( SC_LAZINESS , SC__LAZINESS , SI_LAZINESS , SCB_FLEE );
+ //set_sc( SC_UNLUCKY , SC__UNLUCKY , SI_UNLUCKY , SCB_CRI|SCB_FLEE2 );
+ //set_sc( SC_WEAKNESS , SC__WEAKNESS , SI_WEAKNESS , SCB_FLEE2|SCB_MAXHP );
+ //set_sc( SC_STRIPACCESSARY , SC__STRIPACCESSORY , SI_STRIPACCESSORY , SCB_DEX|SCB_INT|SCB_LUK );
+ //set_sc( SC_MANHOLE , SC__MANHOLE , SI_MANHOLE , SCB_NONE );
+ //add_sc( SC_CHAOSPANIC , SC_CHAOS );
+ //set_sc( SC_BLOODYLUST , SC__BLOODYLUST , SI_BLOODYLUST , SCB_DEF|SCB_DEF2|SCB_BATK|SCB_WATK );
+ ///**
+ // * Royal Guard
+ // **/
+ //set_sc( LG_REFLECTDAMAGE , SC_REFLECTDAMAGE , SI_LG_REFLECTDAMAGE, SCB_NONE );
+ //set_sc( LG_FORCEOFVANGUARD , SC_FORCEOFVANGUARD , SI_FORCEOFVANGUARD , SCB_MAXHP|SCB_DEF );
+ //set_sc( LG_EXEEDBREAK , SC_EXEEDBREAK , SI_EXEEDBREAK , SCB_NONE );
+ //set_sc( LG_PRESTIGE , SC_PRESTIGE , SI_PRESTIGE , SCB_DEF2 );
+ //set_sc( LG_BANDING , SC_BANDING , SI_BANDING , SCB_DEF2|SCB_WATK );// Renewal: atk2 & def2
+ //set_sc( LG_PIETY , SC_BENEDICTIO , SI_BENEDICTIO , SCB_DEF_ELE );
+ //set_sc( LG_EARTHDRIVE , SC_EARTHDRIVE , SI_EARTHDRIVE , SCB_DEF|SCB_ASPD );
+ //set_sc( LG_INSPIRATION , SC_INSPIRATION , SI_INSPIRATION , SCB_MAXHP|SCB_WATK|SCB_HIT|SCB_VIT|SCB_AGI|SCB_STR|SCB_DEX|SCB_INT|SCB_LUK);
+ ///**
+ // * Sura
+ // **/
+ //add_sc( SR_DRAGONCOMBO , SC_STUN );
+ //add_sc( SR_EARTHSHAKER , SC_STUN );
+ //set_sc( SR_CRESCENTELBOW , SC_CRESCENTELBOW , SI_CRESCENTELBOW , SCB_NONE );
+ //set_sc( SR_CURSEDCIRCLE , SC_CURSEDCIRCLE_TARGET, SI_CURSEDCIRCLE_TARGET , SCB_NONE );
+ //set_sc( SR_LIGHTNINGWALK , SC_LIGHTNINGWALK , SI_LIGHTNINGWALK , SCB_NONE );
+ //set_sc( SR_RAISINGDRAGON , SC_RAISINGDRAGON , SI_RAISINGDRAGON , SCB_REGEN|SCB_MAXHP|SCB_MAXSP/*|SCB_ASPD*/ );
+ //set_sc( SR_GENTLETOUCH_ENERGYGAIN, SC_GT_ENERGYGAIN , SI_GENTLETOUCH_ENERGYGAIN, SCB_NONE );
+ //set_sc( SR_GENTLETOUCH_CHANGE , SC_GT_CHANGE , SI_GENTLETOUCH_CHANGE , SCB_BATK|SCB_ASPD|SCB_DEF|SCB_MDEF );
+ //set_sc( SR_GENTLETOUCH_REVITALIZE, SC_GT_REVITALIZE , SI_GENTLETOUCH_REVITALIZE, SCB_MAXHP|SCB_DEF2|SCB_REGEN|SCB_ASPD|SCB_SPEED );
+ ///**
+ // * Wanderer / Mistrel
+ // **/
+ //set_sc( WA_SWING_DANCE , SC_SWINGDANCE , SI_SWINGDANCE , SCB_SPEED|SCB_ASPD );
+ //set_sc( WA_SYMPHONY_OF_LOVER , SC_SYMPHONYOFLOVER , SI_SYMPHONYOFLOVERS , SCB_MDEF );
+ //set_sc( WA_MOONLIT_SERENADE , SC_MOONLITSERENADE , SI_MOONLITSERENADE , SCB_MATK );
+ //set_sc( MI_RUSH_WINDMILL , SC_RUSHWINDMILL , SI_RUSHWINDMILL , SCB_BATK );
+ //set_sc( MI_ECHOSONG , SC_ECHOSONG , SI_ECHOSONG , SCB_DEF2 );
+ //set_sc( MI_HARMONIZE , SC_HARMONIZE , SI_HARMONIZE , SCB_STR|SCB_AGI|SCB_VIT|SCB_INT|SCB_DEX|SCB_LUK );
+ //set_sc( WM_POEMOFNETHERWORLD , SC_STOP , SI_NETHERWORLD , SCB_NONE );
+ //set_sc( WM_VOICEOFSIREN , SC_VOICEOFSIREN , SI_VOICEOFSIREN , SCB_NONE );
+ //set_sc( WM_LULLABY_DEEPSLEEP , SC_DEEPSLEEP , SI_DEEPSLEEP , SCB_NONE );
+ //set_sc( WM_SIRCLEOFNATURE , SC_SIRCLEOFNATURE , SI_SIRCLEOFNATURE , SCB_NONE );
+ //set_sc( WM_GLOOMYDAY , SC_GLOOMYDAY , SI_GLOOMYDAY , SCB_FLEE|SCB_ASPD );
+ //set_sc( WM_SONG_OF_MANA , SC_SONGOFMANA , SI_SONGOFMANA , SCB_NONE );
+ //set_sc( WM_DANCE_WITH_WUG , SC_DANCEWITHWUG , SI_DANCEWITHWUG , SCB_ASPD );
+ //set_sc( WM_SATURDAY_NIGHT_FEVER , SC_SATURDAYNIGHTFEVER , SI_SATURDAYNIGHTFEVER , SCB_BATK|SCB_DEF|SCB_FLEE|SCB_REGEN );
+ //set_sc( WM_LERADS_DEW , SC_LERADSDEW , SI_LERADSDEW , SCB_MAXHP );
+ //set_sc( WM_MELODYOFSINK , SC_MELODYOFSINK , SI_MELODYOFSINK , SCB_BATK|SCB_MATK );
+ //set_sc( WM_BEYOND_OF_WARCRY , SC_BEYONDOFWARCRY , SI_WARCRYOFBEYOND , SCB_BATK|SCB_MATK );
+ //set_sc( WM_UNLIMITED_HUMMING_VOICE, SC_UNLIMITEDHUMMINGVOICE, SI_UNLIMITEDHUMMINGVOICE, SCB_NONE );
+ ///**
+ // * Sorcerer
+ // **/
+ //set_sc( SO_FIREWALK , SC_PROPERTYWALK , SI_PROPERTYWALK , SCB_NONE );
+ //set_sc( SO_ELECTRICWALK , SC_PROPERTYWALK , SI_PROPERTYWALK , SCB_NONE );
+ //set_sc( SO_SPELLFIST , SC_SPELLFIST , SI_SPELLFIST , SCB_NONE );
+ //set_sc( SO_CLOUD_KILL , SC_POISON , SI_CLOUDKILL , SCB_NONE );
+ //set_sc( SO_STRIKING , SC_STRIKING , SI_STRIKING , SCB_WATK|SCB_CRI );
+ //set_sc( SO_WARMER , SC_WARMER , SI_WARMER , SCB_NONE );
+ //set_sc( SO_VACUUM_EXTREME , SC_VACUUM_EXTREME , SI_VACUUM_EXTREME , SCB_NONE );
+ //set_sc( SO_ARRULLO , SC_DEEPSLEEP , SI_DEEPSLEEP , SCB_NONE );
+ ///**
+ // * Genetic
+ // **/
+ //set_sc( GN_CARTBOOST , SC_GN_CARTBOOST, SI_CARTSBOOST , SCB_SPEED );
+ //set_sc( GN_THORNS_TRAP , SC_THORNSTRAP , SI_THORNTRAP , SCB_NONE );
+ //set_sc( GN_BLOOD_SUCKER , SC_BLOODSUCKER , SI_BLOODSUCKER , SCB_NONE );
+ //set_sc( GN_WALLOFTHORN , SC_STOP , SI_BLANK , SCB_NONE );
+ //set_sc( GN_FIRE_EXPANSION_SMOKE_POWDER, SC_SMOKEPOWDER , SI_FIRE_EXPANSION_SMOKE_POWDER, SCB_NONE );
+ //set_sc( GN_FIRE_EXPANSION_TEAR_GAS , SC_TEARGAS , SI_FIRE_EXPANSION_TEAR_GAS , SCB_NONE );
+ //set_sc( GN_MANDRAGORA , SC_MANDRAGORA , SI_MANDRAGORA , SCB_INT );
// Storing the target job rather than simply SC_SPIRIT simplifies code later on.
SkillStatusChangeTable[SL_ALCHEMIST] = (sc_type)MAPID_ALCHEMIST,
@@ -514,7 +651,6 @@ void initChangeTables(void)
StatusIconChangeTable[SC_SPL_DEF] = SI_SPL_DEF;
StatusIconChangeTable[SC_MANU_MATK] = SI_MANU_MATK;
StatusIconChangeTable[SC_SPL_MATK] = SI_SPL_MATK;
-
//Cash Items
StatusIconChangeTable[SC_FOOD_STR_CASH] = SI_FOOD_STR_CASH;
StatusIconChangeTable[SC_FOOD_AGI_CASH] = SI_FOOD_AGI_CASH;
@@ -542,6 +678,81 @@ void initChangeTables(void)
StatusIconChangeTable[SC_MERC_HPUP] = SI_MERC_HPUP;
StatusIconChangeTable[SC_MERC_SPUP] = SI_MERC_SPUP;
StatusIconChangeTable[SC_MERC_HITUP] = SI_MERC_HITUP;
+ // Warlock Spheres
+ StatusIconChangeTable[SC_SPHERE_1] = SI_SPHERE_1;
+ StatusIconChangeTable[SC_SPHERE_2] = SI_SPHERE_2;
+ StatusIconChangeTable[SC_SPHERE_3] = SI_SPHERE_3;
+ StatusIconChangeTable[SC_SPHERE_4] = SI_SPHERE_4;
+ StatusIconChangeTable[SC_SPHERE_5] = SI_SPHERE_5;
+
+ StatusIconChangeTable[SC_NEUTRALBARRIER_MASTER] = SI_NEUTRALBARRIER_MASTER;
+ StatusIconChangeTable[SC_STEALTHFIELD_MASTER] = SI_STEALTHFIELD_MASTER;
+ StatusIconChangeTable[SC_OVERHEAT] = SI_OVERHEAT;
+ StatusIconChangeTable[SC_OVERHEAT_LIMITPOINT] = SI_OVERHEAT_LIMITPOINT;
+
+ StatusIconChangeTable[SC_HALLUCINATIONWALK_POSTDELAY] = SI_HALLUCINATIONWALK_POSTDELAY;
+ StatusIconChangeTable[SC_TOXIN] = SI_TOXIN;
+ StatusIconChangeTable[SC_PARALYSE] = SI_PARALYSE;
+ StatusIconChangeTable[SC_VENOMBLEED] = SI_VENOMBLEED;
+ StatusIconChangeTable[SC_MAGICMUSHROOM] = SI_MAGICMUSHROOM;
+ StatusIconChangeTable[SC_DEATHHURT] = SI_DEATHHURT;
+ StatusIconChangeTable[SC_PYREXIA] = SI_PYREXIA;
+ StatusIconChangeTable[SC_OBLIVIONCURSE] = SI_OBLIVIONCURSE;
+ StatusIconChangeTable[SC_LEECHESEND] = SI_LEECHESEND;
+
+ StatusIconChangeTable[SC_SHIELDSPELL_DEF] = SI_SHIELDSPELL_DEF;
+ StatusIconChangeTable[SC_SHIELDSPELL_MDEF] = SI_SHIELDSPELL_MDEF;
+ StatusIconChangeTable[SC_SHIELDSPELL_REF] = SI_SHIELDSPELL_REF;
+ StatusIconChangeTable[SC_BANDING_DEFENCE] = SI_BANDING_DEFENCE;
+
+ StatusIconChangeTable[SC_GLOOMYDAY_SK] = SI_GLOOMYDAY;
+
+ StatusIconChangeTable[SC_CURSEDCIRCLE_ATKER] = SI_CURSEDCIRCLE_ATKER;
+
+ StatusIconChangeTable[SC_STOMACHACHE] = SI_STOMACHACHE;
+ StatusIconChangeTable[SC_MYSTERIOUS_POWDER] = SI_MYSTERIOUS_POWDER;
+ StatusIconChangeTable[SC_MELON_BOMB] = SI_MELON_BOMB;
+ StatusIconChangeTable[SC_BANANA_BOMB] = SI_BANANA_BOMB;
+ StatusIconChangeTable[SC_BANANA_BOMB_SITDOWN] = SI_BANANA_BOMB_SITDOWN_POSTDELAY;
+
+ //Genetics New Food Items Status Icons
+ StatusIconChangeTable[SC_SAVAGE_STEAK] = SI_SAVAGE_STEAK;
+ StatusIconChangeTable[SC_COCKTAIL_WARG_BLOOD] = SI_COCKTAIL_WARG_BLOOD;
+ StatusIconChangeTable[SC_MINOR_BBQ] = SI_MINOR_BBQ;
+ StatusIconChangeTable[SC_SIROMA_ICE_TEA] = SI_SIROMA_ICE_TEA;
+ StatusIconChangeTable[SC_DROCERA_HERB_STEAMED] = SI_DROCERA_HERB_STEAMED;
+ StatusIconChangeTable[SC_PUTTI_TAILS_NOODLES] = SI_PUTTI_TAILS_NOODLES;
+
+ StatusIconChangeTable[SC_BOOST500] |= SI_BOOST500;
+ StatusIconChangeTable[SC_FULL_SWING_K] |= SI_FULL_SWING_K;
+ StatusIconChangeTable[SC_MANA_PLUS] |= SI_MANA_PLUS;
+ StatusIconChangeTable[SC_MUSTLE_M] |= SI_MUSTLE_M;
+ StatusIconChangeTable[SC_LIFE_FORCE_F] |= SI_LIFE_FORCE_F;
+ StatusIconChangeTable[SC_EXTRACT_WHITE_POTION_Z] |= SI_EXTRACT_WHITE_POTION_Z;
+ StatusIconChangeTable[SC_VITATA_500] |= SI_VITATA_500;
+ StatusIconChangeTable[SC_EXTRACT_SALAMINE_JUICE] |= SI_EXTRACT_SALAMINE_JUICE;
+
+ // Elemental Spirit's 'side' status change icons.
+ StatusIconChangeTable[SC_CIRCLE_OF_FIRE] = SI_CIRCLE_OF_FIRE;
+ StatusIconChangeTable[SC_FIRE_CLOAK] = SI_FIRE_CLOAK;
+ StatusIconChangeTable[SC_WATER_SCREEN] = SI_WATER_SCREEN;
+ StatusIconChangeTable[SC_WATER_DROP] = SI_WATER_DROP;
+ StatusIconChangeTable[SC_WIND_STEP] = SI_WIND_STEP;
+ StatusIconChangeTable[SC_WIND_CURTAIN] = SI_WIND_CURTAIN;
+ StatusIconChangeTable[SC_SOLID_SKIN] = SI_SOLID_SKIN;
+ StatusIconChangeTable[SC_STONE_SHIELD] = SI_STONE_SHIELD;
+ StatusIconChangeTable[SC_PYROTECHNIC] = SI_PYROTECHNIC;
+ StatusIconChangeTable[SC_HEATER] = SI_HEATER;
+ StatusIconChangeTable[SC_TROPIC] = SI_TROPIC;
+ StatusIconChangeTable[SC_AQUAPLAY] = SI_AQUAPLAY;
+ StatusIconChangeTable[SC_COOLER] = SI_COOLER;
+ StatusIconChangeTable[SC_CHILLY_AIR] = SI_CHILLY_AIR;
+ StatusIconChangeTable[SC_GUST] = SI_GUST;
+ StatusIconChangeTable[SC_BLAST] = SI_BLAST;
+ StatusIconChangeTable[SC_WILD_STORM] = SI_WILD_STORM;
+ StatusIconChangeTable[SC_PETROLOGY] = SI_PETROLOGY;
+ StatusIconChangeTable[SC_CURSED_SOIL] = SI_CURSED_SOIL;
+ StatusIconChangeTable[SC_UPHEAVAL] = SI_UPHEAVAL;
//Other SC which are not necessarily associated to skills.
StatusChangeFlagTable[SC_ASPDPOTION0] = SCB_ASPD;
@@ -586,8 +797,6 @@ void initChangeTables(void)
StatusChangeFlagTable[SC_SPCOST_RATE] |= SCB_ALL;
StatusChangeFlagTable[SC_WALKSPEED] |= SCB_SPEED;
StatusChangeFlagTable[SC_ITEMSCRIPT] |= SCB_ALL;
- StatusChangeFlagTable[SC_FEAR] |= SCB_HIT|SCB_FLEE;
-
// Cash Items
StatusChangeFlagTable[SC_FOOD_STR_CASH] = SCB_STR;
StatusChangeFlagTable[SC_FOOD_AGI_CASH] = SCB_AGI;
@@ -601,7 +810,12 @@ void initChangeTables(void)
StatusChangeFlagTable[SC_MERC_HPUP] |= SCB_MAXHP;
StatusChangeFlagTable[SC_MERC_SPUP] |= SCB_MAXSP;
StatusChangeFlagTable[SC_MERC_HITUP] |= SCB_HIT;
-
+#if RE_EDP
+ /**
+ * In RE EDP increases your atk and weapon atk
+ **/
+ StatusChangeFlagTable[SC_EDP] |= SCB_BATK|SCB_WATK;
+#endif
if( !battle_config.display_hallucination ) //Disable Hallucination.
StatusIconChangeTable[SC_HALLUCINATION] = SI_BLANK;
}
@@ -627,6 +841,14 @@ static void initDummyData(void)
dummy_status.mode = MD_CANMOVE;
}
+
+//For copying a status_data structure from b to a, without overwriting current Hp and Sp
+static inline void status_cpy(struct status_data* a, const struct status_data* b)
+{
+ memcpy((void*)&a->max_hp, (const void*)&b->max_hp, sizeof(struct status_data)-(sizeof(a->hp)+sizeof(a->sp)));
+}
+
+
/*==========================================
* ¸˜Bƒ{[ƒiƒX
*------------------------------------------*/
@@ -748,6 +970,7 @@ int status_damage(struct block_list *src,struct block_list *target,int hp, int s
status_change_end(target, SC_HIDING, INVALID_TIMER);
status_change_end(target, SC_CLOAKING, INVALID_TIMER);
status_change_end(target, SC_CHASEWALK, INVALID_TIMER);
+ status_change_end(target, SC_CAMOUFLAGE, INVALID_TIMER);
if ((sce=sc->data[SC_ENDURE]) && !sce->val4) {
//Endure count is only reduced by non-players on non-gvg maps.
//val4 signals infinite endure. [Skotlex]
@@ -765,6 +988,8 @@ int status_damage(struct block_list *src,struct block_list *target,int hp, int s
}
if(sc->data[SC_DANCING] && (unsigned int)hp > status->max_hp>>2)
status_change_end(target, SC_DANCING, INVALID_TIMER);
+ if(sc->data[SC_CLOAKINGEXCEED] && --(sc->data[SC_CLOAKINGEXCEED]->val2) <= 0)
+ status_change_end(target,SC_CLOAKINGEXCEED,-1);
}
unit_skillcastcancel(target, 2);
}
@@ -917,9 +1142,6 @@ int status_heal(struct block_list *bl,int hp,int sp, int flag)
}
if(sp) {
- if (sc && sc->data[SC_BERSERK] && sc->data[SC_ABUNDANCE]) // SP does not regenerate during Frenzy.
- sp = 0;
-
if((unsigned int)sp > status->max_sp - status->sp)
sp = status->max_sp - status->sp;
}
@@ -1199,6 +1421,8 @@ int status_check_skilluse(struct block_list *src, struct block_list *target, int
}
if (sc->option&OPTION_CHASEWALK && skill_num != ST_CHASEWALK)
return 0;
+ if(sc->option&OPTION_MOUNTING)
+ return 0;//New mounts can't attack nor use skills in the client; this check makes it cheat-safe [Ind]
}
if (target == NULL || target == src) //No further checking needed.
return 1;
@@ -1233,6 +1457,8 @@ int status_check_skilluse(struct block_list *src, struct block_list *target, int
if (tsc->option&hide_flag && !(status->mode&MD_BOSS) &&
(sd->special_state.perfect_hiding || !(status->mode&MD_DETECTOR)))
return 0;
+ if( tsc->data[SC_CAMOUFLAGE] && !(status->mode&(MD_BOSS|MD_DETECTOR)) && !skill_num )
+ return 0;
}
break;
case BL_ITEM: //Allow targetting of items to pick'em up (or in the case of mobs, to loot them).
@@ -1279,18 +1505,14 @@ int status_check_visibility(struct block_list *src, struct block_list *target)
switch (target->type)
{ //Check for chase-walk/hiding/cloaking opponents.
case BL_PC:
- if(tsc->option&(OPTION_HIDE|OPTION_CLOAK|OPTION_CHASEWALK) &&
- !(status->mode&MD_BOSS) &&
- (
- ((TBL_PC*)target)->special_state.perfect_hiding ||
- !(status->mode&MD_DETECTOR)
- ))
+ if( (tsc->option&(OPTION_HIDE|OPTION_CLOAK|OPTION_CHASEWALK) || tsc->data[SC_CAMOUFLAGE]) && !(status->mode&MD_BOSS) &&
+ ( ((TBL_PC*)target)->special_state.perfect_hiding || !(status->mode&MD_DETECTOR) ) )
return 0;
break;
default:
- if (tsc && tsc->option&(OPTION_HIDE|OPTION_CLOAK|OPTION_CHASEWALK) &&
- !(status->mode&(MD_BOSS|MD_DETECTOR)))
- return 0;
+ if( tsc && (tsc->option&(OPTION_HIDE|OPTION_CLOAK|OPTION_CHASEWALK) || tsc->data[SC_CAMOUFLAGE]) && !(status->mode&(MD_BOSS|MD_DETECTOR)) )
+ return 0;
+
}
return 1;
@@ -1299,28 +1521,42 @@ int status_check_visibility(struct block_list *src, struct block_list *target)
// Basic ASPD value
int status_base_amotion_pc(struct map_session_data* sd, struct status_data* status)
{
- int amotion, shield = 0;
+ int amotion;
// base weapon delay
amotion = (sd->status.weapon < MAX_WEAPON_TYPE)
? (aspd_base[pc_class2idx(sd->status.class_)][sd->status.weapon]) // single weapon
: (aspd_base[pc_class2idx(sd->status.class_)][sd->weapontype1] + aspd_base[pc_class2idx(sd->status.class_)][sd->weapontype2])*7/10; // dual-wield
- if (sd->status.shield)
- shield = shield_aspd_base[pc_class2idx(sd->status.class_)] * 10;
-
// percentual delay reduction from stats
- amotion-= ( amotion - shield ) * (4*status->agi + status->dex)/1000;
-
+ amotion-= amotion * (4*status->agi + status->dex)/1000;
+
// raw delay adjustment from bAspd bonus
amotion+= sd->aspd_add;
-
- return amotion;
+#if RRMODE
+ /**
+ * Bearing a shield decreases your ASPD by a fixed value depending on your class
+ **/
+ if( sd->status.shield )
+ amotion += re_job_db[pc_class2idx(sd->status.class_)][SHIELD_ASPD];
+ /**
+ * RE Absolute aspd modifiers
+ **/
+ if( sd->sc.count ) {
+ int i;
+ if ( sd->sc.data[i=SC_ASPDPOTION3] ||
+ sd->sc.data[i=SC_ASPDPOTION2] ||
+ sd->sc.data[i=SC_ASPDPOTION1] ||
+ sd->sc.data[i=SC_ASPDPOTION0] )
+ amotion -= sd->sc.data[i]->val1*10;
+ }
+#endif
+ return amotion;
}
static unsigned short status_base_atk(const struct block_list *bl, const struct status_data *status)
{
- int flag = 0, str, dex, dstr, base;
+ int flag = 0, str, dex, dstr;
if(!(bl->type&battle_config.enable_baseatk))
return 0;
@@ -1338,10 +1574,10 @@ static unsigned short status_base_atk(const struct block_list *bl, const struct
flag = 1;
}
if (flag) {
- base =str = status->dex;
+ str = status->dex;
dex = status->str;
} else {
- base = str = status->str;
+ str = status->str;
dex = status->dex;
}
//Normally only players have base-atk, but homunc have a different batk
@@ -1350,12 +1586,33 @@ static unsigned short status_base_atk(const struct block_list *bl, const struct
dstr = str/10;
str += dstr*dstr;
if (bl->type == BL_PC)
- str = (((TBL_PC*)bl)->status.base_level*10/4 + base*10 + dex*10/5 + status->luk*10/3)/10;
+ str+= dex/5 + status->luk/5;
return cap_value(str, 0, USHRT_MAX);
}
-#define status_base_matk_max(status) (status->int_+(status->int_/5)*(status->int_/5))
-#define status_base_matk_min(status) (status->int_+(status->int_/7)*(status->int_/7))
+
+static inline unsigned short status_base_matk_max(const struct status_data* status)
+{
+ #if RRMODE
+ return status->matk_max;//In RE maximum MATK signs weapon matk, which we store in this var
+ #else //Original Max MATK Formula
+ return status->int_+(status->int_/5)*(status->int_/5);
+ #endif
+}
+
+#if RRMODE
+static inline unsigned short status_base_matk_min(const struct status_data* status, int lvl)
+#else
+static inline unsigned short status_base_matk_min(const struct status_data* status)
+#endif
+{
+ #if RRMODE //Renewal MATK Formula
+ return status->int_+(status->int_/2)+(status->dex/5)+(status->luk/3)+(lvl/4);
+ #else //Original Min MATK Formula
+ return status->int_+(status->int_/7)*(status->int_/7);
+ #endif
+}
+
//Fills in the misc data that can be calculated from the other status info (except for level)
void status_calc_misc(struct block_list *bl, struct status_data *status, int level)
@@ -1366,23 +1623,31 @@ void status_calc_misc(struct block_list *bl, struct status_data *status, int lev
status->hit = status->flee =
status->def2 = status->mdef2 =
status->cri = status->flee2 = 0;
-
+#if RRMODE
+ status->matk_min = status_base_matk_min(status, level);
+#else
status->matk_min = status_base_matk_min(status);
+#endif
status->matk_max = status_base_matk_max(status);
- //Renewal calculation? HIT is currently coming up too high.
- status->hit += 175 + status->dex + (unsigned short)floor((double)status->luk/3) + level;
- status->flee += 100 + status->agi + level;
-
- // Values are still off by roughly 1~3 points. Getting there though.
- status->def2 += (level*10/2 + status->vit*10/2 + status->agi*10/5)/10;
- if( bl->type != BL_MOB )
- status->mdef2 += (level*10/4 + status->int_*10 + status->vit*10/5 + status->dex*10/5)/10;
- else
- status->mdef2 = status->mdef; // Mobs use their mdef as their mdef2.
-
- //Status MATK = floor(Base Level/4 + INT + INT/2 + DEX/5 + LUK/3)
- status->status_matk = (unsigned short)floor((double)level/4 + (double)status->int_ + (double)status->int_/2 + (double)status->dex/5 + (double)status->luk/3);
+#if RRMODE //Renewal Formulas
+ status->hit += level + status->dex;//base level + ( every 1 dex = +1 hit )
+ status->hit += status->luk / 3;//every 3 luk = +1 hit
+ status->flee += level + status->agi;//base level + ( every 1 agi = +1 flee )
+ status->flee += status->luk/5;//every 5 luk = +1 flee
+ status->def2 += status->agi / 5;//every 5 agi = +1 def
+ status->def2 += status->vit / 2;//every 2 agi = +1 def
+ status->def2 += level / 2;//every 2 lvls = +1 def
+ status->mdef2 += status->int_ / 2;//every 2 int = +1 mdef
+ status->mdef2 += status->dex / 5;//every 5 dex = +1 mdef
+ status->mdef2 += level /4;//every 4 lvls = +1 mdef
+ //status->matk_min += level/4;//every 4 lvls = +1 matk
+#else //Old Formulas
+ status->hit += level + status->dex;
+ status->flee += level + status->agi;
+ status->def2 += status->vit;
+ status->mdef2 += status->int_ + (status->vit>>1);
+#endif
if( bl->type&battle_config.enable_critical )
status->cri += status->luk*3 + 10;
@@ -1399,6 +1664,10 @@ void status_calc_misc(struct block_list *bl, struct status_data *status, int lev
status->batk = cap_value(temp, 0, USHRT_MAX);
} else
status->batk = status_base_atk(bl, status);
+#if RRMODE //Renewal ATK Bonus Formula (after atk is calculated)
+ status->batk += status->luk / 3;//every 3 luk = +1ATK
+ status->batk += level / 4;//every 4 levels = +1 ATK
+#endif
if (status->cri)
switch (bl->type) {
case BL_MOB:
@@ -1561,11 +1830,8 @@ int status_calc_mob_(struct mob_data* md, bool first)
status->max_sp += 200 * gc->defense;
status->hp = status->max_hp;
status->sp = status->max_sp;
- if( gc->castle_id < 24 )
- {
- status->def += (gc->defense+2)/3;
- status->mdef += (gc->defense+2)/3;
- }
+ status->def += (gc->defense+2)/3;
+ status->mdef += (gc->defense+2)/3;
}
if(md->class_ != MOBID_EMPERIUM) {
status->batk += status->batk * 10*md->guardian_data->guardup_lv/100;
@@ -1712,6 +1978,18 @@ static unsigned int status_base_pc_maxsp(struct map_session_data* sd, struct sta
return val;
}
+#if RRMODE
+/**
+ * Renewal Absolute Bonus to be applied after all bonuses were applied (so % bonuses on say, skills, don't affect them)
+ **/
+void status_renewal_postcalc(struct status_data* status, int flag) {
+ if( flag&SCB_FLEE )
+ status->flee += 100;
+ if( flag&SCB_HIT )
+ status->hit += 175;
+ return;
+}
+#endif
//Calculates player data from scratch without counting SC adjustments.
//Should be invoked whenever players raise stats, learn passive skills or change equipment.
@@ -1772,9 +2050,6 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
sd->critical_rate = sd->hit_rate = sd->flee_rate = sd->flee2_rate = 100;
sd->def_rate = sd->def2_rate = sd->mdef_rate = sd->mdef2_rate = 100;
sd->regen.state.block = 0;
- sd->fixedcastrate=100;
- sd->weapon_matk = 0;
- sd->equipment_matk = 0;
// zeroed arrays, order follows the order in pc.h.
// add new arrays to the end of zeroed area in pc.h (see comments) and size here. [zzo]
@@ -1818,7 +2093,7 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
status->mode = MD_MASK&~(MD_BOSS|MD_PLANT|MD_DETECTOR|MD_ANGRY|MD_TARGETWEAK);
status->size = (sd->class_&JOBL_BABY)?0:1;
- if (battle_config.character_size && (pc_isriding(sd) || pc_isdragon(sd))) { //[Lupus]
+ if (battle_config.character_size && pc_isriding(sd)) { //[Lupus]
if (sd->class_&JOBL_BABY) {
if (battle_config.character_size&2)
status->size++;
@@ -1940,7 +2215,6 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
int r,wlv = sd->inventory_data[index]->wlv;
struct weapon_data *wd;
struct weapon_atk *wa;
-
if (wlv >= MAX_REFINE_BONUS)
wlv = MAX_REFINE_BONUS - 1;
if(i == EQI_HAND_L && sd->status.inventory[index].equip == EQP_HAND_L) {
@@ -1952,6 +2226,21 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
}
wa->atk += sd->inventory_data[index]->atk;
wa->atk2 = (r=sd->status.inventory[index].refine)*refinebonus[wlv][0];
+ #if RRMODE
+ /**
+ * in RE matk_max is used as the weapon's matk.
+ * += is used so that two-wield weapons (in the case of, say, sinx) bonus stack.
+ **/
+ status->matk_max += sd->inventory_data[index]->matk;
+ /**
+ * Refine Bonus
+ **/
+ status->matk_max += sd->status.inventory[index].refine * refinebonus[wlv][0];
+ /**
+ * In RE weapon level is used in several areas, this way we save performance
+ **/
+ status->wlv = wlv;
+ #endif
if((r-=refinebonus[wlv][2])>0) //Overrefine bonus.
wd->overrefine = r*refinebonus[wlv][1];
@@ -1979,11 +2268,7 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
}
}
else if(sd->inventory_data[index]->type == IT_ARMOR) {
- int r = sd->status.inventory[index].refine;
- int per = 0, refine=(r>0)?1:0;
- for(per=1; per<r; per++)
- refine += (per/4) + 1;
- refinedef += refine;
+ refinedef += sd->status.inventory[index].refine*refinebonus[0][0];
if(sd->inventory_data[index]->script) {
run_script(sd->inventory_data[index]->script,0,sd->bl.id,0);
if (!calculating) //Abort, run_script retriggered this. [Skotlex]
@@ -2008,7 +2293,7 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
memcpy(sd->param_equip,sd->param_bonus,sizeof(sd->param_equip));
memset(sd->param_bonus, 0, sizeof(sd->param_bonus));
- status->def += refinedef;
+ status->def += (refinedef+50)/100;
//Parse Cards
for(i=0;i<EQI_MAX-1;i++) {
@@ -2103,7 +2388,7 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
sd->left_weapon.atkmods[1] = atkmods[1][sd->weapontype2];
sd->left_weapon.atkmods[2] = atkmods[2][sd->weapontype2];
- if((pc_isriding(sd) || pc_isdragon(sd)) &&
+ if(pc_isriding(sd) &&
(sd->status.weapon==W_1HSPEAR || sd->status.weapon==W_2HSPEAR))
{ //When Riding with spear, damage modifier to mid-class becomes
//same as versus large size.
@@ -2312,7 +2597,6 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
status->flee += skill*(sd->class_&JOBL_2 && (sd->class_&MAPID_BASEMASK) == MAPID_THIEF? 4 : 3);
if((skill=pc_checkskill(sd,MO_DODGE))>0)
status->flee += (skill*3)>>1;
-
// ----- EQUIPMENT-DEF CALCULATION -----
// Apply relative modifiers from equipment
@@ -2320,15 +2604,22 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
sd->def_rate = 0;
if(sd->def_rate != 100) {
i = status->def * sd->def_rate/100;
+#if RRMODE
status->def = cap_value(i, SHRT_MIN, SHRT_MAX);
- }
-
+#else
+ status->def = cap_value(i, CHAR_MIN, CHAR_MAX);
+#endif
+ }
+#if RRMODE == 0
+ /**
+ * The following setting does not affect Renewal Mode
+ **/
if (!battle_config.weapon_defense_type && status->def > battle_config.max_def)
{
status->def2 += battle_config.over_def_bonus*(status->def -battle_config.max_def);
- status->def = (unsigned short)battle_config.max_def;
+ status->def = (unsigned char)battle_config.max_def;
}
-
+#endif
// ----- EQUIPMENT-MDEF CALCULATION -----
// Apply relative modifiers from equipment
@@ -2336,15 +2627,22 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
sd->mdef_rate = 0;
if(sd->mdef_rate != 100) {
i = status->mdef * sd->mdef_rate/100;
+#if RRMODE
status->mdef = cap_value(i, SHRT_MIN, SHRT_MAX);
- }
-
+#else
+ status->mdef = cap_value(i, CHAR_MIN, CHAR_MAX);
+#endif
+ }
+#if RRMODE == 0
+ /**
+ * The following setting does not affect Renewal Mode
+ **/
if (!battle_config.magic_defense_type && status->mdef > battle_config.max_def)
{
status->mdef2 += battle_config.over_def_bonus*(status->mdef -battle_config.max_def);
- status->mdef = (signed short)battle_config.max_def;
+ status->mdef = (signed char)battle_config.max_def;
}
-
+#endif
// ----- ASPD CALCULATION -----
// Unlike other stats, ASPD rate modifiers from skills/SCs/items/etc are first all added together, then the final modifier is applied
@@ -2362,8 +2660,7 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
status->aspd_rate -= ((skill+1)/2) * 10;
if(pc_isriding(sd))
status->aspd_rate += 500-100*pc_checkskill(sd,KN_CAVALIERMASTERY);
- if(pc_isdragon(sd))
- status->aspd_rate += 750-75*pc_checkskill(sd,RK_DRAGONTRAINING); // Officiak is rumoured to be 75+5*skilllv...giving you 125% ASPD?
+
status->adelay = 2*status->amotion;
@@ -2381,8 +2678,6 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
sd->max_weight += 2000*skill;
if(pc_isriding(sd) && pc_checkskill(sd,KN_RIDING)>0)
sd->max_weight += 10000;
- if(pc_isdragon(sd) && (skill=pc_checkskill(sd,RK_DRAGONTRAINING))>0)
- sd->max_weight += 5000+2000*skill; //+200 weight per level of RK_DRAGINTRAINING
if(sc->data[SC_KNOWLEDGE])
sd->max_weight += sd->max_weight*sc->data[SC_KNOWLEDGE]->val1/10;
if((skill=pc_checkskill(sd,ALL_INCCARRY))>0)
@@ -2408,8 +2703,6 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
sd->dsprate = 0;
if(sd->castrate < 0)
sd->castrate = 0;
- if( sd->fixedcastrate < 0 )
- sd->fixedcastrate = 0;
if(sd->delayrate < 0)
sd->delayrate = 0;
if(sd->hprecov_rate < 0)
@@ -2431,17 +2724,6 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
sd->magic_addrace[RC_DRAGON]+=skill;
sd->subrace[RC_DRAGON]+=skill;
}
- if( (skill = pc_checkskill(sd, AB_EUCHARISTICA)) > 0 )
- {
- sd->right_weapon.addrace[RC_DEMON]+=skill;
- sd->right_weapon.addele[ELE_DARK]+=skill;
- sd->left_weapon.addrace[RC_DEMON]+=skill;
- sd->left_weapon.addele[ELE_DARK]+=skill;
- sd->magic_addrace[RC_DEMON]+=skill;
- sd->magic_addele[ELE_DARK]+=skill;
- sd->subrace[RC_DEMON]+=skill;
- sd->subele[ELE_DARK]+=skill;
- }
if(sc->count){
if(sc->data[SC_CONCENTRATE])
@@ -2480,7 +2762,6 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
sd->subele[ELE_WIND] += sc->data[SC_ARMOR_RESIST]->val4;
}
}
-
status_cpy(&sd->battle_status, status);
// ----- CLIENT-SIDE REFRESH -----
@@ -2594,8 +2875,13 @@ int status_calc_homunculus_(struct homun_data *hd, bool first)
status->adelay = status->amotion; //It seems adelay = amotion for Homunculus.
status_calc_misc(&hd->bl, status, hom->level);
+#if RRMODE
+ /**
+ * In RE Mode matk_max is used as source of weaponMATK, but homuns don't have it -- so we swap the values here.
+ **/
+ status->matk_max = status->matk_min;
+#endif
status_cpy(&hd->battle_status, status);
-
return 1;
}
@@ -2612,9 +2898,17 @@ static signed short status_calc_hit(struct block_list *,struct status_change *,i
static signed short status_calc_critical(struct block_list *,struct status_change *,int);
static signed short status_calc_flee(struct block_list *,struct status_change *,int);
static signed short status_calc_flee2(struct block_list *,struct status_change *,int);
-static signed short status_calc_def(struct block_list *,struct status_change *,int);
+#if RRMODE
+ static short status_calc_def(struct block_list *bl, struct status_change *sc, int);
+#else
+ static signed char status_calc_def(struct block_list *,struct status_change *,int);
+#endif
static signed short status_calc_def2(struct block_list *,struct status_change *,int);
-static signed short status_calc_mdef(struct block_list *,struct status_change *,int);
+#if RRMODE
+ static short status_calc_mdef(struct block_list *bl, struct status_change *sc, int);
+#else
+ static signed char status_calc_mdef(struct block_list *,struct status_change *,int);
+#endif
static signed short status_calc_mdef2(struct block_list *,struct status_change *,int);
static unsigned short status_calc_speed(struct block_list *,struct status_change *,int);
static short status_calc_aspd_rate(struct block_list *,struct status_change *,int);
@@ -2792,8 +3086,6 @@ void status_calc_regen_rate(struct block_list *bl, struct regen_data *regen, str
} else
regen->flag&=~sce->val4; //Remove regen as specified by val4
}
- if( sc->data[SC_VITALITYACTIVATION] )
- regen->flag &=~RGN_SP;
}
/// Recalculates parts of an object's battle status according to the specified flags.
@@ -2857,7 +3149,7 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag)
if(flag&SCB_LUK) {
status->luk = status_calc_luk(bl, sc, b_status->luk);
- flag|=SCB_BATK|SCB_CRI|SCB_FLEE2|SCB_MATK;
+ flag|=SCB_BATK|SCB_CRI|SCB_FLEE2;
}
if(flag&SCB_BATK && b_status->batk) {
@@ -3048,38 +3340,27 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag)
}
if(flag&SCB_MATK) {
- int wlv = 1, wmatk = 0;
-
//New matk
+ #if RRMODE
+ status->matk_min = status_base_matk_min(status,status_get_lv(bl));
+ #else
status->matk_min = status_base_matk_min(status);
+ #endif
status->matk_max = status_base_matk_max(status);
- // iRO Wiki states as of 2011/02/24:
- // Status MATK = floor(Base Level/4 + INT + INT/2 + DEX/5 + LUK/3)
- status->status_matk = status_get_lv(bl)/4 + status->int_ + status->int_/2 + status->dex/5 + status->luk/3;
-
- if( sd )
- {
- short index = sd->equip_index[EQI_HAND_R];
- wmatk = sd->weapon_matk + sd->battle_status.rhw.atk2 + sd->equipment_matk;
- if( index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->type == IT_WEAPON )
- wlv = sd->inventory_data[index]->wlv;
- }
-
- // Variance = ± 0.1 * Weapon Level * Base Weapon MATK
- // Used in a lot of magical attack calculations still.
- status->matk_min = status->status_matk + wmatk;
- status->matk_max = status->status_matk + wmatk + (wmatk * wlv / 10);
-
if( bl->type&BL_PC && sd->matk_rate != 100 )
{
//Bonuses from previous matk
+ #if RRMODE == 0 //Only changed in non-re [RRInd]
status->matk_max = status->matk_max * sd->matk_rate/100;
+ #endif
status->matk_min = status->matk_min * sd->matk_rate/100;
}
status->matk_min = status_calc_matk(bl, sc, status->matk_min);
- status->matk_max = status_calc_matk(bl, sc, status->matk_max);
+ #if RRMODE == 0 //Only changed in non-re [RRInd]
+ status->matk_max = status_calc_matk(bl, sc, status->matk_max);
+ #endif
if(sc->data[SC_MAGICPOWER]) { //Store current matk values
sc->mp_matk_min = status->matk_min;
@@ -3160,14 +3441,15 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag)
status->dmotion = status_calc_dmotion(bl, sc, b_status->dmotion);
}
}
-
+#if RRMODE
+ status_renewal_postcalc(status,flag);
+#endif
if(flag&(SCB_VIT|SCB_MAXHP|SCB_INT|SCB_MAXSP) && bl->type&BL_REGEN)
status_calc_regen(bl, status, status_get_regen_data(bl));
if(flag&SCB_REGEN && bl->type&BL_REGEN)
status_calc_regen_rate(bl, status_get_regen_data(bl), sc);
}
-
/// Recalculates parts of an object's base status and battle status according to the specified flags.
/// Also sends updates to the client wherever applicable.
/// @param flag bitfield of values from enum scb_flag
@@ -3228,32 +3510,26 @@ void status_calc_bl_(struct block_list* bl, enum scb_flag flag, bool first)
clif_updatestatus(sd,SP_ASPD);
if(b_status.speed != status->speed)
clif_updatestatus(sd,SP_SPEED);
- if(b_status.rhw.atk != status->rhw.atk || b_status.lhw.atk != status->lhw.atk || b_status.batk != status->batk
- || b_status.rhw.atk2 != status->rhw.atk2 || b_status.lhw.atk2 != status->lhw.atk2 || b_status.equipment_atk != status->equipment_atk)
- {
+ if(b_status.rhw.atk != status->rhw.atk || b_status.lhw.atk != status->lhw.atk || b_status.batk != status->batk)
clif_updatestatus(sd,SP_ATK1);
- clif_updatestatus(sd,SP_ATK2);
- clif_updatestatus(sd,SP_MATK1);
- }
- if(b_status.def != status->def || b_status.def2 != status->def2)
- {
+ if(b_status.def != status->def)
clif_updatestatus(sd,SP_DEF1);
+ if(b_status.rhw.atk2 != status->rhw.atk2 || b_status.lhw.atk2 != status->lhw.atk2)
+ clif_updatestatus(sd,SP_ATK2);
+ if(b_status.def2 != status->def2)
clif_updatestatus(sd,SP_DEF2);
- }
if(b_status.flee2 != status->flee2)
clif_updatestatus(sd,SP_FLEE2);
if(b_status.cri != status->cri)
clif_updatestatus(sd,SP_CRITICAL);
if(b_status.matk_max != status->matk_max)
- {
clif_updatestatus(sd,SP_MATK1);
+ if(b_status.matk_min != status->matk_min)
clif_updatestatus(sd,SP_MATK2);
- }
- if(b_status.mdef != status->mdef || b_status.mdef2 != status->mdef2)
- {
+ if(b_status.mdef != status->mdef)
clif_updatestatus(sd,SP_MDEF1);
+ if(b_status.mdef2 != status->mdef2)
clif_updatestatus(sd,SP_MDEF2);
- }
if(b_status.rhw.range != status->rhw.range)
clif_updatestatus(sd,SP_ATTACKRANGE);
if(b_status.max_hp != status->max_hp)
@@ -3343,6 +3619,9 @@ static unsigned short status_calc_str(struct block_list *bl, struct status_chang
str += ((sc->data[SC_MARIONETTE2]->val3)>>16)&0xFF;
if(sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_HIGH && str < 50)
str = 50;
+ /**
+ * RK Rune Skill
+ **/
if(sc->data[SC_GIANTGROWTH])
str += 30;
@@ -3384,6 +3663,9 @@ static unsigned short status_calc_agi(struct block_list *bl, struct status_chang
agi += ((sc->data[SC_MARIONETTE2]->val3)>>8)&0xFF;
if(sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_HIGH && agi < 50)
agi = 50;
+ /**
+ * Arch Bishop
+ **/
if(sc->data[SC_ADORAMUS])
agi -= sc->data[SC_ADORAMUS]->val2;
@@ -3417,8 +3699,6 @@ static unsigned short status_calc_vit(struct block_list *bl, struct status_chang
vit += sc->data[SC_MARIONETTE2]->val3&0xFF;
if(sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_HIGH && vit < 50)
vit = 50;
- if(sc->data[SC_LAUDAAGNUS])
- vit += sc->data[SC_LAUDAAGNUS]->val2;
return (unsigned short)cap_value(vit,0,USHRT_MAX);
}
@@ -3529,8 +3809,6 @@ static unsigned short status_calc_luk(struct block_list *bl, struct status_chang
luk += sc->data[SC_MARIONETTE2]->val4&0xFF;
if(sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_HIGH && luk < 50)
luk = 50;
- if(sc->data[SC_LAUDARAMUS])
- luk += sc->data[SC_LAUDARAMUS]->val2;
return (unsigned short)cap_value(luk,0,USHRT_MAX);
}
@@ -3567,6 +3845,13 @@ static unsigned short status_calc_batk(struct block_list *bl, struct status_chan
batk += sc->data[SC_GATLINGFEVER]->val3;
if(sc->data[SC_MADNESSCANCEL])
batk += 100;
+#if RE_EDP
+ /**
+ * in RE EDP increases your base atk by atk x Skill Level.
+ **/
+ if( sc->data[SC_EDP] )
+ batk = batk * sc->data[SC_EDP]->val1;
+#endif
return (unsigned short)cap_value(batk,0,USHRT_MAX);
}
@@ -3611,6 +3896,13 @@ static unsigned short status_calc_watk(struct block_list *bl, struct status_chan
watk -= watk * sc->data[SC_STRIPWEAPON]->val2/100;
if(sc->data[SC_MERC_ATKUP])
watk += sc->data[SC_MERC_ATKUP]->val2;
+#if RE_EDP
+ /**
+ * in RE EDP increases your weapon atk by watk x Skill Level - 1
+ **/
+ if( sc->data[SC_EDP] && sc->data[SC_EDP]->val1 > 1 )
+ watk = watk * (sc->data[SC_EDP]->val1 - 1);
+#endif
return (unsigned short)cap_value(watk,0,USHRT_MAX);
}
@@ -3649,6 +3941,8 @@ static signed short status_calc_critical(struct block_list *bl, struct status_ch
critical += sc->data[SC_TRUESIGHT]->val2;
if(sc->data[SC_CLOAKING])
critical += critical;
+ if(sc->data[SC_CAMOUFLAGE])
+ critical += 100;
return (short)cap_value(critical,10,SHRT_MAX);
}
@@ -3680,7 +3974,7 @@ static signed short status_calc_hit(struct block_list *bl, struct status_change
if(sc->data[SC_MERC_HITUP])
hit += sc->data[SC_MERC_HITUP]->val2;
if(sc->data[SC_FEAR])
- hit -= hit * 20/100;
+ hit -= hit * 20 / 100;
return (short)cap_value(hit,1,SHRT_MAX);
}
@@ -3726,12 +4020,31 @@ static signed short status_calc_flee(struct block_list *bl, struct status_change
flee -= sc->data[SC_GATLINGFEVER]->val4;
if(sc->data[SC_SPEED])
flee += 10 + sc->data[SC_SPEED]->val1 * 10;
- if(sc->data[SC_PARTYFLEE])
- flee += sc->data[SC_PARTYFLEE]->val1 * 10;
if(sc->data[SC_MERC_FLEEUP])
flee += sc->data[SC_MERC_FLEEUP]->val2;
if(sc->data[SC_FEAR])
- flee -= flee * 20/100;
+ flee -= flee * 20 / 100;
+ if(sc->data[SC_PARALYSE])
+ flee -= flee / 10; // 10% Flee reduction
+ if(sc->data[SC_INFRAREDSCAN])
+ flee -= flee * 30 / 100;
+ if( sc->data[SC__LAZINESS] )
+ flee -= flee * sc->data[SC__LAZINESS]->val3 / 100;
+ if( sc->data[SC_GLOOMYDAY] )
+ flee -= flee * sc->data[SC_GLOOMYDAY]->val2 / 100;
+ if( sc->data[SC_HALLUCINATIONWALK] )
+ flee += sc->data[SC_HALLUCINATIONWALK]->val2;
+ if( sc->data[SC_SATURDAYNIGHTFEVER] )
+ flee -= flee * (40 + 10 * sc->data[SC_SATURDAYNIGHTFEVER]->val1) / 100;
+ if( sc->data[SC_WATER_BARRIER] )
+ flee -= sc->data[SC_WATER_BARRIER]->val3;
+ if( sc->data[SC_WIND_STEP_OPTION] )
+ flee += flee * sc->data[SC_WIND_STEP_OPTION]->val2 / 100;
+ if( sc->data[SC_ZEPHYR] )
+ flee += flee * sc->data[SC_ZEPHYR]->val2 / 100;
+ if( sc->data[SC_MARSHOFABYSS] )
+ flee -= (9 * sc->data[SC_MARSHOFABYSS]->val3 / 10 + sc->data[SC_MARSHOFABYSS]->val2 / 10) * (bl->type == BL_MOB ? 2 : 1);
+
return (short)cap_value(flee,1,SHRT_MAX);
}
@@ -3748,12 +4061,18 @@ static signed short status_calc_flee2(struct block_list *bl, struct status_chang
return (short)cap_value(flee2,10,SHRT_MAX);
}
-
-static signed short status_calc_def(struct block_list *bl, struct status_change *sc, int def)
+#if RRMODE
+ static short status_calc_def(struct block_list *bl, struct status_change *sc, int def)
+#else
+ static signed char status_calc_def(struct block_list *bl, struct status_change *sc, int def)
+#endif
{
if(!sc || !sc->count)
- return (signed short)cap_value(def,SHRT_MIN,SHRT_MAX);
-
+#if RRMODE
+ return (short)cap_value(def,SHRT_MIN,SHRT_MAX);
+#else
+ return (signed char)cap_value(def,CHAR_MIN,CHAR_MAX);
+#endif
if(sc->data[SC_BERSERK])
return 0;
if(sc->data[SC_SKA])
@@ -3788,8 +4107,31 @@ static signed short status_calc_def(struct block_list *bl, struct status_change
def -= def * sc->data[SC_STRIPSHIELD]->val2/100;
if (sc->data[SC_FLING])
def -= def * (sc->data[SC_FLING]->val2)/100;
-
- return (signed short)cap_value(def,SHRT_MIN,SHRT_MAX);
+ if( sc->data[SC_FREEZING] )
+ def -= def * 3 / 10;
+ if( sc->data[SC_MARSHOFABYSS] )
+ def -= def * ( 6 + 6 * sc->data[SC_MARSHOFABYSS]->val3/10 + (bl->type == BL_MOB ? 5 : 3) * sc->data[SC_MARSHOFABYSS]->val2/36 ) / 100;
+ if( sc->data[SC_ANALYZE] )
+ def -= def * ( 14 * sc->data[SC_ANALYZE]->val1 ) / 100;
+ if( sc->data[SC__BLOODYLUST] )
+ def -= def * 55 / 100;
+ if( sc->data[SC_FORCEOFVANGUARD] )
+ def += def * 2 * sc->data[SC_FORCEOFVANGUARD]->val1 / 100;
+ if(sc->data[SC_SATURDAYNIGHTFEVER])
+ def -= def * (10 + 10 * sc->data[SC_SATURDAYNIGHTFEVER]->val1) / 100;
+ if(sc->data[SC_EARTHDRIVE])
+ def -= def * 25 / 100;
+ if( sc->data[SC_GT_CHANGE] )
+ def -= def * sc->data[SC_GT_CHANGE]->val3 / 100;
+ if( sc->data[SC_ROCK_CRUSHER] )
+ def -= def * sc->data[SC_ROCK_CRUSHER]->val2 / 100;
+ if( sc->data[SC_POWER_OF_GAIA] )
+ def += def * sc->data[SC_POWER_OF_GAIA]->val2 / 100;
+#if RRMODE
+ return (short)cap_value(def,SHRT_MIN,SHRT_MAX);
+#else
+ return (signed char)cap_value(def,CHAR_MIN,CHAR_MAX);
+#endif
}
static signed short status_calc_def2(struct block_list *bl, struct status_change *sc, int def2)
@@ -3820,16 +4162,36 @@ static signed short status_calc_def2(struct block_list *bl, struct status_change
+ def2 * ( sc->data[SC_JOINTBEAT]->val2&BREAK_WAIST ? 25 : 0 ) / 100;
if(sc->data[SC_FLING])
def2 -= def2 * (sc->data[SC_FLING]->val3)/100;
- if (sc->data[SC_STONEHARDSKIN])
- def2 += sc->data[SC_STONEHARDSKIN]->val3;
+ if( sc->data[SC_FREEZING] )
+ def2 -= def2 * 3 / 10;
+ if(sc->data[SC_ANALYZE])
+ def2 -= def2 * ( 14 * sc->data[SC_ANALYZE]->val1 ) / 100;
+ if( sc->data[SC_ECHOSONG] )
+ def2 += def2 * sc->data[SC_ECHOSONG]->val2/100;
+ if( sc->data[SC_PRESTIGE] )
+ def2 += def2 * sc->data[SC_PRESTIGE]->val1 / 100;
+ if( sc->data[SC_SHIELDSPELL_REF] && sc->data[SC_SHIELDSPELL_REF]->val1 == 1 )
+ def2 += sc->data[SC_SHIELDSPELL_REF]->val2;
+ if( sc->data[SC_BANDING] && sc->data[SC_BANDING]->val2 > 0 )
+ def2 += (5 + sc->data[SC_BANDING]->val1) * (sc->data[SC_BANDING]->val2);
+ if( sc->data[SC_GT_REVITALIZE] )
+ def2 += def2 * ( 50 + 10 * sc->data[SC_GT_REVITALIZE]->val1 ) / 100;
return (short)cap_value(def2,1,SHRT_MAX);
}
-static signed short status_calc_mdef(struct block_list *bl, struct status_change *sc, int mdef)
+#if RRMODE
+ static short status_calc_mdef(struct block_list *bl, struct status_change *sc, int mdef)
+#else
+ static signed char status_calc_mdef(struct block_list *bl, struct status_change *sc, int mdef)
+#endif
{
if(!sc || !sc->count)
- return (signed short)cap_value(mdef,SHRT_MIN,SHRT_MAX);
+#if RRMODE
+ return (short)cap_value(mdef,SHRT_MIN,SHRT_MAX);
+#else
+ return (signed char)cap_value(mdef,CHAR_MIN,CHAR_MAX);
+#endif
if(sc->data[SC_BERSERK])
return 0;
@@ -3849,8 +4211,22 @@ static signed short status_calc_mdef(struct block_list *bl, struct status_change
mdef += sc->data[SC_ENDURE]->val1;
if(sc->data[SC_CONCENTRATION])
mdef += 1; //Skill info says it adds a fixed 1 Mdef point.
-
- return (signed short)cap_value(mdef,SHRT_MIN,SHRT_MAX);
+ if( sc->data[SC_MARSHOFABYSS] )
+ mdef -= mdef * ( 6 + 6 * sc->data[SC_MARSHOFABYSS]->val3/10 + (bl->type == BL_MOB ? 5 : 3) * sc->data[SC_MARSHOFABYSS]->val2/36 ) / 100;
+ if(sc->data[SC_ANALYZE])
+ mdef -= mdef * ( 14 * sc->data[SC_ANALYZE]->val1 ) / 100;
+ if(sc->data[SC_SYMPHONYOFLOVER])
+ mdef += mdef * sc->data[SC_SYMPHONYOFLOVER]->val2 / 100;
+ if(sc->data[SC_GT_CHANGE])
+ mdef -= mdef * sc->data[SC_GT_CHANGE]->val3 / 100;
+ if(sc->data[SC_WATER_BARRIER])
+ mdef += sc->data[SC_WATER_BARRIER]->val2;
+
+#if RRMODE
+ return (short)cap_value(mdef,SHRT_MIN,SHRT_MAX);
+#else
+ return (signed char)cap_value(mdef,CHAR_MIN,CHAR_MAX);
+#endif
}
static signed short status_calc_mdef2(struct block_list *bl, struct status_change *sc, int mdef2)
@@ -3862,8 +4238,8 @@ static signed short status_calc_mdef2(struct block_list *bl, struct status_chang
return 0;
if(sc->data[SC_MINDBREAKER])
mdef2 -= mdef2 * sc->data[SC_MINDBREAKER]->val3/100;
- if (sc->data[SC_STONEHARDSKIN])
- mdef2 += sc->data[SC_STONEHARDSKIN]->val3;
+ if(sc->data[SC_ANALYZE])
+ mdef2 -= mdef2 * ( 14 * sc->data[SC_ANALYZE]->val1 ) / 100;
return (short)cap_value(mdef2,1,SHRT_MAX);
}
@@ -3890,11 +4266,17 @@ static unsigned short status_calc_speed(struct block_list *bl, struct status_cha
if( sc->data[SC_FUSION] )
val = 25;
- else
- if( sd && pc_isriding(sd) )
- val = 25;
- if( sd && pc_isdragon(sd) )
- val = 25;
+ else if( sd ) {
+ if( pc_isriding(sd) || sd->sc.option&(OPTION_DRAGON|OPTION_MOUNTING) )
+ val = 25;//Same bonus
+ else if( sd->sc.option&OPTION_WUGRIDER )
+ val = 15 + 5 * pc_checkskill(sd, RA_WUGRIDER);
+ else if( sd->sc.option&OPTION_MADOGEAR ) {
+ val = (- 10 * (5 - pc_checkskill(sd,NC_MADOLICENCE)));
+ if( sc->data[SC_ACCELERATION] )
+ val += 25;
+ }
+ }
speed_rate -= val;
}
@@ -3919,7 +4301,7 @@ static unsigned short status_calc_speed(struct block_list *bl, struct status_cha
if( sc->data[SC_DECREASEAGI] )
val = max( val, 25 );
- if( sc->data[SC_QUAGMIRE] )
+ if( sc->data[SC_QUAGMIRE] || sc->data[SC_HALLUCINATIONWALK_POSTDELAY])
val = max( val, 50 );
if( sc->data[SC_DONTFORGETME] )
val = max( val, sc->data[SC_DONTFORGETME]->val3 );
@@ -3943,8 +4325,24 @@ static unsigned short status_calc_speed(struct block_list *bl, struct status_cha
val = max( val, sc->data[SC_SUITON]->val3 );
if( sc->data[SC_SWOO] )
val = max( val, 300 );
- if( sc->data[SC_ADORAMUS] )
- val = max( val, 25 );
+ if( sc->data[SC_FREEZING] )
+ val = max( val, 70 );
+ if( sc->data[SC_MARSHOFABYSS] )
+ val = max( val, 40 + 10 * sc->data[SC_MARSHOFABYSS]->val1 );
+ if( sc->data[SC_CAMOUFLAGE] && (sc->data[SC_CAMOUFLAGE]->val3&1) == 0 )
+ val = max( val, sc->data[SC_CAMOUFLAGE]->val1 < 3 ? 300 : 25 * (6 - sc->data[SC_CAMOUFLAGE]->val1) );
+ if( sc->data[SC__GROOMY] )
+ val = max( val, sc->data[SC__GROOMY]->val2);
+ if( sc->data[SC_STEALTHFIELD_MASTER] )
+ val = max( val, 30 );
+ if( sc->data[SC_BANDING_DEFENCE] )
+ val = max( val, sc->data[SC_BANDING_DEFENCE]->val1 );//+90% walking speed.
+ if( sc->data[SC_ROCK_CRUSHER_ATK] )
+ val = max( val, sc->data[SC_ROCK_CRUSHER_ATK]->val2 );
+ if( sc->data[SC_POWER_OF_GAIA] )
+ val = max( val, sc->data[SC_POWER_OF_GAIA]->val2 );
+ if( sc->data[SC_MELON_BOMB] )
+ val = max( val, sc->data[SC_MELON_BOMB]->val1 );
if( sd && sd->speed_rate + sd->speed_add_rate > 0 ) // permanent item-based speedup
val = max( val, sd->speed_rate + sd->speed_add_rate );
@@ -4012,7 +4410,12 @@ static unsigned short status_calc_speed(struct block_list *bl, struct status_cha
/// Note that the scale of aspd_rate is 1000 = 100%.
static short status_calc_aspd_rate(struct block_list *bl, struct status_change *sc, int aspd_rate)
{
+#if RRMODE == 0
+ /**
+ * this variable is not used unless in non-RE
+ **/
int i;
+#endif
if(!sc || !sc->count)
return cap_value(aspd_rate,0,SHRT_MAX);
@@ -4081,12 +4484,16 @@ static short status_calc_aspd_rate(struct block_list *bl, struct status_change *
else if(sc->data[SC_MADNESSCANCEL])
aspd_rate -= 200;
}
-
+#if RRMODE == 0
+ /**
+ * in RE they give a fixed boost -- we do so along SERVICE4U in status_base_amotion_pc
+ **/
if(sc->data[i=SC_ASPDPOTION3] ||
sc->data[i=SC_ASPDPOTION2] ||
sc->data[i=SC_ASPDPOTION1] ||
sc->data[i=SC_ASPDPOTION0])
aspd_rate -= sc->data[i]->val2;
+#endif
if(sc->data[SC_DONTFORGETME])
aspd_rate += 10 * sc->data[SC_DONTFORGETME]->val2;
if(sc->data[SC_LONGING])
@@ -4107,9 +4514,41 @@ static short status_calc_aspd_rate(struct block_list *bl, struct status_change *
if( sc->data[SC_JOINTBEAT]->val2&BREAK_KNEE )
aspd_rate += 100;
}
- if(sc->data[SC_FIGHTINGSPIRIT])
- aspd_rate -= sc->data[SC_FIGHTINGSPIRIT]->val3;
-
+ if( sc->data[SC_FREEZING] )
+ aspd_rate += 300;
+ if( sc->data[SC_HALLUCINATIONWALK_POSTDELAY] )
+ aspd_rate += 500;
+ if( sc->data[SC_FIGHTINGSPIRIT] && sc->data[SC_FIGHTINGSPIRIT]->val2 )
+ aspd_rate -= sc->data[SC_FIGHTINGSPIRIT]->val2;
+ if( sc->data[SC_PARALYSE] )
+ aspd_rate += 100;
+ if( sc->data[SC__BODYPAINT] )
+ aspd_rate += aspd_rate * (20 + 5 * sc->data[SC__BODYPAINT]->val1) / 100;
+ if( sc->data[SC__INVISIBILITY] )
+ aspd_rate += aspd_rate * sc->data[SC__INVISIBILITY]->val2 / 100;
+ if( sc->data[SC__GROOMY] )
+ aspd_rate += aspd_rate * sc->data[SC__GROOMY]->val2 / 100;
+ if( sc->data[SC_SWINGDANCE] )
+ aspd_rate -= aspd_rate * sc->data[SC_SWINGDANCE]->val2 / 100;
+ if( sc->data[SC_DANCEWITHWUG] )
+ aspd_rate -= aspd_rate * sc->data[SC_DANCEWITHWUG]->val3 / 100;
+ if( sc->data[SC_GLOOMYDAY] )
+ aspd_rate += aspd_rate * sc->data[SC_GLOOMYDAY]->val3 / 100;
+ if( sc->data[SC_EARTHDRIVE] )
+ aspd_rate += aspd_rate * 25 / 100;
+ /*As far I tested the skill there is no ASPD addition is applied. [Jobbie] */
+ //if( sc->data[SC_RAISINGDRAGON] )
+ // aspd_rate -= 100; //FIXME: Need official ASPD bonus of this status. [Jobbie]
+ if( sc->data[SC_GT_CHANGE] )
+ aspd_rate -= aspd_rate * (sc->data[SC_GT_CHANGE]->val2/200) / 100;
+ if( sc->data[SC_GT_REVITALIZE] )
+ aspd_rate -= aspd_rate * sc->data[SC_GT_REVITALIZE]->val2 / 100;
+ if( sc->data[SC_MELON_BOMB] )
+ aspd_rate += aspd_rate * sc->data[SC_MELON_BOMB]->val1 / 100;
+ if( sc->data[SC_BOOST500] )
+ aspd_rate -= aspd_rate * sc->data[SC_BOOST500]->val1/100;
+ if(sc->data[SC_EXTRACT_SALAMINE_JUICE])
+ aspd_rate -= aspd_rate * sc->data[SC_EXTRACT_SALAMINE_JUICE]->val1/100;
return (short)cap_value(aspd_rate,0,SHRT_MAX);
}
@@ -4123,7 +4562,7 @@ static unsigned short status_calc_dmotion(struct block_list *bl, struct status_c
return 0;
if( sc->data[SC_CONCENTRATION] )
return 0;
- if( sc->data[SC_RUN] )
+ if( sc->data[SC_RUN] || sc->data[SC_WUGDASH] )
return 0;
return (unsigned short)cap_value(dmotion,0,USHRT_MAX);
@@ -4149,7 +4588,10 @@ static unsigned int status_calc_maxhp(struct block_list *bl, struct status_chang
maxhp += maxhp * sc->data[SC_MERC_HPUP]->val2/100;
if(sc->data[SC_EPICLESIS])
- maxhp += maxhp * sc->data[SC_EPICLESIS]->val2/100;
+ maxhp += maxhp * 5 * sc->data[SC_EPICLESIS]->val1 / 100;
+ if(sc->data[SC_VENOMBLEED])
+ maxhp -= maxhp * 15 / 100;
+
return cap_value(maxhp,1,UINT_MAX);
}
@@ -4184,6 +4626,9 @@ static unsigned char status_calc_element(struct block_list *bl, struct status_ch
return ELE_UNDEAD;
if(sc->data[SC_ELEMENTALCHANGE])
return sc->data[SC_ELEMENTALCHANGE]->val2;
+ if(sc->data[SC_SHAPESHIFT])
+ return sc->data[SC_SHAPESHIFT]->val2;
+
return (unsigned char)cap_value(element,0,UCHAR_MAX);
}
@@ -4202,6 +4647,8 @@ static unsigned char status_calc_element_lv(struct block_list *bl, struct status
return 1;
if(sc->data[SC_ELEMENTALCHANGE])
return sc->data[SC_ELEMENTALCHANGE]->val1;
+ if(sc->data[SC_SHAPESHIFT])
+ return 1;
return (unsigned char)cap_value(lv,1,4);
}
@@ -4336,7 +4783,7 @@ struct status_data *status_get_base_status(struct block_list *bl)
}
}
-signed short status_get_def(struct block_list *bl)
+signed char status_get_def(struct block_list *bl)
{
struct unit_data *ud;
struct status_data *status = status_get_status_data(bl);
@@ -4344,7 +4791,11 @@ signed short status_get_def(struct block_list *bl)
ud = unit_bl2ud(bl);
if (ud && ud->skilltimer != INVALID_TIMER)
def -= def * skill_get_castdef(ud->skillid)/100;
+#if RRMODE
return cap_value(def, SHRT_MIN, SHRT_MAX);
+#else
+ return cap_value(def, CHAR_MIN, CHAR_MAX);
+#endif
}
unsigned short status_get_speed(struct block_list *bl)
@@ -4569,22 +5020,6 @@ void status_set_viewdata(struct block_list *bl, int class_)
class_ = JOB_BABY_CRUSADER2;
break;
}
- /*
- else
- if (sd->sc.option&OPTION_DRAGON) // For completeness' sake. These aren't actually needed...except maybe in older clients.
- switch (class_)
- {
- case JOB_RUNE_KNIGHT:
- class_ = JOB_RUNE_KNIGHT2;
- break;
- case JOB_RUNE_KNIGHT_H:
- class_ = JOB_RUNE_KNIGHT_H2;
- break;
- case JOB_BABY_RUNE:
- class_ = JOB_BABY_RUNE2;
- break;
- }
- */
sd->vd.class_ = class_;
clif_get_weapon_view(sd, &sd->vd.weapon, &sd->vd.shield);
sd->vd.head_top = sd->status.head_top;
@@ -4689,7 +5124,7 @@ void status_change_init(struct block_list *bl)
//the flag values are the same as in status_change_start.
int status_get_sc_def(struct block_list *bl, enum sc_type type, int rate, int tick, int flag)
{
- int sc_def, tick_def = 0;
+ int sc_def = 0, tick_def = 0;
struct status_data* status;
struct status_change* sc;
struct map_session_data *sd;
@@ -4722,7 +5157,6 @@ int status_get_sc_def(struct block_list *bl, enum sc_type type, int rate, int ti
case SC_STONE:
case SC_QUAGMIRE:
case SC_SUITON:
- case SC_ADORAMUS:
return 0;
}
@@ -4741,7 +5175,7 @@ int status_get_sc_def(struct block_list *bl, enum sc_type type, int rate, int ti
sc_def = 3 +status->int_;
break;
case SC_DECREASEAGI:
- case SC_ADORAMUS:
+ case SC_ADORAMUS://Arch Bishop
if (sd) tick>>=1; //Half duration for players.
case SC_STONE:
case SC_FREEZE:
@@ -4771,6 +5205,40 @@ int status_get_sc_def(struct block_list *bl, enum sc_type type, int rate, int ti
if (sd) //Duration greatly reduced for players.
tick /= 15;
//No defense against it (buff).
+ /**
+ * 3rd stuff
+ **/
+ case SC_WHITEIMPRISON:
+ rate -= (status_get_lv(bl) / 5 + status->vit / 4 + status->agi / 10)*100; // Lineal Reduction of Rate
+ //tick_def = (int)floor(log10(status_get_lv(bl)) * 10.);
+ break;
+ case SC_BURNING:
+ // From iROwiki : http://forums.irowiki.org/showpost.php?p=577240&postcount=583
+ tick -= 50*status->luk + 60*status->int_ + 170*status->vit;
+ tick = max(tick,10000); // Minimum Duration 10s.
+ break;
+ case SC_FREEZING:
+ tick -= 1000 * ((status->vit + status->dex) / 20);
+ tick = max(tick,10000); // Minimum Duration 10s.
+ break;
+ case SC_OBLIVIONCURSE:
+ sc_def = status->int_*4/5; //FIXME: info said this is the formula of status chance. Check again pls. [Jobbie]
+ break;
+ case SC_ELECTRICSHOCKER:
+ case SC_BITE:
+ {
+ if( bl->type == BL_MOB )
+ tick -= 1000 * (status->agi/10);
+ if( sd && type != SC_ELECTRICSHOCKER )
+ tick >>= 1;
+ }
+ break;
+ case SC_CRYSTALIZE:
+ tick -= (1000*(status->vit/10))+(status_get_lv(bl)/50);
+ break;
+ case SC_VACUUM_EXTREME:
+ tick -= 50*status->str;
+ break;
default:
//Effect that cannot be reduced? Likely a buff.
if (!(rand()%10000 < rate))
@@ -4873,8 +5341,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
struct status_change_entry* sce;
struct status_data *status;
struct view_data *vd;
- int opt_flag, calc_flag, undead_flag;
- int duration = tick;
+ int opt_flag, calc_flag, undead_flag, val_flag = 0, tick_time = 0;
nullpo_ret(bl);
sc = status_get_sc(bl);
@@ -4889,35 +5356,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
if( !sc )
return 0; //Unable to receive status changes
- if( sc->data[SC_REFRESH] )
- {
- if( type >= SC_COMMON_MIN && type <= SC_COMMON_MAX && type != SC_STUN ) // Immune to all common status ailments except stun (iROWiki)
- return 0;
- switch( type )
- {
- case SC_FEAR:
- case SC_BURNING:
- // Not implemented yet. (kRO 3-x balance update)
- //case SC_POISONINGWEAPON:
- //case SC_TOXIN:
- //case SC_PARALYSE:
- //case SC_VENOMBLEED:
- //case SC_MAGICMUSHROOM:
- //case SC_DEATHHURT:
- //case SC_PYREXIA:
- //case SC_OBLIVIONCURSE:
- //case SC_LEECHESEND:
- //case SC_FROSTMISTY:
- //case SC_MARSHOFABYSS:
- //case SC_DEEP_SLEEP:
- //case SC_COLD:
- //case SC_FREEZE_SP:
- //case SC_MANDRAGORA:
- return 0;
- }
- }
-
- if( status_isdead(bl) )
+ if( status_isdead(bl) && type != SC_NOCHAT ) // SC_NOCHAT should work even on dead characters
return 0;
if( bl->type == BL_MOB && type != SC_SAFETYWALL && type != SC_PNEUMA )
@@ -4940,17 +5379,27 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
//Check for inmunities / sc fails
switch (type)
{
- case SC_FREEZE:
case SC_STONE:
+ if(sc->data[SC_POWER_OF_GAIA])
+ return 0;
+ case SC_FREEZE:
//Undead are immune to Freeze/Stone
if (undead_flag && !(flag&1))
return 0;
case SC_SLEEP:
case SC_STUN:
- case SC_BURNING:
+ case SC_FREEZING:
if (sc->opt1)
return 0; //Cannot override other opt1 status changes. [Skotlex]
+ if((type == SC_FREEZE || type == SC_FREEZING) && sc->data[SC_WARMER])
+ return 0; //Immune to Frozen and Freezing status if under Warmer status. [Jobbie]
+ break;
+
+ case SC_BURNING:
+ if(sc->opt1 || sc->data[SC_FREEZING])
+ return 0;
break;
+
case SC_SIGNUMCRUCIS:
//Only affects demons and undead element (but not players)
if((!undead_flag && status->race!=RC_DEMON) || bl->type == BL_PC)
@@ -4967,13 +5416,16 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
case SC_OVERTHRUST:
if (sc->data[SC_MAXOVERTHRUST])
return 0; //Overthrust can't take effect if under Max Overthrust. [Skotlex]
+ case SC_MAXOVERTHRUST:
+ if( sc->option&OPTION_MADOGEAR )
+ return 0;//Overthrust and Overthrust Max cannot be used on Mado Gear [Ind]
break;
case SC_ADRENALINE:
if(sd && !pc_check_weapontype(sd,skill_get_weapontype(BS_ADRENALINE)))
return 0;
if (sc->data[SC_QUAGMIRE] ||
sc->data[SC_DECREASEAGI] ||
- sc->data[SC_ADORAMUS]
+ sc->option&OPTION_MADOGEAR //Adrenaline doesn't affect Mado Gear [Ind]
)
return 0;
break;
@@ -4981,16 +5433,17 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
if(sd && !pc_check_weapontype(sd,skill_get_weapontype(BS_ADRENALINE2)))
return 0;
if (sc->data[SC_QUAGMIRE] ||
- sc->data[SC_DECREASEAGI] ||
- sc->data[SC_ADORAMUS]
+ sc->data[SC_DECREASEAGI]
)
return 0;
break;
+ case SC_MAGNIFICAT:
+ if( sc->option&OPTION_MADOGEAR ) //Mado is immune to magnificat
+ break;
case SC_ONEHAND:
case SC_MERC_QUICKEN:
case SC_TWOHANDQUICKEN:
- if(sc->data[SC_DECREASEAGI] ||
- sc->data[SC_ADORAMUS])
+ if(sc->data[SC_DECREASEAGI])
return 0;
case SC_CONCENTRATE:
case SC_INCREASEAGI:
@@ -5001,6 +5454,8 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
case SC_ASSNCROS:
if (sc->data[SC_QUAGMIRE])
return 0;
+ if(sc->option&OPTION_MADOGEAR)
+ return 0;//Mado is immune to increase agi, wind walk, cart boost, etc (others above) [Ind]
break;
case SC_CLOAKING:
//Avoid cloaking with no wall and low skill level. [Skotlex]
@@ -5152,6 +5607,10 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
if (sc->data[SC_LUKFOOD] && sc->data[SC_LUKFOOD]->val1 > val1)
return 0;
break;
+ case SC_CAMOUFLAGE:
+ if( sd && pc_checkskill(sd, RA_CAMOUFLAGE) < 3 && !skill_check_camouflage(bl,NULL) )
+ return 0;
+ break;
}
//Check for BOSS resistances
@@ -5160,8 +5619,6 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
return 0;
switch (type) {
case SC_BLESSING:
- if (!undead_flag && status->race!=RC_DEMON)
- break;
case SC_DECREASEAGI:
case SC_PROVOKE:
case SC_COMA:
@@ -5170,7 +5627,26 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
case SC_RICHMANKIM:
case SC_ROKISWEIL:
case SC_FOGWALL:
+ case SC_FREEZING:
+ case SC_BURNING: // Place here until we have info about its behavior on Boss-monsters. [pakpil]
+ case SC_MARSHOFABYSS:
case SC_ADORAMUS:
+
+ // Exploid prevention - kRO Fix
+ case SC_PYREXIA:
+ case SC_DEATHHURT:
+ case SC_TOXIN:
+ case SC_PARALYSE:
+ case SC_VENOMBLEED:
+ case SC_MAGICMUSHROOM:
+ case SC_OBLIVIONCURSE:
+ case SC_LEECHESEND:
+
+ // Ranger Effects
+ case SC_BITE:
+ case SC_ELECTRICSHOCKER:
+ case SC_MAGNETICFIELD:
+
return 0;
}
}
@@ -5189,7 +5665,6 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
break;
case SC_INCREASEAGI:
status_change_end(bl, SC_DECREASEAGI, INVALID_TIMER);
- status_change_end(bl, SC_ADORAMUS, INVALID_TIMER);
break;
case SC_QUAGMIRE:
status_change_end(bl, SC_CONCENTRATE, INVALID_TIMER);
@@ -5197,7 +5672,6 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
status_change_end(bl, SC_WINDWALK, INVALID_TIMER);
//Also blocks the ones below...
case SC_DECREASEAGI:
- case SC_ADORAMUS:
status_change_end(bl, SC_CARTBOOST, INVALID_TIMER);
//Also blocks the ones below...
case SC_DONTFORGETME:
@@ -5208,6 +5682,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
status_change_end(bl, SC_TWOHANDQUICKEN, INVALID_TIMER);
status_change_end(bl, SC_ONEHAND, INVALID_TIMER);
status_change_end(bl, SC_MERC_QUICKEN, INVALID_TIMER);
+ status_change_end(bl, SC_ACCELERATION, INVALID_TIMER);
break;
case SC_ONEHAND:
//Removes the Aspd potion effect, as reported by Vicious. [Skotlex]
@@ -5255,10 +5730,9 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
status_change_end(bl, SC_ASSUMPTIO, INVALID_TIMER);
break;
case SC_CARTBOOST:
- if(sc->data[SC_DECREASEAGI] || sc->data[SC_ADORAMUS])
+ if(sc->data[SC_DECREASEAGI])
{ //Cancel Decrease Agi, but take no further effect [Skotlex]
status_change_end(bl, SC_DECREASEAGI, INVALID_TIMER);
- status_change_end(bl, SC_ADORAMUS, INVALID_TIMER);
return 0;
}
break;
@@ -5312,10 +5786,6 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
case SC_FOOD_LUK_CASH:
status_change_end(bl, SC_LUKFOOD, INVALID_TIMER);
break;
- case SC_FIGHTINGSPIRIT:
- if (sc->data[SC_FIGHTINGSPIRIT])
- status_change_end(bl, SC_FIGHTINGSPIRIT, INVALID_TIMER);
- break;
}
//Check for overlapping fails
@@ -5355,8 +5825,6 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
case SC_MARIONETTE2:
case SC_NOCHAT:
case SC_CHANGE: //Otherwise your Hp/Sp would get refilled while still within effect of the last invocation.
- case SC_FEAR:
- case SC_BURNING:
return 0;
case SC_COMBO:
case SC_DANCING:
@@ -5413,10 +5881,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
{
case SC_DECREASEAGI:
case SC_INCREASEAGI:
- case SC_ADORAMUS:
val2 = 2 + val1; //Agi change
- if (val3) //Canto Candidus: Add joblv/10 additional AGI (8/31/2011)
- val2 += (val3/10);
break;
case SC_ENDURE:
val2 = 7; // Hit-count [Celest]
@@ -5456,6 +5921,8 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
case SC_EDP: // [Celest]
val2 = val1 + 2; //Chance to Poison enemies.
val3 = 50*(val1+1); //Damage increase (+50 +50*lv%)
+ if( sd )//[Ind] - iROwiki says each level increases its duration by 3 seconds
+ tick += pc_checkskill(sd,GC_RESEARCHNEWPOISON)*3000;
break;
case SC_POISONREACT:
val2=(val1+1)/2 + val1/10; // Number of counters [Skotlex]
@@ -5466,17 +5933,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
break;
case SC_KYRIE:
val2 = status->max_hp * (val1 * 2 + 10) / 100; //%Max HP to absorb
- // val4 holds current about of party memebers when casting AB_PRAEFATIO,
- // as Praefatio's barrier has more health and blocks more hits than Kyrie Elesion.
- if( val4 < 1 ) //== PR_KYRIE
- val3 = (val1 / 2 + 5);
- else
- { //== AB_PRAEFATIO
- val2 += val4 * 2; //Increase barrier strength per party member.
- val3 = 6 + val1;
- }
- if( sd )
- val1 = min(val1,pc_checkskill(sd,PR_KYRIE)); // use skill level to determine barrier health.
+ val3 = (val1 / 2 + 5); //Hits
break;
case SC_MAGICPOWER:
//val1: Skill lv
@@ -5601,10 +6058,10 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
//val3 : Brings the skilllv (merged into val1 here)
//val4 : Partner
if (val1 == CG_MOONLIT)
- clif_status_change(bl,SI_MOONLIT,1,tick);
+ clif_status_change(bl,SI_MOONLIT,1,tick,0, 0, 0);
val1|= (val3<<16);
val3 = tick/1000; //Tick duration
- tick = 1000;
+ tick_time = 1000; // [GodLesZ] tick time
break;
case SC_LONGING:
val2 = 500-100*val1; //Aspd penalty.
@@ -5612,9 +6069,14 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
case SC_EXPLOSIONSPIRITS:
val2 = 75 + 25*val1; //Cri bonus
break;
+#if RRMODE == 0
+ /**
+ * Only in non-RE it's var is changed
+ **/
case SC_ASPDPOTION0:
case SC_ASPDPOTION1:
case SC_ASPDPOTION2:
+#endif
case SC_ASPDPOTION3:
val2 = 50*(2+type-SC_ASPDPOTION0);
break;
@@ -5635,6 +6097,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
clif_changelook(bl,LOOK_CLOTHES_COLOR,vd->cloth_color);
break;
case SC_NOCHAT:
+ // [GodLesZ] FIXME: is this correct? a hardcoded interval of 60sec? what about configuration ?_?
tick = 60000;
val1 = battle_config.manner_system; //Mute filters.
if (sd)
@@ -5666,7 +6129,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
case SC_POISON: /* “Å */
val3 = tick/1000; //Damage iterations
if(val3 < 1) val3 = 1;
- tick = 1000;
+ tick_time = 1000; // [GodLesZ] tick time
//val4: HP damage
if (bl->type == BL_PC)
val4 = (type == SC_DPOISON) ? 3 + status->max_hp/50 : 3 + status->max_hp*3/200;
@@ -5680,7 +6143,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
case SC_BLEEDING:
val4 = tick/10000;
if (!val4) val4 = 1;
- tick = 10000;
+ tick_time = 10000; // [GodLesZ] tick time
break;
case SC_S_LIFEPOTION:
case SC_L_LIFEPOTION:
@@ -5691,7 +6154,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
if( val2 < 1 ) val2 = 1;
if( (val4 = tick/(val2 * 1000)) < 1 )
val4 = 1;
- tick = val2 * 1000; // val2 = Seconds between heals
+ tick_time = val2 * 1000; // [GodLesZ] tick time
break;
case SC_BOSSMAPINFO:
if( sd != NULL )
@@ -5705,12 +6168,12 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
val1 = boss_md->bl.id;
if( (val4 = tick/1000) < 1 )
val4 = 1;
- tick = 1000;
+ tick_time = 1000; // [GodLesZ] tick time
}
break;
case SC_HIDING:
val2 = tick/1000;
- tick = 1000;
+ tick_time = 1000; // [GodLesZ] tick time
val3 = 0; // unused, previously speed adjustment
val4 = val1+3; //Seconds before SP substraction happen.
break;
@@ -5740,7 +6203,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
case SC_SIGHTBLASTER:
val3 = skill_get_splash(val2, val1); //Val2 should bring the skill-id.
val2 = tick/250;
- tick = 10;
+ tick_time = 10; // [GodLesZ] tick time
break;
//Permanent effects.
@@ -5811,7 +6274,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
val2 = 12; //SP cost
val4 = 10000; //Decrease at 10secs intervals.
val3 = tick/val4;
- tick = val4;
+ tick_time = val4; // [GodLesZ] tick time
break;
case SC_PARRYING:
val2 = 20 + val1*3; //Block Chance
@@ -5834,13 +6297,13 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
if (!val4) val4 = skill_get_time2(status_sc2skill(type),val1);
if (!val4) val4 = 10000; //Val4 holds damage interval
val3 = tick/val4; //val3 holds skill duration
- tick = val4;
+ tick_time = val4; // [GodLesZ] tick time
break;
case SC_GOSPEL:
if(val4 == BCT_SELF) { // self effect
val2 = tick/10000;
- tick = 10000;
+ tick_time = 10000; // [GodLesZ] tick time
status_change_clear_buffs(bl,3); //Remove buffs/debuffs
}
break;
@@ -6000,11 +6463,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
break;
case SC_BLESSING:
if ((!undead_flag && status->race!=RC_DEMON) || bl->type == BL_PC)
- {
val2 = val1;
- if (val3) //Clementia: Add joblv/10 additional STR/INT/DEX (8/31/2011)
- val2 += (val3/10);
- }
else
val2 = 0; //0 -> Half stat.
break;
@@ -6110,7 +6569,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
case SC_SKA:
val2 = tick/1000;
val3 = rand()%100; //Def changes randomly every second...
- tick = 1000;
+ tick_time = 1000; // [GodLesZ] tick time
break;
case SC_JAILED:
//Val1 is duration in minutes. Use INT_MAX to specify 'unlimited' time.
@@ -6213,70 +6672,6 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
case SC_KAIZEL:
val2 = 10*val1; //% of life to be revived with
break;
- case SC_MILLENNIUMSHIELD:
- val2 = (rand()%100<20) ? 4 : ((rand()%100<30) ? 3 : ((rand()%100<50) ? 2 : 0)); // 20% for 4, 30% for 3, 50% for 2
- val3 = 1000; // Initial Sheild health. (Additional sheilds health are set in battle.c when shield is broken.)
- if( sd && val2 > 0)
- clif_millenniumshield(sd,val2);
- break;
- case SC_STONEHARDSKIN:
- val2 = (status->hp * 20 / 100);
- if( val2 > 0 )
- status_heal(bl, -val2, 0, 0); // Reduce health by 20%
- if ( sd )
- val3 = (sd->status.job_level * pc_checkskill(sd,RK_RUNEMASTERY)) / 4;
- break;
- case SC_VITALITYACTIVATION:
- val2 = 50; // Increase HP recovery effects by 50%
- val3 = 50; // Reduce SP recovery effects by 50%
- break;
- case SC_FIGHTINGSPIRIT: // attack is handled in battle.c
- //val2 holds the source of the skill (1 = caster, 0 = party member.)
- //official ASPD bonus appears to be (Rune Mastery Level / 10 x 4).
- val3 = 10 * (sd?pc_checkskill(sd,RK_RUNEMASTERY):1); //Kind of dirty means to implement 4aspd increase.
- break;
- case SC_ABUNDANCE:
- val3 = tick / 10000;
- if(val3 < 1)
- val3 = 1;
- tick = 10000;
- break;
- case SC_EPICLESIS:
- val2 = 5 * val1; // % HP gained * level of Epiclesis cast.
- break;
- case SC_ORATIO:
- val2 = 2 * val1; // % Damage increased by level of Oratio cast.
- break;
- case SC_LAUDAAGNUS:
- case SC_LAUDARAMUS:
- val2 = 4+val1; // Bonus status points gained
- break;
- case SC_RENOVATIO:
- val2 = tick / 5000; // Heal every 5 seconds.
- tick = 5000;
- break;
- case SC_EXPIATIO:
- val2 = 5*val1; // DEF reduced by 5*Skill Level percent.
- break;
- case SC_DUPLELIGHT:
- val2 = 10+2*val1; //Chance of MELEE proc
- val3 = 10+2*val1; //Chance of MAGIC proc
- break;
-
- case SC_AB_SECRAMENT:
- val2 = 10*val1; //Fixed cast time reduced by 10*Skill Level
- break;
- case SC_FEAR:
- if (tick < 2000)
- val3 = 2000;
- else
- val3 = tick - 2000;
- tick = 2000;
- break;
- case SC_BURNING:
- val4 = tick/2000;
- tick = 3000;
- break;
// case SC_ARMOR_ELEMENT:
// case SC_ARMOR_RESIST:
// Mod your resistance against elements:
@@ -6310,6 +6705,487 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
case SC_SPL_MATK:
val2 = 2; // Splendide group
break;
+ /**
+ * General
+ **/
+ case SC_FEAR:
+ val2 = 2;
+ val4 = tick / 1000;
+ tick_time = 1000; // [GodLesZ] tick time
+ break;
+ case SC_BURNING:
+ val4 = tick / 2000; // Total Ticks to Burn!!
+ tick_time = 2000; // [GodLesZ] tick time
+ break;
+ /**
+ * Rune Knight
+ **/
+ case SC_DEATHBOUND:
+ val2 = 500 + 100 * val1;
+ break;
+ case SC_FIGHTINGSPIRIT:
+ val_flag |= 1|2;
+ break;
+ case SC_ABUNDANCE:
+ val4 = tick / 10000;
+ tick_time = 10000; // [GodLesZ] tick time
+ break;
+ case SC_GIANTGROWTH:
+ val2 = 10; // Triple damage success rate.
+ break;
+ /**
+ * Arch Bishop
+ **/
+ case SC_RENOVATIO:
+ val4 = tick / 5000;
+ tick_time = 5000;
+ break;
+ case SC_SECRAMENT:
+ val2 = 10 * val1;
+ break;
+ case SC_VENOMIMPRESS:
+ val2 = 10 * val1;
+ val_flag |= 1|2;
+ break;
+ case SC_POISONINGWEAPON:
+ val_flag |= 1|2|4;
+ break;
+ case SC_WEAPONBLOCKING:
+ val2 = 10 + 2 * val1; // Chance
+ val4 = tick / 3000;
+ tick_time = 3000; // [GodLesZ] tick time
+ val_flag |= 1|2;
+ break;
+ case SC_TOXIN:
+ val4 = tick / 10000;
+ tick_time = 10000; // [GodLesZ] tick time
+ break;
+ case SC_MAGICMUSHROOM:
+ val4 = tick / 4000;
+ tick_time = 4000; // [GodLesZ] tick time
+ break;
+ case SC_PYREXIA:
+ val4 = tick / 3000;
+ tick_time = 4000; // [GodLesZ] tick time
+ break;
+ case SC_LEECHESEND:
+ val4 = tick / 1000;
+ tick_time = 1000; // [GodLesZ] tick time
+ break;
+ case SC_OBLIVIONCURSE:
+ val4 = tick / 3000;
+ tick_time = 3000; // [GodLesZ] tick time
+ break;
+ case SC_ROLLINGCUTTER:
+ val_flag |= 1;
+ break;
+ case SC_CLOAKINGEXCEED:
+ val2 = ( val1 + 1 ) / 2; // Hits
+ val3 = ( val1 - 1 ) * 10; // Walk speed
+ val_flag |= 1|2|4;
+ if (bl->type == BL_PC)
+ val4 |= battle_config.pc_cloak_check_type&7;
+ else
+ val4 |= battle_config.monster_cloak_check_type&7;
+ tick_time = 1000; // [GodLesZ] tick time
+ break;
+ case SC_HALLUCINATIONWALK:
+ val2 = 50 * val1; // Evasion rate of physical attacks. Flee
+ val3 = 10 * val1; // Evasion rate of magical attacks.
+ val_flag |= 1|2|4;
+ break;
+ case SC_WHITEIMPRISON:
+ status_change_end(bl, SC_BURNING, -1);
+ status_change_end(bl, SC_FREEZING, -1);
+ status_change_end(bl, SC_FREEZE, -1);
+ status_change_end(bl, SC_STONE, -1);
+ break;
+ case SC_FREEZING:
+ status_change_end(bl, SC_BURNING, -1);
+ break;
+ case SC_READING_SB:
+ // val2 = sp reduction per second
+ tick_time = 1000; // [GodLesZ] tick time
+ break;
+ case SC_SPHERE_1:
+ case SC_SPHERE_2:
+ case SC_SPHERE_3:
+ case SC_SPHERE_4:
+ case SC_SPHERE_5:
+ if( !sd )
+ return 0; // Should only work on players.
+ val4 = tick / 1000;
+ if( val4 < 1 )
+ val4 = 1;
+ tick_time = 1000; // [GodLesZ] tick time
+ val_flag |= 1;
+ break;
+ case SC_SHAPESHIFT:
+ switch( val1 )
+ {
+ case 1: val2 = ELE_FIRE; break;
+ case 2: val2 = ELE_EARTH; break;
+ case 3: val2 = ELE_WIND; break;
+ case 4: val2 = ELE_WATER; break;
+ }
+ break;
+ case SC_ELECTRICSHOCKER:
+ case SC_CRYSTALIZE:
+ val4 = tick / 1000;
+ if( val4 < 1 )
+ val4 = 1;
+ tick_time = 1000; // [GodLesZ] tick time
+ break;
+ case SC_CAMOUFLAGE:
+ //val3 |= battle_config.pc_camouflage_check_type&7;
+ tick_time = 1000; // [GodLesZ] tick time
+ break;
+ case SC_WUGDASH:
+ val4 = gettick(); //Store time at which you started running.
+ tick = -1;
+ break;
+ case SC__SHADOWFORM:
+ {
+ //struct map_session_data * s_sd = map_id2sd(val2);
+ //if( s_sd )
+ // s_sd->shadowform_id = bl->id;
+ val4 = tick / 1000;
+ val_flag |= 1|2|4;
+ tick_time = 1000; // [GodLesZ] tick time
+ }
+ break;
+ case SC__STRIPACCESSORY:
+ if (!sd)
+ val2 = 20;
+ break;
+ case SC__INVISIBILITY:
+ val2 = 50 - 10 * val1; // ASPD
+ val3 = 20 * val1; // CRITICAL
+ val4 = tick / 1000;
+ tick_time = 1000; // [GodLesZ] tick time
+ val_flag |= 1|2;
+ break;
+ case SC__ENERVATION:
+ val2 = 20 + 10 * val1; // ATK Reduction
+ val_flag |= 1|2;
+ if( sd ) pc_delspiritball(sd,sd->spiritball,0);
+ break;
+ case SC__GROOMY:
+ val2 = 20 + 10 * val1; //ASPD. Need to confirm if Movement Speed reduction is the same. [Jobbie]
+ val3 = 20 * val1; //HIT
+ val_flag |= 1|2|4;
+ if( sd )
+ { // Removes Animals
+ //if( pc_isriding(sd,OPTION_RIDING|OPTION_RIDING_DRAGON|OPTION_RIDING_WUG) ) pc_setriding(sd, 0);
+ //if( pc_iswarg(sd) ) pc_setoption(sd, sd->sc.option&~OPTION_WUG);
+ if( pc_isfalcon(sd) ) pc_setoption(sd, sd->sc.option&~OPTION_FALCON);
+ if( sd->status.pet_id > 0 ) pet_menu(sd, 3);
+ if( merc_is_hom_active(sd->hd) ) merc_hom_vaporize(sd,1);
+ if( sd->md ) merc_delete(sd->md,3);
+ }
+ break;
+ case SC__LAZINESS:
+ val2 = 10 + 10 * val1; // Cast reduction
+ val3 = 10 * val1; // Flee Reduction
+ val_flag |= 1|2|4;
+ break;
+ case SC__UNLUCKY:
+ val2 = 10 * val1; // Crit and Flee2 Reduction
+ val_flag |= 1|2|4;
+ break;
+ case SC__WEAKNESS:
+ val2 = 10 * val1;
+ val_flag |= 1|2;
+ skill_strip_equip(bl,EQP_WEAPON|EQP_SHIELD,100,val1,tick);
+ break;
+ case SC__BLOODYLUST:
+ val_flag |= 1|2;
+ break;
+ case SC_GN_CARTBOOST:
+ if( val1 < 3 )
+ val2 = 50;
+ else if( val1 < 5 )
+ val2 = 75;
+ else
+ val2 = 100;
+ break;
+ case SC_PROPERTYWALK:
+ val_flag |= 1|2;
+ val3 = 0;
+ break;
+ case SC_WARMER:
+ status_change_end(bl, SC_FREEZE, -1);
+ status_change_end(bl, SC_FREEZING, -1);
+ status_change_end(bl, SC_CRYSTALIZE, -1);
+ break;
+ case SC_STRIKING:
+ val4 = tick / 1000;
+ tick_time = 1000; // [GodLesZ] tick time
+ break;
+ case SC_BLOODSUCKER:
+ val4 = tick / 1000;
+ tick_time = 1000; // [GodLesZ] tick time
+ break;
+ case SC_SWINGDANCE:
+ val2 = 4 * val1; // Walk speed and aspd reduction.
+ break;
+ case SC_SYMPHONYOFLOVER:
+ case SC_RUSHWINDMILL:
+ case SC_ECHOSONG:
+ val2 = 6 * val1;
+ val2 += val3; //Adding 1% * Lesson Bonus
+ val2 += (int)(val4*2/10); //Adding 0.2% per JobLevel
+ break;
+ case SC_MOONLITSERENADE:
+ val2 = 10 * val1;
+ break;
+ case SC_HARMONIZE:
+ val2 = 3 + 2 * val1;
+ break;
+ case SC_VOICEOFSIREN:
+ val4 = tick / 2000;
+ tick_time = 2000; // [GodLesZ] tick time
+ break;
+ case SC_DEEPSLEEP:
+ val4 = tick / 2000;
+ tick_time = 2000; // [GodLesZ] tick time
+ break;
+ case SC_SIRCLEOFNATURE:
+ val2 = 1 + val1; //SP consume
+ val3 = 40 * val1; //HP recovery
+ val4 = tick / 1000;
+ tick_time = 1000; // [GodLesZ] tick time
+ break;
+ case SC_SONGOFMANA:
+ val3 = 10 + (2 * val2);
+ val4 = tick/3000;
+ tick_time = 3000; // [GodLesZ] tick time
+ break;
+ case SC_SATURDAYNIGHTFEVER:
+ if (!val4) val4 = skill_get_time2(status_sc2skill(type),val1);
+ if (!val4) val4 = 3000;
+ val3 = tick/val4;
+ tick_time = val4; // [GodLesZ] tick time
+ break;
+ case SC_GLOOMYDAY:
+ val2 = 3 + 2 * val1; // Flee reduction.
+ val3 = 3 * val1; // ASPD reduction.
+ break;
+ case SC_SITDOWN_FORCE:
+ case SC_BANANA_BOMB_SITDOWN:
+ if( sd && !pc_issit(sd) )
+ {
+ pc_setsit(sd);
+ skill_sit(sd,1);
+ clif_sitting(bl);
+ }
+ break;
+ case SC_DANCEWITHWUG:
+ val3 = (5 * val1) + (1 * val2); //Still need official value.
+ break;
+ case SC_LERADSDEW:
+ val3 = (5 * val1) + (1 * val2);
+ break;
+ case SC_MELODYOFSINK:
+ val3 = (5 * val1) + (1 * val2);
+ break;
+ case SC_BEYONDOFWARCRY:
+ val3 = (5 * val1) + (1 * val2);
+ break;
+ case SC_UNLIMITEDHUMMINGVOICE:
+ {
+ struct unit_data *ud = unit_bl2ud(bl);
+ if( ud == NULL ) return 0;
+ ud->state.skillcastcancel = 0;
+ val3 = 15 - (2 * val2);
+ }
+ break;
+ case SC_REFLECTDAMAGE:
+ val2 = 15 + 5 * val1;
+ val3 = (val1==5)?20:(val1+4)*2; // SP consumption
+ val4 = tick/10000;
+ tick_time = 10000; // [GodLesZ] tick time
+ break;
+ case SC_FORCEOFVANGUARD: // This is not the official way to handle it but I think we should use it. [pakpil]
+ val2 = 20 + 12 * (val1 - 1); // Chance
+ val3 = 5 + (2 * val1); // Max rage counters
+ tick_time = 6000; // [GodLesZ] tick time
+ val_flag |= 1|2|4;
+ break;
+ case SC_EXEEDBREAK:
+ val1 *= 150; // 150 * skill_lv
+ if( sd )
+ { // Chars.
+ struct item_data *id = sd->inventory_data[sd->equip_index[EQI_HAND_R]];
+ if( id ) val1 += (id->weight/10 * id->wlv * status_get_lv(bl) / 100); // (weapon_weight * weapon_level * base_lvl)/100
+ val1 += 15 * sd->status.job_level; // 15 * job_lvl
+ }
+ else // Mobs
+ val1 += (400 * status_get_lv(bl) / 100) + (15 * (status_get_lv(bl) / 2)); // About 1138% at mob_lvl 99. Is an aproximation to a standard weapon. [pakpil]
+ break;
+
+ case SC_PRESTIGE: // Bassed on suggested formula in iRO Wiki and some test, still need more test. [pakpil]
+ val2 = ((status->int_ + status->luk) / 6) + 5; // Chance to evade magic damage.
+ val1 *= 15; // Defence added
+ if( sd )
+ val1 += 10 * pc_checkskill(sd,CR_DEFENDER);
+ val_flag |= 1|2;
+ break;
+ case SC_BANDING:
+ tick_time = 5000; // [GodLesZ] tick time
+ val_flag |= 1;
+ break;
+ case SC_SHIELDSPELL_DEF:
+ case SC_SHIELDSPELL_MDEF:
+ case SC_SHIELDSPELL_REF:
+ val_flag |= 1|2;
+ break;
+ case SC_MAGNETICFIELD:
+ val3 = tick / 1000;
+ tick_time = 1000; // [GodLesZ] tick time
+ break;
+ case SC_INSPIRATION:
+ if( sd )
+ {
+ val2 = (40 * val1) + (3 * sd->status.job_level); // ATK bonus
+ val3 = (sd->status.job_level / 10) * 2 + 12; // All stat bonus
+ }
+ val4 = tick / 1000;
+ tick_time = 1000; // [GodLesZ] tick time
+ status_change_clear_buffs(bl,3); //Remove buffs/debuffs
+ break;
+ case SC_SPELLFIST:
+ case SC_CURSEDCIRCLE_ATKER:
+ val_flag |= 1|2|4;
+ break;
+ case SC_CRESCENTELBOW:
+ val2 = 94 + val1;
+ val_flag |= 1|2;
+ break;
+ case SC_LIGHTNINGWALK:
+ val1 = 88 + 2 * val1;
+ val_flag |= 1;
+ break;
+ case SC_RAISINGDRAGON:
+ val3 = tick / 5000;
+ tick_time = 5000; // [GodLesZ] tick time
+ break;
+ case SC_GT_CHANGE:
+ if( sd ) val2 = (13 * val1 / 2) * sd->status.agi; //Aspd - old formula.
+ val3 = 20 + 1 * val1; //Base Atk, Reduction to DEF & MDEF
+ break;
+ case SC_GT_REVITALIZE:
+ val2 = 5 * val1; //Custom value VIT, ASPD, SPEED bonus.
+ val3 = 60 + 40 * val1; //HP recovery
+ break;
+ case SC_PYROTECHNIC_OPTION:
+ val2 = 60; // Watk TODO: Renewal (Atk2)
+ val3 = 11; // % Increase damage.
+ val_flag |= 1|2|4;
+ break;
+ case SC_HEATER_OPTION:
+ val2 = 120; // Watk. TODO: Renewal (Atk2)
+ val3 = 33; // % Increase effects.
+ val4 = 3; // Change into fire element.
+ val_flag |= 1|2|4;
+ break;
+ case SC_TROPIC_OPTION:
+ val2 = 180; // Watk. TODO: Renewal (Atk2)
+ val3 = MG_FIREBOLT;
+ break;
+ case SC_AQUAPLAY_OPTION:
+ val2 = 40; // Matk. TODO: Renewal (Matk1)
+ val3 = 33; // % Increase effects.
+ val_flag |= 1|2|4;
+ break;
+ case SC_COOLER_OPTION:
+ val2 = 80; // % Freezing chance
+ val3 = 33; // % increased damage
+ val4 = 1; // Change into water elemet
+ val_flag |= 1|2|4;
+ break;
+ case SC_CHILLY_AIR_OPTION:
+ val2 = 120; // Matk. TODO: Renewal (Matk1)
+ val3 = MG_COLDBOLT;
+ val_flag |= 1|2;
+ break;
+ case SC_GUST_OPTION:
+ val2 = 33;
+ val_flag |= 1|2;
+ break;
+ case SC_WIND_STEP_OPTION:
+ val2 = 50; // % Increase speed and flee.
+ break;
+ case SC_BLAST_OPTION:
+ val2 = 33;
+ val3 = 4;
+ val_flag |= 1|2|4;
+ break;
+ case SC_WILD_STORM_OPTION:
+ val2 = MG_LIGHTNINGBOLT;
+ val_flag |= 1|2;
+ break;
+ case SC_PETROLOGY_OPTION:
+ val2 = 5;
+ val3 = 33;
+ val_flag |= 1|2|4;
+ break;
+ case SC_CURSED_SOIL_OPTION:
+ val2 = 10;
+ val3 = 33;
+ val4 = 2;
+ val_flag |= 1|2|4;
+ break;
+ case SC_UPHEAVAL_OPTION:
+ val2 = WZ_EARTHSPIKE;
+ val_flag |= 1|2;
+ break;
+ case SC_CIRCLE_OF_FIRE_OPTION:
+ val2 = 300;
+ val_flag |= 1|2;
+ break;
+ case SC_FIRE_CLOAK_OPTION:
+ case SC_WATER_DROP_OPTION:
+ case SC_WIND_CURTAIN_OPTION:
+ case SC_STONE_SHIELD_OPTION:
+ val2 = 20; // Elemental modifier. Not confirmed.
+ break;
+ case SC_CIRCLE_OF_FIRE:
+ case SC_FIRE_CLOAK:
+ case SC_WATER_DROP:
+ case SC_WATER_SCREEN:
+ case SC_WIND_CURTAIN:
+ case SC_WIND_STEP:
+ case SC_STONE_SHIELD:
+ case SC_SOLID_SKIN:
+ val2 = 10;
+ tick_time = 2000; // [GodLesZ] tick time
+ break;
+ case SC_WATER_BARRIER:
+ val2 = 40; // Increasement. Mdef1 ???
+ val3 = 20; // Reductions. Atk2, Flee1, Matk1 ????
+ val_flag |= 1|2|4;
+ break;
+ case SC_ZEPHYR:
+ val2 = 22; // Flee.
+ break;
+ case SC_TIDAL_WEAPON:
+ val2 = 20; // Increase Elemental's attack.
+ break;
+ case SC_ROCK_CRUSHER:
+ case SC_ROCK_CRUSHER_ATK:
+ case SC_POWER_OF_GAIA:
+ val2 = 33;
+ break;
+ case SC_MELON_BOMB:
+ case SC_BANANA_BOMB:
+ val1 = 15;
+ break;
+ case SC_STOMACHACHE:
+ val2 = 8; // SP consume.
+ val4 = tick / 10000;
+ tick_time = 10000; // [GodLesZ] tick time
+ break;
default:
if( calc_flag == SCB_NONE && StatusSkillChangeTable[type] == 0 && StatusIconChangeTable[type] == 0 )
@@ -6341,7 +7217,6 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
case SC_STUN:
case SC_SLEEP:
case SC_STONE:
- case SC_BURNING:
if (sd && pc_issit(sd)) //Avoid sprite sync problems.
pc_setstand(sd);
case SC_TRICKDEAD:
@@ -6356,13 +7231,15 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
case SC_CLOSECONFINE2:
case SC_ANKLE:
case SC_SPIDERWEB:
- case SC_FEAR:
+ case SC_ELECTRICSHOCKER:
unit_stop_walking(bl,1);
break;
case SC_HIDING:
case SC_CLOAKING:
+ case SC_CLOAKINGEXCEED:
case SC_CHASEWALK:
case SC_WEIGHT90:
+ case SC_CAMOUFLAGE:
unit_stop_attack(bl);
break;
case SC_SILENCE:
@@ -6376,11 +7253,12 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
switch(type)
{
//OPT1
- case SC_STONE: sc->opt1 = OPT1_STONEWAIT; break;
- case SC_FREEZE: sc->opt1 = OPT1_FREEZE; break;
- case SC_STUN: sc->opt1 = OPT1_STUN; break;
- case SC_SLEEP: sc->opt1 = OPT1_SLEEP; break;
- case SC_BURNING: sc->opt1 = OPT1_BURNING; break;
+ case SC_STONE: sc->opt1 = OPT1_STONEWAIT; break;
+ case SC_FREEZE: sc->opt1 = OPT1_FREEZE; break;
+ case SC_STUN: sc->opt1 = OPT1_STUN; break;
+ case SC_SLEEP: sc->opt1 = OPT1_SLEEP; break;
+ case SC_BURNING: sc->opt1 = OPT1_BURNING; break; // Burning need this to be showed correctly. [pakpil]
+ case SC_WHITEIMPRISON: sc->opt1 = OPT1_IMPRISON; break;
//OPT2
case SC_POISON: sc->opt2 |= OPT2_POISON; break;
case SC_CURSE: sc->opt2 |= OPT2_CURSE; break;
@@ -6390,7 +7268,6 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
case SC_ANGELUS: sc->opt2 |= OPT2_ANGELUS; break;
case SC_BLEEDING: sc->opt2 |= OPT2_BLEEDING; break;
case SC_DPOISON: sc->opt2 |= OPT2_DPOISON; break;
- case SC_FEAR: sc->opt2 |= OPT2_FEAR; break;
//OPT3
case SC_TWOHANDQUICKEN:
case SC_ONEHAND:
@@ -6486,6 +7363,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
opt_flag = 2;
break;
case SC_CLOAKING:
+ case SC_CLOAKINGEXCEED:
sc->option |= OPTION_CLOAK;
opt_flag = 2;
break;
@@ -6532,11 +7410,15 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
calc_flag&=~SCB_DYE;
}
- if( vd && ((pcdb_checkid(vd->class_) || bl->type == BL_MER ) //Only for players sprites, client crashes if they receive this for a mob o.O [Skotlex]
- || (bl->type == BL_MOB && type == SC_ORATIO)) ) // Required to show the proper status for monsters. Possible this may need an overhaul.
- clif_status_change(bl,StatusIconChangeTable[type],1,duration);
+ if( vd && (pcdb_checkid(vd->class_) || bl->type == BL_MER || bl->type == BL_MOB ) )
+ clif_status_change(bl,StatusIconChangeTable[type],1,tick,(val_flag&1)?val1:1,(val_flag&2)?val2:0,(val_flag&4)?val3:0);
else if( sd ) //Send packet to self otherwise (disguised player?)
clif_status_load(bl,StatusIconChangeTable[type],1);
+ /**
+ * used as temporary storage for scs with interval ticks, so that the actual duration is sent to the client first.
+ **/
+ if( tick_time )
+ tick = tick_time;
//Don't trust the previous sce assignment, in case the SC ended somewhere between there and here.
if((sce=sc->data[type]))
@@ -6590,6 +7472,16 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
case SC_MERC_SPUP:
status_percent_heal(bl, 0, 100); // Recover Full SP
break;
+ /**
+ * Ranger
+ **/
+ case SC_WUGDASH:
+ {
+ struct unit_data *ud = unit_bl2ud(bl);
+ if( ud )
+ ud->state.running = unit_wugdash(bl, sd);
+ }
+ break;
case SC_COMBO:
switch (sce->val1) {
case TK_STORMKICK:
@@ -6725,8 +7617,8 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
return 0;
if (tid == INVALID_TIMER) {
- if( (type == SC_ENDURE) && sce->val4 )
- //Do not end infinite endure or speed adjustment.
+ if (type == SC_ENDURE && sce->val4)
+ //Do not end infinite endure.
return 0;
if (sce->timer != INVALID_TIMER) //Could be a SC with infinite duration
delete_timer(sce->timer,status_change_timer);
@@ -6911,7 +7803,7 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
}
if((sce->val1&0xFFFF) == CG_MOONLIT)
- clif_status_change(bl,SI_MOONLIT,0,0);
+ clif_status_change(bl,SI_MOONLIT,0,0,0,0,0);
status_change_end(bl, SC_LONGING, INVALID_TIMER);
}
@@ -6919,7 +7811,7 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
case SC_NOCHAT:
if (sd && sd->status.manner < 0 && tid != INVALID_TIMER)
sd->status.manner = 0;
- if (sd)
+ if (sd && tid == INVALID_TIMER)
{
clif_changestatus(&sd->bl,SP_MANNER,sd->status.manner);
clif_updatestatus(sd,SP_MANNER);
@@ -7056,10 +7948,88 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
status_change_end(tbl, SC_STOP, INVALID_TIMER);
}
break;
+ /**
+ * 3rd Stuff
+ **/
case SC_MILLENNIUMSHIELD:
- if ( sd )
- clif_millenniumshield(sd,0);
+ clif_millenniumshield(sd,0);
+ break;
+ case SC_HALLUCINATIONWALK:
+ sc_start(bl,SC_HALLUCINATIONWALK_POSTDELAY,100,sce->val1,skill_get_time2(GC_HALLUCINATIONWALK,sce->val1));
+ break;
+ case SC_WHITEIMPRISON:
+ if( tid == -1 )
+ break; // Terminated by Damage
+ clif_damage(bl,bl,0,0,0,400*sce->val1,0,0,0);
+ status_zap(bl,400*sce->val1,0);
+ break;
+ case SC_WUGDASH:
+ {
+ struct unit_data *ud = unit_bl2ud(bl);
+ if (ud) {
+ ud->state.running = 0;
+ if (ud->walktimer != -1)
+ unit_stop_walking(bl,1);
+ }
+ }
break;
+ case SC_ADORAMUS:
+ status_change_end(bl, SC_BLIND, -1);
+ break;
+ /*
+ case SC__SHADOWFORM:
+ {
+ struct map_session_data *s_sd = map_id2sd(sce->val2);
+ if( !s_sd )
+ break;
+ s_sd->shadowform_id = 0;
+ }
+ break;
+ case SC_SITDOWN_FORCE:
+ if( sd && pc_issit(sd) )
+ {
+ pc_setstand(sd);
+ clif_standing(bl,true);
+ }
+ break;
+ case SC_NEUTRALBARRIER_MASTER:
+ case SC_STEALTHFIELD_MASTER:
+ if( sce->val2 )
+ {
+ struct skill_unit_group* group = skill_id2group(sce->val2);
+ sce->val2 = 0;
+ skill_delunitgroup(group);
+ }
+ break;
+ case SC_BANDING:
+ {
+ struct skill_unit_group *group;
+ if(sce->val4)
+ {
+ group = skill_id2group(sce->val4);
+ sce->val4 = 0;
+ skill_delunitgroup(group);
+ }
+ }
+ break;
+ case SC_CURSEDCIRCLE_ATKER:
+ if( sce->val3 )
+ map_foreachinrange(status_change_timer_sub, bl, skill_get_splash(SR_CURSEDCIRCLE, sce->val1),BL_CHAR, bl, sce, SC_CURSEDCIRCLE_TARGET, gettick());
+ break;
+ case SC_RAISINGDRAGON:
+ if( sd && sce->val2 && !pc_isdead(sd) )
+ {
+ int i;
+ i = min(sd->spiritball,5);
+ pc_delspiritball(sd, sd->spiritball, 0);
+ status_change_end(bl, SC_EXPLOSIONSPIRITS, -1);
+ while( i > 0 )
+ {
+ pc_addspiritball(sd, skill_get_time(MO_CALLSPIRITS, pc_checkskill(sd,MO_CALLSPIRITS)), 5);
+ --i;
+ }
+ }
+ break;*/
}
opt_flag = 1;
@@ -7068,7 +8038,6 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
case SC_FREEZE:
case SC_STUN:
case SC_SLEEP:
- case SC_BURNING:
sc->opt1 = 0;
break;
@@ -7084,15 +8053,13 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
case SC_SIGNUMCRUCIS:
sc->opt2 &= ~OPT2_SIGNUMCRUCIS;
break;
- case SC_FEAR:
- sc->opt2 &= ~OPT2_FEAR;
- break;
case SC_HIDING:
sc->option &= ~OPTION_HIDE;
opt_flag|= 2|4; //Check for warp trigger + AoE trigger
break;
case SC_CLOAKING:
+ case SC_CLOAKINGEXCEED:
sc->option &= ~OPTION_CLOAK;
opt_flag|= 2;
break;
@@ -7222,9 +8189,8 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
}
//On Aegis, when turning off a status change, first goes the sc packet, then the option packet.
- if( vd && ((pcdb_checkid(vd->class_) || bl->type == BL_MER )
- || (bl->type == BL_MOB && type == SC_ORATIO)) ) // Required to remove SI_ORATIO indicator from monsters.
- clif_status_change(bl,StatusIconChangeTable[type],0,0);
+ if( vd && (pcdb_checkid(vd->class_) || bl->type == BL_MER ) )
+ clif_status_change(bl,StatusIconChangeTable[type],0,0,0,0,0);
else if (sd)
clif_status_load(bl,StatusIconChangeTable[type],0);
@@ -7617,60 +8583,460 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr_t data)
}
break;
case SC_ABUNDANCE:
- if((--sce->val3) > 0)
+ if(--(sce->val4) > 0)
{
- int sp = 60;
- if(sd) {
- if( sd->status.sp < sd->status.max_sp )
+ if( !sc->data[SC_BERSERK] )
+ status_heal(bl,0,60,0);
+ sc_timer_next(10000+tick, status_change_timer, bl->id, data);
+ }
+ break;
+
+ case SC_PYREXIA:
+ if( --(sce->val4) >= 0 )
+ {
+ bool flag;
+ map_freeblock_lock();
+ clif_damage(bl,bl,tick,status_get_amotion(bl),0,100,0,0,0);
+ status_fix_damage(NULL,bl,100,0);
+ flag = !sc->data[type];
+ map_freeblock_unlock();
+ if( !flag )
+ {
+ if( sce->val4 == 10 )
+ sc_start(bl,SC_BLIND,100,sce->val1,30000); // Blind status for the final 30 seconds
+ sc_timer_next(3000+tick,status_change_timer,bl->id,data);
+ }
+ return 0;
+ }
+ break;
+
+ case SC_LEECHESEND:
+ if( --(sce->val4) >= 0 )
+ {
+ bool flag;
+ int damage = status->max_hp/100;
+ if( sd && (sd->status.class_ == JOB_GUILLOTINE_CROSS || sd->status.class_ == JOB_GUILLOTINE_CROSS_T ) )
+ damage += 3 * status->vit;
+ else
+ damage += 7 * status->vit;
+
+ unit_skillcastcancel(bl,2);
+
+ map_freeblock_lock();
+ status_zap(bl,damage,0);
+ flag = !sc->data[type];
+ map_freeblock_unlock();
+ if( !flag ) {
+ sc_timer_next(1000 + tick, status_change_timer, bl->id, data );
+ }
+ return 0;
+ }
+ break;
+
+ case SC_MAGICMUSHROOM:
+ if( --(sce->val4) >= 0 )
+ {
+ bool flag = 0;
+ int damage = status->max_hp * 3 / 100;
+ if( status->hp <= damage )
+ damage = status->hp - 1; // Cannot Kill
+
+ if( damage > 0 )
+ { // 3% Damage each 4 seconds
+ map_freeblock_lock();
+ status_zap(bl,damage,0);
+ flag = !sc->data[type]; // Killed? Should not
+ map_freeblock_unlock();
+ }
+
+ if( !flag )
+ { // Random Skill Cast
+ if( sd )
{
- if( sd->status.sp + sp > sd->status.max_sp ) //No overhealing SP.
- sp = sd->status.max_sp - sd->status.sp;
- clif_heal(sd->fd,SP_SP,sp);
- status_heal(bl, 0, sp, 0);
+ int mushroom_skillid = 0, i;
+ unit_stop_attack(bl);
+ unit_skillcastcancel(bl,1);
+ do
+ {
+ i = rand() % MAX_SKILL_MAGICMUSHROOM_DB;
+ mushroom_skillid = skill_magicmushroom_db[i].skillid;
+ }
+ while( mushroom_skillid == 0 );
+
+ switch( skill_get_casttype(mushroom_skillid) )
+ { // Magic Mushroom skills are buffs or area damage
+ case CAST_GROUND:
+ skill_castend_pos2(bl,bl->x,bl->y,mushroom_skillid,1,tick,0);
+ break;
+ case CAST_NODAMAGE:
+ skill_castend_nodamage_id(bl,bl,mushroom_skillid,1,tick,0);
+ break;
+ case CAST_DAMAGE:
+ skill_castend_damage_id(bl,bl,mushroom_skillid,1,tick,0);
+ break;
+ }
}
- }
- sc_timer_next(10000+tick, status_change_timer, bl->id, data);
+
+ clif_emotion(bl,18);
+ sc_timer_next(4000+tick,status_change_timer,bl->id,data);
+ }
+ return 0;
+ }
+ break;
+
+ case SC_TOXIN:
+ if( --(sce->val4) >= 0 )
+ { //Damage is every 10 seconds including 3%sp drain.
+ bool flag;
+ map_freeblock_lock();
+ clif_damage(bl,bl,tick,status_get_amotion(bl),1,1,0,0,0);
+ status_damage(NULL,bl,1,status->max_sp*3/100,0,16);
+ flag = !sc->data[type];
+ map_freeblock_unlock();
+ if( !flag ) {
+ sc_timer_next(10000 + tick, status_change_timer, bl->id, data );
+ }
+ return 0;
+ }
+ break;
+
+ case SC_OBLIVIONCURSE:
+ if( --(sce->val4) >= 0 )
+ {
+ clif_emotion(bl,1);
+ sc_timer_next(3000 + tick, status_change_timer, bl->id, data );
+ return 0;
+ }
+ break;
+
+ case SC_WEAPONBLOCKING:
+ if( --(sce->val4) >= 0 )
+ {
+ if( !status_charge(bl,0,3) )
+ break;
+ sc_timer_next(3000+tick,status_change_timer,bl->id,data);
+ return 0;
}
break;
+
+ case SC_CLOAKINGEXCEED:
+ if(!status_charge(bl,0,10-sce->val1))
+ break;
+ sc_timer_next(1000 + tick, status_change_timer, bl->id, data);
+ return 0;
+
case SC_RENOVATIO:
- if((--sce->val2) > 0) {
- int heal = status->max_hp * 3 / 100;
- if( status->hp + heal > status->max_hp )
- heal = status->max_hp - status->hp;
- if(heal > 0)
- {
- clif_heal(sd->fd,SP_HP,heal);
- status_heal(bl, heal, 0, 0);
+ if( --(sce->val4) >= 0 )
+ {
+ status_heal(bl, status->max_hp * 3 / 100, 0, 2);
+ sc_timer_next(5000 + tick, status_change_timer, bl->id, data);
+ return 0;
+ }
+ break;
+
+ case SC_BURNING:
+ if( --(sce->val4) >= 0 )
+ {
+ struct block_list *src = map_id2bl(sce->val3);
+ int flag, damage = 3 * status_get_max_hp(bl) / 100; // Non Elemental Damage
+ if( status )
+ damage += battle_attr_fix(NULL, bl, sce->val2, ELE_FIRE, status->def_ele, status->ele_lv);
+
+ map_freeblock_lock();
+ status_fix_damage(src,bl,damage,clif_damage(bl,bl,tick,0,0,damage,0,0,0));
+ flag = !sc->data[type];
+ map_freeblock_unlock();
+ if( !flag ) {// Target still lives. [LimitLine]
+ sc_timer_next(2000 + tick, status_change_timer, bl->id, data);
}
- sc_timer_next(5000+tick, status_change_timer, bl->id, data);
return 0;
}
break;
+
case SC_FEAR:
- if(sce->val3 > 0)
+ if( --(sce->val4) >= 0 )
{
- sc_timer_next(sce->val3+tick, status_change_timer, bl->id, data);
- sce->val3 = 0;
+ if( sce->val2 > 0 )
+ sce->val2--;
+ sc_timer_next(1000 + tick, status_change_timer, bl->id, data);
+ return 0;
}
break;
- case SC_BURNING:
- if(--(sce->val4) >= 0)
+
+ case SC_SPHERE_1:
+ case SC_SPHERE_2:
+ case SC_SPHERE_3:
+ case SC_SPHERE_4:
+ case SC_SPHERE_5:
+ if( --(sce->val4) >= 0 )
{
- int flag, hp = 0;
- struct block_list *src = map_id2bl(sce->val2);
+ if( !status_charge(bl, 0, 1) )
+ break;
+ sc_timer_next(1000 + tick, status_change_timer, bl->id, data);
+ return 0;
+ }
+ break;
+
+ case SC_READING_SB:
+ if( !status_charge(bl, 0, sce->val2) )
+ break;
+ sc_timer_next(1000 + tick, status_change_timer, bl->id, data);
+ return 0;
+
+ case SC_ELECTRICSHOCKER:
+ if( --(sce->val4) >= 0 )
+ {
+ status_charge(bl, 0, status->max_sp / 100 * sce->val1 );
+ sc_timer_next(1000 + tick, status_change_timer, bl->id, data);
+ return 0;
+ }
+ break;
+
+ case SC_CAMOUFLAGE:
+ if( !status_charge(bl,0,7 - sce->val1) )
+ break;
+ sc_timer_next(1000 + tick, status_change_timer, bl->id, data);
+ return 0;
+
+ case SC__REPRODUCE:
+ if(!status_charge(bl, 0, 1))
+ break;
+ sc_timer_next(1000+tick, status_change_timer, bl->id, data);
+ return 0;
+
+ case SC__SHADOWFORM:
+ if( --(sce->val4) >= 0 )
+ {
+ if( !status_charge(bl, 0, sce->val1 - (sce->val1 - 1)) )
+ break;
+ sc_timer_next(1000 + tick, status_change_timer, bl->id, data);
+ return 0;
+ }
+ break;
+
+ case SC__INVISIBILITY:
+ if( --(sce->val4) >= 0 )
+ {
+ if( !status_charge(bl, 0, (status->sp * 6 - sce->val1) / 100) )// 6% - skilllv.
+ break;
+ sc_timer_next(1000 + tick, status_change_timer, bl->id, data);
+ return 0;
+ }
+ break;
+
+ case SC_STRIKING:
+ if( --(sce->val4) >= 0 )
+ {
+ if( !status_charge(bl,0, sce->val1 ) )
+ break;
+ sc_timer_next(1000 + tick, status_change_timer, bl->id, data);
+ return 0;
+ }
+ break;
- hp = 1000+(status->max_hp*3 /100);
+ case SC_BLOODSUCKER:
+ if( --(sce->val4) >= 0 )
+ {
+ struct block_list *src = map_id2bl(sce->val2);
+ int damage;
+ bool flag;
+ if( !src || (src && (status_isdead(src) || src->m != bl->m || distance_bl(src, bl) >= 12)) )
+ break;
map_freeblock_lock();
- clif_damage(bl,bl,tick,status->amotion,0,hp,1,9,0);
- status_damage(src, bl, hp, 0, 0, 1);
+ damage = skill_attack(skill_get_type(GN_BLOOD_SUCKER), src, src, bl, GN_BLOOD_SUCKER, sce->val1, tick, 0);
+ flag = !sc->data[type];
+ map_freeblock_unlock();
+ status_heal(src, damage, 0, 0);
+ clif_skill_nodamage(src, bl, GN_BLOOD_SUCKER, 0, 1);
+ if (!flag) {
+ sc_timer_next(1000 + tick, status_change_timer, bl->id, data);
+ }
+ return 0;
+ }
+ break;
+
+ case SC_VOICEOFSIREN:
+ if( --(sce->val4) >= 0 )
+ {
+ clif_emotion(bl,3);
+ sc_timer_next(2000 + tick, status_change_timer, bl->id, data);
+ return 0;
+ }
+ break;
+
+ case SC_DEEPSLEEP:
+ if( --(sce->val4) >= 0 )
+ { // Recovers 1% HP/SP every 2 seconds.
+ status_heal(bl, status->max_hp / 100, status->max_sp / 100, 2);
+ sc_timer_next(2000 + tick, status_change_timer, bl->id, data);
+ return 0;
+ }
+ break;
+
+ case SC_SIRCLEOFNATURE:
+ if( --(sce->val4) >= 0 )
+ {
+ if( !status_charge(bl,0,sce->val2) )
+ break;
+ status_heal(bl, sce->val3, 0, 1);
+ sc_timer_next(1000 + tick, status_change_timer, bl->id, data);
+ return 0;
+ }
+ break;
+
+ case SC_SONGOFMANA:
+ if( --(sce->val4) >= 0 )
+ {
+ status_heal(bl,0,sce->val3,3);
+ sc_timer_next(3000 + tick, status_change_timer, bl->id, data);
+ return 0;
+ }
+ break;
+
+
+ case SC_SATURDAYNIGHTFEVER:
+ // 1% HP/SP drain every 3 seconds [Jobbie]
+ if( --(sce->val3) >= 0 )
+ {
+ int hp = status->hp / 100;
+ int sp = status->sp / 100;
+ if( !status_charge(bl, hp, sp) )
+ break;
+ sc_timer_next(sce->val4+tick, status_change_timer, bl->id, data);
+ return 0;
+ }
+ break;
+
+ case SC_CRYSTALIZE:
+ if( --(sce->val4) >= 0 )
+ { // Drains 2% of HP and 1% of SP every seconds.
+ status_charge(bl, status->max_hp * 2 / 100, status->max_sp / 100);
+ sc_timer_next(1000 + tick, status_change_timer, bl->id, data);
+ return 0;
+ }
+ break;
+
+ case SC_FORCEOFVANGUARD:
+ if( !status_charge(bl,0,20) )
+ break;
+ sc_timer_next(6000 + tick, status_change_timer, bl->id, data);
+ return 0;
+
+ case SC_BANDING:
+ if( status_charge(bl, 0, 7 - sce->val1) )
+ {
+ //if( sd ) pc_banding(sd, sce->val1);
+ sc_timer_next(5000 + tick, status_change_timer, bl->id, data);
+ return 0;
+ }
+ break;
+
+ case SC_REFLECTDAMAGE:
+ if( --(sce->val4) >= 0 ) {
+ if( !status_charge(bl,0,sce->val3) )
+ break;
+ sc_timer_next(10000 + tick, status_change_timer, bl->id, data);
+ return 0;
+ }
+ break;
+ case SC_OVERHEAT_LIMITPOINT:
+ if( --(sce->val1) > 0 ) { // Cooling
+ sc_timer_next(30000 + tick, status_change_timer, bl->id, data);
+ }
+ break;
+
+ case SC_OVERHEAT:
+ {
+ int flag, damage = status->max_hp / 100; // Suggestion 1% each second
+ if( damage >= status->hp ) damage = status->hp - 1; // Do not kill, just keep you with 1 hp minimum
+ map_freeblock_lock();
+ status_fix_damage(NULL,bl,damage,clif_damage(bl,bl,tick,0,0,damage,0,0,0));
flag = !sc->data[type];
map_freeblock_unlock();
- if(!flag)
- sc_timer_next( 3000 + tick, status_change_timer, bl->id, data);
+ if( !flag ) {
+ sc_timer_next(1000 + tick, status_change_timer, bl->id, data);
+ }
+ }
+ break;
+
+ case SC_MAGNETICFIELD:
+ {
+ if( --(sce->val3) <= 0 )
+ break; // Time out
+ if( sce->val2 == bl->id )
+ {
+ if( !status_charge(bl,0,14 + (3 * sce->val1)) )
+ break; // No more SP status should end, and in the next second will end for the other affected players
+ }
+ else
+ {
+ struct block_list *src = map_id2bl(sce->val2);
+ struct status_change *ssc;
+ if( !src || (ssc = status_get_sc(src)) == NULL || !ssc->data[SC_MAGNETICFIELD] )
+ break; // Source no more under Magnetic Field
+ }
+ sc_timer_next(1000 + tick, status_change_timer, bl->id, data);
+ }
+ break;
+
+ case SC_INSPIRATION:
+ if(--(sce->val4) >= 0)
+ {
+ int hp = status->max_hp * (7-sce->val1) / 100;
+ int sp = status->max_sp * (9-sce->val1) / 100;
+
+ if( !status_charge(bl,hp,sp) ) break;
+
+ sc_timer_next(1000+tick,status_change_timer,bl->id, data);
return 0;
}
break;
+
+ case SC_RAISINGDRAGON:
+ // 1% every 5 seconds [Jobbie]
+ if( --(sce->val3)>0 && status_charge(bl, sce->val2, 0) )
+ {
+ if( !sc->data[type] ) return 0;
+ sc_timer_next(5000 + tick, status_change_timer, bl->id, data);
+ return 0;
+ }
+ break;
+
+ case SC_CIRCLE_OF_FIRE:
+ case SC_FIRE_CLOAK:
+ case SC_WATER_DROP:
+ case SC_WATER_SCREEN:
+ case SC_WIND_CURTAIN:
+ case SC_WIND_STEP:
+ case SC_STONE_SHIELD:
+ case SC_SOLID_SKIN:
+ if( !status_charge(bl,0,sce->val2) )
+ {
+ struct block_list *s_bl = battle_get_master(bl);
+ if( s_bl )
+ status_change_end(s_bl,type+1,-1);
+ status_change_end(bl,type,-1);
+ break;
+ }
+ sc_timer_next(2000 + tick, status_change_timer, bl->id, data);
+ return 0;
+
+ case SC_STOMACHACHE:
+ if( --(sce->val4) > 0 )
+ {
+ status_charge(bl,0,sce->val2); // Reduce 8 every 10 seconds.
+ if( sd && !pc_issit(sd) ) // Force to sit every 10 seconds.
+ {
+ pc_stop_walking(sd,1|4);
+ pc_stop_attack(sd);
+ pc_setsit(sd);
+ clif_sitting(bl);
+ }
+ sc_timer_next(10000 + tick, status_change_timer, bl->id, data);
+ }
+ break;
+
}
// default for all non-handled control paths is to end the status
@@ -7701,11 +9067,15 @@ int status_change_timer_sub(struct block_list* bl, va_list ap)
case SC_CONCENTRATE:
status_change_end(bl, SC_HIDING, INVALID_TIMER);
status_change_end(bl, SC_CLOAKING, INVALID_TIMER);
+ status_change_end(bl, SC_CLOAKINGEXCEED, INVALID_TIMER);
+ status_change_end(bl, SC_CAMOUFLAGE, INVALID_TIMER);
break;
case SC_RUWACH: /* ƒ‹ƒAƒt */
- if (tsc && (tsc->data[SC_HIDING] || tsc->data[SC_CLOAKING])) {
+ if (tsc && (tsc->data[SC_HIDING] || tsc->data[SC_CLOAKING] || tsc->data[SC_CAMOUFLAGE] || tsc->data[SC_CLOAKINGEXCEED])) {
status_change_end(bl, SC_HIDING, INVALID_TIMER);
status_change_end(bl, SC_CLOAKING, INVALID_TIMER);
+ status_change_end(bl, SC_CAMOUFLAGE, INVALID_TIMER);
+ status_change_end(bl, SC_CLOAKINGEXCEED, INVALID_TIMER);
if(battle_check_target( src, bl, BCT_ENEMY ) > 0)
skill_attack(BF_MAGIC,src,src,bl,AL_RUWACH,1,tick,0);
}
@@ -7731,7 +9101,7 @@ int status_change_timer_sub(struct block_list* bl, va_list ap)
/*==========================================
* Clears buffs/debuffs of a character.
- * type&1 -> buffs, type&2 -> debuffs, type&4 -> sc_refresh
+ * type&1 -> buffs, type&2 -> debuffs
*------------------------------------------*/
int status_change_clear_buffs (struct block_list* bl, int type)
{
@@ -7790,13 +9160,6 @@ int status_change_clear_buffs (struct block_list* bl, int type)
case SC_EXPBOOST:
case SC_JEXPBOOST:
case SC_ITEMBOOST:
- case SC_GIANTGROWTH:
- case SC_REFRESH:
- case SC_STONEHARDSKIN:
- case SC_VITALITYACTIVATION:
- case SC_FIGHTINGSPIRIT:
- case SC_ABUNDANCE:
- case SC_MILLENNIUMSHIELD:
continue;
//Debuffs that can be removed.
@@ -7813,33 +9176,8 @@ int status_change_clear_buffs (struct block_list* bl, int type)
case SC_STRIPSHIELD:
case SC_STRIPARMOR:
case SC_STRIPHELM:
- //Cannot be removed by Refresh.
- if (type&4)
- continue;
- case SC_ADORAMUS:
if (!(type&2))
continue;
-
- //Debuffs that can be removed by Refresh..
- case SC_FEAR:
- case SC_BURNING:
- //case SC_POISONINGWEAPON:
- //case SC_TOXIN:
- //case SC_PARALYSE:
- //case SC_VENOMBLEED:
- //case SC_MAGICMUSHROOM:
- //case SC_DEATHHURT:
- //case SC_PYREXIA:
- //case SC_OBLIVIONCURSE:
- //case SC_LEECHESEND:
- //case SC_FROSTMISTY:
- //case SC_MARSHOFABYSS:
- //case SC_DEEP_SLEEP:
- //case SC_COLD:
- //case SC_FREEZE_SP:
- //case SC_MANDRAGORA:
- if (!(type&4))
- continue;
break;
//The rest are buffs that can be removed.
case SC_BERSERK:
@@ -8065,6 +9403,25 @@ static int status_natural_heal_timer(int tid, unsigned int tick, int id, intptr_
* size_fix.txt - size adjustment table for weapons
* refine_db.txt - refining data table
*------------------------------------------*/
+#if RRMODE
+static bool status_readdb_job_re(char* fields[], int columns, int current) {
+ int idx, class_;
+ unsigned int i;
+
+ class_ = atoi(fields[0]);
+
+ if(!pcdb_checkid(class_)) {
+ ShowWarning("status_readdb_job_re: Invalid job class %d specified.\n", class_);
+ return false;
+ }
+ idx = pc_class2idx(class_);
+
+ for(i = 0; i < RE_JOB_DB_MAX; i++) {
+ re_job_db[idx][i] = atoi(fields[i+1]);
+ }
+ return true;
+}
+#endif
static bool status_readdb_job1(char* fields[], int columns, int current)
{// Job-specific values (weight, HP, SP, ASPD)
int idx, class_;
@@ -8088,7 +9445,6 @@ static bool status_readdb_job1(char* fields[], int columns, int current)
{
aspd_base[idx][i] = atoi(fields[i+5]);
}
- shield_aspd_base[idx] = atoi(fields[MAX_WEAPON_TYPE+5]);
return true;
}
@@ -8151,8 +9507,9 @@ int status_readdb(void)
memset(hp_coefficient2, 0, sizeof(hp_coefficient2));
memset(sp_coefficient, 0, sizeof(sp_coefficient));
memset(aspd_base, 0, sizeof(aspd_base));
- memset(shield_aspd_base, 0, sizeof(shield_aspd_base));
-
+#if RRMODE
+ memset(re_job_db, 0, sizeof(re_job_db));
+#endif
// job_db2.txt
memset(job_bonus,0,sizeof(job_bonus)); // Job-specific stats bonus
@@ -8174,10 +9531,14 @@ int status_readdb(void)
// read databases
//
- sv_readdb(db_path, "job_db1.txt", ',', 5+MAX_WEAPON_TYPE+1, 5+MAX_WEAPON_TYPE+1, -1, &status_readdb_job1);
- sv_readdb(db_path, "job_db2.txt", ',', 1, 1+MAX_LEVEL, -1, &status_readdb_job2);
- sv_readdb(db_path, "size_fix.txt", ',', MAX_WEAPON_TYPE, MAX_WEAPON_TYPE, ARRAYLENGTH(atkmods), &status_readdb_sizefix);
- sv_readdb(db_path, "refine_db.txt", ',', 3+MAX_REFINE+1, 3+MAX_REFINE+1, ARRAYLENGTH(percentrefinery), &status_readdb_refine);
+ sv_readdb(db_path, "job_db1.txt", ',', 5+MAX_WEAPON_TYPE, 5+MAX_WEAPON_TYPE, -1, &status_readdb_job1);
+ sv_readdb(db_path, "job_db2.txt", ',', 1, 1+MAX_LEVEL, -1, &status_readdb_job2);
+ sv_readdb(db_path, "size_fix.txt", ',', MAX_WEAPON_TYPE, MAX_WEAPON_TYPE, ARRAYLENGTH(atkmods), &status_readdb_sizefix);
+ sv_readdb(db_path, "refine_db.txt", ',', 3+MAX_REFINE+1, 3+MAX_REFINE+1, ARRAYLENGTH(percentrefinery), &status_readdb_refine);
+
+#if RRMODE
+ sv_readdb(db_path, "re_job_db.txt", ',', 1+RE_JOB_DB_MAX, 1+RE_JOB_DB_MAX, -1, &status_readdb_job_re);
+#endif
return 0;
}
diff --git a/src/map/status.h b/src/map/status.h
index 033e7ca38..4bf0b627d 100644
--- a/src/map/status.h
+++ b/src/map/status.h
@@ -12,7 +12,7 @@ struct mercenary_data;
struct status_change;
//Use this to refer the max refinery level [Skotlex]
-#define MAX_REFINE 20
+#define MAX_REFINE 10
#define MAX_REFINE_BONUS 5
extern unsigned long StatusChangeFlagTable[];
@@ -326,38 +326,251 @@ typedef enum sc_type {
SC_SPL_MATK,
SC_FOOD_STR_CASH,
SC_FOOD_AGI_CASH,
- SC_FOOD_VIT_CASH, //305
+ SC_FOOD_VIT_CASH,
SC_FOOD_DEX_CASH,
SC_FOOD_INT_CASH,
- SC_FOOD_LUK_CASH,
- SC_PARTYFLEE,
-
- // Third Jobs - Maintaining SI order for SCs.
- SC_FEAR, // 310,
- SC_BURNING,
- SC_ENCHANTBLADE,
- SC_DEATHBOUND,
+ SC_FOOD_LUK_CASH,//308
+ /**
+ * 3rd
+ **/
+ SC_FEAR,//309
+ SC_BURNING,//310
+ SC_FREEZING,//311
+ /**
+ * Rune Knight
+ **/
+ SC_ENCHANTBLADE,//312
+ SC_DEATHBOUND,//313
+ SC_MILLENNIUMSHIELD,
+ SC_CRUSHSTRIKE,//315
SC_REFRESH,
- SC_GIANTGROWTH, //315
+ SC_REUSE_REFRESH,
+ SC_GIANTGROWTH,
SC_STONEHARDSKIN,
- SC_VITALITYACTIVATION,
+ SC_VITALITYACTIVATION,//320
+ SC_STORMBLAST,
SC_FIGHTINGSPIRIT,
SC_ABUNDANCE,
- SC_MILLENNIUMSHIELD, // 320
- //
- SC_EPICLESIS = 325,
+ /**
+ * Arch Bishop
+ **/
+ SC_ADORAMUS,
+ SC_EPICLESIS,//325
SC_ORATIO,
SC_LAUDAAGNUS,
SC_LAUDARAMUS,
- SC_RENOVATIO = 332,
- SC_EXPIATIO = 336,
+ SC_RENOVATIO,
+ SC_EXPIATIO,//330
SC_DUPLELIGHT,
- SC_ADORAMUS = 380,
- SC_AB_SECRAMENT = 451,
-
-// SC_ALL_RIDING = 472,
-
- SC_CRUSHSTRIKE = 599,
+ SC_SECRAMENT,
+ /**
+ * Warlock
+ **/
+ SC_WHITEIMPRISON,
+ SC_MARSHOFABYSS,
+ SC_RECOGNIZEDSPELL,//335
+ SC_STASIS,
+ SC_SPHERE_1,
+ SC_SPHERE_2,
+ SC_SPHERE_3,
+ SC_SPHERE_4,//340
+ SC_SPHERE_5,
+ SC_READING_SB,
+ SC_FREEZINGSPELL,
+ /**
+ * Ranger
+ **/
+ SC_FEARBREEZE,
+ SC_ELECTRICSHOCKER,//345
+ SC_WUGDASH,
+ SC_BITE,
+ SC_CAMOUFLAGE,
+ /**
+ * Mechanic
+ **/
+ SC_ACCELERATION,
+ SC_HOVERING,//350
+ SC_SHAPESHIFT,
+ SC_INFRAREDSCAN,
+ SC_ANALYZE,
+ SC_MAGNETICFIELD,
+ SC_NEUTRALBARRIER,//355
+ SC_NEUTRALBARRIER_MASTER,
+ SC_STEALTHFIELD,
+ SC_STEALTHFIELD_MASTER,
+ SC_OVERHEAT,
+ SC_OVERHEAT_LIMITPOINT,//360
+ /**
+ * Guillotine Cross
+ **/
+ SC_VENOMIMPRESS,
+ SC_POISONINGWEAPON,
+ SC_WEAPONBLOCKING,
+ SC_CLOAKINGEXCEED,
+ SC_HALLUCINATIONWALK,//365
+ SC_HALLUCINATIONWALK_POSTDELAY,
+ SC_ROLLINGCUTTER,
+ SC_TOXIN,
+ SC_PARALYSE,
+ SC_VENOMBLEED,//370
+ SC_MAGICMUSHROOM,
+ SC_DEATHHURT,
+ SC_PYREXIA,
+ SC_OBLIVIONCURSE,
+ SC_LEECHESEND,//375
+ /**
+ * Royal Guard
+ **/
+ SC_REFLECTDAMAGE,
+ SC_FORCEOFVANGUARD,
+ SC_SHIELDSPELL_DEF,
+ SC_SHIELDSPELL_MDEF,
+ SC_SHIELDSPELL_REF,//380
+ SC_EXEEDBREAK,
+ SC_PRESTIGE,
+ SC_BANDING,
+ SC_BANDING_DEFENCE,
+ SC_EARTHDRIVE,//385
+ SC_INSPIRATION,
+ /**
+ * Sorcerer
+ **/
+ SC_SPELLFIST,
+ SC_CRYSTALIZE,
+ SC_STRIKING,
+ SC_WARMER,//390
+ SC_VACUUM_EXTREME,
+ SC_PROPERTYWALK,
+ /**
+ * Minstrel / Wanderer
+ **/
+ SC_SWINGDANCE,
+ SC_SYMPHONYOFLOVER,
+ SC_MOONLITSERENADE,//395
+ SC_RUSHWINDMILL,
+ SC_ECHOSONG,
+ SC_HARMONIZE,
+ SC_VOICEOFSIREN,
+ SC_DEEPSLEEP,//400
+ SC_SIRCLEOFNATURE,
+ SC_GLOOMYDAY,
+ SC_GLOOMYDAY_SK,
+ SC_SONGOFMANA,
+ SC_DANCEWITHWUG,//405
+ SC_SATURDAYNIGHTFEVER,
+ SC_LERADSDEW,
+ SC_MELODYOFSINK,
+ SC_BEYONDOFWARCRY,
+ SC_UNLIMITEDHUMMINGVOICE,//410
+ SC_SITDOWN_FORCE,
+ /**
+ * Sura
+ **/
+ SC_CRESCENTELBOW,
+ SC_CURSEDCIRCLE_ATKER,
+ SC_CURSEDCIRCLE_TARGET,
+ SC_LIGHTNINGWALK,//415
+ SC_RAISINGDRAGON,
+ SC_GT_ENERGYGAIN,
+ SC_GT_CHANGE,
+ SC_GT_REVITALIZE,
+ /**
+ * Genetic
+ **/
+ SC_GN_CARTBOOST,//420
+ SC_THORNSTRAP,
+ SC_BLOODSUCKER,
+ SC_SMOKEPOWDER,
+ SC_TEARGAS,
+ SC_MANDRAGORA,//425
+ SC_STOMACHACHE,
+ SC_MYSTERIOUS_POWDER,
+ SC_MELON_BOMB,
+ SC_BANANA_BOMB,
+ SC_BANANA_BOMB_SITDOWN,//430
+ SC_SAVAGE_STEAK,
+ SC_COCKTAIL_WARG_BLOOD,
+ SC_MINOR_BBQ,
+ SC_SIROMA_ICE_TEA,
+ SC_DROCERA_HERB_STEAMED,//435
+ SC_PUTTI_TAILS_NOODLES,
+ SC_BOOST500,
+ SC_FULL_SWING_K,
+ SC_MANA_PLUS,
+ SC_MUSTLE_M,//440
+ SC_LIFE_FORCE_F,
+ SC_EXTRACT_WHITE_POTION_Z,
+ SC_VITATA_500,
+ SC_EXTRACT_SALAMINE_JUICE,
+ /**
+ * Shadow Chaser
+ **/
+ SC__REPRODUCE,//445
+ SC__AUTOSHADOWSPELL,
+ SC__SHADOWFORM,
+ SC__BODYPAINT,
+ SC__INVISIBILITY,
+ SC__DEADLYINFECT,//450
+ SC__ENERVATION,
+ SC__GROOMY,
+ SC__IGNORANCE,
+ SC__LAZINESS,
+ SC__UNLUCKY,//455
+ SC__WEAKNESS,
+ SC__STRIPACCESSORY,
+ SC__MANHOLE,
+ SC_CHAOS,
+ SC__BLOODYLUST,//460
+ /**
+ * Elemental Spirits
+ **/
+ SC_CIRCLE_OF_FIRE,
+ SC_CIRCLE_OF_FIRE_OPTION,
+ SC_FIRE_CLOAK,
+ SC_FIRE_CLOAK_OPTION,
+ SC_WATER_SCREEN,//465
+ SC_WATER_SCREEN_OPTION,
+ SC_WATER_DROP,
+ SC_WATER_DROP_OPTION,
+ SC_WATER_BARRIER,
+ SC_WIND_STEP,//470
+ SC_WIND_STEP_OPTION,
+ SC_WIND_CURTAIN,
+ SC_WIND_CURTAIN_OPTION,
+ SC_ZEPHYR,
+ SC_SOLID_SKIN,//475
+ SC_SOLID_SKIN_OPTION,
+ SC_STONE_SHIELD,
+ SC_STONE_SHIELD_OPTION,
+ SC_POWER_OF_GAIA,
+ SC_PYROTECHNIC,//480
+ SC_PYROTECHNIC_OPTION,
+ SC_HEATER,
+ SC_HEATER_OPTION,
+ SC_TROPIC,
+ SC_TROPIC_OPTION,//485
+ SC_AQUAPLAY,
+ SC_AQUAPLAY_OPTION,
+ SC_COOLER,
+ SC_COOLER_OPTION,
+ SC_CHILLY_AIR,//490
+ SC_CHILLY_AIR_OPTION,
+ SC_GUST,
+ SC_GUST_OPTION,
+ SC_BLAST,
+ SC_BLAST_OPTION,//495
+ SC_WILD_STORM,
+ SC_WILD_STORM_OPTION,
+ SC_PETROLOGY,
+ SC_PETROLOGY_OPTION,
+ SC_CURSED_SOIL,//500
+ SC_CURSED_SOIL_OPTION,
+ SC_UPHEAVAL,
+ SC_UPHEAVAL_OPTION,
+ SC_TIDAL_WEAPON,
+ SC_TIDAL_WEAPON_OPTION,//505
+ SC_ROCK_CRUSHER,
+ SC_ROCK_CRUSHER_ATK,
SC_MAX, //Automatically updated max, used in for's to check we are within bounds.
} sc_type;
@@ -678,9 +891,10 @@ enum si_type {
// SI_REUSE_LIMIT_F = 310,
SI_INVINCIBLE = 311,
SI_CASH_PLUSONLYJOBEXP = 312,
- SI_PARTYFLEE = 313,
+// SI_PARTYFLEE = 313,
// SI_ANGEL_PROTECT = 314,
-// SI_ENDURE_MDEF = 315,
+
+ SI_ENDURE_MDEF = 315,
SI_ENCHANTBLADE = 316,
SI_DEATHBOUND = 317,
SI_REFRESH = 318,
@@ -689,24 +903,23 @@ enum si_type {
SI_VITALITYACTIVATION = 321,
SI_FIGHTINGSPIRIT = 322,
SI_ABUNDANCE = 323,
-// SI_REUSE_MILLENNIUMSHIELD = 324,
-// SI_REUSE_CRUSHSTRIKE = 325,
-// SI_REUSE_REFRESH = 326,
-// SI_REUSE_STORMBLAST = 327,
-// SI_VENOMIMPRESS = 328,
+ SI_REUSE_MILLENNIUMSHIELD = 324,
+ SI_REUSE_CRUSHSTRIKE = 325,
+ SI_REUSE_REFRESH = 326,
+ SI_REUSE_STORMBLAST = 327,
+ SI_VENOMIMPRESS = 328,
SI_EPICLESIS = 329,
SI_ORATIO = 330,
SI_LAUDAAGNUS = 331,
SI_LAUDARAMUS = 332,
-// SI_CLOAKINGEXCEED = 333,
-// SI_HALLUCINATIONWALK = 334,
-// SI_HALLUCINATIONWALK_POSTDELAY = 335,
+ SI_CLOAKINGEXCEED = 333,
+ SI_HALLUCINATIONWALK = 334,
+ SI_HALLUCINATIONWALK_POSTDELAY = 335,
SI_RENOVATIO = 336,
-// SI_WEAPONBLOCKING = 337,
-// SI_WEAPONBLOCKING_POSTDELAY = 338,
-// SI_ROLLINGCUTTER = 339,
+ SI_WEAPONBLOCKING = 337,
+ SI_WEAPONBLOCKING_POSTDELAY = 338,
+ SI_ROLLINGCUTTER = 339,
SI_EXPIATIO = 340,
-/*
SI_POISONINGWEAPON = 341,
SI_TOXIN = 342,
SI_PARALYSE = 343,
@@ -716,9 +929,7 @@ enum si_type {
SI_PYREXIA = 347,
SI_OBLIVIONCURSE = 348,
SI_LEECHESEND = 349,
-*/
SI_DUPLELIGHT = 350,
-/*
SI_FROSTMISTY = 351,
SI_FEARBREEZE = 352,
SI_ELECTRICSHOCKER = 353,
@@ -731,11 +942,11 @@ enum si_type {
SI_CAMOUFLAGE = 360,
SI_ACCELERATION = 361,
SI_HOVERING = 362,
- SI_SUMMON1 = 363,
- SI_SUMMON2 = 364,
- SI_SUMMON3 = 365,
- SI_SUMMON4 = 366,
- SI_SUMMON5 = 367,
+ SI_SPHERE_1 = 363,
+ SI_SPHERE_2 = 364,
+ SI_SPHERE_3 = 365,
+ SI_SPHERE_4 = 366,
+ SI_SPHERE_5 = 367,
SI_MVPCARD_TAOGUNKA = 368,
SI_MVPCARD_MISTRESS = 369,
SI_MVPCARD_ORCHERO = 370,
@@ -749,15 +960,15 @@ enum si_type {
SI_NEUTRALBARRIER_MASTER = 378,
SI_STEALTHFIELD = 379,
SI_STEALTHFIELD_MASTER = 380,
-*/
+
SI_MANU_ATK = 381,
SI_MANU_DEF = 382,
SI_SPL_ATK = 383,
SI_SPL_DEF = 384,
-// SI_REPRODUCE = 385,
+ SI_REPRODUCE = 385,
SI_MANU_MATK = 386,
SI_SPL_MATK = 387,
-/*
+
SI_STR_SCROLL = 388,
SI_INT_SCROLL = 389,
SI_LG_REFLECTDAMAGE = 390,
@@ -771,9 +982,7 @@ enum si_type {
SI_SHIELDSPELL_REF = 398,
SI_BODYPAINT = 399,
SI_EXEEDBREAK = 400,
-*/
SI_ADORAMUS = 401,
-/*
SI_PRESTIGE = 402,
SI_INVISIBILITY = 403,
SI_DEADLYINFECT = 404,
@@ -844,9 +1053,7 @@ enum si_type {
SI_BLOCKING_PLAY = 469,
SI_MANDRAGORA = 470,
SI_ACTIVATE = 471,
-*/
- SI_AB_SECRAMENT = 472,
-/*
+ SI_SECRAMENT = 472,
SI_ASSUMPTIO2 = 473,
SI_TK_SEVENWIND = 474,
SI_LIMIT_ODINS_RECALL = 475,
@@ -946,65 +1153,7 @@ enum si_type {
SI_WIND_INSIGNIA = 569,
SI_EARTH_INSIGNIA = 570,
SI_EQUIPED_FLOOR = 571,
- SI_GUARDIAN_RECALL = 572,
- SI_MORA_BUFF = 573,
- SI_REUSE_LIMIT_G = 574,
- SI_REUSE_LIMIT_H = 575,
- SI_NEEDLE_OF_PARALYZE = 576,
- SI_PAIN_KILLER = 577,
- SI_G_LIFEPOTION = 578,
- SI_VITALIZE_POTION = 579,
- SI_LIGHT_OF_REGENE = 580,
- SI_OVERED_BOOST = 581,
- SI_SILENT_BREEZE = 582,
- SI_ODINS_POWER = 583,
- SI_STYLE_CHANGE = 584,
- SI_SONIC_CLAW_POSTDELAY = 585,
-//--586-595 Unused
- SI_SILVERVEIN_RUSH_POSTDELAY = 596,
- SI_MIDNIGHT_FRENZY_POSTDELAY = 597,
- SI_GOLDENE_FERSE = 598,
- SI_ANGRIFFS_MODUS = 599,
- SI_TINDER_BREAKER = 600,
- SI_TINDER_BREAKER_POSTDELAY = 601,
- SI_CBC = 602,
- SI_CBC_POSTDELAY = 603,
- SI_EQC = 604,
- SI_MAGMA_FLOW = 605,
- SI_GRANITIC_ARMOR = 606,
- SI_PYROCLASTIC = 607,
- SI_VOLCANIC_ASH = 608,
- SI_SPIRITS_SAVEINFO1 = 609,
- SI_SPIRITS_SAVEINFO2 = 610,
- SI_MAGIC_CANDY = 611,
-//--612 skipped
- SI_ALL_RIDING = 613,
-//--614 skipped
- SI_MACRO = 615,
- SI_MACRO_POSTDELAY = 616,
- SI_BEER_BOTTLE_CAP = 617,
- SI_OVERLAPEXPUP = 618,
- SI_PC_IZ_DUN05 = 619,
-*/
- SI_CRUSHSTRIKE = 620,
-/*
- SI_MONSTER_TRANSFORM = 621,
- SI_SIT = 622,
- SI_ONAIR = 623,
- SI_MTF_ASPD = 624,
- SI_MTF_RANGEATK = 625,
- SI_MTF_MATK = 626,
- SI_MTF_MLEATKED = 627,
- SI_MTF_CRIDAMAGE = 628,
- SI_REUSE_LIMIT_MTF = 629,
- SI_MACRO_PERMIT = 630,
- SI_MACRO_PLAY = 631,
- SI_SKF_CAST = 632,
- SI_SKF_ASPD = 633,
- SI_SKF_ATK = 634,
- SI_SKF_MATK = 635,
- SI_REWARD_PLUSONLYJOBEXP = 636,
-*/
+ SI_ALL_RIDING = 613,//awesome 571-613 gap, we're missing quite a few stuff here.
};
// JOINTBEAT stackable ailments
@@ -1125,7 +1274,7 @@ enum {
OPTION_DRAGON3 = 0x01000000,
OPTION_DRAGON4 = 0x02000000,
OPTION_DRAGON5 = 0x04000000,
- OPTION_ALL_RIDING= 0x08000000,
+ OPTION_MOUNTING = 0x08000000,//dull name (cuz ind named it :/)
// compound constants
OPTION_CART = OPTION_CART1|OPTION_CART2|OPTION_CART3|OPTION_CART4|OPTION_CART5,
OPTION_DRAGON = OPTION_DRAGON1|OPTION_DRAGON2|OPTION_DRAGON3|OPTION_DRAGON4|OPTION_DRAGON5,
@@ -1201,22 +1350,41 @@ struct weapon_atk {
//For holding basic status (which can be modified by status changes)
struct status_data {
unsigned int
- hp, sp,
+ hp, sp, // see status_cpy before adding members before hp and sp
max_hp, max_sp;
unsigned short
str, agi, vit, int_, dex, luk,
- batk, equipment_atk,
- matk_min, matk_max, status_matk,
+ batk,
+ matk_min, matk_max,
speed,
amotion, adelay, dmotion,
mode;
short
hit, flee, cri, flee2,
- def, mdef, def2, mdef2,
+ def2, mdef2,
+#if RRMODE
+ /**
+ * In RE def and mdef can go over 127 (signed char) limit, so in RE mode we use short
+ **/
+ def,mdef,
+#endif
aspd_rate;
unsigned char
def_ele, ele_lv,
+#if RRMODE
+ /**
+ * in RE weapon level is used in several areas, keeping it here saves performance
+ **/
+ wlv,
+#endif
size, race;
+#if RRMODE == 0
+ /**
+ * In NON-RE def and mdef are not required to be short, so we keep it signed char (ancient-default)
+ **/
+ signed char
+ def, mdef;
+#endif
struct weapon_atk rhw, lhw; //Right Hand/Left Hand Weapon.
};
@@ -1278,7 +1446,8 @@ struct status_change {
//TODO: See if it is possible to implement the following SC's without requiring extra parameters while the SC is inactive.
unsigned char jb_flag; //Joint Beat type flag
unsigned short mp_matk_min, mp_matk_max; //Previous matk min/max for ground spells (Amplify magic power)
- int sg_id; //ID of the previous Storm gust that hit you
+ //int sg_id; //ID of the previous Storm gust that hit you
+ short comet_x, comet_y; // Point where src casted Comet - required to calculate damage from this point
unsigned char sg_counter; //Storm gust counter (previous hits from storm gust)
struct status_change_entry *data[SC_MAX];
};
@@ -1306,10 +1475,6 @@ int status_set_sp(struct block_list *bl, unsigned int sp, int flag);
int status_heal(struct block_list *bl,int hp,int sp, int flag);
int status_revive(struct block_list *bl, unsigned char per_hp, unsigned char per_sp);
-//Define for copying a status_data structure from b to a, without overwriting current Hp and Sp
-#define status_cpy(a, b) \
- memcpy(&((a)->max_hp), &((b)->max_hp), sizeof(struct status_data)-(sizeof((a)->hp)+sizeof((a)->sp)))
-
struct regen_data *status_get_regen_data(struct block_list *bl);
struct status_data *status_get_status_data(struct block_list *bl);
struct status_data *status_get_base_status(struct block_list *bl);
@@ -1329,7 +1494,7 @@ int status_get_lv(struct block_list *bl);
#define status_get_luk(bl) status_get_status_data(bl)->luk
#define status_get_hit(bl) status_get_status_data(bl)->hit
#define status_get_flee(bl) status_get_status_data(bl)->flee
-signed short status_get_def(struct block_list *bl);
+signed char status_get_def(struct block_list *bl);
#define status_get_mdef(bl) status_get_status_data(bl)->mdef
#define status_get_flee2(bl) status_get_status_data(bl)->flee2
#define status_get_def2(bl) status_get_status_data(bl)->def2
@@ -1355,6 +1520,12 @@ unsigned char status_calc_attack_element(struct block_list *bl, struct status_ch
#define status_get_race(bl) status_get_status_data(bl)->race
#define status_get_size(bl) status_get_status_data(bl)->size
#define status_get_mode(bl) status_get_status_data(bl)->mode
+#if RRMODE
+ /**
+ * in RE weapon level is used in several areas, keeping it here saves performance
+ **/
+ #define status_get_wlv(bl) status_get_status_data(bl)->wlv
+#endif
int status_get_party_id(struct block_list *bl);
int status_get_guild_id(struct block_list *bl);
int status_get_emblem_id(struct block_list *bl);
diff --git a/src/map/storage.c b/src/map/storage.c
index 116ba18c9..4eb1beb32 100644
--- a/src/map/storage.c
+++ b/src/map/storage.c
@@ -138,11 +138,6 @@ static int storage_additem(struct map_session_data* sd, struct item* item_data,
data = itemdb_search(item_data->nameid);
- if( data->stack.storage && amount > data->stack.amount )
- {// item stack limitation
- return 1;
- }
-
if( !itemdb_canstore(item_data, pc_isGM(sd)) )
{ //Check if item is storable. [Skotlex]
clif_displaymessage (sd->fd, msg_txt(264));
@@ -155,7 +150,7 @@ static int storage_additem(struct map_session_data* sd, struct item* item_data,
{
if( compare_item(&stor->items[i], item_data) )
{// existing items found, stack them
- if( amount > MAX_AMOUNT - stor->items[i].amount || ( data->stack.storage && amount > data->stack.amount - stor->items[i].amount ) )
+ if( amount > MAX_AMOUNT - stor->items[i].amount )
return 1;
stor->items[i].amount += amount;
clif_storageitemadded(sd,&stor->items[i],i,amount);
@@ -404,11 +399,6 @@ int guild_storage_additem(struct map_session_data* sd, struct guild_storage* sto
data = itemdb_search(item_data->nameid);
- if( data->stack.guildstorage && amount > data->stack.amount )
- {// item stack limitation
- return 1;
- }
-
if( !itemdb_canguildstore(item_data, pc_isGM(sd)) || item_data->expire_time )
{ //Check if item is storable. [Skotlex]
clif_displaymessage (sd->fd, msg_txt(264));
@@ -418,7 +408,7 @@ int guild_storage_additem(struct map_session_data* sd, struct guild_storage* sto
if(itemdb_isstackable2(data)){ //Stackable
for(i=0;i<MAX_GUILD_STORAGE;i++){
if(compare_item(&stor->items[i], item_data)) {
- if( amount > MAX_AMOUNT - stor->items[i].amount || ( data->stack.guildstorage && amount > data->stack.amount - stor->items[i].amount ) )
+ if(stor->items[i].amount+amount > MAX_AMOUNT)
return 1;
stor->items[i].amount+=amount;
clif_storageitemadded(sd,&stor->items[i],i,amount);
diff --git a/src/map/unit.c b/src/map/unit.c
index b51e2602d..44296ca51 100644
--- a/src/map/unit.c
+++ b/src/map/unit.c
@@ -323,9 +323,13 @@ int unit_walktoxy( struct block_list *bl, short x, short y, int flag)
}
//To set Mob's CHASE/FOLLOW states (shouldn't be done if there's no path to reach)
-#define set_mobstate(bl, flag) \
- if((bl)->type == BL_MOB && (flag)) \
- ((TBL_MOB*)(bl))->state.skillstate = ((TBL_MOB*)(bl))->state.aggressive?MSS_FOLLOW:MSS_RUSH;
+static inline void set_mobstate(struct block_list* bl, int flag)
+{
+ struct mob_data* md = BL_CAST(BL_MOB,bl);
+
+ if( md && flag )
+ md->state.skillstate = md->state.aggressive ? MSS_FOLLOW : MSS_RUSH;
+}
static int unit_walktobl_sub(int tid, unsigned int tick, int id, intptr_t data)
{
@@ -440,7 +444,7 @@ int unit_run(struct block_list *bl)
if(to_x == bl->x && to_y == bl->y) {
//If you can't run forward, you must be next to a wall, so bounce back. [Skotlex]
- clif_status_change(bl, SI_BUMP, 1, 0);
+ clif_status_change(bl, SI_BUMP, 1, 0, 0, 0, 0);
//Set running to 0 beforehand so status_change_end knows not to enable spurt [Kevin]
unit_bl2ud(bl)->state.running = 0;
@@ -448,7 +452,7 @@ int unit_run(struct block_list *bl)
skill_blown(bl,bl,skill_get_blewcount(TK_RUN,lv),unit_getdir(bl),0);
clif_fixpos(bl); //Why is a clif_slide (skill_blown) AND a fixpos needed? Ask Aegis.
- clif_status_change(bl, SI_BUMP, 0, 0);
+ clif_status_change(bl, SI_BUMP, 0, 0, 0, 0, 0);
return 0;
}
if (unit_walktoxy(bl, to_x, to_y, 1))
@@ -460,7 +464,7 @@ int unit_run(struct block_list *bl)
} while (--i > 0 && !unit_walktoxy(bl, to_x, to_y, 1));
if (i==0) {
// copy-paste from above
- clif_status_change(bl, SI_BUMP, 1, 0);
+ clif_status_change(bl, SI_BUMP, 1, 0, 0, 0, 0);
//Set running to 0 beforehand so status_change_end knows not to enable spurt [Kevin]
unit_bl2ud(bl)->state.running = 0;
@@ -468,7 +472,73 @@ int unit_run(struct block_list *bl)
skill_blown(bl,bl,skill_get_blewcount(TK_RUN,lv),unit_getdir(bl),0);
clif_fixpos(bl);
- clif_status_change(bl, SI_BUMP, 0, 0);
+ clif_status_change(bl, SI_BUMP, 0, 0, 0, 0, 0);
+ return 0;
+ }
+ return 1;
+}
+
+//Exclusive function to Wug Dash state. [Jobbie/3CeAM]
+int unit_wugdash(struct block_list *bl, struct map_session_data *sd) {
+ struct status_change *sc = status_get_sc(bl);
+ short to_x,to_y,dir_x,dir_y;
+ int lv;
+ int i;
+ if (!(sc && sc->data[SC_WUGDASH]))
+ return 0;
+
+ nullpo_ret(sd);
+ nullpo_ret(bl);
+
+ if (!unit_can_move(bl)) {
+ status_change_end(bl,SC_WUGDASH,-1);
+ return 0;
+ }
+
+ lv = sc->data[SC_WUGDASH]->val1;
+ dir_x = dirx[sc->data[SC_WUGDASH]->val2];
+ dir_y = diry[sc->data[SC_WUGDASH]->val2];
+
+ to_x = bl->x;
+ to_y = bl->y;
+ for(i=0;i<AREA_SIZE;i++)
+ {
+ if(!map_getcell(bl->m,to_x+dir_x,to_y+dir_y,CELL_CHKPASS))
+ break;
+
+ if(sc->data[SC_WUGDASH] && map_count_oncell(bl->m, to_x+dir_x, to_y+dir_y, BL_PC|BL_MOB|BL_NPC))
+ break;
+
+ to_x += dir_x;
+ to_y += dir_y;
+ }
+
+ if(to_x == bl->x && to_y == bl->y) {
+
+ unit_bl2ud(bl)->state.running = 0;
+ status_change_end(bl,SC_WUGDASH,-1);
+
+ if( sd ){
+ clif_fixpos(bl);
+ skill_castend_damage_id(bl, &sd->bl, RA_WUGDASH, lv, gettick(), SD_LEVEL);
+ }
+ return 0;
+ }
+ if (unit_walktoxy(bl, to_x, to_y, 1))
+ return 1;
+ do {
+ to_x -= dir_x;
+ to_y -= dir_y;
+ } while (--i > 0 && !unit_walktoxy(bl, to_x, to_y, 1));
+ if (i==0) {
+
+ unit_bl2ud(bl)->state.running = 0;
+ status_change_end(bl,SC_WUGDASH,-1);
+
+ if( sd ){
+ clif_fixpos(bl);
+ skill_castend_damage_id(bl, &sd->bl, RA_WUGDASH, lv, gettick(), SD_LEVEL);
+ }
return 0;
}
return 1;
@@ -837,8 +907,6 @@ int unit_can_move(struct block_list *bl)
sc->data[SC_CLOAKING]->val1 < 3 && !(sc->data[SC_CLOAKING]->val4&1))
|| sc->data[SC_MADNESSCANCEL]
|| (sc->data[SC_GRAVITATION] && sc->data[SC_GRAVITATION]->val3 == BCT_SELF)
- || (sc->data[SC_FEAR] && sc->data[SC_FEAR]->val3 > 0)
- || sc->data[SC_DEATHBOUND]
))
return 0;
}
@@ -990,7 +1058,7 @@ int unit_skilluse_id2(struct block_list *src, int target_id, short skill_num, sh
if( !target || src->m != target->m || !src->prev || !target->prev )
return 0;
- if( mob_ksprotected(src, target) )
+ if( battle_config.ksprotection && sd && mob_ksprotected(src, target) )
return 0;
//Normally not needed because clif.c checks for it, but the at/char/script commands don't! [Skotlex]
@@ -1101,10 +1169,18 @@ int unit_skilluse_id2(struct block_list *src, int target_id, short skill_num, sh
case SA_SPELLBREAKER:
temp = 1;
break;
+ case ST_CHASEWALK:
+ if (sc && sc->data[SC_CHASEWALK])
+ casttime = 0;
+ break;
case TK_RUN:
if (sc && sc->data[SC_RUN])
casttime = 0;
break;
+ case HP_BASILICA:
+ if( sc && sc->data[SC_BASILICA] )
+ casttime = 0; // No Casting time on basilica cancel
+ break;
case KN_CHARGEATK:
{
unsigned int k = (distance_bl(src,target)-1)/3; //+100% every 3 cells of distance
@@ -1118,17 +1194,9 @@ int unit_skilluse_id2(struct block_list *src, int target_id, short skill_num, sh
break;
}
- // Cancel status effects that lower cast time.
- if( !(skill_get_castnodex(skill_num, skill_lv)&2) && sc )
- {
- if( sc->data[SC_SUFFRAGIUM] )
- status_change_end(src, SC_SUFFRAGIUM, INVALID_TIMER);
- if( sc->data[SC_MEMORIZE] )
- {
- if ((--sc->data[SC_MEMORIZE]->val2) <= 0)
- status_change_end(src, SC_MEMORIZE, INVALID_TIMER);
- }
- }
+ // moved here to prevent Suffragium from ending if skill fails
+ if (!(skill_get_castnodex(skill_num, skill_lv)&2))
+ casttime = skill_castfix_sc(src, casttime, skill_num, skill_lv);
if( casttime > 0 || temp )
{
@@ -1268,17 +1336,9 @@ int unit_skilluse_pos2( struct block_list *src, short skill_x, short skill_y, sh
unit_stop_attack(src);
- // Cancel status effects that lower cast time.
- if( !(skill_get_castnodex(skill_num, skill_lv)&2) && sc )
- {
- if( sc->data[SC_SUFFRAGIUM] )
- status_change_end(src, SC_SUFFRAGIUM, INVALID_TIMER);
- if( sc->data[SC_MEMORIZE] )
- {
- if ((--sc->data[SC_MEMORIZE]->val2) <= 0)
- status_change_end(src, SC_MEMORIZE, INVALID_TIMER);
- }
- }
+ // moved here to prevent Suffragium from ending if skill fails
+ if (!(skill_get_castnodex(skill_num, skill_lv)&2))
+ casttime = skill_castfix_sc(src, casttime, skill_num, skill_lv);
ud->state.skillcastcancel = castcancel&&casttime>0?1:0;
if( !sd || sd->skillitem != skill_num || skill_get_cast(skill_num,skill_lv) )
@@ -2079,7 +2139,6 @@ int unit_free(struct block_list *bl, clr_type clrtype)
guild_send_memberinfoshort(sd,0);
pc_cleareventtimer(sd);
pc_inventory_rental_clear(sd);
- if( sd->bg_id ) bg_team_leave(sd,1);
pc_delspiritball(sd,sd->spiritball,1);
if( sd->reg )
diff --git a/src/map/unit.h b/src/map/unit.h
index e349a7466..f7b072739 100644
--- a/src/map/unit.h
+++ b/src/map/unit.h
@@ -126,6 +126,10 @@ int unit_changeviewsize(struct block_list *bl,short size);
// ‰Šú‰»ƒ‹[ƒ`ƒ“
int do_init_unit(void);
int do_final_unit(void);
+/**
+ * Ranger
+ **/
+int unit_wugdash(struct block_list *bl, struct map_session_data *sd);
extern const short dirx[8];
extern const short diry[8];
diff --git a/vcproj-10/char-server_sql.vcxproj b/vcproj-10/char-server_sql.vcxproj
index f1a8e5363..c837f8da7 100644
--- a/vcproj-10/char-server_sql.vcxproj
+++ b/vcproj-10/char-server_sql.vcxproj
@@ -55,7 +55,6 @@
<PreprocessorDefinitions>WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessToFile>false</PreprocessToFile>
<PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers>
- <MinimalRebuild>true</MinimalRebuild>
<ExceptionHandling>
</ExceptionHandling>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@@ -69,6 +68,7 @@
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<CompileAs>CompileAsC</CompileAs>
<DisableSpecificWarnings>4800;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<AdditionalDependencies>libcmtd.lib;oldnames.lib;ws2_32.lib;libmysql.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -106,6 +106,7 @@
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<CompileAs>CompileAsC</CompileAs>
<DisableSpecificWarnings>4800;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<AdditionalDependencies>libcmt.lib;oldnames.lib;ws2_32.lib;libmysql.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -131,7 +132,6 @@
<ClInclude Include="..\src\common\core.h" />
<ClInclude Include="..\src\common\db.h" />
<ClInclude Include="..\src\common\ers.h" />
- <ClInclude Include="..\src\common\lock.h" />
<ClInclude Include="..\src\common\malloc.h" />
<ClInclude Include="..\src\common\mapindex.h" />
<ClInclude Include="..\src\common\mmo.h" />
@@ -163,7 +163,6 @@
<ClCompile Include="..\src\common\core.c" />
<ClCompile Include="..\src\common\db.c" />
<ClCompile Include="..\src\common\ers.c" />
- <ClCompile Include="..\src\common\lock.c" />
<ClCompile Include="..\src\common\malloc.c" />
<ClCompile Include="..\src\common\mapindex.c" />
<ClCompile Include="..\src\common\nullpo.c" />
diff --git a/vcproj-10/char-server_sql.vcxproj.filters b/vcproj-10/char-server_sql.vcxproj.filters
new file mode 100644
index 000000000..a2bbf2d15
--- /dev/null
+++ b/vcproj-10/char-server_sql.vcxproj.filters
@@ -0,0 +1,186 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <ClCompile Include="..\3rdparty\mt19937ar\mt19937ar.c">
+ <Filter>3rdparty</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\core.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\db.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\ers.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\malloc.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\mapindex.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\nullpo.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\plugins.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\random.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\showmsg.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\socket.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\sql.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\strlib.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\timer.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\utils.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\char_sql\char.c">
+ <Filter>char_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\char_sql\int_auction.c">
+ <Filter>char_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\char_sql\int_guild.c">
+ <Filter>char_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\char_sql\int_homun.c">
+ <Filter>char_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\char_sql\int_mail.c">
+ <Filter>char_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\char_sql\int_mercenary.c">
+ <Filter>char_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\char_sql\int_party.c">
+ <Filter>char_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\char_sql\int_pet.c">
+ <Filter>char_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\char_sql\int_quest.c">
+ <Filter>char_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\char_sql\int_storage.c">
+ <Filter>char_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\char_sql\inter.c">
+ <Filter>char_sql</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\3rdparty\mt19937ar\mt19937ar.h">
+ <Filter>3rdparty</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\cbasetypes.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\core.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\db.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\ers.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\malloc.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\mapindex.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\mmo.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\nullpo.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\plugin.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\plugins.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\random.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\showmsg.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\socket.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\sql.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\strlib.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\timer.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\utils.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\version.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\char_sql\inter.h">
+ <Filter>char_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\char_sql\char.h">
+ <Filter>char_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\char_sql\int_auction.h">
+ <Filter>char_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\char_sql\int_guild.h">
+ <Filter>char_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\char_sql\int_homun.h">
+ <Filter>char_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\char_sql\int_mail.h">
+ <Filter>char_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\char_sql\int_mercenary.h">
+ <Filter>char_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\char_sql\int_party.h">
+ <Filter>char_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\char_sql\int_pet.h">
+ <Filter>char_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\char_sql\int_quest.h">
+ <Filter>char_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\char_sql\int_storage.h">
+ <Filter>char_sql</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <Filter Include="common">
+ <UniqueIdentifier>{623f21b1-c166-4848-83d8-8b4fe0e2e2df}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="char_sql">
+ <UniqueIdentifier>{83b1ecf5-21d1-4dac-915f-95ff77a90899}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="3rdparty">
+ <UniqueIdentifier>{b3f5c857-79c0-4a55-b8c5-7e7f56a8f948}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/vcproj-10/char-server_txt.vcxproj b/vcproj-10/char-server_txt.vcxproj
index 3d73a14ae..0d287e5a2 100644
--- a/vcproj-10/char-server_txt.vcxproj
+++ b/vcproj-10/char-server_txt.vcxproj
@@ -55,7 +55,6 @@
<PreprocessorDefinitions>WIN32;_WIN32;__WIN32;_DEBUG;TXT_ONLY;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessToFile>false</PreprocessToFile>
<PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers>
- <MinimalRebuild>true</MinimalRebuild>
<ExceptionHandling>
</ExceptionHandling>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@@ -69,6 +68,7 @@
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<CompileAs>CompileAsC</CompileAs>
<DisableSpecificWarnings>4800;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<AdditionalDependencies>libcmtd.lib;oldnames.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -105,6 +105,7 @@
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<CompileAs>CompileAsC</CompileAs>
<DisableSpecificWarnings>4800;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<AdditionalDependencies>libcmt.lib;oldnames.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
diff --git a/vcproj-10/char-server_txt.vcxproj.filters b/vcproj-10/char-server_txt.vcxproj.filters
new file mode 100644
index 000000000..0bb9773de
--- /dev/null
+++ b/vcproj-10/char-server_txt.vcxproj.filters
@@ -0,0 +1,168 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <ClCompile Include="..\3rdparty\mt19937ar\mt19937ar.c">
+ <Filter>3rdparty</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\core.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\db.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\ers.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\utils.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\timer.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\strlib.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\socket.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\showmsg.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\random.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\plugins.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\nullpo.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\mapindex.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\malloc.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\lock.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\char\char.c">
+ <Filter>char_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\char\int_guild.c">
+ <Filter>char_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\char\int_homun.c">
+ <Filter>char_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\char\int_party.c">
+ <Filter>char_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\char\int_pet.c">
+ <Filter>char_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\char\int_status.c">
+ <Filter>char_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\char\int_storage.c">
+ <Filter>char_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\char\inter.c">
+ <Filter>char_txt</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\3rdparty\mt19937ar\mt19937ar.h">
+ <Filter>3rdparty</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\cbasetypes.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\core.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\db.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\ers.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\version.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\utils.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\timer.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\strlib.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\socket.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\showmsg.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\random.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\plugins.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\plugin.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\nullpo.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\mmo.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\mapindex.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\malloc.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\lock.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\char\inter.h">
+ <Filter>char_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\char\char.h">
+ <Filter>char_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\char\int_guild.h">
+ <Filter>char_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\char\int_homun.h">
+ <Filter>char_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\char\int_party.h">
+ <Filter>char_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\char\int_pet.h">
+ <Filter>char_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\char\int_status.h">
+ <Filter>char_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\char\int_storage.h">
+ <Filter>char_txt</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <Filter Include="common">
+ <UniqueIdentifier>{3426d3df-b8f8-421a-9ecf-5929f527ebcd}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="char_txt">
+ <UniqueIdentifier>{ecf20235-c0df-43f9-a4c0-f2f992b3330f}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="3rdparty">
+ <UniqueIdentifier>{36b5e281-2a86-4c66-bc78-f56c54f0b3c2}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/vcproj-10/login-server_sql.vcxproj b/vcproj-10/login-server_sql.vcxproj
index 43dbeb351..66b20780d 100644
--- a/vcproj-10/login-server_sql.vcxproj
+++ b/vcproj-10/login-server_sql.vcxproj
@@ -55,7 +55,6 @@
<PreprocessorDefinitions>WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION;WITH_SQL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessToFile>false</PreprocessToFile>
<PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers>
- <MinimalRebuild>true</MinimalRebuild>
<ExceptionHandling>
</ExceptionHandling>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@@ -69,6 +68,7 @@
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<CompileAs>CompileAsC</CompileAs>
<DisableSpecificWarnings>4100;4800;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<AdditionalDependencies>libcmtd.lib;oldnames.lib;ws2_32.lib;libmysql.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -110,6 +110,7 @@
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<CompileAs>CompileAsC</CompileAs>
<DisableSpecificWarnings>4100;4800;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<AdditionalDependencies>libcmt.lib;oldnames.lib;ws2_32.lib;libmysql.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -138,7 +139,6 @@
<ClInclude Include="..\src\common\core.h" />
<ClInclude Include="..\src\common\db.h" />
<ClInclude Include="..\src\common\ers.h" />
- <ClInclude Include="..\src\common\lock.h" />
<ClInclude Include="..\src\common\malloc.h" />
<ClInclude Include="..\src\common\md5calc.h" />
<ClInclude Include="..\src\common\mmo.h" />
@@ -163,7 +163,6 @@
<ClCompile Include="..\src\common\core.c" />
<ClCompile Include="..\src\common\db.c" />
<ClCompile Include="..\src\common\ers.c" />
- <ClCompile Include="..\src\common\lock.c" />
<ClCompile Include="..\src\common\malloc.c" />
<ClCompile Include="..\src\common\md5calc.c" />
<ClCompile Include="..\src\common\nullpo.c" />
diff --git a/vcproj-10/login-server_sql.vcxproj.filters b/vcproj-10/login-server_sql.vcxproj.filters
new file mode 100644
index 000000000..4171d33cd
--- /dev/null
+++ b/vcproj-10/login-server_sql.vcxproj.filters
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <ClCompile Include="..\src\login\account_sql.c">
+ <Filter>login_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\login\ipban_sql.c">
+ <Filter>login_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\login\login.c">
+ <Filter>login_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\login\loginlog_sql.c">
+ <Filter>login_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\3rdparty\mt19937ar\mt19937ar.c">
+ <Filter>3rdparty</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\core.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\db.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\ers.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\malloc.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\md5calc.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\nullpo.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\plugins.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\random.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\showmsg.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\socket.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\sql.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\strlib.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\timer.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\utils.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\src\login\account.h">
+ <Filter>login_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\login\ipban.h">
+ <Filter>login_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\login\loginlog.h">
+ <Filter>login_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\login\login.h">
+ <Filter>login_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\3rdparty\mt19937ar\mt19937ar.h">
+ <Filter>3rdparty</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\cbasetypes.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\version.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\core.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\db.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\ers.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\malloc.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\md5calc.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\mmo.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\nullpo.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\plugin.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\plugins.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\random.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\showmsg.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\socket.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\sql.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\strlib.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\timer.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\utils.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <Filter Include="common">
+ <UniqueIdentifier>{b50ee803-e71d-4d41-8f7d-2dad5839df50}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="login_sql">
+ <UniqueIdentifier>{8eea96ed-d379-4694-ae2e-ffb0be95170c}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="3rdparty">
+ <UniqueIdentifier>{ab5c90ec-923d-4847-a214-45b40818211e}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/vcproj-10/login-server_txt.vcxproj b/vcproj-10/login-server_txt.vcxproj
index f121af46a..ab2a9772f 100644
--- a/vcproj-10/login-server_txt.vcxproj
+++ b/vcproj-10/login-server_txt.vcxproj
@@ -53,7 +53,6 @@
<PreprocessorDefinitions>WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION;WITH_TXT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessToFile>false</PreprocessToFile>
<PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers>
- <MinimalRebuild>true</MinimalRebuild>
<ExceptionHandling>
</ExceptionHandling>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@@ -67,6 +66,7 @@
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<CompileAs>CompileAsC</CompileAs>
<DisableSpecificWarnings>4100;4800;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<AdditionalDependencies>libcmtd.lib;oldnames.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -104,6 +104,7 @@
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<CompileAs>CompileAsC</CompileAs>
<DisableSpecificWarnings>4100;4800;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<AdditionalDependencies>libcmt.lib;oldnames.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -123,6 +124,7 @@
</Link>
</ItemDefinitionGroup>
<ItemGroup>
+ <ClInclude Include="..\src\common\ers.h" />
<ClInclude Include="..\src\login\account.h" />
<ClInclude Include="..\src\login\ipban.h" />
<ClInclude Include="..\src\login\login.h" />
diff --git a/vcproj-10/login-server_txt.vcxproj.filters b/vcproj-10/login-server_txt.vcxproj.filters
new file mode 100644
index 000000000..447e7e772
--- /dev/null
+++ b/vcproj-10/login-server_txt.vcxproj.filters
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <ClCompile Include="..\3rdparty\mt19937ar\mt19937ar.c">
+ <Filter>3rdparty</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\login\account_txt.c">
+ <Filter>login_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\login\ipban_txt.c">
+ <Filter>login_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\login\login.c">
+ <Filter>login_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\login\loginlog_txt.c">
+ <Filter>login_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\core.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\db.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\ers.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\lock.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\malloc.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\md5calc.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\nullpo.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\plugins.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\random.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\showmsg.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\socket.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\strlib.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\timer.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\utils.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\3rdparty\mt19937ar\mt19937ar.h">
+ <Filter>3rdparty</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\login\account.h">
+ <Filter>login_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\login\ipban.h">
+ <Filter>login_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\login\login.h">
+ <Filter>login_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\login\loginlog.h">
+ <Filter>login_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\cbasetypes.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\version.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\core.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\db.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\lock.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\malloc.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\md5calc.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\mmo.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\nullpo.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\plugin.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\plugins.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\random.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\showmsg.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\socket.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\strlib.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\timer.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\utils.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\ers.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <Filter Include="common">
+ <UniqueIdentifier>{be8a59c3-07c1-4edd-9114-964892214f9e}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="login_txt">
+ <UniqueIdentifier>{2b1ebf8e-ab6f-49be-b1f0-52d695ac9282}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="3rdparty">
+ <UniqueIdentifier>{0719c3dc-e4e3-4235-b6d6-bbd3e7c258a5}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/vcproj-10/map-server_sql.vcxproj b/vcproj-10/map-server_sql.vcxproj
index 6fcb16f0f..af05998dc 100644
--- a/vcproj-10/map-server_sql.vcxproj
+++ b/vcproj-10/map-server_sql.vcxproj
@@ -54,7 +54,6 @@
<PreprocessorDefinitions>WIN32;_WIN32;__WIN32;_DEBUG;PCRE_SUPPORT;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessToFile>false</PreprocessToFile>
<PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers>
- <MinimalRebuild>true</MinimalRebuild>
<ExceptionHandling>
</ExceptionHandling>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@@ -68,6 +67,7 @@
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<CompileAs>CompileAsC</CompileAs>
<DisableSpecificWarnings>4018;4100;4800;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<AdditionalDependencies>libcmtd.lib;oldnames.lib;ws2_32.lib;libmysql.lib;zdll.lib;pcre.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -105,6 +105,7 @@
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<CompileAs>CompileAsC</CompileAs>
<DisableSpecificWarnings>4018;4100;4800;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<AdditionalDependencies>libcmt.lib;oldnames.lib;ws2_32.lib;libmysql.lib;zdll.lib;pcre.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -131,7 +132,6 @@
<ClInclude Include="..\src\common\db.h" />
<ClInclude Include="..\src\common\ers.h" />
<ClInclude Include="..\src\common\grfio.h" />
- <ClInclude Include="..\src\common\lock.h" />
<ClInclude Include="..\src\common\malloc.h" />
<ClInclude Include="..\src\common\mapindex.h" />
<ClInclude Include="..\src\common\md5calc.h" />
@@ -173,6 +173,13 @@
<ClInclude Include="..\src\map\pc.h" />
<ClInclude Include="..\src\map\pet.h" />
<ClInclude Include="..\src\map\quest.h" />
+ <ClInclude Include="..\src\map\config\Core.h" />
+ <ClInclude Include="..\src\map\config\Renewal.h" />
+ <ClInclude Include="..\src\map\config\Secure.h" />
+ <ClInclude Include="..\src\map\config\Data\Const.h" />
+ <ClInclude Include="..\src\map\config\Skills\General.h" />
+ <ClInclude Include="..\src\map\config\Skills\Mage_Classes.h" />
+ <ClInclude Include="..\src\map\config\Skills\Swordsman_Classes.h" />
<ClInclude Include="..\src\map\script.h" />
<ClInclude Include="..\src\map\searchstore.h" />
<ClInclude Include="..\src\map\skill.h" />
@@ -188,7 +195,6 @@
<ClCompile Include="..\src\common\db.c" />
<ClCompile Include="..\src\common\ers.c" />
<ClCompile Include="..\src\common\grfio.c" />
- <ClCompile Include="..\src\common\lock.c" />
<ClCompile Include="..\src\common\malloc.c" />
<ClCompile Include="..\src\common\mapindex.c" />
<ClCompile Include="..\src\common\md5calc.c" />
diff --git a/vcproj-10/map-server_sql.vcxproj.filters b/vcproj-10/map-server_sql.vcxproj.filters
new file mode 100644
index 000000000..5351488d6
--- /dev/null
+++ b/vcproj-10/map-server_sql.vcxproj.filters
@@ -0,0 +1,342 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <ClCompile Include="..\src\map\atcommand.c">
+ <Filter>map_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\battle.c">
+ <Filter>map_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\battleground.c">
+ <Filter>map_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\buyingstore.c">
+ <Filter>map_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\chat.c">
+ <Filter>map_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\chrif.c">
+ <Filter>map_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\clif.c">
+ <Filter>map_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\date.c">
+ <Filter>map_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\duel.c">
+ <Filter>map_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\guild.c">
+ <Filter>map_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\homunculus.c">
+ <Filter>map_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\instance.c">
+ <Filter>map_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\intif.c">
+ <Filter>map_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\itemdb.c">
+ <Filter>map_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\log.c">
+ <Filter>map_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\mail.c">
+ <Filter>map_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\map.c">
+ <Filter>map_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\mapreg_sql.c">
+ <Filter>map_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\mercenary.c">
+ <Filter>map_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\mob.c">
+ <Filter>map_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\npc.c">
+ <Filter>map_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\npc_chat.c">
+ <Filter>map_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\party.c">
+ <Filter>map_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\path.c">
+ <Filter>map_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\pc.c">
+ <Filter>map_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\pet.c">
+ <Filter>map_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\quest.c">
+ <Filter>map_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\script.c">
+ <Filter>map_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\searchstore.c">
+ <Filter>map_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\showmsg.c">
+ <Filter>map_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\skill.c">
+ <Filter>map_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\status.c">
+ <Filter>map_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\storage.c">
+ <Filter>map_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\trade.c">
+ <Filter>map_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\unit.c">
+ <Filter>map_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\vending.c">
+ <Filter>map_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\3rdparty\mt19937ar\mt19937ar.c">
+ <Filter>3rdparty</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\core.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\des.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\db.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\ers.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\grfio.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\malloc.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\mapindex.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\md5calc.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\nullpo.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\plugins.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\random.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\socket.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\sql.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\strlib.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\timer.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\utils.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\src\map\atcommand.h">
+ <Filter>map_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\battle.h">
+ <Filter>map_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\battleground.h">
+ <Filter>map_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\buyingstore.h">
+ <Filter>map_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\chat.h">
+ <Filter>map_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\chrif.h">
+ <Filter>map_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\clif.h">
+ <Filter>map_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\date.h">
+ <Filter>map_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\duel.h">
+ <Filter>map_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\guild.h">
+ <Filter>map_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\homunculus.h">
+ <Filter>map_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\instance.h">
+ <Filter>map_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\intif.h">
+ <Filter>map_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\itemdb.h">
+ <Filter>map_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\log.h">
+ <Filter>map_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\mail.h">
+ <Filter>map_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\map.h">
+ <Filter>map_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\mapreg.h">
+ <Filter>map_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\mercenary.h">
+ <Filter>map_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\mob.h">
+ <Filter>map_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\npc.h">
+ <Filter>map_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\party.h">
+ <Filter>map_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\path.h">
+ <Filter>map_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\pc.h">
+ <Filter>map_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\pet.h">
+ <Filter>map_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\quest.h">
+ <Filter>map_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\script.h">
+ <Filter>map_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\searchstore.h">
+ <Filter>map_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\showmsg.h">
+ <Filter>map_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\skill.h">
+ <Filter>map_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\status.h">
+ <Filter>map_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\storage.h">
+ <Filter>map_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\trade.h">
+ <Filter>map_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\unit.h">
+ <Filter>map_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\vending.h">
+ <Filter>map_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\3rdparty\mt19937ar\mt19937ar.h">
+ <Filter>3rdparty</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\version.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\cbasetypes.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\core.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\db.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\ers.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\grfio.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\malloc.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\mapindex.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\md5calc.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\mmo.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\nullpo.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\plugin.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\plugins.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\random.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\socket.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\sql.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\strlib.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\timer.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\utils.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <Filter Include="common">
+ <UniqueIdentifier>{3a137217-ebf7-44ee-95d9-3d7c51d2a199}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="map_sql">
+ <UniqueIdentifier>{8c01a080-5a78-4fb7-96f2-862c33a02230}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="3rdparty">
+ <UniqueIdentifier>{c4845ea8-bcc7-411b-af29-e3842adb6714}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/vcproj-10/map-server_txt.vcxproj b/vcproj-10/map-server_txt.vcxproj
index dfdf549f2..8c31ae6d6 100644
--- a/vcproj-10/map-server_txt.vcxproj
+++ b/vcproj-10/map-server_txt.vcxproj
@@ -53,7 +53,6 @@
<PreprocessorDefinitions>WIN32;_WIN32;__WIN32;_DEBUG;PCRE_SUPPORT;TXT_ONLY;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessToFile>false</PreprocessToFile>
<PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers>
- <MinimalRebuild>true</MinimalRebuild>
<ExceptionHandling>
</ExceptionHandling>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@@ -67,6 +66,7 @@
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<CompileAs>CompileAsC</CompileAs>
<DisableSpecificWarnings>4018;4100;4800;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<AdditionalOptions>/FIXED:NO %(AdditionalOptions)</AdditionalOptions>
@@ -105,6 +105,7 @@
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<CompileAs>CompileAsC</CompileAs>
<DisableSpecificWarnings>4018;4100;4800;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<AdditionalDependencies>libcmt.lib;oldnames.lib;ws2_32.lib;zdll.lib;pcre.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -204,6 +205,13 @@
<ClInclude Include="..\src\map\pc.h" />
<ClInclude Include="..\src\map\pet.h" />
<ClInclude Include="..\src\map\quest.h" />
+ <ClInclude Include="..\src\map\config\Core.h" />
+ <ClInclude Include="..\src\map\config\Renewal.h" />
+ <ClInclude Include="..\src\map\config\Secure.h" />
+ <ClInclude Include="..\src\map\config\Data\Const.h" />
+ <ClInclude Include="..\src\map\config\Skills\General.h" />
+ <ClInclude Include="..\src\map\config\Skills\Mage_Classes.h" />
+ <ClInclude Include="..\src\map\config\Skills\Swordsman_Classes.h" />
<ClInclude Include="..\src\map\script.h" />
<ClInclude Include="..\src\map\searchstore.h" />
<ClInclude Include="..\src\map\skill.h" />
diff --git a/vcproj-10/map-server_txt.vcxproj.filters b/vcproj-10/map-server_txt.vcxproj.filters
new file mode 100644
index 000000000..bf2d728ae
--- /dev/null
+++ b/vcproj-10/map-server_txt.vcxproj.filters
@@ -0,0 +1,342 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <ClCompile Include="..\src\map\atcommand.c">
+ <Filter>map_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\battle.c">
+ <Filter>map_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\battleground.c">
+ <Filter>map_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\buyingstore.c">
+ <Filter>map_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\chat.c">
+ <Filter>map_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\chrif.c">
+ <Filter>map_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\clif.c">
+ <Filter>map_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\core.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\db.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\ers.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\grfio.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\lock.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\date.c">
+ <Filter>map_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\duel.c">
+ <Filter>map_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\guild.c">
+ <Filter>map_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\homunculus.c">
+ <Filter>map_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\instance.c">
+ <Filter>map_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\intif.c">
+ <Filter>map_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\itemdb.c">
+ <Filter>map_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\log.c">
+ <Filter>map_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\mail.c">
+ <Filter>map_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\malloc.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\mapindex.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\md5calc.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\nullpo.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\plugins.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\random.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\showmsg.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\socket.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\strlib.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\timer.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\utils.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\map.c">
+ <Filter>map_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\mapreg_txt.c">
+ <Filter>map_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\mercenary.c">
+ <Filter>map_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\mob.c">
+ <Filter>map_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\npc.c">
+ <Filter>map_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\npc_chat.c">
+ <Filter>map_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\party.c">
+ <Filter>map_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\path.c">
+ <Filter>map_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\pc.c">
+ <Filter>map_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\pet.c">
+ <Filter>map_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\quest.c">
+ <Filter>map_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\script.c">
+ <Filter>map_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\searchstore.c">
+ <Filter>map_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\skill.c">
+ <Filter>map_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\status.c">
+ <Filter>map_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\storage.c">
+ <Filter>map_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\trade.c">
+ <Filter>map_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\unit.c">
+ <Filter>map_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\map\vending.c">
+ <Filter>map_txt</Filter>
+ </ClCompile>
+ <ClCompile Include="..\3rdparty\mt19937ar\mt19937ar.c">
+ <Filter>3rdparty</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\src\map\buyingstore.h">
+ <Filter>map_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\atcommand.h">
+ <Filter>map_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\battle.h">
+ <Filter>map_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\battleground.h">
+ <Filter>map_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\cbasetypes.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\clif.h">
+ <Filter>map_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\chat.h">
+ <Filter>map_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\chrif.h">
+ <Filter>map_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\core.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\db.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\des.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\ers.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\grfio.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\lock.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\mail.h">
+ <Filter>map_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\date.h">
+ <Filter>map_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\duel.h">
+ <Filter>map_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\guild.h">
+ <Filter>map_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\homunculus.h">
+ <Filter>map_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\instance.h">
+ <Filter>map_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\intif.h">
+ <Filter>map_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\itemdb.h">
+ <Filter>map_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\log.h">
+ <Filter>map_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\malloc.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\mapindex.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\md5calc.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\mmo.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\nullpo.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\plugin.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\plugins.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\random.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\showmsg.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\socket.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\strlib.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\timer.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\utils.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\version.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\mob.h">
+ <Filter>map_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\map.h">
+ <Filter>map_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\mapreg.h">
+ <Filter>map_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\mercenary.h">
+ <Filter>map_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\npc.h">
+ <Filter>map_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\party.h">
+ <Filter>map_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\path.h">
+ <Filter>map_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\pc.h">
+ <Filter>map_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\pet.h">
+ <Filter>map_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\quest.h">
+ <Filter>map_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\script.h">
+ <Filter>map_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\searchstore.h">
+ <Filter>map_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\skill.h">
+ <Filter>map_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\status.h">
+ <Filter>map_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\storage.h">
+ <Filter>map_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\trade.h">
+ <Filter>map_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\unit.h">
+ <Filter>map_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\map\vending.h">
+ <Filter>map_txt</Filter>
+ </ClInclude>
+ <ClInclude Include="..\3rdparty\mt19937ar\mt19937ar.h">
+ <Filter>3rdparty</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <Filter Include="common">
+ <UniqueIdentifier>{1a14e4e3-9844-4386-bf22-dd1fe7732bb5}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="map_txt">
+ <UniqueIdentifier>{3c87ae01-115b-4d3b-a856-a3b96ca7b469}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="3rdparty">
+ <UniqueIdentifier>{b4ec69ed-50dd-4ac0-885f-a88bd617ebac}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/vcproj-10/mapcache.vcxproj b/vcproj-10/mapcache.vcxproj
index 5d7f39794..a70f854f9 100644
--- a/vcproj-10/mapcache.vcxproj
+++ b/vcproj-10/mapcache.vcxproj
@@ -53,7 +53,6 @@
<PreprocessorDefinitions>WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;MINICORE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessToFile>false</PreprocessToFile>
<PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers>
- <MinimalRebuild>true</MinimalRebuild>
<ExceptionHandling>
</ExceptionHandling>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@@ -66,6 +65,7 @@
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<CompileAs>CompileAsC</CompileAs>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<AdditionalOptions>/FIXED:NO %(AdditionalOptions)</AdditionalOptions>
@@ -103,6 +103,7 @@
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<CompileAs>CompileAsC</CompileAs>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<AdditionalDependencies>libcmt.lib;oldnames.lib;zdll.lib;%(AdditionalDependencies)</AdditionalDependencies>
diff --git a/vcproj-10/mapcache.vcxproj.filters b/vcproj-10/mapcache.vcxproj.filters
new file mode 100644
index 000000000..713cdb64b
--- /dev/null
+++ b/vcproj-10/mapcache.vcxproj.filters
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <ClCompile Include="..\src\common\core.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\des.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\grfio.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\malloc.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\showmsg.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\strlib.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\utils.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\tool\mapcache.c">
+ <Filter>mapcache</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\src\common\cbasetypes.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\core.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\des.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\grfio.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\malloc.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\mmo.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\showmsg.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\strlib.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\utils.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\version.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <Filter Include="common">
+ <UniqueIdentifier>{a9c2444c-ffec-4e89-8412-e530231d79dc}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="mapcache">
+ <UniqueIdentifier>{5ea9d6f7-0a10-4bfb-ad39-478e4b1d8a0d}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/vcproj-10/txt-converter-char.vcxproj b/vcproj-10/txt-converter-char.vcxproj
index 6bcbc3665..88e79604f 100644
--- a/vcproj-10/txt-converter-char.vcxproj
+++ b/vcproj-10/txt-converter-char.vcxproj
@@ -55,7 +55,6 @@
<PreprocessorDefinitions>WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION;MINICORE;TXT_SQL_CONVERT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessToFile>false</PreprocessToFile>
<PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers>
- <MinimalRebuild>true</MinimalRebuild>
<ExceptionHandling>
</ExceptionHandling>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@@ -68,6 +67,7 @@
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<CompileAs>CompileAsC</CompileAs>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<AdditionalDependencies>libcmtd.lib;oldnames.lib;ws2_32.lib;libmysql.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -108,6 +108,7 @@
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<CompileAs>CompileAsC</CompileAs>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<AdditionalDependencies>libcmt.lib;oldnames.lib;ws2_32.lib;libmysql.lib;%(AdditionalDependencies)</AdditionalDependencies>
diff --git a/vcproj-10/txt-converter-char.vcxproj.filters b/vcproj-10/txt-converter-char.vcxproj.filters
new file mode 100644
index 000000000..4068225e6
--- /dev/null
+++ b/vcproj-10/txt-converter-char.vcxproj.filters
@@ -0,0 +1,156 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <ClCompile Include="..\src\txt-converter\char-converter.c">
+ <Filter>converter</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\char\char.c">
+ <Filter>char</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\char_sql\char.c">
+ <Filter>char_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\core.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\ers.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\sql.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\strlib.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\timer.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\utils.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\malloc.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\mapindex.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\showmsg.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\char_sql\inter.c">
+ <Filter>char_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\char\int_storage.c">
+ <Filter>char</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\char_sql\int_pet.c">
+ <Filter>char_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\char_sql\int_party.c">
+ <Filter>char_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\char_sql\int_mercenary.c">
+ <Filter>char_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\char\int_guild.c">
+ <Filter>char</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\char_sql\int_guild.c">
+ <Filter>char_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\char\int_party.c">
+ <Filter>char</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\char\int_pet.c">
+ <Filter>char</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\char_sql\int_storage.c">
+ <Filter>char_sql</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\char\inter.c">
+ <Filter>char</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\src\char_sql\char.h">
+ <Filter>char_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\char\char.h">
+ <Filter>char</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\ers.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\core.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\utils.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\sql.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\strlib.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\timer.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\malloc.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\mapindex.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\showmsg.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\char_sql\inter.h">
+ <Filter>char_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\char\int_storage.h">
+ <Filter>char</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\char_sql\int_pet.h">
+ <Filter>char_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\char_sql\int_party.h">
+ <Filter>char_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\char_sql\int_mercenary.h">
+ <Filter>char_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\char_sql\int_guild.h">
+ <Filter>char_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\char\int_guild.h">
+ <Filter>char</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\char\int_pet.h">
+ <Filter>char</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\char\int_party.h">
+ <Filter>char</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\char_sql\int_storage.h">
+ <Filter>char_sql</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\char\inter.h">
+ <Filter>char</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <Filter Include="common">
+ <UniqueIdentifier>{8cd3ef2c-94f8-4117-9456-0718099b6cff}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="char">
+ <UniqueIdentifier>{39dba2e0-24d6-4e27-bca0-512f4124aafd}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="char_sql">
+ <UniqueIdentifier>{9ff3fa33-e859-4bec-8ef5-f4b35906784c}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="converter">
+ <UniqueIdentifier>{9b273f25-9226-4784-8e88-3085194c0c8a}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/vcproj-10/txt-converter-login.vcxproj b/vcproj-10/txt-converter-login.vcxproj
index 5995d5868..26e87b993 100644
--- a/vcproj-10/txt-converter-login.vcxproj
+++ b/vcproj-10/txt-converter-login.vcxproj
@@ -55,7 +55,6 @@
<PreprocessorDefinitions>WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION;MINICORE;WITH_TXT;WITH_SQL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessToFile>false</PreprocessToFile>
<PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers>
- <MinimalRebuild>true</MinimalRebuild>
<ExceptionHandling>
</ExceptionHandling>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@@ -68,6 +67,7 @@
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<CompileAs>CompileAsC</CompileAs>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<AdditionalDependencies>libcmtd.lib;oldnames.lib;ws2_32.lib;libmysql.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -108,6 +108,7 @@
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<CompileAs>CompileAsC</CompileAs>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<AdditionalDependencies>libcmt.lib;oldnames.lib;ws2_32.lib;libmysql.lib;%(AdditionalDependencies)</AdditionalDependencies>
diff --git a/vcproj-10/txt-converter-login.vcxproj.filters b/vcproj-10/txt-converter-login.vcxproj.filters
new file mode 100644
index 000000000..668acec99
--- /dev/null
+++ b/vcproj-10/txt-converter-login.vcxproj.filters
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <ClCompile Include="..\src\login\account_txt.c">
+ <Filter>login</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\login\account_sql.c">
+ <Filter>login</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\core.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\db.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\ers.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\lock.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\malloc.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\showmsg.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\sql.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\strlib.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\timer.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\common\utils.c">
+ <Filter>common</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\txt-converter\login-converter.c">
+ <Filter>converter</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\src\login\account.h">
+ <Filter>login</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\lock.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\core.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\db.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\ers.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\utils.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\malloc.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\showmsg.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\sql.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\strlib.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\common\timer.h">
+ <Filter>common</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <Filter Include="common">
+ <UniqueIdentifier>{23e12c5b-4a3f-49aa-880b-3cdd20026aaa}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="login">
+ <UniqueIdentifier>{47a4218f-2ab2-4032-b56d-70593a821fb0}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="converter">
+ <UniqueIdentifier>{6d4aed21-4896-4192-8133-dd5f7ab3fb6d}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/vcproj-6/char-server_sql.dsp b/vcproj-6/char-server_sql.dsp
deleted file mode 100644
index f64c8d67e..000000000
--- a/vcproj-6/char-server_sql.dsp
+++ /dev/null
@@ -1,324 +0,0 @@
-# Microsoft Developer Studio Project File - Name="char_sql" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=char_sql - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "char-server_sql.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "char-server_sql.mak" CFG="char_sql - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "char_sql - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "char_sql - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "char_sql - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir ".."
-# PROP Intermediate_Dir "tmp\char_sql\Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /W3 /Zi /O2 /I "..\3rdparty\msinttypes\include" /I "..\3rdparty\mysql\include" /I "..\3rdparty\mt19937ar" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WIN32" /D "__WIN32" /D FD_SETSIZE=4096 /D "DB_MANUAL_CAST_TO_UNION" /FD /GF /c
-# SUBTRACT CPP /YX
-# ADD BASE RSC /l 0x405 /d "NDEBUG"
-# ADD RSC /l 0x417 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 kernel32.lib ws2_32.lib libmysql.lib /nologo /subsystem:console /debug /machine:I386 /libpath:"..\3rdparty\mysql\lib"
-
-!ELSEIF "$(CFG)" == "char_sql - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir ".."
-# PROP Intermediate_Dir "tmp\char_sql\Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /Gi /ZI /Od /I "..\3rdparty\msinttypes\include" /I "..\3rdparty\mysql\include" /I "..\3rdparty\mt19937ar" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WIN32" /D "__WIN32" /D FD_SETSIZE=4096 /D "DB_MANUAL_CAST_TO_UNION" /FD /GZ /c
-# SUBTRACT CPP /YX
-# ADD BASE RSC /l 0x405 /d "_DEBUG"
-# ADD RSC /l 0x417 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib ws2_32.lib libmysql.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\3rdparty\mysql\lib"
-
-!ENDIF
-
-# Begin Target
-
-# Name "char_sql - Win32 Release"
-# Name "char_sql - Win32 Debug"
-# Begin Group "3rdparty"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\3rdparty\mt19937ar\mt19937ar.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\3rdparty\mt19937ar\mt19937ar.h
-# End Source File
-# End Group
-# Begin Group "common"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\src\common\cbasetypes.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\core.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\core.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\db.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\db.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\ers.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\ers.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\malloc.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\malloc.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\mapindex.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\mapindex.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\mmo.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\nullpo.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\nullpo.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\plugin.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\plugins.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\plugins.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\random.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\random.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\showmsg.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\showmsg.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\socket.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\socket.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\sql.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\sql.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\strlib.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\strlib.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\timer.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\timer.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\utils.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\utils.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\version.h
-# End Source File
-# End Group
-# Begin Group "char_sql"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\src\char_sql\char.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char_sql\char.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char_sql\int_auction.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char_sql\int_auction.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char_sql\int_guild.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char_sql\int_guild.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char_sql\int_homun.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char_sql\int_homun.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char_sql\int_mail.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char_sql\int_mail.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char_sql\int_mercenary.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char_sql\int_mercenary.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char_sql\int_party.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char_sql\int_party.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char_sql\int_pet.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char_sql\int_pet.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char_sql\int_quest.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char_sql\int_quest.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char_sql\int_storage.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char_sql\int_storage.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char_sql\inter.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char_sql\inter.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/vcproj-6/char-server_txt.dsp b/vcproj-6/char-server_txt.dsp
deleted file mode 100644
index e5d9db918..000000000
--- a/vcproj-6/char-server_txt.dsp
+++ /dev/null
@@ -1,300 +0,0 @@
-# Microsoft Developer Studio Project File - Name="char_txt" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=char_txt - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "char-server_txt.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "char-server_txt.mak" CFG="char_txt - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "char_txt - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "char_txt - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "char_txt - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir ".."
-# PROP Intermediate_Dir "tmp\char_txt\Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /W3 /Zi /O2 /I "..\3rdparty\msinttypes\include" /I "..\3rdparty\mt19937ar" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WIN32" /D "__WIN32" /D FD_SETSIZE=4096 /D "DB_MANUAL_CAST_TO_UNION" /D "TXT_ONLY" /FD /GF /c
-# SUBTRACT CPP /YX
-# ADD BASE RSC /l 0x405 /d "NDEBUG"
-# ADD RSC /l 0x417 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 kernel32.lib ws2_32.lib /nologo /subsystem:console /debug /machine:I386
-
-!ELSEIF "$(CFG)" == "char_txt - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir ".."
-# PROP Intermediate_Dir "tmp\char_txt\Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /Gi /ZI /Od /I "..\3rdparty\msinttypes\include" /I "..\3rdparty\mt19937ar" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WIN32" /D "__WIN32" /D FD_SETSIZE=4096 /D "DB_MANUAL_CAST_TO_UNION" /D "TXT_ONLY" /FD /GZ /c
-# SUBTRACT CPP /YX
-# ADD BASE RSC /l 0x405 /d "_DEBUG"
-# ADD RSC /l 0x417 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib ws2_32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-
-!ENDIF
-
-# Begin Target
-
-# Name "char_txt - Win32 Release"
-# Name "char_txt - Win32 Debug"
-# Begin Group "3rdparty"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\3rdparty\mt19937ar\mt19937ar.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\3rdparty\mt19937ar\mt19937ar.h
-# End Source File
-# End Group
-# Begin Group "common"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\src\common\cbasetypes.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\core.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\core.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\db.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\db.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\ers.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\ers.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\lock.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\lock.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\malloc.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\malloc.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\mapindex.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\mapindex.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\mmo.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\nullpo.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\nullpo.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\plugin.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\plugins.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\plugins.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\random.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\random.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\showmsg.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\showmsg.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\socket.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\socket.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\strlib.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\strlib.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\timer.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\timer.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\utils.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\utils.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\version.h
-# End Source File
-# End Group
-# Begin Group "char_txt"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\src\char\char.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char\char.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char\int_guild.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char\int_guild.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char\int_homun.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char\int_homun.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char\int_party.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char\int_party.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char\int_pet.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char\int_pet.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char\int_status.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char\int_status.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char\int_storage.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char\int_storage.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char\inter.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char\inter.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/vcproj-6/login-server_sql.dsp b/vcproj-6/login-server_sql.dsp
deleted file mode 100644
index 54c953466..000000000
--- a/vcproj-6/login-server_sql.dsp
+++ /dev/null
@@ -1,276 +0,0 @@
-# Microsoft Developer Studio Project File - Name="login_sql" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=login_sql - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "login-server_sql.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "login-server_sql.mak" CFG="login_sql - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "login_sql - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "login_sql - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "login_sql - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir ".."
-# PROP Intermediate_Dir "tmp\login_sql\Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /W3 /Zi /O2 /I "..\3rdparty\msinttypes\include" /I "..\3rdparty\mysql\include" /I "..\3rdparty\mt19937ar" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WIN32" /D "__WIN32" /D FD_SETSIZE=4096 /D "DB_MANUAL_CAST_TO_UNION" /D "WITH_SQL" /FD /GF /c
-# SUBTRACT CPP /YX
-# ADD BASE RSC /l 0x405 /d "NDEBUG"
-# ADD RSC /l 0x417 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 kernel32.lib ws2_32.lib libmysql.lib /nologo /subsystem:console /debug /machine:I386 /libpath:"..\3rdparty\mysql\lib"
-
-!ELSEIF "$(CFG)" == "login_sql - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir ".."
-# PROP Intermediate_Dir "tmp\login_sql\Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /Gi /ZI /Od /I "..\3rdparty\msinttypes\include" /I "..\3rdparty\mysql\include" /I "..\3rdparty\mt19937ar" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WIN32" /D "__WIN32" /D FD_SETSIZE=4096 /D "DB_MANUAL_CAST_TO_UNION" /D "WITH_SQL" /FD /GZ /c
-# SUBTRACT CPP /YX
-# ADD BASE RSC /l 0x405 /d "_DEBUG"
-# ADD RSC /l 0x417 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib ws2_32.lib libmysql.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\3rdparty\mysql\lib"
-
-!ENDIF
-
-# Begin Target
-
-# Name "login_sql - Win32 Release"
-# Name "login_sql - Win32 Debug"
-# Begin Group "3rdparty"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\3rdparty\mt19937ar\mt19937ar.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\3rdparty\mt19937ar\mt19937ar.h
-# End Source File
-# End Group
-# Begin Group "common"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\src\common\cbasetypes.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\core.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\core.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\db.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\db.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\ers.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\ers.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\malloc.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\malloc.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\mapindex.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\mapindex.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\md5calc.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\md5calc.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\mmo.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\nullpo.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\nullpo.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\plugin.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\plugins.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\plugins.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\random.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\random.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\showmsg.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\showmsg.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\socket.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\socket.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\sql.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\sql.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\strlib.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\strlib.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\timer.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\timer.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\utils.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\utils.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\version.h
-# End Source File
-# End Group
-# Begin Group "login_sql"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\src\login\account.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\login\account_sql.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\login\ipban.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\login\ipban_sql.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\login\login.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\login\login.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\login\loginlog.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\login\loginlog_sql.c
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/vcproj-6/login-server_txt.dsp b/vcproj-6/login-server_txt.dsp
deleted file mode 100644
index 642375fb7..000000000
--- a/vcproj-6/login-server_txt.dsp
+++ /dev/null
@@ -1,276 +0,0 @@
-# Microsoft Developer Studio Project File - Name="login_txt" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=login_txt - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "login-server_txt.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "login-server_txt.mak" CFG="login_txt - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "login_txt - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "login_txt - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "login_txt - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir ".."
-# PROP Intermediate_Dir "tmp\login_txt\Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /W3 /Zi /O2 /I "..\3rdparty\msinttypes\include" /I "..\3rdparty\mt19937ar" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WIN32" /D "__WIN32" /D FD_SETSIZE=4096 /D "DB_MANUAL_CAST_TO_UNION" /D "WITH_TXT" /FD /GF /c
-# SUBTRACT CPP /YX
-# ADD BASE RSC /l 0x405 /d "NDEBUG"
-# ADD RSC /l 0x417 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 kernel32.lib ws2_32.lib /nologo /subsystem:console /debug /machine:I386
-
-!ELSEIF "$(CFG)" == "login_txt - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir ".."
-# PROP Intermediate_Dir "tmp\login_txt\Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /Gi /ZI /Od /I "..\3rdparty\msinttypes\include" /I "..\3rdparty\mt19937ar" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WIN32" /D "__WIN32" /D FD_SETSIZE=4096 /D "DB_MANUAL_CAST_TO_UNION" /D "WITH_TXT" /FD /GZ /c
-# SUBTRACT CPP /YX
-# ADD BASE RSC /l 0x405 /d "_DEBUG"
-# ADD RSC /l 0x417 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib ws2_32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-
-!ENDIF
-
-# Begin Target
-
-# Name "login_txt - Win32 Release"
-# Name "login_txt - Win32 Debug"
-# Begin Group "3rdparty"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\3rdparty\mt19937ar\mt19937ar.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\3rdparty\mt19937ar\mt19937ar.h
-# End Source File
-# End Group
-# Begin Group "common"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\src\common\cbasetypes.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\core.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\core.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\db.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\db.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\ers.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\ers.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\lock.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\lock.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\malloc.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\malloc.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\mapindex.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\mapindex.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\md5calc.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\md5calc.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\mmo.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\nullpo.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\nullpo.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\plugin.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\plugins.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\plugins.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\random.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\random.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\showmsg.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\showmsg.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\socket.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\socket.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\strlib.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\strlib.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\timer.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\timer.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\utils.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\utils.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\version.h
-# End Source File
-# End Group
-# Begin Group "login_txt"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\src\login\account.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\login\account_txt.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\login\ipban.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\login\ipban_txt.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\login\login.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\login\login.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\login\loginlog.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\login\loginlog_txt.c
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/vcproj-6/map-server_sql.dsp b/vcproj-6/map-server_sql.dsp
deleted file mode 100644
index 9246c6b17..000000000
--- a/vcproj-6/map-server_sql.dsp
+++ /dev/null
@@ -1,528 +0,0 @@
-# Microsoft Developer Studio Project File - Name="map_sql" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=map_sql - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "map-server_sql.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "map-server_sql.mak" CFG="map_sql - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "map_sql - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "map_sql - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "map_sql - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir ".."
-# PROP Intermediate_Dir "tmp\map_sql\Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /W3 /Zi /O2 /I "..\3rdparty\mysql\include" /I "..\3rdparty\msinttypes\include" /I "..\3rdparty\pcre\include" /I "..\3rdparty\zlib\include" /I "..\3rdparty\mt19937ar" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WIN32" /D "__WIN32" /D FD_SETSIZE=4096 /D "DB_MANUAL_CAST_TO_UNION" /D "PCRE_SUPPORT" /FD /GF /c
-# SUBTRACT CPP /YX
-# ADD BASE RSC /l 0x405 /d "NDEBUG"
-# ADD RSC /l 0x417 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 libmysql.lib kernel32.lib ws2_32.lib pcre.lib zdll.lib /nologo /subsystem:console /debug /machine:I386 /libpath:"..\3rdparty\mysql\lib" /libpath:"..\3rdparty\pcre\lib" /libpath:"..\3rdparty\zlib\lib"
-
-!ELSEIF "$(CFG)" == "map_sql - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir ".."
-# PROP Intermediate_Dir "tmp\map_sql\Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /Gi /ZI /Od /I "..\3rdparty\mysql\include" /I "..\3rdparty\msinttypes\include" /I "..\3rdparty\pcre\include" /I "..\3rdparty\zlib\include" /I "..\3rdparty\mt19937ar" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WIN32" /D "__WIN32" /D FD_SETSIZE=4096 /D "DB_MANUAL_CAST_TO_UNION" /D "PCRE_SUPPORT" /FD /GZ /c
-# SUBTRACT CPP /YX
-# ADD BASE RSC /l 0x405 /d "_DEBUG"
-# ADD RSC /l 0x417 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 libmysql.lib kernel32.lib ws2_32.lib pcre.lib zdll.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\3rdparty\mysql\lib" /libpath:"..\3rdparty\pcre\lib" /libpath:"..\3rdparty\zlib\lib"
-
-!ENDIF
-
-# Begin Target
-
-# Name "map_sql - Win32 Release"
-# Name "map_sql - Win32 Debug"
-# Begin Group "3rdparty"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\3rdparty\mt19937ar\mt19937ar.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\3rdparty\mt19937ar\mt19937ar.h
-# End Source File
-# End Group
-# Begin Group "common"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\src\common\cbasetypes.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\core.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\core.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\db.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\db.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\ers.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\ers.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\grfio.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\grfio.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\malloc.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\malloc.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\mapindex.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\mapindex.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\md5calc.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\md5calc.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\mmo.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\nullpo.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\nullpo.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\plugin.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\plugins.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\plugins.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\random.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\random.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\showmsg.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\showmsg.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\socket.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\socket.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\sql.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\sql.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\strlib.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\strlib.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\timer.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\timer.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\utils.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\utils.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\version.h
-# End Source File
-# End Group
-# Begin Group "map_sql"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\src\map\atcommand.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\atcommand.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\battle.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\battle.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\battleground.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\battleground.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\buyingstore.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\buyingstore.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\chat.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\chat.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\chrif.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\chrif.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\clif.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\clif.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\date.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\date.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\duel.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\duel.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\guild.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\guild.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\homunculus.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\homunculus.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\instance.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\instance.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\intif.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\intif.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\itemdb.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\itemdb.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\log.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\log.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\mail.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\mail.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\map.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\map.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\mapreg.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\mapreg_sql.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\mercenary.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\mercenary.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\mob.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\mob.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\npc.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\npc.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\npc_chat.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\party.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\party.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\path.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\path.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\pc.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\pc.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\pet.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\pet.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\quest.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\quest.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\script.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\script.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\searchstore.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\searchstore.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\skill.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\skill.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\status.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\status.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\storage.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\storage.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\trade.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\trade.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\unit.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\unit.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\vending.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\vending.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/vcproj-6/map-server_txt.dsp b/vcproj-6/map-server_txt.dsp
deleted file mode 100644
index 00e4cf716..000000000
--- a/vcproj-6/map-server_txt.dsp
+++ /dev/null
@@ -1,528 +0,0 @@
-# Microsoft Developer Studio Project File - Name="map_txt" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=map_txt - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "map-server_txt.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "map-server_txt.mak" CFG="map_txt - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "map_txt - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "map_txt - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "map_txt - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir ".."
-# PROP Intermediate_Dir "tmp\map_txt\Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /W3 /Zi /O2 /I "..\3rdparty\msinttypes\include" /I "..\3rdparty\pcre\include" /I "..\3rdparty\zlib\include" /I "..\3rdparty\mt19937ar" /D "NDEBUG" /D "TXT_ONLY" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WIN32" /D "__WIN32" /D FD_SETSIZE=4096 /D "DB_MANUAL_CAST_TO_UNION" /D "PCRE_SUPPORT" /FD /GF /c
-# SUBTRACT CPP /YX
-# ADD BASE RSC /l 0x405 /d "NDEBUG"
-# ADD RSC /l 0x417 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 kernel32.lib ws2_32.lib pcre.lib zdll.lib /nologo /subsystem:console /debug /machine:I386 /libpath:"..\3rdparty\pcre\lib" /libpath:"..\3rdparty\zlib\lib"
-
-!ELSEIF "$(CFG)" == "map_txt - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir ".."
-# PROP Intermediate_Dir "tmp\map_txt\Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /Gi /ZI /Od /I "..\3rdparty\msinttypes\include" /I "..\3rdparty\pcre\include" /I "..\3rdparty\zlib\include" /I "..\3rdparty\mt19937ar" /D "_DEBUG" /D "TXT_ONLY" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WIN32" /D "__WIN32" /D FD_SETSIZE=4096 /D "DB_MANUAL_CAST_TO_UNION" /D "PCRE_SUPPORT" /FD /GZ /c
-# SUBTRACT CPP /YX
-# ADD BASE RSC /l 0x405 /d "_DEBUG"
-# ADD RSC /l 0x417 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib ws2_32.lib pcre.lib zdll.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\3rdparty\pcre\lib" /libpath:"..\3rdparty\zlib\lib"
-
-!ENDIF
-
-# Begin Target
-
-# Name "map_txt - Win32 Release"
-# Name "map_txt - Win32 Debug"
-# Begin Group "3rdparty"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\3rdparty\mt19937ar\mt19937ar.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\3rdparty\mt19937ar\mt19937ar.h
-# End Source File
-# End Group
-# Begin Group "common"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\src\common\cbasetypes.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\core.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\core.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\db.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\db.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\ers.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\ers.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\grfio.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\grfio.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\lock.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\lock.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\malloc.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\malloc.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\mapindex.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\mapindex.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\md5calc.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\md5calc.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\mmo.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\nullpo.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\nullpo.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\plugin.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\plugins.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\plugins.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\random.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\random.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\showmsg.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\showmsg.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\socket.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\socket.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\strlib.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\strlib.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\timer.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\timer.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\utils.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\utils.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\version.h
-# End Source File
-# End Group
-# Begin Group "map_txt"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\src\map\atcommand.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\atcommand.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\battle.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\battle.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\battleground.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\battleground.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\buyingstore.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\buyingstore.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\chat.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\chat.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\chrif.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\chrif.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\clif.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\clif.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\date.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\date.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\duel.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\duel.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\guild.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\guild.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\homunculus.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\homunculus.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\instance.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\instance.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\intif.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\intif.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\itemdb.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\itemdb.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\log.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\log.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\mail.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\mail.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\map.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\map.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\mapreg.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\mapreg_txt.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\mercenary.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\mercenary.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\mob.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\mob.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\npc.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\npc.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\npc_chat.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\party.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\party.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\path.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\path.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\pc.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\pc.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\pet.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\pet.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\quest.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\quest.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\script.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\script.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\searchstore.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\searchstore.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\skill.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\skill.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\status.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\status.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\storage.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\storage.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\trade.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\trade.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\unit.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\unit.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\vending.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\map\vending.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/vcproj-6/mapcache.dsp b/vcproj-6/mapcache.dsp
deleted file mode 100644
index 015835d2d..000000000
--- a/vcproj-6/mapcache.dsp
+++ /dev/null
@@ -1,160 +0,0 @@
-# Microsoft Developer Studio Project File - Name="mapcache" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=mapcache - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "mapcache.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "mapcache.mak" CFG="mapcache - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "mapcache - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "mapcache - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "mapcache - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir ".."
-# PROP Intermediate_Dir "tmp\mapcache\Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /W3 /Zi /O2 /I "..\3rdparty\msinttypes\include" /I "..\3rdparty\zlib\include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WIN32" /D "__WIN32" /D "MINICORE" /FD /GF /c
-# SUBTRACT CPP /YX
-# ADD BASE RSC /l 0x405 /d "NDEBUG"
-# ADD RSC /l 0x417 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 kernel32.lib zdll.lib /nologo /subsystem:console /debug /machine:I386 /libpath:"..\3rdparty\zlib\lib"
-
-!ELSEIF "$(CFG)" == "mapcache - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir ".."
-# PROP Intermediate_Dir "tmp\mapcache\Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /Gi /ZI /Od /I "..\3rdparty\msinttypes\include" /I "..\3rdparty\zlib\include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WIN32" /D "__WIN32" /D "MINICORE" /FD /GZ /c
-# SUBTRACT CPP /YX
-# ADD BASE RSC /l 0x405 /d "_DEBUG"
-# ADD RSC /l 0x417 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib zdll.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\3rdparty\zlib\lib"
-
-!ENDIF
-
-# Begin Target
-
-# Name "mapcache - Win32 Release"
-# Name "mapcache - Win32 Debug"
-# Begin Group "common"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\src\common\cbasetypes.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\core.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\core.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\grfio.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\grfio.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\malloc.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\malloc.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\mmo.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\showmsg.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\showmsg.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\strlib.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\strlib.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\utils.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\utils.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\version.h
-# End Source File
-# End Group
-# Begin Group "mapcache"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\src\tool\mapcache.c
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/vcproj-6/plugin-console.dsp b/vcproj-6/plugin-console.dsp
deleted file mode 100644
index 3794e60ed..000000000
--- a/vcproj-6/plugin-console.dsp
+++ /dev/null
@@ -1,107 +0,0 @@
-# Microsoft Developer Studio Project File - Name="plugin_console" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=plugin_console - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "plugin-console.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "plugin-console.mak" CFG="plugin_console - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "plugin_console - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "plugin_console - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "plugin_console - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\plugins"
-# PROP Intermediate_Dir "tmp\plugin_console\Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CONSOLE_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /O2 /I "..\3rdparty\msinttypes\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_WIN32" /D "__WIN32" /FD /c
-# SUBTRACT CPP /YX
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /Oicf /win32
-# SUBTRACT MTL /mktyplib203
-# ADD BASE RSC /l 0x405 /d "NDEBUG"
-# ADD RSC /l 0x417 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib /nologo /dll /machine:I386 /out:"..\plugins\console.dll"
-
-!ELSEIF "$(CFG)" == "plugin_console - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\plugins"
-# PROP Intermediate_Dir "tmp\plugin_console\Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CONSOLE_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /ZI /Od /I "..\3rdparty\msinttypes\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_WIN32" /D "__WIN32" /FD /GZ /c
-# SUBTRACT CPP /YX
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /Oicf /win32
-# SUBTRACT MTL /mktyplib203
-# ADD BASE RSC /l 0x405 /d "_DEBUG"
-# ADD RSC /l 0x417 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib /nologo /dll /debug /machine:I386 /out:"..\plugins\console.dll" /pdbtype:sept
-
-!ENDIF
-
-# Begin Target
-
-# Name "plugin_console - Win32 Release"
-# Name "plugin_console - Win32 Debug"
-# Begin Group "console"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\src\plugins\console.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\plugins\console.def
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/vcproj-6/plugin-pid.dsp b/vcproj-6/plugin-pid.dsp
deleted file mode 100644
index b9dc130e9..000000000
--- a/vcproj-6/plugin-pid.dsp
+++ /dev/null
@@ -1,107 +0,0 @@
-# Microsoft Developer Studio Project File - Name="plugin_pid" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=plugin_pid - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "plugin-pid.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "plugin-pid.mak" CFG="plugin_pid - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "plugin_pid - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "plugin_pid - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "plugin_pid - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\plugins"
-# PROP Intermediate_Dir "tmp\plugin_pid\Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PID_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /O2 /I "..\3rdparty\msinttypes\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_WIN32" /D "__WIN32" /FD /c
-# SUBTRACT CPP /YX
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /Oicf /win32
-# SUBTRACT MTL /mktyplib203
-# ADD BASE RSC /l 0x405 /d "NDEBUG"
-# ADD RSC /l 0x417 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib /nologo /dll /machine:I386 /out:"..\plugins\pid.dll"
-
-!ELSEIF "$(CFG)" == "plugin_pid - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\plugins"
-# PROP Intermediate_Dir "tmp\plugin_pid\Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PID_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /ZI /Od /I "..\3rdparty\msinttypes\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_WIN32" /D "__WIN32" /FD /GZ /c
-# SUBTRACT CPP /YX
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /Oicf /win32
-# SUBTRACT MTL /mktyplib203
-# ADD BASE RSC /l 0x405 /d "_DEBUG"
-# ADD RSC /l 0x417 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib /nologo /dll /debug /machine:I386 /out:"..\plugins\pid.dll" /pdbtype:sept
-
-!ENDIF
-
-# Begin Target
-
-# Name "plugin_pid - Win32 Release"
-# Name "plugin_pid - Win32 Debug"
-# Begin Group "pid"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\src\plugins\pid.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\plugins\pid.def
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/vcproj-6/txt-converter-char.dsp b/vcproj-6/txt-converter-char.dsp
deleted file mode 100644
index 0a6684e32..000000000
--- a/vcproj-6/txt-converter-char.dsp
+++ /dev/null
@@ -1,576 +0,0 @@
-# Microsoft Developer Studio Project File - Name="txt_converter_char" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=txt_converter_char - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "txt-converter-char.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "txt-converter-char.mak" CFG="txt_converter_char - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "txt_converter_char - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "txt_converter_char - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "txt_converter_char - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir ".."
-# PROP Intermediate_Dir "tmp\txt_converter_char\Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /W3 /O2 /I "..\3rdparty\msinttypes\include" /I "..\3rdparty\mysql\include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WIN32" /D "__WIN32" /D "DB_MANUAL_CAST_TO_UNION" /D "MINICORE" /D "TXT_SQL_CONVERT" /FD /c
-# SUBTRACT CPP /YX
-# ADD BASE RSC /l 0x405 /d "NDEBUG"
-# ADD RSC /l 0x417 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 kernel32.lib libmysql.lib /nologo /subsystem:console /machine:I386 /libpath:"..\3rdparty\mysql\lib"
-
-!ELSEIF "$(CFG)" == "txt_converter_char - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir ".."
-# PROP Intermediate_Dir "tmp\txt_converter_char\Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /ZI /Od /I "..\3rdparty\msinttypes\include" /I "..\3rdparty\mysql\include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WIN32" /D "__WIN32" /D "DB_MANUAL_CAST_TO_UNION" /D "MINICORE" /D "TXT_SQL_CONVERT" /FD /GZ /c
-# SUBTRACT CPP /YX
-# ADD BASE RSC /l 0x405 /d "_DEBUG"
-# ADD RSC /l 0x417 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib libmysql.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\3rdparty\mysql\lib"
-
-!ENDIF
-
-# Begin Target
-
-# Name "txt_converter_char - Win32 Release"
-# Name "txt_converter_char - Win32 Debug"
-# Begin Group "common"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\src\common\cbasetypes.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\core.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\core.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\db.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\db.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\ers.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\ers.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\lock.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\lock.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\malloc.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\malloc.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\mapindex.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\mapindex.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\mmo.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\showmsg.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\showmsg.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\sql.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\sql.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\strlib.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\strlib.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\timer.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\timer.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\utils.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\utils.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\version.h
-# End Source File
-# End Group
-# Begin Group "char_sql"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\src\char_sql\char.c
-
-!IF "$(CFG)" == "txt_converter_char - Win32 Release"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Release\char_sql"
-
-!ELSEIF "$(CFG)" == "txt_converter_char - Win32 Debug"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Debug\char_sql"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char_sql\char.h
-
-!IF "$(CFG)" == "txt_converter_char - Win32 Release"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Release\char_sql"
-
-!ELSEIF "$(CFG)" == "txt_converter_char - Win32 Debug"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Debug\char_sql"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char_sql\int_guild.c
-
-!IF "$(CFG)" == "txt_converter_char - Win32 Release"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Release\char_sql"
-
-!ELSEIF "$(CFG)" == "txt_converter_char - Win32 Debug"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Debug\char_sql"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char_sql\int_guild.h
-
-!IF "$(CFG)" == "txt_converter_char - Win32 Release"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Release\char_sql"
-
-!ELSEIF "$(CFG)" == "txt_converter_char - Win32 Debug"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Debug\char_sql"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char_sql\int_mercenary.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char_sql\int_mercenary.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char_sql\int_party.c
-
-!IF "$(CFG)" == "txt_converter_char - Win32 Release"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Release\char_sql"
-
-!ELSEIF "$(CFG)" == "txt_converter_char - Win32 Debug"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Debug\char_sql"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char_sql\int_party.h
-
-!IF "$(CFG)" == "txt_converter_char - Win32 Release"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Release\char_sql"
-
-!ELSEIF "$(CFG)" == "txt_converter_char - Win32 Debug"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Debug\char_sql"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char_sql\int_pet.c
-
-!IF "$(CFG)" == "txt_converter_char - Win32 Release"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Release\char_sql"
-
-!ELSEIF "$(CFG)" == "txt_converter_char - Win32 Debug"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Debug\char_sql"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char_sql\int_pet.h
-
-!IF "$(CFG)" == "txt_converter_char - Win32 Release"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Release\char_sql"
-
-!ELSEIF "$(CFG)" == "txt_converter_char - Win32 Debug"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Debug\char_sql"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char_sql\int_storage.c
-
-!IF "$(CFG)" == "txt_converter_char - Win32 Release"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Release\char_sql"
-
-!ELSEIF "$(CFG)" == "txt_converter_char - Win32 Debug"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Debug\char_sql"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char_sql\int_storage.h
-
-!IF "$(CFG)" == "txt_converter_char - Win32 Release"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Release\char_sql"
-
-!ELSEIF "$(CFG)" == "txt_converter_char - Win32 Debug"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Debug\char_sql"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char_sql\inter.c
-
-!IF "$(CFG)" == "txt_converter_char - Win32 Release"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Release\char_sql"
-
-!ELSEIF "$(CFG)" == "txt_converter_char - Win32 Debug"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Debug\char_sql"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char_sql\inter.h
-
-!IF "$(CFG)" == "txt_converter_char - Win32 Release"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Release\char_sql"
-
-!ELSEIF "$(CFG)" == "txt_converter_char - Win32 Debug"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Debug\char_sql"
-
-!ENDIF
-
-# End Source File
-# End Group
-# Begin Group "char_txt"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\src\char\char.c
-
-!IF "$(CFG)" == "txt_converter_char - Win32 Release"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Release\char_txt"
-
-!ELSEIF "$(CFG)" == "txt_converter_char - Win32 Debug"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Debug\char_txt"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char\char.h
-
-!IF "$(CFG)" == "txt_converter_char - Win32 Release"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Release\char_txt"
-
-!ELSEIF "$(CFG)" == "txt_converter_char - Win32 Debug"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Debug\char_txt"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char\int_guild.c
-
-!IF "$(CFG)" == "txt_converter_char - Win32 Release"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Release\char_txt"
-
-!ELSEIF "$(CFG)" == "txt_converter_char - Win32 Debug"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Debug\char_txt"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char\int_guild.h
-
-!IF "$(CFG)" == "txt_converter_char - Win32 Release"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Release\char_txt"
-
-!ELSEIF "$(CFG)" == "txt_converter_char - Win32 Debug"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Debug\char_txt"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char\int_party.c
-
-!IF "$(CFG)" == "txt_converter_char - Win32 Release"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Release\char_txt"
-
-!ELSEIF "$(CFG)" == "txt_converter_char - Win32 Debug"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Debug\char_txt"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char\int_party.h
-
-!IF "$(CFG)" == "txt_converter_char - Win32 Release"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Release\char_txt"
-
-!ELSEIF "$(CFG)" == "txt_converter_char - Win32 Debug"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Debug\char_txt"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char\int_pet.c
-
-!IF "$(CFG)" == "txt_converter_char - Win32 Release"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Release\char_txt"
-
-!ELSEIF "$(CFG)" == "txt_converter_char - Win32 Debug"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Debug\char_txt"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char\int_pet.h
-
-!IF "$(CFG)" == "txt_converter_char - Win32 Release"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Release\char_txt"
-
-!ELSEIF "$(CFG)" == "txt_converter_char - Win32 Debug"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Debug\char_txt"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char\int_storage.c
-
-!IF "$(CFG)" == "txt_converter_char - Win32 Release"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Release\char_txt"
-
-!ELSEIF "$(CFG)" == "txt_converter_char - Win32 Debug"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Debug\char_txt"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char\int_storage.h
-
-!IF "$(CFG)" == "txt_converter_char - Win32 Release"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Release\char_txt"
-
-!ELSEIF "$(CFG)" == "txt_converter_char - Win32 Debug"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Debug\char_txt"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char\inter.c
-
-!IF "$(CFG)" == "txt_converter_char - Win32 Release"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Release\char_txt"
-
-!ELSEIF "$(CFG)" == "txt_converter_char - Win32 Debug"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Debug\char_txt"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\char\inter.h
-
-!IF "$(CFG)" == "txt_converter_char - Win32 Release"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Release\char_txt"
-
-!ELSEIF "$(CFG)" == "txt_converter_char - Win32 Debug"
-
-# PROP Intermediate_Dir "tmp\txt_converter_char\Debug\char_txt"
-
-!ENDIF
-
-# End Source File
-# End Group
-# Begin Group "converter"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE="..\src\txt-converter\char-converter.c"
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/vcproj-6/txt-converter-login.dsp b/vcproj-6/txt-converter-login.dsp
deleted file mode 100644
index a5afb569a..000000000
--- a/vcproj-6/txt-converter-login.dsp
+++ /dev/null
@@ -1,200 +0,0 @@
-# Microsoft Developer Studio Project File - Name="txt_converter_login" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=txt_converter_login - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "txt-converter-login.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "txt-converter-login.mak" CFG="txt_converter_login - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "txt_converter_login - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "txt_converter_login - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "txt_converter_login - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir ".."
-# PROP Intermediate_Dir "tmp\txt_converter_login\Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /W3 /O2 /I "..\3rdparty\msinttypes\include" /I "..\3rdparty\mysql\include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WIN32" /D "__WIN32" /D "DB_MANUAL_CAST_TO_UNION" /D "MINICORE" /D "TXT_SQL_CONVERT" /D "WITH_SQL" /D "WITH_TXT" /FD /c
-# SUBTRACT CPP /YX
-# ADD BASE RSC /l 0x405 /d "NDEBUG"
-# ADD RSC /l 0x417 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 kernel32.lib libmysql.lib /nologo /subsystem:console /machine:I386 /libpath:"..\3rdparty\mysql\lib"
-
-!ELSEIF "$(CFG)" == "txt_converter_login - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir ".."
-# PROP Intermediate_Dir "tmp\txt_converter_login\Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /ZI /Od /I "..\3rdparty\msinttypes\include" /I "..\3rdparty\mysql\include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WIN32" /D "__WIN32" /D "DB_MANUAL_CAST_TO_UNION" /D "MINICORE" /D "TXT_SQL_CONVERT" /D "WITH_SQL" /D "WITH_TXT" /FD /GZ /c
-# SUBTRACT CPP /YX
-# ADD BASE RSC /l 0x405 /d "_DEBUG"
-# ADD RSC /l 0x417 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib libmysql.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\3rdparty\mysql\lib"
-
-!ENDIF
-
-# Begin Target
-
-# Name "txt_converter_login - Win32 Release"
-# Name "txt_converter_login - Win32 Debug"
-# Begin Group "common"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\src\common\cbasetypes.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\core.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\core.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\db.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\db.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\ers.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\ers.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\lock.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\lock.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\malloc.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\malloc.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\mmo.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\showmsg.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\showmsg.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\sql.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\sql.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\strlib.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\timer.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\timer.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\utils.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\common\version.h
-# End Source File
-# End Group
-# Begin Group "login"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\src\login\account.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\login\account_sql.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\src\login\account_txt.c
-# End Source File
-# End Group
-# Begin Group "converter"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE="..\src\txt-converter\login-converter.c"
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/vcproj-7.1/char-server_sql.vcproj b/vcproj-7.1/char-server_sql.vcproj
deleted file mode 100644
index 02ad69ff8..000000000
--- a/vcproj-7.1/char-server_sql.vcproj
+++ /dev/null
@@ -1,332 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="char-server_sql"
- ProjectGUID="{D356871D-58E1-450B-967A-E4E9646175AF}"
- RootNamespace="char-server_sql"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory=".."
- IntermediateDirectory="$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\3rdparty\mysql\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar"
- PreprocessorDefinitions="WIN32;_WIN32;__WIN32;_DEBUG;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION"
- GeneratePreprocessedFile="0"
- MinimalRebuild="TRUE"
- ExceptionHandling="FALSE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- BufferSecurityCheck="TRUE"
- EnableFunctionLevelLinking="TRUE"
- DefaultCharIsUnsigned="FALSE"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="FALSE"
- DebugInformationFormat="4"
- CompileAs="1"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="msvcrtd.lib oldnames.lib ws2_32.lib libmysql.lib"
- OutputFile="$(OutDir)\char-server_sql.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\3rdparty\mysql\lib"
- IgnoreAllDefaultLibraries="TRUE"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)\$(ProjectName).pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory=".."
- IntermediateDirectory="$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="2"
- WholeProgramOptimization="TRUE">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- GlobalOptimizations="TRUE"
- InlineFunctionExpansion="2"
- EnableIntrinsicFunctions="TRUE"
- ImproveFloatingPointConsistency="TRUE"
- FavorSizeOrSpeed="1"
- OmitFramePointers="TRUE"
- EnableFiberSafeOptimizations="TRUE"
- OptimizeForProcessor="2"
- OptimizeForWindowsApplication="TRUE"
- AdditionalIncludeDirectories="..\3rdparty\mysql\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar"
- PreprocessorDefinitions="WIN32;_WIN32;__WIN32;NDEBUG;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION"
- StringPooling="TRUE"
- RuntimeLibrary="3"
- DefaultCharIsUnsigned="FALSE"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="FALSE"
- DebugInformationFormat="3"
- CompileAs="1"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="msvcrt.lib oldnames.lib ws2_32.lib libmysql.lib"
- OutputFile="$(OutDir)\char-server_sql.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\3rdparty\mysql\lib"
- IgnoreAllDefaultLibraries="TRUE"
- IgnoreDefaultLibraryNames=""
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)\$(ProjectName).pdb"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- OptimizeForWindows98="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="char_sql"
- Filter="">
- <File
- RelativePath="..\src\char_sql\char.c">
- </File>
- <File
- RelativePath="..\src\char_sql\char.h">
- </File>
- <File
- RelativePath="..\src\char_sql\int_auction.c">
- </File>
- <File
- RelativePath="..\src\char_sql\int_auction.h">
- </File>
- <File
- RelativePath="..\src\char_sql\int_guild.c">
- </File>
- <File
- RelativePath="..\src\char_sql\int_guild.h">
- </File>
- <File
- RelativePath="..\src\char_sql\int_homun.c">
- </File>
- <File
- RelativePath="..\src\char_sql\int_homun.h">
- </File>
- <File
- RelativePath="..\src\char_sql\int_mail.c">
- </File>
- <File
- RelativePath="..\src\char_sql\int_mail.h">
- </File>
- <File
- RelativePath="..\src\char_sql\int_mercenary.c">
- </File>
- <File
- RelativePath="..\src\char_sql\int_mercenary.h">
- </File>
- <File
- RelativePath="..\src\char_sql\int_party.c">
- </File>
- <File
- RelativePath="..\src\char_sql\int_party.h">
- </File>
- <File
- RelativePath="..\src\char_sql\int_pet.c">
- </File>
- <File
- RelativePath="..\src\char_sql\int_pet.h">
- </File>
- <File
- RelativePath="..\src\char_sql\int_quest.c">
- </File>
- <File
- RelativePath="..\src\char_sql\int_quest.h">
- </File>
- <File
- RelativePath="..\src\char_sql\int_storage.c">
- </File>
- <File
- RelativePath="..\src\char_sql\int_storage.h">
- </File>
- <File
- RelativePath="..\src\char_sql\inter.c">
- </File>
- <File
- RelativePath="..\src\char_sql\inter.h">
- </File>
- </Filter>
- <Filter
- Name="common"
- Filter="">
- <File
- RelativePath="..\src\common\cbasetypes.h">
- </File>
- <File
- RelativePath="..\src\common\core.c">
- </File>
- <File
- RelativePath="..\src\common\core.h">
- </File>
- <File
- RelativePath="..\src\common\db.c">
- </File>
- <File
- RelativePath="..\src\common\db.h">
- </File>
- <File
- RelativePath="..\src\common\ers.c">
- </File>
- <File
- RelativePath="..\src\common\ers.h">
- </File>
- <File
- RelativePath="..\src\common\lock.c">
- </File>
- <File
- RelativePath="..\src\common\lock.h">
- </File>
- <File
- RelativePath="..\src\common\malloc.c">
- </File>
- <File
- RelativePath="..\src\common\malloc.h">
- </File>
- <File
- RelativePath="..\src\common\mapindex.c">
- </File>
- <File
- RelativePath="..\src\common\mapindex.h">
- </File>
- <File
- RelativePath="..\src\common\mmo.h">
- </File>
- <File
- RelativePath="..\src\common\nullpo.c">
- </File>
- <File
- RelativePath="..\src\common\nullpo.h">
- </File>
- <File
- RelativePath="..\src\common\plugin.h">
- </File>
- <File
- RelativePath="..\src\common\plugins.c">
- </File>
- <File
- RelativePath="..\src\common\plugins.h">
- </File>
- <File
- RelativePath="..\src\common\random.c">
- </File>
- <File
- RelativePath="..\src\common\random.h">
- </File>
- <File
- RelativePath="..\src\common\showmsg.c">
- </File>
- <File
- RelativePath="..\src\common\showmsg.h">
- </File>
- <File
- RelativePath="..\src\common\socket.c">
- </File>
- <File
- RelativePath="..\src\common\socket.h">
- </File>
- <File
- RelativePath="..\src\common\sql.c">
- </File>
- <File
- RelativePath="..\src\common\sql.h">
- </File>
- <File
- RelativePath="..\src\common\strlib.c">
- </File>
- <File
- RelativePath="..\src\common\strlib.h">
- </File>
- <File
- RelativePath="..\src\common\timer.c">
- </File>
- <File
- RelativePath="..\src\common\timer.h">
- </File>
- <File
- RelativePath="..\src\common\utils.c">
- </File>
- <File
- RelativePath="..\src\common\utils.h">
- </File>
- <File
- RelativePath="..\src\common\version.h">
- </File>
- </Filter>
- <Filter
- Name="3rdparty"
- Filter="">
- <File
- RelativePath="..\3rdparty\mt19937ar\mt19937ar.c">
- </File>
- <File
- RelativePath="..\3rdparty\mt19937ar\mt19937ar.h">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/vcproj-7.1/char-server_txt.vcproj b/vcproj-7.1/char-server_txt.vcproj
deleted file mode 100644
index cf4606143..000000000
--- a/vcproj-7.1/char-server_txt.vcproj
+++ /dev/null
@@ -1,307 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="char-server_txt"
- ProjectGUID="{D356871D-58E1-450B-967A-E3E9646175AF}"
- RootNamespace="char-server_txt"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory=".."
- IntermediateDirectory="$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar"
- PreprocessorDefinitions="WIN32;_WIN32;__WIN32;_DEBUG;TXT_ONLY;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION"
- GeneratePreprocessedFile="0"
- MinimalRebuild="TRUE"
- ExceptionHandling="FALSE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- BufferSecurityCheck="TRUE"
- EnableFunctionLevelLinking="TRUE"
- DefaultCharIsUnsigned="FALSE"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="FALSE"
- DebugInformationFormat="4"
- CompileAs="1"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="msvcrtd.lib oldnames.lib ws2_32.lib"
- OutputFile="$(OutDir)\char-server.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories=""
- IgnoreAllDefaultLibraries="TRUE"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)\char-server.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory=".."
- IntermediateDirectory="$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="2"
- WholeProgramOptimization="TRUE">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- GlobalOptimizations="TRUE"
- InlineFunctionExpansion="2"
- EnableIntrinsicFunctions="TRUE"
- ImproveFloatingPointConsistency="TRUE"
- FavorSizeOrSpeed="1"
- OmitFramePointers="TRUE"
- EnableFiberSafeOptimizations="TRUE"
- OptimizeForProcessor="2"
- OptimizeForWindowsApplication="TRUE"
- AdditionalIncludeDirectories="..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar"
- PreprocessorDefinitions="WIN32;_WIN32;__WIN32;NDEBUG;TXT_ONLY;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION"
- StringPooling="TRUE"
- RuntimeLibrary="3"
- DefaultCharIsUnsigned="FALSE"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="FALSE"
- DebugInformationFormat="3"
- CompileAs="1"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="msvcrt.lib oldnames.lib ws2_32.lib"
- OutputFile="$(OutDir)\char-server.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories=""
- IgnoreAllDefaultLibraries="TRUE"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)\char-server.pdb"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- OptimizeForWindows98="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="char_txt"
- Filter="">
- <File
- RelativePath="..\src\char\char.c">
- </File>
- <File
- RelativePath="..\src\char\char.h">
- </File>
- <File
- RelativePath="..\src\char\int_guild.c">
- </File>
- <File
- RelativePath="..\src\char\int_guild.h">
- </File>
- <File
- RelativePath="..\src\char\int_homun.c">
- </File>
- <File
- RelativePath="..\src\char\int_homun.h">
- </File>
- <File
- RelativePath="..\src\char\int_party.c">
- </File>
- <File
- RelativePath="..\src\char\int_party.h">
- </File>
- <File
- RelativePath="..\src\char\int_pet.c">
- </File>
- <File
- RelativePath="..\src\char\int_pet.h">
- </File>
- <File
- RelativePath="..\src\char\int_status.c">
- </File>
- <File
- RelativePath="..\src\char\int_status.h">
- </File>
- <File
- RelativePath="..\src\char\int_storage.c">
- </File>
- <File
- RelativePath="..\src\char\int_storage.h">
- </File>
- <File
- RelativePath="..\src\char\inter.c">
- </File>
- <File
- RelativePath="..\src\char\inter.h">
- </File>
- </Filter>
- <Filter
- Name="common"
- Filter="">
- <File
- RelativePath="..\src\common\cbasetypes.h">
- </File>
- <File
- RelativePath="..\src\common\core.c">
- </File>
- <File
- RelativePath="..\src\common\core.h">
- </File>
- <File
- RelativePath="..\src\common\db.c">
- </File>
- <File
- RelativePath="..\src\common\db.h">
- </File>
- <File
- RelativePath="..\src\common\ers.c">
- </File>
- <File
- RelativePath="..\src\common\ers.h">
- </File>
- <File
- RelativePath="..\src\common\lock.c">
- </File>
- <File
- RelativePath="..\src\common\lock.h">
- </File>
- <File
- RelativePath="..\src\common\malloc.c">
- </File>
- <File
- RelativePath="..\src\common\malloc.h">
- </File>
- <File
- RelativePath="..\src\common\mapindex.c">
- </File>
- <File
- RelativePath="..\src\common\mapindex.h">
- </File>
- <File
- RelativePath="..\src\common\mmo.h">
- </File>
- <File
- RelativePath="..\src\common\nullpo.c">
- </File>
- <File
- RelativePath="..\src\common\nullpo.h">
- </File>
- <File
- RelativePath="..\src\common\plugin.h">
- </File>
- <File
- RelativePath="..\src\common\plugins.c">
- </File>
- <File
- RelativePath="..\src\common\plugins.h">
- </File>
- <File
- RelativePath="..\src\common\random.c">
- </File>
- <File
- RelativePath="..\src\common\random.h">
- </File>
- <File
- RelativePath="..\src\common\showmsg.c">
- </File>
- <File
- RelativePath="..\src\common\showmsg.h">
- </File>
- <File
- RelativePath="..\src\common\socket.c">
- </File>
- <File
- RelativePath="..\src\common\socket.h">
- </File>
- <File
- RelativePath="..\src\common\strlib.c">
- </File>
- <File
- RelativePath="..\src\common\strlib.h">
- </File>
- <File
- RelativePath="..\src\common\timer.c">
- </File>
- <File
- RelativePath="..\src\common\timer.h">
- </File>
- <File
- RelativePath="..\src\common\utils.c">
- </File>
- <File
- RelativePath="..\src\common\utils.h">
- </File>
- <File
- RelativePath="..\src\common\version.h">
- </File>
- </Filter>
- <Filter
- Name="3rdparty"
- Filter="">
- <File
- RelativePath="..\3rdparty\mt19937ar\mt19937ar.c">
- </File>
- <File
- RelativePath="..\3rdparty\mt19937ar\mt19937ar.h">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/vcproj-7.1/login-server_sql.vcproj b/vcproj-7.1/login-server_sql.vcproj
deleted file mode 100644
index 6ffd56f8f..000000000
--- a/vcproj-7.1/login-server_sql.vcproj
+++ /dev/null
@@ -1,291 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="login-server_sql"
- ProjectGUID="{D356871D-58E1-450B-967A-E5E9646175AF}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory=".."
- IntermediateDirectory="$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\3rdparty\mysql\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar"
- PreprocessorDefinitions="WIN32;_WIN32;__WIN32;_DEBUG;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION;WITH_SQL"
- GeneratePreprocessedFile="0"
- MinimalRebuild="TRUE"
- ExceptionHandling="FALSE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- BufferSecurityCheck="TRUE"
- EnableFunctionLevelLinking="TRUE"
- DefaultCharIsUnsigned="FALSE"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="FALSE"
- DebugInformationFormat="4"
- CompileAs="1"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="msvcrtd.lib oldnames.lib ws2_32.lib libmysql.lib"
- OutputFile="$(OutDir)\login-server_sql.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\3rdparty\mysql\lib"
- IgnoreAllDefaultLibraries="TRUE"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)\$(ProjectName).pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory=".."
- IntermediateDirectory="$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="2"
- WholeProgramOptimization="TRUE">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- GlobalOptimizations="TRUE"
- InlineFunctionExpansion="2"
- EnableIntrinsicFunctions="TRUE"
- ImproveFloatingPointConsistency="TRUE"
- FavorSizeOrSpeed="1"
- OmitFramePointers="TRUE"
- EnableFiberSafeOptimizations="TRUE"
- OptimizeForProcessor="2"
- OptimizeForWindowsApplication="TRUE"
- AdditionalIncludeDirectories="..\3rdparty\mysql\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar"
- PreprocessorDefinitions="WIN32;_WIN32;__WIN32;NDEBUG;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION;WITH_SQL"
- StringPooling="TRUE"
- RuntimeLibrary="3"
- DefaultCharIsUnsigned="FALSE"
- UsePrecompiledHeader="0"
- PrecompiledHeaderThrough=""
- PrecompiledHeaderFile=""
- WarningLevel="3"
- Detect64BitPortabilityProblems="FALSE"
- DebugInformationFormat="3"
- CompileAs="1"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="msvcrt.lib oldnames.lib ws2_32.lib libmysql.lib"
- OutputFile="$(OutDir)\login-server_sql.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\3rdparty\mysql\lib"
- IgnoreAllDefaultLibraries="TRUE"
- IgnoreDefaultLibraryNames=""
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)\$(ProjectName).pdb"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- OptimizeForWindows98="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="login_sql"
- Filter="">
- <File
- RelativePath="..\src\login\account.h">
- </File>
- <File
- RelativePath="..\src\login\account_sql.c">
- </File>
- <File
- RelativePath="..\src\login\ipban.h">
- </File>
- <File
- RelativePath="..\src\login\ipban_sql.c">
- </File>
- <File
- RelativePath="..\src\login\login.c">
- </File>
- <File
- RelativePath="..\src\login\login.h">
- </File>
- <File
- RelativePath="..\src\login\loginlog.h">
- </File>
- <File
- RelativePath="..\src\login\loginlog_sql.c">
- </File>
- </Filter>
- <Filter
- Name="common"
- Filter="">
- <File
- RelativePath="..\src\common\cbasetypes.h">
- </File>
- <File
- RelativePath="..\src\common\core.c">
- </File>
- <File
- RelativePath="..\src\common\core.h">
- </File>
- <File
- RelativePath="..\src\common\db.c">
- </File>
- <File
- RelativePath="..\src\common\db.h">
- </File>
- <File
- RelativePath="..\src\common\ers.c">
- </File>
- <File
- RelativePath="..\src\common\ers.h">
- </File>
- <File
- RelativePath="..\src\common\lock.c">
- </File>
- <File
- RelativePath="..\src\common\lock.h">
- </File>
- <File
- RelativePath="..\src\common\malloc.c">
- </File>
- <File
- RelativePath="..\src\common\malloc.h">
- </File>
- <File
- RelativePath="..\src\common\md5calc.c">
- </File>
- <File
- RelativePath="..\src\common\md5calc.h">
- </File>
- <File
- RelativePath="..\src\common\mmo.h">
- </File>
- <File
- RelativePath="..\src\common\nullpo.c">
- </File>
- <File
- RelativePath="..\src\common\nullpo.h">
- </File>
- <File
- RelativePath="..\src\common\plugin.h">
- </File>
- <File
- RelativePath="..\src\common\plugins.c">
- </File>
- <File
- RelativePath="..\src\common\plugins.h">
- </File>
- <File
- RelativePath="..\src\common\random.c">
- </File>
- <File
- RelativePath="..\src\common\random.h">
- </File>
- <File
- RelativePath="..\src\common\showmsg.c">
- </File>
- <File
- RelativePath="..\src\common\showmsg.h">
- </File>
- <File
- RelativePath="..\src\common\socket.c">
- </File>
- <File
- RelativePath="..\src\common\socket.h">
- </File>
- <File
- RelativePath="..\src\common\sql.c">
- </File>
- <File
- RelativePath="..\src\common\sql.h">
- </File>
- <File
- RelativePath="..\src\common\strlib.c">
- </File>
- <File
- RelativePath="..\src\common\strlib.h">
- </File>
- <File
- RelativePath="..\src\common\timer.c">
- </File>
- <File
- RelativePath="..\src\common\timer.h">
- </File>
- <File
- RelativePath="..\src\common\utils.c">
- </File>
- <File
- RelativePath="..\src\common\utils.h">
- </File>
- <File
- RelativePath="..\src\common\version.h">
- </File>
- </Filter>
- <Filter
- Name="3rdparty"
- Filter="">
- <File
- RelativePath="..\3rdparty\mt19937ar\mt19937ar.c">
- </File>
- <File
- RelativePath="..\3rdparty\mt19937ar\mt19937ar.h">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/vcproj-7.1/login-server_txt.vcproj b/vcproj-7.1/login-server_txt.vcproj
deleted file mode 100644
index 624bb39d7..000000000
--- a/vcproj-7.1/login-server_txt.vcproj
+++ /dev/null
@@ -1,288 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="login-server_txt"
- ProjectGUID="{D356871D-58E1-450B-967A-E2E9646175AF}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory=".."
- IntermediateDirectory="$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar"
- PreprocessorDefinitions="WIN32;_WIN32;__WIN32;_DEBUG;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION;WITH_TXT"
- GeneratePreprocessedFile="0"
- MinimalRebuild="TRUE"
- ExceptionHandling="FALSE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- BufferSecurityCheck="TRUE"
- EnableFunctionLevelLinking="TRUE"
- DisableLanguageExtensions="FALSE"
- DefaultCharIsUnsigned="FALSE"
- TreatWChar_tAsBuiltInType="FALSE"
- ForceConformanceInForLoopScope="FALSE"
- RuntimeTypeInfo="FALSE"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- WarnAsError="FALSE"
- Detect64BitPortabilityProblems="FALSE"
- DebugInformationFormat="4"
- CompileAs="1"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="msvcrtd.lib oldnames.lib ws2_32.lib"
- ShowProgress="0"
- OutputFile="$(OutDir)\login-server.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories=""
- IgnoreAllDefaultLibraries="TRUE"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)\login-server.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory=".."
- IntermediateDirectory="$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="2"
- WholeProgramOptimization="TRUE">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- GlobalOptimizations="TRUE"
- InlineFunctionExpansion="2"
- EnableIntrinsicFunctions="TRUE"
- ImproveFloatingPointConsistency="TRUE"
- FavorSizeOrSpeed="1"
- OmitFramePointers="TRUE"
- EnableFiberSafeOptimizations="TRUE"
- OptimizeForProcessor="2"
- OptimizeForWindowsApplication="TRUE"
- AdditionalIncludeDirectories="..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar"
- PreprocessorDefinitions="WIN32;_WIN32;__WIN32;NDEBUG;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION;WITH_TXT"
- StringPooling="TRUE"
- RuntimeLibrary="3"
- DefaultCharIsUnsigned="FALSE"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="FALSE"
- DebugInformationFormat="3"
- CompileAs="1"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="msvcrt.lib oldnames.lib ws2_32.lib"
- OutputFile="$(OutDir)\login-server.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories=""
- IgnoreAllDefaultLibraries="TRUE"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)\login-server.pdb"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- OptimizeForWindows98="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="login_txt"
- Filter="">
- <File
- RelativePath="..\src\login\account.h">
- </File>
- <File
- RelativePath="..\src\login\account_txt.c">
- </File>
- <File
- RelativePath="..\src\login\ipban.h">
- </File>
- <File
- RelativePath="..\src\login\ipban_txt.c">
- </File>
- <File
- RelativePath="..\src\login\login.c">
- </File>
- <File
- RelativePath="..\src\login\login.h">
- </File>
- <File
- RelativePath="..\src\login\loginlog.h">
- </File>
- <File
- RelativePath="..\src\login\loginlog_txt.c">
- </File>
- </Filter>
- <Filter
- Name="common"
- Filter="">
- <File
- RelativePath="..\src\common\cbasetypes.h">
- </File>
- <File
- RelativePath="..\src\common\core.c">
- </File>
- <File
- RelativePath="..\src\common\core.h">
- </File>
- <File
- RelativePath="..\src\common\db.c">
- </File>
- <File
- RelativePath="..\src\common\db.h">
- </File>
- <File
- RelativePath="..\src\common\ers.c">
- </File>
- <File
- RelativePath="..\src\common\ers.h">
- </File>
- <File
- RelativePath="..\src\common\lock.c">
- </File>
- <File
- RelativePath="..\src\common\lock.h">
- </File>
- <File
- RelativePath="..\src\common\malloc.c">
- </File>
- <File
- RelativePath="..\src\common\malloc.h">
- </File>
- <File
- RelativePath="..\src\common\md5calc.c">
- </File>
- <File
- RelativePath="..\src\common\md5calc.h">
- </File>
- <File
- RelativePath="..\src\common\mmo.h">
- </File>
- <File
- RelativePath="..\src\common\nullpo.c">
- </File>
- <File
- RelativePath="..\src\common\nullpo.h">
- </File>
- <File
- RelativePath="..\src\common\plugin.h">
- </File>
- <File
- RelativePath="..\src\common\plugins.c">
- </File>
- <File
- RelativePath="..\src\common\plugins.h">
- </File>
- <File
- RelativePath="..\src\common\random.c">
- </File>
- <File
- RelativePath="..\src\common\random.h">
- </File>
- <File
- RelativePath="..\src\common\showmsg.c">
- </File>
- <File
- RelativePath="..\src\common\showmsg.h">
- </File>
- <File
- RelativePath="..\src\common\socket.c">
- </File>
- <File
- RelativePath="..\src\common\socket.h">
- </File>
- <File
- RelativePath="..\src\common\strlib.c">
- </File>
- <File
- RelativePath="..\src\common\strlib.h">
- </File>
- <File
- RelativePath="..\src\common\timer.c">
- </File>
- <File
- RelativePath="..\src\common\timer.h">
- </File>
- <File
- RelativePath="..\src\common\utils.c">
- </File>
- <File
- RelativePath="..\src\common\utils.h">
- </File>
- <File
- RelativePath="..\src\common\version.h">
- </File>
- </Filter>
- <Filter
- Name="3rdparty"
- Filter="">
- <File
- RelativePath="..\3rdparty\mt19937ar\mt19937ar.c">
- </File>
- <File
- RelativePath="..\3rdparty\mt19937ar\mt19937ar.h">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/vcproj-7.1/map-server_sql.vcproj b/vcproj-7.1/map-server_sql.vcproj
deleted file mode 100644
index fa1b7f931..000000000
--- a/vcproj-7.1/map-server_sql.vcproj
+++ /dev/null
@@ -1,490 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="map-server_sql"
- ProjectGUID="{D356871D-58E1-450B-967A-E6E9646175AF}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory=".."
- IntermediateDirectory="$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/wd4018
-/wd4100"
- Optimization="0"
- AdditionalIncludeDirectories="..\3rdparty\mysql\include;..\3rdparty\zlib\include;..\3rdparty\pcre\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar"
- PreprocessorDefinitions="WIN32;_WIN32;__WIN32;_DEBUG;PCRE_SUPPORT;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION"
- GeneratePreprocessedFile="0"
- MinimalRebuild="TRUE"
- ExceptionHandling="FALSE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- BufferSecurityCheck="TRUE"
- EnableFunctionLevelLinking="TRUE"
- DefaultCharIsUnsigned="FALSE"
- ForceConformanceInForLoopScope="FALSE"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="FALSE"
- DebugInformationFormat="4"
- CompileAs="1"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="msvcrtd.lib oldnames.lib ws2_32.lib libmysql.lib zdll.lib pcre.lib"
- OutputFile="$(OutDir)\map-server_sql.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\3rdparty\mysql\lib;..\3rdparty\zlib\lib;..\3rdparty\pcre\lib"
- IgnoreAllDefaultLibraries="TRUE"
- IgnoreDefaultLibraryNames=""
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)\$(ProjectName).pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory=".."
- IntermediateDirectory="$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="2"
- WholeProgramOptimization="TRUE">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/wd4018
-/wd4100"
- Optimization="2"
- GlobalOptimizations="TRUE"
- InlineFunctionExpansion="2"
- EnableIntrinsicFunctions="TRUE"
- ImproveFloatingPointConsistency="TRUE"
- FavorSizeOrSpeed="1"
- OmitFramePointers="TRUE"
- EnableFiberSafeOptimizations="TRUE"
- OptimizeForProcessor="2"
- OptimizeForWindowsApplication="TRUE"
- AdditionalIncludeDirectories="..\3rdparty\mysql\include;..\3rdparty\zlib\include;..\3rdparty\pcre\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar"
- PreprocessorDefinitions="WIN32;_WIN32;__WIN32;NDEBUG;PCRE_SUPPORT;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION"
- StringPooling="TRUE"
- RuntimeLibrary="3"
- DefaultCharIsUnsigned="FALSE"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="FALSE"
- DebugInformationFormat="3"
- CompileAs="1"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="msvcrt.lib oldnames.lib ws2_32.lib libmysql.lib zdll.lib pcre.lib"
- OutputFile="$(OutDir)\map-server_sql.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\3rdparty\mysql\lib;..\3rdparty\zlib\lib;..\3rdparty\pcre\lib"
- IgnoreAllDefaultLibraries="TRUE"
- IgnoreDefaultLibraryNames=""
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)\$(ProjectName).pdb"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- OptimizeForWindows98="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="map_sql"
- Filter="">
- <File
- RelativePath="..\src\map\atcommand.c">
- </File>
- <File
- RelativePath="..\src\map\atcommand.h">
- </File>
- <File
- RelativePath="..\src\map\battle.c">
- </File>
- <File
- RelativePath="..\src\map\battle.h">
- </File>
- <File
- RelativePath="..\src\map\battleground.c">
- </File>
- <File
- RelativePath="..\src\map\battleground.h">
- </File>
- <File
- RelativePath="..\src\map\buyingstore.c">
- </File>
- <File
- RelativePath="..\src\map\buyingstore.h">
- </File>
- <File
- RelativePath="..\src\map\chat.c">
- </File>
- <File
- RelativePath="..\src\map\chat.h">
- </File>
- <File
- RelativePath="..\src\map\chrif.c">
- </File>
- <File
- RelativePath="..\src\map\chrif.h">
- </File>
- <File
- RelativePath="..\src\map\clif.c">
- </File>
- <File
- RelativePath="..\src\map\clif.h">
- </File>
- <File
- RelativePath="..\src\map\date.c">
- </File>
- <File
- RelativePath="..\src\map\date.h">
- </File>
- <File
- RelativePath="..\src\map\duel.c">
- </File>
- <File
- RelativePath="..\src\map\duel.h">
- </File>
- <File
- RelativePath="..\src\map\guild.c">
- </File>
- <File
- RelativePath="..\src\map\guild.h">
- </File>
- <File
- RelativePath="..\src\map\intif.c">
- </File>
- <File
- RelativePath="..\src\map\intif.h">
- </File>
- <File
- RelativePath="..\src\map\itemdb.c">
- </File>
- <File
- RelativePath="..\src\map\itemdb.h">
- </File>
- <File
- RelativePath="..\src\map\log.c">
- </File>
- <File
- RelativePath="..\src\map\log.h">
- </File>
- <File
- RelativePath="..\src\map\mail.c">
- </File>
- <File
- RelativePath="..\src\map\mail.h">
- </File>
- <File
- RelativePath="..\src\map\map.c">
- </File>
- <File
- RelativePath="..\src\map\map.h">
- </File>
- <File
- RelativePath="..\src\map\mapreg.h">
- </File>
- <File
- RelativePath="..\src\map\mapreg_sql.c">
- </File>
- <File
- RelativePath="..\src\map\homunculus.c">
- </File>
- <File
- RelativePath="..\src\map\homunculus.h">
- </File>
- <File
- RelativePath="..\src\map\instance.c">
- </File>
- <File
- RelativePath="..\src\map\instance.h">
- </File>
- <File
- RelativePath="..\src\map\mercenary.c">
- </File>
- <File
- RelativePath="..\src\map\mercenary.h">
- </File>
- <File
- RelativePath="..\src\map\mob.c">
- </File>
- <File
- RelativePath="..\src\map\mob.h">
- </File>
- <File
- RelativePath="..\src\map\npc.c">
- </File>
- <File
- RelativePath="..\src\map\npc.h">
- </File>
- <File
- RelativePath="..\src\map\npc_chat.c">
- </File>
- <File
- RelativePath="..\src\map\party.c">
- </File>
- <File
- RelativePath="..\src\map\party.h">
- </File>
- <File
- RelativePath="..\src\map\path.c">
- </File>
- <File
- RelativePath="..\src\map\path.h">
- </File>
- <File
- RelativePath="..\src\map\pc.c">
- </File>
- <File
- RelativePath="..\src\map\pc.h">
- </File>
- <File
- RelativePath="..\src\map\pet.c">
- </File>
- <File
- RelativePath="..\src\map\pet.h">
- </File>
- <File
- RelativePath="..\src\map\quest.c">
- </File>
- <File
- RelativePath="..\src\map\quest.h">
- </File>
- <File
- RelativePath="..\src\map\script.c">
- </File>
- <File
- RelativePath="..\src\map\script.h">
- </File>
- <File
- RelativePath="..\src\map\searchstore.c">
- </File>
- <File
- RelativePath="..\src\map\searchstore.h">
- </File>
- <File
- RelativePath="..\src\map\skill.c">
- </File>
- <File
- RelativePath="..\src\map\skill.h">
- </File>
- <File
- RelativePath="..\src\map\status.c">
- </File>
- <File
- RelativePath="..\src\map\status.h">
- </File>
- <File
- RelativePath="..\src\map\storage.c">
- </File>
- <File
- RelativePath="..\src\map\storage.h">
- </File>
- <File
- RelativePath="..\src\map\trade.c">
- </File>
- <File
- RelativePath="..\src\map\trade.h">
- </File>
- <File
- RelativePath="..\src\map\unit.c">
- </File>
- <File
- RelativePath="..\src\map\unit.h">
- </File>
- <File
- RelativePath="..\src\map\vending.c">
- </File>
- <File
- RelativePath="..\src\map\vending.h">
- </File>
- </Filter>
- <Filter
- Name="common"
- Filter="">
- <File
- RelativePath="..\src\common\cbasetypes.h">
- </File>
- <File
- RelativePath="..\src\common\core.c">
- </File>
- <File
- RelativePath="..\src\common\core.h">
- </File>
- <File
- RelativePath="..\src\common\db.c">
- </File>
- <File
- RelativePath="..\src\common\db.h">
- </File>
- <File
- RelativePath="..\src\common\ers.c">
- </File>
- <File
- RelativePath="..\src\common\ers.h">
- </File>
- <File
- RelativePath="..\src\common\grfio.c">
- </File>
- <File
- RelativePath="..\src\common\grfio.h">
- </File>
- <File
- RelativePath="..\src\common\lock.c">
- </File>
- <File
- RelativePath="..\src\common\lock.h">
- </File>
- <File
- RelativePath="..\src\common\malloc.c">
- </File>
- <File
- RelativePath="..\src\common\malloc.h">
- </File>
- <File
- RelativePath="..\src\common\mapindex.c">
- </File>
- <File
- RelativePath="..\src\common\mapindex.h">
- </File>
- <File
- RelativePath="..\src\common\md5calc.c">
- </File>
- <File
- RelativePath="..\src\common\md5calc.h">
- </File>
- <File
- RelativePath="..\src\common\mmo.h">
- </File>
- <File
- RelativePath="..\src\common\nullpo.c">
- </File>
- <File
- RelativePath="..\src\common\nullpo.h">
- </File>
- <File
- RelativePath="..\src\common\plugin.h">
- </File>
- <File
- RelativePath="..\src\common\plugins.c">
- </File>
- <File
- RelativePath="..\src\common\plugins.h">
- </File>
- <File
- RelativePath="..\src\common\random.c">
- </File>
- <File
- RelativePath="..\src\common\random.h">
- </File>
- <File
- RelativePath="..\src\common\showmsg.c">
- </File>
- <File
- RelativePath="..\src\common\showmsg.h">
- </File>
- <File
- RelativePath="..\src\common\socket.c">
- </File>
- <File
- RelativePath="..\src\common\socket.h">
- </File>
- <File
- RelativePath="..\src\common\sql.c">
- </File>
- <File
- RelativePath="..\src\common\sql.h">
- </File>
- <File
- RelativePath="..\src\common\strlib.c">
- </File>
- <File
- RelativePath="..\src\common\strlib.h">
- </File>
- <File
- RelativePath="..\src\common\timer.c">
- </File>
- <File
- RelativePath="..\src\common\timer.h">
- </File>
- <File
- RelativePath="..\src\common\utils.c">
- </File>
- <File
- RelativePath="..\src\common\utils.h">
- </File>
- <File
- RelativePath="..\src\common\version.h">
- </File>
- </Filter>
- <Filter
- Name="3rdparty"
- Filter="">
- <File
- RelativePath="..\3rdparty\mt19937ar\mt19937ar.c">
- </File>
- <File
- RelativePath="..\3rdparty\mt19937ar\mt19937ar.h">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/vcproj-7.1/map-server_txt.vcproj b/vcproj-7.1/map-server_txt.vcproj
deleted file mode 100644
index b78fe1759..000000000
--- a/vcproj-7.1/map-server_txt.vcproj
+++ /dev/null
@@ -1,484 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="map-server_txt"
- ProjectGUID="{D356871D-58E1-450B-967A-E1E9646175AF}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory=".."
- IntermediateDirectory="$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/wd4018
-/wd4100"
- Optimization="0"
- AdditionalIncludeDirectories="..\3rdparty\zlib\include;..\3rdparty\pcre\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar"
- PreprocessorDefinitions="WIN32;_WIN32;__WIN32;_DEBUG;PCRE_SUPPORT;TXT_ONLY;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION"
- GeneratePreprocessedFile="0"
- MinimalRebuild="TRUE"
- ExceptionHandling="FALSE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- BufferSecurityCheck="TRUE"
- EnableFunctionLevelLinking="TRUE"
- DefaultCharIsUnsigned="FALSE"
- ForceConformanceInForLoopScope="FALSE"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="FALSE"
- DebugInformationFormat="4"
- CompileAs="1"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalOptions="/FIXED:NO"
- AdditionalDependencies="msvcrtd.lib oldnames.lib ws2_32.lib zdll.lib pcre.lib"
- OutputFile="$(OutDir)\map-server.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\3rdparty\zlib\lib;..\3rdparty\pcre\lib"
- IgnoreAllDefaultLibraries="TRUE"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)\map-server.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory=".."
- IntermediateDirectory="$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="2"
- WholeProgramOptimization="TRUE">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/wd4018
-/wd4100"
- Optimization="2"
- GlobalOptimizations="TRUE"
- InlineFunctionExpansion="2"
- EnableIntrinsicFunctions="TRUE"
- ImproveFloatingPointConsistency="TRUE"
- FavorSizeOrSpeed="1"
- OmitFramePointers="TRUE"
- EnableFiberSafeOptimizations="TRUE"
- OptimizeForProcessor="2"
- OptimizeForWindowsApplication="TRUE"
- AdditionalIncludeDirectories="..\3rdparty\zlib\include;..\3rdparty\pcre\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar"
- PreprocessorDefinitions="WIN32;_WIN32;__WIN32;NDEBUG;PCRE_SUPPORT;TXT_ONLY;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION"
- StringPooling="TRUE"
- RuntimeLibrary="3"
- EnableEnhancedInstructionSet="0"
- DefaultCharIsUnsigned="FALSE"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="FALSE"
- DebugInformationFormat="3"
- CompileAs="1"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="msvcrt.lib oldnames.lib ws2_32.lib zdll.lib pcre.lib"
- OutputFile="$(OutDir)\map-server.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\3rdparty\zlib\lib;..\3rdparty\pcre\lib"
- IgnoreAllDefaultLibraries="TRUE"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)\map-server.pdb"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- OptimizeForWindows98="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="map_txt"
- Filter="">
- <File
- RelativePath="..\src\map\atcommand.c">
- </File>
- <File
- RelativePath="..\src\map\atcommand.h">
- </File>
- <File
- RelativePath="..\src\map\battle.c">
- </File>
- <File
- RelativePath="..\src\map\battle.h">
- </File>
- <File
- RelativePath="..\src\map\battleground.c">
- </File>
- <File
- RelativePath="..\src\map\battleground.h">
- </File>
- <File
- RelativePath="..\src\map\buyingstore.c">
- </File>
- <File
- RelativePath="..\src\map\buyingstore.h">
- </File>
- <File
- RelativePath="..\src\map\chat.c">
- </File>
- <File
- RelativePath="..\src\map\chat.h">
- </File>
- <File
- RelativePath="..\src\map\chrif.c">
- </File>
- <File
- RelativePath="..\src\map\chrif.h">
- </File>
- <File
- RelativePath="..\src\map\clif.c">
- </File>
- <File
- RelativePath="..\src\map\clif.h">
- </File>
- <File
- RelativePath="..\src\map\date.c">
- </File>
- <File
- RelativePath="..\src\map\date.h">
- </File>
- <File
- RelativePath="..\src\map\duel.c">
- </File>
- <File
- RelativePath="..\src\map\duel.h">
- </File>
- <File
- RelativePath="..\src\map\guild.c">
- </File>
- <File
- RelativePath="..\src\map\guild.h">
- </File>
- <File
- RelativePath="..\src\map\intif.c">
- </File>
- <File
- RelativePath="..\src\map\intif.h">
- </File>
- <File
- RelativePath="..\src\map\itemdb.c">
- </File>
- <File
- RelativePath="..\src\map\itemdb.h">
- </File>
- <File
- RelativePath="..\src\map\log.c">
- </File>
- <File
- RelativePath="..\src\map\log.h">
- </File>
- <File
- RelativePath="..\src\map\mail.c">
- </File>
- <File
- RelativePath="..\src\map\mail.h">
- </File>
- <File
- RelativePath="..\src\map\map.c">
- </File>
- <File
- RelativePath="..\src\map\map.h">
- </File>
- <File
- RelativePath="..\src\map\mapreg.h">
- </File>
- <File
- RelativePath="..\src\map\mapreg_txt.c">
- </File>
- <File
- RelativePath="..\src\map\homunculus.c">
- </File>
- <File
- RelativePath="..\src\map\homunculus.h">
- </File>
- <File
- RelativePath="..\src\map\instance.c">
- </File>
- <File
- RelativePath="..\src\map\instance.h">
- </File>
- <File
- RelativePath="..\src\map\mercenary.c">
- </File>
- <File
- RelativePath="..\src\map\mercenary.h">
- </File>
- <File
- RelativePath="..\src\map\mob.c">
- </File>
- <File
- RelativePath="..\src\map\mob.h">
- </File>
- <File
- RelativePath="..\src\map\npc.c">
- </File>
- <File
- RelativePath="..\src\map\npc.h">
- </File>
- <File
- RelativePath="..\src\map\npc_chat.c">
- </File>
- <File
- RelativePath="..\src\map\party.c">
- </File>
- <File
- RelativePath="..\src\map\party.h">
- </File>
- <File
- RelativePath="..\src\map\path.c">
- </File>
- <File
- RelativePath="..\src\map\path.h">
- </File>
- <File
- RelativePath="..\src\map\pc.c">
- </File>
- <File
- RelativePath="..\src\map\pc.h">
- </File>
- <File
- RelativePath="..\src\map\pet.c">
- </File>
- <File
- RelativePath="..\src\map\pet.h">
- </File>
- <File
- RelativePath="..\src\map\quest.c">
- </File>
- <File
- RelativePath="..\src\map\quest.h">
- </File>
- <File
- RelativePath="..\src\map\script.c">
- </File>
- <File
- RelativePath="..\src\map\script.h">
- </File>
- <File
- RelativePath="..\src\map\searchstore.c">
- </File>
- <File
- RelativePath="..\src\map\searchstore.h">
- </File>
- <File
- RelativePath="..\src\map\skill.c">
- </File>
- <File
- RelativePath="..\src\map\skill.h">
- </File>
- <File
- RelativePath="..\src\map\status.c">
- </File>
- <File
- RelativePath="..\src\map\status.h">
- </File>
- <File
- RelativePath="..\src\map\storage.c">
- </File>
- <File
- RelativePath="..\src\map\storage.h">
- </File>
- <File
- RelativePath="..\src\map\trade.c">
- </File>
- <File
- RelativePath="..\src\map\trade.h">
- </File>
- <File
- RelativePath="..\src\map\unit.c">
- </File>
- <File
- RelativePath="..\src\map\unit.h">
- </File>
- <File
- RelativePath="..\src\map\vending.c">
- </File>
- <File
- RelativePath="..\src\map\vending.h">
- </File>
- </Filter>
- <Filter
- Name="common"
- Filter="">
- <File
- RelativePath="..\src\common\cbasetypes.h">
- </File>
- <File
- RelativePath="..\src\common\core.c">
- </File>
- <File
- RelativePath="..\src\common\core.h">
- </File>
- <File
- RelativePath="..\src\common\db.c">
- </File>
- <File
- RelativePath="..\src\common\db.h">
- </File>
- <File
- RelativePath="..\src\common\ers.c">
- </File>
- <File
- RelativePath="..\src\common\ers.h">
- </File>
- <File
- RelativePath="..\src\common\grfio.c">
- </File>
- <File
- RelativePath="..\src\common\grfio.h">
- </File>
- <File
- RelativePath="..\src\common\lock.c">
- </File>
- <File
- RelativePath="..\src\common\lock.h">
- </File>
- <File
- RelativePath="..\src\common\malloc.c">
- </File>
- <File
- RelativePath="..\src\common\malloc.h">
- </File>
- <File
- RelativePath="..\src\common\mapindex.c">
- </File>
- <File
- RelativePath="..\src\common\mapindex.h">
- </File>
- <File
- RelativePath="..\src\common\md5calc.c">
- </File>
- <File
- RelativePath="..\src\common\md5calc.h">
- </File>
- <File
- RelativePath="..\src\common\mmo.h">
- </File>
- <File
- RelativePath="..\src\common\nullpo.c">
- </File>
- <File
- RelativePath="..\src\common\nullpo.h">
- </File>
- <File
- RelativePath="..\src\common\plugin.h">
- </File>
- <File
- RelativePath="..\src\common\plugins.c">
- </File>
- <File
- RelativePath="..\src\common\plugins.h">
- </File>
- <File
- RelativePath="..\src\common\random.c">
- </File>
- <File
- RelativePath="..\src\common\random.h">
- </File>
- <File
- RelativePath="..\src\common\showmsg.c">
- </File>
- <File
- RelativePath="..\src\common\showmsg.h">
- </File>
- <File
- RelativePath="..\src\common\socket.c">
- </File>
- <File
- RelativePath="..\src\common\socket.h">
- </File>
- <File
- RelativePath="..\src\common\strlib.c">
- </File>
- <File
- RelativePath="..\src\common\strlib.h">
- </File>
- <File
- RelativePath="..\src\common\timer.c">
- </File>
- <File
- RelativePath="..\src\common\timer.h">
- </File>
- <File
- RelativePath="..\src\common\utils.c">
- </File>
- <File
- RelativePath="..\src\common\utils.h">
- </File>
- <File
- RelativePath="..\src\common\version.h">
- </File>
- </Filter>
- <Filter
- Name="3rdparty"
- Filter="">
- <File
- RelativePath="..\3rdparty\mt19937ar\mt19937ar.c">
- </File>
- <File
- RelativePath="..\3rdparty\mt19937ar\mt19937ar.h">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/vcproj-7.1/mapcache.vcproj b/vcproj-7.1/mapcache.vcproj
deleted file mode 100644
index af62d5194..000000000
--- a/vcproj-7.1/mapcache.vcproj
+++ /dev/null
@@ -1,199 +0,0 @@
-<?xml version="1.0" encoding="windows-1250"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="mapcache"
- ProjectGUID="{BB5C63F0-57AD-42F0-83F8-8F9323BC089C}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory=".."
- IntermediateDirectory="$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\3rdparty\zlib\include;..\3rdparty\msinttypes\include"
- PreprocessorDefinitions="WIN32;_WIN32;__WIN32;_DEBUG;MINICORE"
- MinimalRebuild="TRUE"
- ExceptionHandling="FALSE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- BufferSecurityCheck="TRUE"
- EnableFunctionLevelLinking="TRUE"
- DefaultCharIsUnsigned="FALSE"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="FALSE"
- DebugInformationFormat="4"
- CompileAs="1"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="msvcrtd.lib oldnames.lib zdll.lib"
- OutputFile="$(OutDir)\mapcache.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\3rdparty\zlib\lib"
- IgnoreAllDefaultLibraries="TRUE"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)\$(ProjectName).pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory=".."
- IntermediateDirectory="$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="2"
- WholeProgramOptimization="TRUE">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- GlobalOptimizations="TRUE"
- InlineFunctionExpansion="2"
- EnableIntrinsicFunctions="TRUE"
- ImproveFloatingPointConsistency="TRUE"
- FavorSizeOrSpeed="1"
- OmitFramePointers="TRUE"
- EnableFiberSafeOptimizations="TRUE"
- OptimizeForProcessor="2"
- OptimizeForWindowsApplication="TRUE"
- AdditionalIncludeDirectories="..\3rdparty\zlib\include;..\3rdparty\msinttypes\include"
- PreprocessorDefinitions="WIN32;_WIN32;__WIN32;NDEBUG;MINICORE"
- StringPooling="TRUE"
- RuntimeLibrary="3"
- DefaultCharIsUnsigned="FALSE"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="FALSE"
- DebugInformationFormat="3"
- CompileAs="1"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="msvcrt.lib oldnames.lib zdll.lib"
- OutputFile="$(OutDir)\mapcache.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\3rdparty\zlib\lib"
- IgnoreAllDefaultLibraries="TRUE"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)\$(ProjectName).pdb"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- OptimizeForWindows98="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="common"
- Filter="">
- <File
- RelativePath="..\src\common\cbasetypes.h">
- </File>
- <File
- RelativePath="..\src\common\core.c">
- </File>
- <File
- RelativePath="..\src\common\core.h">
- </File>
- <File
- RelativePath="..\src\common\grfio.c">
- </File>
- <File
- RelativePath="..\src\common\grfio.h">
- </File>
- <File
- RelativePath="..\src\common\malloc.c">
- </File>
- <File
- RelativePath="..\src\common\malloc.h">
- </File>
- <File
- RelativePath="..\src\common\mmo.h">
- </File>
- <File
- RelativePath="..\src\common\showmsg.c">
- </File>
- <File
- RelativePath="..\src\common\showmsg.h">
- </File>
- <File
- RelativePath="..\src\common\strlib.c">
- </File>
- <File
- RelativePath="..\src\common\strlib.h">
- </File>
- <File
- RelativePath="..\src\common\utils.c">
- </File>
- <File
- RelativePath="..\src\common\utils.h">
- </File>
- <File
- RelativePath="..\src\common\version.h">
- </File>
- </Filter>
- <Filter
- Name="mapcache"
- Filter="">
- <File
- RelativePath="..\src\tool\mapcache.c">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/vcproj-8/char-server_sql.vcproj b/vcproj-8/char-server_sql.vcproj
deleted file mode 100644
index ecee855a8..000000000
--- a/vcproj-8/char-server_sql.vcproj
+++ /dev/null
@@ -1,445 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="8,00"
- Name="char-server_sql"
- ProjectGUID="{D356871D-58E1-450B-967A-E4E9646175AF}"
- RootNamespace="char-server_sql"
- Keyword="Win32Proj"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory=".."
- IntermediateDirectory="$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\3rdparty\mysql\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar"
- PreprocessorDefinitions="WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION"
- GeneratePreprocessedFile="0"
- MinimalRebuild="true"
- ExceptionHandling="0"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- EnableFunctionLevelLinking="true"
- DefaultCharIsUnsigned="false"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="4"
- CompileAs="1"
- DisableSpecificWarnings="4800"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libcmtd.lib oldnames.lib ws2_32.lib libmysql.lib"
- OutputFile="$(OutDir)\$(ProjectName).exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\3rdparty\mysql\lib"
- IgnoreAllDefaultLibraries="true"
- IgnoreDefaultLibraryNames=""
- GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)\$(ProjectName).pdb"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory=".."
- IntermediateDirectory="$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- CharacterSet="2"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="2"
- EnableIntrinsicFunctions="true"
- FavorSizeOrSpeed="1"
- OmitFramePointers="true"
- EnableFiberSafeOptimizations="true"
- WholeProgramOptimization="true"
- AdditionalIncludeDirectories="..\3rdparty\mysql\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar"
- PreprocessorDefinitions="WIN32;_WIN32;__WIN32;NDEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION"
- StringPooling="true"
- RuntimeLibrary="0"
- DefaultCharIsUnsigned="false"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="3"
- CompileAs="1"
- DisableSpecificWarnings="4800"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libcmt.lib oldnames.lib ws2_32.lib libmysql.lib"
- OutputFile="$(OutDir)\$(ProjectName).exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\3rdparty\mysql\lib"
- IgnoreAllDefaultLibraries="true"
- IgnoreDefaultLibraryNames=""
- GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)\$(ProjectName).pdb"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- LinkTimeCodeGeneration="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="3rdparty"
- >
- <File
- RelativePath="..\3rdparty\mt19937ar\mt19937ar.c"
- >
- </File>
- <File
- RelativePath="..\3rdparty\mt19937ar\mt19937ar.h"
- >
- </File>
- </Filter>
- <Filter
- Name="common"
- >
- <File
- RelativePath="..\src\common\cbasetypes.h"
- >
- </File>
- <File
- RelativePath="..\src\common\core.c"
- >
- </File>
- <File
- RelativePath="..\src\common\core.h"
- >
- </File>
- <File
- RelativePath="..\src\common\db.c"
- >
- </File>
- <File
- RelativePath="..\src\common\db.h"
- >
- </File>
- <File
- RelativePath="..\src\common\ers.c"
- >
- </File>
- <File
- RelativePath="..\src\common\ers.h"
- >
- </File>
- <File
- RelativePath="..\src\common\lock.c"
- >
- </File>
- <File
- RelativePath="..\src\common\lock.h"
- >
- </File>
- <File
- RelativePath="..\src\common\malloc.c"
- >
- </File>
- <File
- RelativePath="..\src\common\malloc.h"
- >
- </File>
- <File
- RelativePath="..\src\common\mapindex.c"
- >
- </File>
- <File
- RelativePath="..\src\common\mapindex.h"
- >
- </File>
- <File
- RelativePath="..\src\common\mmo.h"
- >
- </File>
- <File
- RelativePath="..\src\common\nullpo.c"
- >
- </File>
- <File
- RelativePath="..\src\common\nullpo.h"
- >
- </File>
- <File
- RelativePath="..\src\common\plugin.h"
- >
- </File>
- <File
- RelativePath="..\src\common\plugins.c"
- >
- </File>
- <File
- RelativePath="..\src\common\plugins.h"
- >
- </File>
- <File
- RelativePath="..\src\common\random.c"
- >
- </File>
- <File
- RelativePath="..\src\common\random.h"
- >
- </File>
- <File
- RelativePath="..\src\common\showmsg.c"
- >
- </File>
- <File
- RelativePath="..\src\common\showmsg.h"
- >
- </File>
- <File
- RelativePath="..\src\common\socket.c"
- >
- </File>
- <File
- RelativePath="..\src\common\socket.h"
- >
- </File>
- <File
- RelativePath="..\src\common\sql.c"
- >
- </File>
- <File
- RelativePath="..\src\common\sql.h"
- >
- </File>
- <File
- RelativePath="..\src\common\strlib.c"
- >
- </File>
- <File
- RelativePath="..\src\common\strlib.h"
- >
- </File>
- <File
- RelativePath="..\src\common\timer.c"
- >
- </File>
- <File
- RelativePath="..\src\common\timer.h"
- >
- </File>
- <File
- RelativePath="..\src\common\utils.c"
- >
- </File>
- <File
- RelativePath="..\src\common\utils.h"
- >
- </File>
- <File
- RelativePath="..\src\common\version.h"
- >
- </File>
- </Filter>
- <Filter
- Name="char_sql"
- >
- <File
- RelativePath="..\src\char_sql\char.c"
- >
- </File>
- <File
- RelativePath="..\src\char_sql\char.h"
- >
- </File>
- <File
- RelativePath="..\src\char_sql\int_auction.c"
- >
- </File>
- <File
- RelativePath="..\src\char_sql\int_auction.h"
- >
- </File>
- <File
- RelativePath="..\src\char_sql\int_guild.c"
- >
- </File>
- <File
- RelativePath="..\src\char_sql\int_guild.h"
- >
- </File>
- <File
- RelativePath="..\src\char_sql\int_homun.c"
- >
- </File>
- <File
- RelativePath="..\src\char_sql\int_homun.h"
- >
- </File>
- <File
- RelativePath="..\src\char_sql\int_mail.c"
- >
- </File>
- <File
- RelativePath="..\src\char_sql\int_mail.h"
- >
- </File>
- <File
- RelativePath="..\src\char_sql\int_mercenary.c"
- >
- </File>
- <File
- RelativePath="..\src\char_sql\int_mercenary.h"
- >
- </File>
- <File
- RelativePath="..\src\char_sql\int_party.c"
- >
- </File>
- <File
- RelativePath="..\src\char_sql\int_party.h"
- >
- </File>
- <File
- RelativePath="..\src\char_sql\int_pet.c"
- >
- </File>
- <File
- RelativePath="..\src\char_sql\int_pet.h"
- >
- </File>
- <File
- RelativePath="..\src\char_sql\int_quest.c"
- >
- </File>
- <File
- RelativePath="..\src\char_sql\int_quest.h"
- >
- </File>
- <File
- RelativePath="..\src\char_sql\int_storage.c"
- >
- </File>
- <File
- RelativePath="..\src\char_sql\int_storage.h"
- >
- </File>
- <File
- RelativePath="..\src\char_sql\inter.c"
- >
- </File>
- <File
- RelativePath="..\src\char_sql\inter.h"
- >
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/vcproj-8/char-server_txt.vcproj b/vcproj-8/char-server_txt.vcproj
deleted file mode 100644
index da689efe5..000000000
--- a/vcproj-8/char-server_txt.vcproj
+++ /dev/null
@@ -1,411 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="8,00"
- Name="char-server_txt"
- ProjectGUID="{D356871D-58E1-450B-967A-E3E9646175AF}"
- RootNamespace="char-server_txt"
- Keyword="Win32Proj"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory=".."
- IntermediateDirectory="$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar"
- PreprocessorDefinitions="WIN32;_WIN32;__WIN32;_DEBUG;TXT_ONLY;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION"
- GeneratePreprocessedFile="0"
- MinimalRebuild="true"
- ExceptionHandling="0"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- EnableFunctionLevelLinking="true"
- DefaultCharIsUnsigned="false"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="4"
- CompileAs="1"
- DisableSpecificWarnings="4800"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libcmtd.lib oldnames.lib ws2_32.lib"
- OutputFile="$(OutDir)\char-server.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories=""
- IgnoreAllDefaultLibraries="true"
- GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)\char-server.pdb"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory=".."
- IntermediateDirectory="$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- CharacterSet="2"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="2"
- EnableIntrinsicFunctions="true"
- FavorSizeOrSpeed="1"
- OmitFramePointers="true"
- EnableFiberSafeOptimizations="true"
- WholeProgramOptimization="true"
- AdditionalIncludeDirectories="..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar"
- PreprocessorDefinitions="WIN32;_WIN32;__WIN32;NDEBUG;TXT_ONLY;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION"
- StringPooling="true"
- RuntimeLibrary="0"
- DefaultCharIsUnsigned="false"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="3"
- CompileAs="1"
- DisableSpecificWarnings="4800"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libcmt.lib oldnames.lib ws2_32.lib"
- OutputFile="$(OutDir)\char-server.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories=""
- IgnoreAllDefaultLibraries="true"
- GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)\char-server.pdb"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- LinkTimeCodeGeneration="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="char_txt"
- >
- <File
- RelativePath="..\src\char\char.c"
- >
- </File>
- <File
- RelativePath="..\src\char\char.h"
- >
- </File>
- <File
- RelativePath="..\src\char\int_guild.c"
- >
- </File>
- <File
- RelativePath="..\src\char\int_guild.h"
- >
- </File>
- <File
- RelativePath="..\src\char\int_homun.c"
- >
- </File>
- <File
- RelativePath="..\src\char\int_homun.h"
- >
- </File>
- <File
- RelativePath="..\src\char\int_party.c"
- >
- </File>
- <File
- RelativePath="..\src\char\int_party.h"
- >
- </File>
- <File
- RelativePath="..\src\char\int_pet.c"
- >
- </File>
- <File
- RelativePath="..\src\char\int_pet.h"
- >
- </File>
- <File
- RelativePath="..\src\char\int_status.c"
- >
- </File>
- <File
- RelativePath="..\src\char\int_status.h"
- >
- </File>
- <File
- RelativePath="..\src\char\int_storage.c"
- >
- </File>
- <File
- RelativePath="..\src\char\int_storage.h"
- >
- </File>
- <File
- RelativePath="..\src\char\inter.c"
- >
- </File>
- <File
- RelativePath="..\src\char\inter.h"
- >
- </File>
- </Filter>
- <Filter
- Name="common"
- >
- <File
- RelativePath="..\src\common\cbasetypes.h"
- >
- </File>
- <File
- RelativePath="..\src\common\core.c"
- >
- </File>
- <File
- RelativePath="..\src\common\core.h"
- >
- </File>
- <File
- RelativePath="..\src\common\db.c"
- >
- </File>
- <File
- RelativePath="..\src\common\db.h"
- >
- </File>
- <File
- RelativePath="..\src\common\ers.c"
- >
- </File>
- <File
- RelativePath="..\src\common\ers.h"
- >
- </File>
- <File
- RelativePath="..\src\common\lock.c"
- >
- </File>
- <File
- RelativePath="..\src\common\lock.h"
- >
- </File>
- <File
- RelativePath="..\src\common\malloc.c"
- >
- </File>
- <File
- RelativePath="..\src\common\malloc.h"
- >
- </File>
- <File
- RelativePath="..\src\common\mapindex.c"
- >
- </File>
- <File
- RelativePath="..\src\common\mapindex.h"
- >
- </File>
- <File
- RelativePath="..\src\common\mmo.h"
- >
- </File>
- <File
- RelativePath="..\src\common\nullpo.c"
- >
- </File>
- <File
- RelativePath="..\src\common\nullpo.h"
- >
- </File>
- <File
- RelativePath="..\src\common\plugin.h"
- >
- </File>
- <File
- RelativePath="..\src\common\plugins.c"
- >
- </File>
- <File
- RelativePath="..\src\common\plugins.h"
- >
- </File>
- <File
- RelativePath="..\src\common\random.c"
- >
- </File>
- <File
- RelativePath="..\src\common\random.h"
- >
- </File>
- <File
- RelativePath="..\src\common\showmsg.c"
- >
- </File>
- <File
- RelativePath="..\src\common\showmsg.h"
- >
- </File>
- <File
- RelativePath="..\src\common\socket.c"
- >
- </File>
- <File
- RelativePath="..\src\common\socket.h"
- >
- </File>
- <File
- RelativePath="..\src\common\strlib.c"
- >
- </File>
- <File
- RelativePath="..\src\common\strlib.h"
- >
- </File>
- <File
- RelativePath="..\src\common\timer.c"
- >
- </File>
- <File
- RelativePath="..\src\common\timer.h"
- >
- </File>
- <File
- RelativePath="..\src\common\utils.c"
- >
- </File>
- <File
- RelativePath="..\src\common\utils.h"
- >
- </File>
- <File
- RelativePath="..\src\common\version.h"
- >
- </File>
- </Filter>
- <Filter
- Name="3rdparty"
- >
- <File
- RelativePath="..\3rdparty\mt19937ar\mt19937ar.c"
- >
- </File>
- <File
- RelativePath="..\3rdparty\mt19937ar\mt19937ar.h"
- >
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/vcproj-8/dbghelpplug.vcproj b/vcproj-8/dbghelpplug.vcproj
deleted file mode 100644
index 59d53f5c5..000000000
--- a/vcproj-8/dbghelpplug.vcproj
+++ /dev/null
@@ -1,211 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="8.00"
- Name="dbghelpplug"
- ProjectGUID="{334742E0-7790-4857-A794-A54625D93487}"
- RootNamespace="dbghelpplug"
- Keyword="Win32Proj"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory=".."
- IntermediateDirectory="$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="2"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;DBGHELPPLUG_EXPORTS;_CRT_SECURE_NO_DEPRECATE"
- StringPooling="false"
- MinimalRebuild="true"
- ExceptionHandling="0"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- BufferSecurityCheck="true"
- EnableFunctionLevelLinking="true"
- DefaultCharIsUnsigned="false"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="4"
- CompileAs="1"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libcmtd.lib"
- OutputFile="$(OutDir)\plugins\$(ProjectName).dll"
- LinkIncremental="2"
- IgnoreAllDefaultLibraries="true"
- GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)\plugins\$(ProjectName).pdb"
- SubSystem="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory=".."
- IntermediateDirectory="$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="2"
- CharacterSet="2"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;DBGHELPPLUG_EXPORTS;_CRT_SECURE_NO_DEPRECATE"
- StringPooling="true"
- MinimalRebuild="false"
- ExceptionHandling="0"
- BasicRuntimeChecks="0"
- RuntimeLibrary="0"
- BufferSecurityCheck="false"
- EnableFunctionLevelLinking="false"
- DisableLanguageExtensions="false"
- DefaultCharIsUnsigned="false"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="0"
- CompileAs="1"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libcmt.lib"
- OutputFile="$(OutDir)\plugins\$(ProjectName).dll"
- LinkIncremental="1"
- IgnoreAllDefaultLibraries="true"
- GenerateDebugInformation="false"
- SubSystem="2"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="plugin"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath="..\src\plugins\dbghelpplug.c"
- >
- </File>
- <File
- RelativePath="..\src\plugins\dbghelpplug.rc"
- >
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/vcproj-8/login-server_sql.vcproj b/vcproj-8/login-server_sql.vcproj
deleted file mode 100644
index bf2526125..000000000
--- a/vcproj-8/login-server_sql.vcproj
+++ /dev/null
@@ -1,391 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="8,00"
- Name="login-server_sql"
- ProjectGUID="{D356871D-58E1-450B-967A-E5E9646175AF}"
- RootNamespace="login-server_sql"
- Keyword="Win32Proj"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory=".."
- IntermediateDirectory="$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\3rdparty\mysql\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar"
- PreprocessorDefinitions="WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION;WITH_SQL"
- GeneratePreprocessedFile="0"
- MinimalRebuild="true"
- ExceptionHandling="0"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- EnableFunctionLevelLinking="true"
- DefaultCharIsUnsigned="false"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="4"
- CompileAs="1"
- DisableSpecificWarnings="4100;4800"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libcmtd.lib oldnames.lib ws2_32.lib libmysql.lib"
- OutputFile="$(OutDir)\$(ProjectName).exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\3rdparty\mysql\lib"
- IgnoreAllDefaultLibraries="true"
- IgnoreDefaultLibraryNames=""
- GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)\$(ProjectName).pdb"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory=".."
- IntermediateDirectory="$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- CharacterSet="2"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="2"
- EnableIntrinsicFunctions="true"
- FavorSizeOrSpeed="1"
- OmitFramePointers="true"
- EnableFiberSafeOptimizations="true"
- WholeProgramOptimization="true"
- AdditionalIncludeDirectories="..\3rdparty\mysql\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar"
- PreprocessorDefinitions="WIN32;_WIN32;__WIN32;NDEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION;WITH_SQL"
- StringPooling="true"
- RuntimeLibrary="0"
- DefaultCharIsUnsigned="false"
- UsePrecompiledHeader="0"
- PrecompiledHeaderThrough=""
- PrecompiledHeaderFile=""
- WarningLevel="3"
- DebugInformationFormat="3"
- CompileAs="1"
- DisableSpecificWarnings="4100;4800"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libcmt.lib oldnames.lib ws2_32.lib libmysql.lib"
- OutputFile="$(OutDir)\$(ProjectName).exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\3rdparty\mysql\lib"
- IgnoreAllDefaultLibraries="true"
- IgnoreDefaultLibraryNames=""
- GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)\$(ProjectName).pdb"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- LinkTimeCodeGeneration="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="login_sql"
- >
- <File
- RelativePath="..\src\login\account.h"
- >
- </File>
- <File
- RelativePath="..\src\login\account_sql.c"
- >
- </File>
- <File
- RelativePath="..\src\login\ipban.h"
- >
- </File>
- <File
- RelativePath="..\src\login\ipban_sql.c"
- >
- </File>
- <File
- RelativePath="..\src\login\login.c"
- >
- </File>
- <File
- RelativePath="..\src\login\login.h"
- >
- </File>
- <File
- RelativePath="..\src\login\loginlog.h"
- >
- </File>
- <File
- RelativePath="..\src\login\loginlog_sql.c"
- >
- </File>
- </Filter>
- <Filter
- Name="common"
- >
- <File
- RelativePath="..\src\common\cbasetypes.h"
- >
- </File>
- <File
- RelativePath="..\src\common\core.c"
- >
- </File>
- <File
- RelativePath="..\src\common\core.h"
- >
- </File>
- <File
- RelativePath="..\src\common\db.c"
- >
- </File>
- <File
- RelativePath="..\src\common\db.h"
- >
- </File>
- <File
- RelativePath="..\src\common\ers.c"
- >
- </File>
- <File
- RelativePath="..\src\common\ers.h"
- >
- </File>
- <File
- RelativePath="..\src\common\lock.c"
- >
- </File>
- <File
- RelativePath="..\src\common\lock.h"
- >
- </File>
- <File
- RelativePath="..\src\common\malloc.c"
- >
- </File>
- <File
- RelativePath="..\src\common\malloc.h"
- >
- </File>
- <File
- RelativePath="..\src\common\md5calc.c"
- >
- </File>
- <File
- RelativePath="..\src\common\md5calc.h"
- >
- </File>
- <File
- RelativePath="..\src\common\mmo.h"
- >
- </File>
- <File
- RelativePath="..\src\common\nullpo.c"
- >
- </File>
- <File
- RelativePath="..\src\common\nullpo.h"
- >
- </File>
- <File
- RelativePath="..\src\common\plugin.h"
- >
- </File>
- <File
- RelativePath="..\src\common\plugins.c"
- >
- </File>
- <File
- RelativePath="..\src\common\plugins.h"
- >
- </File>
- <File
- RelativePath="..\src\common\random.c"
- >
- </File>
- <File
- RelativePath="..\src\common\random.h"
- >
- </File>
- <File
- RelativePath="..\src\common\showmsg.c"
- >
- </File>
- <File
- RelativePath="..\src\common\showmsg.h"
- >
- </File>
- <File
- RelativePath="..\src\common\socket.c"
- >
- </File>
- <File
- RelativePath="..\src\common\socket.h"
- >
- </File>
- <File
- RelativePath="..\src\common\sql.c"
- >
- </File>
- <File
- RelativePath="..\src\common\sql.h"
- >
- </File>
- <File
- RelativePath="..\src\common\strlib.c"
- >
- </File>
- <File
- RelativePath="..\src\common\strlib.h"
- >
- </File>
- <File
- RelativePath="..\src\common\timer.c"
- >
- </File>
- <File
- RelativePath="..\src\common\timer.h"
- >
- </File>
- <File
- RelativePath="..\src\common\utils.c"
- >
- </File>
- <File
- RelativePath="..\src\common\utils.h"
- >
- </File>
- <File
- RelativePath="..\src\common\version.h"
- >
- </File>
- </Filter>
- <Filter
- Name="3rdparty"
- >
- <File
- RelativePath="..\3rdparty\mt19937ar\mt19937ar.c"
- >
- </File>
- <File
- RelativePath="..\3rdparty\mt19937ar\mt19937ar.h"
- >
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/vcproj-8/login-server_txt.vcproj b/vcproj-8/login-server_txt.vcproj
deleted file mode 100644
index ba298908e..000000000
--- a/vcproj-8/login-server_txt.vcproj
+++ /dev/null
@@ -1,374 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="8,00"
- Name="login-server_txt"
- ProjectGUID="{D356871D-58E1-450B-967A-E2E9646175AF}"
- RootNamespace="login-server_txt"
- Keyword="Win32Proj"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory=".."
- IntermediateDirectory="$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar"
- PreprocessorDefinitions="WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION;WITH_TXT"
- GeneratePreprocessedFile="0"
- MinimalRebuild="true"
- ExceptionHandling="0"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- EnableFunctionLevelLinking="true"
- DefaultCharIsUnsigned="false"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="4"
- CompileAs="1"
- DisableSpecificWarnings="4100;4800"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libcmtd.lib oldnames.lib ws2_32.lib"
- ShowProgress="0"
- OutputFile="$(OutDir)\login-server.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories=""
- IgnoreAllDefaultLibraries="true"
- GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)\login-server.pdb"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory=".."
- IntermediateDirectory="$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="2"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="2"
- EnableIntrinsicFunctions="true"
- FavorSizeOrSpeed="1"
- OmitFramePointers="true"
- EnableFiberSafeOptimizations="true"
- WholeProgramOptimization="true"
- AdditionalIncludeDirectories="..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar"
- PreprocessorDefinitions="WIN32;_WIN32;__WIN32;NDEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION;WITH_TXT"
- StringPooling="true"
- RuntimeLibrary="0"
- DefaultCharIsUnsigned="false"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="3"
- CompileAs="1"
- DisableSpecificWarnings="4100;4800"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libcmt.lib oldnames.lib ws2_32.lib"
- OutputFile="$(OutDir)\login-server.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories=""
- IgnoreAllDefaultLibraries="true"
- GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)\login-server.pdb"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- LinkTimeCodeGeneration="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="login_txt"
- >
- <File
- RelativePath="..\src\login\account.h"
- >
- </File>
- <File
- RelativePath="..\src\login\account_txt.c"
- >
- </File>
- <File
- RelativePath="..\src\login\ipban.h"
- >
- </File>
- <File
- RelativePath="..\src\login\ipban_txt.c"
- >
- </File>
- <File
- RelativePath="..\src\login\login.c"
- >
- </File>
- <File
- RelativePath="..\src\login\login.h"
- >
- </File>
- <File
- RelativePath="..\src\login\loginlog.h"
- >
- </File>
- <File
- RelativePath="..\src\login\loginlog_txt.c"
- >
- </File>
- </Filter>
- <Filter
- Name="common"
- >
- <File
- RelativePath="..\src\common\cbasetypes.h"
- >
- </File>
- <File
- RelativePath="..\src\common\core.c"
- >
- </File>
- <File
- RelativePath="..\src\common\core.h"
- >
- </File>
- <File
- RelativePath="..\src\common\db.c"
- >
- </File>
- <File
- RelativePath="..\src\common\db.h"
- >
- </File>
- <File
- RelativePath="..\src\common\ers.c"
- >
- </File>
- <File
- RelativePath="..\src\common\lock.c"
- >
- </File>
- <File
- RelativePath="..\src\common\lock.h"
- >
- </File>
- <File
- RelativePath="..\src\common\malloc.c"
- >
- </File>
- <File
- RelativePath="..\src\common\malloc.h"
- >
- </File>
- <File
- RelativePath="..\src\common\md5calc.c"
- >
- </File>
- <File
- RelativePath="..\src\common\md5calc.h"
- >
- </File>
- <File
- RelativePath="..\src\common\mmo.h"
- >
- </File>
- <File
- RelativePath="..\src\common\nullpo.c"
- >
- </File>
- <File
- RelativePath="..\src\common\nullpo.h"
- >
- </File>
- <File
- RelativePath="..\src\common\plugin.h"
- >
- </File>
- <File
- RelativePath="..\src\common\plugins.c"
- >
- </File>
- <File
- RelativePath="..\src\common\plugins.h"
- >
- </File>
- <File
- RelativePath="..\src\common\random.c"
- >
- </File>
- <File
- RelativePath="..\src\common\random.h"
- >
- </File>
- <File
- RelativePath="..\src\common\showmsg.c"
- >
- </File>
- <File
- RelativePath="..\src\common\showmsg.h"
- >
- </File>
- <File
- RelativePath="..\src\common\socket.c"
- >
- </File>
- <File
- RelativePath="..\src\common\socket.h"
- >
- </File>
- <File
- RelativePath="..\src\common\strlib.c"
- >
- </File>
- <File
- RelativePath="..\src\common\strlib.h"
- >
- </File>
- <File
- RelativePath="..\src\common\timer.c"
- >
- </File>
- <File
- RelativePath="..\src\common\timer.h"
- >
- </File>
- <File
- RelativePath="..\src\common\utils.c"
- >
- </File>
- <File
- RelativePath="..\src\common\utils.h"
- >
- </File>
- <File
- RelativePath="..\src\common\version.h"
- >
- </File>
- </Filter>
- <Filter
- Name="3rdparty"
- >
- <File
- RelativePath="..\3rdparty\mt19937ar\mt19937ar.c"
- >
- </File>
- <File
- RelativePath="..\3rdparty\mt19937ar\mt19937ar.h"
- >
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/vcproj-8/map-server_sql.vcproj b/vcproj-8/map-server_sql.vcproj
deleted file mode 100644
index 1f68af297..000000000
--- a/vcproj-8/map-server_sql.vcproj
+++ /dev/null
@@ -1,654 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="8,00"
- Name="map-server_sql"
- ProjectGUID="{D356871D-58E1-450B-967A-E6E9646175AF}"
- RootNamespace="map-server_sql"
- Keyword="Win32Proj"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory=".."
- IntermediateDirectory="$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\3rdparty\mysql\include;..\3rdparty\zlib\include;..\3rdparty\pcre\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar"
- PreprocessorDefinitions="WIN32;_WIN32;__WIN32;_DEBUG;PCRE_SUPPORT;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION"
- GeneratePreprocessedFile="0"
- MinimalRebuild="true"
- ExceptionHandling="0"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- EnableFunctionLevelLinking="true"
- DefaultCharIsUnsigned="false"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="4"
- CompileAs="1"
- DisableSpecificWarnings="4018;4100;4800"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libcmtd.lib oldnames.lib ws2_32.lib libmysql.lib zdll.lib pcre.lib"
- OutputFile="$(OutDir)\$(ProjectName).exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\3rdparty\mysql\lib;..\3rdparty\zlib\lib;..\3rdparty\pcre\lib"
- IgnoreAllDefaultLibraries="true"
- IgnoreDefaultLibraryNames=""
- GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)\$(ProjectName).pdb"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory=".."
- IntermediateDirectory="$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- CharacterSet="2"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="2"
- EnableIntrinsicFunctions="true"
- FavorSizeOrSpeed="1"
- OmitFramePointers="true"
- EnableFiberSafeOptimizations="true"
- WholeProgramOptimization="true"
- AdditionalIncludeDirectories="..\3rdparty\mysql\include;..\3rdparty\zlib\include;..\3rdparty\pcre\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar"
- PreprocessorDefinitions="WIN32;_WIN32;__WIN32;NDEBUG;PCRE_SUPPORT;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION"
- StringPooling="true"
- RuntimeLibrary="0"
- DefaultCharIsUnsigned="false"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="3"
- CompileAs="1"
- DisableSpecificWarnings="4018;4100;4800"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libcmt.lib oldnames.lib ws2_32.lib libmysql.lib zdll.lib pcre.lib"
- OutputFile="$(OutDir)\$(ProjectName).exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\3rdparty\mysql\lib;..\3rdparty\zlib\lib;..\3rdparty\pcre\lib"
- IgnoreAllDefaultLibraries="true"
- IgnoreDefaultLibraryNames=""
- GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)\$(ProjectName).pdb"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- LinkTimeCodeGeneration="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="3rdparty"
- >
- <File
- RelativePath="..\3rdparty\mt19937ar\mt19937ar.c"
- >
- </File>
- <File
- RelativePath="..\3rdparty\mt19937ar\mt19937ar.h"
- >
- </File>
- </Filter>
- <Filter
- Name="common"
- >
- <File
- RelativePath="..\src\common\cbasetypes.h"
- >
- </File>
- <File
- RelativePath="..\src\common\core.c"
- >
- </File>
- <File
- RelativePath="..\src\common\core.h"
- >
- </File>
- <File
- RelativePath="..\src\common\db.c"
- >
- </File>
- <File
- RelativePath="..\src\common\db.h"
- >
- </File>
- <File
- RelativePath="..\src\common\ers.c"
- >
- </File>
- <File
- RelativePath="..\src\common\ers.h"
- >
- </File>
- <File
- RelativePath="..\src\common\grfio.c"
- >
- </File>
- <File
- RelativePath="..\src\common\grfio.h"
- >
- </File>
- <File
- RelativePath="..\src\common\lock.c"
- >
- </File>
- <File
- RelativePath="..\src\common\lock.h"
- >
- </File>
- <File
- RelativePath="..\src\common\malloc.c"
- >
- </File>
- <File
- RelativePath="..\src\common\malloc.h"
- >
- </File>
- <File
- RelativePath="..\src\common\mapindex.c"
- >
- </File>
- <File
- RelativePath="..\src\common\mapindex.h"
- >
- </File>
- <File
- RelativePath="..\src\common\md5calc.c"
- >
- </File>
- <File
- RelativePath="..\src\common\md5calc.h"
- >
- </File>
- <File
- RelativePath="..\src\common\mmo.h"
- >
- </File>
- <File
- RelativePath="..\src\common\nullpo.c"
- >
- </File>
- <File
- RelativePath="..\src\common\nullpo.h"
- >
- </File>
- <File
- RelativePath="..\src\common\plugin.h"
- >
- </File>
- <File
- RelativePath="..\src\common\plugins.c"
- >
- </File>
- <File
- RelativePath="..\src\common\plugins.h"
- >
- </File>
- <File
- RelativePath="..\src\common\random.c"
- >
- </File>
- <File
- RelativePath="..\src\common\random.h"
- >
- </File>
- <File
- RelativePath="..\src\common\showmsg.c"
- >
- </File>
- <File
- RelativePath="..\src\common\showmsg.h"
- >
- </File>
- <File
- RelativePath="..\src\common\socket.c"
- >
- </File>
- <File
- RelativePath="..\src\common\socket.h"
- >
- </File>
- <File
- RelativePath="..\src\common\sql.c"
- >
- </File>
- <File
- RelativePath="..\src\common\sql.h"
- >
- </File>
- <File
- RelativePath="..\src\common\strlib.c"
- >
- </File>
- <File
- RelativePath="..\src\common\strlib.h"
- >
- </File>
- <File
- RelativePath="..\src\common\timer.c"
- >
- </File>
- <File
- RelativePath="..\src\common\timer.h"
- >
- </File>
- <File
- RelativePath="..\src\common\utils.c"
- >
- </File>
- <File
- RelativePath="..\src\common\utils.h"
- >
- </File>
- <File
- RelativePath="..\src\common\version.h"
- >
- </File>
- </Filter>
- <Filter
- Name="map_sql"
- >
- <File
- RelativePath="..\src\map\atcommand.c"
- >
- </File>
- <File
- RelativePath="..\src\map\atcommand.h"
- >
- </File>
- <File
- RelativePath="..\src\map\battle.c"
- >
- </File>
- <File
- RelativePath="..\src\map\battle.h"
- >
- </File>
- <File
- RelativePath="..\src\map\battleground.c"
- >
- </File>
- <File
- RelativePath="..\src\map\battleground.h"
- >
- </File>
- <File
- RelativePath="..\src\map\buyingstore.c"
- >
- </File>
- <File
- RelativePath="..\src\map\buyingstore.h"
- >
- </File>
- <File
- RelativePath="..\src\map\chat.c"
- >
- </File>
- <File
- RelativePath="..\src\map\chat.h"
- >
- </File>
- <File
- RelativePath="..\src\map\chrif.c"
- >
- </File>
- <File
- RelativePath="..\src\map\chrif.h"
- >
- </File>
- <File
- RelativePath="..\src\map\clif.c"
- >
- </File>
- <File
- RelativePath="..\src\map\clif.h"
- >
- </File>
- <File
- RelativePath="..\src\map\date.c"
- >
- </File>
- <File
- RelativePath="..\src\map\date.h"
- >
- </File>
- <File
- RelativePath="..\src\map\duel.c"
- >
- </File>
- <File
- RelativePath="..\src\map\duel.h"
- >
- </File>
- <File
- RelativePath="..\src\map\guild.c"
- >
- </File>
- <File
- RelativePath="..\src\map\guild.h"
- >
- </File>
- <File
- RelativePath="..\src\map\homunculus.c"
- >
- </File>
- <File
- RelativePath="..\src\map\homunculus.h"
- >
- </File>
- <File
- RelativePath="..\src\map\instance.c"
- >
- </File>
- <File
- RelativePath="..\src\map\instance.h"
- >
- </File>
- <File
- RelativePath="..\src\map\intif.c"
- >
- </File>
- <File
- RelativePath="..\src\map\intif.h"
- >
- </File>
- <File
- RelativePath="..\src\map\itemdb.c"
- >
- </File>
- <File
- RelativePath="..\src\map\itemdb.h"
- >
- </File>
- <File
- RelativePath="..\src\map\log.c"
- >
- </File>
- <File
- RelativePath="..\src\map\log.h"
- >
- </File>
- <File
- RelativePath="..\src\map\mail.c"
- >
- </File>
- <File
- RelativePath="..\src\map\mail.h"
- >
- </File>
- <File
- RelativePath="..\src\map\map.c"
- >
- </File>
- <File
- RelativePath="..\src\map\map.h"
- >
- </File>
- <File
- RelativePath="..\src\map\mapreg.h"
- >
- </File>
- <File
- RelativePath="..\src\map\mapreg_sql.c"
- >
- </File>
- <File
- RelativePath="..\src\map\mercenary.c"
- >
- </File>
- <File
- RelativePath="..\src\map\mercenary.h"
- >
- </File>
- <File
- RelativePath="..\src\map\mob.c"
- >
- </File>
- <File
- RelativePath="..\src\map\mob.h"
- >
- </File>
- <File
- RelativePath="..\src\map\npc.c"
- >
- </File>
- <File
- RelativePath="..\src\map\npc.h"
- >
- </File>
- <File
- RelativePath="..\src\map\npc_chat.c"
- >
- </File>
- <File
- RelativePath="..\src\map\party.c"
- >
- </File>
- <File
- RelativePath="..\src\map\party.h"
- >
- </File>
- <File
- RelativePath="..\src\map\path.c"
- >
- </File>
- <File
- RelativePath="..\src\map\path.h"
- >
- </File>
- <File
- RelativePath="..\src\map\pc.c"
- >
- </File>
- <File
- RelativePath="..\src\map\pc.h"
- >
- </File>
- <File
- RelativePath="..\src\map\pet.c"
- >
- </File>
- <File
- RelativePath="..\src\map\pet.h"
- >
- </File>
- <File
- RelativePath="..\src\map\quest.c"
- >
- </File>
- <File
- RelativePath="..\src\map\quest.h"
- >
- </File>
- <File
- RelativePath="..\src\map\script.c"
- >
- </File>
- <File
- RelativePath="..\src\map\script.h"
- >
- </File>
- <File
- RelativePath="..\src\map\searchstore.c"
- >
- </File>
- <File
- RelativePath="..\src\map\searchstore.h"
- >
- </File>
- <File
- RelativePath="..\src\map\skill.c"
- >
- </File>
- <File
- RelativePath="..\src\map\skill.h"
- >
- </File>
- <File
- RelativePath="..\src\map\status.c"
- >
- </File>
- <File
- RelativePath="..\src\map\status.h"
- >
- </File>
- <File
- RelativePath="..\src\map\storage.c"
- >
- </File>
- <File
- RelativePath="..\src\map\storage.h"
- >
- </File>
- <File
- RelativePath="..\src\map\trade.c"
- >
- </File>
- <File
- RelativePath="..\src\map\trade.h"
- >
- </File>
- <File
- RelativePath="..\src\map\unit.c"
- >
- </File>
- <File
- RelativePath="..\src\map\unit.h"
- >
- </File>
- <File
- RelativePath="..\src\map\vending.c"
- >
- </File>
- <File
- RelativePath="..\src\map\vending.h"
- >
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/vcproj-8/map-server_txt.vcproj b/vcproj-8/map-server_txt.vcproj
deleted file mode 100644
index ab7f5ab24..000000000
--- a/vcproj-8/map-server_txt.vcproj
+++ /dev/null
@@ -1,645 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="8,00"
- Name="map-server_txt"
- ProjectGUID="{D356871D-58E1-450B-967A-E1E9646175AF}"
- RootNamespace="map-server_txt"
- Keyword="Win32Proj"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory=".."
- IntermediateDirectory="$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\3rdparty\zlib\include;..\3rdparty\pcre\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar"
- PreprocessorDefinitions="WIN32;_WIN32;__WIN32;_DEBUG;PCRE_SUPPORT;TXT_ONLY;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION"
- GeneratePreprocessedFile="0"
- MinimalRebuild="true"
- ExceptionHandling="0"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- EnableFunctionLevelLinking="true"
- DefaultCharIsUnsigned="false"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="4"
- CompileAs="1"
- DisableSpecificWarnings="4018;4100;4800"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalOptions="/FIXED:NO"
- AdditionalDependencies="libcmtd.lib oldnames.lib ws2_32.lib zdll.lib pcre.lib"
- OutputFile="$(OutDir)\map-server.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\3rdparty\zlib\lib;..\3rdparty\pcre\lib"
- IgnoreAllDefaultLibraries="true"
- GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)\map-server.pdb"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory=".."
- IntermediateDirectory="$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="2"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="2"
- EnableIntrinsicFunctions="true"
- FavorSizeOrSpeed="1"
- OmitFramePointers="true"
- EnableFiberSafeOptimizations="true"
- WholeProgramOptimization="true"
- AdditionalIncludeDirectories="..\3rdparty\zlib\include;..\3rdparty\pcre\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar"
- PreprocessorDefinitions="WIN32;_WIN32;__WIN32;NDEBUG;PCRE_SUPPORT;TXT_ONLY;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION"
- StringPooling="true"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="false"
- DefaultCharIsUnsigned="false"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="3"
- CompileAs="1"
- DisableSpecificWarnings="4018;4100;4800"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libcmt.lib oldnames.lib ws2_32.lib zdll.lib pcre.lib"
- OutputFile="$(OutDir)\map-server.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\3rdparty\zlib\lib;..\3rdparty\pcre\lib"
- IgnoreAllDefaultLibraries="true"
- GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)\map-server.pdb"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- LinkTimeCodeGeneration="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="map_txt"
- >
- <File
- RelativePath="..\src\map\atcommand.c"
- >
- </File>
- <File
- RelativePath="..\src\map\atcommand.h"
- >
- </File>
- <File
- RelativePath="..\src\map\battle.c"
- >
- </File>
- <File
- RelativePath="..\src\map\battle.h"
- >
- </File>
- <File
- RelativePath="..\src\map\battleground.c"
- >
- </File>
- <File
- RelativePath="..\src\map\battleground.h"
- >
- </File>
- <File
- RelativePath="..\src\map\buyingstore.c"
- >
- </File>
- <File
- RelativePath="..\src\map\buyingstore.h"
- >
- </File>
- <File
- RelativePath="..\src\map\chat.c"
- >
- </File>
- <File
- RelativePath="..\src\map\chat.h"
- >
- </File>
- <File
- RelativePath="..\src\map\chrif.c"
- >
- </File>
- <File
- RelativePath="..\src\map\chrif.h"
- >
- </File>
- <File
- RelativePath="..\src\map\clif.c"
- >
- </File>
- <File
- RelativePath="..\src\map\clif.h"
- >
- </File>
- <File
- RelativePath="..\src\map\date.c"
- >
- </File>
- <File
- RelativePath="..\src\map\date.h"
- >
- </File>
- <File
- RelativePath="..\src\map\duel.c"
- >
- </File>
- <File
- RelativePath="..\src\map\duel.h"
- >
- </File>
- <File
- RelativePath="..\src\map\guild.c"
- >
- </File>
- <File
- RelativePath="..\src\map\guild.h"
- >
- </File>
- <File
- RelativePath="..\src\map\homunculus.c"
- >
- </File>
- <File
- RelativePath="..\src\map\homunculus.h"
- >
- </File>
- <File
- RelativePath="..\src\map\instance.c"
- >
- </File>
- <File
- RelativePath="..\src\map\instance.h"
- >
- </File>
- <File
- RelativePath="..\src\map\intif.c"
- >
- </File>
- <File
- RelativePath="..\src\map\intif.h"
- >
- </File>
- <File
- RelativePath="..\src\map\itemdb.c"
- >
- </File>
- <File
- RelativePath="..\src\map\itemdb.h"
- >
- </File>
- <File
- RelativePath="..\src\map\log.c"
- >
- </File>
- <File
- RelativePath="..\src\map\log.h"
- >
- </File>
- <File
- RelativePath="..\src\map\mail.c"
- >
- </File>
- <File
- RelativePath="..\src\map\mail.h"
- >
- </File>
- <File
- RelativePath="..\src\map\map.c"
- >
- </File>
- <File
- RelativePath="..\src\map\map.h"
- >
- </File>
- <File
- RelativePath="..\src\map\mapreg.h"
- >
- </File>
- <File
- RelativePath="..\src\map\mapreg_txt.c"
- >
- </File>
- <File
- RelativePath="..\src\map\mercenary.c"
- >
- </File>
- <File
- RelativePath="..\src\map\mercenary.h"
- >
- </File>
- <File
- RelativePath="..\src\map\mob.c"
- >
- </File>
- <File
- RelativePath="..\src\map\mob.h"
- >
- </File>
- <File
- RelativePath="..\src\map\npc.c"
- >
- </File>
- <File
- RelativePath="..\src\map\npc.h"
- >
- </File>
- <File
- RelativePath="..\src\map\npc_chat.c"
- >
- </File>
- <File
- RelativePath="..\src\map\party.c"
- >
- </File>
- <File
- RelativePath="..\src\map\party.h"
- >
- </File>
- <File
- RelativePath="..\src\map\path.c"
- >
- </File>
- <File
- RelativePath="..\src\map\path.h"
- >
- </File>
- <File
- RelativePath="..\src\map\pc.c"
- >
- </File>
- <File
- RelativePath="..\src\map\pc.h"
- >
- </File>
- <File
- RelativePath="..\src\map\pet.c"
- >
- </File>
- <File
- RelativePath="..\src\map\pet.h"
- >
- </File>
- <File
- RelativePath="..\src\map\quest.c"
- >
- </File>
- <File
- RelativePath="..\src\map\quest.h"
- >
- </File>
- <File
- RelativePath="..\src\map\script.c"
- >
- </File>
- <File
- RelativePath="..\src\map\script.h"
- >
- </File>
- <File
- RelativePath="..\src\map\searchstore.c"
- >
- </File>
- <File
- RelativePath="..\src\map\searchstore.h"
- >
- </File>
- <File
- RelativePath="..\src\map\skill.c"
- >
- </File>
- <File
- RelativePath="..\src\map\skill.h"
- >
- </File>
- <File
- RelativePath="..\src\map\status.c"
- >
- </File>
- <File
- RelativePath="..\src\map\status.h"
- >
- </File>
- <File
- RelativePath="..\src\map\storage.c"
- >
- </File>
- <File
- RelativePath="..\src\map\storage.h"
- >
- </File>
- <File
- RelativePath="..\src\map\trade.c"
- >
- </File>
- <File
- RelativePath="..\src\map\trade.h"
- >
- </File>
- <File
- RelativePath="..\src\map\unit.c"
- >
- </File>
- <File
- RelativePath="..\src\map\unit.h"
- >
- </File>
- <File
- RelativePath="..\src\map\vending.c"
- >
- </File>
- <File
- RelativePath="..\src\map\vending.h"
- >
- </File>
- </Filter>
- <Filter
- Name="common"
- >
- <File
- RelativePath="..\src\common\cbasetypes.h"
- >
- </File>
- <File
- RelativePath="..\src\common\core.c"
- >
- </File>
- <File
- RelativePath="..\src\common\core.h"
- >
- </File>
- <File
- RelativePath="..\src\common\db.c"
- >
- </File>
- <File
- RelativePath="..\src\common\db.h"
- >
- </File>
- <File
- RelativePath="..\src\common\ers.c"
- >
- </File>
- <File
- RelativePath="..\src\common\ers.h"
- >
- </File>
- <File
- RelativePath="..\src\common\grfio.c"
- >
- </File>
- <File
- RelativePath="..\src\common\grfio.h"
- >
- </File>
- <File
- RelativePath="..\src\common\lock.c"
- >
- </File>
- <File
- RelativePath="..\src\common\lock.h"
- >
- </File>
- <File
- RelativePath="..\src\common\malloc.c"
- >
- </File>
- <File
- RelativePath="..\src\common\malloc.h"
- >
- </File>
- <File
- RelativePath="..\src\common\mapindex.c"
- >
- </File>
- <File
- RelativePath="..\src\common\mapindex.h"
- >
- </File>
- <File
- RelativePath="..\src\common\md5calc.c"
- >
- </File>
- <File
- RelativePath="..\src\common\md5calc.h"
- >
- </File>
- <File
- RelativePath="..\src\common\mmo.h"
- >
- </File>
- <File
- RelativePath="..\src\common\nullpo.c"
- >
- </File>
- <File
- RelativePath="..\src\common\nullpo.h"
- >
- </File>
- <File
- RelativePath="..\src\common\plugin.h"
- >
- </File>
- <File
- RelativePath="..\src\common\plugins.c"
- >
- </File>
- <File
- RelativePath="..\src\common\plugins.h"
- >
- </File>
- <File
- RelativePath="..\src\common\random.c"
- >
- </File>
- <File
- RelativePath="..\src\common\random.h"
- >
- </File>
- <File
- RelativePath="..\src\common\showmsg.c"
- >
- </File>
- <File
- RelativePath="..\src\common\showmsg.h"
- >
- </File>
- <File
- RelativePath="..\src\common\socket.c"
- >
- </File>
- <File
- RelativePath="..\src\common\socket.h"
- >
- </File>
- <File
- RelativePath="..\src\common\strlib.c"
- >
- </File>
- <File
- RelativePath="..\src\common\strlib.h"
- >
- </File>
- <File
- RelativePath="..\src\common\timer.c"
- >
- </File>
- <File
- RelativePath="..\src\common\timer.h"
- >
- </File>
- <File
- RelativePath="..\src\common\utils.c"
- >
- </File>
- <File
- RelativePath="..\src\common\utils.h"
- >
- </File>
- <File
- RelativePath="..\src\common\version.h"
- >
- </File>
- </Filter>
- <Filter
- Name="3rdparty"
- >
- <File
- RelativePath="..\3rdparty\mt19937ar\mt19937ar.c"
- >
- </File>
- <File
- RelativePath="..\3rdparty\mt19937ar\mt19937ar.h"
- >
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/vcproj-8/mapcache.vcproj b/vcproj-8/mapcache.vcproj
deleted file mode 100644
index 3c6585c13..000000000
--- a/vcproj-8/mapcache.vcproj
+++ /dev/null
@@ -1,269 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="8,00"
- Name="mapcache"
- ProjectGUID="{D356871D-58E1-450B-967A-E7E9646175AF}"
- RootNamespace="mapcache"
- Keyword="Win32Proj"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory=".."
- IntermediateDirectory="$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\3rdparty\zlib\include;..\3rdparty\msinttypes\include"
- PreprocessorDefinitions="WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;MINICORE"
- GeneratePreprocessedFile="0"
- MinimalRebuild="true"
- ExceptionHandling="0"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- EnableFunctionLevelLinking="true"
- DefaultCharIsUnsigned="false"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="4"
- CompileAs="1"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalOptions="/FIXED:NO"
- AdditionalDependencies="libcmtd.lib oldnames.lib zdll.lib"
- OutputFile="$(OutDir)\mapcache.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\3rdparty\zlib\lib"
- IgnoreAllDefaultLibraries="true"
- GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)\$(ProjectName).pdb"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory=".."
- IntermediateDirectory="$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- CharacterSet="2"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="2"
- EnableIntrinsicFunctions="true"
- FavorSizeOrSpeed="1"
- OmitFramePointers="true"
- EnableFiberSafeOptimizations="true"
- WholeProgramOptimization="true"
- AdditionalIncludeDirectories="..\3rdparty\zlib\include;..\3rdparty\msinttypes\include"
- PreprocessorDefinitions="WIN32;_WIN32;__WIN32;NDEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;MINICORE"
- StringPooling="true"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="false"
- DefaultCharIsUnsigned="false"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="3"
- CompileAs="1"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libcmt.lib oldnames.lib zdll.lib"
- OutputFile="$(OutDir)\mapcache.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\3rdparty\zlib\lib"
- IgnoreAllDefaultLibraries="true"
- GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)\$(ProjectName).pdb"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- LinkTimeCodeGeneration="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="common"
- >
- <File
- RelativePath="..\src\common\cbasetypes.h"
- >
- </File>
- <File
- RelativePath="..\src\common\core.c"
- >
- </File>
- <File
- RelativePath="..\src\common\core.h"
- >
- </File>
- <File
- RelativePath="..\src\common\grfio.c"
- >
- </File>
- <File
- RelativePath="..\src\common\grfio.h"
- >
- </File>
- <File
- RelativePath="..\src\common\malloc.c"
- >
- </File>
- <File
- RelativePath="..\src\common\malloc.h"
- >
- </File>
- <File
- RelativePath="..\src\common\mmo.h"
- >
- </File>
- <File
- RelativePath="..\src\common\showmsg.c"
- >
- </File>
- <File
- RelativePath="..\src\common\showmsg.h"
- >
- </File>
- <File
- RelativePath="..\src\common\strlib.c"
- >
- </File>
- <File
- RelativePath="..\src\common\strlib.h"
- >
- </File>
- <File
- RelativePath="..\src\common\utils.c"
- >
- </File>
- <File
- RelativePath="..\src\common\utils.h"
- >
- </File>
- <File
- RelativePath="..\src\common\version.h"
- >
- </File>
- </Filter>
- <Filter
- Name="mapcache"
- >
- <File
- RelativePath="..\src\tool\mapcache.c"
- >
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/vcproj-8/plugin-console.vcproj b/vcproj-8/plugin-console.vcproj
deleted file mode 100644
index ac3c6de6d..000000000
--- a/vcproj-8/plugin-console.vcproj
+++ /dev/null
@@ -1,234 +0,0 @@
-<?xml version="1.0" encoding="windows-1250"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="8,00"
- Name="console"
- ProjectGUID="{73E1101A-310C-4453-8F45-FD2795ABEF15}"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory=".\Debug/console"
- IntermediateDirectory=".\Debug/console"
- ConfigurationType="2"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- PreprocessorDefinitions="_DEBUG"
- SuppressStartupBanner="true"
- TargetEnvironment="1"
- GenerateStublessProxies="true"
- TypeLibraryName=".\Debug/console/console.tlb"
- HeaderFileName=""
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="../3rdparty/msinttypes/include"
- PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- PrecompiledHeaderFile=".\Debug/console/console.pch"
- AssemblerListingLocation=".\Debug/console/"
- ObjectFile=".\Debug/console/"
- ProgramDataBaseFileName=".\Debug/console/"
- WarningLevel="3"
- SuppressStartupBanner="true"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1047"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- OutputFile="../plugins/console.dll"
- LinkIncremental="2"
- SuppressStartupBanner="true"
- ModuleDefinitionFile="..\src\plugins\console.def"
- GenerateDebugInformation="true"
- ProgramDatabaseFile="../plugins/console.pdb"
- ImportLibrary=".\Debug/console/console.lib"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- SuppressStartupBanner="true"
- OutputFile=".\Debug/console/console.bsc"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory=".\Release/console"
- IntermediateDirectory=".\Release/console"
- ConfigurationType="2"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- PreprocessorDefinitions="NDEBUG"
- SuppressStartupBanner="true"
- TargetEnvironment="1"
- GenerateStublessProxies="true"
- TypeLibraryName=".\Release/console/console.tlb"
- HeaderFileName=""
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="../3rdparty/msinttypes/include"
- PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE"
- StringPooling="true"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="true"
- PrecompiledHeaderFile=".\Release/console/console.pch"
- AssemblerListingLocation=".\Release/console/"
- ObjectFile=".\Release/console/"
- ProgramDataBaseFileName=".\Release/console/"
- WarningLevel="3"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1047"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- OutputFile="../plugins/console.dll"
- LinkIncremental="1"
- SuppressStartupBanner="true"
- ModuleDefinitionFile="..\src\plugins\console.def"
- ProgramDatabaseFile="../plugins/console.pdb"
- ImportLibrary=".\Release/console/console.lib"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- SuppressStartupBanner="true"
- OutputFile=".\Release/console/console.bsc"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <File
- RelativePath="..\src\plugins\console.c"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\plugins\console.def"
- >
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/vcproj-8/plugin-pid.vcproj b/vcproj-8/plugin-pid.vcproj
deleted file mode 100644
index 8b24e03af..000000000
--- a/vcproj-8/plugin-pid.vcproj
+++ /dev/null
@@ -1,234 +0,0 @@
-<?xml version="1.0" encoding="windows-1250"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="8,00"
- Name="pid"
- ProjectGUID="{9509E1B9-DA2B-4153-9EE0-CBCA6597F198}"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory=".\Debug/pid"
- IntermediateDirectory=".\Debug/pid"
- ConfigurationType="2"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- PreprocessorDefinitions="_DEBUG"
- SuppressStartupBanner="true"
- TargetEnvironment="1"
- GenerateStublessProxies="true"
- TypeLibraryName=".\Debug/pid/pid.tlb"
- HeaderFileName=""
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="../3rdparty/msinttypes/include"
- PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- PrecompiledHeaderFile=".\Debug/pid/pid.pch"
- AssemblerListingLocation=".\Debug/pid/"
- ObjectFile=".\Debug/pid/"
- ProgramDataBaseFileName=".\Debug/pid/"
- WarningLevel="3"
- SuppressStartupBanner="true"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1047"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- OutputFile="../plugins/pid.dll"
- LinkIncremental="2"
- SuppressStartupBanner="true"
- ModuleDefinitionFile="..\src\plugins\pid.def"
- GenerateDebugInformation="true"
- ProgramDatabaseFile="../plugins/pid.pdb"
- ImportLibrary=".\Debug/pid/pid.lib"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- SuppressStartupBanner="true"
- OutputFile=".\Debug/pid/pid.bsc"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory=".\Release/pid"
- IntermediateDirectory=".\Release/pid"
- ConfigurationType="2"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- PreprocessorDefinitions="NDEBUG"
- SuppressStartupBanner="true"
- TargetEnvironment="1"
- GenerateStublessProxies="true"
- TypeLibraryName=".\Release/pid/pid.tlb"
- HeaderFileName=""
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="../3rdparty/msinttypes/include"
- PreprocessorDefinitions="NDEBUG;WIN32;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE"
- StringPooling="true"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="true"
- PrecompiledHeaderFile=".\Release/pid/pid.pch"
- AssemblerListingLocation=".\Release/pid/"
- ObjectFile=".\Release/pid/"
- ProgramDataBaseFileName=".\Release/pid/"
- WarningLevel="3"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1047"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- OutputFile="../plugins/pid.dll"
- LinkIncremental="1"
- SuppressStartupBanner="true"
- ModuleDefinitionFile="..\src\plugins\pid.def"
- ProgramDatabaseFile="../plugins/pid.pdb"
- ImportLibrary=".\Release/pid/pid.lib"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- SuppressStartupBanner="true"
- OutputFile=".\Release/pid/pid.bsc"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <File
- RelativePath="..\src\plugins\pid.c"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\plugins\pid.def"
- >
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/vcproj-8/txt-converter-char.vcproj b/vcproj-8/txt-converter-char.vcproj
deleted file mode 100644
index 7a21cd9cf..000000000
--- a/vcproj-8/txt-converter-char.vcproj
+++ /dev/null
@@ -1,505 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="8,00"
- Name="txt-converter-char"
- ProjectGUID="{D356871D-58E1-450B-967A-EAE9646175AF}"
- RootNamespace="txt-converter-char"
- Keyword="Win32Proj"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="..\tools"
- IntermediateDirectory="$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\3rdparty\mysql\include;..\3rdparty\msinttypes\include"
- PreprocessorDefinitions="WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION;MINICORE;TXT_SQL_CONVERT"
- GeneratePreprocessedFile="0"
- MinimalRebuild="true"
- ExceptionHandling="0"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- EnableFunctionLevelLinking="true"
- DefaultCharIsUnsigned="false"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="4"
- CompileAs="1"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libcmtd.lib oldnames.lib ws2_32.lib libmysql.lib"
- OutputFile="$(OutDir)\char-converter.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\3rdparty\mysql\lib"
- IgnoreAllDefaultLibraries="true"
- IgnoreDefaultLibraryNames=""
- GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)\char-converter.pdb"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="..\tools"
- IntermediateDirectory="$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- CharacterSet="2"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="2"
- EnableIntrinsicFunctions="true"
- FavorSizeOrSpeed="1"
- OmitFramePointers="true"
- EnableFiberSafeOptimizations="true"
- WholeProgramOptimization="true"
- AdditionalIncludeDirectories="..\3rdparty\mysql\include;..\3rdparty\msinttypes\include"
- PreprocessorDefinitions="WIN32;_WIN32;__WIN32;NDEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION;MINICORE;TXT_SQL_CONVERT"
- StringPooling="true"
- RuntimeLibrary="0"
- DefaultCharIsUnsigned="false"
- UsePrecompiledHeader="0"
- PrecompiledHeaderThrough=""
- PrecompiledHeaderFile=""
- WarningLevel="3"
- DebugInformationFormat="3"
- CompileAs="1"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libcmt.lib oldnames.lib ws2_32.lib libmysql.lib"
- OutputFile="$(OutDir)\char-converter.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\3rdparty\mysql\lib"
- IgnoreAllDefaultLibraries="true"
- IgnoreDefaultLibraryNames=""
- GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)\char-converter.pdb"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- LinkTimeCodeGeneration="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="char"
- >
- <File
- RelativePath="..\src\char\char.c"
- >
- </File>
- <File
- RelativePath="..\src\char\char.h"
- >
- </File>
- <File
- RelativePath="..\src\char\int_guild.c"
- >
- </File>
- <File
- RelativePath="..\src\char\int_guild.h"
- >
- </File>
- <File
- RelativePath="..\src\char\int_party.c"
- >
- </File>
- <File
- RelativePath="..\src\char\int_party.h"
- >
- </File>
- <File
- RelativePath="..\src\char\int_pet.c"
- >
- </File>
- <File
- RelativePath="..\src\char\int_pet.h"
- >
- </File>
- <File
- RelativePath="..\src\char\int_storage.c"
- >
- </File>
- <File
- RelativePath="..\src\char\int_storage.h"
- >
- </File>
- <File
- RelativePath="..\src\char\inter.c"
- >
- </File>
- <File
- RelativePath="..\src\char\inter.h"
- >
- </File>
- </Filter>
- <Filter
- Name="common"
- >
- <File
- RelativePath="..\src\common\core.c"
- >
- </File>
- <File
- RelativePath="..\src\common\core.h"
- >
- </File>
- <File
- RelativePath="..\src\common\ers.c"
- >
- </File>
- <File
- RelativePath="..\src\common\ers.h"
- >
- </File>
- <File
- RelativePath="..\src\common\malloc.c"
- >
- </File>
- <File
- RelativePath="..\src\common\malloc.h"
- >
- </File>
- <File
- RelativePath="..\src\common\mapindex.c"
- >
- </File>
- <File
- RelativePath="..\src\common\mapindex.h"
- >
- </File>
- <File
- RelativePath="..\src\common\showmsg.c"
- >
- </File>
- <File
- RelativePath="..\src\common\showmsg.h"
- >
- </File>
- <File
- RelativePath="..\src\common\sql.c"
- >
- </File>
- <File
- RelativePath="..\src\common\sql.h"
- >
- </File>
- <File
- RelativePath="..\src\common\strlib.c"
- >
- </File>
- <File
- RelativePath="..\src\common\strlib.h"
- >
- </File>
- <File
- RelativePath="..\src\common\timer.c"
- >
- </File>
- <File
- RelativePath="..\src\common\timer.h"
- >
- </File>
- <File
- RelativePath="..\src\common\utils.c"
- >
- </File>
- <File
- RelativePath="..\src\common\utils.h"
- >
- </File>
- </Filter>
- <Filter
- Name="char_sql"
- >
- <File
- RelativePath="..\src\char_sql\char.c"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\$(InputName)_sql.obj"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\$(InputName)_sql.obj"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\char_sql\char.h"
- >
- </File>
- <File
- RelativePath="..\src\char_sql\int_guild.c"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\$(InputName)_sql.obj"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\$(InputName)_sql.obj"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\char_sql\int_guild.h"
- >
- </File>
- <File
- RelativePath="..\src\char_sql\int_mercenary.c"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\$(InputName)_sql.obj"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\$(InputName)_sql.obj"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\char_sql\int_mercenary.h"
- >
- </File>
- <File
- RelativePath="..\src\char_sql\int_party.c"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\$(InputName)_sql.obj"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\$(InputName)_sql.obj"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\char_sql\int_party.h"
- >
- </File>
- <File
- RelativePath="..\src\char_sql\int_pet.c"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\$(InputName)_sql.obj"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\$(InputName)_sql.obj"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\char_sql\int_pet.h"
- >
- </File>
- <File
- RelativePath="..\src\char_sql\int_storage.c"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\$(InputName)_sql.obj"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\$(InputName)_sql.obj"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\char_sql\int_storage.h"
- >
- </File>
- <File
- RelativePath="..\src\char_sql\inter.c"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\$(InputName)_sql.obj"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)\$(InputName)_sql.obj"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\src\char_sql\inter.h"
- >
- </File>
- </Filter>
- <File
- RelativePath="..\src\txt-converter\char-converter.c"
- >
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/vcproj-8/txt-converter-login.vcproj b/vcproj-8/txt-converter-login.vcproj
deleted file mode 100644
index 4e43fd147..000000000
--- a/vcproj-8/txt-converter-login.vcproj
+++ /dev/null
@@ -1,301 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="8,00"
- Name="txt-converter-login"
- ProjectGUID="{D356871D-58E1-450B-967A-E9E9646175AF}"
- RootNamespace="txt-converter-login"
- Keyword="Win32Proj"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="..\tools"
- IntermediateDirectory="$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\3rdparty\mysql\include;..\3rdparty\msinttypes\include"
- PreprocessorDefinitions="WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION;MINICORE;WITH_TXT;WITH_SQL"
- GeneratePreprocessedFile="0"
- MinimalRebuild="true"
- ExceptionHandling="0"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- EnableFunctionLevelLinking="true"
- DefaultCharIsUnsigned="false"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- DebugInformationFormat="4"
- CompileAs="1"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libcmtd.lib oldnames.lib ws2_32.lib libmysql.lib"
- OutputFile="$(OutDir)\login-converter.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\3rdparty\mysql\lib"
- IgnoreAllDefaultLibraries="true"
- IgnoreDefaultLibraryNames=""
- GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)\login-converter.pdb"
- SubSystem="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="..\tools"
- IntermediateDirectory="$(ProjectName)\$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- CharacterSet="2"
- WholeProgramOptimization="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="2"
- EnableIntrinsicFunctions="true"
- FavorSizeOrSpeed="1"
- OmitFramePointers="true"
- EnableFiberSafeOptimizations="true"
- WholeProgramOptimization="true"
- AdditionalIncludeDirectories="..\3rdparty\mysql\include;..\3rdparty\msinttypes\include"
- PreprocessorDefinitions="WIN32;_WIN32;__WIN32;NDEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION;MINICORE;WITH_TXT;WITH_SQL"
- StringPooling="true"
- RuntimeLibrary="0"
- DefaultCharIsUnsigned="false"
- UsePrecompiledHeader="0"
- PrecompiledHeaderThrough=""
- PrecompiledHeaderFile=""
- WarningLevel="3"
- DebugInformationFormat="3"
- CompileAs="1"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libcmt.lib oldnames.lib ws2_32.lib libmysql.lib"
- OutputFile="$(OutDir)\login-converter.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\3rdparty\mysql\lib"
- IgnoreAllDefaultLibraries="true"
- IgnoreDefaultLibraryNames=""
- GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)\login-converter.pdb"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- LinkTimeCodeGeneration="1"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="common"
- >
- <File
- RelativePath="..\src\common\core.c"
- >
- </File>
- <File
- RelativePath="..\src\common\core.h"
- >
- </File>
- <File
- RelativePath="..\src\common\db.c"
- >
- </File>
- <File
- RelativePath="..\src\common\db.h"
- >
- </File>
- <File
- RelativePath="..\src\common\ers.c"
- >
- </File>
- <File
- RelativePath="..\src\common\ers.h"
- >
- </File>
- <File
- RelativePath="..\src\common\lock.c"
- >
- </File>
- <File
- RelativePath="..\src\common\lock.h"
- >
- </File>
- <File
- RelativePath="..\src\common\malloc.c"
- >
- </File>
- <File
- RelativePath="..\src\common\malloc.h"
- >
- </File>
- <File
- RelativePath="..\src\common\showmsg.c"
- >
- </File>
- <File
- RelativePath="..\src\common\showmsg.h"
- >
- </File>
- <File
- RelativePath="..\src\common\sql.c"
- >
- </File>
- <File
- RelativePath="..\src\common\sql.h"
- >
- </File>
- <File
- RelativePath="..\src\common\strlib.c"
- >
- </File>
- <File
- RelativePath="..\src\common\strlib.h"
- >
- </File>
- <File
- RelativePath="..\src\common\timer.c"
- >
- </File>
- <File
- RelativePath="..\src\common\timer.h"
- >
- </File>
- <File
- RelativePath="..\src\common\utils.c"
- >
- </File>
- <File
- RelativePath="..\src\common\utils.h"
- >
- </File>
- </Filter>
- <File
- RelativePath="..\src\login\account.h"
- >
- </File>
- <File
- RelativePath="..\src\login\account_sql.c"
- >
- </File>
- <File
- RelativePath="..\src\login\account_txt.c"
- >
- </File>
- <File
- RelativePath="..\src\txt-converter\login-converter.c"
- >
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/vcproj-9/char-server_sql.vcproj b/vcproj-9/char-server_sql.vcproj
index fd6aa7967..759fd4f83 100644
--- a/vcproj-9/char-server_sql.vcproj
+++ b/vcproj-9/char-server_sql.vcproj
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
- Version="9,00"
+ Version="9.00"
Name="char-server_sql"
ProjectGUID="{D356871D-58E1-450B-967A-E4E9646175AF}"
RootNamespace="char-server_sql"
@@ -41,11 +41,11 @@
/>
<Tool
Name="VCCLCompilerTool"
+ AdditionalOptions="/MP"
Optimization="0"
AdditionalIncludeDirectories="..\3rdparty\mysql\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar"
PreprocessorDefinitions="WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION"
GeneratePreprocessedFile="0"
- MinimalRebuild="true"
ExceptionHandling="0"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
@@ -129,6 +129,7 @@
/>
<Tool
Name="VCCLCompilerTool"
+ AdditionalOptions="/MP"
Optimization="2"
InlineFunctionExpansion="2"
EnableIntrinsicFunctions="true"
diff --git a/vcproj-9/char-server_txt.vcproj b/vcproj-9/char-server_txt.vcproj
index 6eea7bbbd..690607970 100644
--- a/vcproj-9/char-server_txt.vcproj
+++ b/vcproj-9/char-server_txt.vcproj
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
- Version="9,00"
+ Version="9.00"
Name="char-server_txt"
ProjectGUID="{D356871D-58E1-450B-967A-E3E9646175AF}"
RootNamespace="char-server_txt"
@@ -41,11 +41,11 @@
/>
<Tool
Name="VCCLCompilerTool"
+ AdditionalOptions="/MP"
Optimization="0"
AdditionalIncludeDirectories="..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar"
PreprocessorDefinitions="WIN32;_WIN32;__WIN32;_DEBUG;TXT_ONLY;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION"
GeneratePreprocessedFile="0"
- MinimalRebuild="true"
ExceptionHandling="0"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
@@ -128,6 +128,7 @@
/>
<Tool
Name="VCCLCompilerTool"
+ AdditionalOptions="/MP"
Optimization="2"
InlineFunctionExpansion="2"
EnableIntrinsicFunctions="true"
diff --git a/vcproj-9/login-server_sql.vcproj b/vcproj-9/login-server_sql.vcproj
index f1d1fa94e..f962b88fa 100644
--- a/vcproj-9/login-server_sql.vcproj
+++ b/vcproj-9/login-server_sql.vcproj
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
- Version="9,00"
+ Version="9.00"
Name="login-server_sql"
ProjectGUID="{D356871D-58E1-450B-967A-E5E9646175AF}"
RootNamespace="login-server_sql"
@@ -41,11 +41,11 @@
/>
<Tool
Name="VCCLCompilerTool"
+ AdditionalOptions="/MP"
Optimization="0"
AdditionalIncludeDirectories="..\3rdparty\mysql\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar"
PreprocessorDefinitions="WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION;WITH_SQL"
GeneratePreprocessedFile="0"
- MinimalRebuild="true"
ExceptionHandling="0"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
@@ -129,6 +129,7 @@
/>
<Tool
Name="VCCLCompilerTool"
+ AdditionalOptions="/MP"
Optimization="2"
InlineFunctionExpansion="2"
EnableIntrinsicFunctions="true"
diff --git a/vcproj-9/login-server_txt.vcproj b/vcproj-9/login-server_txt.vcproj
index 16cd02e84..7bc8b7d56 100644
--- a/vcproj-9/login-server_txt.vcproj
+++ b/vcproj-9/login-server_txt.vcproj
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
- Version="9,00"
+ Version="9.00"
Name="login-server_txt"
ProjectGUID="{D356871D-58E1-450B-967A-E2E9646175AF}"
RootNamespace="login-server_txt"
@@ -40,11 +40,11 @@
/>
<Tool
Name="VCCLCompilerTool"
+ AdditionalOptions="/MP"
Optimization="0"
AdditionalIncludeDirectories="..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar"
PreprocessorDefinitions="WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION;WITH_TXT"
GeneratePreprocessedFile="0"
- MinimalRebuild="true"
ExceptionHandling="0"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
@@ -127,6 +127,7 @@
/>
<Tool
Name="VCCLCompilerTool"
+ AdditionalOptions="/MP"
Optimization="2"
InlineFunctionExpansion="2"
EnableIntrinsicFunctions="true"
diff --git a/vcproj-9/map-server_sql.vcproj b/vcproj-9/map-server_sql.vcproj
index 6d31f2340..d2c8192c2 100644
--- a/vcproj-9/map-server_sql.vcproj
+++ b/vcproj-9/map-server_sql.vcproj
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
- Version="9,00"
+ Version="9.00"
Name="map-server_sql"
ProjectGUID="{D356871D-58E1-450B-967A-E6E9646175AF}"
RootNamespace="map-server_sql"
@@ -40,11 +40,11 @@
/>
<Tool
Name="VCCLCompilerTool"
+ AdditionalOptions="/MP"
Optimization="0"
AdditionalIncludeDirectories="..\3rdparty\mysql\include;..\3rdparty\zlib\include;..\3rdparty\pcre\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar"
PreprocessorDefinitions="WIN32;_WIN32;__WIN32;_DEBUG;PCRE_SUPPORT;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION"
GeneratePreprocessedFile="0"
- MinimalRebuild="true"
ExceptionHandling="0"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
@@ -128,6 +128,7 @@
/>
<Tool
Name="VCCLCompilerTool"
+ AdditionalOptions="/MP"
Optimization="2"
InlineFunctionExpansion="2"
EnableIntrinsicFunctions="true"
@@ -387,19 +388,19 @@
>
</File>
<File
- RelativePath="..\src\map\battleground.h"
+ RelativePath="..\src\map\battleground.c"
>
</File>
<File
- RelativePath="..\src\map\battleground.c"
+ RelativePath="..\src\map\battleground.h"
>
</File>
<File
- RelativePath="..\src\map\buyingstore.h"
+ RelativePath="..\src\map\buyingstore.c"
>
</File>
<File
- RelativePath="..\src\map\buyingstore.c"
+ RelativePath="..\src\map\buyingstore.h"
>
</File>
<File
@@ -451,67 +452,67 @@
>
</File>
<File
- RelativePath="..\src\map\intif.c"
+ RelativePath="..\src\map\homunculus.c"
>
</File>
<File
- RelativePath="..\src\map\intif.h"
+ RelativePath="..\src\map\homunculus.h"
>
</File>
<File
- RelativePath="..\src\map\itemdb.c"
+ RelativePath="..\src\map\instance.c"
>
</File>
<File
- RelativePath="..\src\map\itemdb.h"
+ RelativePath="..\src\map\instance.h"
>
</File>
<File
- RelativePath="..\src\map\log.c"
+ RelativePath="..\src\map\intif.c"
>
</File>
<File
- RelativePath="..\src\map\log.h"
+ RelativePath="..\src\map\intif.h"
>
</File>
<File
- RelativePath="..\src\map\mail.c"
+ RelativePath="..\src\map\itemdb.c"
>
</File>
<File
- RelativePath="..\src\map\mail.h"
+ RelativePath="..\src\map\itemdb.h"
>
</File>
<File
- RelativePath="..\src\map\map.c"
+ RelativePath="..\src\map\log.c"
>
</File>
<File
- RelativePath="..\src\map\map.h"
+ RelativePath="..\src\map\log.h"
>
</File>
<File
- RelativePath="..\src\map\mapreg.h"
+ RelativePath="..\src\map\mail.c"
>
</File>
<File
- RelativePath="..\src\map\mapreg_sql.c"
+ RelativePath="..\src\map\mail.h"
>
</File>
<File
- RelativePath="..\src\map\homunculus.c"
+ RelativePath="..\src\map\map.c"
>
</File>
<File
- RelativePath="..\src\map\homunculus.h"
+ RelativePath="..\src\map\map.h"
>
</File>
<File
- RelativePath="..\src\map\instance.c"
+ RelativePath="..\src\map\mapreg.h"
>
</File>
<File
- RelativePath="..\src\map\instance.h"
+ RelativePath="..\src\map\mapreg_sql.c"
>
</File>
<File
@@ -583,6 +584,34 @@
>
</File>
<File
+ RelativePath="..\src\map\config\Core.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\map\config\Renewal.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\map\config\Secure.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\map\config\Data\Const.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\map\config\Skills\General.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\map\config\Skills\Mage_Classes.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\map\config\Skills\Swordsman_Classes.h"
+ >
+ </File>
+ <File
RelativePath="..\src\map\script.c"
>
</File>
diff --git a/vcproj-9/map-server_txt.vcproj b/vcproj-9/map-server_txt.vcproj
index 41912c95c..6291089a9 100644
--- a/vcproj-9/map-server_txt.vcproj
+++ b/vcproj-9/map-server_txt.vcproj
@@ -40,11 +40,11 @@
/>
<Tool
Name="VCCLCompilerTool"
+ AdditionalOptions="/MP"
Optimization="0"
AdditionalIncludeDirectories="..\3rdparty\zlib\include;..\3rdparty\pcre\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar"
PreprocessorDefinitions="WIN32;_WIN32;__WIN32;_DEBUG;PCRE_SUPPORT;TXT_ONLY;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION"
GeneratePreprocessedFile="0"
- MinimalRebuild="true"
ExceptionHandling="0"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
@@ -127,6 +127,7 @@
/>
<Tool
Name="VCCLCompilerTool"
+ AdditionalOptions="/MP"
Optimization="2"
InlineFunctionExpansion="2"
EnableIntrinsicFunctions="true"
@@ -414,6 +415,34 @@
>
</File>
<File
+ RelativePath="..\src\map\config\Core.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\map\config\Renewal.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\map\config\Secure.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\map\config\Data\Const.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\map\config\Skills\General.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\map\config\Skills\Mage_Classes.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\map\config\Skills\Swordsman_Classes.h"
+ >
+ </File>
+ <File
RelativePath="..\src\map\script.c"
>
</File>
diff --git a/vcproj-9/mapcache.vcproj b/vcproj-9/mapcache.vcproj
index f25c016f3..2fb78f198 100644
--- a/vcproj-9/mapcache.vcproj
+++ b/vcproj-9/mapcache.vcproj
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
- Version="9,00"
+ Version="9.00"
Name="mapcache"
ProjectGUID="{D356871D-58E1-450B-967A-E7E9646175AF}"
RootNamespace="mapcache"
@@ -40,11 +40,11 @@
/>
<Tool
Name="VCCLCompilerTool"
+ AdditionalOptions="/MP"
Optimization="0"
AdditionalIncludeDirectories="..\3rdparty\zlib\include;..\3rdparty\msinttypes\include"
PreprocessorDefinitions="WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;MINICORE"
GeneratePreprocessedFile="0"
- MinimalRebuild="true"
ExceptionHandling="0"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
@@ -126,6 +126,7 @@
/>
<Tool
Name="VCCLCompilerTool"
+ AdditionalOptions="/MP"
Optimization="2"
InlineFunctionExpansion="2"
EnableIntrinsicFunctions="true"
@@ -208,7 +209,7 @@
>
</File>
<File
- RelativePath="..\src\common\core.h"
+ RelativePath="..\src\common\des.h"
>
</File>
<File
diff --git a/vcproj-9/plugin-console.vcproj b/vcproj-9/plugin-console.vcproj
index 24f21957c..30337a0c1 100644
--- a/vcproj-9/plugin-console.vcproj
+++ b/vcproj-9/plugin-console.vcproj
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="windows-1250"?>
<VisualStudioProject
ProjectType="Visual C++"
- Version="9,00"
+ Version="9.00"
Name="console"
ProjectGUID="{73E1101A-310C-4453-8F45-FD2795ABEF15}"
TargetFrameworkVersion="0"
@@ -47,10 +47,10 @@
/>
<Tool
Name="VCCLCompilerTool"
+ AdditionalOptions="/MP"
Optimization="0"
AdditionalIncludeDirectories="../3rdparty/msinttypes/include"
PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE"
- MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
PrecompiledHeaderFile=".\Debug/console/console.pch"
@@ -142,6 +142,7 @@
/>
<Tool
Name="VCCLCompilerTool"
+ AdditionalOptions="/MP"
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="../3rdparty/msinttypes/include"
diff --git a/vcproj-9/plugin-pid.vcproj b/vcproj-9/plugin-pid.vcproj
index ffc9231bf..caa9a91df 100644
--- a/vcproj-9/plugin-pid.vcproj
+++ b/vcproj-9/plugin-pid.vcproj
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="windows-1250"?>
<VisualStudioProject
ProjectType="Visual C++"
- Version="9,00"
+ Version="9.00"
Name="pid"
ProjectGUID="{9509E1B9-DA2B-4153-9EE0-CBCA6597F198}"
TargetFrameworkVersion="0"
@@ -47,10 +47,10 @@
/>
<Tool
Name="VCCLCompilerTool"
+ AdditionalOptions="/MP"
Optimization="0"
AdditionalIncludeDirectories="../3rdparty/msinttypes/include"
PreprocessorDefinitions="_DEBUG;WIN32;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE"
- MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
PrecompiledHeaderFile=".\Debug/pid/pid.pch"
@@ -142,6 +142,7 @@
/>
<Tool
Name="VCCLCompilerTool"
+ AdditionalOptions="/MP"
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="../3rdparty/msinttypes/include"
diff --git a/vcproj-9/txt-converter-char.vcproj b/vcproj-9/txt-converter-char.vcproj
index fb01d60c5..6d9b6a846 100644
--- a/vcproj-9/txt-converter-char.vcproj
+++ b/vcproj-9/txt-converter-char.vcproj
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
- Version="9,00"
+ Version="9.00"
Name="txt-converter-char"
ProjectGUID="{D356871D-58E1-450B-967A-EAE9646175AF}"
RootNamespace="txt-converter-char"
@@ -41,11 +41,11 @@
/>
<Tool
Name="VCCLCompilerTool"
+ AdditionalOptions="/MP"
Optimization="0"
AdditionalIncludeDirectories="..\3rdparty\mysql\include;..\3rdparty\msinttypes\include"
PreprocessorDefinitions="WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION;MINICORE;TXT_SQL_CONVERT"
GeneratePreprocessedFile="0"
- MinimalRebuild="true"
ExceptionHandling="0"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
@@ -128,6 +128,7 @@
/>
<Tool
Name="VCCLCompilerTool"
+ AdditionalOptions="/MP"
Optimization="2"
InlineFunctionExpansion="2"
EnableIntrinsicFunctions="true"
diff --git a/vcproj-9/txt-converter-login.vcproj b/vcproj-9/txt-converter-login.vcproj
index 7d7cbad97..e69a7c20c 100644
--- a/vcproj-9/txt-converter-login.vcproj
+++ b/vcproj-9/txt-converter-login.vcproj
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
- Version="9,00"
+ Version="9.00"
Name="txt-converter-login"
ProjectGUID="{D356871D-58E1-450B-967A-E9E9646175AF}"
RootNamespace="txt-converter-login"
@@ -41,11 +41,11 @@
/>
<Tool
Name="VCCLCompilerTool"
+ AdditionalOptions="/MP"
Optimization="0"
AdditionalIncludeDirectories="..\3rdparty\mysql\include;..\3rdparty\msinttypes\include"
PreprocessorDefinitions="WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;DB_MANUAL_CAST_TO_UNION;MINICORE;WITH_TXT;WITH_SQL"
GeneratePreprocessedFile="0"
- MinimalRebuild="true"
ExceptionHandling="0"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
@@ -128,6 +128,7 @@
/>
<Tool
Name="VCCLCompilerTool"
+ AdditionalOptions="/MP"
Optimization="2"
InlineFunctionExpansion="2"
EnableIntrinsicFunctions="true"