summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorshennetsind <shennetsind@54d463be-8e91-2dee-dedb-b68131a5f0ec>2011-12-05 20:51:58 +0000
committershennetsind <shennetsind@54d463be-8e91-2dee-dedb-b68131a5f0ec>2011-12-05 20:51:58 +0000
commitce9b9e74f648f3dd52e4161d3183612ecd002f80 (patch)
treeb6069d2b4687cd979685c6d803ec93a5e54d0590
parentd9a43b19b761c9d1726fc971044634cd3fa917b8 (diff)
downloadhercules-ce9b9e74f648f3dd52e4161d3183612ecd002f80.tar.gz
hercules-ce9b9e74f648f3dd52e4161d3183612ecd002f80.tar.bz2
hercules-ce9b9e74f648f3dd52e4161d3183612ecd002f80.tar.xz
hercules-ce9b9e74f648f3dd52e4161d3183612ecd002f80.zip
Merging RREmu into rAthena -- quite a few stuff yet to be renamed, but we'll get it sorted.
Some of the stuff included in RREmu that is now part of rAthena: - RE Drop Rate Modifier - RE Experience Rate Modifier - RE Weapon MATK - RE Shield ASPD job-specific penalty - RE Cast Time - Renewal-specific item DEF - 3.1 classes. - All-New Mounts - Official Magical Reflection - And other perks, such as fully-functional @mapflag also merged eAthena 15006 into rAthena. For Bugs, Comments and Suggestions: http://rathena.org/board/tracker/ git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@15009 54d463be-8e91-2dee-dedb-b68131a5f0ec
-rw-r--r--RAthena-6.dsw149
-rw-r--r--RAthena-7.1.sln69
-rw-r--r--RAthena-8.sln139
-rw-r--r--conf/battle/player.conf3
-rw-r--r--conf/map_athena.conf8
-rw-r--r--db/exp.txt4
-rw-r--r--db/item_db.txt230
-rw-r--r--db/item_db_re.txt305
-rw-r--r--db/job_db1.txt71
-rw-r--r--db/job_db2.txt71
-rw-r--r--db/magicmushroom_db.txt26
-rw-r--r--db/mob_db.txt14
-rw-r--r--db/mob_skill_db.txt25
-rw-r--r--db/packet_db.txt4
-rw-r--r--db/produce_db.txt47
-rw-r--r--db/quest_db.txt26
-rw-r--r--db/re_job_db.txt230
-rw-r--r--db/skill_cast_db.txt1673
-rw-r--r--db/skill_db.txt173
-rw-r--r--db/skill_require_db.txt160
-rw-r--r--db/skill_tree.txt670
-rw-r--r--db/skill_unit_db.txt21
-rw-r--r--db/spellbook_db.txt29
-rw-r--r--db/statpoint_renewal.txt255
-rw-r--r--sql-files/main.sql2
-rw-r--r--sql-files/upgrade_svn15003.sql1
-rw-r--r--src/common/mmo.h55
-rw-r--r--src/common/showmsg.c27
-rw-r--r--src/common/showmsg.h1
-rw-r--r--src/map/Makefile.in4
-rw-r--r--src/map/RRConfig/Core.h28
-rw-r--r--src/map/RRConfig/Data/Const.h33
-rw-r--r--src/map/RRConfig/Renewal.h53
-rw-r--r--src/map/RRConfig/Secure.h36
-rw-r--r--src/map/RRConfig/Skills/General.h23
-rw-r--r--src/map/RRConfig/Skills/Mage_Classes.h19
-rw-r--r--src/map/RRConfig/Skills/Swordsman_Classes.h19
-rw-r--r--src/map/atcommand.c330
-rw-r--r--src/map/battle.c620
-rw-r--r--src/map/battle.h7
-rw-r--r--src/map/chrif.c8
-rw-r--r--src/map/clif.c696
-rw-r--r--src/map/clif.h30
-rw-r--r--src/map/itemdb.c49
-rw-r--r--src/map/itemdb.h42
-rw-r--r--src/map/map.c156
-rw-r--r--src/map/map.h43
-rw-r--r--src/map/mob.c27
-rw-r--r--src/map/mob.h5
-rw-r--r--src/map/npc.c44
-rw-r--r--src/map/npc.h7
-rw-r--r--src/map/party.c63
-rw-r--r--src/map/party.h5
-rw-r--r--src/map/pc.c228
-rw-r--r--src/map/pc.h47
-rw-r--r--src/map/script.c182
-rw-r--r--src/map/skill.c2476
-rw-r--r--src/map/skill.h59
-rw-r--r--src/map/status.c1764
-rw-r--r--src/map/status.h281
-rw-r--r--src/map/unit.c80
-rw-r--r--src/map/unit.h4
-rw-r--r--vcproj-10/map-server_sql.vcxproj7
-rw-r--r--vcproj-10/map-server_sql.vcxproj.filters3
-rw-r--r--vcproj-10/map-server_txt.vcxproj7
-rw-r--r--vcproj-10/map-server_txt.vcxproj.filters3
-rw-r--r--vcproj-10/mapcache.vcxproj.filters6
-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.vcproj2
-rw-r--r--vcproj-9/char-server_txt.vcproj2
-rw-r--r--vcproj-9/login-server_sql.vcproj2
-rw-r--r--vcproj-9/login-server_txt.vcproj2
-rw-r--r--vcproj-9/map-server_sql.vcproj70
-rw-r--r--vcproj-9/map-server_txt.vcproj28
-rw-r--r--vcproj-9/mapcache.vcproj4
-rw-r--r--vcproj-9/plugin-console.vcproj2
-rw-r--r--vcproj-9/plugin-pid.vcproj2
-rw-r--r--vcproj-9/txt-converter-char.vcproj2
-rw-r--r--vcproj-9/txt-converter-login.vcproj2
108 files changed, 10500 insertions, 12047 deletions
diff --git a/RAthena-6.dsw b/RAthena-6.dsw
deleted file mode 100644
index ffacdb23c..000000000
--- a/RAthena-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/RAthena-7.1.sln b/RAthena-7.1.sln
deleted file mode 100644
index 812905073..000000000
--- a/RAthena-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/RAthena-8.sln b/RAthena-8.sln
deleted file mode 100644
index 9348cc476..000000000
--- a/RAthena-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/conf/battle/player.conf b/conf/battle/player.conf
index d93337429..870bdd0d5 100644
--- a/conf/battle/player.conf
+++ b/conf/battle/player.conf
@@ -88,6 +88,9 @@ max_sp: 1000000
// Max limit of char stats. (agi, str, etc.)
max_parameter: 99
+// Same as max_parameter, but for 3rd classes.
+max_third_parameter: 120
+
// Same as max_parameter, but for baby classes.
max_baby_parameter: 80
diff --git a/conf/map_athena.conf b/conf/map_athena.conf
index 0b837b61f..f25f6a695 100644
--- a/conf/map_athena.conf
+++ b/conf/map_athena.conf
@@ -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/db/exp.txt b/db/exp.txt
index 58310fe24..3733f3050 100644
--- a/db/exp.txt
+++ b/db/exp.txt
@@ -4,6 +4,8 @@
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,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
@@ -22,3 +24,5 @@
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,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/item_db.txt b/db/item_db.txt
index 66e8edc3b..391bd86b1 100644
--- a/db/item_db.txt
+++ b/db/item_db.txt
@@ -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; },{},{}
@@ -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; },{},{}
@@ -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; },{},{}
@@ -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,6 +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,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,,,,,,{},{},{}
@@ -5301,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,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12726,Runstone_Rhydo,Rhydo Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12727,Runstone_Verkana,Verkana Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12728,Runstone_Isia,Isia Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12729,Runstone_Asir,Asir Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12730,Runstone_Urj,Urj Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12731,Runstone_Turisus,Turisus Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12732,Runstone_Pertz,Pertz Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12733,Runstone_Hagalas,Hagalas Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12734,Runstone_Quality,Quality Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12735,Runstone_Ancient,Ancient Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12736,Runstone_Mystic,Mystic Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12737,Runstone_Ordinary,General Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12738,Runstone_Rare,Rare Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
+// 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,,,,,,{},{},{}
@@ -5589,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; },{},{}
@@ -6735,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,
diff --git a/db/item_db_re.txt b/db/item_db_re.txt
new file mode 100644
index 000000000..9d0796d49
--- /dev/null
+++ b/db/item_db_re.txt
@@ -0,0 +1,305 @@
+// 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/job_db1.txt b/db/job_db1.txt
index fb1fe7fdd..10f2ff922 100644
--- a/db/job_db1.txt
+++ b/db/job_db1.txt
@@ -153,3 +153,74 @@
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 ,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 0144624b9..a0c88121d 100644
--- a/db/job_db2.txt
+++ b/db/job_db2.txt
@@ -161,3 +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
+//*************************************************************
+//* 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
+// 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
+// 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
+// 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
+// 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
+// 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
+// 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
+// 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
+// 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
+// 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..9be7f9dff
--- /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 \ No newline at end of file
diff --git a/db/mob_db.txt b/db/mob_db.txt
index f49eae46c..67b2b072b 100644
--- a/db/mob_db.txt
+++ b/db/mob_db.txt
@@ -1095,11 +1095,15 @@
//2039,EXECUTIONER_R,Executioner,Executioner,65,28980,0,0,0,2,570,950,35,35,64,85,40,25,88,60,10,12,2,0,47,0x120,200,768,500,384,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
//2040,TIRFING_R,Tirfing,Ogretooth,71,29900,0,0,0,1,950,1146,30,35,58,87,55,35,132,65,10,12,1,0,67,0x120,100,816,500,240,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
//2041,MYSTELTAINN_R,Mysteltainn,Mysteltainn,76,33350,0,0,0,2,1160,1440,30,30,77,139,80,35,159,65,10,12,2,0,87,0x120,250,1152,500,240,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
-//2042,SILVERSNIPER,Silver Sniper,Silver Sniper,1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,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
-//2043,MAGICDECOY_FIRE,Magic Decoy,Magic Decoy,1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,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
-//2044,MAGICDECOY_WATER,Magic Decoy,Magic Decoy,1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,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
-//2045,MAGICDECOY_EARTH,Magic Decoy,Magic Decoy,1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,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
-//2046,MAGICDECOY_WIND,Magic Decoy,Magic Decoy,1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,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
+
+//****
+// NC Mechanic Summons
+2042,SILVERSNIPER,Silver Sniper,Silver Sniper,100,4500,0,0,0,9,300,300,80,10,10,60,10,10,100,10,10,12,1,0,20,0x3394,2000,504,1020,360,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
+2043,MAGICDECOY_FIRE,Magic Decoy Fire,Magic Decoy Fire,100,2500,0,0,0,7,150,150,16,60,10,10,10,100,50,10,10,12,1,0,23,0x3394,2000,504,1020,360,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
+2044,MAGICDECOY_WATER,Magic Decoy Water,Magic Decoy Water,100,2500,0,0,0,7,150,150,16,60,10,10,10,100,50,10,10,12,1,0,21,0x3394,2000,504,1020,360,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
+2045,MAGICDECOY_EARTH,Magic Decoy Earth,Magic Decoy Earth,100,2500,0,0,0,7,150,150,16,60,10,10,10,100,50,10,10,12,1,0,22,0x3394,2000,504,1020,360,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
+2046,MAGICDECOY_WIND,Magic Decoy Wind,Magic Decoy Wind,100,2500,0,0,0,7,150,150,16,60,10,10,10,100,50,10,10,12,1,0,24,0x3394,2000,504,1020,360,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
+
//2047,W_NAGA,Naga,Naga,1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,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
//2048,W_PINGUICULA_D,Dark Pinguicula,Dark Pinguicula,1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,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
//2049,W_BRADIUM_GOLEM,Bradium Golem,Bradium Golem,1,50,0,0,0,1,7,10,0,5,1,1,1,1,6,30,10,12,1,3,21,0x120,400,1872,672,480,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
diff --git a/db/mob_skill_db.txt b/db/mob_skill_db.txt
index c0dacc9c3..d1e801739 100644
--- a/db/mob_skill_db.txt
+++ b/db/mob_skill_db.txt
@@ -5781,3 +5781,28 @@
2082,Piranha@MG_COLDBOLT,chase,14,3,500,1000,5000,yes,target,always,0,,,,,,,
2082,Piranha@WZ_WATERBALL,attack,86,3,500,1000,5000,yes,target,always,0,,,,,,6,
2082,Piranha@NPC_BLOODDRAIN,attack,199,1,500,0,5000,yes,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,,,,,,,
+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,,,,,,,
diff --git a/db/packet_db.txt b/db/packet_db.txt
index f423d1c14..a9517e0c0 100644
--- a/db/packet_db.txt
+++ b/db/packet_db.txt
@@ -33,8 +33,8 @@
// 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
+//packet_db_ver: 23
+packet_db_ver: default
packet_ver: 5
diff --git a/db/produce_db.txt b/db/produce_db.txt
index 938bdeb7d..78252447c 100644
--- a/db/produce_db.txt
+++ b/db/produce_db.txt
@@ -395,3 +395,50 @@
12117,23,1007,1,7433,1,1013,3
//==============================================
+
+//===== Ancilla And Runes === ItemLV=24 ========
+//---- Ancilla ---------------------------------
+//-- Ancilla <-- AB_ANCILLA & 1 Blue Gemstone
+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 000e7f1de..6932de5dd 100644
--- a/db/quest_db.txt
+++ b/db/quest_db.txt
@@ -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..d062c8587
--- /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 \ No newline at end of file
diff --git a/db/skill_cast_db.txt b/db/skill_cast_db.txt
index 7ded81500..05e44e02b 100644
--- a/db/skill_cast_db.txt
+++ b/db/skill_cast_db.txt
@@ -1,1137 +1,1860 @@
// Skill Times Database
//
// Structure of Database:
-// SkillID,CastingTime,AfterCastActDelay,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
-//==========================================
-// This is just a rough overview to help
-// giving an overview on the document and
-// help navigating through it. (Vedurin)
+// 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.
//==========================================
-
-
-
//===== Swordman ===========================
//-- SM_PROVOKE
-6,0,0,0,30000,0
+6,0,0,0,30000,0,1000
//-- SM_MAGNUM
-7,0,0,0,2000,10000
+7,0,0,0,2000,10000,2000
//-- SM_ENDURE
-8,0,0,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,10000,0
+10,0,0,0,10000,0,0
//-- MG_NAPALMBEAT
-11,1000,1000:1000:1000:900:900:800:800:700:600:500,0,0,0
+11,1000,1000:1000:1000:900:900:800:800:700:600:500,0,0,0,0
//-- MG_SAFETYWALL
-12,4000:3500:3500:2500:2000:1500:1000:1000:1000:1000,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,500,1200:1000:1400:1200:1600:1400:1800:1600:2000:1800,0,0,0
+13,500,1200:1000:1400:1200:1600:1400:1800:1600:2000:1800,0,0,0,0
//-- MG_COLDBOLT
-14,700:1400:2100:2800:3500:4200:4900:5600:6300:7000,1000:1200:1400:1600:1800:2000:2200:2400:2600:2800,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,800,1500,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,1000,0,0,5000,20000
+16,1000,0,0,5000,20000,0
//-- MG_FIREBALL
-17,1500:1500:1500:1500:1500:1000:1000:1000:1000:1000,1500:1500:1500:1500:1500:1000:1000:1000:1000:1000,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,2000:1850:1700:1550:1400:1250:1100:950:800:650,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,700:1400:2100:2800:3500:4200:4900:5600:6300:7000,1000:1200:1400:1600:1800:2000:2200:2400:2600:2800,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,700:1400:2100:2800:3500:4200:4900:5600:6300:7000,1000:1200:1400:1600:1800:2000:2200:2400:2600:2800,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,1000:2000:3000:4000:5000:6000:7000:8000:9000:10000,2000,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,10000,0
+24,0,0,0,10000,0,0
//-- AL_PNEUMA
-25,0,0,0,10000,0
+25,0,0,0,10000,0,0
//-- AL_TELEPORT
-26,0,0,0,0,0
+26,0,0,0,0,0,0
//-- AL_WARP
-27,1000,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,1000,0,0,0
+28,0,1000,0,0,0,0
//-- AL_INCAGI
-29,1000,1000,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,1000,1000,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,1000,500,0,0,0
+31,1000,500,0,0,0,0
//-- AL_CRUCIS
-32,500,2000,0,60000,0
+32,500,2000,0,0,0,0
//-- AL ANGELUS
-33,500,3500,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,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,1000,0,0,6000
+35,0,1000,0,0,6000,0
//==========================================
//===== Archer =============================
//-- AC_CONCENTRATION
-45,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,0,100,0
+46,0,0,0,100,0,0
//-- AC_SHOWER
-47,0,0,0,100,0
+47,0,0,0,100,0,0
//==========================================
//===== Thief ==============================
//-- TF_HIDING
-51,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,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,6000:4000:2000:0,0:1000:2000:3000,0,0,0
+54,6000:4000:2000:0,0:1000:2000:3000,0,0,0,0
//==========================================
//===== Knight =============================
//-- KN_BRANDISHSPEAR
-57,700,0,0,0,0
+57,700,0,0,0,0,0
//-- KN_SPEARBOOMERANG
-59,0,1000,0,0,0
+59,0,1000,0,0,0,0
//-- KN_TWOHANDQUICKEN
-60,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,400:800:1200:1600:2000,0
+61,0,0,0,400:800:1200:1600:2000,0,0
//-- KN_BOWLINGBASH
-62,700,0,0,0,0
+62,700,0,0,0,0,0
//==========================================
//===== Priest =============================
//-- PR_IMPOSITIO
-66,0,3000,0,60000,0
+66,0,3000,0,60000,0,0
//-- PR_SUFFRAGIUM
-67,0,2000,0,30000:20000:10000,0
+67,0,2000,0,30000:20000:10000,0,0
//-- PR_ASPERSIO
-68,0,2000,0,60000:90000:120000:150000:180000,0
+68,0,2000,0,60000:90000:120000:150000:180000,0,0
//-- PR_BENEDICTIO
-69,0,0,0,40000:80000:120000:160000:200000,0
+69,0,0,0,40000:80000:120000:160000:200000,0,0
//-- PR_SANCTUARY
-70,5000,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,10000:20000:30000:40000,0
+71,0,0,0,10000:20000:30000:40000,0,0
//-- PR_STRECOVERY
-72,0,2000,0,0,30000
+72,0,2000,0,0,30000,0
//-- PR_KYRIE
-73,2000,2000,0,120000,0
+73,2000,2000,0,120000,0,0
//-- PR_MAGNIFICAT
-74,4000,2000,0,30000:45000:60000:75000:90000,0
+74,4000,2000,0,30000:45000:60000:75000:90000,0,0
//-- PR_GLORIA
-75,0,2000,0,10000:15000:20000:25000:30000,0
+75,0,2000,0,10000:15000:20000:25000:30000,0,0
//-- PR_LEXDIVINA
-76,0,3000,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,1000,3000,0,0,0
+77,1000,3000,0,0,0,0
//-- PR_LEXAETERNA
-78,0,3000,0,600000,0
+78,0,3000,0,600000,0,0
//-- PR_MAGNUS
-79,15000,4000,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,3000:2700:2400:2100:1800:1500:1200:900:600:300,1000,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,700,2000,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,15000,2000:3000:3000:4000:4000:5000:5000:6000:6000:7000,0,500,5000
+83,15000,2000:3000:3000:4000:4000:5000:5000:6000:6000:7000,0,500,5000,0
//-- WZ_JUPITEL
-84,2500:3000:3500:4000:4500:5000:5500:6000:6500:7000,0,0,0,0
+84,2500:3000:3500:4000:4500:5000:5500:6000:6500:7000,0,0,0,0,0
//-- WZ_VERMILION
-85,15000:14500:14000:13500:13000:12500:12000:11500:11000:10500,5000,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,1000:2000:3000:4000:5000:6000:7000:8000:9000:10000,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,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,5000:4700:4400:4100:3800:3500:3200:2900:2700:2500,1000,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,6000:7000:8000:9000:10000:11000:12000:13000:14000:15000,5000,0,4600,12000
+89,6000:7000:8000:9000:10000:11000:12000:13000:14000:15000,5000,0,4600,12000,0
//-- WZ_EARTHSPIKE
-90,1000:2000:3000:4000:5000,700,0,0,0
+90,1000:2000:3000:4000:5000,700,0,0,0,0
//-- WZ_HEAVENDRIVE
-91,1000:2000:3000:4000:5000,700,0,500,0
+91,1000:2000:3000:4000:5000,700,0,500,0,0
//-- WZ_QUAGMIRE
-92,0,1000,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,7500,0,0,0,0
+108,7500,0,0,0,0,0
//-- BS_HAMMERFALL
-110,0,0,0,0,5000
+110,0,0,0,0,5000,0
//-- BS_ADRENALINE
-111,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,10000:20000:30000:40000:50000,0
+112,0,0,0,10000:20000:30000:40000:50000,0,0
//-- BS_OVERTHRUST
-113,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,1000:2000:3000:4000:5000,0
+114,0,0,0,1000:2000:3000:4000:5000,0,0
//==========================================
//===== Hunter =============================
//-- HT_SKIDTRAP
-115,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,200000:160000:120000:80000:40000,5000
+116,0,0,0,200000:160000:120000:80000:40000,5000,0
//-- HT_ANKLESNARE
-117,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,200000:160000:120000:80000:40000,0
+118,0,0,0,200000:160000:120000:80000:40000,0,0
//-- HT_SANDMAN
-119,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,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,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,25000:20000:15000:10000:5000,0
+122,0,0,0,25000:20000:15000:10000:5000,0,0
//-- HT_CLAYMORETRAP
-123,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,600000,0
+125,0,0,0,600000,0,0
//-- HT_BLITZBEAT
-129,1500,1000,0,0,0
+129,1500,1000,0,0,0,0
//==========================================
//===== Assassin ===========================
//-- AS_CLOAKING
-135,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,2000,2000,0,5000
+136,0,2000,2000,0,5000,0
//-- AS_ENCHANTPOISON
-138,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,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,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,1000,0,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,600000,0
+143,0,0,0,600000,0,0
//-- SM_FATALBLOW
-145,0,0,0,0,5000
+145,0,0,0,0,5000,0
//-- AC_CHARGEARROW
-148,1500,0,0,0,0
+148,1500,0,0,0,0,0
//-- TF_SPRINKLESAND
-149,0,0,0,0,10000
+149,0,0,0,0,10000,0
//-- TF_PICKSTONE
-151,500,0,0,0,0
+151,500,0,0,0,0,0
//-- TF_THROWSTONE
-152,0,0,0,5000,8000
+152,0,0,0,5000,8000,0
//-- MC_LOUD
-155,0,0,0,300000,0
+155,0,0,0,300000,0,0
//-- AL_HOLYLIGHT
-156,2000,0,0,0,0
+156,2000,0,0,0,0,0
//-- MG_ENERGYCOAT
-157,5000,0,0,300000,0
+157,5000,0,0,300000,0,0
//==========================================
//===== NPC Skills Part 1 ==================
//-- NPC_ATTRICHANGE
-161,0,0,0,1800000,0
+161,0,0,0,1800000,0,0
//-- NPC_CHANGEWATER
-162,0,0,0,1800000,0
+162,0,0,0,1800000,0,0
//-- NPC_CHANGEGROUND
-163,0,0,0,1800000,0
+163,0,0,0,1800000,0,0
//-- NPC_CHANGEFIRE
-164,0,0,0,1800000,0
+164,0,0,0,1800000,0,0
//-- NPC_CHANGEWIND
-165,0,0,0,1800000,0
+165,0,0,0,1800000,0,0
//-- NPC_CHANGEPOISON
-166,0,0,0,1800000,0
+166,0,0,0,1800000,0,0
//-- NPC_CHANGEHOLY
-167,0,0,0,1800000,0
+167,0,0,0,1800000,0,0
//-- NPC_CHANGEDARKNESS
-168,0,0,0,1800000,0
+168,0,0,0,1800000,0,0
//-- NPC_CHANGETELEKINESIS
-169,0,0,0,1800000,0
+169,0,0,0,1800000,0,0
//-- NPC_SELFDESTRUCTION
-173,0,0,0,3500,0
+173,0,0,0,3500,0,0
//-- NPC_POISON
-176,0,0,0,0,60000
+176,0,0,0,0,60000,0
//-- NPC_BLINDATTACK
-177,0,0,0,0,30000
+177,0,0,0,0,30000,0
//-- NPC_SILENCEATTACK
-178,0,0,0,0,30000
-//-- NPC_STUNATTACK
-179,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,20000
+180,0,0,0,0,20000,0
//-- NPC_CURSEATTACK
-181,0,0,0,0,30000
+181,0,0,0,0,30000,0
//-- NPC_SLEEPATTACK
-182,0,0,0,0,30000
+182,0,0,0,0,30000,0
//-- NPC_MAGICALATTACK
-192,0,0,0,15000,0
+192,0,0,0,15000,0,0
//-- NPC_KEEPING
-201,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,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,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,3000
+206,0,0,0,0,3000,0
//-- NPC_HALLUCINATION
-207,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_BACKSTAB
-212,0,500,0,0,0
+212,0,500,0,0,0,0
//-- RG_RAID
-214,0,0,0,5000,8000:9000:10000:11000:12000
+214,0,0,0,5000,8000:9000:10000:11000:12000,0
//-- RG_STRIPEWEAPON
-215,1000,1000,0,75000:90000:105000:120000:135000,0
+215,1000,1000,0,75000:90000:105000:120000:135000,0,0
//-- RG_STRIPSHIELD
-216,1000,1000,0,75000:90000:105000:120000:135000,0
+216,1000,1000,0,75000:90000:105000:120000:135000,0,0
//-- RG_STRIPWEAPON
-217,1000,1000,0,75000:90000:105000:120000:135000,0
+217,1000,1000,0,75000:90000:105000:120000:135000,0,0
//-- RG_STRIPHELM
-218,1000,1000,0,75000:90000:105000:120000:135000,0
+218,1000,1000,0,75000:90000:105000:120000:135000,0,0
//-- RG_GRAFITTI
-220,0,0,0,180000,0
+220,0,0,0,180000,0,0
//==========================================
//===== Alchemist ==========================
//-- AM_DEMONSTRATION
-229,1000,0,0,40000:45000:50000:55000:60000,0
+229,1000,0,0,40000:45000:50000:55000:60000,0,0
//-- AM_ACIDTERROR
-230,1000,0,0,3:7:10:12:13,120000
+230,1000,0,0,3:7:10:12:13,120000,0
//-- AM_POTIONPITCHER
-231,0,500,0,0,0
+231,0,500,0,0,0,0
//-- AM_CANNIBALIZE
-232,2000,500,0,300000:240000:180000:120000:60000,0
+232,2000,500,0,300000:240000:180000:120000:60000,0,0
//-- AM_SPHEREMINE
-233,2000,500,0,30000,0
+233,2000,500,0,30000,0,0
//-- AM_CP_WEAPON
-234,2000,0,0,120000:240000:360000:480000:600000,0
+234,2000,0,0,120000:240000:360000:480000:600000,0,0
//-- AM_CP_SHIELD
-235,2000,0,0,120000:240000:360000:480000:600000,0
+235,2000,0,0,120000:240000:360000:480000:600000,0,0
//-- AM_CP_ARMOR
-236,2000,0,0,120000:240000:360000:480000:600000,0
+236,2000,0,0,120000:240000:360000:480000:600000,0,0
//-- AM_CP_HELM
-237,2000,0,0,120000:240000:360000:480000:600000,0
+237,2000,0,0,120000:240000:360000:480000:600000,0,0
//-- AM_RESURRECTHOMUN
-247,2000,0,0,0,0
+247,2000,0,0,0,0,0
//==========================================
//===== Crusader ===========================
//-- CR_AUTOGUARD
-249,0,0,0,300000,0
+249,0,0,0,300000,0,0
//-- CR_SHIELDCHARGE
-250,0,0,0,0,5000
+250,0,0,0,0,5000,0
//-- CR_SHIELDBOOMERANG
-251,0,700,0,0,0
+251,0,700,0,0,0,0
//-- CR_REFLECTSHIELD
-252,0,0,0,300000,0
+252,0,0,0,300000,0,0
//-- CR_HOLYCROSS
-253,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,2000,1500,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,3000,0,0,0,30000:45000:60000:75000:90000
+255,3000,0,0,0,30000:45000:60000:75000:90000,0
//-- CR_PROVIDENCE
-256,3000,0,0,180000,0
+256,3000,0,0,180000,0,0
//-- CR_DEFENDER
-257,0,800,0,180000,0
+257,0,800,0,180000,0,0
//-- CR_SPEARQUICKEN
-258,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,1000,0,0,600000,0
+261,1000,0,0,600000,0,0
//-- MO_ABSORBSPIRITS
-262,2000,0,0,0,0
+262,2000,0,0,0,0,0
//-- MO_TRIPLEATTACK
-263,0,1000,0,0,0
+263,0,1000,0,0,0,0
//-- MO_INVESTIGATE
-266,1000,500,0,0,0
+266,1000,500,0,0,0,0
//-- MO_FINGEROFFENSIVE
-267,1000,500,0:200:400:600:800,0,0
+267,1000,500,0:200:400:600:800,0,0,0
//-- MO_STEELBODY
-268,5000,0,0,30000:60000:90000:120000:150000,0
+268,5000,0,0,30000:60000:90000:120000:150000,0,0
//-- MO_BLADESTOP
-269,0,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,180000,0
+270,0,0,0,180000,0,0
//-- MO_EXTREMITYFIST
-271,4000:3500:3000:2500:2000,3000:2500:2000:1500:1000,0,0,300000
+271,4000:3500:3000:2500:2000,3000:2500:2000:1500:1000,0,0,300000,0
//-- MO_CHAINCOMBO
-272,0,1000,0,0,0
+272,0,1000,0,0,0,0
//-- MO_COMBOFINISH
-273,0,700,0,0,0
+273,0,700,0,0,0,0
//==========================================
//===== Sage ===============================
//-- SA_MAGICROD
-276,0,0,0,400:600:800:1000:1200,0
+276,0,0,0,400:600:800:1000:1200,0,0
//-- SA_SPELLBREAKER
-277,700,0,0,0,0
+277,700,0,0,0,0,0
//-- SA_AUTOSPELL
-279,3000,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,3000,0,0,1200000:1200000:1200000:1200000:1800000,0
+280,3000,0,0,1200000:1200000:1200000:1200000:1800000,0,0
//-- SA_FROSTWEAPON
-281,3000,0,0,1200000:1200000:1200000:1200000:1800000,0
+281,3000,0,0,1200000:1200000:1200000:1200000:1800000,0,0
//-- SA_LIGHTNINGLOADER
-282,3000,0,0,1200000:1200000:1200000:1200000:1800000,0
+282,3000,0,0,1200000:1200000:1200000:1200000:1800000,0,0
//-- SA_SEISMICWEAPON
-283,3000,0,0,1200000:1200000:1200000:1200000:1800000,0
+283,3000,0,0,1200000:1200000:1200000:1200000:1800000,0,0
//-- SA_VOLCANO
-285,5000,0,0,60000:120000:180000:240000:300000,0
+285,5000,0,0,60000:120000:180000:240000:300000,0,0
//-- SA_DELUGE
-286,5000,0,0,60000:120000:180000:240000:300000,0
+286,5000,0,0,60000:120000:180000:240000:300000,0,0
//-- SA_VIOLENTGALE
-287,5000,0,0,60000:120000:180000:240000:300000,0
+287,5000,0,0,60000:120000:180000:240000:300000,0,0
//-- SA_LANDPROTECTOR
-288,5000,0,0,165000:210000:255000:300000:345000,0
+288,5000,0,0,165000:210000:255000:300000:345000,0,0
//-- SA_DISPELL
-289,2000,0,0,0,0
+289,2000,0,0,0,0,0
//-- SA_REVERSEORCISH
-294,0,0,0,1200000,0
+294,0,0,0,1200000,0,0
//==========================================
//===== Bard & Dancer (Ensemble Skills) ====
//-- BD_ADAPTATION
-304,0,0,0,0,5000
+304,0,0,0,0,5000,0
//-- BD_LULLABY
-306,0,0,0,60000,15000
+306,0,0,0,60000,15000,0
//-- BD_RICHMANKIM
-307,0,0,0,60000,60000
+307,0,0,0,60000,60000,0
//-- BD_ETERNALCHAOS
-308,0,0,0,60000,60000
+308,0,0,0,60000,60000,0
//-- BD_DRUMBATTLEFIELD
-309,0,0,0,60000,60000
+309,0,0,0,60000,60000,0
//-- BD_RINGNIBELUNGEN
-310,0,0,0,60000,60000
+310,0,0,0,60000,60000,0
//-- BD_ROKISWEIL
-311,0,0,0,60000,60000
+311,0,0,0,60000,60000,0
//-- BD_INTOABYSS
-312,0,0,0,60000,60000
+312,0,0,0,60000,60000,0
//-- BD_SIEGFRIED
-313,0,0,0,60000,60000
+313,0,0,0,60000,60000,0
//==========================================
//===== Bard ===============================
//-- BA_MUSICALSTRIKE
-316,1500,0,0,0,0
+316,1500,0,0,0,0,0
//-- BA_DISSONANCE
-317,0,0,0,30000,3000
+317,0,0,0,30000,3000,0
//-- BA_FROSTJOKE
-318,0,3000,0,0,10000:11000:12000:13000:14000
+318,0,3000,0,0,10000:11000:12000:13000:14000,0
//-- BA_WHISTLE
-319,0,0,0,60000,20000
+319,0,0,0,60000,20000,0
//-- BA_ASSASSINCROSS
-320,0,0,0,120000,20000
+320,0,0,0,120000,20000,0
//-- BA_POEMBRAGI
-321,0,0,0,180000,20000
+321,0,0,0,180000,20000,0
//-- BA_APPLEIDUN
-322,0,0,0,180000,20000
+322,0,0,0,180000,20000,0
//==========================================
//===== Dancer =============================
//-- DC_THROWARROW
-324,1500,0,0,0,0
+324,1500,0,0,0,0,0
//-- DC_UGLYDANCE
-325,0,0,0,30000,3000
+325,0,0,0,30000,3000,0
//-- DC_SCREAM
-326,0,3000,0,0,5000
+326,0,3000,0,0,5000,0
//-- DC_HUMMING
-327,0,0,0,60000,20000
+327,0,0,0,60000,20000,0
//-- DC_DONTFORGETME
-328,0,0,0,180000,20000
+328,0,0,0,180000,20000,0
//-- DC_FORTUNEKISS
-329,0,0,0,120000,20000
+329,0,0,0,120000,20000,0
//-- DC_SERVICEFORYOU
-330,0,0,0,180000,20000
+330,0,0,0,180000,20000,0
//==========================================
//===== Wedding Skills =====================
//-- WE_MALE
-334,3000,0,0,0,0
+334,3000,0,0,0,0,0
//-- WE_FEMALE
-335,3000,0,0,0,0
+335,3000,0,0,0,0,0
//-- WE_CALLPARTNER
-336,0,0,0,20000,0
+336,0,0,0,20000,0,0
//==========================================
//===== NPC Skills Part 2 ==================
//-- NPC_GRANDDARKNESS
-339,2000,1500,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,10000,0
+342,0,0,0,10000,0,0
//-- NPC_CHANGEUNDEAD
-348,0,0,0,30000,0
+348,0,0,0,30000,0,0
//-- NPC_POWERUP
-349,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,10000:15000:20000:25000:30000,0
+350,0,0,0,10000:15000:20000:25000:30000,0,0
//-- NPC_INVISIBLE
-353,0,0,0,30000,0
+353,0,0,0,30000,0,0
//-- NPC_RUN
-354,0,0:500:1000:1500:2000:2500,0,0,0
+354,0,0:500:1000:1500:2000:2500,0,0,0,0
//==========================================
//===== Lord Knight ========================
//-- LK_AURABLADE
-355,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,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,25000:30000:35000:40000:45000,0
+357,0,0,0,25000:30000:35000:40000:45000,0,0
//-- LK_TENSIONRELAX
-358,0,0,0,180000,0
+358,0,0,0,180000,0,0
//-- LK_BERSERK
-359,0,0,0,300000,15000
+359,0,0,0,300000,15000,0
//-- LK_FURY
-360,0,0,0,300000,0
+360,0,0,0,300000,0,0
//==========================================
//===== High Priest ========================
//-- HP_ASSUMPTIO
-361,1000:1500:2000:2500:3000,1100:1200:1300:1400:1500,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,5000:6000:7000:8000:9000,2000:3000:4000:5000:6000,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,300,300,0,0,0
+365,300,300,0,0,0,0
//-- HW_MAGICPOWER
-366,700,0,0,30000,0
+366,700,0,0,30000,0,0
//==========================================
//===== Paladin ============================
//-- PA_PRESSURE
-367,2000:2500:3000:3500:4000,2000:2500:3000:3500:4000,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,2000,0,0,0
+368,0,2000,0,0,0,0
//-- PA_GOSPEL
-369,0,0,0,60000,60000
+369,0,0,0,60000,60000,0
//==========================================
//===== Champion ===========================
//-- CH_PALMSTRIKE
-370,0,300,0,0,0
+370,0,300,0,0,0,0
//-- CH_TIGERFIST
-371,0,700,0,0,2000:4000:6000:8000:10000
+371,0,700,0,0,2000:4000:6000:8000:10000,0
//-- CH_CHAINCRUSH
-372,0,800:800:800:800:800:1000:1000:1000:1000:1000,0,0,0
+372,0,800:800:800:800:800:1000:1000:1000:1000:1000,0,0,0,0
//==========================================
//===== Professor ==========================
//-- PF_HPCONVERSION
-373,0,1000:1200:1400:1600:1800,0,0,0
+373,0,1000:1200:1400:1600:1800,0,0,0,0
//-- PF_SOULCHANGE
-374,3000,5000,0,0,0
+374,3000,5000,0,0,0,0
//-- PF_SOULBURN
-375,0,0,0,0,0
+375,0,0,0,0,0,10000:10000:10000:10000:15000
//==========================================
//===== Assassin Cross =====================
//-- ASC_EDP
-378,0,2000,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,700,1000:1200:1400:1600:1800:2000:2200:2400:2600:2800,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,30000,0
+380,0,0,0,30000,0,0
//-- SN_FALCONASSAULT
-381,1000,3000,0,0,0
+381,1000,3000,0,0,0,0
//-- SN_SHARPSHOOTING
-382,2000,1500,0,0,0
+382,2000,1500,0,0,0,0
//-- SN_WINDWALK
-383,2000:2400:2800:3200:3600:4000:4400:4800:5200:5600,2000,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,500:500:600:600:700:700:800:800:900:1000,0,0,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000,5000
+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,60000,0
+387,0,0,0,60000,0,0
//==========================================
//===== Stalker ============================
//-- ST_CHASEWALK
-389,1200,0,0,10000,30000
+389,1200,0,0,10000,30000,0
//-- ST_REJECTSWORD
-390,0,0,0,300000,0
+390,0,0,0,300000,0,0
//==========================================
//===== Clown / Gypsy ======================
//-- CG_ARROWVULCAN
-394,2000:2200:2400:2600:2800:3000:3200:3400:3600:3800,2800:2800:2800:2800:2800:3000:3000:3000:3000:3000,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,20000:25000:30000:35000:40000,0
+395,0,0,0,20000:25000:30000:35000:40000,0,0
//-- CG_MARIONETTE
-396,0,0,0,1000,0
+396,0,0,0,1000,0,0
//==========================================
//===== Mixed Advanced Skills ==============
//-- LK_SPIRALPIERCE
-397,300:500:700:900:1000,1200:1400:1600:1800:2000,0,0,1000
+397,300:500:700:900:1000,1200:1400:1600:1800:2000,0,0,1000,0
//-- LK_HEADCRUSH
-398,0,500,0,0,120000
+398,0,500,0,0,120000,0
//-- LK_JOINTBEAT
-399,0,800:800:800:800:800:1000:1000:1000:1000:1000,0,0,30000
+399,0,800:800:800:800:800:1000:1000:1000:1000:1000,0,0,30000,0
//-- HW_NAPALMVULCAN
-400,1000,1000,0,0,45000
+400,1000,1000,0,0,45000,0
//-- CH_SOULCOLLECT
-401,2000,0,0,600000,0
+401,2000,0,0,600000,0,0
//-- PF_MINDBREAKER
-402,0,800:900:1000:1100:1200,0,30000,0
+402,0,800:900:1000:1100:1200,0,30000,0,0
//-- PF_MEMORIZE
-403,5000,0,0,0,0
+403,5000,0,0,0,0,0
//-- PF_FOGWALL
-404,0,0,0,20000,10000
+404,0,0,0,20000,10000,0
//-- PF_SPIDERWEB
-405,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,500,500,0,0,10000:5000:120000
+406,500,500,0,0,10000:5000:120000,0
//-- ASC_CDP
-407,0,500,0,0,0
+407,0,500,0,0,0,0
//==========================================
//===== Adoption Skills ====================
//-- WE_BABY
-408,3000,0,0,300000,0
+408,3000,0,0,300000,0,0
//-- WE_CALLPARENT
-409,0,0,0,20000,0
+409,0,0,0,20000,0,0
//-- WE_CALLBABY
-410,0,0,0,20000,0
+410,0,0,0,20000,0,0
//==========================================
//===== Taekwon ============================
//-- TK_RUN
-411,6000:5000:4000:3000:2000:1000:0:0:0:0,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,3000
+415,0,0,0,0,3000,0
//-- TK_TURNKICK
-417,0,0,0,0,2000
+417,0,0,0,0,2000,0
//-- TK_SPTIME
-423,0,0,0,1800000,0
+423,0,0,0,1800000,0,0
//-- TK_SEVENWIND
-425,0,0,0,300000,0
+425,0,0,0,300000,0,0
//-- TK_HIGHJUMP
-426,5000:4000:3000:2000:1000,0,0,0,0
+426,5000:4000:3000:2000:1000,0,0,0,0,0
//==========================================
//===== Star Gladiator =====================
//-- SG_FEEL
-427,1000,0,0,0,0
+427,1000,0,0,0,0,0
//SG_SUN_WARM
-428,0,1000,0,10000:20000:60000,0
+428,0,1000,0,10000:20000:60000,0,0
//SG_MOON_WARM
-429,0,1000,0,10000:20000:60000,0
+429,0,1000,0,10000:20000:60000,0,0
//SG_STAR_WARM
-430,0,1000,0,10000:20000:60000,0
+430,0,1000,0,10000:20000:60000,0,0
//SG_SUN_COMFORT
-431,0,1000,0,80000:160000:240000:320000,0
+431,0,1000,0,80000:160000:240000:320000,0,0
//SG_MOON_COMFORT
-432,0,1000,0,80000:160000:240000:320000,0
+432,0,1000,0,80000:160000:240000:320000,0,0
//SG_STAR_COMFORT
-433,0,1000,0,80000:160000:240000:320000,0
+433,0,1000,0,80000:160000:240000:320000,0,0
//-- SG_HATE
-434,1000,0,0,0,0
+434,1000,0,0,0,0,0
//SG_FRIEND
-442,0,0,0,10000,0
+442,0,0,0,10000,0,0
//SG_KNOWLEDGE
-443,0,0,0,600000,0
+443,0,0,0,600000,0,0
//SG_FUSION
-444,0,1000,0,600000,0
+444,0,1000,0,600000,0,0
//==========================================
//===== Soul Linker ========================
//-- SL_ALCHEMIST
-445,1000,500,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,500,0,0,0
+446,0,500,0,0,0,0
//-- SL_MONK
-447,1000,500,0,150000:200000:250000:300000:350000,0
+447,1000,500,0,150000:200000:250000:300000:350000,0,0
//-- SL_STAR
-448,1000,500,0,150000:200000:250000:300000:350000,0
+448,1000,500,0,150000:200000:250000:300000:350000,0,0
//-- SL_SAGE
-449,1000,500,0,150000:200000:250000:300000:350000,0
+449,1000,500,0,150000:200000:250000:300000:350000,0,0
//-- SL_CRUSADER
-450,1000,500,0,150000:200000:250000:300000:350000,0
+450,1000,500,0,150000:200000:250000:300000:350000,0,0
//-- SL_SUPERNOVICE
-451,1000,500,0,150000:200000:250000:300000:350000,0
+451,1000,500,0,150000:200000:250000:300000:350000,0,0
//-- SL_KNIGHT
-452,1000,500,0,150000:200000:250000:300000:350000,0
+452,1000,500,0,150000:200000:250000:300000:350000,0,0
//-- SL_WIZARD
-453,1000,500,0,150000:200000:250000:300000:350000,0
+453,1000,500,0,150000:200000:250000:300000:350000,0,0
//-- SL_PRIEST
-454,1000,500,0,150000:200000:250000:300000:350000,0
+454,1000,500,0,150000:200000:250000:300000:350000,0,0
//-- SL_BARDDANCER
-455,1000,500,0,150000:200000:250000:300000:350000,0
+455,1000,500,0,150000:200000:250000:300000:350000,0,0
//-- SL_ROGUE
-456,1000,500,0,150000:200000:250000:300000:350000,0
+456,1000,500,0,150000:200000:250000:300000:350000,0,0
//-- SL_ASSASSIN
-457,1000,500,0,150000:200000:250000:300000:350000,0
+457,1000,500,0,150000:200000:250000:300000:350000,0,0
//-- SL_BLACKSMITH
-458,1000,500,0,150000:200000:250000:300000:350000,0
+458,1000,500,0,150000:200000:250000:300000:350000,0,0
//-- BS_ADRENALINE2
-459,0,0,0,150000,0
+459,0,0,0,150000,0,0
//-- SL_HUNTER
-460,1000,500,0,150000:200000:250000:300000:350000,0
+460,1000,500,0,150000:200000:250000:300000:350000,0,0
//-- SL_SOULLINKER
-461,1000,500,0,150000:200000:250000:300000:350000,0
+461,1000,500,0,150000:200000:250000:300000:350000,0,0
//-- SL_KAIZEL
-462,4500:4000:3500:3000:2500:2000:1500,0,0,1800000,2000
+462,4500:4000:3500:3000:2500:2000:1500,0,0,1800000,2000,0
//-- SL_KAAHI
-463,0,500,0,1800000,500
+463,0,500,0,1800000,500,0
//-- SL_KAUPE
-464,500,500,0,600000,0
+464,500,500,0,600000,0,0
//-- SL_KAITE
-465,6000:5500:5000:4500:4000:3500:3000,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,100,500,0,0,0
+467,100,500,0,0,0,0
//-- SL_STUN
-468,100,500,0,2000,0
+468,100,500,0,2000,0,0
//-- SL_SMA
-469,2000,500,0,3000,0
+469,2000,500,0,3000,0,0
//-- SL_SWOO
-470,1000,500,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,3000:2000:1000,500,0,10000:20000:30000,3000
+471,3000:2000:1000,500,0,10000:20000:30000,3000,0
//-- SL_SKA
-472,3000:2000:1000,500,0,10000:20000:30000,0
+472,3000:2000:1000,500,0,10000:20000:30000,0,0
//==========================================
//-- SM_SELFPROVOKE
-473,0,0,0,30000,0
+473,0,0,0,30000,0,0
//===== Mixed Advanced Skills ==============
//-- ST_PRESERVE
-475,1000,0,0,600000,0
+475,1000,0,0,600000,0,0
//-- ST_FULLSTRIP
-476,0,1000,0,75000:90000:105000:120000:135000,0
+476,0,1000,0,75000:90000:105000:120000:135000,0,0
//-- CR_SLIMPITCHER
-478,1000,1000,0,0,0
+478,1000,1000,0,0,0,0
//-- CR_FULLPROTECTION
-479,2000,0,0,120000:240000:360000:480000:600000,0
+479,2000,0,0,120000:240000:360000:480000:600000,0,0
//-- PA_SHIELDCHAIN
-480,1000,1000,0,0,0
+480,1000,1000,0,0,0,0
//-- PF_DOUBLECASTING
-482,2000,0,0,90000,0
+482,2000,0,0,90000,0,0
//-- HW_GANBANTEIN
-483,3000,2000,0,0,0
+483,3000,2000,0,0,0,0
//-- HW_GRAVITATION
-484,5000,2000,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,5000
+485,0,0,0,0,5000,0
//-- WS_OVERTHRUSTMAX
-486,0,0,0,180000,0
+486,0,0,0,180000,0,0
//-- CG_LONGINGFREEDOM
-487,0,0,0,180000,0
+487,0,0,0,180000,0,0
//-- CG_HERMODE
-488,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,1000,3000,0,0,30000
+489,1000,3000,0,0,30000,0
//-- CR_ACIDDEMONSTRATION
-490,1000,1000,0,0,0
+490,1000,1000,0,0,0,0
//-- CR_CULTIVATION
-491,0,0,0,300000,0
+491,0,0,0,300000,0,0
//==========================================
//-- ITEM_ENCHANTARMS
-492,0,0,0,180000,0
+492,0,0,0,180000,0,0
//===== Mixed Taekwon Skills ===============
//-- TK_MISSION
-493,1000,0,0,0,0
+493,1000,0,0,0,0,0
//-- SL_HIGH
-494,1000,500,0,150000:200000:250000:300000:350000,0
+494,1000,500,0,150000:200000:250000:300000:350000,0,0
//-- KN_ONEHAND
-495,0,0,0,300000,0
+495,0,0,0,300000,0,0
//-- AM_TWILIGHT1
-496,3000,10000,0,0,0
+496,3000,10000,0,0,0,0
//-- AM_TWILIGHT2
-497,3000,10000,0,0,0
+497,3000,10000,0,0,0,0
//-- AM_TWILIGHT3
-498,3000,10000,0,0,0
+498,3000,10000,0,0,0,0
//-- HT_POWER
-499,0,0,0,100,0
+499,0,0,0,100,0,0
//==========================================
//===== Gunslinger =========================
//-- GS_GLITTERING
-500,0,0,0,600000,0
+500,0,0,0,600000,0,0
//-- GS_FLING
-501,0,0,0,30000,0
+501,0,0,0,30000,0,0
//-- GS_BULLSEYE
-503,500,0,0,0,0
+503,500,0,0,0,0,0
//-- GS_MADNESSCANCEL
-504,3000,4000,0,15000,0
+504,3000,4000,0,15000,0,0
//-- GS_ADJUSTMENT
-505,1000,1000,0,30000,0
+505,1000,1000,0,30000,0,0
//-- GS_INCREASING
-506,0,1000,0,60000,0
+506,0,1000,0,60000,0,0
//-- GS_CRACKER
-508,0,1000,0,0,5000
+508,0,1000,0,0,5000,0
//-- GS_TRACKING
-512,1200:1400:1600:1800:2000:2200:2400:2600:2800:3000,0,0,0,0
+512,1200:1400:1600:1800:2000:2200:2400:2600:2800:3000,0,0,0,0,0
//-- GS_DISARM
-513,0,0,0,30000,0
+513,0,0,0,30000,0,0
//-- GS_PIERCINGSHOT
-514,1500,0,0,0,120000
+514,1500,0,0,0,120000,0
//-- GS_RAPIDSHOWER
-515,0,1000,0,0,0
+515,0,1000,0,0,0,0
//-- GS_DESPERADO
-516,0,1000,1000,1000,0
+516,0,1000,1000,1000,0,0
//-- GS_GATLINGFEVER
-517,0,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,1000,1000,0,0,0
+518,1000,1000,0,0,0,0
//-- GS_FULLBUSTER
-519,0,1200:1400:1600:1800:2000:2200:2400:2600:2800:3000,0,0,10000
+519,0,1200:1400:1600:1800:2000:2200:2400:2600:2800:3000,0,0,10000,0
//-- GS_GROUNDDRIFT
-521,2000,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,1000,0,0,0
+524,0,1000,0,0,0,0
//-- NJ_HUUMA
-525,3000,2000,0,0,0
+525,3000,2000,0,0,0,0
//-- NJ_ZENYNAGE
-526,0,5000,0,0,0
+526,0,5000,0,0,0,0
//-- NJ_TATAMIGAESHI
-527,0,3000,0,3000,3000
+527,0,3000,0,3000,3000,0
//-- NJ_KASUMIKIRI
-528,0,1000,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,1000,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
+530,0,0,0,0,0,0
//-- NJ_UTSUSEMI
-531,0,1000,0,20000:30000:40000:50000:60000,0
+531,0,1000,0,20000:30000:40000:50000:60000,0,0
//-- NJ_BUNSINJYUTSU
-532,4000:3500:3000:2500:2000:1500:1000:1000:1000:1000,1000,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,700:1400:2100:2800:3500:4200:4900:5600:6300:7000,0,0,0,0
+534,700:1400:2100:2800:3500:4200:4900:5600:6300:7000,0,0,0,0,0
//-- NJ_KAENSIN
-535,6000:5500:5000:4500:4000:3500:3000:2500:2000:1500,1000,0,20000,0
+535,6000:5500:5000:4500:4000:3500:3000:2500:2000:1500,1000,0,20000,0,0
//-- NJ_BAKUENRYU
-536,3000,2000,0,0,0
+536,3000,2000,0,0,0,0
//-- NJ_HYOUSENSOU
-537,700:1400:2100:2800:3500:4200:4900:5600:6300:7000,0,0,0,0
+537,700:1400:2100:2800:3500:4200:4900:5600:6300:7000,0,0,0,0,0
//-- NJ_SUITON
-538,3000,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,2000:2500:3000:3500:4000,2000,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,1000:1500:2000:2500:3000:3500:4000:5000:5500:6000,1000,0,0,0
+540,1000:1500:2000:2500:3000:3500:4000:5000:5500:6000,1000,0,0,0,0
//-- NJ_RAIGEKISAI
-541,4000,0,0,0,0
+541,4000,0,0,0,0,0
//-- NJ_KAMAITACHI
-542,4000,0,0,0,0
+542,4000,0,0,0,0,0
//-- NJ_NEN
-543,5000:4000:3000:2000:1000,0,0,30000:45000:60000:75000:90000,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,12000
+655,0,0,0,0,12000,0
//-- NPC_ACIDBREATH
-657,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,5000:30000:30000:120000
+659,0,0,0,0,5000:30000:30000:120000,0
//-- NPC_BLEEDING
-660,0,0,0,0,120000
+660,0,0,0,0,120000,0
//-- NPC_HELLJUDGEMENT
-662,0,0,0,0,30000
+662,0,0,0,0,30000,0
//-- NPC_WIDESILENCE
-663,0,0,0,0,30000
+663,0,0,0,0,30000,0
//-- NPC_WIDEFREEZE
-664,0,0,0,0,12000
+664,0,0,0,0,12000,0
//-- NPC_WIDEBLEEDING
-665,0,0,0,0,120000
+665,0,0,0,0,120000,0
//-- NPC_WIDESTONE
-666,0,0,0,0,20000
+666,0,0,0,0,20000,0
//-- NPC_WIDECONFUSE
-667,0,0,0,0,30000
+667,0,0,0,0,30000,0
//-- NPC_WIDESLEEP
-668,0,0,0,0,30000
+668,0,0,0,0,30000,0
//-- NPC_WIDESIGHT
-669,0,0,0,10000,0
+669,0,0,0,10000,0,0
//-- NPC_EVILLAND
-670,0,0,0,30000,30000
+670,0,0,0,30000,30000,0
//-- NPC_MAGICMIRROR
-671,0,0,0,30000,0
+671,0,0,0,30000,0,0
//-- NPC_SLOWCAST
-672,0,0,0,0,30000
+672,0,0,0,0,30000,0
//-- NPC_CRITICALWOUND
-673,0,0,0,0,30000
+673,0,0,0,0,30000,0
//-- NPC_STONESKIN
-675,0,0,0,30000,0
+675,0,0,0,30000,0,0
//-- NPC_ANTIMAGIC
-676,0,0,0,30000,0
+676,0,0,0,30000,0,0
//-- NPC_WIDECURSE
-677,0,0,0,0,30000
+677,0,0,0,0,30000,0
//-- NPC_WIDESTUN
-678,0,0,0,0,5000
+678,0,0,0,0,5000,0
//==========================================
//===== New Monster Skills (12.1) ==========
//-- NPC_HELLPOWER
-683,0,0,0,0,300000
+683,0,0,0,0,300000,0
//-- NPC_WIDEHELLDIGNITY
-684,0,0,0,0,300000
+684,0,0,0,0,300000,0
//-- NPC_INVINCIBLE
-685,0,0,0,-1,0
+685,0,0,0,-1,0,0
//-- NPC_INVINCIBLEOFF
-686,0,0,0,60000,0
+686,0,0,0,60000,0,0
//===== Item Use-Only Skills ===============
//-- CASH_BLESSING
-689,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,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,20000:40000:60000:80000:100000,0
+691,0,0,0,20000:40000:60000:80000:100000,0,0
+//-- ALL_CATCRY
+692,0,5000,0,0,0,0
+
+//-- ALL_DREAM_SUMMERNIGHT
+695,0,12000,0,0,0,0
+
//-- ALL_WEWISH
-698,0,20000,0,0,0
+698,0,20000,0,0,0,0
//==========================================
//===== 2nd Jobs Quest Skills ==============
//-- KN_CHARGEATK
-1001,300,300,0,0,0
+1001,300,300,0,0,0,0
//-- CR_SHRINK
-1002,0,0,0,300000,0
+1002,0,0,0,300000,0,0
//-- AS_VENOMKNIFE
-1004,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,10000,0
+1005,0,0,0,10000,0,0
//-- WZ_SIGHTBLASTER
-1006,2000,0,0,120000,0
+1006,2000,0,0,120000,0,0
//-- SA_ELEMENTWATER
-1008,2000,1000,0,1800000,0
+1008,2000,1000,0,1800000,0,0
//-- HT_PHANTASMIC
-1009,0,0,0,0,0
+1009,0,0,0,0,0,0
//-- BA_PANGVOICE
-1010,1000,2000,0,17000,0
+1010,1000,2000,0,17000,0,0
//-- DC_WINKCHARM (time1: Charm, time2: Confusion)
-1011,1000,2000,0,10000,17000
+1011,1000,2000,0,10000,17000,0
//-- BS_GREED
-1013,0,1000,0,0,0
+1013,0,1000,0,0,0,0
//-- PR_REDEMPTIO
-1014,4000,0,0,0,0
+1014,4000,0,0,0,0,0
//-- MO_KITRANSLATION
-1015,2000,1000,0,600000,0
+1015,2000,1000,0,600000,0,0
//-- MO_BALKYOUNG
-1016,0,2000,0,0,2000
+1016,0,2000,0,0,2000,0
//-- SA_ELEMENTGROUND
-1017,2000,1000,0,1800000,0
+1017,2000,1000,0,1800000,0,0
//-- SA_ELEMENTFIRE
-1018,2000,1000,0,1800000,0
+1018,2000,1000,0,1800000,0,0
//-- SA_ELEMENTWIND
-1019,2000,1000,0,1800000,0
+1019,2000,1000,0,1800000,0,0
+//==========================================
+
+//===== Rune Knight ========================
+//-- RK_ENCHANTBLADE
+2001,1000,0,0,300000,0,0
+//-- RK_SONICWAVE
+2002,0,1000,0,0,0,2000
+//-- RK_DEATHBOUND
+2003,0,2000,0,2000,0,3000
+//-- RK_HUNDREDSPEAR
+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,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 //CHECK duration 2
+2011,0,1000,0,300000,0,60000
+//-- RK_CRUSHSTRIKE
+2012,1000,0,0,0,0,30000
+//-- RK_REFRESH //CHECK duration 1
+2013,1000,0,0,30000,0,120000
+//-- RK_GIANTGROWTH
+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,30000,0,0
+//-- RK_STORMBLAST //CHECK duration 1
+2017,2000,1000,0,1000,0,0
+//-- RK_FIGHTINGSPIRIT
+2018,0,0,0,300000,0,0
+//-- RK_ABUNDANCE
+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
+//==========================================
+
+//===== Arch Bishop ========================
+//-- AB_JUDEX
+2038,2500,500,0,0,0,0
+//-- AB_ANCILLA
+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,4000,0,0,120000:180000:240000,0,0
+//-- AB_CANTO
+2042,4000,0,0,120000:180000:240000,0,0
+//-- AB_CHEAL
+2043,4000:3500:3000,0,0,0,0,1000:2000:3000
+//-- AB_EPICLESIS
+2044,4000:4500:5000:5500:6000,2000,0,18000:21000:24000:27000:30000,0,60000
+//-- AB_PRAEFATIO
+2045,3000,0,0,120000,0,13000:16000:19000:22000:25000:28000:31000:34000:37000:40000
+//-- AB_ORATIO
+2046,5000,0,0,30000,0,2000
+//-- AB_LAUDAAGNUS
+2047,1000,0,0,60000,0,3000
+//-- AB_LAUDARAMUS
+2048,1000,0,0,60000,0,3000
+
+//-- AB_RENOVATIO
+2050,5000,0,0,90000,0,1000
+//-- AB_HIGHNESSHEAL
+2051,1000,1000,0,0,0,3000:6000:9000:12000:15000
+//-- AB_CLEARANCE
+2052,4000,0,0,0,0,10000
+//-- AB_EXPIATIO
+2053,2000,0,0,150000:180000:210000:240000:270000,0,0
+//-- AB_DUPLELIGHT
+2054,4000,1000,0,90000:120000:150000:180000:210000:240000:270000:300000:330000:360000,0,0
+
+//-- AB_SILENTIUM
+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,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,2000,0,0,0
+8001,0,2000,0,0,0,0
//-- HLIF_AVOID
-8002,0,35000,0,40000:35000:30000:25000:20000,0
+8002,0,35000,0,40000:35000:30000:25000:20000,0,0
//-- HLIF_CHANGE
-8004,0,600000:900000:1200000,0,60000:120000:180000,0
+8004,0,600000:900000:1200000,0,60000:120000:180000,0,0
//-- HAMI_CASTLE
-8005,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,40000:35000:30000:25000:20000,0
+8006,0,0,0,40000:35000:30000:25000:20000,0,0
//-- HAMI_BLOODLUST
-8008,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,1000,0,0
+8009,0,0,1000,0,0,0
//-- HFLI_FLEET
-8010,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,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,1000:1200:1400:1600:1800,0,0,0
+8013,0,1000:1200:1400:1600:1800,0,0,0,0
//-- HVAN_CHAOTIC
-8014,0,1000,1000,0,0
+8014,0,1000,1000,0,0,0
//-- HVAN_EXPLOSION
-8016,0,0,1000,0,0
+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_MAGNUM
-8202,0,0,0,2000,10000
+8202,0,0,2000,2000,10000,0
//-- KN_BOWLINGBASH
-8203,700,0,0,0,0
+8203,700,0,0,0,0,0
//-- LK_PARRYING
-8204,0,0,0,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000,0
+8204,0,0,0,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000,0,0
//-- CR_REFLECTSHIELD
-8205,0,0,0,300000,0
+8205,0,0,0,300000,0,0
//-- MS_BERSERK
-8206,0,0,0,300000,15000
+8206,0,0,0,300000,15000,0
//-- MA_DOUBLE
-8207,0,0,0,100,0
+8207,0,0,0,100,0,0
//-- MA_SHOWER
-8208,0,0,0,100,0
+8208,0,0,0,100,0,0
//-- MA_SKIDTRAP
-8209,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,200000:160000:120000:80000:40000,5000
+8210,0,0,0,200000:160000:120000:80000:40000,5000,0
//-- MA_SANDMAN
-8211,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,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,1500,0,0,0,0
+8214,1500,0,0,0,0,0
//-- MA_SHARPSHOOTING
-8215,2000,1500,0,0,0
+8215,2000,1500,0,0,0,0
//-- ML_BRANDISHSPEAR
-8217,700,0,0,0,0
+8217,700,0,0,0,0,0
//-- ML_SPIRALPIERCE
-8218,300:500:700:900:1000,1200:1400:1600:1800:2000,0,0,1000
+8218,300:500:700:900:1000,1200:1400:1600:1800:2000,0,0,1000,0
//-- ML_DEFENDER
-8219,0,800,0,180000,0
+8219,0,800,0,180000,0,0
//-- ML_AUTOGUARD
-8220,0,0,0,300000,0
+8220,0,0,0,300000,0,0
//-- ML_DEVOTION
-8221,3000,0,0,0,30000:45000:60000:75000:90000
+8221,3000,0,0,0,30000:45000:60000:75000:90000,0
//-- MER_MAGNIFICAT
-8222,4000,2000,0,30000:45000:60000:75000:90000,0
+8222,4000,2000,0,30000:45000:60000:75000:90000,0,0
//-- MER_QUICKEN
-8223,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,10000,0
+8224,0,0,0,10000,0,0
//-- MER_CRASH
-8225,1000,2000,0,0,5000
+8225,1000,2000,0,0,5000,0
//-- MER_PROVOKE
-8232,0,0,0,30000,0
+8232,0,0,0,30000,0,0
//-- MER_DECAGI
-8234,1000,1000,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
+8235,3000,0,0,0,0,0
//-- MER_LEXDIVINA
-8236,0,3000,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,2000,0,120000,0
+8238,2000,2000,0,120000,0,0
//-- MER_BLESSING
-8239,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,1000,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,300000,0
+10006,0,0,0,300000,0,0
//-- GD_GLORYWOUNDS
-10007,0,0,0,300000,0
+10007,0,0,0,300000,0,0
//-- GD_SOULCOLD
-10008,0,0,0,300000,0
+10008,0,0,0,300000,0,0
//-- GD_HAWKEYES
-10009,0,0,0,300000,0
+10009,0,0,0,300000,0,0
//-- GD_BATTLEORDER
-10010,0,0,0,60000,300000
+10010,0,0,0,60000,300000,0
//-- GD_REGENERATION
-10011,0,0,0,60000,300000
+10011,0,0,0,60000,300000,0
//-- GD_RESTORE
-10012,10000,0,0,0,300000
+10012,10000,0,0,0,300000,0
//-- GD_EMERGENCYCALL
-10013,5000,0,0,0,300000
+10013,5000,0,0,0,300000,0
//==========================================
diff --git a/db/skill_db.txt b/db/skill_db.txt
index 2a39740df..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
@@ -663,27 +664,155 @@
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,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RK_ENCHANTBLADE,
-//2002,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RK_SONICWAVE,
-//2003,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RK_DEATHBOUND,
-//2004,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RK_HUNDREDSPEAR,
-//2005,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RK_WINDCUTTER,
-//2006,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RK_IGNITIONBREAK,
-//2007,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RK_DRAGONTRAINING,
-//2008,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RK_DRAGONBREATH,
-//2009,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RK_DRAGONHOWLING,
-//2010,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RK_RUNEMASTERY,
-//2011,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RK_MILLENNIUMSHIELD,
-//2012,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RK_CRUSHSTRIKE,
-//2013,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RK_REFRESH,
-//2014,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RK_GIANTGROWTH,
-//2015,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RK_STONEHARDSKIN,
-//2016,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RK_VITALITYACTIVATION,
-//2017,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RK_STORMBLAST,
-//2018,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RK_FIGHTINGSPIRIT,
-//2019,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RK_ABUNDANCE,
-//2020,0,0,0,0,0,0,9,0,no,0,0,0,none,0 RK_PHANTOMTHRUST,
+//****
+// 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,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,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,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,
diff --git a/db/skill_require_db.txt b/db/skill_require_db.txt
index 9e9f385f0..08ea26839 100644
--- a/db/skill_require_db.txt
+++ b/db/skill_require_db.txt
@@ -89,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ƒ“#
@@ -454,6 +454,164 @@
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
+//*****
+// 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
10010,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 //GD_BATTLEORDER##
diff --git a/db/skill_tree.txt b/db/skill_tree.txt
index 27f616c11..51c30f181 100644
--- a/db/skill_tree.txt
+++ b/db/skill_tree.txt
@@ -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#
@@ -2263,3 +2263,671 @@
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 (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#
+4054,3,10,2,1,0,0,0,0,0,0,0,0 //SM_TWOHAND#Two-Handed Sword Mastery#
+4054,4,10,0,0,0,0,0,0,0,0,0,0 //SM_RECOVERY#Increase HP Recovery#
+4054,5,10,0,0,0,0,0,0,0,0,0,0 //SM_BASH#Bash#
+4054,6,10,0,0,0,0,0,0,0,0,0,0 //SM_PROVOKE#Provoke#
+4054,7,10,5,5,0,0,0,0,0,0,0,0 //SM_MAGNUM#Magnum Break#
+4054,8,10,6,5,0,0,0,0,0,0,0,0 //SM_ENDURE#Endure#
+4054,144,1,0,0,0,0,0,0,0,0,0,0 //SM_MOVINGRECOVERY#Moving HP-Recovery#
+4054,145,1,0,0,0,0,0,0,0,0,0,0 //SM_FATALBLOW#Attack Weak Point#
+4054,146,1,0,0,0,0,0,0,0,0,0,0 //SM_AUTOBERSERK#Auto Berserk#
+4054,55,10,0,0,0,0,0,0,0,0,0,0 //KN_SPEARMASTERY#Spear Mastery#
+4054,56,10,55,1,0,0,0,0,0,0,0,0 //KN_PIERCE#Pierce#
+4054,57,10,63,1,58,3,0,0,0,0,0,0 //KN_BRANDISHSPEAR#Brandish Spear#
+4054,58,10,56,5,0,0,0,0,0,0,0,0 //KN_SPEARSTAB#Spear Stab#
+4054,59,5,56,3,0,0,0,0,0,0,0,0 //KN_SPEARBOOMERANG#Spear Boomerang#
+4054,60,10,3,1,0,0,0,0,0,0,0,0 //KN_TWOHANDQUICKEN#Twohand Quicken#
+4054,61,5,3,1,0,0,0,0,0,0,0,0 //KN_AUTOCOUNTER#Counter Attack#
+4054,62,10,5,10,7,3,3,5,60,10,61,5//KN_BOWLINGBASH#Bowling Bash#
+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,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 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#
+//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,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#
+4055,13,10,11,4,0,0,0,0,0,0,0,0 //MG_SOULSTRIKE#Soul Strike#
+4055,14,10,0,0,0,0,0,0,0,0,0,0 //MG_COLDBOLT#Cold Bolt#
+4055,15,10,14,5,0,0,0,0,0,0,0,0 //MG_FROSTDIVER#Frost Diver#
+4055,16,10,0,0,0,0,0,0,0,0,0,0 //MG_STONECURSE#Stone Curse#
+4055,17,10,19,4,0,0,0,0,0,0,0,0 //MG_FIREBALL#Fire Ball#
+4055,18,10,17,5,10,1,0,0,0,0,0,0 //MG_FIREWALL#Fire Wall#
+4055,19,10,0,0,0,0,0,0,0,0,0,0 //MG_FIREBOLT#Fire Bolt#
+4055,20,10,0,0,0,0,0,0,0,0,0,0 //MG_LIGHTNINGBOLT#Lightning Bolt#
+4055,21,10,20,4,0,0,0,0,0,0,0,0 //MG_THUNDERSTORM#Thunderstorm#
+4055,157,1,0,0,0,0,0,0,0,0,0,0 //MG_ENERGYCOAT#Energy Coat#
+4055,80,10,18,1,0,0,0,0,0,0,0,0 //WZ_FIREPILLAR#Fire Pillar#
+4055,81,10,20,1,10,1,0,0,0,0,0,0 //WZ_SIGHTRASHER#Sightrasher#
+4055,83,10,81,2,21,1,0,0,0,0,0,0 //WZ_METEOR#Meteor Storm#
+4055,84,10,11,1,20,1,0,0,0,0,0,0 //WZ_JUPITEL#Jupiter Thunder#
+4055,85,10,21,1,84,5,0,0,0,0,0,0 //WZ_VERMILION#Lord of Vermilion#
+4055,86,5,14,1,20,1,0,0,0,0,0,0 //WZ_WATERBALL#Water Ball#
+4055,87,10,16,1,15,1,0,0,0,0,0,0 //WZ_ICEWALL#Ice Wall#
+4055,88,10,87,1,0,0,0,0,0,0,0,0 //WZ_FROSTNOVA#Frost Nova#
+4055,89,10,15,1,84,3,0,0,0,0,0,0 //WZ_STORMGUST#Storm Gust#
+4055,90,5,16,1,0,0,0,0,0,0,0,0 //WZ_EARTHSPIKE#Earth Spike#
+4055,91,5,90,3,0,0,0,0,0,0,0,0 //WZ_HEAVENDRIVE#Heaven's Drive#
+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#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,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,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#
+4055,2213,5,2212,3,0,0,0,0,0,0,0,0 //WL_COMET#Comet#
+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#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 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#
+4056,44,10,43,3,0,0,0,0,0,0,0,0 //AC_VULTURE#Vulture's Eye#
+4056,45,10,44,1,0,0,0,0,0,0,0,0 //AC_CONCENTRATION#Improve Concentration#
+4056,46,10,0,0,0,0,0,0,0,0,0,0 //AC_DOUBLE#Double Strafe#
+4056,47,10,46,5,0,0,0,0,0,0,0,0 //AC_SHOWER#Arrow Shower#
+4056,147,1,0,0,0,0,0,0,0,0,0,0 //AC_MAKINGARROW#Arrow Crafting#
+4056,148,1,0,0,0,0,0,0,0,0,0,0 //AC_CHARGEARROW#Arrow Repel#
+4056,115,5,0,0,0,0,0,0,0,0,0,0 //HT_SKIDTRAP#Skid Trap#
+4056,116,5,0,0,0,0,0,0,0,0,0,0 //HT_LANDMINE#Land Mine#
+4056,117,5,115,1,0,0,0,0,0,0,0,0 //HT_ANKLESNARE#Ankle Snare#
+4056,118,5,117,1,0,0,0,0,0,0,0,0 //HT_SHOCKWAVE#Shockwave Trap#
+4056,119,5,120,1,0,0,0,0,0,0,0,0 //HT_SANDMAN#Sandman#
+4056,120,5,115,1,0,0,0,0,0,0,0,0 //HT_FLASHER#Flasher#
+4056,121,5,120,1,0,0,0,0,0,0,0,0 //HT_FREEZINGTRAP#Freezing Trap#
+4056,122,5,116,1,119,1,121,1,0,0,0,0 //HT_BLASTMINE#Blast Mine#
+4056,123,5,118,1,122,1,0,0,0,0,0,0 //HT_CLAYMORETRAP#Claymore Trap#
+4056,124,1,116,1,0,0,0,0,0,0,0,0 //HT_REMOVETRAP#Remove Trap#
+4056,125,1,118,1,124,1,0,0,0,0,0,0 //HT_TALKIEBOX#Talkie Box#
+4056,126,10,0,0,0,0,0,0,0,0,0,0 //HT_BEASTBANE#Beast Bane#
+4056,127,1,126,1,0,0,0,0,0,0,0,0 //HT_FALCON#Falconry Mastery#
+4056,128,10,129,5,0,0,0,0,0,0,0,0 //HT_STEELCROW#Steel Crow#
+4056,129,5,127,1,0,0,0,0,0,0,0,0 //HT_BLITZBEAT#Blitz Beat#
+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,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#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 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#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#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#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#
+4057,23,10,22,3,0,0,0,0,0,0,0,0 //AL_DEMONBANE#Demon Bane#
+4057,24,1,0,0,0,0,0,0,0,0,0,0 //AL_RUWACH#Ruwach#
+4057,25,1,27,4,0,0,0,0,0,0,0,0 //AL_PNEUMA#Pneuma#
+4057,26,2,24,1,0,0,0,0,0,0,0,0 //AL_TELEPORT#Teleport#
+4057,27,4,26,2,0,0,0,0,0,0,0,0 //AL_WARP#Warp Portal#
+4057,28,10,0,0,0,0,0,0,0,0,0,0 //AL_HEAL#Heal#
+4057,29,10,28,3,0,0,0,0,0,0,0,0 //AL_INCAGI#Increase AGI#
+4057,30,10,29,1,0,0,0,0,0,0,0,0 //AL_DECAGI#Decrease AGI#
+4057,31,1,0,0,0,0,0,0,0,0,0,0 //AL_HOLYWATER#Aqua Benedicta#
+4057,32,10,23,3,0,0,0,0,0,0,0,0 //AL_CRUCIS#Signum Crusis#
+4057,33,10,22,3,0,0,0,0,0,0,0,0 //AL_ANGELUS#Angelus#
+4057,34,10,22,5,0,0,0,0,0,0,0,0 //AL_BLESSING#Blessing#
+4057,35,1,28,2,0,0,0,0,0,0,0,0 //AL_CURE#Cure#
+4057,156,1,0,0,0,0,0,0,0,0,0,0 //AL_HOLYLIGHT#Holy Light#
+4057,9,10,0,0,0,0,0,0,0,0,0,0 //MG_SRECOVERY#Increase SP Recovery#
+4057,12,10,68,4,70,3,0,0,0,0,0,0 //MG_SAFETYWALL#Safety Wall#
+4057,54,4,72,1,9,4,0,0,0,0,0,0 //ALL_RESURRECTION#Resurrection#
+4057,65,10,0,0,0,0,0,0,0,0,0,0 //PR_MACEMASTERY#Mace Mastery#
+4057,66,5,0,0,0,0,0,0,0,0,0,0 //PR_IMPOSITIO#Impositio Manus#
+4057,67,3,66,2,0,0,0,0,0,0,0,0 //PR_SUFFRAGIUM#Suffragium#
+4057,68,5,31,1,66,3,0,0,0,0,0,0 //PR_ASPERSIO#Aspersio#
+4057,69,5,75,3,68,5,0,0,0,0,0,0 //PR_BENEDICTIO#B.S Sacramenti#
+4057,70,10,28,1,0,0,0,0,0,0,0,0 //PR_SANCTUARY#Sanctuary#
+4057,71,4,0,0,0,0,0,0,0,0,0,0 //PR_SLOWPOISON#Slow Poison#
+4057,72,1,0,0,0,0,0,0,0,0,0,0 //PR_STRECOVERY#Status Recovery#
+4057,73,10,33,2,0,0,0,0,0,0,0,0 //PR_KYRIE#Kyrie Eleison#
+4057,74,5,0,0,0,0,0,0,0,0,0,0 //PR_MAGNIFICAT#Magnificat#
+4057,75,5,73,4,74,3,0,0,0,0,0,0 //PR_GLORIA#Gloria#
+4057,76,10,24,1,0,0,0,0,0,0,0,0 //PR_LEXDIVINA#Lex Divina#
+4057,77,10,54,1,76,3,0,0,0,0,0,0 //PR_TURNUNDEAD#Turn Undead#
+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,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#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#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#
+//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,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#
+4058,153,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTREVOLUTION#Cart Revolution#
+4058,154,1,0,0,0,0,0,0,0,0,0,0 //MC_CHANGECART#Change Cart#
+4058,155,1,0,0,0,0,0,0,0,0,0,0 //MC_LOUD#Crazy Uproar#
+4058,94,5,0,0,0,0,0,0,0,0,0,0 //BS_IRON#Iron Tempering#
+4058,95,5,94,1,0,0,0,0,0,0,0,0 //BS_STEEL#Steel Tempering#
+4058,96,5,94,1,0,0,0,0,0,0,0,0 //BS_ENCHANTEDSTONE#Enchanted Stone Craft#
+4058,97,5,96,1,0,0,0,0,0,0,0,0 //BS_ORIDEOCON#Oridecon Research#
+4058,98,3,0,0,0,0,0,0,0,0,0,0 //BS_DAGGER#Smith Dagger#
+4058,99,3,98,1,0,0,0,0,0,0,0,0 //BS_SWORD#Smith Sword#
+4058,100,3,99,1,0,0,0,0,0,0,0,0 //BS_TWOHANDSWORD#Smith Two-handed Sword#
+4058,101,3,99,2,0,0,0,0,0,0,0,0 //BS_AXE#Smith Axe#
+4058,102,3,103,1,0,0,0,0,0,0,0,0 //BS_MACE#Smith Mace#
+4058,103,3,98,1,0,0,0,0,0,0,0,0 //BS_KNUCKLE#Smith Knucklebrace#
+4058,104,3,98,2,0,0,0,0,0,0,0,0 //BS_SPEAR#Smith Spear#
+4058,105,1,0,0,0,0,0,0,0,0,0,0 //BS_HILTBINDING#Hilt Binding#
+4058,106,1,95,1,105,1,0,0,0,0,0,0 //BS_FINDINGORE#Ore Discovery#
+4058,107,10,105,1,0,0,0,0,0,0,0,0 //BS_WEAPONRESEARCH#Weaponry Research#
+4058,108,1,107,1,0,0,0,0,0,0,0,0 //BS_REPAIRWEAPON#Weapon Repair#
+4058,109,5,0,0,0,0,0,0,0,0,0,0 //BS_SKINTEMPER#Skin Tempering#
+4058,110,5,0,0,0,0,0,0,0,0,0,0 //BS_HAMMERFALL#Hammer Fall#
+4058,111,5,110,2,0,0,0,0,0,0,0,0 //BS_ADRENALINE#Adrenaline Rush#
+4058,112,5,107,2,111,2,0,0,0,0,0,0 //BS_WEAPONPERFECT#Weapon Perfection#
+4058,113,5,111,3,0,0,0,0,0,0,0,0 //BS_OVERTHRUST#Power-Thrust#
+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,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,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#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#Neutral Barrier#
+4058,2274,3,2271,3,2273,2,0,0,0,0,0,0 //NC_STEALTHFIELD#Stealth Field#
+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,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 (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#
+4059,49,10,0,0,0,0,0,0,0,0,0,0 //TF_MISS#Improve Dodge#
+4059,50,10,0,0,0,0,0,0,0,0,0,0 //TF_STEAL#Steal#
+4059,51,10,50,5,0,0,0,0,0,0,0,0 //TF_HIDING#Hiding#
+4059,52,10,0,0,0,0,0,0,0,0,0,0 //TF_POISON#Envenom#
+4059,53,1,52,3,0,0,0,0,0,0,0,0 //TF_DETOXIFY#Detoxify#
+4059,149,1,0,0,0,0,0,0,0,0,0,0 //TF_SPRINKLESAND#Throw Sand#
+4059,150,1,0,0,0,0,0,0,0,0,0,0 //TF_BACKSLIDING#Back Sliding#
+4059,151,1,0,0,0,0,0,0,0,0,0,0 //TF_PICKSTONE#Find Stone#
+4059,152,1,0,0,0,0,0,0,0,0,0,0 //TF_THROWSTONE#Stone Fling#
+4059,132,5,0,0,0,0,0,0,0,0,0,0 //AS_RIGHT#Righthand Mastery#
+4059,133,5,132,2,0,0,0,0,0,0,0,0 //AS_LEFT#Lefthand Mastery#
+4059,134,10,0,0,0,0,0,0,0,0,0,0 //AS_KATAR#Katar Mastery#
+4059,135,10,51,2,0,0,0,0,0,0,0,0 //AS_CLOAKING#Cloaking#
+4059,136,10,134,4,0,0,0,0,0,0,0,0 //AS_SONICBLOW#Sonic Blow#
+4059,137,5,135,2,136,5,0,0,0,0,0,0 //AS_GRIMTOOTH#Grimtooth#
+4059,138,10,52,1,0,0,0,0,0,0,0,0 //AS_ENCHANTPOISON#Enchant Poison#
+4059,139,10,138,3,0,0,0,0,0,0,0,0 //AS_POISONREACT#Poison React#
+4059,140,10,138,5,0,0,0,0,0,0,0,0 //AS_VENOMDUST#Venom Dust#
+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,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_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#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#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#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#
+//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#
+4060,3,10,2,1,0,0,0,0,0,0,0,0 //SM_TWOHAND#Two-Handed Sword Mastery#
+4060,4,10,0,0,0,0,0,0,0,0,0,0 //SM_RECOVERY#Increase HP Recovery#
+4060,5,10,0,0,0,0,0,0,0,0,0,0 //SM_BASH#Bash#
+4060,6,10,0,0,0,0,0,0,0,0,0,0 //SM_PROVOKE#Provoke#
+4060,7,10,5,5,0,0,0,0,0,0,0,0 //SM_MAGNUM#Magnum Break#
+4060,8,10,6,5,0,0,0,0,0,0,0,0 //SM_ENDURE#Endure#
+4060,144,1,0,0,0,0,0,0,0,0,0,0 //SM_MOVINGRECOVERY#Moving HP-Recovery#
+4060,145,1,0,0,0,0,0,0,0,0,0,0 //SM_FATALBLOW#Attack Weak Point#
+4060,146,1,0,0,0,0,0,0,0,0,0,0 //SM_AUTOBERSERK#Auto Berserk#
+4060,55,10,0,0,0,0,0,0,0,0,0,0 //KN_SPEARMASTERY#Spear Mastery#
+4060,56,10,55,1,0,0,0,0,0,0,0,0 //KN_PIERCE#Pierce#
+4060,57,10,63,1,58,3,0,0,0,0,0,0 //KN_BRANDISHSPEAR#Brandish Spear#
+4060,58,10,56,5,0,0,0,0,0,0,0,0 //KN_SPEARSTAB#Spear Stab#
+4060,59,5,56,3,0,0,0,0,0,0,0,0 //KN_SPEARBOOMERANG#Spear Boomerang#
+4060,60,10,3,1,0,0,0,0,0,0,0,0 //KN_TWOHANDQUICKEN#Twohand Quicken#
+4060,61,5,3,1,0,0,0,0,0,0,0,0 //KN_AUTOCOUNTER#Counter Attack#
+4060,62,10,5,10,7,3,3,5,60,10,61,5//KN_BOWLINGBASH#Bowling Bash#
+4060,63,1,8,1,0,0,0,0,0,0,0,0 //KN_RIDING#Peco Peco Riding#
+4060,64,5,63,1,0,0,0,0,0,0,0,0 //KN_CAVALIERMASTERY#Cavalier Mastery#
+4060,1001,1,0,0,0,0,0,0,0,0,0,0 //KN_CHARGEATK#Charge Attack#
+4060,355,5,5,5,7,5,3,5,0,0,0,0 //LK_AURABLADE#Aura Blade#
+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,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,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 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#
+4060,2008,10,2007,2,0,0,0,0,0,0,0,0 //RK_DRAGONBREATH#Dragon Breath#
+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#
+//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#
+4061,10,1,0,0,0,0,0,0,0,0,0,0 //MG_SIGHT#Sight#
+4061,11,10,0,0,0,0,0,0,0,0,0,0 //MG_NAPALMBEAT#Napalm Beat#
+4061,12,10,11,7,13,5,0,0,0,0,0,0 //MG_SAFETYWALL#Safety Wall#
+4061,13,10,11,4,0,0,0,0,0,0,0,0 //MG_SOULSTRIKE#Soul Strike#
+4061,14,10,0,0,0,0,0,0,0,0,0,0 //MG_COLDBOLT#Cold Bolt#
+4061,15,10,14,5,0,0,0,0,0,0,0,0 //MG_FROSTDIVER#Frost Diver#
+4061,16,10,0,0,0,0,0,0,0,0,0,0 //MG_STONECURSE#Stone Curse#
+4061,17,10,19,4,0,0,0,0,0,0,0,0 //MG_FIREBALL#Fire Ball#
+4061,18,10,17,5,10,1,0,0,0,0,0,0 //MG_FIREWALL#Fire Wall#
+4061,19,10,0,0,0,0,0,0,0,0,0,0 //MG_FIREBOLT#Fire Bolt#
+4061,20,10,0,0,0,0,0,0,0,0,0,0 //MG_LIGHTNINGBOLT#Lightning Bolt#
+4061,21,10,20,4,0,0,0,0,0,0,0,0 //MG_THUNDERSTORM#Thunderstorm#
+4061,157,1,0,0,0,0,0,0,0,0,0,0 //MG_ENERGYCOAT#Energy Coat#
+4061,80,10,18,1,0,0,0,0,0,0,0,0 //WZ_FIREPILLAR#Fire Pillar#
+4061,81,10,20,1,10,1,0,0,0,0,0,0 //WZ_SIGHTRASHER#Sightrasher#
+4061,83,10,81,2,21,1,0,0,0,0,0,0 //WZ_METEOR#Meteor Storm#
+4061,84,10,11,1,20,1,0,0,0,0,0,0 //WZ_JUPITEL#Jupiter Thunder#
+4061,85,10,21,1,84,5,0,0,0,0,0,0 //WZ_VERMILION#Lord of Vermilion#
+4061,86,5,14,1,20,1,0,0,0,0,0,0 //WZ_WATERBALL#Water Ball#
+4061,87,10,16,1,15,1,0,0,0,0,0,0 //WZ_ICEWALL#Ice Wall#
+4061,88,10,87,1,0,0,0,0,0,0,0,0 //WZ_FROSTNOVA#Frost Nova#
+4061,89,10,15,1,84,3,0,0,0,0,0,0 //WZ_STORMGUST#Storm Gust#
+4061,90,5,16,1,0,0,0,0,0,0,0,0 //WZ_EARTHSPIKE#Earth Spike#
+4061,91,5,90,3,0,0,0,0,0,0,0,0 //WZ_HEAVENDRIVE#Heaven's Drive#
+4061,92,5,91,1,0,0,0,0,0,0,0,0 //WZ_QUAGMIRE#Quagmire#
+4061,93,1,0,0,0,0,0,0,0,0,0,0 //WZ_ESTIMATION#Sense#
+4061,1006,1,0,0,0,0,0,0,0,0,0,0 //WZ_SIGHTBLASTER#Sight Blaster#
+4061,364,10,9,5,13,7,0,0,0,0,0,0 //HW_SOULDRAIN#Soul Drain#
+4061,365,1,9,1,0,0,0,0,0,0,0,0 //HW_MAGICCRASHER#Stave Crasher#
+4061,366,10,0,0,0,0,0,0,0,0,0,0 //HW_MAGICPOWER#Mystical Amplification#
+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#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,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,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#
+4061,2213,5,2212,3,0,0,0,0,0,0,0,0 //WL_COMET#Comet#
+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#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 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#
+4062,44,10,43,3,0,0,0,0,0,0,0,0 //AC_VULTURE#Vulture's Eye#
+4062,45,10,44,1,0,0,0,0,0,0,0,0 //AC_CONCENTRATION#Improve Concentration#
+4062,46,10,0,0,0,0,0,0,0,0,0,0 //AC_DOUBLE#Double Strafe#
+4062,47,10,46,5,0,0,0,0,0,0,0,0 //AC_SHOWER#Arrow Shower#
+4062,147,1,0,0,0,0,0,0,0,0,0,0 //AC_MAKINGARROW#Arrow Crafting#
+4062,148,1,0,0,0,0,0,0,0,0,0,0 //AC_CHARGEARROW#Arrow Repel#
+4062,115,5,0,0,0,0,0,0,0,0,0,0 //HT_SKIDTRAP#Skid Trap#
+4062,116,5,0,0,0,0,0,0,0,0,0,0 //HT_LANDMINE#Land Mine#
+4062,117,5,115,1,0,0,0,0,0,0,0,0 //HT_ANKLESNARE#Ankle Snare#
+4062,118,5,117,1,0,0,0,0,0,0,0,0 //HT_SHOCKWAVE#Shockwave Trap#
+4062,119,5,120,1,0,0,0,0,0,0,0,0 //HT_SANDMAN#Sandman#
+4062,120,5,115,1,0,0,0,0,0,0,0,0 //HT_FLASHER#Flasher#
+4062,121,5,120,1,0,0,0,0,0,0,0,0 //HT_FREEZINGTRAP#Freezing Trap#
+4062,122,5,116,1,119,1,121,1,0,0,0,0 //HT_BLASTMINE#Blast Mine#
+4062,123,5,118,1,122,1,0,0,0,0,0,0 //HT_CLAYMORETRAP#Claymore Trap#
+4062,124,1,116,1,0,0,0,0,0,0,0,0 //HT_REMOVETRAP#Remove Trap#
+4062,125,1,118,1,124,1,0,0,0,0,0,0 //HT_TALKIEBOX#Talkie Box#
+4062,126,10,0,0,0,0,0,0,0,0,0,0 //HT_BEASTBANE#Beast Bane#
+4062,127,1,126,1,0,0,0,0,0,0,0,0 //HT_FALCON#Falconry Mastery#
+4062,128,10,129,5,0,0,0,0,0,0,0,0 //HT_STEELCROW#Steel Crow#
+4062,129,5,127,1,0,0,0,0,0,0,0,0 //HT_BLITZBEAT#Blitz Beat#
+4062,130,4,45,1,127,1,0,0,0,0,0,0 //HT_DETECTING#Detect#
+4062,131,5,124,1,127,1,0,0,0,0,0,0 //HT_SPRINGTRAP#Spring Trap#
+4062,1009,1,0,0,0,0,0,0,0,0,0,0 //HT_PHANTASMIC#Phantasmic Arrow#
+4062,380,10,43,10,44,10,45,10,127,1,0,0 //SN_SIGHT#Falcon Eyes#
+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,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#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 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#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#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#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#
+4063,23,10,22,3,0,0,0,0,0,0,0,0 //AL_DEMONBANE#Demon Bane#
+4063,24,1,0,0,0,0,0,0,0,0,0,0 //AL_RUWACH#Ruwach#
+4063,25,1,27,4,0,0,0,0,0,0,0,0 //AL_PNEUMA#Pneuma#
+4063,26,2,24,1,0,0,0,0,0,0,0,0 //AL_TELEPORT#Teleport#
+4063,27,4,26,2,0,0,0,0,0,0,0,0 //AL_WARP#Warp Portal#
+4063,28,10,0,0,0,0,0,0,0,0,0,0 //AL_HEAL#Heal#
+4063,29,10,28,3,0,0,0,0,0,0,0,0 //AL_INCAGI#Increase AGI#
+4063,30,10,29,1,0,0,0,0,0,0,0,0 //AL_DECAGI#Decrease AGI#
+4063,31,1,0,0,0,0,0,0,0,0,0,0 //AL_HOLYWATER#Aqua Benedicta#
+4063,32,10,23,3,0,0,0,0,0,0,0,0 //AL_CRUCIS#Signum Crusis#
+4063,33,10,22,3,0,0,0,0,0,0,0,0 //AL_ANGELUS#Angelus#
+4063,34,10,22,5,0,0,0,0,0,0,0,0 //AL_BLESSING#Blessing#
+4063,35,1,28,2,0,0,0,0,0,0,0,0 //AL_CURE#Cure#
+4063,156,1,0,0,0,0,0,0,0,0,0,0 //AL_HOLYLIGHT#Holy Light#
+4063,9,10,0,0,0,0,0,0,0,0,0,0 //MG_SRECOVERY#Increase SP Recovery#
+4063,12,10,68,4,70,3,0,0,0,0,0,0 //MG_SAFETYWALL#Safety Wall#
+4063,54,4,72,1,9,4,0,0,0,0,0,0 //ALL_RESURRECTION#Resurrection#
+4063,65,10,0,0,0,0,0,0,0,0,0,0 //PR_MACEMASTERY#Mace Mastery#
+4063,66,5,0,0,0,0,0,0,0,0,0,0 //PR_IMPOSITIO#Impositio Manus#
+4063,67,3,66,2,0,0,0,0,0,0,0,0 //PR_SUFFRAGIUM#Suffragium#
+4063,68,5,31,1,66,3,0,0,0,0,0,0 //PR_ASPERSIO#Aspersio#
+4063,69,5,75,3,68,5,0,0,0,0,0,0 //PR_BENEDICTIO#B.S Sacramenti#
+4063,70,10,28,1,0,0,0,0,0,0,0,0 //PR_SANCTUARY#Sanctuary#
+4063,71,4,72,1,0,0,0,0,0,0,0,0 //PR_SLOWPOISON#Slow Poison#
+4063,72,1,0,0,0,0,0,0,0,0,0,0 //PR_STRECOVERY#Status Recovery#
+4063,73,10,33,2,0,0,0,0,0,0,0,0 //PR_KYRIE#Kyrie Eleison#
+4063,74,5,0,0,0,0,0,0,0,0,0,0 //PR_MAGNIFICAT#Magnificat#
+4063,75,5,73,4,74,3,0,0,0,0,0,0 //PR_GLORIA#Gloria#
+4063,76,10,24,1,0,0,0,0,0,0,0,0 //PR_LEXDIVINA#Lex Divina#
+4063,77,10,54,1,76,3,0,0,0,0,0,0 //PR_TURNUNDEAD#Turn Undead#
+4063,78,1,76,5,0,0,0,0,0,0,0,0 //PR_LEXAETERNA#Lex Aeterna#
+4063,79,10,12,1,78,1,77,3,0,0,0,0 //PR_MAGNUS#Magnus Exorcismus#
+4063,1014,1,0,0,0,0,0,0,0,0,0,0 //PR_REDEMPTIO#Redemptio#
+4063,361,5,33,1,9,3,66,3,0,0,0,0 //HP_ASSUMPTIO#Assumptio#
+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,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#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#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#
+//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#
+4064,37,10,36,3,0,0,0,0,0,0,0,0 //MC_DISCOUNT#Discount#
+4064,38,10,37,3,0,0,0,0,0,0,0,0 //MC_OVERCHARGE#Overcharge#
+4064,39,10,36,5,0,0,0,0,0,0,0,0 //MC_PUSHCART#Pushcart#
+4064,40,1,0,0,0,0,0,0,0,0,0,0 //MC_IDENTIFY#Item Appraisal#
+4064,41,10,39,3,0,0,0,0,0,0,0,0 //MC_VENDING#Vending#
+4064,42,10,0,0,0,0,0,0,0,0,0,0 //MC_MAMMONITE#Mammonite#
+4064,153,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTREVOLUTION#Cart Revolution#
+4064,154,1,0,0,0,0,0,0,0,0,0,0 //MC_CHANGECART#Change Cart#
+4064,155,1,0,0,0,0,0,0,0,0,0,0 //MC_LOUD#Crazy Uproar#
+4064,94,5,0,0,0,0,0,0,0,0,0,0 //BS_IRON#Iron Tempering#
+4064,95,5,94,1,0,0,0,0,0,0,0,0 //BS_STEEL#Steel Tempering#
+4064,96,5,94,1,0,0,0,0,0,0,0,0 //BS_ENCHANTEDSTONE#Enchanted Stone Craft#
+4064,97,5,96,1,0,0,0,0,0,0,0,0 //BS_ORIDEOCON#Oridecon Research#
+4064,98,3,0,0,0,0,0,0,0,0,0,0 //BS_DAGGER#Smith Dagger#
+4064,99,3,98,1,0,0,0,0,0,0,0,0 //BS_SWORD#Smith Sword#
+4064,100,3,99,1,0,0,0,0,0,0,0,0 //BS_TWOHANDSWORD#Smith Two-handed Sword#
+4064,101,3,99,2,0,0,0,0,0,0,0,0 //BS_AXE#Smith Axe#
+4064,102,3,103,1,0,0,0,0,0,0,0,0 //BS_MACE#Smith Mace#
+4064,103,3,98,1,0,0,0,0,0,0,0,0 //BS_KNUCKLE#Smith Knucklebrace#
+4064,104,3,98,2,0,0,0,0,0,0,0,0 //BS_SPEAR#Smith Spear#
+4064,105,1,0,0,0,0,0,0,0,0,0,0 //BS_HILTBINDING#Hilt Binding#
+4064,106,1,95,1,105,1,0,0,0,0,0,0 //BS_FINDINGORE#Ore Discovery#
+4064,107,10,105,1,0,0,0,0,0,0,0,0 //BS_WEAPONRESEARCH#Weaponry Research#
+4064,108,1,107,1,0,0,0,0,0,0,0,0 //BS_REPAIRWEAPON#Weapon Repair#
+4064,109,5,0,0,0,0,0,0,0,0,0,0 //BS_SKINTEMPER#Skin Tempering#
+4064,110,5,0,0,0,0,0,0,0,0,0,0 //BS_HAMMERFALL#Hammer Fall#
+4064,111,5,110,2,0,0,0,0,0,0,0,0 //BS_ADRENALINE#Adrenaline Rush#
+4064,112,5,107,2,111,2,0,0,0,0,0,0 //BS_WEAPONPERFECT#Weapon Perfection#
+4064,113,5,111,3,0,0,0,0,0,0,0,0 //BS_OVERTHRUST#Power-Thrust#
+4064,114,5,112,3,113,2,0,0,0,0,0,0 //BS_MAXIMIZE#Maximize Power#
+4064,1012,1,0,0,0,0,0,0,0,0,0,0 //BS_UNFAIRLYTRICK#Unfair Trick#
+4064,1013,1,0,0,0,0,0,0,0,0,0,0 //BS_GREED#Greed#
+4064,384,10,109,3,105,1,107,5,113,3,0,0 //WS_MELTDOWN#Shattering Strike#
+4064,387,1,39,5,153,1,154,1,105,1,0,0 //WS_CARTBOOST#Cart Boost#
+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,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,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#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#Neutral Barrier#
+4064,2274,3,2271,3,2273,2,0,0,0,0,0,0 //NC_STEALTHFIELD#Stealth Field#
+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,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 (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#
+4065,49,10,0,0,0,0,0,0,0,0,0,0 //TF_MISS#Improve Dodge#
+4065,50,10,0,0,0,0,0,0,0,0,0,0 //TF_STEAL#Steal#
+4065,51,10,50,5,0,0,0,0,0,0,0,0 //TF_HIDING#Hiding#
+4065,52,10,0,0,0,0,0,0,0,0,0,0 //TF_POISON#Envenom#
+4065,53,1,52,3,0,0,0,0,0,0,0,0 //TF_DETOXIFY#Detoxify#
+4065,149,1,0,0,0,0,0,0,0,0,0,0 //TF_SPRINKLESAND#Throw Sand#
+4065,150,1,0,0,0,0,0,0,0,0,0,0 //TF_BACKSLIDING#Back Sliding#
+4065,151,1,0,0,0,0,0,0,0,0,0,0 //TF_PICKSTONE#Find Stone#
+4065,152,1,0,0,0,0,0,0,0,0,0,0 //TF_THROWSTONE#Stone Fling#
+4065,132,5,0,0,0,0,0,0,0,0,0,0 //AS_RIGHT#Righthand Mastery#
+4065,133,5,132,2,0,0,0,0,0,0,0,0 //AS_LEFT#Lefthand Mastery#
+4065,134,10,0,0,0,0,0,0,0,0,0,0 //AS_KATAR#Katar Mastery#
+4065,135,10,51,2,0,0,0,0,0,0,0,0 //AS_CLOAKING#Cloaking#
+4065,136,10,134,4,0,0,0,0,0,0,0,0 //AS_SONICBLOW#Sonic Blow#
+4065,137,5,135,2,136,5,0,0,0,0,0,0 //AS_GRIMTOOTH#Grimtooth#
+4065,138,10,52,1,0,0,0,0,0,0,0,0 //AS_ENCHANTPOISON#Enchant Poison#
+4065,139,10,138,3,0,0,0,0,0,0,0,0 //AS_POISONREACT#Poison React#
+4065,140,10,138,5,0,0,0,0,0,0,0,0 //AS_VENOMDUST#Venom Dust#
+4065,141,10,139,5,140,5,0,0,0,0,0,0 //AS_SPLASHER#Venom Splasher#
+4065,1003,1,0,0,0,0,0,0,0,0,0,0 //AS_SONICACCEL#Sonic Acceleration#
+4065,1004,1,0,0,0,0,0,0,0,0,0,0 //AS_VENOMKNIFE#Throw Venom Knife#
+4065,376,5,48,5,134,7,0,0,0,0,0,0 //ASC_KATAR#Advanced Katar Mastery#
+4065,378,5,407,1,0,0,0,0,0,0,0,0 //ASC_EDP#Deadly Poison Enchantment#
+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,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_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#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#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# \ No newline at end of file
diff --git a/db/skill_unit_db.txt b/db/skill_unit_db.txt
index 244f56ab0..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,6 +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,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..ee3a0c323
--- /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_renewal.txt b/db/statpoint_renewal.txt
new file mode 100644
index 000000000..cd876c4cd
--- /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 \ No newline at end of file
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..28b4f451e
--- /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/common/mmo.h b/src/common/mmo.h
index 239e1dddd..f8ef63390 100644
--- a/src/common/mmo.h
+++ b/src/common/mmo.h
@@ -44,8 +44,8 @@
// 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
@@ -176,6 +176,7 @@ enum item_types {
IT_UNKNOWN2,//9
IT_AMMO, //10
IT_DELAYCONSUME,//11
+ IT_THROWWEAPON= 17,//17
IT_CASH = 18,
IT_MAX
};
@@ -646,6 +647,56 @@ enum {
JOB_STAR_GLADIATOR,
JOB_STAR_GLADIATOR2,
JOB_SOUL_LINKER,
+ /**
+ * 3.1 (2.1)
+ **/
+ JOB_RUNE_KNIGHT = 4054,
+ JOB_WARLOCK,
+ JOB_RANGER,
+ JOB_ARCH_BISHOP,
+ JOB_MECHANIC,
+ JOB_GUILLOTINE_CROSS,
+ /**
+ * 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,
+ JOB_WANDERER,
+ JOB_SURA,
+ JOB_GENETIC,
+ JOB_SHADOW_CHASER,
+ /**
+ * 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_T2,
+ JOB_ROYAL_GUARD2,
+ JOB_ROYAL_GUARD_T2,
+ JOB_RANGER2,
+ JOB_RANGER_T2,
+ JOB_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/map/Makefile.in b/src/map/Makefile.in
index 09e92dde2..60fc49f7c 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 \
+ RRConfig/Core.h RRConfig/Renewal.h RRConfig/Secure.h RRConfig/Data/Const.h \
+ RRConfig/Skills/General.h RRConfig/Skills/Mage_Classes.h RRConfig/Skills/Swordsman_Classes.h
HAVE_MYSQL=@HAVE_MYSQL@
ifeq ($(HAVE_MYSQL),yes)
diff --git a/src/map/RRConfig/Core.h b/src/map/RRConfig/Core.h
new file mode 100644
index 000000000..9cb161a3f
--- /dev/null
+++ b/src/map/RRConfig/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/RRConfig/Data/Const.h b/src/map/RRConfig/Data/Const.h
new file mode 100644
index 000000000..6da8cdf13
--- /dev/null
+++ b/src/map/RRConfig/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 \ No newline at end of file
diff --git a/src/map/RRConfig/Renewal.h b/src/map/RRConfig/Renewal.h
new file mode 100644
index 000000000..db5a99008
--- /dev/null
+++ b/src/map/RRConfig/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/RRConfig/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 \ No newline at end of file
diff --git a/src/map/RRConfig/Secure.h b/src/map/RRConfig/Secure.h
new file mode 100644
index 000000000..1288b259f
--- /dev/null
+++ b/src/map/RRConfig/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 \ No newline at end of file
diff --git a/src/map/RRConfig/Skills/General.h b/src/map/RRConfig/Skills/General.h
new file mode 100644
index 000000000..5944d6844
--- /dev/null
+++ b/src/map/RRConfig/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/RRConfig/Skills/Mage_Classes.h b/src/map/RRConfig/Skills/Mage_Classes.h
new file mode 100644
index 000000000..cf0777787
--- /dev/null
+++ b/src/map/RRConfig/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/RRConfig/Skills/Swordsman_Classes.h b/src/map/RRConfig/Skills/Swordsman_Classes.h
new file mode 100644
index 000000000..4dddeec54
--- /dev/null
+++ b/src/map/RRConfig/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/atcommand.c b/src/map/atcommand.c
index e98481f22..e87074883 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[16]; int id; } jobs[] = {
+ const struct { char name[24]; int id; } jobs[] = {
{ "novice", 0 },
{ "swordsman", 1 },
{ "mage", 2 },
@@ -1330,6 +1330,32 @@ ACMD_FUNC(jobchange)
{ "taekwon girl", 4046 },
{ "star gladiator", 4047 },
{ "soul linker", 4049 },
+ { "rune knight", 4054 },
+ { "warlock", 4055 },
+ { "ranger", 4056 },
+ { "arch bishop", 4057 },
+ { "mechanic", 4058 },
+ { "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 },
+ { "genetic", 4071 },
+ { "shadow chaser", 4072 },
+ { "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++) {
@@ -1343,28 +1369,56 @@ ACMD_FUNC(jobchange)
if (!found) {
clif_displaymessage(fd, "Please, enter job ID (usage: @job/@jobchange <job name/ID>).");
- clif_displaymessage(fd, " 0 Novice 7 Knight 14 Crusader 21 N/A");
- clif_displaymessage(fd, " 1 Swordman 8 Priest 15 Monk 22 N/A");
- clif_displaymessage(fd, " 2 Mage 9 Wizard 16 Sage 23 Super Novice");
- clif_displaymessage(fd, " 3 Archer 10 Blacksmith 17 Rogue 24 Gunslinger");
- clif_displaymessage(fd, " 4 Acolyte 11 Hunter 18 Alchemist 25 Ninja");
- clif_displaymessage(fd, " 5 Merchant 12 Assassin 19 Bard 26 N/A");
- clif_displaymessage(fd, " 6 Thief 13 N/A 20 Dancer 27 N/A");
- clif_displaymessage(fd, "4001 Novice High 4008 Lord Knight 4015 Paladin 4022 N/A");
- clif_displaymessage(fd, "4002 Swordman High 4009 High Priest 4016 Champion");
- clif_displaymessage(fd, "4003 Mage High 4010 High Wizard 4017 Professor");
- clif_displaymessage(fd, "4004 Archer High 4011 Whitesmith 4018 Stalker");
- clif_displaymessage(fd, "4005 Acolyte High 4012 Sniper 4019 Creator");
- clif_displaymessage(fd, "4006 Merchant High 4013 Assassin Cross 4020 Clown");
- clif_displaymessage(fd, "4007 Thief High 4014 N/A 4021 Gypsy");
- clif_displaymessage(fd, "4023 Baby Novice 4030 Baby Knight 4037 Baby Crusader 4044 N/A");
- clif_displaymessage(fd, "4024 Baby Swordsman 4031 Baby Priest 4038 Baby Monk 4045 Super Baby");
- clif_displaymessage(fd, "4025 Baby Mage 4032 Baby Wizard 4039 Baby Sage 4046 Taekwon Kid");
- clif_displaymessage(fd, "4026 Baby Archer 4033 Baby Blacksmith 4040 Baby Rogue 4047 Taekwon Master");
- clif_displaymessage(fd, "4027 Baby Acolyte 4034 Baby Hunter 4041 Baby Alchemist 4048 N/A");
- clif_displaymessage(fd, "4028 Baby Merchant 4035 Baby Assassin 4042 Baby Bard 4049 Soul Linker");
- clif_displaymessage(fd, "4029 Baby Thief 4036 N/A 4043 Baby Dancer");
- 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;
}
}
@@ -1384,28 +1438,56 @@ ACMD_FUNC(jobchange)
}
} else {
clif_displaymessage(fd, "Please, enter job ID (usage: @job/@jobchange <job name/ID>).");
- clif_displaymessage(fd, " 0 Novice 7 Knight 14 Crusader 21 N/A");
- clif_displaymessage(fd, " 1 Swordman 8 Priest 15 Monk 22 N/A");
- clif_displaymessage(fd, " 2 Mage 9 Wizard 16 Sage 23 Super Novice");
- clif_displaymessage(fd, " 3 Archer 10 Blacksmith 17 Rogue 24 Gunslinger");
- clif_displaymessage(fd, " 4 Acolyte 11 Hunter 18 Alchemist 25 Ninja");
- clif_displaymessage(fd, " 5 Merchant 12 Assassin 19 Bard 26 N/A");
- clif_displaymessage(fd, " 6 Thief 13 N/A 20 Dancer 27 N/A");
- clif_displaymessage(fd, "4001 Novice High 4008 Lord Knight 4015 Paladin 4022 N/A");
- clif_displaymessage(fd, "4002 Swordman High 4009 High Priest 4016 Champion");
- clif_displaymessage(fd, "4003 Mage High 4010 High Wizard 4017 Professor");
- clif_displaymessage(fd, "4004 Archer High 4011 Whitesmith 4018 Stalker");
- clif_displaymessage(fd, "4005 Acolyte High 4012 Sniper 4019 Creator");
- clif_displaymessage(fd, "4006 Merchant High 4013 Assassin Cross 4020 Clown");
- clif_displaymessage(fd, "4007 Thief High 4014 N/A 4021 Gypsy");
- clif_displaymessage(fd, "4023 Baby Novice 4030 Baby Knight 4037 Baby Crusader 4044 N/A");
- clif_displaymessage(fd, "4024 Baby Swordsman 4031 Baby Priest 4038 Baby Monk 4045 Super Baby");
- clif_displaymessage(fd, "4025 Baby Mage 4032 Baby Wizard 4039 Baby Sage 4046 Taekwon Kid");
- clif_displaymessage(fd, "4026 Baby Archer 4033 Baby Blacksmith 4040 Baby Rogue 4047 Taekwon Master");
- clif_displaymessage(fd, "4027 Baby Acolyte 4034 Baby Hunter 4041 Baby Alchemist 4048 N/A");
- clif_displaymessage(fd, "4028 Baby Merchant 4035 Baby Assassin 4042 Baby Bard 4049 Soul Linker");
- clif_displaymessage(fd, "4029 Baby Thief 4036 N/A 4043 Baby Dancer");
- 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;
}
@@ -2842,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;
}
@@ -4395,8 +4477,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);
@@ -4510,7 +4595,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))
{
@@ -6117,24 +6221,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.
@@ -6273,7 +6379,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;
@@ -7763,13 +7872,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;
}
@@ -8581,8 +8749,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
*------------------------------------------*/
@@ -8885,6 +9062,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 },
};
@@ -9025,9 +9206,12 @@ 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;
}
//Attempt to use the command
diff --git a/src/map/battle.c b/src/map/battle.c
index b9a408a84..556b51bbd 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)
{
@@ -316,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 )
{
@@ -334,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;
@@ -487,6 +545,14 @@ 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;
@@ -539,6 +605,8 @@ 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)
@@ -720,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);
@@ -755,11 +829,15 @@ int battle_addmastery(struct map_session_data *sd,struct block_list *target,int
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)
@@ -1278,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
@@ -1727,6 +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: {
+ int level = status_get_lv(src);
+ skillratio += 400 + 100 * skill_lv;
+ if( level > 100 )
+ skillratio += skillratio * (level - 100) / 200;
+ }
+ break;
+ case RK_HUNDREDSPEAR: {
+ int level = status_get_lv(src);
+ skillratio += 500 + 40 * skill_lv;
+ if( level > 100 )
+ skillratio += skillratio * (level - 100) / 200;
+ }
+ break;
+ 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 < 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 = sstatus->rhw.atk + 100 * sd->inventory_data[index]->wlv * (sd->status.inventory[index].refine + 6);
+ }
+ break;
+ case RK_STORMBLAST:
+ skillratio = 100 * (sd ? pc_checkskill(sd,RK_RUNEMASTERY) : 1) + 100 * (sstatus->int_ / 4);
+ break;
+ case RK_PHANTOMTHRUST:
+ 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);
@@ -1755,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.
@@ -1764,13 +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)
ATK_ADDRATE(sc->data[SC_EDP]->val3);
+ #endif
}
switch (skill_num) {
@@ -1787,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 )
@@ -1881,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);
@@ -2293,20 +2549,34 @@ 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;
}
-
- //SG_FUSION hp penalty [Komurka]
- if (sc && sc->data[SC_FUSION])
- {
- int hp= sstatus->max_hp;
- if (sd && tsd) {
- hp = 8*hp/100;
- if (100*sstatus->hp <= 20*sstatus->max_hp)
- hp = sstatus->hp;
- } else
- hp = 2*hp/100; //2% hp loss per hit
- status_zap(src, hp, 0);
+ if( sc ) {
+ //SG_FUSION hp penalty [Komurka]
+ if (sc->data[SC_FUSION])
+ {
+ int hp= sstatus->max_hp;
+ if (sd && tsd) {
+ hp = 8*hp/100;
+ if (100*sstatus->hp <= 20*sstatus->max_hp)
+ hp = sstatus->hp;
+ } else
+ hp = 2*hp/100; //2% hp loss per hit
+ status_zap(src, hp, 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;
}
@@ -2398,6 +2668,10 @@ 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;
case PR_ASPERSIO:
@@ -2417,14 +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.
+ **/
+ MATK_ADD(sstatus->matk_max * 2 + 15/10 * sstatus->matk_min + rand()% ( sstatus->matk_max + (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;
@@ -2470,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;
@@ -2513,6 +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 += 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 += 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 += 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);
@@ -2550,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)
@@ -2805,6 +3297,32 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
case NPC_EVILLAND:
md.damage = skill_calc_heal(src,target,skill_num,skill_lv,false);
break;
+ case RK_DRAGONBREATH:
+ 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
@@ -2906,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;
@@ -2943,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);
@@ -2959,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)
@@ -3165,7 +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 )
{
- rdamage = battle_calc_return_damage(target, damage, wd.flag);
+ 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);
+ }
+
+ 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);
@@ -3373,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;
@@ -4023,6 +4579,10 @@ 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, },
+ /**
+ * RR-Specific
+ **/
+ { "max_third_parameter", &battle_config.max_third_parameter, 20, 0, INT_MAX, },
};
diff --git a/src/map/battle.h b/src/map/battle.h
index 007499afe..a64c81041 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);
@@ -497,6 +497,8 @@ extern struct Battle_Config
int bg_magic_damage_rate;
int bg_misc_damage_rate;
int bg_flee_penalty;
+ //[RR]
+ int max_third_parameter;
} battle_config;
void do_init_battle(void);
@@ -507,4 +509,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/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 da2abe0f3..780b1af56 100644
--- a/src/map/clif.c
+++ b/src/map/clif.c
@@ -154,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)
{
@@ -162,7 +163,7 @@ void clif_setport(uint16 port)
}
/*==========================================
- * mapŽI‚Ìip“Ç‚Ýo‚µ
+ * Returns map server IP
*------------------------------------------*/
uint32 clif_getip(void)
{
@@ -184,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)
{
@@ -210,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)
{
@@ -273,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)
{
@@ -554,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)
{
@@ -657,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)
{
@@ -1105,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)
{
@@ -1124,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)
{
@@ -1136,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)
{
@@ -1148,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)
@@ -1168,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;
@@ -1186,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];
@@ -1218,6 +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.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:
@@ -1873,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)
{
@@ -1945,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)
{
@@ -2014,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)
{
@@ -2457,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)
{
@@ -2590,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:
@@ -2602,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;
@@ -2699,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)
{
@@ -2926,7 +2956,7 @@ int clif_initialstatus(struct map_session_data *sd)
}
/*==========================================
- *–î‘•”õ
+ * 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)
{
@@ -2968,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)
{
@@ -3004,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)
{
@@ -3090,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)
{
@@ -3483,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)
{
@@ -3547,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)
{
@@ -3563,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)
{
@@ -3578,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)
{
@@ -3592,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)
{
@@ -3607,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)
{
@@ -3624,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)
{
@@ -3679,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)
{
@@ -3696,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)
{
@@ -3709,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)
{
@@ -3735,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)) )
@@ -4044,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)
{
@@ -4084,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)
{
@@ -4100,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)
{
@@ -4245,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)
{
@@ -4282,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;
@@ -4333,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)
{
@@ -4668,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)
{
@@ -4701,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)
{
@@ -4727,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)
@@ -4765,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)
{
@@ -4832,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)
{
@@ -4868,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);
@@ -4895,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;
}
@@ -4966,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];
@@ -4996,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;
@@ -5031,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
*------------------------------------------*/
@@ -5055,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)
{
@@ -5128,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)
{
@@ -5142,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)
{
@@ -5190,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)
{
@@ -5239,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)
{
@@ -5308,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)
{
@@ -5321,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)
{
@@ -5371,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)
{
@@ -5390,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)
{
@@ -5419,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)
{
@@ -5437,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)
{
@@ -5537,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)
{
@@ -5561,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)
{
@@ -5611,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)
{
@@ -5996,10 +6044,11 @@ void clif_party_inviteack(struct map_session_data* sd, const char* nick, int res
/*==========================================
- * ƒ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)
{
@@ -7225,7 +7275,7 @@ void clif_guild_message(struct guild *g,int account_id,const char *mes,int len)
/*==========================================
- * ƒ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)
{
@@ -7245,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)
{
@@ -7284,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)
{
@@ -7337,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)
{
@@ -7354,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)
{
@@ -7369,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)
{
@@ -7383,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)
{
@@ -7396,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)
@@ -7562,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]
@@ -7615,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)
{
@@ -8459,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
/*==========================================
*
*------------------------------------------*/
@@ -8548,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)
{
@@ -9020,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;
@@ -9039,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);
@@ -9837,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)
{
@@ -9864,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)
{
@@ -9872,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)
{
@@ -9886,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)
{
@@ -9894,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)
{
@@ -9902,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)
{
@@ -9918,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)
{
@@ -9929,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)
{
@@ -9939,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));
+ /**
+ * 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)
{
@@ -9968,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)
{
@@ -9976,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)
{
@@ -10056,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)
{
@@ -10163,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)
{
@@ -10273,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)
{
@@ -10294,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)
{
@@ -10302,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);
@@ -10341,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)
{
@@ -10446,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)
{
@@ -10463,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)
{
@@ -10489,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)
{
@@ -10498,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)
{
@@ -10508,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)
{
@@ -10567,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)
{
@@ -10589,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)
{
@@ -10606,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)
{
@@ -10623,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)
{
@@ -10640,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)
{
@@ -10771,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)
{
@@ -10784,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)
{
@@ -10797,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)
{
@@ -11251,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)
{
@@ -11275,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)
{
@@ -11283,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)
{
@@ -11351,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)
{
@@ -11378,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)
{
@@ -11386,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)
{
@@ -11402,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)
{
@@ -11429,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)
{
@@ -11476,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
*------------------------------------------*/
@@ -11997,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)
{
@@ -12015,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)
{
@@ -13214,7 +13302,6 @@ void clif_parse_Auction_setitem(int fd, struct map_session_data *sd)
clif_Auction_setitem(fd, idx + 2, false);
}
-
/// Result from an auction action (ZC_AUCTION_RESULT)
/// 0250 <result>.B
/// result:
@@ -14329,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)
@@ -14886,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
*------------------------------------------*/
@@ -15055,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)
{
diff --git a/src/map/clif.h b/src/map/clif.h
index 783c8f4a1..8b6271075 100644
--- a/src/map/clif.h
+++ b/src/map/clif.h
@@ -343,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);
@@ -361,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);
@@ -629,5 +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);
-
+/**
+ * 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/itemdb.c b/src/map/itemdb.c
index d8a8bb2cc..00d4176c5 100644
--- a/src/map/itemdb.c
+++ b/src/map/itemdb.c
@@ -706,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
*------------------------------------------*/
@@ -736,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;
@@ -773,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]);
@@ -835,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 )
@@ -947,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 )
diff --git a/src/map/itemdb.h b/src/map/itemdb.h
index 5b54acd67..801b81be8 100644
--- a/src/map/itemdb.h
+++ b/src/map/itemdb.h
@@ -5,6 +5,7 @@
#define _ITEMDB_H_
#include "../common/mmo.h" // ITEM_NAME_LENGTH
+#include "map.h" //RRMODE
#define MAX_RANDITEM 11000
@@ -13,6 +14,11 @@
#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;
@@ -143,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/map.c b/src/map/map.c
index 39077de6c..9155a11f3 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";
@@ -3205,6 +3206,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);
}
@@ -3526,41 +3530,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"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.ws/\n");
+ ShowInfo(CL_GREEN"IRC Channel:"CL_RESET"\tirc://irc.deltaanime.net/#athena\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);
}
/*======================================================
@@ -3591,6 +3593,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[])
{
@@ -3611,31 +3623,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 8e4507599..18f5f3928 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 "./RRConfig/Core.h"
+
#include <stdarg.h>
struct npc_data;
@@ -46,7 +51,7 @@ enum E_MAPSERVER_ST
#define NATURAL_HEAL_INTERVAL 500
#define MIN_FLOORITEM 2
#define MAX_FLOORITEM START_ACCOUNT_NUM
-#define MAX_LEVEL 99
+#define MAX_LEVEL 150
#define MAX_DROP_PER_MAP 48
#define MAX_IGNORE_LIST 20 // official is 14
#define MAX_VENDING 12
@@ -68,10 +73,12 @@ enum E_MAPSERVER_ST
#define JOBL_UPPER 0x1000 //4096
#define JOBL_BABY 0x2000 //8192
+#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...
@@ -154,6 +161,31 @@ enum {
MAPID_BABY_ALCHEMIST,
MAPID_BABY_ROGUE,
MAPID_BABY_SOUL_LINKER,
+ 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
@@ -476,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]
@@ -643,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);
@@ -667,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;
@@ -697,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/mob.c b/src/map/mob.c
index 5272b17e8..8181fb5e7 100644
--- a/src/map/mob.c
+++ b/src/map/mob.c
@@ -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;
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 dae395876..1762bc73b 100644
--- a/src/map/npc.c
+++ b/src/map/npc.c
@@ -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 RRConfig/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 RRConfig/Secure.h) [RR]
+ **/
+#if SECURE_NPCTIMEOUT
+ /**
+ * Update the last NPC iteration
+ **/
+ sd->npc_idle_tick = gettick();
+#endif
run_script_main(sd->st);
return 0;
@@ -3058,8 +3093,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 d40fb63b4..8f8d7eca9 100644
--- a/src/map/npc.h
+++ b/src/map/npc.h
@@ -157,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 RRConfig/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 9649505b4..f47f8e5c9 100644
--- a/src/map/party.c
+++ b/src/map/party.c
@@ -566,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--;
@@ -912,13 +912,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
@@ -945,8 +996,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 9fde5a6a4..4918d9a3a 100644
--- a/src/map/party.h
+++ b/src/map/party.h
@@ -92,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 b93334f35..6a6c24398 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);
+ 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 RRConfig/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);
}
@@ -3379,7 +3393,15 @@ int pc_additem(struct map_session_data *sd,struct item *item_data,int amount)
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 )
@@ -3662,6 +3684,17 @@ int pc_isUseitem(struct map_session_data *sd,int n)
if( nameid >= 12153 && nameid <= 12182 && sd->md != NULL )
return 0; // Mercenary Scrolls
+ /**
+ * 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]
if (
(!map_flag_vs(sd->bl.m) && item->flag.no_equip&1) || // Normal
@@ -3685,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))
@@ -4534,6 +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 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;
}
@@ -4620,6 +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 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;
}
@@ -4898,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;
@@ -5131,7 +5223,11 @@ int pc_need_status_point(struct map_session_data* sd, int type, int val)
swap(low, high);
for ( ; low < high; low++ )
+#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;
}
@@ -5480,7 +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, 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);
@@ -6400,7 +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,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);
@@ -6528,15 +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) && (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 && (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))
@@ -6553,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)
@@ -6644,7 +6794,7 @@ 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;
@@ -7801,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;
@@ -8060,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);
@@ -8079,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 4d1e929a0..51588c842 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
@@ -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,13 +430,33 @@ struct map_session_data {
unsigned int bg_id;
unsigned short user_font;
+ /**
+ * For the Secure NPC Timeout option (check RRConfig/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;
int delunit_prevline;
};
//Update this max as necessary. 55 is the value needed for Super Baby currently
-#define MAX_SKILL_TREE 55
+//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)
@@ -538,7 +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_BABY ? battle_config.max_baby_parameter : battle_config.max_parameter )
+#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)
@@ -550,7 +585,8 @@ enum equip_index {
#define pcdb_checkid(class_) \
( \
( (class_) >= JOB_NOVICE && (class_) < JOB_MAX_BASIC ) \
-|| ( (class_) >= JOB_NOVICE_HIGH && (class_) < JOB_MAX ) \
+|| ( (class_) >= JOB_NOVICE_HIGH && (class_) <= JOB_SOUL_LINKER ) \
+|| ( (class_) >= JOB_RUNE_KNIGHT && (class_) < JOB_MAX ) \
)
int pc_class2idx(int class_);
@@ -785,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 151535c2f..452212a7d 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -325,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,
@@ -3365,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 RRConfig/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.
@@ -3407,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 RRConfig/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
}
}
@@ -7549,7 +7571,7 @@ BUILDIN_FUNC(checkriding)
if( sd == NULL )
return 0;// no player attached, report source
- if( pc_isriding(sd) )
+ if( pc_isriding(sd) || sd->sc.option&OPTION_MOUNTING )
script_pushint(st, 1);
else
script_pushint(st, 0);
@@ -7771,7 +7793,7 @@ BUILDIN_FUNC(produce)
return 0;
trigger=script_getnum(st,2);
- clif_skill_produce_mix_list(sd, trigger);
+ clif_skill_produce_mix_list(sd, -1, trigger);
return 0;
}
/*==========================================
@@ -9146,7 +9168,7 @@ BUILDIN_FUNC(roclass)
}
/*==========================================
- *Œg‘Ñ—‘›z‰»‹@Žg—p
+ * Tells client to open a hatching window, used for pet incubator
*------------------------------------------*/
BUILDIN_FUNC(birthpet)
{
@@ -9616,7 +9638,10 @@ BUILDIN_FUNC(getmapflag)
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;
+ /**
+ * 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_NIGHTENABLED: script_pushint(st,map[m].flag.nightenabled); break;
case MF_NOGO: script_pushint(st,map[m].flag.nogo); break;
case MF_NOBASEEXP: script_pushint(st,map[m].flag.nobaseexp); break;
@@ -9686,7 +9711,10 @@ BUILDIN_FUNC(setmapflag)
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;
+ /**
+ * No longer available, keeping here just in case it's back someday. [Ind]
+ **/
+ //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;
@@ -9753,7 +9781,10 @@ BUILDIN_FUNC(removemapflag)
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;
+ /**
+ * No longer available, keeping here just in case it's back someday. [Ind]
+ **/
+ //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;
@@ -14951,8 +14982,133 @@ BUILDIN_FUNC(searchstores)
searchstore_open(sd, uses, effect);
return 0;
}
+/// Displays a number as large digital clock.
+/// showdigit <value>[,<type>];
+BUILDIN_FUNC(showdigit)
+{
+ unsigned int type = 0;
+ int value;
+ struct map_session_data* sd;
+
+ if( ( sd = script_rid2sd(st) ) == NULL )
+ {
+ return 0;
+ }
+
+ value = script_getnum(st,2);
+
+ if( script_hasdata(st,3) )
+ {
+ type = script_getnum(st,3);
+ if( type > 3 )
+ {
+ ShowError("buildin_showdigit: Invalid type %u.\n", type);
+ return 1;
+ }
+ }
+ 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;
+ }
+ }
+ pc_setoption(sd, sd->sc.option|option);
+ script_pushint(st,1);
+ }
+ 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);
@@ -15317,6 +15473,7 @@ struct script_function buildin_func[] = {
BUILDIN_DEF(pushpc,"ii"),
BUILDIN_DEF(buyingstore,"i"),
BUILDIN_DEF(searchstores,"ii"),
+ BUILDIN_DEF(showdigit,"i?"),
// WoE SE
BUILDIN_DEF(agitstart2,""),
BUILDIN_DEF(agitend2,""),
@@ -15348,7 +15505,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 28bb9e389..41c3580ae 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -59,11 +59,23 @@ 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
static inline int splash_target(struct block_list* bl)
{
@@ -170,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)
{
@@ -241,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
@@ -261,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 )
@@ -291,14 +340,25 @@ int skill_calc_heal(struct block_list *src, struct block_list *target, int skill
default:
if (skill_lv >= battle_config.max_heal_lv)
return battle_config.max_heal;
-
- hp = ( status_get_lv(src)+status_get_int(src) )/8 *(4+ skill_lv*8);
+ #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) )
hp += hp * skill * 2 / 100;
else if( src->type == BL_HOM && (skill = merc_hom_checkskill(((TBL_HOM*)src), HLIF_BRAIN)) > 0 )
hp += hp * skill * 2 / 100;
break;
}
+ if( skill_id == AB_HIGHNESSHEAL )
+ hp = (hp * (20 + 3 * (skill_lv - 1))) / 10;
if( ( (target && target->type == BL_MER) || !heal ) && skill_id != NPC_EVILLAND )
hp >>= 1;
@@ -378,6 +438,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) {
@@ -410,6 +473,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)) ||
@@ -420,6 +489,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);
}
@@ -471,6 +557,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
@@ -587,6 +675,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 &&
@@ -683,7 +774,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;
@@ -929,6 +1027,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,5+5*skilllv,skilllv,1000,src->id,0,skill_get_time(skillid,skilllv));
+ break;
+ /**
+ * Arch Bishop
+ **/
+ case AB_ADORAMUS:
+ 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 = 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)
@@ -1039,7 +1235,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);
}
}
}
@@ -1315,7 +1511,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);
}
}
}
@@ -1450,7 +1646,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++) {
@@ -1465,8 +1661,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
@@ -1655,8 +1851,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;
@@ -1678,7 +1880,7 @@ 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 )
- 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);
@@ -1804,7 +2006,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;
@@ -1819,8 +2045,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){
@@ -1833,11 +2073,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);
@@ -1871,6 +2111,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)
@@ -1882,6 +2128,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);
}
@@ -1937,6 +2185,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 ) {
+ 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) &&
(
@@ -1963,7 +2224,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)
{
@@ -2034,6 +2294,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;
@@ -2346,6 +2617,61 @@ static int skill_timerskill(int tid, unsigned int tick, int id, intptr_t data)
}
}
break;
+ /**
+ * Warlock
+ **/
+ case WL_CHAINLIGHTNING_ATK:
+ {
+ 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);
break;
@@ -2368,7 +2694,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.
@@ -2569,6 +2901,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;
@@ -2637,6 +3006,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:
@@ -2766,6 +3137,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
@@ -2792,7 +3192,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
@@ -2800,7 +3203,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 )
@@ -2920,6 +3323,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;
@@ -3006,6 +3423,10 @@ 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;
@@ -3062,6 +3483,330 @@ 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);
+
+ 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) {
if (flag & 3){
@@ -3153,6 +3898,11 @@ 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.
if (sd && battle_check_undead(tstatus->race,tstatus->def_ele)) {
if (battle_check_target(src, bl, BCT_ENEMY) < 1) {
@@ -3186,11 +3936,17 @@ 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_get_jobexp;
- if( status_isimmune(bl) || (dstmd && (dstmd->class_ == MOBID_EMPERIUM || mob_is_battleground(dstmd))) )
+ 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 )
@@ -3599,7 +4355,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:
@@ -3640,7 +4399,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:
@@ -3657,6 +4415,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:
+ /**
+ * 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;
@@ -3914,14 +4698,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;
@@ -3942,12 +4726,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:
@@ -4091,6 +4895,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;
@@ -4106,6 +4915,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);
@@ -4425,6 +5239,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;
@@ -4443,6 +5258,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:
@@ -4460,14 +5276,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.
@@ -4631,7 +5447,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);
@@ -5654,6 +6471,610 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
clif_skill_nodamage(src, bl, skillid, skilllv, buyingstore_setup(sd, MAX_BUYINGSTORE_SLOTS));
}
break;
+ case RK_ENCHANTBLADE:
+ 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_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, 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_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 )
+ {
+ 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 = 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_heal(bl,heal,0,1);
+ status_change_clear_buffs(bl,2);
+ }
+ break;
+
+ 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);
+ }
+ break;
+
+ 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:
+ {
+ 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) )
+ {
+ if( sd ) clif_skill_fail(sd,skillid,0x02,0);
+ break;
+ }
+ 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 ) {
+ 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:
+ {
+ 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 )
+ {
+ if( sd && tstatus && !battle_check_undead(tstatus->race, tstatus->def_ele) )
+ {
+ 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_ORATIO:
+ 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);
+ }
+ 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 )
+ {
+ if( (tsc && (tsc->data[SC_SLEEP] || tsc->data[SC_STUN] ||
+ tsc->data[SC_SILENCE]))&& (rand()%100 < 30+5*skilllv) )
+ {
+ 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);
+ 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( 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;
+
+ case WL_SUMMONFB:
+ case WL_SUMMONBL:
+ case WL_SUMMONWB:
+ case WL_SUMMONSTONE:
+ {
+ 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;
+ }
+
+ 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 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);
+ }
+ 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;
+
default:
ShowWarning("skill_castend_nodamage_id: Unknown skill used:%d\n",skillid);
clif_skill_nodamage(src,bl,skillid,skilllv,1);
@@ -5858,13 +7279,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 )
@@ -5900,7 +7323,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 &&
@@ -6077,7 +7500,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 )
@@ -6209,6 +7632,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:
@@ -6271,6 +7697,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);
@@ -6518,6 +7955,118 @@ 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);
+ 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 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_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 NC_SILVERSNIPER:
+ {
+ 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);
@@ -6566,7 +8115,12 @@ int skill_castend_map (struct map_session_data *sd, short skill_num, const char
sd->sc.data[SC_DANCING] ||
sd->sc.data[SC_BERSERK] ||
sd->sc.data[SC_BASILICA] ||
- sd->sc.data[SC_MARIONETTE]
+ sd->sc.data[SC_MARIONETTE] ||
+ /**
+ * 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;
@@ -6855,6 +8409,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) )
@@ -7004,6 +8569,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));
@@ -7078,6 +8654,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:
@@ -7157,8 +8744,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;
@@ -7541,6 +9128,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);
@@ -7707,6 +9304,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;
@@ -7722,6 +9323,71 @@ 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:
+ if( bl->type == BL_PC && !battle_check_undead(tstatus->race, tstatus->def_ele) && tstatus->race != RC_DEMON )
+ {
+ int hp, sp;
+ switch( sg->skill_lv )
+ {
+ 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;
+
+ 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;
}
if (sg->state.magic_power && sc && !sc->data[SC_MAGICPOWER])
@@ -7759,6 +9425,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://Arch Bishop
if (sce)
status_change_end(bl, type, INVALID_TIMER);
break;
@@ -7767,7 +9434,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);
@@ -8003,6 +9669,19 @@ static int skill_check_condition_char_sub (struct block_list *bl, va_list ap)
p_sd[(*c)++]=tsd->bl.id;
return 1;
}
+ case AB_ADORAMUS:
+ { // 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;
@@ -8052,6 +9731,13 @@ int skill_check_pc_partner (struct map_session_data *sd, short skill_id, short*
status_charge(&tsd->bl, 0, 10);
}
return c;
+ case AB_ADORAMUS:
+ if( c > 0 && (tsd = map_id2sd(p_sd[0])) != NULL )
+ {
+ 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)
{
@@ -8484,6 +10170,97 @@ int skill_check_condition_castbegin(struct map_session_data* sd, short skill, sh
return 0;
}
break;
+ /**
+ * Arch Bishop
+ **/
+ case AB_ANCILLA:
+ {
+ 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;
+ /**
+ * 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]) )
+ {
+ //clif_skill_fail(sd,skill,0x47,require.amount[0],require.itemid[0]);
+ clif_skill_fail(sd,skill,0,0);
+ return 0;
+ }
+ break;
+ case WL_SUMMONFB:
+ case WL_SUMMONBL:
+ case WL_SUMMONWB:
+ case WL_SUMMONSTONE:
+ if( sc )
+ {
+ 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) {
@@ -8568,6 +10345,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;
+ /**
+ * Wug
+ **/
+ case ST_WUG:
+ if( !(sd->sc.option&OPTION_WUG) ) {
+ clif_skill_fail(sd,skill,0,0);
+ return 0;
+ }
+ break;
+ /**
+ * Riding Wug
+ **/
+ case ST_RIDINGWUG:
+ if( !(sd->sc.option&OPTION_WUGRIDER) ){
+ clif_skill_fail(sd,skill,0,0);
+ return 0;
+ }
+ break;
+ /**
+ * 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) {
@@ -8648,6 +10470,10 @@ int skill_check_condition_castend(struct map_session_data* sd, short skill, shor
case PR_BENEDICTIO:
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:
{
@@ -8667,6 +10493,32 @@ 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;
@@ -8854,6 +10706,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;
@@ -8957,12 +10813,12 @@ int skill_castfix (struct block_list *bl, int skill_id, int skill_lv)
sd = BL_CAST(BL_PC, bl);
// calculate base cast time (reduced by dex)
- if( !(skill_get_castnodex(skill_id, skill_lv)&1) )
- {
- int scale = battle_config.castrate_dex_scale - status_get_dex(bl);
+ 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 / battle_config.castrate_dex_scale;
- else return 0; // instant cast
+ time = time * scale / CONST_CASTRATE_SCALE;
+ else
+ return 0; // instant cast
}
// calculate cast time reduced by item/card bonuses
@@ -8980,11 +10836,9 @@ int skill_castfix (struct block_list *bl, int skill_id, int skill_lv)
}
}
}
-
// 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;
}
@@ -8992,10 +10846,16 @@ int skill_castfix (struct block_list *bl, int skill_id, int skill_lv)
/*==========================================
* Does cast-time reductions based on sc data.
*------------------------------------------*/
-int skill_castfix_sc (struct block_list *bl, int time)
+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;
@@ -9010,8 +10870,24 @@ int skill_castfix_sc (struct block_list *bl, int time)
}
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
}
/*==========================================
@@ -9572,8 +11448,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)
@@ -9731,6 +11607,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;
+}
/*==========================================
*
@@ -9897,6 +11815,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;
@@ -9964,6 +11891,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;
+}
/*==========================================
*
@@ -10005,6 +11963,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);
@@ -10203,14 +12171,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)
@@ -10379,6 +12369,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 )
@@ -10445,6 +12443,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);
@@ -10817,6 +12820,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;
@@ -10838,13 +12844,35 @@ 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 ) {
+ 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++){
int j,id,x;
if( (id=skill_produce_db[idx].mat_id[i]) <= 0 )
continue;
num++;
- 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);
@@ -10889,6 +12917,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]
@@ -10939,6 +12971,19 @@ int skill_produce_mix (struct map_session_data *sd, int skill_id, int nameid, in
case SA_CREATECON: // Elemental Converter Creation
make_per = 100000; // should be 100% success rate
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)
@@ -11008,6 +13053,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:
@@ -11086,6 +13135,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.
@@ -11130,6 +13184,11 @@ int skill_produce_mix (struct map_session_data *sd, int skill_id, int nameid, in
clif_produceeffect(sd,1,nameid);
clif_misceffect(&sd->bl,2);
break;
+ case RK_RUNEMASTERY:
+ case GC_CREATENEWPOISON:
+ clif_produceeffect(sd,3,nameid);
+ clif_misceffect(&sd->bl,6);
+ break;
default:
if( skill_produce_db[idx].itemlv > 10 && skill_produce_db[idx].itemlv <= 20 )
{ //Cooking items.
@@ -11183,6 +13242,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;
+}
+
/*==========================================
*
@@ -11360,6 +13538,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:
@@ -11566,6 +13745,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
}
/*==========================================
@@ -11596,7 +13859,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]);
@@ -11638,7 +13904,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);
@@ -11696,6 +13965,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;
+ /**
+ * 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);
@@ -11713,13 +13993,16 @@ static bool skill_parse_row_castdb(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].cast);
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;
}
@@ -11729,7 +14012,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);
@@ -11743,7 +14029,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;
@@ -11829,6 +14118,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
@@ -11843,7 +14176,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]);
@@ -11859,13 +14195,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" , ',', 6, 6, 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);
@@ -11873,6 +14210,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 1ad6ea25a..97bd54252 100644
--- a/src/map/skill.h
+++ b/src/map/skill.h
@@ -13,7 +13,7 @@ struct skill_unit_group;
struct status_change_entry;
#define MAX_SKILL_DB MAX_SKILL
-#define MAX_SKILL_PRODUCE_DB 150
+#define MAX_SKILL_PRODUCE_DB 170
#define MAX_PRODUCE_RESOURCE 12
#define MAX_SKILL_ARROW_DB 150
#define MAX_ARROW_RESOURCE 5
@@ -91,7 +91,7 @@ struct s_skill_db {
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];
- int upkeep_time[MAX_SKILL_LEVEL],upkeep_time2[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];
@@ -290,7 +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_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]
@@ -368,6 +368,14 @@ enum {
ST_RECOV_WEIGHT_RATE,
ST_MOVE_ENABLE,
ST_WATER,
+ /**
+ * 3rd States
+ **/
+ ST_RIDINGDRAGON,
+ ST_WUG,
+ ST_RIDINGWUG,
+ ST_MADO,
+ ST_ELEMENTALSPIRIT,
};
enum e_skill {
@@ -1310,7 +1318,7 @@ enum e_skill {
GN_S_PHARMACY,
GN_SLINGITEM_RANGEMELEEATK,
- AB_SECRAMENT,
+ AB_SECRAMENT=2515,
WM_SEVERE_RAINSTORM_MELEE,
SR_HOWLINGOFLION,
SR_RIDEINLIGHTNING,
@@ -1547,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 4df2c80d6..28506a4f6 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -56,7 +56,13 @@ static int refinebonus[MAX_REFINE_BONUS][3]; // ¸˜Bƒ{[ƒiƒXƒe[ƒuƒ‹(refine_db.t
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;
@@ -445,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,
@@ -516,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;
@@ -573,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;
}
@@ -728,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]
@@ -745,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);
}
@@ -1176,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;
@@ -1210,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).
@@ -1256,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;
@@ -1288,7 +1533,24 @@ int status_base_amotion_pc(struct map_session_data* sd, struct status_data* stat
// raw delay adjustment from bAspd bonus
amotion+= sd->aspd_add;
-
+#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;
}
@@ -1331,13 +1593,24 @@ static unsigned short status_base_atk(const struct block_list *bl, const struct
static inline unsigned short status_base_matk_max(const struct status_data* status)
{
- return status->int_+(status->int_/5)*(status->int_/5);
+ #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
{
- return status->int_+(status->int_/7)*(status->int_/7);
+ #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
}
@@ -1350,14 +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);
+#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;
@@ -1374,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:
@@ -1684,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.
@@ -1909,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) {
@@ -1921,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];
@@ -2277,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
@@ -2429,7 +2748,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 -----
@@ -2996,18 +3314,26 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag)
if(flag&SCB_MATK) {
//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);
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;
@@ -3088,14 +3414,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
@@ -3265,6 +3592,11 @@ 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;
return (unsigned short)cap_value(str,0,USHRT_MAX);
}
@@ -3304,6 +3636,11 @@ 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;
return (unsigned short)cap_value(agi,0,USHRT_MAX);
}
@@ -3481,6 +3818,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);
}
@@ -3525,6 +3869,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);
}
@@ -3563,6 +3914,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);
}
@@ -3593,6 +3946,8 @@ static signed short status_calc_hit(struct block_list *bl, struct status_change
hit += 20; // RockmanEXE; changed based on updated [Reddozen]
if(sc->data[SC_MERC_HITUP])
hit += sc->data[SC_MERC_HITUP]->val2;
+ if(sc->data[SC_FEAR])
+ hit -= hit * 20 / 100;
return (short)cap_value(hit,1,SHRT_MAX);
}
@@ -3640,6 +3995,29 @@ static signed short status_calc_flee(struct block_list *bl, struct status_change
flee += 10 + sc->data[SC_SPEED]->val1 * 10;
if(sc->data[SC_MERC_FLEEUP])
flee += sc->data[SC_MERC_FLEEUP]->val2;
+ if(sc->data[SC_FEAR])
+ 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);
}
@@ -3696,6 +4074,26 @@ static signed char 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;
+ 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;
return (signed char)cap_value(def,CHAR_MIN,CHAR_MAX);
}
@@ -3728,6 +4126,20 @@ 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_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);
}
@@ -3755,6 +4167,16 @@ static signed char 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.
+ 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;
return (signed char)cap_value(mdef,CHAR_MIN,CHAR_MAX);
}
@@ -3768,6 +4190,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_ANALYZE])
+ mdef2 -= mdef2 * ( 14 * sc->data[SC_ANALYZE]->val1 ) / 100;
return (short)cap_value(mdef2,1,SHRT_MAX);
}
@@ -3794,9 +4218,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;
+ 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;
}
@@ -3821,7 +4253,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 );
@@ -3845,6 +4277,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_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 );
@@ -3912,7 +4362,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);
@@ -3981,12 +4436,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])
@@ -4007,6 +4466,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_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);
}
@@ -4020,7 +4514,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);
@@ -4045,6 +4539,12 @@ static unsigned int status_calc_maxhp(struct block_list *bl, struct status_chang
if(sc->data[SC_MERC_HPUP])
maxhp += maxhp * sc->data[SC_MERC_HPUP]->val2/100;
+ if(sc->data[SC_EPICLESIS])
+ 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);
}
@@ -4078,6 +4578,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);
}
@@ -4096,6 +4599,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);
}
@@ -4567,7 +5072,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;
@@ -4618,6 +5123,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://Arch Bishop
if (sd) tick>>=1; //Half duration for players.
case SC_STONE:
case SC_FREEZE:
@@ -4647,6 +5153,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))
@@ -4749,7 +5289,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 opt_flag, calc_flag, undead_flag, val_flag = 0, tick_time = 0;
nullpo_ret(bl);
sc = status_get_sc(bl);
@@ -4787,16 +5327,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_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)
@@ -4813,12 +5364,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_DECREASEAGI] ||
+ sc->option&OPTION_MADOGEAR //Adrenaline doesn't affect Mado Gear [Ind]
)
return 0;
break;
@@ -4830,6 +5385,9 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
)
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:
@@ -4844,6 +5402,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]
@@ -4995,6 +5555,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
@@ -5003,8 +5567,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:
@@ -5013,6 +5575,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;
}
}
@@ -5048,6 +5630,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]
@@ -5286,6 +5869,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]
@@ -5421,10 +6006,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.
@@ -5432,9 +6017,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;
@@ -5455,6 +6045,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)
@@ -5486,7 +6077,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;
@@ -5500,7 +6091,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:
@@ -5511,7 +6102,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 )
@@ -5525,12 +6116,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;
@@ -5560,7 +6151,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.
@@ -5631,7 +6222,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
@@ -5654,13 +6245,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;
@@ -5926,7 +6517,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.
@@ -6062,6 +6653,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 )
@@ -6107,12 +7179,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_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:
@@ -6130,6 +7205,8 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
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;
@@ -6234,6 +7311,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;
@@ -6280,10 +7358,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]
- clif_status_change(bl,StatusIconChangeTable[type],1,tick);
+ 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]))
@@ -6337,6 +7420,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:
@@ -6658,7 +7751,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);
}
@@ -6803,6 +7896,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:
+ 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;
@@ -6832,6 +8007,7 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
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;
@@ -6962,7 +8138,7 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
//On Aegis, when turning off a status change, first goes the sc packet, then the option packet.
if( vd && (pcdb_checkid(vd->class_) || bl->type == BL_MER ) )
- clif_status_change(bl,StatusIconChangeTable[type],0,0);
+ clif_status_change(bl,StatusIconChangeTable[type],0,0,0,0,0);
else if (sd)
clif_status_load(bl,StatusIconChangeTable[type],0);
@@ -7354,6 +8530,461 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr_t data)
return 0;
}
break;
+ case SC_ABUNDANCE:
+ if(--(sce->val4) > 0)
+ {
+ 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 )
+ {
+ 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;
+ }
+ }
+
+ 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->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);
+ }
+ return 0;
+ }
+ break;
+
+ case SC_FEAR:
+ if( --(sce->val4) >= 0 )
+ {
+ if( sce->val2 > 0 )
+ sce->val2--;
+ sc_timer_next(1000 + tick, status_change_timer, bl->id, data);
+ return 0;
+ }
+ break;
+
+ case SC_SPHERE_1:
+ case SC_SPHERE_2:
+ case SC_SPHERE_3:
+ case SC_SPHERE_4:
+ case SC_SPHERE_5:
+ if( --(sce->val4) >= 0 )
+ {
+ 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;
+
+ 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();
+ 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(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
@@ -7384,11 +9015,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);
}
@@ -7716,6 +9351,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_;
@@ -7801,7 +9455,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));
-
+#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
@@ -7828,6 +9484,10 @@ int status_readdb(void)
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 dcd532577..8572b1bbb 100644
--- a/src/map/status.h
+++ b/src/map/status.h
@@ -329,7 +329,248 @@ typedef enum sc_type {
SC_FOOD_VIT_CASH,
SC_FOOD_DEX_CASH,
SC_FOOD_INT_CASH,
- SC_FOOD_LUK_CASH,
+ 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_REUSE_REFRESH,
+ SC_GIANTGROWTH,
+ SC_STONEHARDSKIN,
+ SC_VITALITYACTIVATION,//320
+ SC_STORMBLAST,
+ SC_FIGHTINGSPIRIT,
+ SC_ABUNDANCE,
+ /**
+ * Arch Bishop
+ **/
+ SC_ADORAMUS,
+ SC_EPICLESIS,//325
+ SC_ORATIO,
+ SC_LAUDAAGNUS,
+ SC_LAUDARAMUS,
+ SC_RENOVATIO,
+ SC_EXPIATIO,//330
+ SC_DUPLELIGHT,
+ 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;
@@ -652,7 +893,7 @@ enum si_type {
SI_CASH_PLUSONLYJOBEXP = 312,
// SI_PARTYFLEE = 313,
// SI_ANGEL_PROTECT = 314,
-/*
+
SI_ENDURE_MDEF = 315,
SI_ENCHANTBLADE = 316,
SI_DEATHBOUND = 317,
@@ -701,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,
@@ -719,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,
@@ -812,7 +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,
@@ -912,7 +1153,7 @@ enum si_type {
SI_WIND_INSIGNIA = 569,
SI_EARTH_INSIGNIA = 570,
SI_EQUIPED_FLOOR = 571,
-*/
+ SI_ALL_RIDING = 613,//awesome 571-613 gap, we're missing quite a few stuff here.
};
// JOINTBEAT stackable ailments
@@ -1033,6 +1274,7 @@ enum {
OPTION_DRAGON3 = 0x01000000,
OPTION_DRAGON4 = 0x02000000,
OPTION_DRAGON5 = 0x04000000,
+ 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,
@@ -1123,6 +1365,12 @@ struct status_data {
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;
signed char
def, mdef;
@@ -1187,7 +1435,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];
};
@@ -1260,6 +1509,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/unit.c b/src/map/unit.c
index a11b5dc28..52b479b25 100644
--- a/src/map/unit.c
+++ b/src/map/unit.c
@@ -444,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;
@@ -452,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))
@@ -464,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;
@@ -472,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;
@@ -992,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]
@@ -1130,7 +1196,7 @@ int unit_skilluse_id2(struct block_list *src, int target_id, short skill_num, sh
// 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);
+ casttime = skill_castfix_sc(src, casttime, skill_num, skill_lv);
if( casttime > 0 || temp )
{
@@ -1272,7 +1338,7 @@ int unit_skilluse_pos2( struct block_list *src, short skill_x, short skill_y, sh
// 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);
+ 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) )
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/map-server_sql.vcxproj b/vcproj-10/map-server_sql.vcxproj
index 9f9664548..997854d0f 100644
--- a/vcproj-10/map-server_sql.vcxproj
+++ b/vcproj-10/map-server_sql.vcxproj
@@ -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\RRConfig\Core.h" />
+ <ClInclude Include="..\src\map\RRConfig\Renewal.h" />
+ <ClInclude Include="..\src\map\RRConfig\Secure.h" />
+ <ClInclude Include="..\src\map\RRConfig\Data\Const.h" />
+ <ClInclude Include="..\src\map\RRConfig\Skills\General.h" />
+ <ClInclude Include="..\src\map\RRConfig\Skills\Mage_Classes.h" />
+ <ClInclude Include="..\src\map\RRConfig\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_sql.vcxproj.filters b/vcproj-10/map-server_sql.vcxproj.filters
index b290b3c95..5351488d6 100644
--- a/vcproj-10/map-server_sql.vcxproj.filters
+++ b/vcproj-10/map-server_sql.vcxproj.filters
@@ -115,6 +115,9 @@
<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>
diff --git a/vcproj-10/map-server_txt.vcxproj b/vcproj-10/map-server_txt.vcxproj
index 171859e1e..a40e6f5e0 100644
--- a/vcproj-10/map-server_txt.vcxproj
+++ b/vcproj-10/map-server_txt.vcxproj
@@ -205,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\RRConfig\Core.h" />
+ <ClInclude Include="..\src\map\RRConfig\Renewal.h" />
+ <ClInclude Include="..\src\map\RRConfig\Secure.h" />
+ <ClInclude Include="..\src\map\RRConfig\Data\Const.h" />
+ <ClInclude Include="..\src\map\RRConfig\Skills\General.h" />
+ <ClInclude Include="..\src\map\RRConfig\Skills\Mage_Classes.h" />
+ <ClInclude Include="..\src\map\RRConfig\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
index e157f4d40..bf2d728ae 100644
--- a/vcproj-10/map-server_txt.vcxproj.filters
+++ b/vcproj-10/map-server_txt.vcxproj.filters
@@ -189,6 +189,9 @@
<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>
diff --git a/vcproj-10/mapcache.vcxproj.filters b/vcproj-10/mapcache.vcxproj.filters
index 708cab064..713cdb64b 100644
--- a/vcproj-10/mapcache.vcxproj.filters
+++ b/vcproj-10/mapcache.vcxproj.filters
@@ -4,6 +4,9 @@
<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>
@@ -30,6 +33,9 @@
<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>
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 64fdf9bac..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"
diff --git a/vcproj-9/char-server_txt.vcproj b/vcproj-9/char-server_txt.vcproj
index a6e83d887..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"
diff --git a/vcproj-9/login-server_sql.vcproj b/vcproj-9/login-server_sql.vcproj
index 7a725fc36..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"
diff --git a/vcproj-9/login-server_txt.vcproj b/vcproj-9/login-server_txt.vcproj
index bb2820edb..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"
diff --git a/vcproj-9/map-server_sql.vcproj b/vcproj-9/map-server_sql.vcproj
index 8cb57ef3b..7f4bac76f 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"
@@ -388,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
@@ -452,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
@@ -584,6 +584,34 @@
>
</File>
<File
+ RelativePath="..\src\map\RRConfig\Core.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\map\RRConfig\Renewal.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\map\RRConfig\Secure.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\map\RRConfig\Data\Const.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\map\RRConfig\Skills\General.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\map\RRConfig\Skills\Mage_Classes.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\map\RRConfig\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 2b983df98..d4cc1b13b 100644
--- a/vcproj-9/map-server_txt.vcproj
+++ b/vcproj-9/map-server_txt.vcproj
@@ -415,6 +415,34 @@
>
</File>
<File
+ RelativePath="..\src\map\RRConfig\Core.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\map\RRConfig\Renewal.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\map\RRConfig\Secure.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\map\RRConfig\Data\Const.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\map\RRConfig\Skills\General.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\map\RRConfig\Skills\Mage_Classes.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\map\RRConfig\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 54c2756ff..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"
@@ -209,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 9e7289c59..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"
diff --git a/vcproj-9/plugin-pid.vcproj b/vcproj-9/plugin-pid.vcproj
index b9e6b3b7c..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"
diff --git a/vcproj-9/txt-converter-char.vcproj b/vcproj-9/txt-converter-char.vcproj
index 83bd5d6d2..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"
diff --git a/vcproj-9/txt-converter-login.vcproj b/vcproj-9/txt-converter-login.vcproj
index 148009113..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"