summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.appveyor.yml3
-rw-r--r--.gitlab-ci.yml257
-rw-r--r--.travis.yml16
-rw-r--r--CHANGELOG.md126
-rw-r--r--Hercules-16.sln (renamed from Hercules-12.sln)21
-rw-r--r--conf/map/battle/drops.conf4
-rw-r--r--conf/map/battle/guild.conf3
-rw-r--r--conf/map/battle/homunc.conf3
-rw-r--r--conf/messages.conf84
-rwxr-xr-xconfigure90
-rw-r--r--configure.ac1
-rw-r--r--db/castle_db.conf471
-rw-r--r--db/castle_db.txt74
-rw-r--r--db/constants.conf107
-rw-r--r--db/item_db2.conf2
-rw-r--r--db/mob_db2.conf1
-rw-r--r--db/pre-re/item_chain.conf6
-rw-r--r--db/pre-re/item_combo_db.conf1280
-rw-r--r--db/pre-re/item_combo_db.txt165
-rw-r--r--db/pre-re/item_db.conf3142
-rw-r--r--db/pre-re/item_lapineddukddak.conf2318
-rw-r--r--db/pre-re/mob_db.conf1
-rw-r--r--db/quest_db.conf4
-rw-r--r--db/re/item_chain.conf6
-rw-r--r--db/re/item_combo_db.conf3224
-rw-r--r--db/re/item_combo_db.txt439
-rw-r--r--db/re/item_db.conf3159
-rw-r--r--db/re/item_lapineddukddak.conf2318
-rw-r--r--db/re/mob_db.conf35
-rw-r--r--db/sc_config.conf2811
-rw-r--r--db/sc_config.txt505
-rw-r--r--doc/atcommands.txt51
-rw-r--r--doc/constants.md709
-rw-r--r--doc/sample/getiteminfo.txt23
-rw-r--r--doc/script_commands.txt406
-rw-r--r--npc/airports/airships.txt92
-rw-r--r--npc/battleground/kvm/kvm_item_pay.txt10
-rw-r--r--npc/cities/alberta.txt6
-rw-r--r--npc/cities/aldebaran.txt8
-rw-r--r--npc/cities/geffen.txt30
-rw-r--r--npc/cities/jawaii.txt2
-rw-r--r--npc/cities/lighthalzen.txt20
-rw-r--r--npc/custom/battleground/bg_kvm01.txt4
-rw-r--r--npc/custom/battleground/bg_kvm02.txt4
-rw-r--r--npc/custom/battleground/bg_kvm03.txt4
-rw-r--r--npc/custom/etc/bank.txt38
-rw-r--r--npc/custom/etc/bank_kafra.txt6
-rw-r--r--npc/custom/etc/lottery.txt150
-rw-r--r--npc/custom/etc/marriage.txt2
-rw-r--r--npc/custom/etc/monster_arena.txt9
-rw-r--r--npc/custom/etc/quest_warper.txt34
-rw-r--r--npc/custom/etc/shifty_assassin.txt7
-rw-r--r--npc/custom/etc/stock_market.txt15
-rw-r--r--npc/custom/events/cluckers.txt4
-rw-r--r--npc/custom/events/disguise.txt10
-rw-r--r--npc/custom/events/valentinesdayexp.txt33
-rw-r--r--npc/custom/stylist.txt78
-rw-r--r--npc/events/dumplingfestival.txt4
-rw-r--r--npc/events/easter_2008.txt136
-rw-r--r--npc/events/halloween_2006.txt12
-rw-r--r--npc/events/halloween_2009.txt140
-rw-r--r--npc/events/valentinesday.txt5
-rw-r--r--npc/events/valentinesday_2009.txt10
-rw-r--r--npc/events/whiteday.txt22
-rw-r--r--npc/instances/EndlessTower.txt10
-rw-r--r--npc/instances/NydhoggsNest.txt2
-rw-r--r--npc/instances/SealedShrine.txt16
-rw-r--r--npc/jobs/2-2/alchemist.txt155
-rw-r--r--npc/jobs/2-2/bard.txt60
-rw-r--r--npc/jobs/2-2/rogue.txt15
-rw-r--r--npc/jobs/valkyrie.txt170
-rw-r--r--npc/kafras/dts_warper.txt32
-rw-r--r--npc/kafras/functions_kafras.txt4
-rw-r--r--npc/merchants/alchemist.txt11
-rw-r--r--npc/merchants/ammo_boxes.txt4
-rw-r--r--npc/merchants/ammo_dealer.txt2
-rw-r--r--npc/merchants/buying_shops.txt66
-rw-r--r--npc/merchants/gemstone.txt12
-rw-r--r--npc/merchants/hair_style.txt936
-rw-r--r--npc/merchants/icecream.txt8
-rw-r--r--npc/merchants/kunai_maker.txt2
-rw-r--r--npc/merchants/novice_exchange.txt11
-rw-r--r--npc/merchants/old_pharmacist.txt8
-rw-r--r--npc/merchants/refine.txt68
-rw-r--r--npc/other/arena/arena_party.txt6
-rw-r--r--npc/other/arena/arena_point.txt98
-rw-r--r--npc/other/arena/arena_room.txt11
-rw-r--r--npc/other/card_trader.txt2
-rw-r--r--npc/other/comodo_gambling.txt7
-rw-r--r--npc/other/fortune.txt14
-rw-r--r--npc/other/gm_npcs.txt2
-rw-r--r--npc/other/hugel_bingo.txt31
-rw-r--r--npc/other/marriage.txt6
-rw-r--r--npc/other/mercenary_rent.txt6
-rw-r--r--npc/other/monster_race.txt20
-rw-r--r--npc/other/turbo_track.txt288
-rw-r--r--npc/pre-re/jobs/1-1/mage.txt91
-rw-r--r--npc/pre-re/jobs/1-1/merchant.txt9
-rw-r--r--npc/pre-re/jobs/novice/novice.txt4
-rw-r--r--npc/quests/bard_quest.txt16
-rw-r--r--npc/quests/cooking_quest.txt133
-rw-r--r--npc/quests/eye_of_hellion.txt10
-rw-r--r--npc/quests/first_class/tu_sword.txt122
-rw-r--r--npc/quests/juice_maker.txt11
-rw-r--r--npc/quests/kiel_hyre_quest.txt195
-rw-r--r--npc/quests/lvl4_weapon_quest.txt64
-rw-r--r--npc/quests/obb_quest.txt2
-rw-r--r--npc/quests/quests_13_1.txt79
-rw-r--r--npc/quests/quests_13_2.txt14
-rw-r--r--npc/quests/quests_airship.txt26
-rw-r--r--npc/quests/quests_ein.txt70
-rw-r--r--npc/quests/quests_geffen.txt2
-rw-r--r--npc/quests/quests_hugel.txt6
-rw-r--r--npc/quests/quests_lighthalzen.txt72
-rw-r--r--npc/quests/quests_louyang.txt20
-rw-r--r--npc/quests/quests_morocc.txt175
-rw-r--r--npc/quests/quests_moscovia.txt68
-rw-r--r--npc/quests/quests_nameless.txt52
-rw-r--r--npc/quests/quests_niflheim.txt18
-rw-r--r--npc/quests/quests_prontera.txt18
-rw-r--r--npc/quests/quests_rachel.txt14
-rw-r--r--npc/quests/quests_umbala.txt221
-rw-r--r--npc/quests/quests_veins.txt54
-rw-r--r--npc/quests/seals/brisingamen_seal.txt14
-rw-r--r--npc/quests/seals/god_global.txt4
-rw-r--r--npc/quests/seals/megingard_seal.txt8
-rw-r--r--npc/quests/seals/sleipnir_seal.txt6
-rw-r--r--npc/quests/skills/alchemist_skills.txt148
-rw-r--r--npc/quests/thana_quest.txt34
-rw-r--r--npc/quests/the_sign_quest.txt72
-rw-r--r--npc/re/cities/brasilis.txt10
-rw-r--r--npc/re/cities/dewata.txt7
-rw-r--r--npc/re/cities/mora.txt12
-rw-r--r--npc/re/jobs/2e/kagerou_oboro.txt2
-rw-r--r--npc/re/jobs/3-1/archbishop.txt4
-rw-r--r--npc/re/jobs/3-1/rune_knight.txt2
-rw-r--r--npc/re/jobs/3-2/royal_guard.txt6
-rw-r--r--npc/re/jobs/3-2/shadow_chaser.txt12
-rw-r--r--npc/re/jobs/3-2/wanderer.txt2
-rw-r--r--npc/re/jobs/novice/academy.txt410
-rw-r--r--npc/re/merchants/3rd_trader.txt16
-rw-r--r--npc/re/merchants/alchemist.txt6
-rw-r--r--npc/re/merchants/catalog.txt12
-rw-r--r--npc/re/merchants/diamond.txt14
-rw-r--r--npc/re/merchants/enchan_mora.txt12
-rw-r--r--npc/re/merchants/refine.txt2
-rw-r--r--npc/re/mobs/fields/yuno.txt14
-rw-r--r--npc/re/quests/eden/eden_common.txt10
-rw-r--r--npc/re/quests/eden/eden_iro.txt14
-rw-r--r--npc/re/quests/eden/eden_quests.txt2
-rw-r--r--npc/re/quests/eden/eden_tutorial.txt2
-rw-r--r--npc/re/quests/quests_brasilis.txt715
-rw-r--r--npc/re/quests/quests_dewata.txt2
-rw-r--r--npc/re/quests/quests_dicastes.txt8
-rw-r--r--npc/re/quests/quests_eclage.txt44
-rw-r--r--npc/re/quests/quests_malangdo.txt47
-rw-r--r--npc/re/quests/quests_malaya.txt19
-rw-r--r--npc/re/quests/quests_mora.txt6
-rw-r--r--npc/re/woe-fe/invest_main.txt18
-rw-r--r--sql-files/item_db.sql635
-rw-r--r--sql-files/item_db_re.sql655
-rw-r--r--sql-files/main.sql1
-rw-r--r--sql-files/mob_db_re.sql1
-rw-r--r--sql-files/upgrades/2019-08-08--19-43.sql95
-rw-r--r--sql-files/upgrades/index.txt1
-rw-r--r--src/char/char.c4
-rw-r--r--src/char/int_guild.c1
-rw-r--r--src/char/int_party.c1
-rw-r--r--src/char/inter.c95
-rw-r--r--src/char/inter.h11
-rw-r--r--src/char/mapif.c198
-rw-r--r--src/char/mapif.h13
-rw-r--r--src/common/HPM.c5
-rw-r--r--src/common/HPMDataCheck.h13
-rw-r--r--src/common/mmo.h12
-rw-r--r--src/common/packets/packets2019_len_main.h271
-rw-r--r--src/common/packets/packets2019_len_re.h277
-rw-r--r--src/common/packets/packets2019_len_zero.h271
-rw-r--r--src/map/atcommand.c243
-rw-r--r--src/map/atcommand.h2
-rw-r--r--src/map/battle.c20
-rw-r--r--src/map/battle.h8
-rw-r--r--src/map/battleground.c22
-rw-r--r--src/map/channel.c4
-rw-r--r--src/map/clif.c1481
-rw-r--r--src/map/clif.h56
-rw-r--r--src/map/guild.c155
-rw-r--r--src/map/guild.h5
-rw-r--r--src/map/homunculus.c49
-rw-r--r--src/map/homunculus.h7
-rw-r--r--src/map/intif.c329
-rw-r--r--src/map/intif.h13
-rw-r--r--src/map/irc-bot.c8
-rw-r--r--src/map/itemdb.c469
-rw-r--r--src/map/itemdb.h37
-rw-r--r--src/map/log.c14
-rw-r--r--src/map/map.c48
-rw-r--r--src/map/map.h2
-rw-r--r--src/map/mapdefines.h10
-rw-r--r--src/map/messages_main.h240
-rw-r--r--src/map/messages_re.h240
-rw-r--r--src/map/messages_zero.h239
-rw-r--r--src/map/mob.c52
-rw-r--r--src/map/mob.h3
-rw-r--r--src/map/npc.c42
-rw-r--r--src/map/npc.h6
-rw-r--r--src/map/packets.h15
-rw-r--r--src/map/packets_keys_main.h17
-rw-r--r--src/map/packets_keys_zero.h14
-rw-r--r--src/map/packets_shuffle_main.h48
-rw-r--r--src/map/packets_shuffle_re.h49
-rw-r--r--src/map/packets_shuffle_zero.h46
-rw-r--r--src/map/packets_struct.h306
-rw-r--r--src/map/party.c25
-rw-r--r--src/map/party.h1
-rw-r--r--src/map/pc.c237
-rw-r--r--src/map/pc.h12
-rw-r--r--src/map/pet.c2
-rw-r--r--src/map/quest.c2
-rw-r--r--src/map/refine.c2
-rw-r--r--src/map/script.c475
-rw-r--r--src/map/script.h39
-rw-r--r--src/map/skill.c22
-rw-r--r--src/map/status.c116
-rw-r--r--src/map/status.h15
-rw-r--r--src/map/trade.c9
-rw-r--r--src/plugins/HPMHooking/HPMHooking.Defs.inc176
-rw-r--r--src/plugins/HPMHooking/HPMHooking_char.HPMHooksCore.inc68
-rw-r--r--src/plugins/HPMHooking/HPMHooking_char.HookingPoints.inc17
-rw-r--r--src/plugins/HPMHooking/HPMHooking_char.Hooks.inc463
-rw-r--r--src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc204
-rw-r--r--src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc51
-rw-r--r--src/plugins/HPMHooking/HPMHooking_map.Hooks.inc1345
-rw-r--r--src/plugins/constdb2doc.c18
-rwxr-xr-xtools/configconverter.pl1
-rw-r--r--tools/itemcombodbconverter.py112
-rw-r--r--tools/scconfigconverter.py105
-rw-r--r--tools/utils/common.py6
-rw-r--r--vcproj-16/char-server.vcxproj (renamed from vcproj-12/char-server.vcxproj)9
-rw-r--r--vcproj-16/char-server.vcxproj.filters (renamed from vcproj-12/char-server.vcxproj.filters)0
-rw-r--r--vcproj-16/login-server.vcxproj (renamed from vcproj-12/login-server.vcxproj)9
-rw-r--r--vcproj-16/login-server.vcxproj.filters (renamed from vcproj-12/login-server.vcxproj.filters)0
-rw-r--r--vcproj-16/map-server.vcxproj (renamed from vcproj-12/map-server.vcxproj)9
-rw-r--r--vcproj-16/map-server.vcxproj.filters (renamed from vcproj-12/map-server.vcxproj.filters)0
-rw-r--r--vcproj-16/plugin-HPMHooking_char.vcxproj (renamed from vcproj-12/plugin-HPMHooking_char.vcxproj)7
-rw-r--r--vcproj-16/plugin-HPMHooking_login.vcxproj (renamed from vcproj-12/plugin-HPMHooking_login.vcxproj)7
-rw-r--r--vcproj-16/plugin-HPMHooking_map.vcxproj (renamed from vcproj-12/plugin-HPMHooking_map.vcxproj)7
-rw-r--r--vcproj-16/plugin-sample.vcxproj (renamed from vcproj-12/plugin-sample.vcxproj)7
248 files changed, 31035 insertions, 7527 deletions
diff --git a/.appveyor.yml b/.appveyor.yml
index dd63715c8..4b3b03e6a 100644
--- a/.appveyor.yml
+++ b/.appveyor.yml
@@ -11,10 +11,11 @@ image: Visual Studio 2015
clone_depth: 5
environment:
matrix:
- - HerculesProject: Hercules-12.sln
- HerculesProject: Hercules-14.sln
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
HerculesProject: Hercules-15.sln
+ - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
+ HerculesProject: Hercules-16.sln
services: mysql56
build_script:
- cmd: MSBuild %HerculesProject% /t:map-server,char-server,login-server
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 72dbcf1d2..438dbc267 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -35,7 +35,7 @@ variables: &base_vars
pre_re:clang-3.9:
<<: *branch_exceptions
<<: *prerequisites
- stage: primary
+ stage: secondary
image: debian:stretch
services:
- mariadb:10.1
@@ -50,7 +50,7 @@ pre_re:clang-3.9:
re:clang-3.9:
<<: *branch_exceptions
<<: *prerequisites
- stage: primary
+ stage: secondary
image: debian:stretch
services:
- mariadb:10.1
@@ -80,7 +80,7 @@ zero-2018:clang-3.9:
pre_re:clang-4.0:
<<: *branch_exceptions
<<: *prerequisites
- stage: secondary
+ stage: primary
image: debian:stretch
services:
- mariadb:10.1
@@ -95,7 +95,7 @@ pre_re:clang-4.0:
re:clang-4.0:
<<: *branch_exceptions
<<: *prerequisites
- stage: secondary
+ stage: primary
image: debian:stretch
services:
- mariadb:10.1
@@ -194,8 +194,8 @@ zero-2018:clang-5.0:
pre_re:clang-6.0:
<<: *branch_exceptions
<<: *prerequisites
- stage: primary
- image: debian:unstable
+ stage: secondary
+ image: debian:buster
services:
- mariadb:10
variables:
@@ -209,8 +209,8 @@ pre_re:clang-6.0:
re:clang-6.0:
<<: *branch_exceptions
<<: *prerequisites
- stage: primary
- image: debian:unstable
+ stage: secondary
+ image: debian:buster
services:
- mariadb:10
variables:
@@ -225,7 +225,7 @@ zero-2018:clang-6.0:
<<: *branch_exceptions
<<: *prerequisites
stage: clients
- image: debian:unstable
+ image: debian:buster
services:
- mariadb:10
variables:
@@ -239,8 +239,8 @@ zero-2018:clang-6.0:
pre_re:clang-7:
<<: *branch_exceptions
<<: *prerequisites
- stage: secondary
- image: debian:unstable
+ stage: primary
+ image: debian:buster
services:
- mariadb:10
variables:
@@ -254,8 +254,8 @@ pre_re:clang-7:
re:clang-7:
<<: *branch_exceptions
<<: *prerequisites
- stage: secondary
- image: debian:unstable
+ stage: primary
+ image: debian:buster
services:
- mariadb:10
variables:
@@ -270,7 +270,7 @@ zero-2018:clang-7:
<<: *branch_exceptions
<<: *prerequisites
stage: clients
- image: debian:unstable
+ image: debian:buster
services:
- mariadb:10
variables:
@@ -281,6 +281,51 @@ zero-2018:clang-7:
- ./tools/ci/travis.sh build CC=clang-7 --enable-debug --enable-Werror --enable-buildbot --enable-packetver-zero --enable-packetver=20180511
- ./tools/ci/travis.sh test ragnarok ragnarok ragnarok $SQLHOST
+pre_re:clang-8:
+ <<: *branch_exceptions
+ <<: *prerequisites
+ stage: secondary
+ image: debian:unstable
+ services:
+ - mariadb:10
+ variables:
+ <<: *base_vars
+ INSTALL_PACKAGES: clang-8 mariadb-client libmariadbclient-dev-compat
+ SQLHOST: mariadb
+ script:
+ - ./tools/ci/travis.sh build CC=clang-8 --enable-debug --enable-Werror --enable-buildbot --disable-renewal
+ - ./tools/ci/travis.sh test ragnarok ragnarok ragnarok $SQLHOST
+
+re:clang-8:
+ <<: *branch_exceptions
+ <<: *prerequisites
+ stage: secondary
+ image: debian:unstable
+ services:
+ - mariadb:10
+ variables:
+ <<: *base_vars
+ INSTALL_PACKAGES: clang-8 mariadb-client libmariadbclient-dev-compat
+ SQLHOST: mariadb
+ script:
+ - ./tools/ci/travis.sh build CC=clang-8 --enable-debug --enable-Werror --enable-buildbot
+ - ./tools/ci/travis.sh test ragnarok ragnarok ragnarok $SQLHOST
+
+zero-2018:clang-8:
+ <<: *branch_exceptions
+ <<: *prerequisites
+ stage: clients
+ image: debian:unstable
+ services:
+ - mariadb:10
+ variables:
+ <<: *base_vars
+ INSTALL_PACKAGES: clang-8 mariadb-client libmariadbclient-dev-compat
+ SQLHOST: mariadb
+ script:
+ - ./tools/ci/travis.sh build CC=clang-8 --enable-debug --enable-Werror --enable-buildbot --enable-packetver-zero --enable-packetver=20180511
+ - ./tools/ci/travis.sh test ragnarok ragnarok ragnarok $SQLHOST
+
pre_re:gcc-4.8:
<<: *branch_exceptions
<<: *prerequisites
@@ -329,7 +374,7 @@ zero-2018:gcc-4.8:
pre_re:gcc-4.9:
<<: *branch_exceptions
<<: *prerequisites
- stage: primary
+ stage: secondary
image: debian:jessie
services:
- mysql:5.5
@@ -344,7 +389,7 @@ pre_re:gcc-4.9:
re:gcc-4.9:
<<: *branch_exceptions
<<: *prerequisites
- stage: primary
+ stage: secondary
image: debian:jessie
services:
- mysql:5.5
@@ -420,7 +465,7 @@ pre_re:gcc-7:
<<: *branch_exceptions
<<: *prerequisites
stage: secondary
- image: debian:unstable
+ image: debian:buster
services:
- mariadb:10
variables:
@@ -435,7 +480,7 @@ re:gcc-7:
<<: *branch_exceptions
<<: *prerequisites
stage: secondary
- image: debian:unstable
+ image: debian:buster
services:
- mariadb:10
variables:
@@ -450,7 +495,7 @@ zero-2018:gcc-7:
<<: *branch_exceptions
<<: *prerequisites
stage: clients
- image: debian:unstable
+ image: debian:buster
services:
- mariadb:10
variables:
@@ -464,8 +509,8 @@ zero-2018:gcc-7:
pre_re:gcc-8:
<<: *branch_exceptions
<<: *prerequisites
- stage: secondary
- image: debian:unstable
+ stage: primary
+ image: debian:buster
services:
- mariadb:10
variables:
@@ -479,8 +524,8 @@ pre_re:gcc-8:
re:gcc-8:
<<: *branch_exceptions
<<: *prerequisites
- stage: secondary
- image: debian:unstable
+ stage: primary
+ image: debian:buster
services:
- mariadb:10
variables:
@@ -495,7 +540,7 @@ zero-2018:gcc-8:
<<: *branch_exceptions
<<: *prerequisites
stage: clients
- image: debian:unstable
+ image: debian:buster
services:
- mariadb:10
variables:
@@ -506,179 +551,179 @@ zero-2018:gcc-8:
- ./tools/ci/travis.sh build CC=gcc-8 --enable-debug --enable-Werror --enable-buildbot --enable-packetver-zero --enable-packetver=20180511
- ./tools/ci/travis.sh test ragnarok ragnarok ragnarok $SQLHOST
-pre_re:gcc-6_i386:
+pre_re:gcc-8_i386:
<<: *branch_exceptions
<<: *prerequisites
stage: primary
image: i386/debian:stable
services:
- - mariadb:10.1
+ - mariadb:10
variables:
<<: *base_vars
- INSTALL_PACKAGES: gcc-6 mariadb-client libmariadbclient-dev-compat
+ INSTALL_PACKAGES: gcc-8 mariadb-client libmariadbclient-dev-compat
SQLHOST: mariadb
script:
- - ./tools/ci/travis.sh build CC=gcc-6 --enable-debug --enable-Werror --enable-buildbot --disable-renewal
+ - ./tools/ci/travis.sh build CC=gcc-8 --enable-debug --enable-Werror --enable-buildbot --disable-renewal
- ./tools/ci/travis.sh test ragnarok ragnarok ragnarok $SQLHOST
-re:gcc-6_i386:
+re:gcc-8_i386:
<<: *branch_exceptions
<<: *prerequisites
stage: primary
image: i386/debian:stable
services:
- - mariadb:10.1
+ - mariadb:10
variables:
<<: *base_vars
- INSTALL_PACKAGES: gcc-6 mariadb-client libmariadbclient-dev-compat
+ INSTALL_PACKAGES: gcc-8 mariadb-client libmariadbclient-dev-compat
SQLHOST: mariadb
script:
- - ./tools/ci/travis.sh build CC=gcc-6 --enable-debug --enable-Werror --enable-buildbot
+ - ./tools/ci/travis.sh build CC=gcc-8 --enable-debug --enable-Werror --enable-buildbot
- ./tools/ci/travis.sh test ragnarok ragnarok ragnarok $SQLHOST
-zero-2018:gcc-6_i386:
+zero-2018:gcc-8_i386:
<<: *branch_exceptions
<<: *prerequisites
stage: clients
image: i386/debian:stable
services:
- - mariadb:10.1
+ - mariadb:10
variables:
<<: *base_vars
- INSTALL_PACKAGES: gcc-6 mariadb-client libmariadbclient-dev-compat
+ INSTALL_PACKAGES: gcc-8 mariadb-client libmariadbclient-dev-compat
SQLHOST: mariadb
script:
- - ./tools/ci/travis.sh build CC=gcc-6 --enable-debug --enable-Werror --enable-buildbot --enable-packetver-zero --enable-packetver=20180511
+ - ./tools/ci/travis.sh build CC=gcc-8 --enable-debug --enable-Werror --enable-buildbot --enable-packetver-zero --enable-packetver=20180511
- ./tools/ci/travis.sh test ragnarok ragnarok ragnarok $SQLHOST
-pre_re:gcc-6_sanitize:
+pre_re:gcc-8_sanitize:
<<: *branch_exceptions
<<: *prerequisites
stage: secondary
- image: debian:stretch
+ image: debian:stable
services:
- - mariadb:10.1
+ - mariadb:10
variables:
<<: *base_vars
- INSTALL_PACKAGES: gcc-6 mariadb-client libmariadbclient-dev-compat
+ INSTALL_PACKAGES: gcc-8 mariadb-client libmariadbclient-dev-compat
SQLHOST: mariadb
script:
- - ./tools/ci/travis.sh build CC=gcc-6 --enable-debug --enable-Werror --enable-buildbot --disable-renewal --disable-manager --enable-sanitize=full
+ - ./tools/ci/travis.sh build CC=gcc-8 --enable-debug --enable-Werror --enable-buildbot --disable-renewal --disable-manager --enable-sanitize=full
- ./tools/ci/travis.sh test ragnarok ragnarok ragnarok $SQLHOST
-re:gcc-6_sanitize:
+re:gcc-8_sanitize:
<<: *branch_exceptions
<<: *prerequisites
stage: secondary
- image: debian:stretch
+ image: debian:stable
services:
- - mariadb:10.1
+ - mariadb:10
variables:
<<: *base_vars
- INSTALL_PACKAGES: gcc-6 mariadb-client libmariadbclient-dev-compat
+ INSTALL_PACKAGES: gcc-8 mariadb-client libmariadbclient-dev-compat
SQLHOST: mariadb
script:
- - ./tools/ci/travis.sh build CC=gcc-6 --enable-debug --enable-Werror --enable-buildbot --disable-manager --enable-sanitize=full
+ - ./tools/ci/travis.sh build CC=gcc-8 --enable-debug --enable-Werror --enable-buildbot --disable-manager --enable-sanitize=full
- ./tools/ci/travis.sh test ragnarok ragnarok ragnarok $SQLHOST
-zero-2018:gcc-6_sanitize:
+zero-2018:gcc-8_sanitize:
<<: *branch_exceptions
<<: *prerequisites
stage: clients
- image: debian:stretch
+ image: debian:stable
services:
- - mariadb:10.1
+ - mariadb:10
variables:
<<: *base_vars
- INSTALL_PACKAGES: gcc-6 mariadb-client libmariadbclient-dev-compat
+ INSTALL_PACKAGES: gcc-8 mariadb-client libmariadbclient-dev-compat
SQLHOST: mariadb
script:
- - ./tools/ci/travis.sh build CC=gcc-6 --enable-debug --enable-Werror --enable-buildbot --disable-manager --enable-sanitize=full --enable-packetver-zero --enable-packetver=20180511
+ - ./tools/ci/travis.sh build CC=gcc-8 --enable-debug --enable-Werror --enable-buildbot --disable-manager --enable-sanitize=full --enable-packetver-zero --enable-packetver=20180511
- ./tools/ci/travis.sh test ragnarok ragnarok ragnarok $SQLHOST
-pre_re:gcc-6_i386_sanitize:
+pre_re:gcc-8_i386_sanitize:
<<: *branch_exceptions
<<: *prerequisites
stage: secondary
image: i386/debian:stable
services:
- - mariadb:10.1
+ - mariadb:10
variables:
<<: *base_vars
- INSTALL_PACKAGES: gcc-6 mariadb-client libmariadbclient-dev-compat
+ INSTALL_PACKAGES: gcc-8 mariadb-client libmariadbclient-dev-compat
SQLHOST: mariadb
script:
- - ./tools/ci/travis.sh build CC=gcc-6 --enable-debug --enable-Werror --enable-buildbot --disable-renewal --disable-manager --enable-sanitize=full
+ - ./tools/ci/travis.sh build CC=gcc-8 --enable-debug --enable-Werror --enable-buildbot --disable-renewal --disable-manager --enable-sanitize=full
- ./tools/ci/travis.sh test ragnarok ragnarok ragnarok $SQLHOST
-re:gcc-6_i386_sanitize:
+re:gcc-8_i386_sanitize:
<<: *branch_exceptions
<<: *prerequisites
stage: secondary
image: i386/debian:stable
services:
- - mariadb:10.1
+ - mariadb:10
variables:
<<: *base_vars
- INSTALL_PACKAGES: gcc-6 mariadb-client libmariadbclient-dev-compat
+ INSTALL_PACKAGES: gcc-8 mariadb-client libmariadbclient-dev-compat
SQLHOST: mariadb
script:
- - ./tools/ci/travis.sh build CC=gcc-6 --enable-debug --enable-Werror --enable-buildbot --disable-manager --enable-sanitize=full
+ - ./tools/ci/travis.sh build CC=gcc-8 --enable-debug --enable-Werror --enable-buildbot --disable-manager --enable-sanitize=full
- ./tools/ci/travis.sh test ragnarok ragnarok ragnarok $SQLHOST
-zero-2018:gcc-6_i386_sanitize:
+zero-2018:gcc-8_i386_sanitize:
<<: *branch_exceptions
<<: *prerequisites
stage: clients
image: i386/debian:stable
services:
- - mariadb:10.1
+ - mariadb:10
variables:
<<: *base_vars
- INSTALL_PACKAGES: gcc-6 mariadb-client libmariadbclient-dev-compat
+ INSTALL_PACKAGES: gcc-8 mariadb-client libmariadbclient-dev-compat
SQLHOST: mariadb
script:
- - ./tools/ci/travis.sh build CC=gcc-6 --enable-debug --enable-Werror --enable-buildbot --disable-manager --enable-sanitize=full --enable-packetver-zero --enable-packetver=20180511
+ - ./tools/ci/travis.sh build CC=gcc-8 --enable-debug --enable-Werror --enable-buildbot --disable-manager --enable-sanitize=full --enable-packetver-zero --enable-packetver=20180511
- ./tools/ci/travis.sh test ragnarok ragnarok ragnarok $SQLHOST
-pre_re:gcc-6_cov:
+pre_re:gcc-8_cov:
<<: *branch_exceptions
<<: *prerequisites
stage: secondary
- image: debian:stretch
+ image: debian:buster
services:
- - mariadb:10.1
+ - mariadb:10
variables:
<<: *base_vars
- INSTALL_PACKAGES: gcc-6 gcovr mariadb-client libmariadbclient-dev-compat
+ INSTALL_PACKAGES: gcc-8 gcovr mariadb-client libmariadbclient-dev-compat
SQLHOST: mariadb
script:
- - ./tools/ci/travis.sh build CC=gcc-6 --enable-debug --enable-Werror --enable-buildbot --disable-renewal CFLAGS="-coverage" LDFLAGS="-coverage"
+ - ./tools/ci/travis.sh build CC=gcc-8 --enable-debug --enable-Werror --enable-buildbot --disable-renewal CFLAGS="-coverage" LDFLAGS="-coverage"
- ./tools/ci/travis.sh test ragnarok ragnarok ragnarok $SQLHOST
- - gcovr -r . --gcov-executable=gcov-6 -o gcov_pre.txt
- - gcovr -r . --gcov-executable=gcov-6 --html -o gcov_pre.html
+ - gcovr -r . --gcov-executable=gcov-8 -o gcov_pre.txt
+ - gcovr -r . --gcov-executable=gcov-8 --html -o gcov_pre.html
- cat gcov_pre.txt
artifacts:
paths:
- gcov_pre.*
when: on_success
-re:gcc-6_cov:
+re:gcc-8_cov:
<<: *branch_exceptions
<<: *prerequisites
stage: secondary
- image: debian:stretch
+ image: debian:buster
services:
- - mariadb:10.1
+ - mariadb:10
variables:
<<: *base_vars
- INSTALL_PACKAGES: gcc-6 gcovr mariadb-client libmariadbclient-dev-compat
+ INSTALL_PACKAGES: gcc-8 gcovr mariadb-client libmariadbclient-dev-compat
SQLHOST: mariadb
script:
- - ./tools/ci/travis.sh build CC=gcc-6 --enable-debug --enable-Werror --enable-buildbot CFLAGS="-coverage" LDFLAGS="-coverage"
+ - ./tools/ci/travis.sh build CC=gcc-8 --enable-debug --enable-Werror --enable-buildbot CFLAGS="-coverage" LDFLAGS="-coverage"
- ./tools/ci/travis.sh test ragnarok ragnarok ragnarok $SQLHOST
- - gcovr -r . --gcov-executable=gcov-6 -o gcov_re.txt
- - gcovr -r . --gcov-executable=gcov-6 --html -o gcov_re.html
+ - gcovr -r . --gcov-executable=gcov-8 -o gcov_re.txt
+ - gcovr -r . --gcov-executable=gcov-8 --html -o gcov_re.html
- cat gcov_re.txt
artifacts:
paths:
@@ -693,11 +738,11 @@ pre_re:debian-oldstable:
stage: platforms
image: debian:oldstable
services:
- - mysql:5.5
+ - mariadb:10.1
variables:
<<: *base_vars
- INSTALL_PACKAGES: gcc mysql-client libmysqlclient-dev
- SQLHOST: mysql
+ INSTALL_PACKAGES: gcc mariadb-client libmariadbclient-dev-compat
+ SQLHOST: mariadb
script:
- ./tools/ci/travis.sh build --enable-debug --enable-Werror --enable-buildbot --disable-renewal
- ./tools/ci/travis.sh test ragnarok ragnarok ragnarok $SQLHOST
@@ -708,11 +753,11 @@ re:debian-oldstable:
stage: platforms
image: debian:oldstable
services:
- - mysql:5.5
+ - mariadb:10.1
variables:
<<: *base_vars
- INSTALL_PACKAGES: gcc mysql-client libmysqlclient-dev
- SQLHOST: mysql
+ INSTALL_PACKAGES: gcc mariadb-client libmariadbclient-dev-compat
+ SQLHOST: mariadb
script:
- ./tools/ci/travis.sh build --enable-debug --enable-Werror --enable-buildbot
- ./tools/ci/travis.sh test ragnarok ragnarok ragnarok $SQLHOST
@@ -723,7 +768,7 @@ pre_re:debian-stable:
stage: platforms
image: debian:stable
services:
- - mariadb:10.1
+ - mariadb:10.3
variables:
<<: *base_vars
INSTALL_PACKAGES: gcc mariadb-client libmariadbclient-dev-compat
@@ -738,7 +783,7 @@ re:debian-stable:
stage: platforms
image: debian:stable
services:
- - mariadb:10.1
+ - mariadb:10.3
variables:
<<: *base_vars
INSTALL_PACKAGES: gcc mariadb-client libmariadbclient-dev-compat
@@ -753,7 +798,7 @@ pre_re:debian-testing:
stage: platforms
image: debian:testing
services:
- - mariadb:10.1
+ - mariadb:10.3
variables:
<<: *base_vars
INSTALL_PACKAGES: gcc mariadb-client libmariadbclient-dev-compat
@@ -768,7 +813,7 @@ re:debian-testing:
stage: platforms
image: debian:testing
services:
- - mariadb:10.1
+ - mariadb:10.3
variables:
<<: *base_vars
INSTALL_PACKAGES: gcc mariadb-client libmariadbclient-dev-compat
@@ -1045,7 +1090,7 @@ pre_re:mariadb-10.1:
<<: *branch_exceptions
<<: *prerequisites
stage: platforms
- image: debian:stable
+ image: debian:stretch
services:
- mariadb:10.1
variables:
@@ -1060,7 +1105,7 @@ re:mariadb-10.1:
<<: *branch_exceptions
<<: *prerequisites
stage: platforms
- image: debian:stable
+ image: debian:stretch
services:
- mariadb:10.1
variables:
@@ -1071,6 +1116,36 @@ re:mariadb-10.1:
- ./tools/ci/travis.sh build --enable-debug --enable-Werror --enable-buildbot
- ./tools/ci/travis.sh test ragnarok ragnarok ragnarok $SQLHOST
+pre_re:mariadb-10.3:
+ <<: *branch_exceptions
+ <<: *prerequisites
+ stage: platforms
+ image: debian:buster
+ services:
+ - mariadb:10.3
+ variables:
+ <<: *base_vars
+ INSTALL_PACKAGES: gcc mariadb-client-10.3 libmariadbclient-dev-compat
+ SQLHOST: mariadb
+ script:
+ - ./tools/ci/travis.sh build --enable-debug --enable-Werror --enable-buildbot --disable-renewal
+ - ./tools/ci/travis.sh test ragnarok ragnarok ragnarok $SQLHOST
+
+re:mariadb-10.3:
+ <<: *branch_exceptions
+ <<: *prerequisites
+ stage: platforms
+ image: debian:buster
+ services:
+ - mariadb:10.3
+ variables:
+ <<: *base_vars
+ INSTALL_PACKAGES: gcc mariadb-client-10.3 libmariadbclient-dev-compat
+ SQLHOST: mariadb
+ script:
+ - ./tools/ci/travis.sh build --enable-debug --enable-Werror --enable-buildbot
+ - ./tools/ci/travis.sh test ragnarok ragnarok ragnarok $SQLHOST
+
pre_re:mariadb-latest:
<<: *branch_exceptions
<<: *prerequisites
@@ -1150,8 +1225,8 @@ pages:
- mv gcov_*.* public/
- cp tools/doxygen/pages_index.html public/index.html
dependencies:
- - re:gcc-6_cov
- - pre_re:gcc-6_cov
+ - re:gcc-8_cov
+ - pre_re:gcc-8_cov
artifacts:
paths:
- public
diff --git a/.travis.yml b/.travis.yml
index db794efe2..43c8e4997 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -39,7 +39,7 @@ matrix:
- compiler: false
include:
- compiler: gcc
- env: LDFLAGS="-fuse-ld=gold" CONFIGURE_FLAGS="--enable-debug CC=gcc-6 --disable-manager --enable-Werror --enable-packetver=20190530 --enable-packetver-re --enable-buildbot" HPM="1"
+ env: LDFLAGS="-fuse-ld=gold" CONFIGURE_FLAGS="--enable-debug CC=gcc-6 --disable-manager --enable-Werror --enable-packetver=20190918 --enable-packetver-re --enable-buildbot" HPM="1"
addons:
apt:
sources:
@@ -52,7 +52,7 @@ matrix:
- libxml-sax-perl
- libxml-parser-perl
- compiler: clang
- env: CONFIGURE_FLAGS="--enable-debug CC=clang-5.0 --enable-Werror --enable-packetver=20190530 --enable-packetver-re --enable-buildbot"
+ env: CONFIGURE_FLAGS="--enable-debug CC=clang-5.0 --enable-Werror --enable-packetver=20190918 --enable-packetver-re --enable-buildbot"
addons:
apt:
sources:
@@ -72,7 +72,7 @@ matrix:
- gdb
- clang-5.0
- compiler: clang
- env: CONFIGURE_FLAGS="--enable-debug CC=clang-4.0 --enable-Werror --enable-packetver=20190530 --enable-packetver-re --enable-buildbot"
+ env: CONFIGURE_FLAGS="--enable-debug CC=clang-4.0 --enable-Werror --enable-packetver=20190918 --enable-packetver-re --enable-buildbot"
addons:
apt:
sources:
@@ -106,11 +106,11 @@ matrix:
- compiler: clang
env: CONFIGURE_FLAGS="--enable-debug --disable-renewal --enable-Werror --enable-buildbot"
- compiler: gcc
- env: CONFIGURE_FLAGS="--enable-debug --enable-Werror --enable-packetver=20190530 --enable-packetver-re --enable-buildbot"
+ env: CONFIGURE_FLAGS="--enable-debug --enable-Werror --enable-packetver=20190918 --enable-packetver-re --enable-buildbot"
- compiler: gcc
env: CONFIGURE_FLAGS="--enable-debug --disable-renewal --enable-Werror --enable-buildbot"
- compiler: gcc
- env: LDFLAGS="-fuse-ld=gold" CONFIGURE_FLAGS="--enable-debug --enable-sanitize=full CC=gcc-5 --disable-manager --enable-Werror --enable-packetver=20190530 --enable-packetver-re --enable-buildbot"
+ env: LDFLAGS="-fuse-ld=gold" CONFIGURE_FLAGS="--enable-debug --enable-sanitize=full CC=gcc-5 --disable-manager --enable-Werror --enable-packetver=20190918 --enable-packetver-re --enable-buildbot"
addons:
apt:
sources:
@@ -128,7 +128,7 @@ matrix:
- gdb
- gcc-5
- compiler: gcc
- env: LDFLAGS="-fuse-ld=gold" CONFIGURE_FLAGS="--enable-debug --enable-sanitize=full CC=gcc-6 --disable-manager --enable-Werror --enable-packetver=20190530 --enable-packetver-re --enable-buildbot"
+ env: LDFLAGS="-fuse-ld=gold" CONFIGURE_FLAGS="--enable-debug --enable-sanitize=full CC=gcc-6 --disable-manager --enable-Werror --enable-packetver=20190918 --enable-packetver-re --enable-buildbot"
addons:
apt:
sources:
@@ -146,7 +146,7 @@ matrix:
- gdb
- gcc-6
- compiler: gcc
- env: LDFLAGS="-fuse-ld=gold" CONFIGURE_FLAGS="--enable-debug CC=gcc-7 --disable-manager --enable-Werror --enable-packetver=20190530 --enable-packetver-re --enable-buildbot"
+ env: LDFLAGS="-fuse-ld=gold" CONFIGURE_FLAGS="--enable-debug CC=gcc-7 --disable-manager --enable-Werror --enable-packetver=20190918 --enable-packetver-re --enable-buildbot"
addons:
apt:
sources:
@@ -164,7 +164,7 @@ matrix:
- gdb
- gcc-7
- compiler: gcc
- env: LDFLAGS="-fuse-ld=gold" CONFIGURE_FLAGS="--enable-debug --enable-sanitize=full CC=gcc-8 --disable-manager --enable-Werror --enable-packetver=20190530 --enable-packetver-re --enable-buildbot"
+ env: LDFLAGS="-fuse-ld=gold" CONFIGURE_FLAGS="--enable-debug --enable-sanitize=full CC=gcc-8 --disable-manager --enable-Werror --enable-packetver=20190918 --enable-packetver-re --enable-buildbot"
addons:
apt:
sources:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 77ed1d1f0..798269c0f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,128 @@ and this project does not adhere to [Semantic Versioning](http://semver.org/spec
If you are reading this in a text editor, simply ignore this section
-->
+### [v2019.09.22] `September 22 2019`
+
+### Added
+
+- Added/updated packets, encryption keys and message tables for clients up to 2019-09-18. (#2528)
+- Added the `@changecharsex` command, to change a character's sex. (part of #2528)
+- Added support for clan names in the name packets. (part of #2528)
+- Added support for multiple Token of Siegfried item IDs. (#2515)
+- Added support for the new guild UI features in the client. (#2519)
+- Added per-item scriptable start/end rental functions, replacing the previous hardcoded functionality. See the new item DB fields `OnRentalStartScript` and `OnRentalEndScript`. (#2462, issue #140)
+- Added the `getfont()` script command, to check the player's current chat font. (part of #2462)
+- Added support for gcc-9 by disabling the array bound checks until the `ZEROED_BLOCK` related code will be fully compatible (#2536)
+- Implemented the LapineDdukDdak System. (#2336)
+- Implemented the Library Mistake Quest, allowing players to bypass the rebirth costs. (#2532)
+
+### Changed
+
+- Converted `sc_config` to libconfig. A tool to convert from the old format has been provided in `tools/scconfigconverter.py`. (#2526)
+- Converted packet `ZC_TALKBOX_CHATCONTENTS` into a struct. (part of #2528)
+- Extracted homunculus experience gain message code to a separate function. (part of #2528)
+- Changed function arguments to type `enum battle_dmg_type` where applicable. (part of #2528)
+- Changed pets, homunculi, etc. not to be loaded when autotrading. (part of #2524)
+- Changed the guild castle IDs order to match the client's. (#part of #2519)
+- Converted the item combo DB to libconfig. A tool to convert from the old format has been provided in `tools/itemcombodbconverter.py`. (#2529)
+- Changed some remaining symbols to `static`. (part of #2536)
+- Updated the gitlab-ci builds to reflect the release of Debian 10 buster. Gcc-8 is now the primary compiler used for the gcov, asan and i386 builds. (part of #2536)
+- Increased the maximum allowed item ID to int32 max, for clients supporting it. (part of #2336)
+
+### Fixed
+
+- Fixed packet `ZC_ACK_RANKING` on old (2013 and earlier) clients. (part of #2528)
+- Fixed an issue preventing homunculus auto-vaporize on death or skill reset, when the 80% HP condition isn't met. (#2524)
+- Fixed a bug that caused homunculi's HP and SP to be refilled on every login instead of just on creation. (part of #2524)
+- Fixed the intimacy requirement check for the homunculus ultimate skills. (part of #2524)
+- Fixed the MVP tombstones causing players to get stuck if they were reading their message when the MVP respawns. (#2525)
+- Fixed the MVP tombstones showing their message multiple times when clicked. (part of #2525)
+- Fixed some incorrect examples of use of `while (select(...))` in the script documentation. (#2533)
+- Corrected the item ID used by the KVM Logistic Officer. (#2527, issue #2404)
+- Fixed several subtle issues caused by the nick partial match feature, when enabled. Now the partial match is only performed for lookups requested by atcommands and client features, while a full match is used for source and script lookups. (#2523)
+- Rewritten the `itemdb_searchname_array` function, now properly supporting the items with IDs greater than 65535. (#2535)
+- Fixed support for items with IDs greater than 65535 in the constdb2doc plugin. (part of #2535)
+- Fixed a minor C standard compliance error, mixing function pointers and non-function pointers. (part of #2536)
+- Fixed the (commented out by default) custom Venom Splasher countdown timer code. (part of #2536)
+
+### [v2019.08.25] `August 25 2019`
+
+### Added
+
+- Added/updated packets, encryption keys and message tables for clients up to 2019-08-21. (#2517)
+- Added icons for the elemental resistance status changes (`SC_ARMORPROPERTY`). (#2516)
+- Added Visual Studio 2019 solution. (#2520)
+- Added new NPC ID constants. (#2521)
+
+### Changed
+
+- Converted various packets (`ZC_ADD_SKILL`, `ZC_SKILLINFO_LIST`, `ZC_SKILLINFO_UPDATE2`) into structs and added a new version for `ZC_NPC_MARKET_PURCHASE_RESULT`. (part of #2517)
+- Added missing sanity checks into many clif functions. (#2501)
+- Extended the `getequiprefinerycnt()` command to accept multiple equipment slots at the same time, returning the total refine of them. (#2512)
+- Added the path (relative to the Hercules root) to various database reading status messages. (#2513)
+- Extended `setiteminfo()` and `getiteminfo()` with additional options: `ITEMINFO_ELV_MAX`, `ITEMINFO_DELAY`, `ITEMINFO_DROPEFFECT_MODE`, `ITEMINFO_CLASS_*`, `ITEMINFO_FLAG_*`, `ITEMINFO_STACK_*`, `ITEMINFO_ITEM_USAGE_*`, `ITEMINFO_GM_LV_TRADE_OVERRIDE`. (#2518)
+
+### Fixed
+
+- Fixed packets `ZC_BROADCASTING_SPECIAL_ITEM_OBTAIN` and `ZC_MAKINGITEM_LIST`. (part of #2517)
+- Fixed an overflow in the auto bonus processing function, that made it unable to handle costume/shadow gears. (#2514, issues #1355, #1190, #2451)
+
+### Removed
+
+- Removed Visual Studio 2013 solution. (part of #2520)
+- Removed round-trips to the inter-server for packets related to whisper messages, reports to GMs, GM broadcasts, party, guild and main chat, previously needed for, now unsupported, multi-zone setups. (#2522)
+
+### [v2019.07.28] `July 28 2019`
+
+### Added
+
+- Added/updated packets, encryption keys and message tables for clients up to 2019-07-24. (#2498)
+- Added a setting to have `@autoloot` take player drop penalties/bonuses into account. See `autoloot_adjust` in `drops.conf` for details. (#2505)
+- Added a mob DB field `DamageTakenRate` to change the rate of the damage received by each monster. (#2510)
+- Added a setting to allow homunculi to obtain a portion of the EXP gained by their master. See `hom_bonus_exp_from_master` in `homunc.conf`. Note: in order to restore the previous behavior, the setting can be changed to `0`. (#2507, issue #2313)
+
+### Changed
+
+- Converted various packets (`ZC_ACK_RANKING`, `ZC_STATUS_CHANGE_ACK`, `ZC_HAT_EFFECT`) into structs. (part of #2498)
+- Changed `pc_statusup()` to send the actual stat value back to the client in case of error. (part of #2498)
+- Disabled the `@refresh` and `@refreshall` commands during NPC conversations, causing the character to be stuck on an invisible NPC dialog until relogging. (#2499)
+- Extended `@reloadmobdb` to update the currently spawned monsters. (#2500)
+- Changed the party sharing checks to avoid unnecessary SQL queries. (part of #2502)
+- Extended the `@refine` command with shortcuts to refine every normal equipment (-1), every costume equipment (-2) or every shadow equipment (-3). (#2504)
+- Extended the `@refine` command to list the costume and shadow equipments. (#part of #2504)
+- Increased the stack limit of Turisus, Asir and Pertz to unlimited and the other runestones to 60. (#2509)
+- Extended the commands `getmonsterinfo()` and `setunitdata()` / `getunitdata()` with accessors for the new `DamageTakenRate` mob DB field, using, respectively, `MOB_DMG_TAKEN_RATE` and `UDT_DAMAGE_TAKEN_RATE`. (part of #2510)
+- Converted the Guild Castle database to the libconfig format, in preparation for future updates. (#2506)
+
+### Fixed
+
+- Sanitized the use of `input()` in all the scripts to work correctly if the minimum accepted value is changed to less than zero in the configuration. It's recommended that third party scripts get updated not to assume a positive value, since the default setting may change in the future. (#2494)
+- Fixed an issue in the Sealed Shrine script, allowing to unseal multiple Baphomets under certain conditions. (#2332)
+- Fixed an issue that allowed an appropriately created party to enable experience sharing even if outside the sharing range. (#2502)
+- Corrected the cooldown after killing Wounded Morroc. (#2503)
+- Corrected `isequipped()` and `isequippedcnt()` to correctly handle costume equipment. (#2508)
+
+### [v2019.06.30] `June 30 2019`
+
+### Added
+
+- Added/updated packets, encryption keys and message tables for clients up to 2019-06-05. (#2491)
+- Added support for the new shortcuts packets in the Zero clients. (part of #2491)
+- Added support for the Summoner class in `stylist.txt`. (part of #2357, issue #2356)
+- Implemented the new `setfavoriteitemidx()` and `autofavoriteitem()` script commands. (#2427)
+- Implemented the new `@reloadnpc` atcommand, to reload a single script file. (#2476)
+- Implemented the new `identify()` and `identifyidx()` script commands and `@identifyall` atcommand. (#2487)
+
+### Changed
+
+- Suppressed unnecessary ShowWarning messages related to the `nosave`, `adjust_unit_duration` and `adjust_skill_damage` mapflags when using `@reloadscript`. (#2410, issue #2347)
+- Updated the Rune Knight, Guillotine Cross and Ranger shops with missing items. (#2343)
+
+### Fixed
+
+- Fixed monster spawns disregarding the custom names specified. (#2496, #2491, issue #2495)
+- Fixed the style range in `stylist.txt`, now starting from 1 instead of 0. (part of #2357, issue #2356)
+
### [v2019.06.02] `June 2 2019`
### Added
@@ -809,6 +931,10 @@ If you are reading this in a text editor, simply ignore this section
- New versioning scheme and project changelogs/release notes (#1853)
[Unreleased]: https://github.com/HerculesWS/Hercules/compare/stable...master
+[v2019.09.22]: https://github.com/HerculesWS/Hercules/compare/v2019.08.25...v2019.09.22
+[v2019.08.25]: https://github.com/HerculesWS/Hercules/compare/v2019.07.28...v2019.08.25
+[v2019.07.28]: https://github.com/HerculesWS/Hercules/compare/v2019.06.30...v2019.07.28
+[v2019.06.30]: https://github.com/HerculesWS/Hercules/compare/v2019.06.02...v2019.06.30
[v2019.06.02]: https://github.com/HerculesWS/Hercules/compare/v2019.05.05+4...v2019.06.02
[v2019.05.05+4]: https://github.com/HerculesWS/Hercules/compare/v2019.05.05+3...v2019.05.05+4
[v2019.05.05+3]: https://github.com/HerculesWS/Hercules/compare/v2019.05.05+2...v2019.05.05+3
diff --git a/Hercules-12.sln b/Hercules-16.sln
index c1a78b5ef..b4bece6d9 100644
--- a/Hercules-12.sln
+++ b/Hercules-16.sln
@@ -1,21 +1,21 @@

Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 14
-VisualStudioVersion = 14.0.25420.1
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.29123.88
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "char-server", "vcproj-12\char-server.vcxproj", "{D356871D-58E1-450B-967A-E4E9646175AF}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "char-server", "vcproj-16\char-server.vcxproj", "{D356871D-58E1-450B-967A-E4E9646175AF}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "login-server", "vcproj-12\login-server.vcxproj", "{D356871D-58E1-450B-967A-E5E9646175AF}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "login-server", "vcproj-16\login-server.vcxproj", "{D356871D-58E1-450B-967A-E5E9646175AF}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "map-server", "vcproj-12\map-server.vcxproj", "{D356871D-58E1-450B-967A-E6E9646175AF}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "map-server", "vcproj-16\map-server.vcxproj", "{D356871D-58E1-450B-967A-E6E9646175AF}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plugin-sample", "vcproj-12\plugin-sample.vcxproj", "{E64C56D3-CDFB-483B-900B-A62D216B6D2F}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plugin-sample", "vcproj-16\plugin-sample.vcxproj", "{E64C56D3-CDFB-483B-900B-A62D216B6D2F}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plugin-HPMHooking_map", "vcproj-12\plugin-HPMHooking_map.vcxproj", "{745D4A8C-6A68-4721-A43A-D81BF59860A1}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plugin-HPMHooking_map", "vcproj-16\plugin-HPMHooking_map.vcxproj", "{745D4A8C-6A68-4721-A43A-D81BF59860A1}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plugin-HPMHooking_char", "vcproj-12\plugin-HPMHooking_char.vcxproj", "{D495824D-24D3-4623-A28C-4CA506084A09}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plugin-HPMHooking_char", "vcproj-16\plugin-HPMHooking_char.vcxproj", "{D495824D-24D3-4623-A28C-4CA506084A09}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plugin-HPMHooking_login", "vcproj-12\plugin-HPMHooking_login.vcxproj", "{544AD8E8-0309-49DE-9F8D-F9FEA24D92F1}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "plugin-HPMHooking_login", "vcproj-16\plugin-HPMHooking_login.vcxproj", "{544AD8E8-0309-49DE-9F8D-F9FEA24D92F1}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -55,4 +55,7 @@ Global
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {5DB2664E-B4D7-4FC3-B0E2-F5E7608B9393}
+ EndGlobalSection
EndGlobal
diff --git a/conf/map/battle/drops.conf b/conf/map/battle/drops.conf
index cf09d14d9..d37aba455 100644
--- a/conf/map/battle/drops.conf
+++ b/conf/map/battle/drops.conf
@@ -151,3 +151,7 @@ alchemist_summon_reward: 1
// When picking random options for a dropped item, it does lots of iterations to choose the option to be set,
// this value limits the number of iterations to avoid making the server hang in a long loop.
option_drop_max_loop: 10
+
+// Does autoloot take into account player bonuses and penalties? (Note 1)
+// If RENEWAL_DROP, Bubble Gum, or any other modifiers are active autoloot will take them into account.
+autoloot_adjust: false
diff --git a/conf/map/battle/guild.conf b/conf/map/battle/guild.conf
index 101349a85..2cb74c2dd 100644
--- a/conf/map/battle/guild.conf
+++ b/conf/map/battle/guild.conf
@@ -45,9 +45,6 @@ guild_max_castles: 0
// 2 - like 1, but your logged off time is also decreased from the remaining cooldown (Aegis)
guild_skill_relog_delay: 2
-// Damage adjustments for WOE battles against defending Guild monsters (Note 2)
-castle_defense_rate: 100
-
// Flee penalty on gvg grounds. Official value is 20 (Note 2)
// NOTE: It's %, not absolute, so 20 is -20% of your total flee
gvg_flee_penalty: 20
diff --git a/conf/map/battle/homunc.conf b/conf/map/battle/homunc.conf
index 7ccaf8f8a..f2ed4d8d7 100644
--- a/conf/map/battle/homunc.conf
+++ b/conf/map/battle/homunc.conf
@@ -66,3 +66,6 @@ homunculus_max_level: 99
// Max level for Homunculus S
homunculus_S_max_level: 150
+
+// Bonus EXP homunculus received from master? (Note 2)
+hom_bonus_exp_from_master: 10
diff --git a/conf/messages.conf b/conf/messages.conf
index 2788f264d..42214167a 100644
--- a/conf/messages.conf
+++ b/conf/messages.conf
@@ -442,15 +442,36 @@
432: change the sex of
433: This character has been banned until
434: Char-server has been asked to %s the character '%.*s'.
-//435-449 FREE
+//435-448 FREE
// Homunculus messages
+449: Homunculus Experience Gained Base:%u (%.2f%%)
450: You already have a homunculus
// Return pet to egg message
451: You can't return your pet because your inventory is full.
452: usage @camerainfo range rotation latitude
+
+// Refinary
453: Refinery UI is not available
-//454-497 FREE
+
+// Battlegrounds
+454: Server : %s is leaving the battlefield...
+455: Server : %s has been afk-kicked from the battlefield...
+456: You are a deserter! Wait %u minute(s) before you can apply again
+457: You are a deserter! Wait %u seconds before you can apply again
+458: You can't reapply to this arena so fast. Apply to the different arena or wait %u minute(s)
+459: You can't reapply to this arena so fast. Apply to the different arena or wait %u seconds
+460: Can't apply: not enough members in your team/guild that have not entered the queue in individual mode, minimum is %d
+461: Can't apply: not enough members in your team/guild, minimum is %d
+462: Can't apply: not enough members in your team/party that have not entered the queue in individual mode, minimum is %d
+463: Can't apply: not enough members in your team/party, minimum is %d
+464: Server : %s has quit the game...
+// IRC
+465: [ #%s ] User IRC.%s left the channel. [Quit: %s]
+466: [ #%s ] User IRC.%s left the channel. [%s]
+467: [ #%s ] User IRC.%s is now known as IRC.%s
+468: [ #%s ] User IRC.%s joined the channel.
+// 469-497 FREE
// Messages of others (not for GM commands)
// ----------------------------------------
@@ -478,7 +499,8 @@
// mail system
//----------------------
510: You have %d new emails (%d unread)
-//511-537 FREE
+511: Inbox is full (Max %d). Delete some mails.
+// 512-537 FREE
// Trade Spoof Messages
538: Hack on trade: character '%s' (account: %d) try to trade more items that he has.
@@ -661,7 +683,28 @@
879: You have become the Guild Master!
880: You have been recovered!
881: Shop is out of stock! Come again later!
-//882-899 FREE
+
+// Frost Joker / Scream text for monster (MobName : SkillName !!)
+882: %s : %s !!
+// Cursed Circle
+883: You are too close to a stone or emperium to do this skill
+//
+884: Skill Failed. [%s] requires %dx %s.
+885: Removed %dz.
+886: Gained %dz.
+887: %s stole an Unknown Item (id: %i).
+888: %s stole %s.
+889: Experience Gained Base:%"PRIu64" (%.2f%%) Job:%"PRIu64" (%.2f%%)
+890: [KS Warning!! - Owner : %s]
+891: [Watch out! %s is trying to KS you!]
+892: Growth: hp:%d sp:%d str(%.2f) agi(%.2f) vit(%.2f) int(%.2f) dex(%.2f) luk(%.2f)
+893: [ Kill Steal Protection Disabled. KS is allowed in this map ]
+894: %s is in autotrade mode and cannot receive whispered messages.
+// 895 FREE
+896: Base EXP : %d%% | Base Drop: %d%% | Base Death Penalty: %d%%
+897: #%s '%s' joined
+898: #%s '%s' left
+// 899 FREE
//------------------------------------
// More atcommands message
@@ -759,18 +802,18 @@
//995 FREE
-// @refine
+// @refine - Part 1
996: Please enter a position bitmask and an amount (usage: @refine <equip position> <+/- amount>).
-997: %d: Lower Headgear
-998: %d: Right Hand
+997: %d: Headgear (Low)
+998: %d: Hand (Right)
999: %d: Garment
-1000: %d: Left Accessory
+1000: %d: Accessory (Left)
1001: %d: Body Armor
-1002: %d: Left Hand
+1002: %d: Hand (Left)
1003: %d: Shoes
-1004: %d: Right Accessory
-1005: %d: Top Headgear
-1006: %d: Mid Headgear
+1004: %d: Accessory (Right)
+1005: %d: Headgear (Top)
+1006: %d: Headgear (Mid)
// @produce
1007: Please enter at least one item name/ID (usage: @produce <equip name/ID> <element> <# of very's>).
@@ -1573,7 +1616,22 @@
// @dropall
1500: Usage: @dropall {<type>}
1501: Type List: (default) all = -1, healing = 0, usable = 2, etc = 3, weapon = 4, armor = 5, card = 6, petegg = 7, petarmor = 8, ammo = 10, delayed-consumable = 11, cash = 18
-1502: %d items are dropped!
+1502: %d items are dropped (%d skipped)!
+
+// @refine - Part 2
+1503: %d: Costume Headgear (Top)
+1504: %d: Costume Headgear (Mid)
+1505: %d: Costume Headgear (Low)
+1506: %d: Costume Garment
+1507: %d: Shadow Armor
+1508: %d: Shadow Weapon
+1509: %d: Shadow Shield
+1510: %d: Shadow Shoes
+1511: %d: Shadow Accessory (Right)
+1512: %d: Shadow Accessory (Left)
+1513: %d: Refine All Equip (General)
+1514: %d: Refine All Equip (Costume)
+1515: %d: Refine All Equip (Shadow)
//Custom translations
import: conf/import/msg_conf.txt
diff --git a/configure b/configure
index 4ab9057e8..957398296 100755
--- a/configure
+++ b/configure
@@ -1,5 +1,5 @@
#! /bin/sh
-# From configure.ac 5b2340b4d.
+# From configure.ac 76896e850.
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.69.
#
@@ -7986,6 +7986,94 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wno-array-bounds" >&5
+$as_echo_n "checking whether $CC supports -Wno-array-bounds... " >&6; }
+ OLD_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Werror -Wno-array-bounds"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int foo;
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ # Recent versions of gcc don't fail if -Wno-foo is not recognized
+ # (unless there are also other warnings), so we also check for -Wfoo
+ # which always fails if not supported
+ CFLAGS="$OLD_CFLAGS -Werror -Warray-bounds"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int foo;
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ CFLAGS="$OLD_CFLAGS -Wno-array-bounds"
+ # Optionally, run a test
+ if test "x" != "x"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC can actually use -Wno-array-bounds" >&5
+$as_echo_n "checking whether $CC can actually use -Wno-array-bounds... " >&6; }
+ CFLAGS="$OLD_CFLAGS -Werror -Warray-bounds"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: not needed but enabled" >&5
+$as_echo "not needed but enabled" >&6; }
+ CFLAGS="$OLD_CFLAGS"
+
+else
+
+ CFLAGS="$OLD_CFLAGS -Werror -Wno-array-bounds"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ CFLAGS="$OLD_CFLAGS -Wno-array-bounds"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ CFLAGS="$OLD_CFLAGS"
+
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ CFLAGS="$OLD_CFLAGS"
+
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ CFLAGS="$OLD_CFLAGS"
+
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+
# Certain versions of gcc make -Wshadow completely useless by making it flood
# you with unnecessary warnings <https://lkml.org/lkml/2006/11/28/239>
# Let's check if we can really use it
diff --git a/configure.ac b/configure.ac
index ec9e35cfe..cbb9a5c46 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1090,6 +1090,7 @@ AC_CHECK_COMPILER_WNOFLAG(format-nonliteral)
AC_CHECK_COMPILER_WNOFLAG(switch)
AC_CHECK_COMPILER_WNOFLAG(missing-field-initializers)
AC_CHECK_COMPILER_WNOFLAG(suggest-attribute=format)
+AC_CHECK_COMPILER_WNOFLAG(array-bounds)
# Certain versions of gcc make -Wshadow completely useless by making it flood
# you with unnecessary warnings <https://lkml.org/lkml/2006/11/28/239>
diff --git a/db/castle_db.conf b/db/castle_db.conf
new file mode 100644
index 000000000..c50d04c48
--- /dev/null
+++ b/db/castle_db.conf
@@ -0,0 +1,471 @@
+//================= Hercules Database =====================================
+//= _ _ _
+//= | | | | | |
+//= | |_| | ___ _ __ ___ _ _| | ___ ___
+//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __|
+//= | | | | __/ | | (__| |_| | | __/\__ \
+//= \_| |_/\___|_| \___|\__,_|_|\___||___/
+//================= License ===============================================
+//= This file is part of Hercules.
+//= http://herc.ws - http://github.com/HerculesWS/Hercules
+//=
+//= Copyright (C) 2019 Hercules Dev Team
+//= Copyright (C) 2019 Asheraf
+//=
+//= Hercules is free software: you can redistribute it and/or modify
+//= it under the terms of the GNU General Public License as published by
+//= the Free Software Foundation, either version 3 of the License, or
+//= (at your option) any later version.
+//=
+//= This program is distributed in the hope that it will be useful,
+//= but WITHOUT ANY WARRANTY; without even the implied warranty of
+//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+//= GNU General Public License for more details.
+//=
+//= You should have received a copy of the GNU General Public License
+//= along with this program. If not, see <http://www.gnu.org/licenses/>.
+//=========================================================================
+//= Castle Database
+//=========================================================================
+
+castle_db: (
+/**************************************************************************
+ ************* Entry structure ********************************************
+ **************************************************************************
+{
+ // ================ Mandatory fields ==============================
+ CastleID: (int) Unique ID of the castle. Must remain unique across all map-servers.
+ MapName: (string) Map name to be considered as the castle map.
+ CastleName: (string) Name of the castle (used by scripts and guardian name tags)
+ OnGuildBreakEventName: (string) NPC unique name to invoke ::OnGuildBreak on, when a occupied
+ castle is abandoned during guild break.
+ // ================ Optional fields ===============================
+ SiegeType: (string, default to SIEGE_TYPE_FE) define siege type
+ EnableClientWarp: (bool, default to false) enable or disable client teleport features
+ ClientWarp: {
+ Position: (int, int) x, y position of warp request
+ ZenyCost: (int) The zeny cost of warp
+ ZenyCostSiegeTime: (int) The zeny cost of warp durring woe
+ }
+},
+**************************************************************************/
+//================
+// Prontera
+//================
+{
+ CastleID: 1
+ MapName: "prtg_cas01"
+ CastleName: "Kriemhild" // kRO : Creamhilt
+ OnGuildBreakEventName: "Agit#prtg_cas01"
+ EnableClientWarp: true
+ ClientWarp: {
+ Position: (107, 180)
+ ZenyCost: 100
+ ZenyCostSiegeTime: 100000
+ }
+},
+{
+ CastleID: 2
+ MapName: "prtg_cas02"
+ CastleName: "Swanhild" // kRO : Sbanhealt
+ OnGuildBreakEventName: "Agit#prtg_cas02"
+ EnableClientWarp: true
+ ClientWarp: {
+ Position: (94, 56)
+ ZenyCost: 100
+ ZenyCostSiegeTime: 100000
+ }
+},
+{
+ CastleID: 3
+ MapName: "prtg_cas03"
+ CastleName: "Fadhgridh" // kRO : Lazrigees
+ OnGuildBreakEventName: "Agit#prtg_cas03"
+ EnableClientWarp: true
+ ClientWarp: {
+ Position: (46, 97)
+ ZenyCost: 100
+ ZenyCostSiegeTime: 100000
+ }
+},
+{
+ CastleID: 4
+ MapName: "prtg_cas04"
+ CastleName: "Skoegul" // kRO : Squagul
+ OnGuildBreakEventName: "Agit#prtg_cas04"
+ EnableClientWarp: true
+ ClientWarp: {
+ Position: (260, 262)
+ ZenyCost: 100
+ ZenyCostSiegeTime: 100000
+ }
+},
+{
+ CastleID: 5
+ MapName: "prtg_cas05"
+ CastleName: "Gondul" // kRO : Guindull
+ OnGuildBreakEventName: "Agit#prtg_cas05"
+ EnableClientWarp: true
+ ClientWarp: {
+ Position: (26, 38)
+ ZenyCost: 100
+ ZenyCostSiegeTime: 100000
+ }
+},
+//================
+// Al De Baran
+//================
+{
+ CastleID: 6
+ MapName: "aldeg_cas01"
+ CastleName: "Neuschwanstein" // kRO : Noisyubantian
+ OnGuildBreakEventName: "Agit#aldeg_cas01"
+ EnableClientWarp: true
+ ClientWarp: {
+ Position: (212, 175)
+ ZenyCost: 100
+ ZenyCostSiegeTime: 100000
+ }
+},
+{
+ CastleID: 7
+ MapName: "aldeg_cas02"
+ CastleName: "Hohenschwangau" // kRO : Hohensyubangawoo
+ OnGuildBreakEventName: "Agit#aldeg_cas02"
+ EnableClientWarp: true
+ ClientWarp: {
+ Position: (82, 71)
+ ZenyCost: 100
+ ZenyCostSiegeTime: 100000
+ }
+},
+{
+ CastleID: 8
+ MapName: "aldeg_cas03"
+ CastleName: "Nuernberg" // kRO : Nyirenverk
+ OnGuildBreakEventName: "Agit#aldeg_cas03"
+ EnableClientWarp: true
+ ClientWarp: {
+ Position: (109, 112)
+ ZenyCost: 100
+ ZenyCostSiegeTime: 100000
+ }
+},
+{
+ CastleID: 9
+ MapName: "aldeg_cas04"
+ CastleName: "Wuerzburg" // kRO : Byirtsburi
+ OnGuildBreakEventName: "Agit#aldeg_cas04"
+ EnableClientWarp: true
+ ClientWarp: {
+ Position: (60, 116)
+ ZenyCost: 100
+ ZenyCostSiegeTime: 100000
+ }
+},
+{
+ CastleID: 10
+ MapName: "aldeg_cas05"
+ CastleName: "Rothenburg" // kRO : Rotenburk
+ OnGuildBreakEventName: "Agit#aldeg_cas05"
+ EnableClientWarp: true
+ ClientWarp: {
+ Position: (61, 185)
+ ZenyCost: 100
+ ZenyCostSiegeTime: 100000
+ }
+},
+//================
+// Geffen
+//================
+{
+ CastleID: 11
+ MapName: "gefg_cas01"
+ CastleName: "Repherion" // kRO : Reprion
+ OnGuildBreakEventName: "Agit#gefg_cas01"
+ EnableClientWarp: true
+ ClientWarp: {
+ Position: (40, 43)
+ ZenyCost: 100
+ ZenyCostSiegeTime: 100000
+ }
+},
+{
+ CastleID: 12
+ MapName: "gefg_cas02"
+ CastleName: "Eeyolbriggar" // kRO : Yolbriger
+ OnGuildBreakEventName: "Agit#gefg_cas02"
+ EnableClientWarp: true
+ ClientWarp: {
+ Position: (22, 66)
+ ZenyCost: 100
+ ZenyCostSiegeTime: 100000
+ }
+},
+{
+ CastleID: 13
+ MapName: "gefg_cas03"
+ CastleName: "Yesnelph" // kRO : Isinlife
+ OnGuildBreakEventName: "Agit#gefg_cas03"
+ EnableClientWarp: true
+ ClientWarp: {
+ Position: (112, 23)
+ ZenyCost: 100
+ ZenyCostSiegeTime: 100000
+ }
+},
+{
+ CastleID: 14
+ MapName: "gefg_cas04"
+ CastleName: "Bergel" // kRO : Berigel
+ OnGuildBreakEventName: "Agit#gefg_cas04"
+ EnableClientWarp: true
+ ClientWarp: {
+ Position: (58, 46)
+ ZenyCost: 100
+ ZenyCostSiegeTime: 100000
+ }
+},
+{
+ CastleID: 15
+ MapName: "gefg_cas05"
+ CastleName: "Mersetzdeitz" // kRO : Melsedetsu
+ OnGuildBreakEventName: "Agit#gefg_cas05"
+ EnableClientWarp: true
+ ClientWarp: {
+ Position: (66, 48)
+ ZenyCost: 100
+ ZenyCostSiegeTime: 100000
+ }
+},
+//================
+// Payon
+//================
+{
+ CastleID: 16
+ MapName: "payg_cas01"
+ CastleName: "Bright Arbor" // kRO : Mingting
+ OnGuildBreakEventName: "Agit#payg_cas01"
+ EnableClientWarp: true
+ ClientWarp: {
+ Position: (115, 57)
+ ZenyCost: 100
+ ZenyCostSiegeTime: 100000
+ }
+},
+{
+ CastleID: 17
+ MapName: "payg_cas02"
+ CastleName: "Scarlet Palace" // kRO : Tiantan
+ OnGuildBreakEventName: "Agit#payg_cas02"
+ EnableClientWarp: true
+ ClientWarp: {
+ Position: (26, 265)
+ ZenyCost: 100
+ ZenyCostSiegeTime: 100000
+ }
+},
+{
+ CastleID: 18
+ MapName: "payg_cas03"
+ CastleName: "Holy Shadow" // kRO : Fuying
+ OnGuildBreakEventName: "Agit#payg_cas03"
+ EnableClientWarp: true
+ ClientWarp: {
+ Position: (43, 264)
+ ZenyCost: 100
+ ZenyCostSiegeTime: 100000
+ }
+},
+{
+ CastleID: 19
+ MapName: "payg_cas04"
+ CastleName: "Sacred Altar" // kRO : Honglou
+ OnGuildBreakEventName: "Agit#payg_cas04"
+ EnableClientWarp: true
+ ClientWarp: {
+ Position: (36, 272)
+ ZenyCost: 100
+ ZenyCostSiegeTime: 100000
+ }
+},
+{
+ CastleID: 20
+ MapName: "payg_cas05"
+ CastleName: "Bamboo Grove Hill" // kRO : Zhulinxian
+ OnGuildBreakEventName: "Agit#payg_cas05"
+ EnableClientWarp: true
+ ClientWarp: {
+ Position: (274, 246)
+ ZenyCost: 100
+ ZenyCostSiegeTime: 100000
+ }
+},
+//================
+// Rachel
+//================
+{
+ CastleID: 21
+ MapName: "arug_cas01"
+ CastleName: "Mardol" // kRO : Mardol
+ OnGuildBreakEventName: "Manager#arug_cas01"
+ SiegeType: "SIEGE_TYPE_SE"
+ EnableClientWarp: true
+ ClientWarp: {
+ Position: (77, 371)
+ ZenyCost: 100
+ ZenyCostSiegeTime: 100000
+ }
+},
+{
+ CastleID: 22
+ MapName: "arug_cas02"
+ CastleName: "Cyr" // kRO : Cyr
+ OnGuildBreakEventName: "Manager#arug_cas02"
+ SiegeType: "SIEGE_TYPE_SE"
+ EnableClientWarp: true
+ ClientWarp: {
+ Position: (301, 332)
+ ZenyCost: 100
+ ZenyCostSiegeTime: 100000
+ }
+},
+{
+ CastleID: 23
+ MapName: "arug_cas03"
+ CastleName: "Horn" // kRO : Horn
+ OnGuildBreakEventName: "Manager#arug_cas03"
+ SiegeType: "SIEGE_TYPE_SE"
+ EnableClientWarp: true
+ ClientWarp: {
+ Position: (322, 91)
+ ZenyCost: 100
+ ZenyCostSiegeTime: 100000
+ }
+},
+{
+ CastleID: 24
+ MapName: "arug_cas04"
+ CastleName: "Gefn" // kRO : Gefn
+ OnGuildBreakEventName: "Manager#arug_cas04"
+ SiegeType: "SIEGE_TYPE_SE"
+ EnableClientWarp: true
+ ClientWarp: {
+ Position: (322, 91)
+ ZenyCost: 100
+ ZenyCostSiegeTime: 100000
+ }
+},
+{
+ CastleID: 25
+ MapName: "arug_cas05"
+ CastleName: "Bandis" // kRO : Bandis
+ OnGuildBreakEventName: "Manager#arug_cas05"
+ SiegeType: "SIEGE_TYPE_SE"
+ EnableClientWarp: true
+ ClientWarp: {
+ Position: (322, 91)
+ ZenyCost: 100
+ ZenyCostSiegeTime: 100000
+ }
+},
+//================
+// Yuno
+//================
+{
+ CastleID: 26
+ MapName: "schg_cas01"
+ CastleName: "Himinn" // kRO : Himinn
+ OnGuildBreakEventName: "Manager#schg_cas01"
+ SiegeType: "SIEGE_TYPE_SE"
+ EnableClientWarp: true
+ ClientWarp: {
+ Position: (233, 300)
+ ZenyCost: 100
+ ZenyCostSiegeTime: 100000
+ }
+},
+{
+ CastleID: 27
+ MapName: "schg_cas02"
+ CastleName: "Andlangr" // kRO : Andlangr
+ OnGuildBreakEventName: "Manager#schg_cas02"
+ SiegeType: "SIEGE_TYPE_SE"
+ EnableClientWarp: true
+ ClientWarp: {
+ Position: (101, 372)
+ ZenyCost: 100
+ ZenyCostSiegeTime: 100000
+ }
+},
+{
+ CastleID: 28
+ MapName: "schg_cas03"
+ CastleName: "Viblainn" // kRO : Viblainn
+ OnGuildBreakEventName: "Manager#schg_cas03"
+ SiegeType: "SIEGE_TYPE_SE"
+ EnableClientWarp: true
+ ClientWarp: {
+ Position: (81, 94)
+ ZenyCost: 100
+ ZenyCostSiegeTime: 100000
+ }
+},
+{
+ CastleID: 29
+ MapName: "schg_cas04"
+ CastleName: "Hljod" // kRO : Hljod
+ OnGuildBreakEventName: "Manager#schg_cas04"
+ SiegeType: "SIEGE_TYPE_SE"
+ EnableClientWarp: true
+ ClientWarp: {
+ Position: (233, 300)
+ ZenyCost: 100
+ ZenyCostSiegeTime: 100000
+ }
+},
+{
+ CastleID: 30
+ MapName: "schg_cas05"
+ CastleName: "Skidbladnir" // kRO : Skidbladnir
+ OnGuildBreakEventName: "Manager#schg_cas05"
+ SiegeType: "SIEGE_TYPE_SE"
+ EnableClientWarp: true
+ ClientWarp: {
+ Position: (233, 300)
+ ZenyCost: 100
+ ZenyCostSiegeTime: 100000
+ }
+},
+//================
+// Novice Guilds
+//================
+{
+ CastleID: 31
+ MapName: "nguild_prt"
+ CastleName: "Fire"
+ OnGuildBreakEventName: "Agit_N04"
+ SiegeType: "SIEGE_TYPE_TE"
+},
+{
+ CastleID: 32
+ MapName: "nguild_alde"
+ CastleName: "Earth"
+ OnGuildBreakEventName: "Agit_N01"
+ SiegeType: "SIEGE_TYPE_TE"
+},
+{
+ CastleID: 33
+ MapName: "nguild_gef"
+ CastleName: "Air"
+ OnGuildBreakEventName: "Agit_N02"
+ SiegeType: "SIEGE_TYPE_TE"
+},
+{
+ CastleID: 34
+ MapName: "nguild_pay"
+ CastleName: "Water"
+ OnGuildBreakEventName: "Agit_N03"
+ SiegeType: "SIEGE_TYPE_TE"
+},
+)
diff --git a/db/castle_db.txt b/db/castle_db.txt
deleted file mode 100644
index 12e222eb6..000000000
--- a/db/castle_db.txt
+++ /dev/null
@@ -1,74 +0,0 @@
-// Guild Castles Database
-//
-// Structure of Database:
-// CastleID,MapName,CastleName,OnGuildBreakEventName,Flag
-//
-// 01. CastleID Unique ID of the castle. Must remain unique across all map-servers.
-// 02. MapName Map name to be considered as the castle map.
-// 03. CastleName Name of the castle (used by scripts and guardian name tags).
-// 04. OnGuildBreakEventName NPC unique name to invoke ::OnGuildBreak on, when a occupied
-// castle is abandoned during guild break.
-// 05. Flag Switch flag (reserved as of athena-dev mod0796~0801, not used by server).
-
-
-//================
-// Al De Baran
-//================
-0,aldeg_cas01,Neuschwanstein,Agit#aldeg_cas01,1 // kRO : Noisyubantian
-1,aldeg_cas02,Hohenschwangau,Agit#aldeg_cas02,1 // kRO : Hohensyubangawoo
-2,aldeg_cas03,Nuernberg,Agit#aldeg_cas03,1 // kRO : Nyirenverk
-3,aldeg_cas04,Wuerzburg,Agit#aldeg_cas04,1 // kRO : Byirtsburi
-4,aldeg_cas05,Rothenburg,Agit#aldeg_cas05,1 // kRO : Rotenburk
-
-//================
-// Geffen
-//================
-5,gefg_cas01,Repherion,Agit#gefg_cas01,1 // kRO : Reprion
-6,gefg_cas02,Eeyolbriggar,Agit#gefg_cas02,1 // kRO : Yolbriger
-7,gefg_cas03,Yesnelph,Agit#gefg_cas03,1 // kRO : Isinlife
-8,gefg_cas04,Bergel,Agit#gefg_cas04,1 // kRO : Berigel
-9,gefg_cas05,Mersetzdeitz,Agit#gefg_cas05,1 // kRO : Melsedetsu
-
-//================
-// Payon
-//================
-10,payg_cas01,Bright Arbor,Agit#payg_cas01,1 // kRO : Mingting
-11,payg_cas02,Scarlet Palace,Agit#payg_cas02,1 // kRO : Tiantan
-12,payg_cas03,Holy Shadow,Agit#payg_cas03,1 // kRO : Fuying
-13,payg_cas04,Sacred Altar,Agit#payg_cas04,1 // kRO : Honglou
-14,payg_cas05,Bamboo Grove Hill,Agit#payg_cas05,1 // kRO : Zhulinxian
-
-//================
-// Prontera
-//================
-15,prtg_cas01,Kriemhild,Agit#prtg_cas01,1 // kRO : Creamhilt
-16,prtg_cas02,Swanhild,Agit#prtg_cas02,1 // kRO : Sbanhealt
-17,prtg_cas03,Fadhgridh,Agit#prtg_cas03,1 // kRO : Lazrigees
-18,prtg_cas04,Skoegul,Agit#prtg_cas04,1 // kRO : Squagul
-19,prtg_cas05,Gondul,Agit#prtg_cas05,1 // kRO : Guindull
-
-//================
-// Novice Guilds
-//================
-20,nguild_alde,Earth,Agit_N01,2
-21,nguild_gef,Air,Agit_N02,2
-22,nguild_pay,Water,Agit_N03,2
-23,nguild_prt,Fire,Agit_N04,2
-
-//================
-// Yuno
-//================
-24,schg_cas01,Himinn,Manager#schg_cas01,1 // kRO : Himinn
-25,schg_cas02,Andlangr,Manager#schg_cas02,1 // kRO : Andlangr
-26,schg_cas03,Viblainn,Manager#schg_cas03,1 // kRO : Viblainn
-27,schg_cas04,Hljod,Manager#schg_cas04,1 // kRO : Hljod
-28,schg_cas05,Skidbladnir,Manager#schg_cas05,1 // kRO : Skidbladnir
-
-//================
-// Rachel
-//================
-29,arug_cas01,Mardol,Manager#arug_cas01,1 // kRO : Mardol
-30,arug_cas02,Cyr,Manager#arug_cas02,1 // kRO : Cyr
-31,arug_cas03,Horn,Manager#arug_cas03,1 // kRO : Horn
-32,arug_cas04,Gefn,Manager#arug_cas04,1 // kRO : Gefn
-33,arug_cas05,Bandis,Manager#arug_cas05,1 // kRO : Bandis
diff --git a/db/constants.conf b/db/constants.conf
index f1283b26e..3d1f9202d 100644
--- a/db/constants.conf
+++ b/db/constants.conf
@@ -1508,29 +1508,30 @@ constants_db: {
}
comment__: "getmonsterinfo"
- MOB_NAME: 0
- MOB_LV: 1
- MOB_MAXHP: 2
- MOB_BASEEXP: 3
- MOB_JOBEXP: 4
- MOB_ATK1: 5
- MOB_ATK2: 6
- MOB_DEF: 7
- MOB_MDEF: 8
- MOB_STR: 9
- MOB_AGI: 10
- MOB_VIT: 11
- MOB_INT: 12
- MOB_DEX: 13
- MOB_LUK: 14
- MOB_RANGE: 15
- MOB_RANGE2: 16
- MOB_RANGE3: 17
- MOB_SIZE: 18
- MOB_RACE: 19
- MOB_ELEMENT: 20
- MOB_MODE: 21
- MOB_MVPEXP: 22
+ MOB_NAME: 0
+ MOB_LV: 1
+ MOB_MAXHP: 2
+ MOB_BASEEXP: 3
+ MOB_JOBEXP: 4
+ MOB_ATK1: 5
+ MOB_ATK2: 6
+ MOB_DEF: 7
+ MOB_MDEF: 8
+ MOB_STR: 9
+ MOB_AGI: 10
+ MOB_VIT: 11
+ MOB_INT: 12
+ MOB_DEX: 13
+ MOB_LUK: 14
+ MOB_RANGE: 15
+ MOB_RANGE2: 16
+ MOB_RANGE3: 17
+ MOB_SIZE: 18
+ MOB_RACE: 19
+ MOB_ELEMENT: 20
+ MOB_MODE: 21
+ MOB_MVPEXP: 22
+ MOB_DMG_TAKEN_RATE: 23
comment__: "mercenary guilds"
ARCH_MERC_GUILD: 0
@@ -3576,11 +3577,38 @@ constants_db: {
4_M_POPFESTA: 10251
4_BONFIRE: 10252
4_PCCOUNT: 10253
+ 4_LAVAGOLEM: 10254
+ 4_F_IA: 10255
+ 4_LOCKE: 10256
+ 4_LIL_LIF: 10257
+ 4_LIL_LIF2: 10258
+ 4_F_DRAGONHAT: 10259
+ 4_M_DRAGONHAT: 10260
+ JP_NPC02: 10261
+ JP_NPC03: 10262
+ JP_NPC04: 10263
+ JP_NPC05: 10264
+ JP_NPC06: 10265
+ JP_NPC07: 10266
+ JP_NPC08: 10267
+ JP_NPC09: 10268
+ JP_NPC10: 10269
+ 4_FIRERING: 10270
4_SCATLETON: 10271
+ 4_JP_AB_NPC_001: 10272
+ 4_JP_AB_NPC_002: 10273
+ 4_JP_AB_NPC_003: 10274
+ 4_JP_AB_NPC_004: 10275
+ 4_JP_AB_NPC_005: 10276
+ 4_JP_AB_NPC_006: 10277
+ 4_JP_AB_NPC_007: 10278
+ 4_JP_AB_NPC_008: 10279
4_JJAK: 10280
4_M_SNOWMAN_B: 10281
4_M_SNOWMAN_R: 10282
4_M_SNOWMAN_G: 10283
+ WARPEFFECTNPC: 10284
+ 4_HEN: 10285
4_F_DANGDANG: 10286
4_M_DANGDANG: 10287
4_F_DANGDANG1: 10288
@@ -3605,6 +3633,39 @@ constants_db: {
4_ED_OSCAR: 10307
4_ED_ORB: 10308
4_ED_FENCE: 10309
+ 4_M_ANDREA: 10310
+ 4_M_ANDREA_D: 10311
+ 4_F_ANES: 10312
+ 4_F_ANES_D: 10313
+ 4_M_SILVANO: 10314
+ 4_M_SILVANO_D: 10315
+ 4_F_CECILIA: 10316
+ 4_F_CECILIA_D: 10317
+ 4_M_MD_SEYREN: 10318
+ 4_M_MD_EREMES: 10319
+ 4_M_MD_HARWORD: 10320
+ 4_F_MD_MAGALETA: 10321
+ 4_F_MD_SHECIL: 10322
+ 4_F_MD_KATRINN: 10323
+ 4_M_MD_SEYREN_H: 10324
+ 4_M_MD_EREMES_H: 10325
+ 4_M_MD_HARWORD_H: 10326
+ 4_F_MD_MAGALETA_H: 10327
+ 4_F_MD_SHECIL_H: 10328
+ 4_F_MD_KATRINN_H: 10329
+ 4_M_MD_SEYREN_D: 10330
+ 4_M_MD_EREMES_D: 10331
+ 4_M_MD_HARWORD_D: 10332
+ 4_F_MD_MAGALETA_D: 10333
+ 4_F_MD_SHECIL_D: 10334
+ 4_F_MD_KATRINN_D: 10335
+ 4_F_MD_YGNIZEM: 10336
+ 4_F_ERENE: 10337
+ 4_M_EINCPTMINER: 10338
+ 4_F_EINRESERCHER: 10339
+ 4_F_REINDEER: 10340
+ 4_PIGOCTO: 10341
+ 4_JP_16TH: 10343
comment__: "Mercenary IDs"
MER_LIF: 6001
diff --git a/db/item_db2.conf b/db/item_db2.conf
index 8a2d8e429..ed673c5ea 100644
--- a/db/item_db2.conf
+++ b/db/item_db2.conf
@@ -117,6 +117,8 @@ item_db: (
">
OnEquipScript: <" OnEquip Script (can also be multi-line) ">
OnUnequipScript: <" OnUnequip Script (can also be multi-line) ">
+ OnRentalStartScript: <" On item renting script, gets called after item is created in inventory (can also be multi-line) ">
+ OnRentalEndScript: <" On item rent end/expire script, gets called after item is removed from inventory (can also be multi-line) ">
// ================ Optional fields (item_db2 only) ===============
Inherit: true/false (boolean, if true, inherit the values
that weren't specified, from item_db.conf,
diff --git a/db/mob_db2.conf b/db/mob_db2.conf
index e2894a719..bd8379030 100644
--- a/db/mob_db2.conf
+++ b/db/mob_db2.conf
@@ -93,6 +93,7 @@ mob_db: (
AegisName: (chance, "Option Drop Group")
// ...
}
+ DamageTakenRate: damage taken rate (int, defaults to 100)
},
**************************************************************************/
diff --git a/db/pre-re/item_chain.conf b/db/pre-re/item_chain.conf
index a2e4efff4..cdc92d92c 100644
--- a/db/pre-re/item_chain.conf
+++ b/db/pre-re/item_chain.conf
@@ -59,6 +59,12 @@ ITMCHAIN_ORE: {
Emperium: 5
}
+ITMCHAIN_SIEGFRIED: {
+ Token_Of_Siegfried: 1
+ F_Token_Of_Siegfried: 1
+ E_Token_Of_Siegfried: 1
+}
+
ITMCHAIN_GEM: {
Dark_Red_Jewel: 80
Violet_Jewel: 30
diff --git a/db/pre-re/item_combo_db.conf b/db/pre-re/item_combo_db.conf
new file mode 100644
index 000000000..e2ed5d486
--- /dev/null
+++ b/db/pre-re/item_combo_db.conf
@@ -0,0 +1,1280 @@
+//================= Hercules Database =====================================
+//= _ _ _
+//= | | | | | |
+//= | |_| | ___ _ __ ___ _ _| | ___ ___
+//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __|
+//= | | | | __/ | | (__| |_| | | __/\__ \
+//= \_| |_/\___|_| \___|\__,_|_|\___||___/
+//================= License ===============================================
+//= This file is part of Hercules.
+//= http://herc.ws - http://github.com/HerculesWS/Hercules
+//=
+//= Copyright (C) 2019 Hercules Dev Team
+//=
+//= Hercules is free software: you can redistribute it and/or modify
+//= it under the terms of the GNU General Public License as published by
+//= the Free Software Foundation, either version 3 of the License, or
+//= (at your option) any later version.
+//=
+//= This program is distributed in the hope that it will be useful,
+//= but WITHOUT ANY WARRANTY; without even the implied warranty of
+//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+//= GNU General Public License for more details.
+//=
+//= You should have received a copy of the GNU General Public License
+//= along with this program. If not, see <http://www.gnu.org/licenses/>.
+//================= Description ===========================================
+// Configurations file for status effects
+//=========================================================================
+
+combo_db: (
+/**************************************************************************
+ ************* Entry structure ********************************************
+ **************************************************************************
+{
+ // ================ Mandatory fields ===============================
+ Items: ["item_list"] (string, array) list of items
+ Script: <"
+ Script
+ (it can be multi-line)
+ ">
+}
+**************************************************************************/
+{
+ Items: ["Dragon_Slayer", "Dragon_Breath"]
+ Script: <"
+ bonus2 bAddRace, RC_Dragon, 5;
+ ">
+},
+{
+ Items: ["Long_Horn", "Valkyrjas_Shield"]
+ Script: <"
+ bonus3 bAutoSpellWhenHit, "HP_ASSUMPTIO", 2, 5;
+ ">
+},
+{
+ Items: ["Long_Horn", "Tournament_Shield"]
+ Script: <"
+ bonus2 bAddRace, RC_All, 4;
+ bonus bDef, 2;
+ ">
+},
+{
+ Items: ["Battle_Hook", "Tournament_Shield"]
+ Script: <"
+ bonus2 bAddRace, RC_All, 4;
+ bonus bDef, 2;
+ ">
+},
+{
+ Items: ["Hunting_Spear", "Tournament_Shield"]
+ Script: <"
+ bonus2 bAddRace, RC_All, 4;
+ bonus bDef, 2;
+ ">
+},
+{
+ Items: ["Long_Horn_M", "Valkyrjas_Shield"]
+ Script: <"
+ bonus3 bAutoSpellWhenHit, "HP_ASSUMPTIO", 2, 5;
+ ">
+},
+{
+ Items: ["Staff_Of_Soul", "Spiritual_Ring"]
+ Script: <"
+ bonus bMatkRate, 6;
+ bonus bDex, 2;
+ bonus bCastrate, -getequiprefinerycnt(EQI_HAND_R);
+ ">
+},
+{
+ Items: ["Staff_Of_Soul", "Spiritual_Ring_C"]
+ Script: <"
+ bonus bMatkRate, 6;
+ bonus bDex, 2;
+ bonus bCastrate, -getequiprefinerycnt(EQI_HAND_R);
+ ">
+},
+{
+ Items: ["Wizardy_Staff", "Spiritual_Ring"]
+ Script: <"
+ bonus bMatkRate, 6;
+ bonus bDex, 2;
+ bonus bCastrate, -getequiprefinerycnt(EQI_HAND_R);
+ ">
+},
+{
+ Items: ["Wizardy_Staff", "Spiritual_Ring_C"]
+ Script: <"
+ bonus bMatkRate, 6;
+ bonus bDex, 2;
+ bonus bCastrate, -getequiprefinerycnt(EQI_HAND_R);
+ ">
+},
+{
+ Items: ["Gae_Bolg", "Dragon_Breath"]
+ Script: <"
+ bonus2 bAddRace, RC_Dragon, 5;
+ ">
+},
+{
+ Items: ["Spectral_Spear", "Red_Silk_Seal"]
+ Script: <"
+ bonus2 bResEff, Eff_Confusion, 9500;
+ ">
+},
+{
+ Items: ["Spectral_Spear_", "Red_Silk_Seal"]
+ Script: <"
+ bonus2 bResEff, Eff_Confusion, 9500;
+ ">
+},
+{
+ Items: ["Hollgrehenn_Hammer", "B_Harword_Card"]
+ Script: <"
+ bonus bBreakArmorRate, 900;
+ bonus bBreakWeaponRate, 900;
+ ">
+},
+{
+ Items: ["Principles_Of_Magic", "Librarian_Glove", "Pocket_Watch_"]
+ Script: <"
+ bonus bInt, 5;
+ bonus bMaxHP, 700;
+ bonus bAspdRate, 5;
+ ">
+},
+{
+ Items: ["Ancient_Magic", "Mage_Coat"]
+ Script: <"
+ bonus bMdef, 8;
+ bonus bMaxSPrate, 10;
+ bonus bInt, 4;
+ ">
+},
+{
+ Items: ["Ancient_Magic", "Mage_Coat_"]
+ Script: <"
+ bonus bMdef, 8;
+ bonus bMaxSPrate, 10;
+ bonus bInt, 4;
+ ">
+},
+{
+ Items: ["Ancient_Magic", "Librarian_Glove", "Pocket_Watch_"]
+ Script: <"
+ bonus bInt, 5;
+ bonus bMaxHP, 700;
+ bonus bAspdRate, 5;
+ ">
+},
+{
+ Items: ["Bone_Wand", "Skull_Cap"]
+ Script: <"
+ bonus bMatk, 10 * getequiprefinerycnt(EQI_HAND_R);
+ bonus bCastrate, -10;
+ ">
+},
+{
+ Items: ["Staff_Of_Wing", "Wing_Of_Eagle"]
+ Script: <"
+ bonus bSpeedRate, 25;
+ ">
+},
+{
+ Items: ["Survival_Rod_", "Clack_Of_Servival"]
+ Script: <"
+ bonus bMaxHP, 300;
+ bonus bMatkRate, getequiprefinerycnt(EQI_HAND_R) - 5;
+ bonus2 bSubEle, Ele_Neutral, getequiprefinerycnt(EQI_HAND_R) * 3;
+ ">
+},
+{
+ Items: ["Survival_Rod_", "Cloak_Of_Survival_C"]
+ Script: <"
+ bonus bMatkRate, 5;
+ bonus2 bSubEle, Ele_Neutral, 25;
+ ">
+},
+{
+ Items: ["Survival_Rod2_", "Clack_Of_Servival"]
+ Script: <"
+ bonus bMaxHP, 300;
+ bonus bMatkRate, getequiprefinerycnt(EQI_HAND_R) - 5;
+ bonus2 bSubEle, Ele_Neutral, getequiprefinerycnt(EQI_HAND_R) * 3;
+ ">
+},
+{
+ Items: ["Survival_Rod2_", "Cloak_Of_Survival_C"]
+ Script: <"
+ bonus bMatkRate, 5;
+ bonus2 bSubEle, Ele_Neutral, 25;
+ ">
+},
+{
+ Items: ["Walking_Stick", "Magician_Hat"]
+ Script: <"
+ bonus bDex, 2;
+ bonus bInt, 2;
+ bonus bSPrecovRate, 5;
+ bonus bMatkRate, getequiprefinerycnt(EQI_HAND_R);
+ ">
+},
+{
+ Items: ["Holy_Stick", "Exorcism_Bible"]
+ Script: <"
+ bonus2 bSkillAtk, "PR_MAGNUS", 20;
+ bonus3 bAutoSpellWhenHit, "PR_TURNUNDEAD", 1, 20;
+ ">
+},
+{
+ Items: ["Thorn_Staff", "Skull_Cap"]
+ Script: <"
+ bonus bMatk, 10 * getequiprefinerycnt(EQI_HAND_R);
+ bonus bCastrate, -10;
+ ">
+},
+{
+ Items: ["Luna_Bow", "Lunatic_Brooch"]
+ Script: <"
+ bonus bDex, 1;
+ bonus bMaxSP, 50;
+ bonus bSPrecovRate, 10;
+ ">
+},
+{
+ Items: ["Burning_Bow", "Fire_Arrow"]
+ Script: <"
+ bonus bLongAtkRate, 25;
+ ">
+},
+{
+ Items: ["Frozen_Bow", "Crystal_Arrow"]
+ Script: <"
+ bonus bLongAtkRate, 25;
+ ">
+},
+{
+ Items: ["Earth_Bow", "Stone_Arrow"]
+ Script: <"
+ bonus bLongAtkRate, 25;
+ bonus2 bAddEff, Eff_Stone, 1000;
+ ">
+},
+{
+ Items: ["Gust_Bow", "Arrow_Of_Wind"]
+ Script: <"
+ bonus bLongAtkRate, 25;
+ bonus3 bAutoSpell, "NJ_HUUJIN", 5, 100;
+ if (readparam(bInt) > 39)
+ bonus3 bAutoSpell, "NJ_HUUJIN", 5, 200;
+ ">
+},
+{
+ Items: ["Orc_Archer_Bow", "Steel_Arrow"]
+ Script: <"
+ bonus bLongAtkRate, 50;
+ ">
+},
+{
+ Items: ["Cursed_Lyre", "Cursed_Star"]
+ Script: <"
+ bonus bAtk, 25;
+ bonus3 bAddEff, Eff_Curse, 200, ATF_WEAPON | ATF_LONG | ATF_TARGET;
+ ">
+},
+{
+ Items: ["Divine_Cross", "Spiritual_Ring"]
+ Script: <"
+ bonus bMatkRate, 10;
+ bonus bDex, 2;
+ bonus2 bSubRace, RC_Demon, 10;
+ bonus2 bSubRace, RC_Undead, 10;
+ ">
+},
+{
+ Items: ["Divine_Cross", "Spiritual_Ring_C"]
+ Script: <"
+ bonus bMatkRate, 10;
+ bonus bDex, 2;
+ bonus2 bSubRace, RC_Demon, 10;
+ bonus2 bSubRace, RC_Undead, 10;
+ ">
+},
+{
+ Items: ["Memorize_Book", "Pocket_Watch_", "One_Eyed_Glass"]
+ Script: <"
+ bonus bHPrecovRate, 15;
+ bonus bSPrecovRate, 15;
+ bonus bMatkRate, 7;
+ ">
+},
+{
+ Items: ["Stone_Buckler", "Odins_Blessing", "Magni_Cap"]
+ Script: <"
+ bonus bStr, 2;
+ bonus bDef, 5;
+ bonus bMdef, 5;
+ if (BaseClass == Job_Swordman)
+ bonus bDef, 6;
+ ">
+},
+{
+ Items: ["Valkyrjas_Shield", "Odins_Blessing", "Fricca_Circlet"]
+ Script: <"
+ bonus bDef, 2 - getequiprefinerycnt(EQI_HAND_L) - getequiprefinerycnt(EQI_HEAD_TOP);
+ bonus bMdef, 5 + getequiprefinerycnt(EQI_HAND_L) + getequiprefinerycnt(EQI_HEAD_TOP);
+ ">
+},
+{
+ Items: ["Angels_Safeguard", "Angels_Protection", "Angels_Arrival", "Angels_Warmth", "Kiss_Of_Angel"]
+ Script: <"
+ bonus bMaxHP, 900;
+ bonus bMaxSP, 100;
+ bonus3 bAutoSpellWhenHit, "HP_ASSUMPTIO", 1, 30;
+ ">
+},
+{
+ Items: ["Memorize_Book_", "Pocket_Watch_", "One_Eyed_Glass"]
+ Script: <"
+ bonus bHPrecovRate, 15;
+ bonus bSPrecovRate, 15;
+ bonus bMatkRate, 7;
+ ">
+},
+{
+ Items: ["Orleans_Server", "Orleans_Glove"]
+ Script: <"
+ bonus bCastrate, -10;
+ ">
+},
+{
+ Items: ["Thorny_Buckler", "Bison_Horn"]
+ Script: <"
+ bonus bAspdRate, 10;
+ bonus bShortWeaponDamageReturn, 5;
+ ">
+},
+{
+ Items: ["Shadow_Guard", "Shadow_Walk"]
+ Script: <"
+ bonus2 bAddEff, Eff_Blind, 500;
+ autobonus "{ bonus bFlee,20; }", 200, 10000, BF_WEAPON, "{ specialeffect(EF_INCAGILITY, AREA, playerattached()); }";
+ ">
+},
+{
+ Items: ["Valkyrjas_Shield_C", "Odins_Blessing", "Fricca_Circlet"]
+ Script: <"
+ bonus bDef, 2 - getrefine() - getequiprefinerycnt(EQI_HEAD_TOP);
+ bonus bMdef, 5 + getrefine() + getequiprefinerycnt(EQI_HEAD_TOP);
+ ">
+},
+{
+ Items: ["Mr_Smile", "Wit_Pumpkin_Hat"]
+ Script: <"
+ bonus2 bAddMonsterDropItem, 12192, 1;
+ ">
+},
+{
+ Items: ["Phantom_Of_Opera", "Wit_Pumpkin_Hat"]
+ Script: <"
+ bonus bFlee, 10;
+ bonus2 bAddEff, Eff_Stun, 1000;
+ ">
+},
+{
+ Items: ["Elven_Ears", "Skull_Cap"]
+ Script: <"
+ bonus bUseSPrate, -3;
+ ">
+},
+{
+ Items: ["Padded_Armor", "Hyper_Changer"]
+ Script: <"
+ bonus bDef, 5;
+ bonus bMaxHP, 150;
+ ">
+},
+{
+ Items: ["Padded_Armor_", "Hyper_Changer"]
+ Script: <"
+ bonus bDef, 5;
+ bonus bMaxHP, 150;
+ ">
+},
+{
+ Items: ["Ninja_Suit", "Shinobis_Sash"]
+ Script: <"
+ bonus bUseSPrate, -20;
+ bonus bMaxHP, 300;
+ ">
+},
+{
+ Items: ["G_Strings", "Undershirt"]
+ Script: <"
+ bonus bAgi, 5;
+ bonus bFlee, 10;
+ ">
+},
+{
+ Items: ["G_Strings", "Undershirt_"]
+ Script: <"
+ bonus bAgi, 5;
+ bonus bFlee, 10;
+ ">
+},
+{
+ Items: ["Odins_Blessing", "Fricco_Shoes", "Falcon_Robe"]
+ Script: <"
+ bonus bAgi, 3;
+ bonus bMaxHPrate, 5;
+ bonus bMaxSPrate, 5;
+ ">
+},
+{
+ Items: ["Odins_Blessing", "Vidars_Boots", "Valis_Manteau"]
+ Script: <"
+ bonus bVit, 5;
+ bonus bHPrecovRate, 10;
+ bonus bSPrecovRate, 10;
+ ">
+},
+{
+ Items: ["Odins_Blessing", "Ulle_Cap"]
+ Script: <"
+ if (readparam(bDex) > 69)
+ bonus bUseSPrate, -10;
+ ">
+},
+{
+ Items: ["Odins_Blessing", "Ulle_Cap_I"]
+ Script: <"
+ if (readparam(bDex) > 69)
+ bonus bUseSPrate, -10;
+ ">
+},
+{
+ Items: ["Goibnes_Armor", "Goibnes_Combat_Boots", "Goibnes_Shoulder_Arms", "Goibnes_Helmet"]
+ Script: <"
+ 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;
+ ">
+},
+{
+ Items: ["Valkyrie_Armor", "Valkyrie_Shoes", "Valkyrie_Manteau", "Valkyrie_Helm"]
+ Script: <"
+ bonus bAllStats, 1;
+ ">
+},
+{
+ Items: ["Dress_Of_Angel", "Angeling_Hairpin"]
+ Script: <"
+ bonus bLuk, 6;
+ bonus bFlee, 5;
+ bonus bInt, 2;
+ ">
+},
+{
+ Items: ["Ninja_Suit_", "Shinobis_Sash"]
+ Script: <"
+ bonus bUseSPrate, -20;
+ bonus bMaxHP, 300;
+ ">
+},
+{
+ Items: ["G_Strings_", "Undershirt"]
+ Script: <"
+ bonus bAgi, 5;
+ bonus bFlee, 10;
+ ">
+},
+{
+ Items: ["G_Strings_", "Undershirt_"]
+ Script: <"
+ bonus bAgi, 5;
+ bonus bFlee, 10;
+ ">
+},
+{
+ Items: ["Diabolus_Robe", "Diabolus_Ring"]
+ Script: <"
+ bonus2 bAddRace, RC_All, 3;
+ bonus bMatkRate, 3;
+ ">
+},
+{
+ Items: ["Diabolus_Armor", "Diabolus_Ring"]
+ Script: <"
+ bonus2 bAddRace, RC_All, 3;
+ bonus bMatkRate, 3;
+ ">
+},
+{
+ Items: ["Assaulter_Plate", "Battle_Greave", "Commander_Manteau"]
+ Script: <"
+ bonus2 bSubRace, RC_NonDemiPlayer, -300;
+ bonus bVit, 3;
+ bonus bMaxHPrate, 12;
+ bonus bHealPower2, 10;
+ bonus bAddItemHealRate, 10;
+ autobonus2 "{ bonus2 bHPRegenRate,600,1000; }", 5, 10000, BF_WEAPON, "{ specialeffect(EF_HEAL, AREA, playerattached()); }";
+ ">
+},
+{
+ Items: ["Elite_Engineer_Armor", "Battle_Greave", "Commander_Manteau"]
+ Script: <"
+ bonus2 bSubRace, RC_NonDemiPlayer, -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;
+ ">
+},
+{
+ Items: ["Assassin_Robe", "Battle_Greave", "Commander_Manteau"]
+ Script: <"
+ bonus2 bSubRace, RC_NonDemiPlayer, -300;
+ bonus bAgi, 3;
+ bonus bMaxHPrate, 12;
+ bonus bCritical, 5;
+ bonus bAspdRate, 5;
+ autobonus "{ bonus2 bHPRegenRate,300,1000; }", 10, 10000, BF_WEAPON, "{ specialeffect(EF_HEAL, AREA, playerattached()); }";
+ ">
+},
+{
+ Items: ["Warlock_Battle_Robe", "Combat_Boots", "Commander_Manteau_"]
+ Script: <"
+ bonus2 bSubRace, RC_NonDemiPlayer, -300;
+ bonus bInt, 3;
+ bonus bMaxHPrate, 12;
+ bonus2 bResEff, Eff_Stun, 2000;
+ autobonus2 "{ bonus bDefEle,Ele_Ghost; }", 30, 10000, BF_WEAPON, "{ specialeffect(EF_ENERGYCOAT, AREA, playerattached()); }";
+ ">
+},
+{
+ Items: ["Medic_Robe", "Combat_Boots", "Commander_Manteau_"]
+ Script: <"
+ bonus2 bSubRace, RC_NonDemiPlayer, -300;
+ bonus bInt, 3;
+ bonus bMaxHPrate, 12;
+ bonus2 bCastrate, "AL_HOLYLIGHT", -50;
+ bonus bHealPower, 6;
+ autobonus2 "{ bonus bDefEle,Ele_Ghost; }", 30, 10000, BF_WEAPON, "{ specialeffect(EF_ENERGYCOAT, AREA, playerattached()); }";
+ ">
+},
+{
+ Items: ["Elite_Archer_Suit", "Combat_Boots", "Commander_Manteau_"]
+ Script: <"
+ bonus2 bSubRace, RC_NonDemiPlayer, -300;
+ bonus bDex, 3;
+ bonus bMaxHPrate, 12;
+ bonus bLongAtkDef, 10;
+ bonus bDelayrate, -25;
+ ">
+},
+{
+ Items: ["Elite_Shooter_Suit", "Battle_Boots", "Sheriff_Manteau"]
+ Script: <"
+ bonus2 bSubRace, RC_NonDemiPlayer, -300;
+ bonus bDex, 3;
+ bonus bMaxHPrate, 12;
+ bonus bLongAtkDef, 10;
+ bonus bDelayrate, -25;
+ ">
+},
+{
+ Items: ["Sprint_Mail", "Sprint_Shoes", "Sprint_Ring"]
+ Script: <"
+ bonus bMaxHPrate, 7;
+ bonus bMaxSPrate, 7;
+ bonus bCastrate, -3;
+ bonus bDelayrate, -15;
+ ">
+},
+{
+ Items: ["Improved_Tights", "Linen_Glove"]
+ Script: <"
+ bonus bFlee2, 5;
+ ">
+},
+{
+ Items: ["Krieger_Suit1", "Krieger_Shoes1", "Krieger_Muffler1"]
+ Script: <"
+ bonus2 bAddRace, RC_All, 5;
+ bonus bMatkRate, 5;
+ bonus2 bResEff, Eff_Freeze, 10000;
+ bonus2 bSkillHeal2, "AM_POTIONPITCHER", 3;
+ bonus2 bSkillHeal2, "AL_HEAL", 3;
+ bonus2 bSkillHeal2, "PR_SANCTUARY", 3;
+ ">
+},
+{
+ Items: ["Dragon_Vest", "Dragon_Manteau"]
+ Script: <"
+ bonus bAgi, 5;
+ bonus bFlee, 15;
+ ">
+},
+{
+ Items: ["Cuffs", "Bloody_Iron_Ball"]
+ Script: <"
+ bonus bBaseAtk, 50;
+ bonus2 bAddDefClass, 1196, 20;
+ bonus2 bAddDefClass, 1197, 20;
+ ">
+},
+{
+ Items: ["Tidal_Shoes", "Wool_Scarf"]
+ Script: <"
+ bonus bHPrecovRate, 5;
+ bonus bMaxHPrate, 10;
+ ">
+},
+{
+ Items: ["Black_Leather_Boots", "Rider_Insignia"]
+ Script: <"
+ bonus bFlee, 10;
+ ">
+},
+{
+ Items: ["Black_Leather_Boots", "Rider_Insignia_"]
+ Script: <"
+ bonus bFlee, 10;
+ ">
+},
+{
+ Items: ["Black_Leather_Boots", "Rider_Insignia_M"]
+ Script: <"
+ bonus bFlee, 10;
+ ">
+},
+{
+ Items: ["Diabolus_Boots", "Diabolus_Manteau"]
+ Script: <"
+ bonus bMaxHPrate, 6;
+ ">
+},
+{
+ Items: ["Black_Leather_Boots_", "Rider_Insignia"]
+ Script: <"
+ bonus bFlee, 10;
+ ">
+},
+{
+ Items: ["Black_Leather_Boots_", "Rider_Insignia_"]
+ Script: <"
+ bonus bFlee, 10;
+ ">
+},
+{
+ Items: ["Black_Leather_Boots_", "Rider_Insignia_M"]
+ Script: <"
+ bonus bFlee, 10;
+ ">
+},
+{
+ Items: ["Beach_Sandal", "Beach_Manteau"]
+ Script: <"
+ bonus bFlee, 5;
+ ">
+},
+{
+ Items: ["Morpheuss_Shawl", "Morpheuss_Ring", "Morpheuss_Armlet", "Morpheuss_Hood"]
+ Script: <"
+ bonus bInt, 5;
+ bonus bMdef, 11;
+ bonus bMaxSPrate, 20;
+ bonus bNoCastCancel, 0;
+ bonus bCastrate, 25;
+ ">
+},
+{
+ Items: ["Morriganes_Manteau", "Morriganes_Belt", "Morriganes_Pendant", "Morriganes_Helm"]
+ Script: <"
+ bonus bStr, 2;
+ bonus bLuk, 9;
+ bonus bCritical, 13;
+ bonus bBaseAtk, 18;
+ bonus bFlee2, 13;
+ ">
+},
+{
+ Items: ["Dragon_Breath", "Dragon_Killer"]
+ Script: <"
+ bonus2 bAddRace, RC_Dragon, 5;
+ ">
+},
+{
+ Items: ["Clip", "Spiritual_Ring"]
+ Script: <"
+ bonus2 bSkillAtk, "AL_HEAL", 50;
+ bonus2 bSkillAtk, "PR_MAGNUS", 30;
+ bonus bSPrecovRate, 9;
+ ">
+},
+{
+ Items: ["Clip", "Spiritual_Ring_C"]
+ Script: <"
+ bonus2 bSkillAtk, "AL_HEAL", 50;
+ bonus2 bSkillAtk, "PR_MAGNUS", 30;
+ bonus bSPrecovRate, 9;
+ ">
+},
+{
+ Items: ["Clip", "Spiritual_Ring_M"]
+ Script: <"
+ bonus2 bSkillAtk, "AL_HEAL", 50;
+ bonus2 bSkillAtk, "PR_MAGNUS", 30;
+ bonus bSPrecovRate, 9;
+ ">
+},
+{
+ Items: ["Rosary", "Spiritual_Ring"]
+ Script: <"
+ bonus2 bSkillAtk, "AL_HEAL", 50;
+ bonus2 bSkillAtk, "PR_MAGNUS", 30;
+ bonus bSPrecovRate, 9;
+ ">
+},
+{
+ Items: ["Rosary", "Spiritual_Ring_C"]
+ Script: <"
+ bonus2 bSkillAtk, "AL_HEAL", 50;
+ bonus2 bSkillAtk, "PR_MAGNUS", 30;
+ bonus bSPrecovRate, 9;
+ ">
+},
+{
+ Items: ["Rosary", "Spiritual_Ring_M"]
+ Script: <"
+ bonus2 bSkillAtk, "AL_HEAL", 50;
+ bonus2 bSkillAtk, "PR_MAGNUS", 30;
+ bonus bSPrecovRate, 9;
+ ">
+},
+{
+ Items: ["Ring_Of_Rogue", "Cold_Heart"]
+ Script: <"
+ bonus2 bAddSize, Size_Medium, 8;
+ bonus bAspdRate, getequiprefinerycnt(EQI_HAND_R) / 2;
+ ">
+},
+{
+ Items: ["Ring_Of_Rogue", "Black_Cat"]
+ Script: <"
+ bonus2 bAddSize, Size_Large, 8;
+ bonus bHit, getequiprefinerycnt(EQI_HAND_R) / 2;
+ bonus bCastrate, -getequiprefinerycnt(EQI_HAND_R) / 2;
+ ">
+},
+{
+ Items: ["Rosary_", "Spiritual_Ring"]
+ Script: <"
+ bonus2 bSkillAtk, "AL_HEAL", 50;
+ bonus2 bSkillAtk, "PR_MAGNUS", 30;
+ bonus bSPrecovRate, 9;
+ ">
+},
+{
+ Items: ["Rosary_", "Spiritual_Ring_C"]
+ Script: <"
+ bonus2 bSkillAtk, "AL_HEAL", 50;
+ bonus2 bSkillAtk, "PR_MAGNUS", 30;
+ bonus bSPrecovRate, 9;
+ ">
+},
+{
+ Items: ["Rosary_", "Spiritual_Ring_M"]
+ Script: <"
+ bonus2 bSkillAtk, "AL_HEAL", 50;
+ bonus2 bSkillAtk, "PR_MAGNUS", 30;
+ bonus bSPrecovRate, 9;
+ ">
+},
+{
+ Items: ["Ring_Of_Flame_Lord", "Ring_Of_Resonance"]
+ Script: <"
+ bonus4 bAutoSpell, "MO_EXTREMITYFIST", 1, 3, 1;
+ bonus3 bAutoSpell, "PR_LEXAETERNA", 1, 20;
+ bonus3 bAutoSpell, "AS_SONICBLOW", 5, 50;
+ bonus3 bAutoSpell, "MO_INVESTIGATE", 5, 20;
+ bonus3 bAutoSpell, "ASC_METEORASSAULT", 2, 50;
+ ">
+},
+{
+ Items: ["Medal_Swordman", "Krieger_Ring1"]
+ Script: <"
+ bonus2 bAddRace, RC_All, 5;
+ bonus bMatkRate, 3;
+ bonus bHealPower, 5;
+ ">
+},
+{
+ Items: ["Medal_Thief", "Krieger_Ring1"]
+ Script: <"
+ bonus2 bAddRace, RC_All, 5;
+ bonus bMatkRate, 3;
+ bonus bHealPower, 5;
+ ">
+},
+{
+ Items: ["Medal_Acolyte", "Krieger_Ring1"]
+ Script: <"
+ bonus2 bAddRace, RC_All, 5;
+ bonus bMatkRate, 3;
+ bonus bHealPower, 5;
+ ">
+},
+{
+ Items: ["Medal_Mage", "Krieger_Ring1"]
+ Script: <"
+ bonus2 bAddRace, RC_All, 5;
+ bonus bMatkRate, 3;
+ bonus bHealPower, 5;
+ ">
+},
+{
+ Items: ["Medal_Archer", "Krieger_Ring1"]
+ Script: <"
+ bonus2 bAddRace, RC_All, 5;
+ bonus bMatkRate, 3;
+ bonus bHealPower, 5;
+ ">
+},
+{
+ Items: ["Medal_Merchant", "Krieger_Ring1"]
+ Script: <"
+ bonus2 bAddRace, RC_All, 5;
+ bonus bMatkRate, 3;
+ bonus bHealPower, 5;
+ ">
+},
+{
+ Items: ["Icarus_Wing", "Bowman_Scarf"]
+ Script: <"
+ bonus bUseSPrate, -25;
+ ">
+},
+{
+ Items: ["Medal_Gunner", "Krieger_Ring1"]
+ Script: <"
+ bonus2 bAddRace, RC_All, 5;
+ bonus bMatkRate, 3;
+ bonus bHealPower, 5;
+ ">
+},
+{
+ Items: ["Shaman_Ring", "Shaman_Earing", "Shamans_Hair_Ornament"]
+ Script: <"
+ bonus bMaxHP, 300;
+ bonus bMatkRate, 5;
+ bonus2 bSubEle, Ele_Neutral, 5;
+ ">
+},
+{
+ Items: ["Dark_Knight_Belt", "Dark_Knight_Glove", "Dark_Knight_Mask"]
+ Script: <"
+ bonus bMatkRate, 10;
+ bonus bInt, 5;
+ bonus2 bSubRace, RC_Angel, 10;
+ ">
+},
+{
+ Items: ["Dark_Knight_Belt", "Dark_Knight_Glove", "Dark_Knight_MaskB"]
+ Script: <"
+ bonus bMatkRate, 10;
+ bonus bInt, 5;
+ bonus2 bSubRace, RC_Angel, 10;
+ ">
+},
+{
+ Items: ["Poring_Card", "Mastering_Card"]
+ Script: <"
+ bonus bFlee, 18;
+ ">
+},
+{
+ Items: ["Lunatic_Card", "Eclipse_Card"]
+ Script: <"
+ bonus bFlee, 18;
+ ">
+},
+{
+ Items: ["Chonchon_Card", "Dragon_Fly_Card"]
+ Script: <"
+ bonus bFlee, 18;
+ ">
+},
+{
+ Items: ["Roda_Frog_Card", "Toad_Card"]
+ Script: <"
+ bonus bFlee, 18;
+ ">
+},
+{
+ Items: ["Rocker_Card", "Vocal_Card"]
+ Script: <"
+ bonus bFlee, 18;
+ ">
+},
+{
+ Items: ["Skeleton_Card", "Skel_Prisoner_Card"]
+ Script: <"
+ bonus2 bAddEffWhenHit, Eff_Sleep, 600;
+ ">
+},
+{
+ Items: ["Tarou_Card", "Cramp_Card"]
+ Script: <"
+ bonus bStr, 3;
+ ">
+},
+{
+ Items: ["Wolf_Card", "Vagabond_Wolf_Card"]
+ Script: <"
+ bonus bFlee, 18;
+ ">
+},
+{
+ Items: ["Pecopeco_Card", "Grand_Peco_Card"]
+ Script: <"
+ bonus bDef, 3;
+ bonus bVit, 3;
+ ">
+},
+{
+ Items: ["Muka_Card", "Raggler_Card", "Baby_Leopard_Card", "Zipper_Bear_Card", "Mole_Card"]
+ Script: <"
+ bonus bStr, 4;
+ bonus bMaxHPrate, 7;
+ bonus bMaxSPrate, 7;
+ bonus2 bSkillAtk, "MC_MAMMONITE", 20;
+ bonus bSPDrainValue, 1;
+ if (BaseJob == Job_Alchemist) {
+ bonus3 bAutoSpell, "BS_ADRENALINE", 1, 10;
+ bonus2 bAddMonsterDropItem, 7139, 3;
+ bonus2 bAddMonsterDropItem, 905, 10;
+ }
+ ">
+},
+{
+ Items: ["Stainer_Card", "Wander_Man_Card", "Shinobi_Card", "Wild_Rose_Card", "Whikebain_Card"]
+ Script: <"
+ bonus bStr, 6;
+ bonus bAgi, 4;
+ bonus2 bSkillAtk, "RG_BACKSTAP", 10;
+ if (getskilllv("RG_STRIPARMOR") == 5)
+ bonus3 bAutoSpell, "RG_STRIPARMOR", 5, 50;
+ if (BaseJob == Job_Rogue) {
+ bonus bUseSPrate, -20;
+ bonus3 bAutoSpell, "RG_INTIMIDATE", 1, -20;
+ }
+ ">
+},
+{
+ Items: ["BigFoot_Card", "Grizzly_Card"]
+ Script: <"
+ bonus2 bAddEffWhenHit, Eff_Blind, 600;
+ ">
+},
+{
+ Items: ["Munak_Card", "Bon_Gun_Card", "Hyegun_Card"]
+ Script: <"
+ bonus bAllStats, 1;
+ ">
+},
+{
+ Items: ["Mummy_Card", "Ancient_Mummy_Card"]
+ Script: <"
+ bonus bPerfectHitAddRate, 20;
+ ">
+},
+{
+ Items: ["Nightmare_Card", "Nightmare_Terror_Card"]
+ Script: <"
+ bonus2 bAddEffWhenHit, Eff_Curse, 600;
+ ">
+},
+{
+ Items: ["Crab_Card", "Aster_Card", "Shellfish_Card"]
+ Script: <"
+ bonus3 bAddMonsterDropItem, 544, RC_Fish, 3000;
+ bonus2 bAddEle, Ele_Water, 30;
+ ">
+},
+{
+ Items: ["Dark_Lord_Card", "Dark_Illusion_Card"]
+ Script: <"
+ bonus bMaxHPrate, 20;
+ bonus bMaxSPrate, 20;
+ bonus bCastrate, -10;
+ ">
+},
+{
+ Items: ["The_Paper_Card", "Wander_Man_Card", "Shinobi_Card", "Wild_Rose_Card", "Dancing_Dragon_Card"]
+ Script: <"
+ bonus bAgi, 5;
+ bonus bStr, 5;
+ bonus bAspdRate, 5;
+ bonus bSpeedRate, 25;
+ bonus2 bSPDrainValue, 1, 0;
+ if (BaseClass == Job_Thief)
+ bonus bNoGemStone, 0;
+ ">
+},
+{
+ Items: ["Dragon_Tail_Card", "Merman_Card", "Anolian_Card", "Alligator_Card", "Cruiser_Card"]
+ Script: <"
+ bonus bAgi, 5;
+ bonus bDex, 3;
+ bonus bLongAtkRate, 20;
+ bonus bPerfectHitAddRate, 20;
+ if (BaseClass == Job_Archer) {
+ bonus2 bExpAddRace, RC_Brute, 5;
+ bonus2 bWeaponComaRace, RC_Brute, 100;
+ }
+ ">
+},
+{
+ Items: ["Dragon_Tail_Card", "Anolian_Card", "Alligator_Card", "Cruiser_Card", "Ferus__Card"]
+ Script: <"
+ bonus bDex, 5;
+ bonus2 bSkillAtk, "CG_ARROWVULCAN", 5;
+ bonus2 bSkillAtk, "DC_THROWARROW", 10;
+ bonus2 bSkillAtk, "BA_MUSICALSTRIKE", 10;
+ if (BaseJob == Job_Bard || BaseJob == Job_Dancer)
+ bonus3 bAutoSpellWhenHit, "CG_TAROTCARD", 2, 50;
+ ">
+},
+{
+ Items: ["Rideword_Card", "Live_Peach_Tree_Card", "Geographer_Card", "Cookie_Card", "Fur_Seal_Card"]
+ Script: <"
+ bonus bVit, 10;
+ bonus bCastrate, -10;
+ bonus bUseSPrate, -10;
+ if (BaseClass == Job_Acolyte) {
+ bonus2 bExpAddRace, RC_Undead, 5;
+ bonus2 bExpAddRace, RC_Demon, 5;
+ bonus2 bSubRace, RC_Undead, 30;
+ bonus2 bSubRace, RC_Demon, 30;
+ }
+ ">
+},
+{
+ Items: ["Rideword_Card", "Cookie_Card", "Fur_Seal_Card", "Waste_Stove_Card"]
+ Script: <"
+ bonus bStr, 3;
+ bonus bMaxSP, 80;
+ bonus bBaseAtk, 25;
+ bonus3 bAutoSpell, "AL_CRUCIS", 5, 10;
+ bonus2 bSkillAtk, "MO_EXTREMITYFIST", 10;
+ if (BaseJob == Job_Monk) {
+ bonus bUseSPrate, -10;
+ bonus bNoCastCancel, 0;
+ }
+ ">
+},
+{
+ Items: ["Raggler_Card", "Mystcase_Card", "Baby_Leopard_Card", "Zipper_Bear_Card", "Hylozoist_Card"]
+ Script: <"
+ bonus bLuk, 10;
+ bonus2 bSPDrainValue, 2, 0;
+ bonus2 bSkillAtk, 42, 20;
+ if (BaseClass == Job_Merchant) {
+ bonus2 bAddMonsterDropItem, 617, 5;
+ bonus bMagicDamageReturn, 20;
+ }
+ ">
+},
+{
+ Items: ["Loli_Ruri_Card", "Miyabi_Ningyo_Card", "Wicked_Nymph_Card", "Parasite_Card", "Harpy_Card", "Blood_Butterfly_Card"]
+ Script: <"
+ bonus bMaxHP, 500;
+ bonus bDef, 5;
+ bonus bMdef, 5;
+ bonus2 bSkillAtk, 14, 10;
+ bonus2 bSkillAtk, 19, 10;
+ bonus2 bSkillAtk, 20, 10;
+ if (BaseClass == Job_Mage) {
+ bonus bMatkRate, 3;
+ bonus bCastrate, -15;
+ }
+ ">
+},
+{
+ Items: ["Lude_Card", "Quve_Card"]
+ Script: <"
+ bonus bMaxHP, 300;
+ bonus bMaxSP, 60;
+ ">
+},
+{
+ Items: ["Miyabi_Ningyo_Card", "Wicked_Nymph_Card", "Harpy_Card", "Blood_Butterfly_Card", "Novus__Card"]
+ Script: <"
+ bonus bInt, 3;
+ bonus2 bSkillAtk, "WZ_HEAVENDRIVE", 10;
+ bonus2 bSkillAtk, "MG_THUNDERSTORM", 10;
+ if (BaseJob == Job_Sage) {
+ bonus bMagicDamageReturn, 20;
+ bonus2 bAddMonsterDropItem, 716, 100;
+ bonus2 bAddMonsterDropItem, 715, 100;
+ bonus bCastrate, -20;
+ }
+ ">
+},
+{
+ Items: ["Succubus_Card", "Incubus_Card"]
+ Script: <"
+ bonus bHPrecovRate, 30;
+ bonus bSPrecovRate, 30;
+ bonus bVit, 4;
+ bonus bInt, 4;
+ ">
+},
+{
+ Items: ["Solider_Card", "Assulter_Card", "Permeter_Card", "Freezer_Card", "Heater_Card"]
+ Script: <"
+ bonus bStr, 10;
+ bonus bMaxHPrate, 20;
+ bonus bHPrecovRate, 50;
+ bonus3 bAutoSpell, "BS_WEAPONPERFECT", 1, 3;
+ bonus2 bAddMonsterDropItem, 501, 500;
+ if (BaseClass == Job_Swordman) {
+ bonus2 bAddItemHealRate, Red_Potion, 50;
+ bonus2 bAddItemHealRate, Yellow_Potion, 50;
+ bonus2 bAddItemHealRate, Orange_Potion, 50;
+ bonus2 bAddItemHealRate, White_Potion, 50;
+ }
+ ">
+},
+{
+ Items: ["C_Tower_Manager_Card", "Alarm_Card", "Clock_Card", "Punk_Card"]
+ Script: <"
+ bonus bDef, 3;
+ bonus bMdef, 3;
+ ">
+},
+{
+ Items: ["Owl_Duke_Card", "Owl_Baron_Card"]
+ Script: <"
+ bonus3 bAutoSpell, "MG_LIGHTNINGBOLT", 5, 20;
+ ">
+},
+{
+ Items: ["Injustice_Card", "Zherlthsh_Card"]
+ Script: <"
+ bonus bBaseAtk, 20;
+ bonus bLuk, 3;
+ ">
+},
+{
+ Items: ["Permeter_Card", "Freezer_Card", "Heater_Card", "Archdam_Card"]
+ Script: <"
+ bonus bInt, 1;
+ bonus bStr, 1;
+ bonus bDef, 2;
+ bonus bSPrecovRate, 10;
+ bonus2 bSkillAtk, "PA_SHIELDCHAIN", 10;
+ bonus2 bSkillAtk, "PA_SACRIFICE", 10;
+ bonus bCastrate, -10;
+ if (BaseJob == Job_Crusader)
+ bonus bDefEle, Ele_Holy;
+ ">
+},
+{
+ Items: ["Garm_Baby_Card", "Garm_Card"]
+ Script: <"
+ bonus3 bAutoSpell, "MG_FROSTDIVER", 3, 250;
+ ">
+},
+{
+ Items: ["Zombie_Slaughter_Card", "Ragged_Zombie_Card"]
+ Script: <"
+ bonus2 bSPGainRace, RC_DemiPlayer, 2;
+ ">
+},
+{
+ Items: ["Blush", "Necktie"]
+ Script: <"
+ bonus bAspdRate, 3;
+ bonus bCastrate, 3;
+ ">
+},
+{
+ Items: ["Ear_Of_Devils_Wing", "Darkness_Helm_J"]
+ Script: <"
+ bonus bStr, 1;
+ bonus bAtkRate, 5;
+ ">
+},
+{
+ Items: ["Ear_Of_Angels_Wing", "Darkness_Helm_J"]
+ Script: <"
+ bonus bStr, 1;
+ bonus bAspdRate, 2;
+ ">
+},
+{
+ Items: ["Alarm_Mask", "Wit_Pumpkin_Hat"]
+ Script: <"
+ bonus2 bAddMonsterDropItem, 12192, 1;
+ bonus2 bAddMonsterDropItem, 538, 1;
+ bonus2 bAddItemHealRate, 12192, 100;
+ bonus2 bAddItemHealRate, 538, 100;
+ ">
+},
+{
+ Items: ["Hahoe_Mask", "Wit_Pumpkin_Hat"]
+ Script: <"
+ bonus bAspdRate, 5;
+ autobonus "{ bonus bAtk,50; }", 5, 10000, 0, "{ specialeffect(EF_POTION_BERSERK, AREA, playerattached()); }";
+ ">
+},
+{
+ Items: ["Pecopeco_Wing_Ears", "Darkness_Helm_J"]
+ Script: <"
+ bonus bAgi, 1;
+ bonus bFlee, 3;
+ ">
+},
+{
+ Items: ["Black_Glasses", "Darkness_Helm_J"]
+ Script: <"
+ bonus bInt, 1;
+ bonus bMatkRate, 2;
+ ">
+},
+{
+ Items: ["Pencil_In_Mouth", "Cap_Of_Concentration"]
+ Script: <"
+ bonus bDex, 2;
+ bonus bDef, 2;
+ ">
+},
+{
+ Items: ["Twilight_Desert", "Sandstorm"]
+ Script: <"
+ bonus bMaxSP, 20;
+ bonus bMaxHPrate, 5;
+ bonus bHit, 10;
+ bonus2 bAddSize, Size_Large, 30;
+ autobonus "{ bonus bAspdRate,100; }", 1, 7000, 0, "{ specialeffect(EF_POTION_BERSERK, AREA, playerattached()); }";
+ ">
+},
+{
+ Items: ["Elven_Ears_", "Skull_Cap"]
+ Script: <"
+ bonus bUseSPrate, -3;
+ ">
+},
+)
diff --git a/db/pre-re/item_combo_db.txt b/db/pre-re/item_combo_db.txt
deleted file mode 100644
index f3bf81e38..000000000
--- a/db/pre-re/item_combo_db.txt
+++ /dev/null
@@ -1,165 +0,0 @@
-// Item Combos Database
-//
-// Structure of Database:
-// ID:ID:ID:ID,{ Script }
-
-1166:2527,{ bonus2 bAddRace,RC_Dragon,5; }
-1420:2115,{ bonus3 bAutoSpellWhenHit,"HP_ASSUMPTIO",2,5; }
-1420:2133,{ bonus2 bAddRace, RC_All, 4; bonus bDef,2; }
-1421:2133,{ bonus2 bAddRace, RC_All, 4; bonus bDef,2; }
-1422:2133,{ bonus2 bAddRace, RC_All, 4; bonus bDef,2; }
-1428:2115,{ bonus3 bAutoSpellWhenHit,"HP_ASSUMPTIO",2,5; }
-1472:2677,{ bonus bMatkRate,6; bonus bDex,2; bonus bCastrate,-getequiprefinerycnt(EQI_HAND_R); }
-1472:2711,{ bonus bMatkRate,6; bonus bDex,2; bonus bCastrate,-getequiprefinerycnt(EQI_HAND_R); }
-1473:2677,{ bonus bMatkRate,6; bonus bDex,2; bonus bCastrate,-getequiprefinerycnt(EQI_HAND_R); }
-1473:2711,{ bonus bMatkRate,6; bonus bDex,2; bonus bCastrate,-getequiprefinerycnt(EQI_HAND_R); }
-1474:2527,{ bonus2 bAddRace,RC_Dragon,5; }
-1477:2700,{ bonus2 bResEff,Eff_Confusion,9500; }
-1479:2700,{ bonus2 bResEff,Eff_Confusion,9500; }
-1535:4361,{ bonus bBreakArmorRate,900; bonus bBreakWeaponRate,900; }
-1572:2716:2717,{ bonus bInt,5; bonus bMaxHP,700; bonus bAspdRate,5; }
-1573:2334,{ bonus bMdef,8; bonus bMaxSPrate,10; bonus bInt,4; }
-1573:2372,{ bonus bMdef,8; bonus bMaxSPrate,10; bonus bInt,4; }
-1573:2716:2717,{ bonus bInt,5; bonus bMaxHP,700; bonus bAspdRate,5; }
-1615:18539,{ bonus bMatk,10*getequiprefinerycnt(EQI_HAND_R); bonus bCastrate,-10; }
-1616:2515,{ bonus bSpeedRate,25; }
-1618:2509,{ bonus bMaxHP,300; bonus bMatkRate,getequiprefinerycnt(EQI_HAND_R)-5; bonus2 bSubEle,Ele_Neutral,getequiprefinerycnt(EQI_HAND_R)*3; }
-1618:2535,{ bonus bMatkRate,5; bonus2 bSubEle,Ele_Neutral,25; }
-1620:2509,{ bonus bMaxHP,300; bonus bMatkRate,getequiprefinerycnt(EQI_HAND_R)-5; bonus2 bSubEle,Ele_Neutral,getequiprefinerycnt(EQI_HAND_R)*3; }
-1620:2535,{ bonus bMatkRate,5; bonus2 bSubEle,Ele_Neutral,25; }
-1629:5045,{ bonus bDex,2; bonus bInt,2; bonus bSPrecovRate,5; bonus bMatkRate,getequiprefinerycnt(EQI_HAND_R); }
-1631:2129,{ bonus2 bSkillAtk,"PR_MAGNUS",20; bonus3 bAutoSpellWhenHit,"PR_TURNUNDEAD",1,20; }
-1636:18539,{ bonus bMatk,10*getequiprefinerycnt(EQI_HAND_R); bonus bCastrate,-10; }
-1723:2718,{ bonus bDex,1; bonus bMaxSP,50; bonus bSPrecovRate,10; }
-1730:1752,{ bonus bLongAtkRate,25; }
-1731:1754,{ bonus bLongAtkRate,25; }
-1732:1756,{ bonus bLongAtkRate,25; bonus2 bAddEff,Eff_Stone,1000; }
-1733:1755,{ bonus bLongAtkRate,25; bonus3 bAutoSpell,"NJ_HUUJIN",5,100; if(readparam(bInt)>39) bonus3 bAutoSpell,"NJ_HUUJIN",5,200; }
-1734:1753,{ bonus bLongAtkRate,50; }
-1741:2748,{ bonus bAtk,25; bonus3 bAddEff,Eff_Curse,200,ATF_WEAPON|ATF_LONG|ATF_TARGET; }
-2001:2677,{ bonus bMatkRate,10; bonus bDex,2; bonus2 bSubRace,RC_Demon,10; bonus2 bSubRace,RC_Undead,10; }
-2001:2711,{ bonus bMatkRate,10; bonus bDex,2; bonus2 bSubRace,RC_Demon,10; bonus2 bSubRace,RC_Undead,10; }
-2109:2717:2239,{ bonus bHPrecovRate,15; bonus bSPrecovRate,15; bonus bMatkRate,7; }
-2114:2353:5122,{ bonus bStr,2; bonus bDef,5; bonus bMdef,5; if(BaseClass==Job_Swordman) bonus bDef,6; }
-2115:2353:5124,{ bonus bDef,2-getequiprefinerycnt(EQI_HAND_L)-getequiprefinerycnt(EQI_HEAD_TOP); bonus bMdef,5+getequiprefinerycnt(EQI_HAND_L)+getequiprefinerycnt(EQI_HEAD_TOP); }
-2116:2355:2420:2521:5125,{ bonus bMaxHP,900; bonus bMaxSP,100; bonus3 bAutoSpellWhenHit,"HP_ASSUMPTIO",1,30; }
-2121:2717:2239,{ bonus bHPrecovRate,15; bonus bSPrecovRate,15; bonus bMatkRate,7; }
-2123:2701,{ bonus bCastrate,-10; }
-2124:2702,{ bonus bAspdRate,10; bonus bShortWeaponDamageReturn,5; }
-2135:2426,{ bonus2 bAddEff,Eff_Blind,500; autobonus "{ bonus bFlee,20; }",200,10000,BF_WEAPON,"{ specialeffect(EF_INCAGILITY, AREA, playerattached()); }"; }
-2137:2353:5124,{ bonus bDef,2-getrefine()-getequiprefinerycnt(EQI_HEAD_TOP); bonus bMdef,5+getrefine()+getequiprefinerycnt(EQI_HEAD_TOP); }
-2278:18656,{ bonus2 bAddMonsterDropItem,12192,1; }
-2281:18656,{ bonus bFlee,10; bonus2 bAddEff,Eff_Stun,1000; }
-2286:18539,{ bonus bUseSPrate,-3; }
-2312:2656,{ bonus bDef,5; bonus bMaxHP,150; }
-2313:2656,{ bonus bDef,5; bonus bMaxHP,150; }
-2337:2654,{ bonus bUseSPrate,-20; bonus bMaxHP,300; }
-2339:2522,{ bonus bAgi,5; bonus bFlee,10; }
-2339:2523,{ bonus bAgi,5; bonus bFlee,10; }
-2353:2417:2516,{ bonus bAgi,3; bonus bMaxHPrate,5; bonus bMaxSPrate,5; }
-2353:2418:2517,{ bonus bVit,5; bonus bHPrecovRate,10; bonus bSPrecovRate,10; }
-2353:5123,{ if(readparam(bDex)>69) bonus bUseSPrate,-10; }
-2353:5493,{ if(readparam(bDex)>69) bonus bUseSPrate,-10; }
-2354:2419:2520:5128,{ 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; }
-2357:2421:2524:5171,{ bonus bAllStats,1; }
-2358:5153,{ bonus bLuk,6; bonus bFlee,5; bonus bInt,2; }
-2359:2654,{ bonus bUseSPrate,-20; bonus bMaxHP,300; }
-//2369:2428:2533:5306,{ bonus2 bSubRace,RC_DemiPlayer,10; bonus bMaxHPrate,20; bonus2 bResEff,Eff_Freeze,10000; skill "WZ_FIREPILLAR",10; }
-2371:2522,{ bonus bAgi,5; bonus bFlee,10; }
-2371:2523,{ bonus bAgi,5; bonus bFlee,10; }
-2374:2729,{ bonus2 bAddRace, RC_All, 3; bonus bMatkRate,3; }
-2375:2729,{ bonus2 bAddRace, RC_All, 3; bonus bMatkRate,3; }
-2376:2435:2538,{ bonus2 bSubRace,RC_NonDemiPlayer,-300; bonus bVit,3; bonus bMaxHPrate,12; bonus bHealPower2,10; bonus bAddItemHealRate,10; autobonus2 "{ bonus2 bHPRegenRate,600,1000; }",5,10000,BF_WEAPON,"{ specialeffect(EF_HEAL, AREA, playerattached()); }"; }
-2377:2435:2538,{ bonus2 bSubRace,RC_NonDemiPlayer,-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:2435:2538,{ bonus2 bSubRace,RC_NonDemiPlayer,-300; bonus bAgi,3; bonus bMaxHPrate,12; bonus bCritical,5; bonus bAspdRate,5; autobonus "{ bonus2 bHPRegenRate,300,1000; }",10,10000,BF_WEAPON,"{ specialeffect(EF_HEAL, AREA, playerattached()); }"; }
-2379:2436:2539,{ bonus2 bSubRace,RC_NonDemiPlayer,-300; bonus bInt,3; bonus bMaxHPrate,12; bonus2 bResEff,Eff_Stun,2000; autobonus2 "{ bonus bDefEle,Ele_Ghost; }",30,10000,BF_WEAPON,"{ specialeffect(EF_ENERGYCOAT, AREA, playerattached()); }"; }
-2380:2436:2539,{ bonus2 bSubRace,RC_NonDemiPlayer,-300; bonus bInt,3; bonus bMaxHPrate,12; bonus2 bCastrate,"AL_HOLYLIGHT",-50; bonus bHealPower,6; autobonus2 "{ bonus bDefEle,Ele_Ghost; }",30,10000,BF_WEAPON,"{ specialeffect(EF_ENERGYCOAT, AREA, playerattached()); }"; }
-2381:2436:2539,{ bonus2 bSubRace,RC_NonDemiPlayer,-300; bonus bDex,3; bonus bMaxHPrate,12; bonus bLongAtkDef,10; bonus bDelayrate,-25; }
-2382:2437:2540,{ bonus2 bSubRace,RC_NonDemiPlayer,-300; bonus bDex,3; bonus bMaxHPrate,12; bonus bLongAtkDef,10; bonus bDelayrate,-25; }
-2387:2440:2744,{ bonus bMaxHPrate,7; bonus bMaxSPrate,7; bonus bCastrate,-3; bonus bDelayrate,-15; }
-2390:2749,{ bonus bFlee2,5; }
-2394:2444:2549,{ bonus2 bAddRace, RC_All, 5; bonus bMatkRate,5; bonus2 bResEff,Eff_Freeze,10000; bonus2 bSkillHeal2,"AM_POTIONPITCHER",3; bonus2 bSkillHeal2,"AL_HEAL",3; bonus2 bSkillHeal2,"PR_SANCTUARY",3; }
-2399:2553,{ bonus bAgi,5; bonus bFlee,15; }
-2408:2655,{ bonus bBaseAtk,50; bonus2 bAddDefClass,1196,20; bonus2 bAddDefClass,1197,20; }
-2424:2528,{ bonus bHPrecovRate,5; bonus bMaxHPrate,10; }
-2425:2529,{ bonus bFlee,10; }
-2425:2530,{ bonus bFlee,10; }
-2425:2551,{ bonus bFlee,10; }
-2433:2537,{ bonus bMaxHPrate,6; }
-2434:2529,{ bonus bFlee,10; }
-2434:2530,{ bonus bFlee,10; }
-2434:2551,{ bonus bFlee,10; }
-2441:2546,{ bonus bFlee,5; }
-2518:2648:2649:5126,{ bonus bInt,5; bonus bMdef,11; bonus bMaxSPrate,20; bonus bNoCastCancel,0; bonus bCastrate,25; }
-2519:2650:2651:5127,{ bonus bStr,2; bonus bLuk,9; bonus bCritical,13; bonus bBaseAtk,18; bonus bFlee2,13; }
-2527:13001,{ bonus2 bAddRace,RC_Dragon,5; }
-2607:2677,{ bonus2 bSkillAtk,"AL_HEAL",50; bonus2 bSkillAtk,"PR_MAGNUS",30; bonus bSPrecovRate,9; }
-2607:2711,{ bonus2 bSkillAtk,"AL_HEAL",50; bonus2 bSkillAtk,"PR_MAGNUS",30; bonus bSPrecovRate,9; }
-2607:2786,{ bonus2 bSkillAtk,"AL_HEAL",50; bonus2 bSkillAtk,"PR_MAGNUS",30; bonus bSPrecovRate,9; }
-2608:2677,{ bonus2 bSkillAtk,"AL_HEAL",50; bonus2 bSkillAtk,"PR_MAGNUS",30; bonus bSPrecovRate,9; }
-2608:2711,{ bonus2 bSkillAtk,"AL_HEAL",50; bonus2 bSkillAtk,"PR_MAGNUS",30; bonus bSPrecovRate,9; }
-2608:2786,{ bonus2 bSkillAtk,"AL_HEAL",50; bonus2 bSkillAtk,"PR_MAGNUS",30; bonus bSPrecovRate,9; }
-2620:2746,{ bonus2 bAddSize,Size_Medium,8; bonus bAspdRate,getequiprefinerycnt(EQI_HAND_R)/2; }
-2620:2747,{ bonus2 bAddSize,Size_Large,8; bonus bHit,getequiprefinerycnt(EQI_HAND_R)/2; bonus bCastrate,-getequiprefinerycnt(EQI_HAND_R)/2; }
-2626:2677,{ bonus2 bSkillAtk,"AL_HEAL",50; bonus2 bSkillAtk,"PR_MAGNUS",30; bonus bSPrecovRate,9; }
-2626:2711,{ bonus2 bSkillAtk,"AL_HEAL",50; bonus2 bSkillAtk,"PR_MAGNUS",30; bonus bSPrecovRate,9; }
-2626:2786,{ bonus2 bSkillAtk,"AL_HEAL",50; bonus2 bSkillAtk,"PR_MAGNUS",30; bonus bSPrecovRate,9; }
-2678:2679,{ bonus4 bAutoSpell,"MO_EXTREMITYFIST",1,3,1; bonus3 bAutoSpell,"PR_LEXAETERNA",1,20; bonus3 bAutoSpell,"AS_SONICBLOW",5,50; bonus3 bAutoSpell,"MO_INVESTIGATE",5,20; bonus3 bAutoSpell,"ASC_METEORASSAULT",2,50; }
-//2679:2792,{ bonus4 bAutoSpell,"MO_EXTREMITYFIST",1,3,1; bonus3 bAutoSpell,"PR_LEXAETERNA",1,20; bonus3 bAutoSpell,"AS_SONICBLOW",5,50; bonus3 bAutoSpell,"MO_INVESTIGATE",5,20; bonus3 bAutoSpell,"ASC_METEORASSAULT",2,50; }
-2720:2772,{ bonus2 bAddRace, RC_All, 5; bonus bMatkRate,3; bonus bHealPower,5; }
-2721:2772,{ bonus2 bAddRace, RC_All, 5; bonus bMatkRate,3; bonus bHealPower,5; }
-2722:2772,{ bonus2 bAddRace, RC_All, 5; bonus bMatkRate,3; bonus bHealPower,5; }
-2723:2772,{ bonus2 bAddRace, RC_All, 5; bonus bMatkRate,3; bonus bHealPower,5; }
-2724:2772,{ bonus2 bAddRace, RC_All, 5; bonus bMatkRate,3; bonus bHealPower,5; }
-2725:2772,{ bonus2 bAddRace, RC_All, 5; bonus bMatkRate,3; bonus bHealPower,5; }
-2726:2727,{ bonus bUseSPrate,-25; }
-2733:2772,{ bonus2 bAddRace, RC_All, 5; bonus bMatkRate,3; bonus bHealPower,5; }
-2777:2778:5479,{ bonus bMaxHP,300; bonus bMatkRate,5; bonus2 bSubEle,Ele_Neutral,5; }
-2779:2780:5482,{ bonus bMatkRate,10; bonus bInt,5; bonus2 bSubRace,RC_Angel,10; }
-2779:2780:5577,{ bonus bMatkRate,10; bonus bInt,5; bonus2 bSubRace,RC_Angel,10; }
-4001:4197,{ bonus bFlee,18; }
-4006:4266,{ bonus bFlee,18; }
-4009:4179,{ bonus bFlee,18; }
-4014:4306,{ bonus bFlee,18; }
-4021:4211,{ bonus bFlee,18; }
-4025:4222,{ bonus2 bAddEffWhenHit,Eff_Sleep,600; }
-4028:4296,{ bonus bStr,3; }
-4029:4183,{ bonus bFlee,18; }
-4031:4161,{ bonus bDef,3; bonus bVit,3; }
-4036:4186:4233:4281:4343,{ bonus bStr,4; bonus bMaxHPrate,7; bonus bMaxSPrate,7; bonus2 bSkillAtk,"MC_MAMMONITE",20; bonus bSPDrainValue,1; if(BaseJob==Job_Alchemist) { bonus3 bAutoSpell,"BS_ADRENALINE",1,10; bonus2 bAddMonsterDropItem,7139,3; bonus2 bAddMonsterDropItem,905,10; } }
-4039:4210:4230:4257:4348,{ bonus bStr,6; bonus bAgi,4; bonus2 bSkillAtk,"RG_BACKSTAP",10; if(getskilllv("RG_STRIPARMOR")==5) bonus3 bAutoSpell,"RG_STRIPARMOR",5,50; if(BaseJob==Job_Rogue) { bonus bUseSPrate,-20; bonus3 bAutoSpell,"RG_INTIMIDATE",1,-20; } }
-4074:4162,{ bonus2 bAddEffWhenHit,Eff_Blind,600; }
-4090:4212:4328,{ bonus bAllStats,1; }
-4106:4248,{ bonus bPerfectHitAddRate,20; }
-4127:4166,{ bonus2 bAddEffWhenHit,Eff_Curse,600; }
-4153:4247:4273,{ bonus3 bAddMonsterDropItem,544,RC_Fish,3000; bonus2 bAddEle,Ele_Water,30; }
-4168:4169,{ bonus bMaxHPrate,20; bonus bMaxSPrate,20; bonus bCastrate,-10; }
-4172:4210:4230:4257:4272,{ bonus bAgi,5; bonus bStr,5; bonus bAspdRate,5; bonus bSpeedRate,25; bonus2 bSPDrainValue,1,0; if(BaseClass==Job_Thief) bonus bNoGemStone,0; }
-4178:4199:4234:4252:4297,{ bonus bAgi,5; bonus bDex,3; bonus bLongAtkRate,20; bonus bPerfectHitAddRate,20; if(BaseClass==Job_Archer) { bonus2 bExpAddRace,RC_Brute,5; bonus2 bWeaponComaRace,RC_Brute,100; } }
-4178:4234:4252:4297:4381,{ bonus bDex,5; bonus2 bSkillAtk,"CG_ARROWVULCAN",5; bonus2 bSkillAtk,"DC_THROWARROW",10; bonus2 bSkillAtk,"BA_MUSICALSTRIKE",10; if(BaseJob==Job_Bard||BaseJob==Job_Dancer) bonus3 bAutoSpellWhenHit,"CG_TAROTCARD",2,50; }
-4185:4217:4280:4293:4312,{ bonus bVit,10; bonus bCastrate,-10; bonus bUseSPrate,-10; if(BaseClass==Job_Acolyte) { bonus2 bExpAddRace,RC_Undead,5; bonus2 bExpAddRace,RC_Demon,5; bonus2 bSubRace,RC_Undead,30; bonus2 bSubRace,RC_Demon,30; } }
-4185:4293:4312:4332,{ bonus bStr,3; bonus bMaxSP,80; bonus bBaseAtk,25; bonus3 bAutoSpell,"AL_CRUCIS",5,10; bonus2 bSkillAtk,"MO_EXTREMITYFIST",10; if(BaseJob==Job_Monk) { bonus bUseSPrate,-10; bonus bNoCastCancel,0; } }
-4186:4206:4233:4281:4321,{ bonus bLuk,10; bonus2 bSPDrainValue,2,0; bonus2 bSkillAtk,42,20; if(BaseClass==Job_Merchant) { bonus2 bAddMonsterDropItem,617,5; bonus bMagicDamageReturn,20; } }
-4191:4208:4258:4309:4325:4327,{ bonus bMaxHP,500; bonus bDef,5; bonus bMdef,5; bonus2 bSkillAtk,14,10; bonus2 bSkillAtk,19,10; bonus2 bSkillAtk,20,10; if(BaseClass==Job_Mage) { bonus bMatkRate,3; bonus bCastrate,-15; } }
-4193:4294,{ bonus bMaxHP,300; bonus bMaxSP,60; }
-4208:4258:4325:4327:4382,{ bonus bInt,3; bonus2 bSkillAtk,"WZ_HEAVENDRIVE",10; bonus2 bSkillAtk,"MG_THUNDERSTORM",10; if(BaseJob==Job_Sage) { bonus bMagicDamageReturn,20; bonus2 bAddMonsterDropItem,716,100; bonus2 bAddMonsterDropItem,715,100; bonus bCastrate,-20; } }
-4218:4269,{ bonus bHPrecovRate,30; bonus bSPrecovRate,30; bonus bVit,4; bonus bInt,4; }
-4220:4246:4311:4319:4331,{ bonus bStr,10; bonus bMaxHPrate,20; bonus bHPrecovRate,50; bonus3 bAutoSpell,"BS_WEAPONPERFECT",1,3; bonus2 bAddMonsterDropItem,501,500; if(BaseClass==Job_Swordman) { bonus2 bAddItemHealRate,Red_Potion,50; bonus2 bAddItemHealRate,Yellow_Potion,50; bonus2 bAddItemHealRate,Orange_Potion,50; bonus2 bAddItemHealRate,White_Potion,50; } }
-4229:4244:4299:4313,{ bonus bDef,3; bonus bMdef,3; }
-4237:4238,{ bonus3 bAutoSpell,"MG_LIGHTNINGBOLT",5,20; }
-4268:4277,{ bonus bBaseAtk,20; bonus bLuk,3; }
-4311:4319:4331:4371,{ bonus bInt,1; bonus bStr,1; bonus bDef,2; bonus bSPrecovRate,10; bonus2 bSkillAtk,"PA_SHIELDCHAIN",10; bonus2 bSkillAtk,"PA_SACRIFICE",10; bonus bCastrate,-10; if(BaseJob==Job_Crusader) bonus bDefEle,Ele_Holy; }
-4323:4324,{ bonus3 bAutoSpell,"MG_FROSTDIVER",3,250; }
-4435:4436,{ bonus2 bSPGainRace,RC_DemiPlayer,2; }
-5040:5442,{ bonus bAspdRate,3; bonus bCastrate,3; }
-5068:5653,{ bonus bStr,1; bonus bAtkRate,5; }
-5074:5653,{ bonus bStr,1; bonus bAspdRate,2; }
-5086:18656,{ bonus2 bAddMonsterDropItem,12192,1; bonus2 bAddMonsterDropItem,538,1; bonus2 bAddItemHealRate,12192,100; bonus2 bAddItemHealRate,538,100; }
-5176:18656,{ bonus bAspdRate,5; autobonus "{ bonus bAtk,50; }",5,10000,0,"{ specialeffect(EF_POTION_BERSERK, AREA, playerattached()); }"; }
-//5184:5657,{ bonus bLongAtkRate,getrefine(); }
-5358:5653,{ bonus bAgi,1; bonus bFlee,3; }
-5401:5653,{ bonus bInt,1; bonus bMatkRate,2; }
-//5470:5653,{ bonus bDex,1; bonus bLongAtkRate,3; }
-5574:5073,{ bonus bDex, 2; bonus bDef, 2; }
-13034:13035,{ bonus bMaxSP,20; bonus bMaxHPrate,5; bonus bHit,10; bonus2 bAddSize,Size_Large,30; autobonus "{ bonus bAspdRate,100; }",1,7000,0,"{ specialeffect(EF_POTION_BERSERK, AREA, playerattached()); }"; }
-18507:18539,{ bonus bUseSPrate,-3; }
diff --git a/db/pre-re/item_db.conf b/db/pre-re/item_db.conf
index c860e0239..d6b22e9fb 100644
--- a/db/pre-re/item_db.conf
+++ b/db/pre-re/item_db.conf
@@ -121,6 +121,8 @@ item_db: (
">
OnEquipScript: <" OnEquip Script (can also be multi-line) ">
OnUnequipScript: <" OnUnequip Script (can also be multi-line) ">
+ OnRentalStartScript: <" On item renting script, gets called after item is created in inventory (can also be multi-line) ">
+ OnRentalEndScript: <" On item rent end/expire script, gets called after item is removed from inventory (can also be multi-line) ">
},
**************************************************************************/
@@ -18256,6 +18258,11 @@ item_db: (
Name: "Combo_Battle_Glove_IL"
},
{
+ Id: 1847
+ AegisName: "Iron_Nail_K"
+ Name: "Iron_Nail_K"
+},
+{
Id: 1848
AegisName: "Rebeginer_SR_Nuckle"
Name: "Rebeginer_SR_Nuckle"
@@ -18270,6 +18277,11 @@ item_db: (
AegisName: "Evt_Iron_Nail_K"
Name: "Evt_Iron_Nail_K"
},
+{
+ Id: 1867
+ AegisName: "Ein_1HKNUCK"
+ Name: "Ein_1HKNUCK"
+},
//== Instruments ===========================================
{
@@ -19909,6 +19921,11 @@ item_db: (
Name: "Rebeginer_WL_Staff"
},
{
+ Id: 2048
+ AegisName: "Iron_Staff"
+ Name: "Iron_Staff"
+},
+{
Id: 2051
AegisName: "Survival_Staff_IL"
Name: "Survival_Staff_IL"
@@ -19918,6 +19935,11 @@ item_db: (
AegisName: "Evt_Iron_Staff"
Name: "Evt_Iron_Staff"
},
+{
+ Id: 2058
+ AegisName: "Ein_BHSTAFF"
+ Name: "Ein_BHSTAFF"
+},
//== Shields ===============================================
{
@@ -64627,6 +64649,31 @@ item_db: (
noauction: true
}
},
+{
+ Id: 9514
+ AegisName: "Ein_Ddbox"
+ Name: "Ein_Ddbox"
+},
+{
+ Id: 9523
+ AegisName: "Metal_Rifine_Ticket"
+ Name: "Metal_Rifine_Ticket"
+},
+{
+ Id: 9529
+ AegisName: "Ein_Ddbox2"
+ Name: "Ein_Ddbox2"
+},
+{
+ Id: 9550
+ AegisName: "Gemstone_Of_Time"
+ Name: "Gemstone_Of_Time"
+},
+{
+ Id: 9551
+ AegisName: "Time_Unseal_Key"
+ Name: "Time_Unseal_Key"
+},
//== Pet Accessories =======================================
{
Id: 10001
@@ -69570,7 +69617,11 @@ item_db: (
nomail: true
noauction: true
}
- Script: <" setfont 1; ">
+ Script: <" setfont(1); ">
+ OnRentalEndScript: <"
+ if (getfont() == 1)
+ setfont(0);
+ ">
},
{
Id: 12288
@@ -69587,7 +69638,11 @@ item_db: (
nomail: true
noauction: true
}
- Script: <" setfont 2; ">
+ Script: <" setfont(2); ">
+ OnRentalEndScript: <"
+ if (getfont() == 2)
+ setfont(0);
+ ">
},
{
Id: 12289
@@ -69604,7 +69659,11 @@ item_db: (
nomail: true
noauction: true
}
- Script: <" setfont 3; ">
+ Script: <" setfont(3); ">
+ OnRentalEndScript: <"
+ if (getfont() == 3)
+ setfont(0);
+ ">
},
{
Id: 12290
@@ -69856,7 +69915,11 @@ item_db: (
nomail: true
noauction: true
}
- Script: <" setfont 4; ">
+ Script: <" setfont(4); ">
+ OnRentalEndScript: <"
+ if (getfont() == 4)
+ setfont(0);
+ ">
},
{
Id: 12305
@@ -69873,7 +69936,11 @@ item_db: (
nomail: true
noauction: true
}
- Script: <" setfont 5; ">
+ Script: <" setfont(5); ">
+ OnRentalEndScript: <"
+ if (getfont() == 5)
+ setfont(0);
+ ">
},
{
Id: 12306
@@ -69890,7 +69957,11 @@ item_db: (
nomail: true
noauction: true
}
- Script: <" setfont 6; ">
+ Script: <" setfont(6); ">
+ OnRentalEndScript: <"
+ if (getfont() == 6)
+ setfont(0);
+ ">
},
{
Id: 12307
@@ -69907,7 +69978,11 @@ item_db: (
nomail: true
noauction: true
}
- Script: <" setfont 7; ">
+ Script: <" setfont(7); ">
+ OnRentalEndScript: <"
+ if (getfont() == 7)
+ setfont(0);
+ ">
},
{
Id: 12308
@@ -69924,7 +69999,11 @@ item_db: (
nomail: true
noauction: true
}
- Script: <" setfont 8; ">
+ Script: <" setfont(8); ">
+ OnRentalEndScript: <"
+ if (getfont() == 8)
+ setfont(0);
+ ">
},
{
Id: 12309
@@ -69941,7 +70020,11 @@ item_db: (
nomail: true
noauction: true
}
- Script: <" setfont 9; ">
+ Script: <" setfont(9); ">
+ OnRentalEndScript: <"
+ if (getfont() == 9)
+ setfont(0);
+ ">
},
{
Id: 12310
@@ -73051,6 +73134,7 @@ item_db: (
noauction: true
}
Script: <" setcashmount(); ">
+ OnRentalEndScript: <" sc_end(SC_ALL_RIDING); ">
},
{
Id: 12701
@@ -79394,6 +79478,16 @@ item_db: (
AegisName: "Rebeginer_KO_Humma"
Name: "Rebeginer_KO_Humma"
},
+{
+ Id: 13345
+ AegisName: "Humma_Clear"
+ Name: "Humma_Clear"
+},
+{
+ Id: 13346
+ AegisName: "Ein_BHHuuma"
+ Name: "Ein_BHHuuma"
+},
//== More One-Handed Swords ================================
{
@@ -80184,6 +80278,11 @@ item_db: (
Name: "Rebeginer_GN_Sword"
},
{
+ Id: 13485
+ AegisName: "Sword_Of_Bluefire"
+ Name: "Sword_Of_Bluefire"
+},
+{
Id: 13493
AegisName: "Cannon_Rapier_OS"
Name: "Cannon_Rapier_OS"
@@ -93436,16 +93535,46 @@ item_db: (
Name: "Rebeginer_Suits"
},
{
+ Id: 15278
+ AegisName: "Overwhelm_Str_Armor"
+ Name: "Overwhelm_Str_Armor"
+},
+{
+ Id: 15279
+ AegisName: "Overwhelm_Int_Armor"
+ Name: "Overwhelm_Int_Armor"
+},
+{
Id: 15280
AegisName: "S_CriticalHit_Armor"
Name: "S_CriticalHit_Armor"
},
{
+ Id: 15346
+ AegisName: "Overwhelm_Luk_Armor"
+ Name: "Overwhelm_Luk_Armor"
+},
+{
+ Id: 15347
+ AegisName: "Overwhelm_Vit_Armor"
+ Name: "Overwhelm_Vit_Armor"
+},
+{
Id: 15348
AegisName: "Goibne_Armor_IL"
Name: "Goibne_Armor_IL"
},
{
+ Id: 15353
+ AegisName: "Overwhelm_Agi_Armor"
+ Name: "Overwhelm_Agi_Armor"
+},
+{
+ Id: 15354
+ AegisName: "Overwhelm_Dex_Armor"
+ Name: "Overwhelm_Dex_Armor"
+},
+{
Id: 15376
AegisName: "Illusion_Armor_A"
Name: "Illusion_Armor_A"
@@ -93456,6 +93585,21 @@ item_db: (
Name: "Illusion_Armor_B"
},
{
+ Id: 15378
+ AegisName: "Lava_Leather_Armor"
+ Name: "Lava_Leather_Armor"
+},
+{
+ Id: 15379
+ AegisName: "Lava_Leather_Suits"
+ Name: "Lava_Leather_Suits"
+},
+{
+ Id: 15380
+ AegisName: "Lava_Leather_Robe"
+ Name: "Lava_Leather_Robe"
+},
+{
Id: 15383
AegisName: "Time_Overload_Robe"
Name: "Time_Overload_Robe"
@@ -93470,6 +93614,36 @@ item_db: (
AegisName: "Schmidt_Manteau"
Name: "Schmidt_Manteau"
},
+{
+ Id: 15391
+ AegisName: "DragonA_Red"
+ Name: "DragonA_Red"
+},
+{
+ Id: 15392
+ AegisName: "DragonA_Green"
+ Name: "DragonA_Green"
+},
+{
+ Id: 15393
+ AegisName: "DragonA_Gold"
+ Name: "DragonA_Gold"
+},
+{
+ Id: 15394
+ AegisName: "DragonA_Purple"
+ Name: "DragonA_Purple"
+},
+{
+ Id: 15395
+ AegisName: "DragonA_Blue"
+ Name: "DragonA_Blue"
+},
+{
+ Id: 15396
+ AegisName: "DragonA_Silver"
+ Name: "DragonA_Silver"
+},
//== More Maces ============================================
{
@@ -93663,6 +93837,11 @@ item_db: (
AegisName: "Ultio_Spes_OS"
Name: "Ultio_Spes_OS"
},
+{
+ Id: 16099
+ AegisName: "Ein_1HHAMMER"
+ Name: "Ein_1HHAMMER"
+},
//== More Rental Boxes =====================================
{
@@ -94549,6 +94728,11 @@ item_db: (
Name: "Balistar_IL"
},
{
+ Id: 18164
+ AegisName: "Royal_Bow_K"
+ Name: "Royal_Bow_K"
+},
+{
Id: 18165
AegisName: "Rebeginer_RN_Bow"
Name: "Rebeginer_RN_Bow"
@@ -94593,6 +94777,11 @@ item_db: (
AegisName: "Evt_Narcis_Bow"
Name: "Evt_Narcis_Bow"
},
+{
+ Id: 18190
+ AegisName: "Ein_BHBOW"
+ Name: "Ein_BHBOW"
+},
//== More Headgears ========================================
{
@@ -95058,6 +95247,11 @@ item_db: (
Name: "C_GiantCatBag_TW"
},
{
+ Id: 20519
+ AegisName: "C_Full_BloomCherry_Tree"
+ Name: "C_Full_BloomCherry_Tree"
+},
+{
Id: 20528
AegisName: "C_GoldButterfly_Wing"
Name: "C_GoldButterfly_Wing"
@@ -95078,6 +95272,36 @@ item_db: (
Name: "C_Digital_Space"
},
{
+ Id: 20543
+ AegisName: "C_Halloween_Poring_Bag"
+ Name: "C_Halloween_Poring_Bag"
+},
+{
+ Id: 20546
+ AegisName: "C_Backside_Ribbon_Bell"
+ Name: "C_Backside_Ribbon_Bell"
+},
+{
+ Id: 20570
+ AegisName: "C_HeartChocoBag"
+ Name: "C_HeartChocoBag"
+},
+{
+ Id: 20572
+ AegisName: "C_WingOfHeart"
+ Name: "C_WingOfHeart"
+},
+{
+ Id: 20576
+ AegisName: "C_Cat_Fork"
+ Name: "C_Cat_Fork"
+},
+{
+ Id: 20584
+ AegisName: "C_Big_Foxtail"
+ Name: "C_Big_Foxtail"
+},
+{
Id: 20838
AegisName: "Muffler_IL"
Name: "Muffler_IL"
@@ -95143,11 +95367,51 @@ item_db: (
Name: "Fairy_Cloth"
},
{
+ Id: 20946
+ AegisName: "Drag_Manteau"
+ Name: "Drag_Manteau"
+},
+{
+ Id: 20963
+ AegisName: "Temporal_M_Str"
+ Name: "Temporal_M_Str"
+},
+{
+ Id: 20964
+ AegisName: "Temporal_M_Agi"
+ Name: "Temporal_M_Agi"
+},
+{
+ Id: 20965
+ AegisName: "Temporal_M_Vit"
+ Name: "Temporal_M_Vit"
+},
+{
+ Id: 20966
+ AegisName: "Temporal_M_Int"
+ Name: "Temporal_M_Int"
+},
+{
+ Id: 20967
+ AegisName: "Temporal_M_Dex"
+ Name: "Temporal_M_Dex"
+},
+{
+ Id: 20968
+ AegisName: "Temporal_M_Luk"
+ Name: "Temporal_M_Luk"
+},
+{
Id: 21037
AegisName: "Rebeginer_RK_T_Sword"
Name: "Rebeginer_RK_T_Sword"
},
{
+ Id: 21038
+ AegisName: "Oriental_Sword"
+ Name: "Oriental_Sword"
+},
+{
Id: 21047
AegisName: "Beam_Claymore_OS"
Name: "Beam_Claymore_OS"
@@ -95158,6 +95422,16 @@ item_db: (
Name: "Evt_Oriental_Sword"
},
{
+ Id: 21050
+ AegisName: "Taegoolyeon_IL"
+ Name: "Taegoolyeon_IL"
+},
+{
+ Id: 21054
+ AegisName: "Ein_BHSWORD"
+ Name: "Ein_BHSWORD"
+},
+{
Id: 22133
AegisName: "Shoes_IL"
Name: "Shoes_IL"
@@ -95212,6 +95486,11 @@ item_db: (
AegisName: "Time_Overload_Boots"
Name: "Time_Overload_Boots"
},
+{
+ Id: 22208
+ AegisName: "Dragon_Boots"
+ Name: "Dragon_Boots"
+},
//== New Etc Items =========================================
{
@@ -95439,6 +95718,11 @@ item_db: (
Name: "Green_Scroll_K2"
},
{
+ Id: 23436
+ AegisName: "Shadow_Refine_Hammer"
+ Name: "Shadow_Refine_Hammer"
+},
+{
Id: 23440
AegisName: "Sentimental_Scroll"
Name: "Sentimental_Scroll"
@@ -95459,6 +95743,11 @@ item_db: (
Name: "Infinity_Scroll"
},
{
+ Id: 23474
+ AegisName: "InfinityShadow_Mix"
+ Name: "InfinityShadow_Mix"
+},
+{
Id: 23475
AegisName: "Infinity_Drink"
Name: "Infinity_Drink"
@@ -95589,6 +95878,21 @@ item_db: (
Name: "Bloody_Scroll"
},
{
+ Id: 23545
+ AegisName: "Silver_Statue"
+ Name: "Silver_Statue"
+},
+{
+ Id: 23546
+ AegisName: "Cursed_Blood"
+ Name: "Cursed_Blood"
+},
+{
+ Id: 23547
+ AegisName: "Gold_Statue"
+ Name: "Gold_Statue"
+},
+{
Id: 23549
AegisName: "Snow_Cookie"
Name: "Snow_Cookie"
@@ -95694,6 +95998,56 @@ item_db: (
Name: "2018_New_Year_Scroll"
},
{
+ Id: 23665
+ AegisName: "PhysicalMagical_Mix"
+ Name: "PhysicalMagical_Mix"
+},
+{
+ Id: 23666
+ AegisName: "ImmunedAthena_Mix"
+ Name: "ImmunedAthena_Mix"
+},
+{
+ Id: 23667
+ AegisName: "HardChamption_Mix"
+ Name: "HardChamption_Mix"
+},
+{
+ Id: 23668
+ AegisName: "KingbirdAncient_Mix"
+ Name: "KingbirdAncient_Mix"
+},
+{
+ Id: 23669
+ AegisName: "CriticalHit_Mix"
+ Name: "CriticalHit_Mix"
+},
+{
+ Id: 23675
+ AegisName: "Geffen_Magic_Scroll"
+ Name: "Geffen_Magic_Scroll"
+},
+{
+ Id: 23676
+ AegisName: "Gray_Charcoal_Melee"
+ Name: "Gray_Charcoal_Melee"
+},
+{
+ Id: 23677
+ AegisName: "Gray_Charcoal_Magic"
+ Name: "Gray_Charcoal_Magic"
+},
+{
+ Id: 23678
+ AegisName: "Gray_Charcoal_Range"
+ Name: "Gray_Charcoal_Range"
+},
+{
+ Id: 23679
+ AegisName: "Geffen_Magic_Scroll2"
+ Name: "Geffen_Magic_Scroll2"
+},
+{
Id: 23683
AegisName: "EVT_JAN02KR"
Name: "EVT_JAN02KR"
@@ -95719,6 +96073,11 @@ item_db: (
Name: "2018_Spring_Scroll"
},
{
+ Id: 23720
+ AegisName: "Shadow_Random_Mix"
+ Name: "Shadow_Random_Mix"
+},
+{
Id: 23723
AegisName: "Melon_Bread"
Name: "Melon_Bread"
@@ -95754,16 +96113,431 @@ item_db: (
Name: "EP17_1_SPC04"
},
{
+ Id: 23776
+ AegisName: "EP17_1_SPC05"
+ Name: "EP17_1_SPC05"
+},
+{
+ Id: 23777
+ AegisName: "EP17_1_SPC06"
+ Name: "EP17_1_SPC06"
+},
+{
+ Id: 23778
+ AegisName: "EP17_1_SPC07"
+ Name: "EP17_1_SPC07"
+},
+{
+ Id: 23779
+ AegisName: "EP17_1_SPC08"
+ Name: "EP17_1_SPC08"
+},
+{
+ Id: 23780
+ AegisName: "EP17_1_SPC09"
+ Name: "EP17_1_SPC09"
+},
+{
+ Id: 23781
+ AegisName: "EP17_1_SPC10"
+ Name: "EP17_1_SPC10"
+},
+{
+ Id: 23815
+ AegisName: "Magma_Essence"
+ Name: "Magma_Essence"
+},
+{
Id: 23817
AegisName: "Bs_Making_Scrolls"
Name: "Bs_Making_Scrolls"
},
{
+ Id: 23818
+ AegisName: "Bs_Item_M_S_2"
+ Name: "Bs_Item_M_S_2"
+},
+{
+ Id: 23819
+ AegisName: "Bs_Item_M_S_8"
+ Name: "Bs_Item_M_S_8"
+},
+{
+ Id: 23820
+ AegisName: "Bs_Item_M_S_10"
+ Name: "Bs_Item_M_S_10"
+},
+{
+ Id: 23821
+ AegisName: "Bs_Item_M_S_11"
+ Name: "Bs_Item_M_S_11"
+},
+{
+ Id: 23822
+ AegisName: "Bs_Item_M_S_34"
+ Name: "Bs_Item_M_S_34"
+},
+{
+ Id: 23823
+ AegisName: "Bs_Item_M_S_41"
+ Name: "Bs_Item_M_S_41"
+},
+{
+ Id: 23824
+ AegisName: "Bs_Item_M_S_42"
+ Name: "Bs_Item_M_S_42"
+},
+{
+ Id: 23825
+ AegisName: "Bs_Item_M_S_43"
+ Name: "Bs_Item_M_S_43"
+},
+{
+ Id: 23826
+ AegisName: "Bs_Item_M_S_44"
+ Name: "Bs_Item_M_S_44"
+},
+{
+ Id: 23827
+ AegisName: "Bs_Sha_M_S_1"
+ Name: "Bs_Sha_M_S_1"
+},
+{
+ Id: 23828
+ AegisName: "Bs_Sha_M_S_17"
+ Name: "Bs_Sha_M_S_17"
+},
+{
+ Id: 23829
+ AegisName: "Bs_Sha_M_S_18"
+ Name: "Bs_Sha_M_S_18"
+},
+{
+ Id: 23830
+ AegisName: "Bs_Sha_M_S_19"
+ Name: "Bs_Sha_M_S_19"
+},
+{
+ Id: 23831
+ AegisName: "Bs_Sha_M_S_20"
+ Name: "Bs_Sha_M_S_20"
+},
+{
+ Id: 23832
+ AegisName: "Bs_Item_M_S_4"
+ Name: "Bs_Item_M_S_4"
+},
+{
+ Id: 23833
+ AegisName: "Bs_Item_M_S_6"
+ Name: "Bs_Item_M_S_6"
+},
+{
+ Id: 23834
+ AegisName: "Bs_Item_M_S_7"
+ Name: "Bs_Item_M_S_7"
+},
+{
+ Id: 23835
+ AegisName: "Bs_Item_M_S_12"
+ Name: "Bs_Item_M_S_12"
+},
+{
+ Id: 23836
+ AegisName: "Bs_Item_M_S_13"
+ Name: "Bs_Item_M_S_13"
+},
+{
+ Id: 23837
+ AegisName: "Bs_Item_M_S_15"
+ Name: "Bs_Item_M_S_15"
+},
+{
+ Id: 23838
+ AegisName: "Bs_Item_M_S_28"
+ Name: "Bs_Item_M_S_28"
+},
+{
+ Id: 23839
+ AegisName: "Bs_Item_M_S_29"
+ Name: "Bs_Item_M_S_29"
+},
+{
+ Id: 23840
+ AegisName: "Bs_Item_M_S_31"
+ Name: "Bs_Item_M_S_31"
+},
+{
+ Id: 23841
+ AegisName: "Bs_Item_M_S_32"
+ Name: "Bs_Item_M_S_32"
+},
+{
+ Id: 23842
+ AegisName: "Bs_Item_M_S_33"
+ Name: "Bs_Item_M_S_33"
+},
+{
+ Id: 23843
+ AegisName: "Bs_Item_M_S_36"
+ Name: "Bs_Item_M_S_36"
+},
+{
+ Id: 23844
+ AegisName: "Bs_Item_M_S_37"
+ Name: "Bs_Item_M_S_37"
+},
+{
+ Id: 23845
+ AegisName: "Bs_Item_M_S_38"
+ Name: "Bs_Item_M_S_38"
+},
+{
+ Id: 23846
+ AegisName: "Bs_Item_M_S_39"
+ Name: "Bs_Item_M_S_39"
+},
+{
+ Id: 23847
+ AegisName: "Bs_Item_M_S_40"
+ Name: "Bs_Item_M_S_40"
+},
+{
+ Id: 23848
+ AegisName: "Bs_Item_M_S_45"
+ Name: "Bs_Item_M_S_45"
+},
+{
+ Id: 23849
+ AegisName: "Bs_Item_M_S_46"
+ Name: "Bs_Item_M_S_46"
+},
+{
+ Id: 23850
+ AegisName: "Bs_Item_M_S_47"
+ Name: "Bs_Item_M_S_47"
+},
+{
+ Id: 23851
+ AegisName: "Bs_Item_M_S_48"
+ Name: "Bs_Item_M_S_48"
+},
+{
+ Id: 23852
+ AegisName: "Bs_Item_M_S_49"
+ Name: "Bs_Item_M_S_49"
+},
+{
+ Id: 23853
+ AegisName: "Bs_Item_M_S_50"
+ Name: "Bs_Item_M_S_50"
+},
+{
+ Id: 23854
+ AegisName: "Bs_Sha_M_S_2"
+ Name: "Bs_Sha_M_S_2"
+},
+{
+ Id: 23855
+ AegisName: "Bs_Sha_M_S_5"
+ Name: "Bs_Sha_M_S_5"
+},
+{
+ Id: 23856
+ AegisName: "Bs_Sha_M_S_6"
+ Name: "Bs_Sha_M_S_6"
+},
+{
+ Id: 23857
+ AegisName: "Bs_Sha_M_S_7"
+ Name: "Bs_Sha_M_S_7"
+},
+{
+ Id: 23858
+ AegisName: "Bs_Sha_M_S_8"
+ Name: "Bs_Sha_M_S_8"
+},
+{
+ Id: 23859
+ AegisName: "Bs_Sha_M_S_13"
+ Name: "Bs_Sha_M_S_13"
+},
+{
+ Id: 23860
+ AegisName: "Bs_Sha_M_S_15"
+ Name: "Bs_Sha_M_S_15"
+},
+{
+ Id: 23861
+ AegisName: "Bs_Sha_M_S_16"
+ Name: "Bs_Sha_M_S_16"
+},
+{
+ Id: 23862
+ AegisName: "Bs_Sha_M_S_23"
+ Name: "Bs_Sha_M_S_23"
+},
+{
+ Id: 23863
+ AegisName: "Bs_Item_M_S_5"
+ Name: "Bs_Item_M_S_5"
+},
+{
+ Id: 23864
+ AegisName: "Bs_Item_M_S_9"
+ Name: "Bs_Item_M_S_9"
+},
+{
+ Id: 23865
+ AegisName: "Bs_Item_M_S_14"
+ Name: "Bs_Item_M_S_14"
+},
+{
+ Id: 23866
+ AegisName: "Bs_Item_M_S_16"
+ Name: "Bs_Item_M_S_16"
+},
+{
+ Id: 23867
+ AegisName: "Bs_Item_M_S_17"
+ Name: "Bs_Item_M_S_17"
+},
+{
+ Id: 23868
+ AegisName: "Bs_Item_M_S_19"
+ Name: "Bs_Item_M_S_19"
+},
+{
+ Id: 23869
+ AegisName: "Bs_Item_M_S_27"
+ Name: "Bs_Item_M_S_27"
+},
+{
+ Id: 23870
+ AegisName: "Bs_Item_M_S_35"
+ Name: "Bs_Item_M_S_35"
+},
+{
+ Id: 23871
+ AegisName: "Bs_Sha_M_S_9"
+ Name: "Bs_Sha_M_S_9"
+},
+{
+ Id: 23872
+ AegisName: "Bs_Sha_M_S_10"
+ Name: "Bs_Sha_M_S_10"
+},
+{
+ Id: 23873
+ AegisName: "Bs_Sha_M_S_11"
+ Name: "Bs_Sha_M_S_11"
+},
+{
+ Id: 23874
+ AegisName: "Bs_Sha_M_S_21"
+ Name: "Bs_Sha_M_S_21"
+},
+{
+ Id: 23875
+ AegisName: "Bs_Sha_M_S_22"
+ Name: "Bs_Sha_M_S_22"
+},
+{
+ Id: 23876
+ AegisName: "Bs_Item_M_S_1"
+ Name: "Bs_Item_M_S_1"
+},
+{
+ Id: 23877
+ AegisName: "Bs_Item_M_S_3"
+ Name: "Bs_Item_M_S_3"
+},
+{
Id: 23878
AegisName: "StarSoul_Scroll"
Name: "StarSoul_Scroll"
},
{
+ Id: 23879
+ AegisName: "Bs_Item_M_S_18"
+ Name: "Bs_Item_M_S_18"
+},
+{
+ Id: 23880
+ AegisName: "Bs_Item_M_S_20"
+ Name: "Bs_Item_M_S_20"
+},
+{
+ Id: 23881
+ AegisName: "Bs_Item_M_S_21"
+ Name: "Bs_Item_M_S_21"
+},
+{
+ Id: 23882
+ AegisName: "Bs_Item_M_S_22"
+ Name: "Bs_Item_M_S_22"
+},
+{
+ Id: 23883
+ AegisName: "Bs_Item_M_S_23"
+ Name: "Bs_Item_M_S_23"
+},
+{
+ Id: 23884
+ AegisName: "Bs_Item_M_S_24"
+ Name: "Bs_Item_M_S_24"
+},
+{
+ Id: 23885
+ AegisName: "Bs_Item_M_S_25"
+ Name: "Bs_Item_M_S_25"
+},
+{
+ Id: 23886
+ AegisName: "Bs_Item_M_S_26"
+ Name: "Bs_Item_M_S_26"
+},
+{
+ Id: 23887
+ AegisName: "Bs_Item_M_S_30"
+ Name: "Bs_Item_M_S_30"
+},
+{
+ Id: 23888
+ AegisName: "Bs_Sha_M_S_3"
+ Name: "Bs_Sha_M_S_3"
+},
+{
+ Id: 23889
+ AegisName: "Bs_Sha_M_S_4"
+ Name: "Bs_Sha_M_S_4"
+},
+{
+ Id: 23890
+ AegisName: "Bs_Sha_M_S_12"
+ Name: "Bs_Sha_M_S_12"
+},
+{
+ Id: 23891
+ AegisName: "Bs_Sha_M_S_14"
+ Name: "Bs_Sha_M_S_14"
+},
+{
+ Id: 23892
+ AegisName: "Bs_Sha_M_S_24"
+ Name: "Bs_Sha_M_S_24"
+},
+{
+ Id: 23893
+ AegisName: "Bs_Sha_M_S_25"
+ Name: "Bs_Sha_M_S_25"
+},
+{
+ Id: 23894
+ AegisName: "Bs_Item_M_S_51"
+ Name: "Bs_Item_M_S_51"
+},
+{
Id: 23897
AegisName: "2018_Jump_Thx_Box"
Name: "2018_Jump_Thx_Box"
@@ -95794,11 +96568,26 @@ item_db: (
Name: "Season_Evt_Reward"
},
{
+ Id: 23926
+ AegisName: "Shadow_9_Refine_Hammer"
+ Name: "Shadow_9_Refine_Hammer"
+},
+{
Id: 23962
AegisName: "Malang_Cat_Can2"
Name: "Malang_Cat_Can2"
},
{
+ Id: 23967
+ AegisName: "EnchantStone_Recipe_9m"
+ Name: "EnchantStone_Recipe_9m"
+},
+{
+ Id: 23981
+ AegisName: "Abyss_Ddbox"
+ Name: "Abyss_Ddbox"
+},
+{
Id: 24380
AegisName: "Sentimental_Weapone_S"
Name: "Sentimental_Weapone_S"
@@ -96009,6 +96798,811 @@ item_db: (
Name: "S_Timeoverload_Pandent"
},
{
+ Id: 24423
+ AegisName: "S_Tempest_Weapon"
+ Name: "S_Tempest_Weapon"
+},
+{
+ Id: 24424
+ AegisName: "S_Tempest_Armor"
+ Name: "S_Tempest_Armor"
+},
+{
+ Id: 24425
+ AegisName: "S_PerfectSize_Weapon"
+ Name: "S_PerfectSize_Weapon"
+},
+{
+ Id: 24426
+ AegisName: "S_PerfectSize_Armor"
+ Name: "S_PerfectSize_Armor"
+},
+{
+ Id: 24427
+ AegisName: "S_M_Exo_Co_Weapon"
+ Name: "S_M_Exo_Co_Weapon"
+},
+{
+ Id: 24428
+ AegisName: "S_M_Viv_Dr_Weapon"
+ Name: "S_M_Viv_Dr_Weapon"
+},
+{
+ Id: 24429
+ AegisName: "S_M_Sci_Hu_Weapon"
+ Name: "S_M_Sci_Hu_Weapon"
+},
+{
+ Id: 24430
+ AegisName: "S_M_Fis_In_Weapon"
+ Name: "S_M_Fis_In_Weapon"
+},
+{
+ Id: 24431
+ AegisName: "S_M_Exe_Ho_Weapon"
+ Name: "S_M_Exe_Ho_Weapon"
+},
+{
+ Id: 24432
+ AegisName: "S_Penetration_Weapon"
+ Name: "S_Penetration_Weapon"
+},
+{
+ Id: 24433
+ AegisName: "S_Penetration_Armor"
+ Name: "S_Penetration_Armor"
+},
+{
+ Id: 24434
+ AegisName: "S_Exe_Ho_Weapon"
+ Name: "S_Exe_Ho_Weapon"
+},
+{
+ Id: 24435
+ AegisName: "S_Fis_In_Weapon"
+ Name: "S_Fis_In_Weapon"
+},
+{
+ Id: 24436
+ AegisName: "S_Sci_Hu_Weapon"
+ Name: "S_Sci_Hu_Weapon"
+},
+{
+ Id: 24437
+ AegisName: "S_Viv_Dr_Weapon"
+ Name: "S_Viv_Dr_Weapon"
+},
+{
+ Id: 24438
+ AegisName: "S_Exo_Co_Weapon"
+ Name: "S_Exo_Co_Weapon"
+},
+{
+ Id: 24439
+ AegisName: "S_Hasty_Weapon"
+ Name: "S_Hasty_Weapon"
+},
+{
+ Id: 24440
+ AegisName: "S_Sonic_Armor"
+ Name: "S_Sonic_Armor"
+},
+{
+ Id: 24441
+ AegisName: "S_Sonic_Shield"
+ Name: "S_Sonic_Shield"
+},
+{
+ Id: 24442
+ AegisName: "S_Sonic_Shoes"
+ Name: "S_Sonic_Shoes"
+},
+{
+ Id: 24443
+ AegisName: "S_Ignition_Weapon"
+ Name: "S_Ignition_Weapon"
+},
+{
+ Id: 24444
+ AegisName: "S_Ignition_Pendant"
+ Name: "S_Ignition_Pendant"
+},
+{
+ Id: 24445
+ AegisName: "S_Ignition_Earing"
+ Name: "S_Ignition_Earing"
+},
+{
+ Id: 24446
+ AegisName: "S_W_Breath_Armor"
+ Name: "S_W_Breath_Armor"
+},
+{
+ Id: 24447
+ AegisName: "S_W_Breath_Shield"
+ Name: "S_W_Breath_Shield"
+},
+{
+ Id: 24448
+ AegisName: "S_W_Breath_Shoes"
+ Name: "S_W_Breath_Shoes"
+},
+{
+ Id: 24449
+ AegisName: "S_F_Breath_Weapon"
+ Name: "S_F_Breath_Weapon"
+},
+{
+ Id: 24450
+ AegisName: "S_F_Breath_Pendant"
+ Name: "S_F_Breath_Pendant"
+},
+{
+ Id: 24451
+ AegisName: "S_F_Breath_Earing"
+ Name: "S_F_Breath_Earing"
+},
+{
+ Id: 24452
+ AegisName: "S_Cluster_Armor"
+ Name: "S_Cluster_Armor"
+},
+{
+ Id: 24453
+ AegisName: "S_Cluster_Shield"
+ Name: "S_Cluster_Shield"
+},
+{
+ Id: 24454
+ AegisName: "S_Cluster_Shoes"
+ Name: "S_Cluster_Shoes"
+},
+{
+ Id: 24455
+ AegisName: "S_Aimed_Weapon"
+ Name: "S_Aimed_Weapon"
+},
+{
+ Id: 24456
+ AegisName: "S_Aimed_Pendant"
+ Name: "S_Aimed_Pendant"
+},
+{
+ Id: 24457
+ AegisName: "S_Aimed_Earing"
+ Name: "S_Aimed_Earing"
+},
+{
+ Id: 24458
+ AegisName: "S_Arrow_Armor"
+ Name: "S_Arrow_Armor"
+},
+{
+ Id: 24459
+ AegisName: "S_Arrow_Shield"
+ Name: "S_Arrow_Shield"
+},
+{
+ Id: 24460
+ AegisName: "S_Arrow_Shoes"
+ Name: "S_Arrow_Shoes"
+},
+{
+ Id: 24461
+ AegisName: "S_Shooting_Weapon"
+ Name: "S_Shooting_Weapon"
+},
+{
+ Id: 24462
+ AegisName: "S_Shooting_Pendant"
+ Name: "S_Shooting_Pendant"
+},
+{
+ Id: 24463
+ AegisName: "S_Shooting_Earing"
+ Name: "S_Shooting_Earing"
+},
+{
+ Id: 24464
+ AegisName: "S_Tornado_Armor"
+ Name: "S_Tornado_Armor"
+},
+{
+ Id: 24465
+ AegisName: "S_Tornado_Shield"
+ Name: "S_Tornado_Shield"
+},
+{
+ Id: 24466
+ AegisName: "S_Tornado_Shoes"
+ Name: "S_Tornado_Shoes"
+},
+{
+ Id: 24467
+ AegisName: "S_Boomerang_Weapon"
+ Name: "S_Boomerang_Weapon"
+},
+{
+ Id: 24468
+ AegisName: "S_Boomerang_Pendant"
+ Name: "S_Boomerang_Pendant"
+},
+{
+ Id: 24469
+ AegisName: "S_Boomerang_Earing"
+ Name: "S_Boomerang_Earing"
+},
+{
+ Id: 24470
+ AegisName: "S_Vulcan_Armor"
+ Name: "S_Vulcan_Armor"
+},
+{
+ Id: 24471
+ AegisName: "S_Vulcan_Shield"
+ Name: "S_Vulcan_Shield"
+},
+{
+ Id: 24472
+ AegisName: "S_Vulcan_Shoes"
+ Name: "S_Vulcan_Shoes"
+},
+{
+ Id: 24473
+ AegisName: "S_Arms_Weapon"
+ Name: "S_Arms_Weapon"
+},
+{
+ Id: 24474
+ AegisName: "S_Arms_Pendant"
+ Name: "S_Arms_Pendant"
+},
+{
+ Id: 24475
+ AegisName: "S_Arms_Earing"
+ Name: "S_Arms_Earing"
+},
+{
+ Id: 24476
+ AegisName: "S_Rampage_Armor"
+ Name: "S_Rampage_Armor"
+},
+{
+ Id: 24477
+ AegisName: "S_Rampage_Shield"
+ Name: "S_Rampage_Shield"
+},
+{
+ Id: 24478
+ AegisName: "S_Rampage_Shoes"
+ Name: "S_Rampage_Shoes"
+},
+{
+ Id: 24479
+ AegisName: "S_Skynetblow_Weapon"
+ Name: "S_Skynetblow_Weapon"
+},
+{
+ Id: 24480
+ AegisName: "S_Skynetblow_Pendant"
+ Name: "S_Skynetblow_Pendant"
+},
+{
+ Id: 24481
+ AegisName: "S_Skynetblow_Earing"
+ Name: "S_Skynetblow_Earing"
+},
+{
+ Id: 24482
+ AegisName: "S_Knucklearrow_Armor"
+ Name: "S_Knucklearrow_Armor"
+},
+{
+ Id: 24483
+ AegisName: "S_Knucklearrow_Shield"
+ Name: "S_Knucklearrow_Shield"
+},
+{
+ Id: 24484
+ AegisName: "S_Knucklearrow_Shoes"
+ Name: "S_Knucklearrow_Shoes"
+},
+{
+ Id: 24485
+ AegisName: "S_TigerCannon_Weapon"
+ Name: "S_TigerCannon_Weapon"
+},
+{
+ Id: 24486
+ AegisName: "S_Tigercannon_Pendant"
+ Name: "S_Tigercannon_Pendant"
+},
+{
+ Id: 24487
+ AegisName: "S_Tigercannon_Earing"
+ Name: "S_Tigercannon_Earing"
+},
+{
+ Id: 24488
+ AegisName: "S_Duplelight_Armor"
+ Name: "S_Duplelight_Armor"
+},
+{
+ Id: 24489
+ AegisName: "S_Duplelight_Shield"
+ Name: "S_Duplelight_Shield"
+},
+{
+ Id: 24490
+ AegisName: "S_Duplelight_Shoes"
+ Name: "S_Duplelight_Shoes"
+},
+{
+ Id: 24491
+ AegisName: "S_Adoramus_Weapon"
+ Name: "S_Adoramus_Weapon"
+},
+{
+ Id: 24492
+ AegisName: "S_Adoramus_Pendant"
+ Name: "S_Adoramus_Pendant"
+},
+{
+ Id: 24493
+ AegisName: "S_Adoramus_Earing"
+ Name: "S_Adoramus_Earing"
+},
+{
+ Id: 24494
+ AegisName: "S_Judex_Armor"
+ Name: "S_Judex_Armor"
+},
+{
+ Id: 24495
+ AegisName: "S_Judex_Shield"
+ Name: "S_Judex_Shield"
+},
+{
+ Id: 24496
+ AegisName: "S_Judex_Shoes"
+ Name: "S_Judex_Shoes"
+},
+{
+ Id: 24497
+ AegisName: "S_Magnus_Weapon"
+ Name: "S_Magnus_Weapon"
+},
+{
+ Id: 24498
+ AegisName: "S_Magnus_Pendant"
+ Name: "S_Magnus_Pendant"
+},
+{
+ Id: 24499
+ AegisName: "S_Magnus_Earing"
+ Name: "S_Magnus_Earing"
+},
+{
+ Id: 24500
+ AegisName: "S_Rainstorm_Armor"
+ Name: "S_Rainstorm_Armor"
+},
+{
+ Id: 24501
+ AegisName: "S_Rainstorm_Shield"
+ Name: "S_Rainstorm_Shield"
+},
+{
+ Id: 24502
+ AegisName: "S_Rainstorm_Shoes"
+ Name: "S_Rainstorm_Shoes"
+},
+{
+ Id: 24503
+ AegisName: "S_Arrowvulcan_Weapon"
+ Name: "S_Arrowvulcan_Weapon"
+},
+{
+ Id: 24504
+ AegisName: "S_Arrowvulcan_Pendant"
+ Name: "S_Arrowvulcan_Pendant"
+},
+{
+ Id: 24505
+ AegisName: "S_Arrowvulcan_Earing"
+ Name: "S_Arrowvulcan_Earing"
+},
+{
+ Id: 24506
+ AegisName: "S_Metalic_Armor"
+ Name: "S_Metalic_Armor"
+},
+{
+ Id: 24507
+ AegisName: "S_Metalic_Shield"
+ Name: "S_Metalic_Shield"
+},
+{
+ Id: 24508
+ AegisName: "S_Metalic_Shoes"
+ Name: "S_Metalic_Shoes"
+},
+{
+ Id: 24509
+ AegisName: "S_Reverberation_Weapon"
+ Name: "S_Reverberation_Weapon"
+},
+{
+ Id: 24510
+ AegisName: "S_Reverberation_Pendant"
+ Name: "S_Reverberation_Pendant"
+},
+{
+ Id: 24511
+ AegisName: "S_Reverberation_Earing"
+ Name: "S_Reverberation_Earing"
+},
+{
+ Id: 24512
+ AegisName: "S_Jack_Armor"
+ Name: "S_Jack_Armor"
+},
+{
+ Id: 24513
+ AegisName: "S_Jack_Shield"
+ Name: "S_Jack_Shield"
+},
+{
+ Id: 24514
+ AegisName: "S_Jack_Shoes"
+ Name: "S_Jack_Shoes"
+},
+{
+ Id: 24515
+ AegisName: "S_Strain_Weapon"
+ Name: "S_Strain_Weapon"
+},
+{
+ Id: 24516
+ AegisName: "S_Strain_Pendant"
+ Name: "S_Strain_Pendant"
+},
+{
+ Id: 24517
+ AegisName: "S_Strain_Earing"
+ Name: "S_Strain_Earing"
+},
+{
+ Id: 24518
+ AegisName: "S_Crimson_Armor"
+ Name: "S_Crimson_Armor"
+},
+{
+ Id: 24519
+ AegisName: "S_Crimson_Shield"
+ Name: "S_Crimson_Shield"
+},
+{
+ Id: 24520
+ AegisName: "S_Crimson_Shoes"
+ Name: "S_Crimson_Shoes"
+},
+{
+ Id: 24521
+ AegisName: "S_Chain_Weapon"
+ Name: "S_Chain_Weapon"
+},
+{
+ Id: 24522
+ AegisName: "S_Chain_Pendant"
+ Name: "S_Chain_Pendant"
+},
+{
+ Id: 24523
+ AegisName: "S_Chain_Earing"
+ Name: "S_Chain_Earing"
+},
+{
+ Id: 24524
+ AegisName: "S_Triangle_Armor"
+ Name: "S_Triangle_Armor"
+},
+{
+ Id: 24525
+ AegisName: "S_Triangle_Shield"
+ Name: "S_Triangle_Shield"
+},
+{
+ Id: 24526
+ AegisName: "S_Triangle_Shoes"
+ Name: "S_Triangle_Shoes"
+},
+{
+ Id: 24527
+ AegisName: "S_Shadowspell_Weapon"
+ Name: "S_Shadowspell_Weapon"
+},
+{
+ Id: 24528
+ AegisName: "S_Shadowspell_Pendant"
+ Name: "S_Shadowspell_Pendant"
+},
+{
+ Id: 24529
+ AegisName: "S_Shadowspell_Earing"
+ Name: "S_Shadowspell_Earing"
+},
+{
+ Id: 24530
+ AegisName: "S_Menace_Armor"
+ Name: "S_Menace_Armor"
+},
+{
+ Id: 24531
+ AegisName: "S_Menace_Shield"
+ Name: "S_Menace_Shield"
+},
+{
+ Id: 24532
+ AegisName: "S_Menace_Shoes"
+ Name: "S_Menace_Shoes"
+},
+{
+ Id: 24533
+ AegisName: "S_Paint_Weapon"
+ Name: "S_Paint_Weapon"
+},
+{
+ Id: 24534
+ AegisName: "S_Paint_Pendant"
+ Name: "S_Paint_Pendant"
+},
+{
+ Id: 24535
+ AegisName: "S_Paint_Earing"
+ Name: "S_Paint_Earing"
+},
+{
+ Id: 24536
+ AegisName: "S_Rolling_Armor"
+ Name: "S_Rolling_Armor"
+},
+{
+ Id: 24537
+ AegisName: "S_Rolling_Shield"
+ Name: "S_Rolling_Shield"
+},
+{
+ Id: 24538
+ AegisName: "S_Rolling_Shoes"
+ Name: "S_Rolling_Shoes"
+},
+{
+ Id: 24539
+ AegisName: "S_Katar_Weapon"
+ Name: "S_Katar_Weapon"
+},
+{
+ Id: 24540
+ AegisName: "S_Katar_Pendant"
+ Name: "S_Katar_Pendant"
+},
+{
+ Id: 24541
+ AegisName: "S_Katar_Earing"
+ Name: "S_Katar_Earing"
+},
+{
+ Id: 24542
+ AegisName: "S_Slash_Armor"
+ Name: "S_Slash_Armor"
+},
+{
+ Id: 24543
+ AegisName: "S_Slash_Shield"
+ Name: "S_Slash_Shield"
+},
+{
+ Id: 24544
+ AegisName: "S_Slash_Shoes"
+ Name: "S_Slash_Shoes"
+},
+{
+ Id: 24545
+ AegisName: "S_Ripper_Weapon"
+ Name: "S_Ripper_Weapon"
+},
+{
+ Id: 24546
+ AegisName: "S_Ripper_Pendant"
+ Name: "S_Ripper_Pendant"
+},
+{
+ Id: 24547
+ AegisName: "S_Ripper_Earing"
+ Name: "S_Ripper_Earing"
+},
+{
+ Id: 24548
+ AegisName: "S_Dust_Armor"
+ Name: "S_Dust_Armor"
+},
+{
+ Id: 24549
+ AegisName: "S_Dust_Shield"
+ Name: "S_Dust_Shield"
+},
+{
+ Id: 24550
+ AegisName: "S_Dust_Shoes"
+ Name: "S_Dust_Shoes"
+},
+{
+ Id: 24551
+ AegisName: "S_Grave_Weapon"
+ Name: "S_Grave_Weapon"
+},
+{
+ Id: 24552
+ AegisName: "S_Grave_Pendant"
+ Name: "S_Grave_Pendant"
+},
+{
+ Id: 24553
+ AegisName: "S_Grave_Earing"
+ Name: "S_Grave_Earing"
+},
+{
+ Id: 24554
+ AegisName: "S_Psychic_Armor"
+ Name: "S_Psychic_Armor"
+},
+{
+ Id: 24555
+ AegisName: "S_Psychic_Shield"
+ Name: "S_Psychic_Shield"
+},
+{
+ Id: 24556
+ AegisName: "S_Psychic_Shoes"
+ Name: "S_Psychic_Shoes"
+},
+{
+ Id: 24557
+ AegisName: "S_Varetyr_Weapon"
+ Name: "S_Varetyr_Weapon"
+},
+{
+ Id: 24558
+ AegisName: "S_Varetyr_Pendant"
+ Name: "S_Varetyr_Pendant"
+},
+{
+ Id: 24559
+ AegisName: "S_Varetyr_Earing"
+ Name: "S_Varetyr_Earing"
+},
+{
+ Id: 24560
+ AegisName: "S_Cart_Tornado_Armor"
+ Name: "S_Cart_Tornado_Armor"
+},
+{
+ Id: 24561
+ AegisName: "S_Cart_Tornado_Shield"
+ Name: "S_Cart_Tornado_Shield"
+},
+{
+ Id: 24562
+ AegisName: "S_Cart_Tornado_Shoes"
+ Name: "S_Cart_Tornado_Shoes"
+},
+{
+ Id: 24563
+ AegisName: "S_Cannon_Cart_Weapon"
+ Name: "S_Cannon_Cart_Weapon"
+},
+{
+ Id: 24564
+ AegisName: "S_Cannon_Cart_Pendant"
+ Name: "S_Cannon_Cart_Pendant"
+},
+{
+ Id: 24565
+ AegisName: "S_Cannon_Cart_Earing"
+ Name: "S_Cannon_Cart_Earing"
+},
+{
+ Id: 24566
+ AegisName: "S_Spore_Bomb_Armor"
+ Name: "S_Spore_Bomb_Armor"
+},
+{
+ Id: 24567
+ AegisName: "S_Spore_Bomb_Shield"
+ Name: "S_Spore_Bomb_Shield"
+},
+{
+ Id: 24568
+ AegisName: "S_Spore_Bomb_Shoes"
+ Name: "S_Spore_Bomb_Shoes"
+},
+{
+ Id: 24569
+ AegisName: "S_Crazy_Weapon"
+ Name: "S_Crazy_Weapon"
+},
+{
+ Id: 24570
+ AegisName: "S_Crazy_Pendant"
+ Name: "S_Crazy_Pendant"
+},
+{
+ Id: 24571
+ AegisName: "S_Crazy_Earing"
+ Name: "S_Crazy_Earing"
+},
+{
+ Id: 24572
+ AegisName: "S_Brand_Armor"
+ Name: "S_Brand_Armor"
+},
+{
+ Id: 24573
+ AegisName: "S_Brand_Shield"
+ Name: "S_Brand_Shield"
+},
+{
+ Id: 24574
+ AegisName: "S_Brand_Shoes"
+ Name: "S_Brand_Shoes"
+},
+{
+ Id: 24575
+ AegisName: "S_Chain_Press_Weapon"
+ Name: "S_Chain_Press_Weapon"
+},
+{
+ Id: 24576
+ AegisName: "S_Chain_Press_Pendant"
+ Name: "S_Chain_Press_Pendant"
+},
+{
+ Id: 24577
+ AegisName: "S_Chain_Press_Earing"
+ Name: "S_Chain_Press_Earing"
+},
+{
+ Id: 24578
+ AegisName: "S_Banish_Cannon_Armor"
+ Name: "S_Banish_Cannon_Armor"
+},
+{
+ Id: 24579
+ AegisName: "S_Banish_Cannon_Shield"
+ Name: "S_Banish_Cannon_Shield"
+},
+{
+ Id: 24580
+ AegisName: "S_Banish_Cannon_Shoes"
+ Name: "S_Banish_Cannon_Shoes"
+},
+{
+ Id: 24581
+ AegisName: "S_Genesis_Weapon"
+ Name: "S_Genesis_Weapon"
+},
+{
+ Id: 24582
+ AegisName: "S_Genesis_Pendant"
+ Name: "S_Genesis_Pendant"
+},
+{
+ Id: 24583
+ AegisName: "S_Genesis_Earing"
+ Name: "S_Genesis_Earing"
+},
+{
Id: 25258
AegisName: "BrokenArrow"
Name: "BrokenArrow"
@@ -96539,6 +98133,186 @@ item_db: (
Name: "Inventory_Extension_Coupon"
},
{
+ Id: 25797
+ AegisName: "SuraStone_Robe2"
+ Name: "SuraStone_Robe2"
+},
+{
+ Id: 25798
+ AegisName: "SuraStone_Bottom2"
+ Name: "SuraStone_Bottom2"
+},
+{
+ Id: 25799
+ AegisName: "SuraStone_Middle2"
+ Name: "SuraStone_Middle2"
+},
+{
+ Id: 25800
+ AegisName: "SuraStone_Top2"
+ Name: "SuraStone_Top2"
+},
+{
+ Id: 25801
+ AegisName: "SorcererStone_Robe2"
+ Name: "SorcererStone_Robe2"
+},
+{
+ Id: 25802
+ AegisName: "SorcererStone_Bottom2"
+ Name: "SorcererStone_Bottom2"
+},
+{
+ Id: 25803
+ AegisName: "SorcererStone_Middle2"
+ Name: "SorcererStone_Middle2"
+},
+{
+ Id: 25804
+ AegisName: "SorcererStone_Top2"
+ Name: "SorcererStone_Top2"
+},
+{
+ Id: 25805
+ AegisName: "ShadowchaserStone_Robe2"
+ Name: "ShadowchaserStone_Robe2"
+},
+{
+ Id: 25806
+ AegisName: "ShadowchasStone_Bottom2"
+ Name: "ShadowchasStone_Bottom2"
+},
+{
+ Id: 25807
+ AegisName: "ShadowchasStone_Middle2"
+ Name: "ShadowchasStone_Middle2"
+},
+{
+ Id: 25808
+ AegisName: "ShadowchaserStone_Top2"
+ Name: "ShadowchaserStone_Top2"
+},
+{
+ Id: 25815
+ AegisName: "Ein_SOLIDDUST"
+ Name: "Ein_SOLIDDUST"
+},
+{
+ Id: 25816
+ AegisName: "Ein_RUSTHELM"
+ Name: "Ein_RUSTHELM"
+},
+{
+ Id: 25817
+ AegisName: "Ein_EYEROCK"
+ Name: "Ein_EYEROCK"
+},
+{
+ Id: 25842
+ AegisName: "SoulreaperStone_Robe"
+ Name: "SoulreaperStone_Robe"
+},
+{
+ Id: 25843
+ AegisName: "SoullinkerStone_Top"
+ Name: "SoullinkerStone_Top"
+},
+{
+ Id: 25844
+ AegisName: "SoullinkerStone_Middle"
+ Name: "SoullinkerStone_Middle"
+},
+{
+ Id: 25845
+ AegisName: "SoullinkerStone_Bottom"
+ Name: "SoullinkerStone_Bottom"
+},
+{
+ Id: 25846
+ AegisName: "GladiatorStone_Top"
+ Name: "GladiatorStone_Top"
+},
+{
+ Id: 25847
+ AegisName: "GladiatorStone_Middle"
+ Name: "GladiatorStone_Middle"
+},
+{
+ Id: 25848
+ AegisName: "GladiatorStone_Bottom"
+ Name: "GladiatorStone_Bottom"
+},
+{
+ Id: 25849
+ AegisName: "StaremperorStone_Robe"
+ Name: "StaremperorStone_Robe"
+},
+{
+ Id: 25850
+ AegisName: "NinjaStone_Top"
+ Name: "NinjaStone_Top"
+},
+{
+ Id: 25851
+ AegisName: "NinjaStone_Middle"
+ Name: "NinjaStone_Middle"
+},
+{
+ Id: 25852
+ AegisName: "NinjaStone_Bottom"
+ Name: "NinjaStone_Bottom"
+},
+{
+ Id: 25853
+ AegisName: "KagerouStone_Robe"
+ Name: "KagerouStone_Robe"
+},
+{
+ Id: 25854
+ AegisName: "OboroStone_Robe"
+ Name: "OboroStone_Robe"
+},
+{
+ Id: 25855
+ AegisName: "GunslingerStone_Top"
+ Name: "GunslingerStone_Top"
+},
+{
+ Id: 25856
+ AegisName: "GunslingerStone_Middle"
+ Name: "GunslingerStone_Middle"
+},
+{
+ Id: 25857
+ AegisName: "GunslingerStone_Bottom"
+ Name: "GunslingerStone_Bottom"
+},
+{
+ Id: 25858
+ AegisName: "RebellionStone_Robe"
+ Name: "RebellionStone_Robe"
+},
+{
+ Id: 25859
+ AegisName: "DoramStone_Top"
+ Name: "DoramStone_Top"
+},
+{
+ Id: 25860
+ AegisName: "DoramStone_Middle"
+ Name: "DoramStone_Middle"
+},
+{
+ Id: 25861
+ AegisName: "DoramStone_Bottom"
+ Name: "DoramStone_Bottom"
+},
+{
+ Id: 25862
+ AegisName: "DoramStone_Robe"
+ Name: "DoramStone_Robe"
+},
+{
Id: 26007
AegisName: "Spectral_Spear_IL"
Name: "Spectral_Spear_IL"
@@ -96564,6 +98338,11 @@ item_db: (
Name: "Metal_Foxtail"
},
{
+ Id: 26118
+ AegisName: "Shadow_Staff_K"
+ Name: "Shadow_Staff_K"
+},
+{
Id: 26119
AegisName: "Rebeginer_SO_Rod"
Name: "Rebeginer_SO_Rod"
@@ -96579,6 +98358,11 @@ item_db: (
Name: "Rutilus_Stick_OS"
},
{
+ Id: 26154
+ AegisName: "SoulWeight"
+ Name: "SoulWeight"
+},
+{
Id: 26155
AegisName: "MeawFoxtail"
Name: "MeawFoxtail"
@@ -96589,6 +98373,21 @@ item_db: (
Name: "Evt_Shadow_Staff_K"
},
{
+ Id: 26162
+ AegisName: "Ein_1HWAND"
+ Name: "Ein_1HWAND"
+},
+{
+ Id: 26164
+ AegisName: "ElectricFox_OS"
+ Name: "ElectricFox_OS"
+},
+{
+ Id: 26215
+ AegisName: "Ein_1HWHIP"
+ Name: "Ein_1HWHIP"
+},
+{
Id: 28022
AegisName: "Infiltrator_IL"
Name: "Infiltrator_IL"
@@ -96609,11 +98408,26 @@ item_db: (
Name: "Meuchler_OS"
},
{
+ Id: 28039
+ AegisName: "Shiver_Katar_K"
+ Name: "Shiver_Katar_K"
+},
+{
Id: 28040
AegisName: "Evt_Shiver_Katar_K"
Name: "Evt_Shiver_Katar_K"
},
{
+ Id: 28045
+ AegisName: "Ein_BHKATAR"
+ Name: "Ein_BHKATAR"
+},
+{
+ Id: 28130
+ AegisName: "Avenger"
+ Name: "Avenger"
+},
+{
Id: 28136
AegisName: "Blasti_OS"
Name: "Blasti_OS"
@@ -96624,6 +98438,11 @@ item_db: (
Name: "Evt_Avenger"
},
{
+ Id: 28140
+ AegisName: "Ein_BHAXE"
+ Name: "Ein_BHAXE"
+},
+{
Id: 28240
AegisName: "Calf_Kingcobra"
Name: "Calf_Kingcobra"
@@ -96654,6 +98473,31 @@ item_db: (
Name: "HR_S55_OS"
},
{
+ Id: 28254
+ AegisName: "Butcher_IL"
+ Name: "Butcher_IL"
+},
+{
+ Id: 28255
+ AegisName: "Master_Soul_Rifle"
+ Name: "Master_Soul_Rifle"
+},
+{
+ Id: 28256
+ AegisName: "Demon_S_Shot"
+ Name: "Demon_S_Shot"
+},
+{
+ Id: 28257
+ AegisName: "Golden_L_Launcher"
+ Name: "Golden_L_Launcher"
+},
+{
+ Id: 28258
+ AegisName: "The_Black_Gatling"
+ Name: "The_Black_Gatling"
+},
+{
Id: 28508
AegisName: "Skul_Ring_IL"
Name: "Skul_Ring_IL"
@@ -96704,11 +98548,21 @@ item_db: (
Name: "Circuit_Board_OS"
},
{
+ Id: 28630
+ AegisName: "Demon_Hunting_Bible_K"
+ Name: "Demon_Hunting_Bible_K"
+},
+{
Id: 28631
AegisName: "Time_Kamiji"
Name: "Time_Kamiji"
},
{
+ Id: 28635
+ AegisName: "Ein_1HBOOK"
+ Name: "Ein_1HBOOK"
+},
+{
Id: 28725
AegisName: "Moonlight_Sword_IL"
Name: "Moonlight_Sword_IL"
@@ -96719,6 +98573,11 @@ item_db: (
Name: "Rebeginer_SC_Dagger"
},
{
+ Id: 28744
+ AegisName: "Magic_Sword"
+ Name: "Magic_Sword"
+},
+{
Id: 28745
AegisName: "Counter_Dagger_IL"
Name: "Counter_Dagger_IL"
@@ -96734,6 +98593,31 @@ item_db: (
Name: "Evt_Magic_Sword"
},
{
+ Id: 28762
+ AegisName: "Bazerald_IL"
+ Name: "Bazerald_IL"
+},
+{
+ Id: 28763
+ AegisName: "Sharp_Wind_Sword"
+ Name: "Sharp_Wind_Sword"
+},
+{
+ Id: 28764
+ AegisName: "Fog_Dew_Sword"
+ Name: "Fog_Dew_Sword"
+},
+{
+ Id: 28771
+ AegisName: "Ein_1HDAGGER"
+ Name: "Ein_1HDAGGER"
+},
+{
+ Id: 28772
+ AegisName: "Ein_1HMAGGER"
+ Name: "Ein_1HMAGGER"
+},
+{
Id: 28922
AegisName: "Herald_Of_GOD_IL"
Name: "Herald_Of_GOD_IL"
@@ -96909,6 +98793,11 @@ item_db: (
Name: "Straight_Long_YL_"
},
{
+ Id: 31382
+ AegisName: "C_Cat_Ears_Punkish"
+ Name: "C_Cat_Ears_Punkish"
+},
+{
Id: 31387
AegisName: "Jjakk"
Name: "Jjakk"
@@ -96969,6 +98858,11 @@ item_db: (
Name: "C_Fluffy_Heart_Earmuffs"
},
{
+ Id: 31440
+ AegisName: "C_Snow_Bear_Food"
+ Name: "C_Snow_Bear_Food"
+},
+{
Id: 31452
AegisName: "White_Cat"
Name: "White_Cat"
@@ -96999,6 +98893,16 @@ item_db: (
Name: "Egg_Minihat"
},
{
+ Id: 31481
+ AegisName: "C_CatCoffeeCup_TW"
+ Name: "C_CatCoffeeCup_TW"
+},
+{
+ Id: 31483
+ AegisName: "C_CatEarRibbon_TW"
+ Name: "C_CatEarRibbon_TW"
+},
+{
Id: 31489
AegisName: "C_Bouquet_Hat"
Name: "C_Bouquet_Hat"
@@ -97024,6 +98928,11 @@ item_db: (
Name: "C_Elephangel_TH"
},
{
+ Id: 31512
+ AegisName: "C_Panda_Rabbit"
+ Name: "C_Panda_Rabbit"
+},
+{
Id: 31516
AegisName: "Mini_Melon"
Name: "Mini_Melon"
@@ -97044,21 +98953,111 @@ item_db: (
Name: "C_Happy_Rabbit_Ribbon"
},
{
+ Id: 31565
+ AegisName: "C_Princess_Ribbon_Crown"
+ Name: "C_Princess_Ribbon_Crown"
+},
+{
+ Id: 31569
+ AegisName: "C_OpenAir_Headset"
+ Name: "C_OpenAir_Headset"
+},
+{
+ Id: 31572
+ AegisName: "C_Mobile_Pursuit_System"
+ Name: "C_Mobile_Pursuit_System"
+},
+{
+ Id: 31573
+ AegisName: "C_Mecha_Cat_Ears"
+ Name: "C_Mecha_Cat_Ears"
+},
+{
+ Id: 31574
+ AegisName: "C_Cyber_Income"
+ Name: "C_Cyber_Income"
+},
+{
Id: 31580
AegisName: "Autumnal_Flavor"
Name: "Autumnal_Flavor"
},
{
+ Id: 31586
+ AegisName: "C_Poporing_Muffler"
+ Name: "C_Poporing_Muffler"
+},
+{
Id: 31589
AegisName: "GOLD_MAJESTIC_GOUT"
Name: "GOLD_MAJESTIC_GOUT"
},
{
+ Id: 31600
+ AegisName: "C_Kishu_Inu"
+ Name: "C_Kishu_Inu"
+},
+{
Id: 31606
AegisName: "C_Autumn_Headband"
Name: "C_Autumn_Headband"
},
{
+ Id: 31614
+ AegisName: "C_Fox"
+ Name: "C_Fox"
+},
+{
+ Id: 31616
+ AegisName: "C_Sleep_Sheep_TW"
+ Name: "C_Sleep_Sheep_TW"
+},
+{
+ Id: 31624
+ AegisName: "C_HeartOfCat_TW"
+ Name: "C_HeartOfCat_TW"
+},
+{
+ Id: 31625
+ AegisName: "C_Protect_Cloth"
+ Name: "C_Protect_Cloth"
+},
+{
+ Id: 31693
+ AegisName: "C_LunaticMuffler"
+ Name: "C_LunaticMuffler"
+},
+{
+ Id: 31698
+ AegisName: "C_Pigtail_Red_Hood"
+ Name: "C_Pigtail_Red_Hood"
+},
+{
+ Id: 31699
+ AegisName: "C_Smiling_Eyes"
+ Name: "C_Smiling_Eyes"
+},
+{
+ Id: 31765
+ AegisName: "C_Garnet_Tiara"
+ Name: "C_Garnet_Tiara"
+},
+{
+ Id: 31766
+ AegisName: "C_Peony_Hair_Ornament"
+ Name: "C_Peony_Hair_Ornament"
+},
+{
+ Id: 31787
+ AegisName: "C_SavageB_On_Shoulder"
+ Name: "C_SavageB_On_Shoulder"
+},
+{
+ Id: 31798
+ AegisName: "C_Baby_Panda"
+ Name: "C_Baby_Panda"
+},
+{
Id: 32005
AegisName: "Pole_Axe_IL"
Name: "Pole_Axe_IL"
@@ -97069,6 +99068,11 @@ item_db: (
Name: "Metal_Stick"
},
{
+ Id: 32018
+ AegisName: "Undine_Spear_K"
+ Name: "Undine_Spear_K"
+},
+{
Id: 32019
AegisName: "Boost_Lance_OS"
Name: "Boost_Lance_OS"
@@ -97079,6 +99083,16 @@ item_db: (
Name: "Evt_Undine_Spear_K"
},
{
+ Id: 32026
+ AegisName: "Ein_1HSPEAR"
+ Name: "Ein_1HSPEAR"
+},
+{
+ Id: 32110
+ AegisName: "Ein_1HLUTE"
+ Name: "Ein_1HLUTE"
+},
+{
Id: 32207
AegisName: "Illusion_B_R"
Name: "Illusion_B_R"
@@ -97108,4 +99122,1114 @@ item_db: (
AegisName: "Celine_Brooch"
Name: "Celine_Brooch"
},
+{
+ Id: 32301
+ AegisName: "Gold_Lux_IL"
+ Name: "Gold_Lux_IL"
+},
+{
+ Id: 32302
+ AegisName: "Crimson_Rose"
+ Name: "Crimson_Rose"
+},
+{
+ Id: 32303
+ AegisName: "Ein_1HGUN"
+ Name: "Ein_1HGUN"
+},
+{
+ Id: 32352
+ AegisName: "Ein_1HSWORD"
+ Name: "Ein_1HSWORD"
+},
+{
+ Id: 100000
+ AegisName: "IDTest_Special"
+ Name: "IDTest_Special"
+},
+{
+ Id: 100003
+ AegisName: "ILL_Piece_A"
+ Name: "ILL_Piece_A"
+},
+{
+ Id: 100004
+ AegisName: "ILL_Piece_B"
+ Name: "ILL_Piece_B"
+},
+{
+ Id: 100009
+ AegisName: "Joy_Of_Victory"
+ Name: "Joy_Of_Victory"
+},
+{
+ Id: 100010
+ AegisName: "PerfectSize_Mix"
+ Name: "PerfectSize_Mix"
+},
+{
+ Id: 100011
+ AegisName: "MagicPiercing_Mix"
+ Name: "MagicPiercing_Mix"
+},
+{
+ Id: 100023
+ AegisName: "Ancient_Hero_Bravery"
+ Name: "Ancient_Hero_Bravery"
+},
+{
+ Id: 100025
+ AegisName: "Ancient_Hero_Wisdom"
+ Name: "Ancient_Hero_Wisdom"
+},
+{
+ Id: 100043
+ AegisName: "Boost_Up_1"
+ Name: "Boost_Up_1"
+},
+{
+ Id: 100044
+ AegisName: "Boost_Up_2"
+ Name: "Boost_Up_2"
+},
+{
+ Id: 100053
+ AegisName: "Piercing_Mix"
+ Name: "Piercing_Mix"
+},
+{
+ Id: 100058
+ AegisName: "Hasty_Mix"
+ Name: "Hasty_Mix"
+},
+{
+ Id: 100060
+ AegisName: "EnchantStone_Recipe_4m"
+ Name: "EnchantStone_Recipe_4m"
+},
+{
+ Id: 100128
+ AegisName: "Noblesse_Rifine_Ticket"
+ Name: "Noblesse_Rifine_Ticket"
+},
+{
+ Id: 100129
+ AegisName: "Imperial_Rifine_Ticket"
+ Name: "Imperial_Rifine_Ticket"
+},
+{
+ Id: 100130
+ AegisName: "Grace_Rifine_Ticket"
+ Name: "Grace_Rifine_Ticket"
+},
+{
+ Id: 100131
+ AegisName: "Imperial_Convert1"
+ Name: "Imperial_Convert1"
+},
+{
+ Id: 100132
+ AegisName: "Imperial_Convert2"
+ Name: "Imperial_Convert2"
+},
+{
+ Id: 100133
+ AegisName: "Grace_Convert1"
+ Name: "Grace_Convert1"
+},
+{
+ Id: 100134
+ AegisName: "Grace_Convert2"
+ Name: "Grace_Convert2"
+},
+{
+ Id: 100135
+ AegisName: "Imperial_Convert3"
+ Name: "Imperial_Convert3"
+},
+{
+ Id: 100136
+ AegisName: "Imperial_Convert4"
+ Name: "Imperial_Convert4"
+},
+{
+ Id: 100137
+ AegisName: "Grace_Convert3"
+ Name: "Grace_Convert3"
+},
+{
+ Id: 100138
+ AegisName: "Grace_Convert4"
+ Name: "Grace_Convert4"
+},
+{
+ Id: 100142
+ AegisName: "Abyss_Ddbox2"
+ Name: "Abyss_Ddbox2"
+},
+{
+ Id: 100144
+ AegisName: "Abyss_Ddbox3"
+ Name: "Abyss_Ddbox3"
+},
+{
+ Id: 100145
+ AegisName: "Abyss_Ddbox4"
+ Name: "Abyss_Ddbox4"
+},
+{
+ Id: 400002
+ AegisName: "Victory_Wing_Ear_"
+ Name: "Victory_Wing_Ear_"
+},
+{
+ Id: 400020
+ AegisName: "C_BeachBall"
+ Name: "C_BeachBall"
+},
+{
+ Id: 440000
+ AegisName: "C_SharkHead"
+ Name: "C_SharkHead"
+},
+{
+ Id: 450001
+ AegisName: "Atker_Plate"
+ Name: "Atker_Plate"
+},
+{
+ Id: 450002
+ AegisName: "Ele_Robe"
+ Name: "Ele_Robe"
+},
+{
+ Id: 450003
+ AegisName: "Defn_Robe"
+ Name: "Defn_Robe"
+},
+{
+ Id: 450004
+ AegisName: "Ran_Suits"
+ Name: "Ran_Suits"
+},
+{
+ Id: 450018
+ AegisName: "Noblesse_Breath_Armor"
+ Name: "Noblesse_Breath_Armor"
+},
+{
+ Id: 450019
+ AegisName: "Noblesse_Knight_Armor"
+ Name: "Noblesse_Knight_Armor"
+},
+{
+ Id: 450020
+ AegisName: "Noblesse_Spear_Armor"
+ Name: "Noblesse_Spear_Armor"
+},
+{
+ Id: 450021
+ AegisName: "Noblesse_Genesis_Armor"
+ Name: "Noblesse_Genesis_Armor"
+},
+{
+ Id: 450022
+ AegisName: "Noblesse_Sharp_Suit"
+ Name: "Noblesse_Sharp_Suit"
+},
+{
+ Id: 450023
+ AegisName: "Noblesse_Aim_Suit"
+ Name: "Noblesse_Aim_Suit"
+},
+{
+ Id: 450024
+ AegisName: "Noblesse_Severe_Suit"
+ Name: "Noblesse_Severe_Suit"
+},
+{
+ Id: 450025
+ AegisName: "Noblesse_Reverb_Suit"
+ Name: "Noblesse_Reverb_Suit"
+},
+{
+ Id: 450026
+ AegisName: "Noblesse_Adora_Robe"
+ Name: "Noblesse_Adora_Robe"
+},
+{
+ Id: 450027
+ AegisName: "Noblesse_Duple_Robe"
+ Name: "Noblesse_Duple_Robe"
+},
+{
+ Id: 450028
+ AegisName: "Noblesse_Tonado_Armor"
+ Name: "Noblesse_Tonado_Armor"
+},
+{
+ Id: 450029
+ AegisName: "Noblesse_Vulcan_Armor"
+ Name: "Noblesse_Vulcan_Armor"
+},
+{
+ Id: 450030
+ AegisName: "Noblesse_Kart_Suit"
+ Name: "Noblesse_Kart_Suit"
+},
+{
+ Id: 450031
+ AegisName: "Noblesse_Kart_Suit2"
+ Name: "Noblesse_Kart_Suit2"
+},
+{
+ Id: 450032
+ AegisName: "Noblesse_Rolling_Suit"
+ Name: "Noblesse_Rolling_Suit"
+},
+{
+ Id: 450033
+ AegisName: "Noblesse_Assasin_Suit"
+ Name: "Noblesse_Assasin_Suit"
+},
+{
+ Id: 450034
+ AegisName: "Noblesse_Fatal_Suit"
+ Name: "Noblesse_Fatal_Suit"
+},
+{
+ Id: 450035
+ AegisName: "Noblesse_Stalker_Suit"
+ Name: "Noblesse_Stalker_Suit"
+},
+{
+ Id: 450036
+ AegisName: "Noblesse_Picky_Robe"
+ Name: "Noblesse_Picky_Robe"
+},
+{
+ Id: 450037
+ AegisName: "Noblesse_Carrot_Robe"
+ Name: "Noblesse_Carrot_Robe"
+},
+{
+ Id: 450038
+ AegisName: "Noblesse_Trip_Suit"
+ Name: "Noblesse_Trip_Suit"
+},
+{
+ Id: 450039
+ AegisName: "Noblesse_Firerain_Suit"
+ Name: "Noblesse_Firerain_Suit"
+},
+{
+ Id: 450040
+ AegisName: "Noblesse_Crimson_Robe"
+ Name: "Noblesse_Crimson_Robe"
+},
+{
+ Id: 450041
+ AegisName: "Noblesse_Frost_Robe"
+ Name: "Noblesse_Frost_Robe"
+},
+{
+ Id: 450042
+ AegisName: "Noblesse_Psychic_Robe"
+ Name: "Noblesse_Psychic_Robe"
+},
+{
+ Id: 450043
+ AegisName: "Noblesse_Dust_Robe"
+ Name: "Noblesse_Dust_Robe"
+},
+{
+ Id: 450044
+ AegisName: "Noblesse_Sun_Suit"
+ Name: "Noblesse_Sun_Suit"
+},
+{
+ Id: 450045
+ AegisName: "Noblesse_Moon_Suit"
+ Name: "Noblesse_Moon_Suit"
+},
+{
+ Id: 450046
+ AegisName: "Noblesse_Ninja_Suit"
+ Name: "Noblesse_Ninja_Suit"
+},
+{
+ Id: 450047
+ AegisName: "Noblesse_Kunai_Suit"
+ Name: "Noblesse_Kunai_Suit"
+},
+{
+ Id: 450048
+ AegisName: "Noblesse_Swhoo_Robe"
+ Name: "Noblesse_Swhoo_Robe"
+},
+{
+ Id: 450049
+ AegisName: "Noblesse_Explosion_Robe"
+ Name: "Noblesse_Explosion_Robe"
+},
+{
+ Id: 450050
+ AegisName: "Noblesse_Knuckle_Suit"
+ Name: "Noblesse_Knuckle_Suit"
+},
+{
+ Id: 450051
+ AegisName: "Noblesse_Tiger_Suit"
+ Name: "Noblesse_Tiger_Suit"
+},
+{
+ Id: 450052
+ AegisName: "Imperial_Breath_Armor"
+ Name: "Imperial_Breath_Armor"
+},
+{
+ Id: 450053
+ AegisName: "Imperial_Knight_Armor"
+ Name: "Imperial_Knight_Armor"
+},
+{
+ Id: 450054
+ AegisName: "Imperial_Spear_Armor"
+ Name: "Imperial_Spear_Armor"
+},
+{
+ Id: 450055
+ AegisName: "Imperial_Genesis_Armor"
+ Name: "Imperial_Genesis_Armor"
+},
+{
+ Id: 450056
+ AegisName: "Imperial_Sharp_Suit"
+ Name: "Imperial_Sharp_Suit"
+},
+{
+ Id: 450057
+ AegisName: "Imperial_Aim_Suit"
+ Name: "Imperial_Aim_Suit"
+},
+{
+ Id: 450058
+ AegisName: "Imperial_Severe_Suit"
+ Name: "Imperial_Severe_Suit"
+},
+{
+ Id: 450059
+ AegisName: "Imperial_Reverb_Suit"
+ Name: "Imperial_Reverb_Suit"
+},
+{
+ Id: 450060
+ AegisName: "Imperial_Adora_Robe"
+ Name: "Imperial_Adora_Robe"
+},
+{
+ Id: 450061
+ AegisName: "Imperial_Duple_Robe"
+ Name: "Imperial_Duple_Robe"
+},
+{
+ Id: 450062
+ AegisName: "Imperial_Knuckle_Suit"
+ Name: "Imperial_Knuckle_Suit"
+},
+{
+ Id: 450063
+ AegisName: "Imperial_Tiger_Suit"
+ Name: "Imperial_Tiger_Suit"
+},
+{
+ Id: 450064
+ AegisName: "Imperial_Tonado_Armor"
+ Name: "Imperial_Tonado_Armor"
+},
+{
+ Id: 450065
+ AegisName: "Imperial_Vulcan_Armor"
+ Name: "Imperial_Vulcan_Armor"
+},
+{
+ Id: 450066
+ AegisName: "Imperial_Kart_Suit"
+ Name: "Imperial_Kart_Suit"
+},
+{
+ Id: 450067
+ AegisName: "Imperial_Kart_Suit2"
+ Name: "Imperial_Kart_Suit2"
+},
+{
+ Id: 450068
+ AegisName: "Imperial_Rolling_Suit"
+ Name: "Imperial_Rolling_Suit"
+},
+{
+ Id: 450069
+ AegisName: "Imperial_Assasin_Suit"
+ Name: "Imperial_Assasin_Suit"
+},
+{
+ Id: 450070
+ AegisName: "Imperial_Fatal_Suit"
+ Name: "Imperial_Fatal_Suit"
+},
+{
+ Id: 450071
+ AegisName: "Imperial_Stalker_Suit"
+ Name: "Imperial_Stalker_Suit"
+},
+{
+ Id: 450072
+ AegisName: "Imperial_Picky_Robe"
+ Name: "Imperial_Picky_Robe"
+},
+{
+ Id: 450073
+ AegisName: "Imperial_Carrot_Robe"
+ Name: "Imperial_Carrot_Robe"
+},
+{
+ Id: 450074
+ AegisName: "Imperial_Trip_Suit"
+ Name: "Imperial_Trip_Suit"
+},
+{
+ Id: 450075
+ AegisName: "Imperial_Firerain_Suit"
+ Name: "Imperial_Firerain_Suit"
+},
+{
+ Id: 450076
+ AegisName: "Imperial_Crimson_Robe"
+ Name: "Imperial_Crimson_Robe"
+},
+{
+ Id: 450077
+ AegisName: "Imperial_Frost_Robe"
+ Name: "Imperial_Frost_Robe"
+},
+{
+ Id: 450078
+ AegisName: "Imperial_Psychic_Robe"
+ Name: "Imperial_Psychic_Robe"
+},
+{
+ Id: 450079
+ AegisName: "Imperial_Dust_Robe"
+ Name: "Imperial_Dust_Robe"
+},
+{
+ Id: 450080
+ AegisName: "Imperial_Sun_Suit"
+ Name: "Imperial_Sun_Suit"
+},
+{
+ Id: 450081
+ AegisName: "Imperial_Moon_Suit"
+ Name: "Imperial_Moon_Suit"
+},
+{
+ Id: 450082
+ AegisName: "Imperial_Ninja_Suit"
+ Name: "Imperial_Ninja_Suit"
+},
+{
+ Id: 450083
+ AegisName: "Imperial_Kunai_Suit"
+ Name: "Imperial_Kunai_Suit"
+},
+{
+ Id: 450084
+ AegisName: "Imperial_Swhoo_Robe"
+ Name: "Imperial_Swhoo_Robe"
+},
+{
+ Id: 450085
+ AegisName: "Imperial_Explosion_Robe"
+ Name: "Imperial_Explosion_Robe"
+},
+{
+ Id: 450086
+ AegisName: "Grace_Breath_Armor"
+ Name: "Grace_Breath_Armor"
+},
+{
+ Id: 450087
+ AegisName: "Grace_Knight_Armor"
+ Name: "Grace_Knight_Armor"
+},
+{
+ Id: 450088
+ AegisName: "Grace_Spear_Armor"
+ Name: "Grace_Spear_Armor"
+},
+{
+ Id: 450089
+ AegisName: "Grace_Genesis_Armor"
+ Name: "Grace_Genesis_Armor"
+},
+{
+ Id: 450090
+ AegisName: "Grace_Sharp_Suit"
+ Name: "Grace_Sharp_Suit"
+},
+{
+ Id: 450091
+ AegisName: "Grace_Aim_Suit"
+ Name: "Grace_Aim_Suit"
+},
+{
+ Id: 450092
+ AegisName: "Grace_Severe_Suit"
+ Name: "Grace_Severe_Suit"
+},
+{
+ Id: 450093
+ AegisName: "Grace_Reverb_Suit"
+ Name: "Grace_Reverb_Suit"
+},
+{
+ Id: 450094
+ AegisName: "Grace_Adora_Robe"
+ Name: "Grace_Adora_Robe"
+},
+{
+ Id: 450095
+ AegisName: "Grace_Duple_Robe"
+ Name: "Grace_Duple_Robe"
+},
+{
+ Id: 450096
+ AegisName: "Grace_Knuckle_Suit"
+ Name: "Grace_Knuckle_Suit"
+},
+{
+ Id: 450097
+ AegisName: "Grace_Tiger_Suit"
+ Name: "Grace_Tiger_Suit"
+},
+{
+ Id: 450098
+ AegisName: "Grace_Tonado_Armor"
+ Name: "Grace_Tonado_Armor"
+},
+{
+ Id: 450099
+ AegisName: "Grace_Vulcan_Armor"
+ Name: "Grace_Vulcan_Armor"
+},
+{
+ Id: 450100
+ AegisName: "Grace_Kart_Suit"
+ Name: "Grace_Kart_Suit"
+},
+{
+ Id: 450101
+ AegisName: "Grace_Kart_Suit2"
+ Name: "Grace_Kart_Suit2"
+},
+{
+ Id: 450102
+ AegisName: "Grace_Rolling_Suit"
+ Name: "Grace_Rolling_Suit"
+},
+{
+ Id: 450103
+ AegisName: "Grace_Assasin_Suit"
+ Name: "Grace_Assasin_Suit"
+},
+{
+ Id: 450104
+ AegisName: "Grace_Fatal_Suit"
+ Name: "Grace_Fatal_Suit"
+},
+{
+ Id: 450105
+ AegisName: "Grace_Stalker_Suit"
+ Name: "Grace_Stalker_Suit"
+},
+{
+ Id: 450106
+ AegisName: "Grace_Picky_Robe"
+ Name: "Grace_Picky_Robe"
+},
+{
+ Id: 450107
+ AegisName: "Grace_Carrot_Robe"
+ Name: "Grace_Carrot_Robe"
+},
+{
+ Id: 450108
+ AegisName: "Grace_Trip_Suit"
+ Name: "Grace_Trip_Suit"
+},
+{
+ Id: 450109
+ AegisName: "Grace_Firerain_Suit"
+ Name: "Grace_Firerain_Suit"
+},
+{
+ Id: 450110
+ AegisName: "Grace_Crimson_Robe"
+ Name: "Grace_Crimson_Robe"
+},
+{
+ Id: 450111
+ AegisName: "Grace_Frost_Robe"
+ Name: "Grace_Frost_Robe"
+},
+{
+ Id: 450112
+ AegisName: "Grace_Psychic_Robe"
+ Name: "Grace_Psychic_Robe"
+},
+{
+ Id: 450113
+ AegisName: "Grace_Dust_Robe"
+ Name: "Grace_Dust_Robe"
+},
+{
+ Id: 450114
+ AegisName: "Grace_Sun_Suit"
+ Name: "Grace_Sun_Suit"
+},
+{
+ Id: 450115
+ AegisName: "Grace_Moon_Suit"
+ Name: "Grace_Moon_Suit"
+},
+{
+ Id: 450116
+ AegisName: "Grace_Ninja_Suit"
+ Name: "Grace_Ninja_Suit"
+},
+{
+ Id: 450117
+ AegisName: "Grace_Kunai_Suit"
+ Name: "Grace_Kunai_Suit"
+},
+{
+ Id: 450118
+ AegisName: "Grace_Swhoo_Robe"
+ Name: "Grace_Swhoo_Robe"
+},
+{
+ Id: 450119
+ AegisName: "Grace_Explosion_Robe"
+ Name: "Grace_Explosion_Robe"
+},
+{
+ Id: 450121
+ AegisName: "Noblesse_Snovice_Suit"
+ Name: "Noblesse_Snovice_Suit"
+},
+{
+ Id: 450122
+ AegisName: "Noblesse_Snovice_Robe"
+ Name: "Noblesse_Snovice_Robe"
+},
+{
+ Id: 450123
+ AegisName: "Imperial_Snovice_Suit"
+ Name: "Imperial_Snovice_Suit"
+},
+{
+ Id: 450124
+ AegisName: "Imperial_Snovice_Robe"
+ Name: "Imperial_Snovice_Robe"
+},
+{
+ Id: 450125
+ AegisName: "Grace_Snovice_Suit"
+ Name: "Grace_Snovice_Suit"
+},
+{
+ Id: 450126
+ AegisName: "Grace_Snovice_Robe"
+ Name: "Grace_Snovice_Robe"
+},
+{
+ Id: 470000
+ AegisName: "Atker_Greave"
+ Name: "Atker_Greave"
+},
+{
+ Id: 470001
+ AegisName: "Ele_Shoes"
+ Name: "Ele_Shoes"
+},
+{
+ Id: 470002
+ AegisName: "Defn_Shoes"
+ Name: "Defn_Shoes"
+},
+{
+ Id: 470003
+ AegisName: "Ran_Boots"
+ Name: "Ran_Boots"
+},
+{
+ Id: 470016
+ AegisName: "Noblesse_Attack_Boots"
+ Name: "Noblesse_Attack_Boots"
+},
+{
+ Id: 470017
+ AegisName: "Noblesse_Magic_Boots"
+ Name: "Noblesse_Magic_Boots"
+},
+{
+ Id: 470018
+ AegisName: "Imperial_Attack_Boots"
+ Name: "Imperial_Attack_Boots"
+},
+{
+ Id: 470019
+ AegisName: "Imperial_Magic_Boots"
+ Name: "Imperial_Magic_Boots"
+},
+{
+ Id: 470020
+ AegisName: "Grace_Attack_Boots"
+ Name: "Grace_Attack_Boots"
+},
+{
+ Id: 470021
+ AegisName: "Grace_Magic_Boots"
+ Name: "Grace_Magic_Boots"
+},
+{
+ Id: 480000
+ AegisName: "Atker_Manteau"
+ Name: "Atker_Manteau"
+},
+{
+ Id: 480001
+ AegisName: "Ele_Muffler"
+ Name: "Ele_Muffler"
+},
+{
+ Id: 480002
+ AegisName: "Defn_Muffler"
+ Name: "Defn_Muffler"
+},
+{
+ Id: 480003
+ AegisName: "Ran_Manteau"
+ Name: "Ran_Manteau"
+},
+{
+ Id: 480012
+ AegisName: "Noblesse_Attack_Manteau"
+ Name: "Noblesse_Attack_Manteau"
+},
+{
+ Id: 480014
+ AegisName: "Noblesse_Magic_Manteau"
+ Name: "Noblesse_Magic_Manteau"
+},
+{
+ Id: 480016
+ AegisName: "Imperial_Attack_Manteau"
+ Name: "Imperial_Attack_Manteau"
+},
+{
+ Id: 480017
+ AegisName: "Imperial_Magic_Manteau"
+ Name: "Imperial_Magic_Manteau"
+},
+{
+ Id: 480018
+ AegisName: "Grace_Attack_Manteau"
+ Name: "Grace_Attack_Manteau"
+},
+{
+ Id: 480019
+ AegisName: "Grace_Magic_Manteau"
+ Name: "Grace_Magic_Manteau"
+},
+{
+ Id: 500001
+ AegisName: "Boost_Sword"
+ Name: "Boost_Sword"
+},
+{
+ Id: 500003
+ AegisName: "Light_Blade"
+ Name: "Light_Blade"
+},
+{
+ Id: 500004
+ AegisName: "Slate_Sword"
+ Name: "Slate_Sword"
+},
+{
+ Id: 510001
+ AegisName: "Boost_Dagger"
+ Name: "Boost_Dagger"
+},
+{
+ Id: 510002
+ AegisName: "Boost_Nindo"
+ Name: "Boost_Nindo"
+},
+{
+ Id: 510006
+ AegisName: "Fatalist"
+ Name: "Fatalist"
+},
+{
+ Id: 520000
+ AegisName: "Boost_Axe"
+ Name: "Boost_Axe"
+},
+{
+ Id: 530000
+ AegisName: "Boost_Spear"
+ Name: "Boost_Spear"
+},
+{
+ Id: 540000
+ AegisName: "Boost_Spl_Book"
+ Name: "Boost_Spl_Book"
+},
+{
+ Id: 540001
+ AegisName: "Boost_Text"
+ Name: "Boost_Text"
+},
+{
+ Id: 550001
+ AegisName: "Boost_Soul_Rod"
+ Name: "Boost_Soul_Rod"
+},
+{
+ Id: 550002
+ AegisName: "Boost_Foxtail"
+ Name: "Boost_Foxtail"
+},
+{
+ Id: 550006
+ AegisName: "Ein_1H_Foxtail"
+ Name: "Ein_1H_Foxtail"
+},
+{
+ Id: 550007
+ AegisName: "Freezing_Rod"
+ Name: "Freezing_Rod"
+},
+{
+ Id: 560000
+ AegisName: "Boost_Knuckle"
+ Name: "Boost_Knuckle"
+},
+{
+ Id: 560005
+ AegisName: "Ray_Knuckle"
+ Name: "Ray_Knuckle"
+},
+{
+ Id: 570000
+ AegisName: "Boost_Guitar"
+ Name: "Boost_Guitar"
+},
+{
+ Id: 570002
+ AegisName: "Trumpet_Shell_K"
+ Name: "Trumpet_Shell_K"
+},
+{
+ Id: 580000
+ AegisName: "Boost_Whip"
+ Name: "Boost_Whip"
+},
+{
+ Id: 580002
+ AegisName: "Barb_Wire_K"
+ Name: "Barb_Wire_K"
+},
+{
+ Id: 590000
+ AegisName: "Boost_Hall"
+ Name: "Boost_Hall"
+},
+{
+ Id: 590002
+ AegisName: "Meteor_Striker"
+ Name: "Meteor_Striker"
+},
+{
+ Id: 590003
+ AegisName: "Saint_Hall"
+ Name: "Saint_Hall"
+},
+{
+ Id: 600001
+ AegisName: "Boost_TH_Sword"
+ Name: "Boost_TH_Sword"
+},
+{
+ Id: 600004
+ AegisName: "Dragonic_Slayer"
+ Name: "Dragonic_Slayer"
+},
+{
+ Id: 610000
+ AegisName: "Boost_Katar"
+ Name: "Boost_Katar"
+},
+{
+ Id: 610003
+ AegisName: "Blade_Katar"
+ Name: "Blade_Katar"
+},
+{
+ Id: 640000
+ AegisName: "Boost_Staff"
+ Name: "Boost_Staff"
+},
+{
+ Id: 640004
+ AegisName: "Blue_Crystal_Staff"
+ Name: "Blue_Crystal_Staff"
+},
+{
+ Id: 700001
+ AegisName: "Boost_Bow"
+ Name: "Boost_Bow"
+},
+{
+ Id: 700003
+ AegisName: "Scalet_Dragon_L_Bow"
+ Name: "Scalet_Dragon_L_Bow"
+},
+{
+ Id: 830000
+ AegisName: "Boost_Gatling"
+ Name: "Boost_Gatling"
+},
+{
+ Id: 1000008
+ AegisName: "RangerStone_Top2"
+ Name: "RangerStone_Top2"
+},
+{
+ Id: 1000009
+ AegisName: "RangerStone_Middle2"
+ Name: "RangerStone_Middle2"
+},
+{
+ Id: 1000010
+ AegisName: "RangerStone_Bottom2"
+ Name: "RangerStone_Bottom2"
+},
+{
+ Id: 1000011
+ AegisName: "RangerStone_Robe2"
+ Name: "RangerStone_Robe2"
+},
+{
+ Id: 1000012
+ AegisName: "MechanicStone_Top2"
+ Name: "MechanicStone_Top2"
+},
+{
+ Id: 1000013
+ AegisName: "MechanicStone_Middle2"
+ Name: "MechanicStone_Middle2"
+},
+{
+ Id: 1000014
+ AegisName: "MechanicStone_Bottom2"
+ Name: "MechanicStone_Bottom2"
+},
+{
+ Id: 1000015
+ AegisName: "MechanicStone_Robe2"
+ Name: "MechanicStone_Robe2"
+},
+{
+ Id: 1000016
+ AegisName: "HighpriestStone_Top2"
+ Name: "HighpriestStone_Top2"
+},
+{
+ Id: 1000017
+ AegisName: "HighpriestStone_Middle2"
+ Name: "HighpriestStone_Middle2"
+},
+{
+ Id: 1000018
+ AegisName: "HighpriestStone_Bottom2"
+ Name: "HighpriestStone_Bottom2"
+},
+{
+ Id: 1000019
+ AegisName: "ArchbishopStone_Robe2"
+ Name: "ArchbishopStone_Robe2"
+},
+{
+ Id: 1000213
+ AegisName: "WarlockStone_Robe2"
+ Name: "WarlockStone_Robe2"
+},
+{
+ Id: 1000214
+ AegisName: "WarlockStone_Top2"
+ Name: "WarlockStone_Top2"
+},
+{
+ Id: 1000215
+ AegisName: "WarlockStone_Middle2"
+ Name: "WarlockStone_Middle2"
+},
+{
+ Id: 1000216
+ AegisName: "WarlockStone_Bottom2"
+ Name: "WarlockStone_Bottom2"
+},
+{
+ Id: 1000217
+ AegisName: "RoyalguardStone_Robe2"
+ Name: "RoyalguardStone_Robe2"
+},
+{
+ Id: 1000218
+ AegisName: "PaladinStone_Top2"
+ Name: "PaladinStone_Top2"
+},
+{
+ Id: 1000219
+ AegisName: "PaladinStone_Middle2"
+ Name: "PaladinStone_Middle2"
+},
+{
+ Id: 1000220
+ AegisName: "PaladinStone_Bottom2"
+ Name: "PaladinStone_Bottom2"
+},
+{
+ Id: 1000221
+ AegisName: "GuillcrossStone_Robe2"
+ Name: "GuillcrossStone_Robe2"
+},
+{
+ Id: 1000222
+ AegisName: "AssacrossStone_Top2"
+ Name: "AssacrossStone_Top2"
+},
+{
+ Id: 1000223
+ AegisName: "AssacrossStone_Middle2"
+ Name: "AssacrossStone_Middle2"
+},
+{
+ Id: 1000224
+ AegisName: "AssacrossStone_Bottom2"
+ Name: "AssacrossStone_Bottom2"
+},
)
diff --git a/db/pre-re/item_lapineddukddak.conf b/db/pre-re/item_lapineddukddak.conf
new file mode 100644
index 000000000..2b58bc075
--- /dev/null
+++ b/db/pre-re/item_lapineddukddak.conf
@@ -0,0 +1,2318 @@
+//================= Hercules Database =====================================
+//= _ _ _
+//= | | | | | |
+//= | |_| | ___ _ __ ___ _ _| | ___ ___
+//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __|
+//= | | | | __/ | | (__| |_| | | __/\__ \
+//= \_| |_/\___|_| \___|\__,_|_|\___||___/
+//================= License ===============================================
+//= This file is part of Hercules.
+//= http://herc.ws - http://github.com/HerculesWS/Hercules
+//=
+//= Copyright (C) 2018-2019 Hercules Dev Team
+//= Copyright (C) 2018-2019 Asheraf
+//=
+//= Hercules is free software: you can redistribute it and/or modify
+//= it under the terms of the GNU General Public License as published by
+//= the Free Software Foundation, either version 3 of the License, or
+//= (at your option) any later version.
+//=
+//= This program is distributed in the hope that it will be useful,
+//= but WITHOUT ANY WARRANTY; without even the implied warranty of
+//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+//= GNU General Public License for more details.
+//=
+//= You should have received a copy of the GNU General Public License
+//= along with this program. If not, see <http://www.gnu.org/licenses/>.
+//=========================================================================
+
+/**************************************************************************
+ ************* Entry structure ********************************************
+ **************************************************************************
+<Box_Item_Const>: {
+ NeedCount: (int, defaults to 0) The required amount of unique items
+ NeedRefineMin: (int, defaults to 0) The minimum refine for each of the items
+ NeedRefineMax: (int, defaults to 0) The maximum refine for each of the items
+ SourceItems: { A list of allowed items to be converted with specific amount for each item
+ <Item_Const>: <amount> (string, int)
+ ...
+ }
+ Script: <"
+ Script (it can be multi-line)
+ Executes on success
+ ">
+}
+**************************************************************************/
+/*
+22529: {
+ NeedCount: 3
+ SourceItems: {
+ S_CriticalHit_Armor: 1
+ // 24018: 1
+ // 24019: 1
+ // 24020: 1
+ // 24021: 1
+ // 24022: 1
+ // 24023: 1
+ // 24024: 1
+ // 24025: 1
+ // 24026: 1
+ // 24027: 1
+ // 24028: 1
+ // 24029: 1
+ // 24030: 1
+ // 24031: 1
+ // 24032: 1
+ // 24033: 1
+ // 24034: 1
+ // 24035: 1
+ // 24036: 1
+ // 24037: 1
+ // 24038: 1
+ // 24039: 1
+ // 24040: 1
+ // 24041: 1
+ // 24042: 1
+ // 24043: 1
+ // 24044: 1
+ // 24045: 1
+ // 24046: 1
+ // 24047: 1
+ // 24048: 1
+ // 24049: 1
+ // 24050: 1
+ // 24051: 1
+ // 24052: 1
+ // 24053: 1
+ // 24054: 1
+ // 24055: 1
+ // 24056: 1
+ // 24057: 1
+ // 24058: 1
+ // 24059: 1
+ // 24060: 1
+ // 24061: 1
+ // 24062: 1
+ // 24063: 1
+ // 24064: 1
+ // 24065: 1
+ // 24066: 1
+ // 24067: 1
+ // 24068: 1
+ // 24069: 1
+ // 24070: 1
+ // 24071: 1
+ // 24072: 1
+ // 24073: 1
+ // 24074: 1
+ // 24075: 1
+ // 24076: 1
+ // 24077: 1
+ // 24078: 1
+ // 24079: 1
+ // 24080: 1
+ // 24081: 1
+ // 24082: 1
+ // 24083: 1
+ // 24084: 1
+ // 24085: 1
+ // 24086: 1
+ // 24087: 1
+ // 24088: 1
+ // 24089: 1
+ // 24090: 1
+ // 24091: 1
+ // 24092: 1
+ // 24093: 1
+ // 24094: 1
+ // 24095: 1
+ // 24096: 1
+ // 24097: 1
+ // 24098: 1
+ // 24099: 1
+ // 24100: 1
+ // 24101: 1
+ // 24102: 1
+ // 24103: 1
+ // 24104: 1
+ // 24105: 1
+ // 24106: 1
+ // 24107: 1
+ // 24108: 1
+ // 24109: 1
+ // 24110: 1
+ // 24111: 1
+ // 24112: 1
+ // 24113: 1
+ // 24114: 1
+ // 24115: 1
+ // 24116: 1
+ // 24117: 1
+ // 24118: 1
+ // 24119: 1
+ // 24120: 1
+ // 24121: 1
+ // 24122: 1
+ // 24123: 1
+ // 24124: 1
+ // 24125: 1
+ // 24126: 1
+ // 24127: 1
+ // 24128: 1
+ // 24129: 1
+ // 24130: 1
+ // 24131: 1
+ // 24132: 1
+ // 24133: 1
+ // 24134: 1
+ // 24135: 1
+ // 24136: 1
+ // 24137: 1
+ // 24138: 1
+ // 24139: 1
+ // 24140: 1
+ // 24141: 1
+ // 24142: 1
+ // 24143: 1
+ // 24144: 1
+ // 24145: 1
+ // 24146: 1
+ // 24147: 1
+ // 24148: 1
+ // 24149: 1
+ // 24150: 1
+ // 24151: 1
+ // 24152: 1
+ // 24153: 1
+ // 24154: 1
+ // 24155: 1
+ // 24156: 1
+ // 24157: 1
+ // 24158: 1
+ // 24159: 1
+ // 24160: 1
+ // 24161: 1
+ // 24162: 1
+ // 24163: 1
+ // 24164: 1
+ // 24165: 1
+ // 24166: 1
+ // 24167: 1
+ // 24168: 1
+ // 24169: 1
+ // 24170: 1
+ // 24171: 1
+ // 24172: 1
+ // 24173: 1
+ // 24174: 1
+ // 24175: 1
+ // 24176: 1
+ // 24177: 1
+ // 24178: 1
+ // 24179: 1
+ // 24180: 1
+ // 24181: 1
+ // 24182: 1
+ // 24183: 1
+ // 24184: 1
+ // 24185: 1
+ // 24186: 1
+ // 24187: 1
+ // 24188: 1
+ // 24189: 1
+ // 24190: 1
+ // 24191: 1
+ // 24192: 1
+ // 24193: 1
+ // 24194: 1
+ // 24195: 1
+ // 24196: 1
+ // 24197: 1
+ // 24198: 1
+ // 24199: 1
+ // 24200: 1
+ // 24201: 1
+ // 24202: 1
+ // 24203: 1
+ // 24204: 1
+ // 24205: 1
+ // 24206: 1
+ // 24207: 1
+ // 24208: 1
+ // 24209: 1
+ // 24210: 1
+ // 24211: 1
+ // 24212: 1
+ // 24213: 1
+ // 24214: 1
+ // 24215: 1
+ // 24216: 1
+ // 24217: 1
+ // 24218: 1
+ // 24219: 1
+ // 24220: 1
+ // 24221: 1
+ // 24222: 1
+ // 24223: 1
+ // 24224: 1
+ // 24225: 1
+ // 24226: 1
+ // 24227: 1
+ // 24228: 1
+ // 24229: 1
+ // 24230: 1
+ // 24231: 1
+ // 24232: 1
+ // 24233: 1
+ // 24234: 1
+ // 24235: 1
+ // 24236: 1
+ // 24237: 1
+ // 24238: 1
+ // 24239: 1
+ // 24240: 1
+ // 24241: 1
+ // 24242: 1
+ // 24243: 1
+ // 24244: 1
+ // 24245: 1
+ // 24246: 1
+ // 24247: 1
+ // 24248: 1
+ // 24249: 1
+ // 24250: 1
+ // 24251: 1
+ // 24252: 1
+ // 24253: 1
+ // 24254: 1
+ // 24255: 1
+ // 24256: 1
+ // 24257: 1
+ // 24258: 1
+ // 24259: 1
+ // 24260: 1
+ // 24261: 1
+ // 24262: 1
+ // 24263: 1
+ // 24264: 1
+ // 24265: 1
+ // 24266: 1
+ // 24267: 1
+ // 24268: 1
+ // 24269: 1
+ // 24270: 1
+ // 24271: 1
+ // 24272: 1
+ // 24273: 1
+ // 24274: 1
+ // 24275: 1
+ // 24276: 1
+ // 24277: 1
+ // 24278: 1
+ // 24279: 1
+ // 24280: 1
+ // 24281: 1
+ // 24282: 1
+ // 24283: 1
+ // 24284: 1
+ // 24285: 1
+ // 24286: 1
+ // 24287: 1
+ // 24288: 1
+ // 24289: 1
+ // 24290: 1
+ // 24291: 1
+ // 24292: 1
+ // 24293: 1
+ // 24294: 1
+ // 24295: 1
+ // 24296: 1
+ // 24297: 1
+ // 24298: 1
+ // 24299: 1
+ // 24300: 1
+ // 24301: 1
+ // 24302: 1
+ // 24303: 1
+ // 24304: 1
+ // 24305: 1
+ // 24306: 1
+ // 24307: 1
+ // 24308: 1
+ // 24309: 1
+ // 24310: 1
+ // 24311: 1
+ // 24312: 1
+ // 24313: 1
+ // 24314: 1
+ // 24315: 1
+ // 24316: 1
+ // 24317: 1
+ // 24318: 1
+ // 24319: 1
+ // 24320: 1
+ // 24321: 1
+ // 24322: 1
+ // 24323: 1
+ // 24324: 1
+ // 24325: 1
+ // 24326: 1
+ // 24327: 1
+ // 24328: 1
+ // 24329: 1
+ // 24330: 1
+ // 24331: 1
+ // 24332: 1
+ // 24333: 1
+ // 24334: 1
+ // 24335: 1
+ // 24336: 1
+ // 24337: 1
+ // 24338: 1
+ // 24339: 1
+ // 24340: 1
+ // 24345: 1
+ // 24346: 1
+ // 24347: 1
+ // 24348: 1
+ // 24349: 1
+ // 24350: 1
+ // 24351: 1
+ // 24352: 1
+ // 24353: 1
+ // 24354: 1
+ // 24355: 1
+ // 24356: 1
+ // 24357: 1
+ // 24358: 1
+ // 24359: 1
+ // 24360: 1
+ // 24361: 1
+ // 24362: 1
+ // 24363: 1
+ // 24364: 1
+ // 24365: 1
+ // 24366: 1
+ // 24367: 1
+ // 24368: 1
+ // 24369: 1
+ // 24370: 1
+ // 24371: 1
+ // 24372: 1
+ // 24373: 1
+ // 24374: 1
+ // 24375: 1
+ // 24376: 1
+ // 24377: 1
+ // 24378: 1
+ // 24379: 1
+ Sentimental_Weapone_S: 1
+ Sentimental_Earring_S: 1
+ Sentimental_Pendant_S: 1
+ Enchanting_Weapone_S: 1
+ Enchanting_Earring_S: 1
+ Enchanting_Pendant_S: 1
+ S_Infinity_Weapon: 1
+ S_Physical_Shoes: 1
+ S_Physical_Shield: 1
+ S_Physical_Armor: 1
+ S_Magical_Shoes: 1
+ S_Magical_Shield: 1
+ S_Magical_Armor: 1
+ S_ImmunedAthena_Shield: 1
+ S_HardChamption_Shoes: 1
+ S_KingbirdAncient_Armor: 1
+ S_Rebellion_Armor: 1
+ S_Kagerou_Armor: 1
+ S_Oboro_Armor: 1
+ S_Rebellion_Shoes: 1
+ S_Kagerou_Shoes: 1
+ S_Oboro_Shoes: 1
+ S_DoramPhysical_Armor: 1
+ S_DoramPhysical_Shoes: 1
+ S_DoramMagical_Armor: 1
+ S_DoramMagical_Shoes: 1
+ S_Star_Emperor_Armor: 1
+ S_Star_Emperor_Shoes: 1
+ S_Soul_Reaper_Armor: 1
+ S_Soul_Reaper_Shoes: 1
+ S_Tempest_Weapon: 1
+ S_Tempest_Armor: 1
+ S_PerfectSize_Weapon: 1
+ S_PerfectSize_Armor: 1
+ S_M_Exo_Co_Weapon: 1
+ S_M_Viv_Dr_Weapon: 1
+ S_M_Sci_Hu_Weapon: 1
+ S_M_Fis_In_Weapon: 1
+ S_M_Exe_Ho_Weapon: 1
+ S_Penetration_Weapon: 1
+ S_Penetration_Armor: 1
+ S_Exe_Ho_Weapon: 1
+ S_Fis_In_Weapon: 1
+ S_Sci_Hu_Weapon: 1
+ S_Viv_Dr_Weapon: 1
+ S_Exo_Co_Weapon: 1
+ S_Hasty_Weapon: 1
+ S_Sonic_Armor: 1
+ S_Sonic_Shield: 1
+ S_Sonic_Shoes: 1
+ S_Ignition_Weapon: 1
+ S_Ignition_Pendant: 1
+ S_Ignition_Earing: 1
+ S_W_Breath_Armor: 1
+ S_W_Breath_Shield: 1
+ S_W_Breath_Shoes: 1
+ S_F_Breath_Weapon: 1
+ S_F_Breath_Pendant: 1
+ S_F_Breath_Earing: 1
+ S_Cluster_Armor: 1
+ S_Cluster_Shield: 1
+ S_Cluster_Shoes: 1
+ S_Aimed_Weapon: 1
+ S_Aimed_Pendant: 1
+ S_Aimed_Earing: 1
+ S_Arrow_Armor: 1
+ S_Arrow_Shield: 1
+ S_Arrow_Shoes: 1
+ S_Shooting_Weapon: 1
+ S_Shooting_Pendant: 1
+ S_Shooting_Earing: 1
+ S_Tornado_Armor: 1
+ S_Tornado_Shield: 1
+ S_Tornado_Shoes: 1
+ S_Boomerang_Weapon: 1
+ S_Boomerang_Pendant: 1
+ S_Boomerang_Earing: 1
+ S_Vulcan_Armor: 1
+ S_Vulcan_Shield: 1
+ S_Vulcan_Shoes: 1
+ S_Arms_Weapon: 1
+ S_Arms_Pendant: 1
+ S_Arms_Earing: 1
+ S_Rampage_Armor: 1
+ S_Rampage_Shield: 1
+ S_Rampage_Shoes: 1
+ S_Skynetblow_Weapon: 1
+ S_Skynetblow_Pendant: 1
+ S_Skynetblow_Earing: 1
+ S_Knucklearrow_Armor: 1
+ S_Knucklearrow_Shield: 1
+ S_Knucklearrow_Shoes: 1
+ S_TigerCannon_Weapon: 1
+ S_Tigercannon_Pendant: 1
+ S_Tigercannon_Earing: 1
+ S_Duplelight_Armor: 1
+ S_Duplelight_Shield: 1
+ S_Duplelight_Shoes: 1
+ S_Adoramus_Weapon: 1
+ S_Adoramus_Pendant: 1
+ S_Adoramus_Earing: 1
+ S_Judex_Armor: 1
+ S_Judex_Shield: 1
+ S_Judex_Shoes: 1
+ S_Magnus_Weapon: 1
+ S_Magnus_Pendant: 1
+ S_Magnus_Earing: 1
+ S_Rainstorm_Armor: 1
+ S_Rainstorm_Shield: 1
+ S_Rainstorm_Shoes: 1
+ S_Arrowvulcan_Weapon: 1
+ S_Arrowvulcan_Pendant: 1
+ S_Arrowvulcan_Earing: 1
+ S_Metalic_Armor: 1
+ S_Metalic_Shield: 1
+ S_Metalic_Shoes: 1
+ S_Reverberation_Weapon: 1
+ S_Reverberation_Pendant: 1
+ S_Reverberation_Earing: 1
+ S_Jack_Armor: 1
+ S_Jack_Shield: 1
+ S_Jack_Shoes: 1
+ S_Strain_Weapon: 1
+ S_Strain_Pendant: 1
+ S_Strain_Earing: 1
+ S_Crimson_Armor: 1
+ S_Crimson_Shield: 1
+ S_Crimson_Shoes: 1
+ S_Chain_Weapon: 1
+ S_Chain_Pendant: 1
+ S_Chain_Earing: 1
+ S_Triangle_Armor: 1
+ S_Triangle_Shield: 1
+ S_Triangle_Shoes: 1
+ S_Shadowspell_Weapon: 1
+ S_Shadowspell_Pendant: 1
+ S_Shadowspell_Earing: 1
+ S_Menace_Armor: 1
+ S_Menace_Shield: 1
+ S_Menace_Shoes: 1
+ S_Paint_Weapon: 1
+ S_Paint_Pendant: 1
+ S_Paint_Earing: 1
+ S_Rolling_Armor: 1
+ S_Rolling_Shield: 1
+ S_Rolling_Shoes: 1
+ S_Katar_Weapon: 1
+ S_Katar_Pendant: 1
+ S_Katar_Earing: 1
+ S_Slash_Armor: 1
+ S_Slash_Shield: 1
+ S_Slash_Shoes: 1
+ S_Ripper_Weapon: 1
+ S_Ripper_Pendant: 1
+ S_Ripper_Earing: 1
+ S_Dust_Armor: 1
+ S_Dust_Shield: 1
+ S_Dust_Shoes: 1
+ S_Grave_Weapon: 1
+ S_Grave_Pendant: 1
+ S_Grave_Earing: 1
+ S_Psychic_Armor: 1
+ S_Psychic_Shield: 1
+ S_Psychic_Shoes: 1
+ S_Varetyr_Weapon: 1
+ S_Varetyr_Pendant: 1
+ S_Varetyr_Earing: 1
+ S_Cart_Tornado_Armor: 1
+ S_Cart_Tornado_Shield: 1
+ S_Cart_Tornado_Shoes: 1
+ S_Cannon_Cart_Weapon: 1
+ S_Cannon_Cart_Pendant: 1
+ S_Cannon_Cart_Earing: 1
+ S_Spore_Bomb_Armor: 1
+ S_Spore_Bomb_Shield: 1
+ S_Spore_Bomb_Shoes: 1
+ S_Crazy_Weapon: 1
+ S_Crazy_Pendant: 1
+ S_Crazy_Earing: 1
+ S_Brand_Armor: 1
+ S_Brand_Shield: 1
+ S_Brand_Shoes: 1
+ S_Chain_Press_Weapon: 1
+ S_Chain_Press_Pendant: 1
+ S_Chain_Press_Earing: 1
+ S_Banish_Cannon_Armor: 1
+ S_Banish_Cannon_Shield: 1
+ S_Banish_Cannon_Shoes: 1
+ S_Genesis_Weapon: 1
+ S_Genesis_Pendant: 1
+ S_Genesis_Earing: 1
+ // 28391: 1
+ // 28392: 1
+ }
+}
+*/
+/*
+23151: {
+ NeedCount: 3
+ SourceItems: {
+ // 6636: 1
+ // 6637: 1
+ // 6638: 1
+ // 6639: 1
+ // 6640: 1
+ // 6641: 1
+ // 6642: 1
+ // 6643: 1
+ // 6644: 1
+ // 6645: 1
+ // 6716: 1
+ // 6717: 1
+ // 6718: 1
+ // 6740: 1
+ // 6741: 1
+ // 6742: 1
+ // 6743: 1
+ // 6744: 1
+ // 6745: 1
+ // 6790: 1
+ // 6791: 1
+ // 6792: 1
+ // 6908: 1
+ // 6943: 1
+ // 6944: 1
+ // 6945: 1
+ // 6946: 1
+ // 6947: 1
+ // 6948: 1
+ // 6949: 1
+ // 6950: 1
+ // 6951: 1
+ // 6963: 1
+ // 6964: 1
+ // 6999: 1
+ // 25000: 1
+ // 25001: 1
+ // 25002: 1
+ // 25003: 1
+ // 25004: 1
+ // 25005: 1
+ // 25006: 1
+ // 25007: 1
+ // 25008: 1
+ // 25009: 1
+ // 25010: 1
+ // 25011: 1
+ // 25012: 1
+ // 25013: 1
+ // 25014: 1
+ // 25015: 1
+ // 25016: 1
+ // 25017: 1
+ // 25058: 1
+ // 25059: 1
+ // 25060: 1
+ // 25061: 1
+ // 25062: 1
+ // 25063: 1
+ // 25064: 1
+ // 25065: 1
+ // 25066: 1
+ // 25067: 1
+ // 25068: 1
+ // 25069: 1
+ // 25070: 1
+ // 25071: 1
+ // 25072: 1
+ // 25136: 1
+ // 25137: 1
+ // 25138: 1
+ // 25139: 1
+ // 25141: 1
+ // 25170: 1
+ // 25171: 1
+ // 25172: 1
+ // 25173: 1
+ // 25174: 1
+ // 25175: 1
+ // 25176: 1
+ // 25177: 1
+ // 25178: 1
+ // 25205: 1
+ // 25206: 1
+ // 25207: 1
+ // 25208: 1
+ // 25209: 1
+ // 25210: 1
+ // 25224: 1
+ // 25225: 1
+ // 25226: 1
+ // 25227: 1
+ // 25228: 1
+ // 25229: 1
+ // 25302: 1
+ // 25303: 1
+ // 25304: 1
+ // 25305: 1
+ // 25306: 1
+ SuraStone_Top: 1
+ SuraStone_Middle: 1
+ SuraStone_Bottom: 1
+ SuraStone_Robe: 1
+ RangerStone_Top: 1
+ RangerStone_Middle: 1
+ RangerStone_Bottom: 1
+ RangerStone_Robe: 1
+ SorcererStone_Top: 1
+ SorcererStone_Middle: 1
+ SorcererStone_Bottom: 1
+ SorcererStone_Robe: 1
+ RuneknightStone_Top: 1
+ RuneknightStone_Middle: 1
+ RuneknightStone_Bottom: 1
+ RuneknightStone_Robe: 1
+ GeneticStone_Robe: 1
+ GeneticStone_Top: 1
+ GeneticStone_Middle: 1
+ GeneticStone_Bottom: 1
+ WarlockStone_Top: 1
+ WarlockStone_Middle: 1
+ WarlockStone_Bottom: 1
+ WarlockStone_Robe: 1
+ ShadowchaserStone_Top: 1
+ ShadowchaseStone_Middle: 1
+ ShadowchaseStone_Bottom: 1
+ ShadowchaserStone_Robe: 1
+ MechanicStone_Top: 1
+ MechanicStone_Middle: 1
+ MechanicStone_Bottom: 1
+ MechanicStone_Robe: 1
+ WanderMinstrelStone_Top: 1
+ WanderMinstStone_Middle: 1
+ WanderMinstStone_Bottom: 1
+ WanderMinstreStone_Robe: 1
+ HighpriestStone_Top: 1
+ HighpriestStone_Middle: 1
+ HighpriestStone_Bottom: 1
+ ArchbishopStone_Robe: 1
+ PaladinStone_Top: 1
+ PaladinStone_Middle: 1
+ PaladinStone_Bottom: 1
+ RoyalguardStone_Robe: 1
+ AssacrossStone_Top: 1
+ AssacrossStone_Middle: 1
+ AssacrossStone_Bottom: 1
+ GuillcrossStone_Robe: 1
+ SuraStone_Robe2: 1
+ SuraStone_Bottom2: 1
+ SuraStone_Middle2: 1
+ SuraStone_Top2: 1
+ SorcererStone_Robe2: 1
+ SorcererStone_Bottom2: 1
+ SorcererStone_Middle2: 1
+ SorcererStone_Top2: 1
+ ShadowchaserStone_Robe2: 1
+ ShadowchasStone_Bottom2: 1
+ ShadowchasStone_Middle2: 1
+ ShadowchaserStone_Top2: 1
+ SoulreaperStone_Robe: 1
+ SoullinkerStone_Top: 1
+ SoullinkerStone_Middle: 1
+ SoullinkerStone_Bottom: 1
+ GladiatorStone_Top: 1
+ GladiatorStone_Middle: 1
+ GladiatorStone_Bottom: 1
+ StaremperorStone_Robe: 1
+ NinjaStone_Top: 1
+ NinjaStone_Middle: 1
+ NinjaStone_Bottom: 1
+ KagerouStone_Robe: 1
+ OboroStone_Robe: 1
+ GunslingerStone_Top: 1
+ GunslingerStone_Middle: 1
+ GunslingerStone_Bottom: 1
+ RebellionStone_Robe: 1
+ DoramStone_Top: 1
+ DoramStone_Middle: 1
+ DoramStone_Bottom: 1
+ DoramStone_Robe: 1
+ RangerStone_Top2: 1
+ RangerStone_Middle2: 1
+ RangerStone_Bottom2: 1
+ RangerStone_Robe2: 1
+ MechanicStone_Top2: 1
+ MechanicStone_Middle2: 1
+ MechanicStone_Bottom2: 1
+ MechanicStone_Robe2: 1
+ HighpriestStone_Top2: 1
+ HighpriestStone_Middle2: 1
+ HighpriestStone_Bottom2: 1
+ ArchbishopStone_Robe2: 1
+ WarlockStone_Robe2: 1
+ WarlockStone_Top2: 1
+ WarlockStone_Middle2: 1
+ WarlockStone_Bottom2: 1
+ RoyalguardStone_Robe2: 1
+ PaladinStone_Top2: 1
+ PaladinStone_Middle2: 1
+ PaladinStone_Bottom2: 1
+ GuillcrossStone_Robe2: 1
+ AssacrossStone_Top2: 1
+ AssacrossStone_Middle2: 1
+ AssacrossStone_Bottom2: 1
+ }
+}
+*/
+/*
+23152: {
+ NeedCount: 10
+ SourceItems: {
+ Danggie: 10
+ Tree_Root: 10
+ Reptile_Tongue: 10
+ Scorpions_Tail: 10
+ Stem: 10
+ Pointed_Scale: 10
+ Resin: 10
+ Spawn: 10
+ Jellopy: 10
+ Garlet: 10
+ Scell: 10
+ Zargon: 10
+ Tooth_Of_Bat: 10
+ Fluff: 10
+ Chrysalis: 10
+ Feather_Of_Birds: 10
+ Talon: 10
+ Sticky_Webfoot: 10
+ Animals_Skin: 10
+ Claw_Of_Wolves: 10
+ Mushroom_Spore: 10
+ Orcish_Cuspid: 10
+ Evil_Horn: 10
+ Powder_Of_Butterfly: 10
+ Bill_Of_Birds: 10
+ Scale_Of_Snakes: 10
+ Insect_Feeler: 10
+ Immortal_Heart: 10
+ Rotten_Bandage: 10
+ Orcish_Voucher: 10
+ Skel_Bone: 10
+ Shell: 10
+ Scales_Shell: 10
+ Posionous_Canine: 10
+ Sticky_Mucus: 10
+ Bee_Sting: 10
+ Grasshoppers_Leg: 10
+ Nose_Ring: 10
+ Yoyo_Tail: 10
+ Solid_Shell: 10
+ Horseshoe: 10
+ Raccoon_Leaf: 10
+ Snails_Shell: 10
+ Horn: 10
+ Bears_Foot: 10
+ Feather: 10
+ Heart_Of_Mermaid: 10
+ Fin: 10
+ Cactus_Needle: 10
+ Stone_Heart: 10
+ Shining_Scales: 10
+ Worm_Peelings: 10
+ Gill: 10
+ Decayed_Nail: 10
+ Horrendous_Mouth: 10
+ Rotten_Scale: 10
+ Nipper: 10
+ Conch: 10
+ Tentacle: 10
+ Sharp_Scale: 10
+ Crap_Shell: 10
+ Clam_Shell: 10
+ Flesh_Of_Clam: 10
+ Turtle_Shell: 10
+ Voucher_Of_Orcish_Hero: 10
+ Gold: 10
+ Lizard_Scruff: 10
+ Colorful_Shell: 10
+ Jaws_Of_Ant: 10
+ Thin_N_Long_Tongue: 10
+ Rat_Tail: 10
+ Moustache_Of_Mole: 10
+ Nail_Of_Mole: 10
+ Wooden_Block: 10
+ Long_Hair: 10
+ Dokkaebi_Horn: 10
+ Fox_Tail: 10
+ Fish_Tail: 10
+ Chinese_Ink: 10
+ Spiderweb: 10
+ Acorn: 10
+ Porcupine_Spike: 10
+ Wild_Boars_Mane: 10
+ Tigers_Skin: 10
+ Tiger_Footskin: 10
+ Limb_Of_Mantis: 10
+ Blossom_Of_Maneater: 10
+ Root_Of_Maneater: 10
+ Cobold_Hair: 10
+ Dragon_Canine: 10
+ Dragon_Scale: 10
+ Dragon_Train: 10
+ Petite_DiablOfs_Horn: 10
+ Petite_DiablOfs_Wing: 10
+ Elder_Pixies_Beard: 10
+ Lantern: 10
+ Short_Leg: 10
+ Nail_Of_Orc: 10
+ Tooth_Of_: 10
+ Sacred_Masque: 10
+ Tweezer: 10
+ Head_Of_Medusa: 10
+ Slender_Snake: 10
+ Skirt_Of_Virgin: 10
+ Tendon: 10
+ Detonator: 10
+ Single_Cell: 10
+ Tooth_Of_Ancient_Fish: 10
+ Lip_Of_Ancient_Fish: 10
+ Earthworm_Peeling: 10
+ Grit: 10
+ Moth_Dust: 10
+ Wing_Of_Moth: 10
+ Transparent_Cloth: 10
+ Golden_Hair: 10
+ Starsand_Of_Witch: 10
+ Pumpkin_Head: 10
+ Sharpened_Cuspid: 10
+ Reins: 10
+ Tree_Of_Archer_1: 10
+ Tree_Of_Archer_2: 10
+ Tree_Of_Archer_3: 10
+ Short_Daenggie: 10
+ Needle_Of_Alarm: 10
+ Round_Shell: 10
+ Worn_Out_Page: 10
+ Manacles: 10
+ Worn_Out_Prison_Uniform: 10
+ // 4454: 10
+ // 4455: 10
+ // 4478: 10
+ // 4479: 10
+ Fur: 10
+ Peaked_Hat: 10
+ Hard_Skin: 10
+ Mystic_Horn: 10
+ Rakehorn_Helm: 10
+ Antler_Helm: 10
+ Twinhorn_Helm: 10
+ Singlehorn_Helm: 10
+ White_Spider_Limb: 10
+ Fortune_Cookie_Fail: 10
+ // 6496: 10
+ // 6609: 10
+ // 6610: 10
+ // 6648: 10
+ // 6936: 10
+ // 6937: 10
+ // 6938: 10
+ // 6939: 10
+ // 6940: 10
+ // 6941: 10
+ // 6942: 10
+ Mould_Powder: 10
+ Ogre_Tooth: 10
+ Anolian_Skin: 10
+ Mud_Lump: 10
+ Skull: 10
+ Wing_Of_Red_Bat: 10
+ Claw_Of_Rat: 10
+ Stiff_Horn: 10
+ Glitter_Shell: 10
+ Tail_Of_Steel_Scorpion: 10
+ Claw_Of_Monkey: 10
+ Tough_Scalelike_Stem: 10
+ Coral_Reef: 10
+ Executioners_Mitten: 10
+ Claw_Of_Desert_Wolf: 10
+ Old_Frying_Pan: 10
+ Piece_Of_Egg_Shell: 10
+ Poison_Spore: 10
+ Alices_Apron: 10
+ Talon_Of_Griffin: 10
+ Cyfar: 10
+ Brigan: 10
+ Treasure_Box: 10
+ Old_White_Cloth: 10
+ Clattering_Skull: 10
+ Broken_Farming_Utensil: 10
+ Broken_Crown: 10
+ // 25156: 10
+ // 25157: 10
+ // 25158: 10
+ // 25256: 10
+ BrokenArrow: 10
+ // 25259: 10
+ // 25261: 10
+ // 25262: 10
+ // 25263: 10
+ // 25264: 10
+ Shining_Spore: 10
+ Dried_Leaf_Of_Ygg: 10
+ // 25267: 10
+ // 25272: 10
+ // 25276: 10
+ // 25277: 10
+ // 25278: 10
+ // 25279: 10
+ // 25280: 10
+ // 25281: 10
+ // 25282: 10
+ // 25283: 10
+ // 25284: 10
+ // 25285: 10
+ // 25297: 10
+ // 25298: 10
+ // 25299: 10
+ // 25300: 10
+ // 25311: 10
+ // 25312: 10
+ // 25313: 10
+ Ein_SOLIDDUST: 10
+ Ein_RUSTHELM: 10
+ Ein_EYEROCK: 10
+ }
+}
+*/
+/*
+23153: {
+ NeedCount: 2
+ SourceItems: {
+ Poring_Egg: 1
+ Drops_Egg: 1
+ Poporing_Egg: 1
+ Lunatic_Egg: 1
+ Picky_Egg: 1
+ Chonchon_Egg: 1
+ Steel_Chonchon_Egg: 1
+ Hunter_Fly_Egg: 1
+ Savage_Bebe_Egg: 1
+ Baby_Desert_Wolf_Egg: 1
+ Rocker_Egg: 1
+ Spore_Egg: 1
+ Poison_Spore_Egg: 1
+ PecoPeco_Egg: 1
+ Smokie_Egg: 1
+ Yoyo_Egg: 1
+ Orc_Warrior_Egg: 1
+ Munak_Egg: 1
+ Dokkaebi_Egg: 1
+ Sohee_Egg: 1
+ Isis_Egg: 1
+ Green_Petite_Egg: 1
+ Deviruchi_Egg: 1
+ Bapho_Jr_Egg: 1
+ Bongun_Egg: 1
+ Zherlthsh_Egg: 1
+ Alice_Egg: 1
+ Rice_Cake_Egg: 1
+ Santa_Goblin_Egg: 1
+ Chung_E_Egg: 1
+ Spring_Rabbit_Egg: 1
+ Knife_Goblin_Egg: 1
+ Flail_Goblin_Egg: 1
+ Hammer_Goblin_Egg: 1
+ Red_Deleter_Egg: 1
+ Diabolic_Egg: 1
+ Wanderer_Egg: 1
+ New_Year_Doll_Egg: 1
+ Bacsojin_Egg: 1
+ Civil_Servant_Egg: 1
+ Leaf_Cat_Egg: 1
+ Loli_Ruri_Egg: 1
+ Marionette_Egg: 1
+ Shinobi_Egg: 1
+ Whisper_Egg: 1
+ Goblin_Leader_Egg: 1
+ Wicked_Nymph_Egg: 1
+ Miyabi_Ningyo_Egg: 1
+ Dullahan_Egg: 1
+ Medusa_Egg: 1
+ Stone_Shooter_Egg: 1
+ Incubus_Egg: 1
+ Golem_Egg: 1
+ Nightmare_Terror_Egg: 1
+ Succubus_Egg: 1
+ Imp_Egg: 1
+ // 9057: 1
+ Snow_Rabbit_Egg: 1
+ // 9059: 1
+ // 9060: 1
+ // 9061: 1
+ // 9063: 1
+ // 9068: 1
+ // 9095: 1
+ // 9099: 1
+ // 9100: 1
+ // 9101: 1
+ // 9102: 1
+ // 9103: 1
+ // 9104: 1
+ }
+}
+*/
+/*
+23154: {
+ NeedCount: 1
+ SourceItems: {
+ // 5909: 1
+ // 5979: 1
+ // 18740: 1
+ // 19158: 1
+ // 19289: 1
+ C_Shiba_Inu: 1
+ C_CatEars_Cyber_HeadP_R: 1
+ // 19608: 1
+ // 19643: 1
+ // 19654: 1
+ // 19712: 1
+ // 19721: 1
+ // 19761: 1
+ // 19815: 1
+ // 19816: 1
+ // 19823: 1
+ // 19876: 1
+ // 19954: 1
+ // 19959: 1
+ // 19960: 1
+ // 19990: 1
+ // 19992: 1
+ // 20022: 1
+ // 20033: 1
+ // 20036: 1
+ // 20071: 1
+ // 20098: 1
+ // 20130: 1
+ // 20132: 1
+ // 20133: 1
+ // 20145: 1
+ // 20146: 1
+ // 20147: 1
+ // 20171: 1
+ // 20172: 1
+ // 20174: 1
+ // 20175: 1
+ // 20195: 1
+ // 20199: 1
+ // 20200: 1
+ // 20201: 1
+ // 20202: 1
+ // 20230: 1
+ // 20231: 1
+ // 20232: 1
+ // 20233: 1
+ // 20239: 1
+ // 20242: 1
+ // 20255: 1
+ // 20257: 1
+ // 20266: 1
+ // 20268: 1
+ // 20273: 1
+ // 20286: 1
+ // 20299: 1
+ // 20300: 1
+ // 20315: 1
+ // 20318: 1
+ // 20325: 1
+ // 20329: 1
+ // 20330: 1
+ // 20340: 1
+ // 20341: 1
+ // 20342: 1
+ // 20349: 1
+ // 20350: 1
+ // 20351: 1
+ // 20352: 1
+ // 20353: 1
+ // 20354: 1
+ // 20355: 1
+ // 20356: 1
+ // 20357: 1
+ // 20358: 1
+ // 20359: 1
+ // 20360: 1
+ // 20361: 1
+ // 20362: 1
+ // 20363: 1
+ // 20364: 1
+ // 20365: 1
+ // 20366: 1
+ // 20367: 1
+ // 20368: 1
+ // 20369: 1
+ // 20370: 1
+ // 20381: 1
+ // 20395: 1
+ // 20396: 1
+ // 20398: 1
+ // 20399: 1
+ // 20404: 1
+ // 20405: 1
+ // 20430: 1
+ // 20432: 1
+ // 20433: 1
+ // 20440: 1
+ // 20447: 1
+ // 20448: 1
+ // 20449: 1
+ // 20458: 1
+ // 20459: 1
+ // 20464: 1
+ // 20482: 1
+ // 20486: 1
+ // 20487: 1
+ // 20488: 1
+ // 20489: 1
+ // 20491: 1
+ // 20499: 1
+ // 20502: 1
+ // 20504: 1
+ // 20507: 1
+ // 20509: 1
+ // 20510: 1
+ // 20511: 1
+ C_Thanatos_Sword: 1
+ C_Magic_Circle: 1
+ C_Wings_of_Michael: 1
+ C_GiantCatBag_TW: 1
+ C_Full_BloomCherry_Tree: 1
+ C_PinkButterfly_Wing_T: 1
+ C_Digital_Space: 1
+ C_Halloween_Poring_Bag: 1
+ C_Backside_Ribbon_Bell: 1
+ C_HeartChocoBag: 1
+ C_WingOfHeart: 1
+ C_Cat_Fork: 1
+ C_Big_Foxtail: 1
+ // 20746: 1
+ // 20761: 1
+ // 20762: 1
+ // 20764: 1
+ // 20765: 1
+ // 31027: 1
+ // 31029: 1
+ // 31031: 1
+ // 31033: 1
+ // 31040: 1
+ // 31055: 1
+ // 31057: 1
+ // 31062: 1
+ // 31063: 1
+ // 31064: 1
+ // 31065: 1
+ // 31066: 1
+ // 31067: 1
+ // 31068: 1
+ // 31069: 1
+ // 31070: 1
+ // 31071: 1
+ // 31072: 1
+ // 31073: 1
+ // 31074: 1
+ // 31075: 1
+ // 31076: 1
+ // 31077: 1
+ // 31078: 1
+ // 31079: 1
+ // 31080: 1
+ // 31081: 1
+ // 31082: 1
+ // 31083: 1
+ // 31084: 1
+ // 31085: 1
+ // 31086: 1
+ // 31087: 1
+ // 31088: 1
+ // 31118: 1
+ // 31120: 1
+ // 31123: 1
+ // 31125: 1
+ // 31134: 1
+ // 31136: 1
+ // 31139: 1
+ // 31160: 1
+ // 31162: 1
+ // 31164: 1
+ // 31165: 1
+ // 31166: 1
+ // 31168: 1
+ // 31178: 1
+ // 31180: 1
+ C_Black_Cat: 1
+ Rabbit_Hopping: 1
+ Warm_Cat_Muffler: 1
+ C_Ghost_Holiday: 1
+ C_Alice_Wig: 1
+ C_Khalitzburg_Helm_BL: 1
+ C_Cat_Ears_Punkish: 1
+ C_Sorcerer_Hood: 1
+ C_Pope_Sitting_Head: 1
+ C_Blinking_Thin_Eyes: 1
+ C_Wanderer_Sakkat: 1
+ C_Luwmin_Ice: 1
+ C_Baby_Penguin: 1
+ C_Fluffy_Heart_Earmuffs: 1
+ C_Snow_Bear_Food: 1
+ C_Blessing_Sky_Lantern: 1
+ C_CatCoffeeCup_TW: 1
+ C_CatEarRibbon_TW: 1
+ C_Bouquet_Hat: 1
+ C_Poring_Muffler: 1
+ C_Panda_Rabbit: 1
+ C_Happy_Rabbit_Ribbon: 1
+ C_Princess_Ribbon_Crown: 1
+ C_OpenAir_Headset: 1
+ C_Mobile_Pursuit_System: 1
+ C_Mecha_Cat_Ears: 1
+ C_Cyber_Income: 1
+ C_Poporing_Muffler: 1
+ C_Kishu_Inu: 1
+ C_Autumn_Headband: 1
+ C_Fox: 1
+ C_Sleep_Sheep_TW: 1
+ C_HeartOfCat_TW: 1
+ C_Protect_Cloth: 1
+ C_LunaticMuffler: 1
+ C_Pigtail_Red_Hood: 1
+ C_Smiling_Eyes: 1
+ C_Garnet_Tiara: 1
+ C_Peony_Hair_Ornament: 1
+ C_SavageB_On_Shoulder: 1
+ C_Baby_Panda: 1
+ C_BeachBall: 1
+ C_SharkHead: 1
+ }
+}
+*/
+/*
+23170: {
+ NeedCount: 1
+ SourceItems: {
+ // 28439: 1
+ }
+}
+*/
+/*
+23236: {
+ NeedCount: 1
+ NeedRefineMin: 7
+ SourceItems: {
+ // 24282: 1
+ // 24283: 1
+ // 24284: 1
+ // 24285: 1
+ // 24286: 1
+ // 24287: 1
+ // 24288: 1
+ // 24289: 1
+ // 24290: 1
+ // 24291: 1
+ // 24292: 1
+ // 24293: 1
+ // 24294: 1
+ // 24295: 1
+ // 24296: 1
+ // 24297: 1
+ // 24298: 1
+ // 24299: 1
+ // 24300: 1
+ }
+}
+*/
+/*
+23237: {
+ NeedCount: 1
+ NeedRefineMin: 7
+ SourceItems: {
+ // 24269: 1
+ // 24270: 1
+ // 24271: 1
+ // 24272: 1
+ // 24273: 1
+ // 24274: 1
+ // 24275: 1
+ // 24276: 1
+ // 24277: 1
+ // 24278: 1
+ // 24279: 1
+ // 24280: 1
+ // 24281: 1
+ S_Rebellion_Armor: 1
+ S_Kagerou_Armor: 1
+ S_Oboro_Armor: 1
+ S_DoramPhysical_Armor: 1
+ S_DoramMagical_Armor: 1
+ S_Star_Emperor_Armor: 1
+ S_Soul_Reaper_Armor: 1
+ }
+}
+*/
+/*
+23238: {
+ NeedCount: 1
+ NeedRefineMin: 7
+ SourceItems: {
+ // 24256: 1
+ // 24257: 1
+ // 24258: 1
+ // 24259: 1
+ // 24260: 1
+ // 24261: 1
+ // 24262: 1
+ // 24263: 1
+ // 24264: 1
+ // 24265: 1
+ // 24266: 1
+ // 24267: 1
+ // 24268: 1
+ S_Rebellion_Shoes: 1
+ S_Kagerou_Shoes: 1
+ S_Oboro_Shoes: 1
+ S_DoramPhysical_Shoes: 1
+ S_DoramMagical_Shoes: 1
+ S_Star_Emperor_Shoes: 1
+ S_Soul_Reaper_Shoes: 1
+ }
+}
+*/
+/*
+23239: {
+ NeedCount: 1
+ NeedRefineMin: 7
+ SourceItems: {
+ // 24301: 1
+ // 24302: 1
+ // 24303: 1
+ // 24304: 1
+ // 24305: 1
+ // 24306: 1
+ // 24307: 1
+ // 24308: 1
+ // 24309: 1
+ // 24310: 1
+ // 24311: 1
+ // 24312: 1
+ // 24313: 1
+ // 24314: 1
+ // 24315: 1
+ // 24316: 1
+ // 24317: 1
+ // 24318: 1
+ // 24319: 1
+ }
+}
+*/
+/*
+23240: {
+ NeedCount: 1
+ NeedRefineMin: 7
+ SourceItems: {
+ // 24250: 1
+ // 24251: 1
+ // 24252: 1
+ // 24253: 1
+ // 24254: 1
+ // 24255: 1
+ }
+}
+*/
+/*
+23241: {
+ NeedCount: 1
+ NeedRefineMin: 7
+ SourceItems: {
+ // 24246: 1
+ // 24247: 1
+ // 24248: 1
+ // 24249: 1
+ // 28391: 1
+ // 28392: 1
+ }
+}
+*/
+/*
+23247: {
+ NeedCount: 5
+ NeedRefineMin: 7
+ SourceItems: {
+ // 24034: 1
+ // 24035: 1
+ // 24036: 1
+ // 24037: 1
+ // 24038: 1
+ // 24039: 1
+ // 24040: 1
+ // 24041: 1
+ // 24042: 1
+ // 24043: 1
+ // 24044: 1
+ // 24045: 1
+ }
+}
+*/
+/*
+23248: {
+ NeedCount: 3
+ NeedRefineMin: 7
+ SourceItems: {
+ // 24084: 1
+ // 24085: 1
+ // 24086: 1
+ // 24087: 1
+ // 24088: 1
+ // 24089: 1
+ }
+}
+*/
+/*
+23249: {
+ NeedCount: 3
+ NeedRefineMin: 7
+ SourceItems: {
+ // 24180: 1
+ // 24181: 1
+ // 24182: 1
+ // 24183: 1
+ // 24184: 1
+ // 24185: 1
+ }
+}
+*/
+/*
+23250: {
+ NeedCount: 4
+ NeedRefineMin: 7
+ SourceItems: {
+ // 24219: 1
+ // 24220: 1
+ // 24221: 1
+ // 24222: 1
+ }
+}
+*/
+/*
+23281: {
+ NeedCount: 4
+ NeedRefineMin: 7
+ SourceItems: {
+ // 24052: 1
+ // 24054: 1
+ // 24055: 1
+ // 24056: 1
+ // 24057: 1
+ // 24058: 1
+ // 24059: 1
+ // 24060: 1
+ // 24061: 1
+ // 24062: 1
+ // 24064: 1
+ // 24065: 1
+ // 24066: 1
+ // 24067: 1
+ // 24068: 1
+ // 24069: 1
+ // 24070: 1
+ // 24071: 1
+ }
+}
+*/
+/*
+23308: {
+ NeedCount: 1
+ SourceItems: {
+ // 19241: 1
+ }
+}
+*/
+/*
+23324: {
+ NeedCount: 3
+ NeedRefineMin: 5
+ SourceItems: {
+ // 24091: 1
+ // 24092: 1
+ // 24093: 1
+ // 24094: 1
+ // 24095: 1
+ // 24096: 1
+ // 24097: 1
+ // 24098: 1
+ // 24099: 1
+ // 24100: 1
+ // 24101: 1
+ // 24102: 1
+ // 24103: 1
+ // 24104: 1
+ // 24105: 1
+ // 24106: 1
+ // 24107: 1
+ // 24108: 1
+ }
+}
+*/
+InfinityShadow_Mix: {
+ NeedCount: 2
+ NeedRefineMin: 7
+ SourceItems: {
+ // 24150: 1
+ // 24151: 1
+ }
+}
+Silver_Statue: {
+ NeedCount: 1
+ SourceItems: {
+ Bloody_Knight_Shield: 1
+ }
+}
+PhysicalMagical_Mix: {
+ NeedCount: 3
+ NeedRefineMin: 7
+ SourceItems: {
+ // 24018: 1
+ // 24019: 1
+ // 24020: 1
+ // 24021: 1
+ // 24022: 1
+ // 24023: 1
+ }
+}
+ImmunedAthena_Mix: {
+ NeedCount: 2
+ NeedRefineMin: 7
+ SourceItems: {
+ // 24026: 1
+ // 24027: 1
+ // 24051: 1
+ }
+}
+HardChamption_Mix: {
+ NeedCount: 2
+ NeedRefineMin: 7
+ SourceItems: {
+ // 24025: 1
+ // 24028: 1
+ // 24049: 1
+ }
+}
+KingbirdAncient_Mix: {
+ NeedCount: 2
+ NeedRefineMin: 7
+ SourceItems: {
+ // 24029: 1
+ // 24031: 1
+ }
+}
+CriticalHit_Mix: {
+ NeedCount: 2
+ NeedRefineMin: 7
+ SourceItems: {
+ // 24030: 1
+ // 24032: 1
+ // 24332: 1
+ // 24333: 1
+ }
+}
+Bs_Item_M_S_2: {
+ NeedCount: 2
+ SourceItems: {
+ Token_of_OrcGeneral: 150
+ Zelunium: 10
+ }
+}
+Bs_Item_M_S_8: {
+ NeedCount: 2
+ SourceItems: {
+ Valhalla_Flower: 150
+ Zelunium: 10
+ }
+}
+Bs_Item_M_S_10: {
+ NeedCount: 2
+ SourceItems: {
+ Broken_Crown: 150
+ Zelunium: 10
+ }
+}
+Bs_Item_M_S_11: {
+ NeedCount: 2
+ SourceItems: {
+ Mothers_Nightmare: 150
+ Zelunium: 10
+ }
+}
+Bs_Item_M_S_34: {
+ NeedCount: 2
+ SourceItems: {
+ Piece_Of_Bone_Armor: 150
+ Zelunium: 10
+ }
+}
+Bs_Item_M_S_41: {
+ NeedCount: 2
+ SourceItems: {
+ Mothers_Nightmare: 150
+ Zelunium: 10
+ }
+}
+Bs_Item_M_S_42: {
+ NeedCount: 2
+ SourceItems: {
+ Shine_Spear_Blade: 50
+ Zelunium: 10
+ }
+}
+Bs_Item_M_S_43: {
+ NeedCount: 2
+ SourceItems: {
+ Osiris_Doll: 30
+ Zelunium: 10
+ }
+}
+Bs_Item_M_S_44: {
+ NeedCount: 2
+ SourceItems: {
+ Fang_Of_Garm: 120
+ Zelunium: 10
+ }
+}
+Bs_Sha_M_S_1: {
+ NeedCount: 2
+ SourceItems: {
+ Pocket_Watch: 50
+ Shadowdecon: 10
+ }
+}
+Bs_Sha_M_S_17: {
+ NeedCount: 2
+ SourceItems: {
+ Osiris_Doll: 10
+ Shadowdecon: 10
+ }
+}
+Bs_Sha_M_S_18: {
+ NeedCount: 2
+ SourceItems: {
+ Baphomet_Doll: 10
+ Shadowdecon: 10
+ }
+}
+Bs_Sha_M_S_19: {
+ NeedCount: 2
+ SourceItems: {
+ Shine_Spear_Blade: 50
+ Shadowdecon: 10
+ }
+}
+Bs_Sha_M_S_20: {
+ NeedCount: 2
+ SourceItems: {
+ Lokis_Whispers: 50
+ Shadowdecon: 10
+ }
+}
+Bs_Item_M_S_4: {
+ NeedCount: 2
+ SourceItems: {
+ Baphomet_Doll: 30
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_6: {
+ NeedCount: 2
+ SourceItems: {
+ Tiger_Footskin: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_7: {
+ NeedCount: 2
+ SourceItems: {
+ White_Snake_Tear: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_12: {
+ NeedCount: 2
+ SourceItems: {
+ Gemstone: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_13: {
+ NeedCount: 2
+ SourceItems: {
+ Young_Twig: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_15: {
+ NeedCount: 2
+ SourceItems: {
+ Taegeuk_Plate: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_28: {
+ NeedCount: 2
+ SourceItems: {
+ Ice_Scale: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_29: {
+ NeedCount: 2
+ SourceItems: {
+ Gemstone: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_31: {
+ NeedCount: 2
+ SourceItems: {
+ Dark_Red_Scale: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_32: {
+ NeedCount: 2
+ SourceItems: {
+ Mothers_Nightmare: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_33: {
+ NeedCount: 2
+ SourceItems: {
+ Broken_Crown: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_36: {
+ NeedCount: 2
+ SourceItems: {
+ Tiger_Footskin: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_37: {
+ NeedCount: 2
+ SourceItems: {
+ Lokis_Whispers: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_38: {
+ NeedCount: 2
+ SourceItems: {
+ Pocket_Watch: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_39: {
+ NeedCount: 2
+ SourceItems: {
+ Tutankhamens_Mask: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_40: {
+ NeedCount: 2
+ SourceItems: {
+ Broken_Pharaoh_Symbol: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_45: {
+ NeedCount: 2
+ SourceItems: {
+ Dark_Red_Scale: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_46: {
+ NeedCount: 2
+ SourceItems: {
+ Scale_Of_Red_Dragon: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_47: {
+ NeedCount: 2
+ SourceItems: {
+ Konts_Letter: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_48: {
+ NeedCount: 2
+ SourceItems: {
+ Osiris_Doll: 30
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_49: {
+ NeedCount: 2
+ SourceItems: {
+ Token_of_OrcGeneral: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_50: {
+ NeedCount: 2
+ SourceItems: {
+ Young_Twig: 150
+ Zelunium: 20
+ }
+}
+Bs_Sha_M_S_2: {
+ NeedCount: 2
+ SourceItems: {
+ Scale_Of_Red_Dragon: 50
+ Shadowdecon: 20
+ }
+}
+Bs_Sha_M_S_5: {
+ NeedCount: 2
+ SourceItems: {
+ Queen_Wing_Piece: 50
+ Shadowdecon: 20
+ }
+}
+Bs_Sha_M_S_6: {
+ NeedCount: 2
+ SourceItems: {
+ Tiger_Footskin: 50
+ Shadowdecon: 20
+ }
+}
+Bs_Sha_M_S_7: {
+ NeedCount: 2
+ SourceItems: {
+ Boroken_Shiled_Piece: 50
+ Shadowdecon: 20
+ }
+}
+Bs_Sha_M_S_8: {
+ NeedCount: 2
+ SourceItems: {
+ Will_Of_Darkness_: 50
+ Shadowdecon: 20
+ }
+}
+Bs_Sha_M_S_13: {
+ NeedCount: 2
+ SourceItems: {
+ Voucher_Of_Orcish_Hero: 50
+ Shadowdecon: 20
+ }
+}
+Bs_Sha_M_S_15: {
+ NeedCount: 2
+ SourceItems: {
+ Token_of_OrcGeneral: 50
+ Shadowdecon: 20
+ }
+}
+Bs_Sha_M_S_16: {
+ NeedCount: 2
+ SourceItems: {
+ Mothers_Nightmare: 50
+ Shadowdecon: 20
+ }
+}
+Bs_Sha_M_S_23: {
+ NeedCount: 2
+ SourceItems: {
+ // 6649: 50
+ Shadowdecon: 20
+ }
+}
+Bs_Item_M_S_5: {
+ NeedCount: 2
+ SourceItems: {
+ Osiris_Doll: 30
+ Zelunium: 25
+ }
+}
+Bs_Item_M_S_9: {
+ NeedCount: 2
+ SourceItems: {
+ Valhalla_Flower: 150
+ Zelunium: 25
+ }
+}
+Bs_Item_M_S_14: {
+ NeedCount: 2
+ SourceItems: {
+ Dark_Red_Scale: 150
+ Zelunium: 25
+ }
+}
+Bs_Item_M_S_16: {
+ NeedCount: 2
+ SourceItems: {
+ Will_Of_Darkness_: 150
+ Zelunium: 25
+ }
+}
+Bs_Item_M_S_17: {
+ NeedCount: 2
+ SourceItems: {
+ Mothers_Nightmare: 150
+ Zelunium: 25
+ }
+}
+Bs_Item_M_S_19: {
+ NeedCount: 2
+ SourceItems: {
+ Ice_Scale: 150
+ Zelunium: 25
+ }
+}
+Bs_Item_M_S_27: {
+ NeedCount: 2
+ SourceItems: {
+ Broken_Crown: 150
+ Zelunium: 25
+ }
+}
+Bs_Item_M_S_35: {
+ NeedCount: 2
+ SourceItems: {
+ Will_Of_Darkness_: 150
+ Zelunium: 25
+ }
+}
+Bs_Sha_M_S_9: {
+ NeedCount: 2
+ SourceItems: {
+ Young_Twig: 50
+ Shadowdecon: 25
+ }
+}
+Bs_Sha_M_S_10: {
+ NeedCount: 2
+ SourceItems: {
+ Tiger_Footskin: 50
+ Shadowdecon: 25
+ }
+}
+Bs_Sha_M_S_11: {
+ NeedCount: 2
+ SourceItems: {
+ Will_Of_Darkness_: 50
+ Shadowdecon: 25
+ }
+}
+Bs_Sha_M_S_21: {
+ NeedCount: 2
+ SourceItems: {
+ Shine_Spear_Blade: 10
+ Shadowdecon: 25
+ }
+}
+Bs_Sha_M_S_22: {
+ NeedCount: 2
+ SourceItems: {
+ Fang_Of_Garm: 50
+ Shadowdecon: 25
+ }
+}
+Bs_Item_M_S_1: {
+ NeedCount: 2
+ SourceItems: {
+ Valhalla_Flower: 300
+ Zelunium: 30
+ }
+}
+Bs_Item_M_S_3: {
+ NeedCount: 2
+ SourceItems: {
+ Broken_Crown: 150
+ Zelunium: 30
+ }
+}
+Bs_Item_M_S_18: {
+ NeedCount: 2
+ SourceItems: {
+ Rojerta_Piece: 150
+ Zelunium: 30
+ }
+}
+Bs_Item_M_S_20: {
+ NeedCount: 2
+ SourceItems: {
+ Lokis_Whispers: 200
+ Zelunium: 30
+ }
+}
+Bs_Item_M_S_21: {
+ NeedCount: 2
+ SourceItems: {
+ // 6649: 150
+ Zelunium: 30
+ }
+}
+Bs_Item_M_S_22: {
+ NeedCount: 2
+ SourceItems: {
+ Taegeuk_Plate: 150
+ Zelunium: 30
+ }
+}
+Bs_Item_M_S_23: {
+ NeedCount: 2
+ SourceItems: {
+ Fang_Of_Garm: 150
+ Zelunium: 30
+ }
+}
+Bs_Item_M_S_24: {
+ NeedCount: 2
+ SourceItems: {
+ Gemstone: 150
+ Zelunium: 30
+ }
+}
+Bs_Item_M_S_25: {
+ NeedCount: 2
+ SourceItems: {
+ Young_Twig: 150
+ Zelunium: 30
+ }
+}
+Bs_Item_M_S_26: {
+ NeedCount: 2
+ SourceItems: {
+ Boroken_Shiled_Piece: 150
+ Zelunium: 30
+ }
+}
+Bs_Item_M_S_30: {
+ NeedCount: 2
+ SourceItems: {
+ Shine_Spear_Blade: 50
+ Zelunium: 30
+ }
+}
+Bs_Sha_M_S_3: {
+ NeedCount: 2
+ SourceItems: {
+ Piece_Of_Bone_Armor: 50
+ Shadowdecon: 30
+ }
+}
+Bs_Sha_M_S_4: {
+ NeedCount: 2
+ SourceItems: {
+ Konts_Letter: 50
+ Shadowdecon: 30
+ }
+}
+Bs_Sha_M_S_12: {
+ NeedCount: 2
+ SourceItems: {
+ Taegeuk_Plate: 50
+ Shadowdecon: 30
+ }
+}
+Bs_Sha_M_S_14: {
+ NeedCount: 2
+ SourceItems: {
+ Lokis_Whispers: 50
+ Shadowdecon: 30
+ }
+}
+Bs_Sha_M_S_24: {
+ NeedCount: 2
+ SourceItems: {
+ Pocket_Watch: 150
+ Shadowdecon: 25
+ }
+}
+Bs_Sha_M_S_25: {
+ NeedCount: 2
+ SourceItems: {
+ Gemstone: 150
+ Shadowdecon: 25
+ }
+}
+Bs_Item_M_S_51: {
+ NeedCount: 2
+ SourceItems: {
+ Queen_Wing_Piece: 150
+ Zelunium: 20
+ }
+}
+EnchantStone_Recipe_9m: {
+ NeedCount: 1
+ SourceItems: {
+ // 19959: 1
+ // 19960: 1
+ // 20033: 1
+ // 20171: 1
+ // 20482: 1
+ // 31139: 1
+ Rabbit_Hopping: 1
+ C_Ghost_Holiday: 1
+ C_Sorcerer_Hood: 1
+ C_Luwmin_Ice: 1
+ C_Astro_Circle: 1
+ C_Baby_Penguin: 1
+ C_Fluffy_Heart_Earmuffs: 1
+ C_Blessing_Sky_Lantern: 1
+ C_Flying_Drone: 1
+ C_Bouquet_Hat: 1
+ C_Poring_Muffler: 1
+ C_Elephangel_TH: 1
+ C_Happy_Rabbit_Ribbon: 1
+ C_Autumn_Headband: 1
+ }
+}
+IDTest_Special: {
+ NeedCount: 3
+ SourceItems: {
+ Jellopy: 1
+ Fluff: 1
+ Shell: 1
+ }
+}
+PerfectSize_Mix: {
+ NeedCount: 3
+ NeedRefineMin: 7
+ SourceItems: {
+ // 24072: 1
+ // 24073: 1
+ // 24074: 1
+ // 24075: 1
+ // 24076: 1
+ // 24077: 1
+ }
+}
+MagicPiercing_Mix: {
+ NeedCount: 2
+ NeedRefineMin: 7
+ SourceItems: {
+ // 24170: 1
+ // 24171: 1
+ // 24172: 1
+ // 24173: 1
+ // 24174: 1
+ // 24175: 1
+ // 24176: 1
+ // 24177: 1
+ // 24178: 1
+ // 24179: 1
+ }
+}
+Piercing_Mix: {
+ NeedCount: 2
+ NeedRefineMin: 7
+ SourceItems: {
+ // 24156: 1
+ // 24157: 1
+ // 24158: 1
+ // 24159: 1
+ // 24160: 1
+ // 24161: 1
+ // 24162: 1
+ // 24163: 1
+ // 24164: 1
+ // 24165: 1
+ }
+}
+Hasty_Mix: {
+ NeedCount: 2
+ NeedRefineMin: 7
+ SourceItems: {
+ // 24196: 1
+ // 24197: 1
+ // 24320: 1
+ }
+}
+EnchantStone_Recipe_4m: {
+ NeedCount: 1
+ SourceItems: {
+ // 19990: 1
+ // 20098: 1
+ // 20174: 1
+ // 20175: 1
+ // 20257: 1
+ // 20395: 1
+ // 20486: 1
+ C_Full_BloomCherry_Tree: 1
+ // 31139: 1
+ Rabbit_Hopping: 1
+ C_Cat_Ears_Punkish: 1
+ C_Snow_Bear_Food: 1
+ C_CatCoffeeCup_TW: 1
+ C_Panda_Rabbit: 1
+ C_Princess_Ribbon_Crown: 1
+ C_Poporing_Muffler: 1
+ C_Kishu_Inu: 1
+ C_Autumn_Headband: 1
+ C_Fox: 1
+ C_HeartOfCat_TW: 1
+ C_LunaticMuffler: 1
+ }
+}
diff --git a/db/pre-re/mob_db.conf b/db/pre-re/mob_db.conf
index 553593cea..565167e95 100644
--- a/db/pre-re/mob_db.conf
+++ b/db/pre-re/mob_db.conf
@@ -93,6 +93,7 @@ mob_db: (
AegisName: (chance, "Option Drop Group")
// ...
}
+ DamageTakenRate: damage taken rate (int, defaults to 100)
},
**************************************************************************/
diff --git a/db/quest_db.conf b/db/quest_db.conf
index 49952d94b..516c2e70a 100644
--- a/db/quest_db.conf
+++ b/db/quest_db.conf
@@ -3614,6 +3614,10 @@ quest_db: (
},
// 2012 Headgear Quests
{
+ Id: 5160
+ Name: "Library Mistake"
+},
+{
Id: 5161
Name: "Low Level collection request[Stand by]"
TimeLimit: 86400
diff --git a/db/re/item_chain.conf b/db/re/item_chain.conf
index a2e4efff4..cdc92d92c 100644
--- a/db/re/item_chain.conf
+++ b/db/re/item_chain.conf
@@ -59,6 +59,12 @@ ITMCHAIN_ORE: {
Emperium: 5
}
+ITMCHAIN_SIEGFRIED: {
+ Token_Of_Siegfried: 1
+ F_Token_Of_Siegfried: 1
+ E_Token_Of_Siegfried: 1
+}
+
ITMCHAIN_GEM: {
Dark_Red_Jewel: 80
Violet_Jewel: 30
diff --git a/db/re/item_combo_db.conf b/db/re/item_combo_db.conf
new file mode 100644
index 000000000..66e553c32
--- /dev/null
+++ b/db/re/item_combo_db.conf
@@ -0,0 +1,3224 @@
+//================= Hercules Database =====================================
+//= _ _ _
+//= | | | | | |
+//= | |_| | ___ _ __ ___ _ _| | ___ ___
+//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __|
+//= | | | | __/ | | (__| |_| | | __/\__ \
+//= \_| |_/\___|_| \___|\__,_|_|\___||___/
+//================= License ===============================================
+//= This file is part of Hercules.
+//= http://herc.ws - http://github.com/HerculesWS/Hercules
+//=
+//= Copyright (C) 2019 Hercules Dev Team
+//=
+//= Hercules is free software: you can redistribute it and/or modify
+//= it under the terms of the GNU General Public License as published by
+//= the Free Software Foundation, either version 3 of the License, or
+//= (at your option) any later version.
+//=
+//= This program is distributed in the hope that it will be useful,
+//= but WITHOUT ANY WARRANTY; without even the implied warranty of
+//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+//= GNU General Public License for more details.
+//=
+//= You should have received a copy of the GNU General Public License
+//= along with this program. If not, see <http://www.gnu.org/licenses/>.
+//================= Description ===========================================
+// Configurations file for status effects
+//=========================================================================
+
+combo_db: (
+/**************************************************************************
+ ************* Entry structure ********************************************
+ **************************************************************************
+{
+ // ================ Mandatory fields ===============================
+ Items: ["item_list"] (string, array) list of items
+ Script: <"
+ Script
+ (it can be multi-line)
+ ">
+}
+**************************************************************************/
+{
+ Items: ["Dragon_Slayer", "Dragon_Breath"]
+ Script: <"
+ bonus2 bAddRace, RC_Dragon, 5;
+ ">
+},
+{
+ Items: ["Gladius", "Hoplite_Helmet"]
+ Script: <"
+ bonus bAtkRate, 3;
+ ">
+},
+{
+ Items: ["Gladius_", "Hoplite_Helmet"]
+ Script: <"
+ bonus bAtkRate, 3;
+ ">
+},
+{
+ Items: ["Gladius__", "Hoplite_Helmet"]
+ Script: <"
+ bonus bAtkRate, 3;
+ ">
+},
+{
+ Items: ["Krishna", "Assassin_Handcuffs"]
+ Script: <"
+ bonus bBaseAtk, 50;
+ bonus2 bSkillAtk, AS_SONICBLOW, 50;
+ bonus bFlee, -30;
+ ">
+},
+{
+ Items: ["Cakram", "Assassin_Handcuffs"]
+ Script: <"
+ bonus bCritAtkRate, 40;
+ bonus bCritical, 4;
+ bonus bMaxHPrate, -10;
+ ">
+},
+{
+ Items: ["Durga", "Whikebain_Suit"]
+ Script: <"
+ if (getequiprefinerycnt(EQI_HAND_R) > 6) {
+ autobonus2 "{ bonus bIgnoreDefRace,RC_NonBoss; }", 20, 3000, BF_WEAPON, "{}";
+ }
+ ">
+},
+{
+ Items: ["Shiver_Katar", "Mobster_Card"]
+ Script: <"
+ bonus bCritAtkRate, 5;
+ ">
+},
+{
+ Items: ["Shiver_Katar", "Sedora_Card"]
+ Script: <"
+ bonus bCritAtkRate, 5;
+ ">
+},
+{
+ Items: ["Giant_Axe", "Gigant_Helm"]
+ Script: <"
+ bonus2 bSkillAtk, WS_CARTTERMINATION, 15 + (getequiprefinerycnt(EQI_HAND_R) * 5);
+ ">
+},
+{
+ Items: ["Pike", "Hoplite_Helmet"]
+ Script: <"
+ bonus bAtkRate, 3;
+ ">
+},
+{
+ Items: ["Pike_", "Hoplite_Helmet"]
+ Script: <"
+ bonus bAtkRate, 3;
+ ">
+},
+{
+ Items: ["Pike__", "Hoplite_Helmet"]
+ Script: <"
+ bonus bAtkRate, 3;
+ ">
+},
+{
+ Items: ["Long_Horn", "Valkyrjas_Shield"]
+ Script: <"
+ bonus3 bAutoSpellWhenHit, HP_ASSUMPTIO, 2, 5;
+ ">
+},
+{
+ Items: ["Long_Horn", "Tournament_Shield"]
+ Script: <"
+ bonus2 bAddRace, RC_All, 4;
+ bonus bDef, 2;
+ ">
+},
+{
+ Items: ["Battle_Hook", "Tournament_Shield"]
+ Script: <"
+ bonus2 bAddRace, RC_All, 4;
+ bonus bDef, 2;
+ ">
+},
+{
+ Items: ["Hunting_Spear", "Tournament_Shield"]
+ Script: <"
+ bonus2 bAddRace, RC_All, 4;
+ bonus bDef, 2;
+ ">
+},
+{
+ Items: ["Long_Horn_M", "Valkyrjas_Shield"]
+ Script: <"
+ bonus3 bAutoSpellWhenHit, HP_ASSUMPTIO, 2, 5;
+ ">
+},
+{
+ Items: ["Imperial_Spear", "Imperial_Guard"]
+ Script: <"
+ bonus2 bSkillAtk, CR_GRANDCROSS, 10;
+ bonus2 bSkillAtk, LG_RAYOFGENESIS, 10;
+ ">
+},
+{
+ Items: ["Imperial_Spear", "Imperial_Guard", "Imperial_Feather", "Imperial_Ring"]
+ Script: <"
+ bonus2 bSkillUseSP, CR_GRANDCROSS, 30;
+ bonus2 bSkillUseSP, LG_SHIELDPRESS, 5;
+ bonus2 bSkillUseSP, LG_BANISHINGPOINT, 15;
+ bonus2 bSkillUseSP, LG_CANNONSPEAR, 10;
+ ">
+},
+{
+ Items: ["Imperial_Spear", "Imperial_Ring"]
+ Script: <"
+ bonus2 bSkillAtk, LG_CANNONSPEAR, 7 * (getequiprefinerycnt(EQI_HAND_L) / 2);
+ ">
+},
+{
+ Items: ["Staff_Of_Soul", "Spiritual_Ring"]
+ Script: <"
+ bonus bMatkRate, 6;
+ bonus bDex, 2;
+ bonus bVariableCastrate, -getequiprefinerycnt(EQI_HAND_R);
+ ">
+},
+{
+ Items: ["Staff_Of_Soul", "Spiritual_Ring_C"]
+ Script: <"
+ bonus bMatkRate, 6;
+ bonus bDex, 2;
+ bonus bVariableCastrate, -getequiprefinerycnt(EQI_HAND_R);
+ ">
+},
+{
+ Items: ["Wizardy_Staff", "Spiritual_Ring"]
+ Script: <"
+ bonus bMatkRate, 6;
+ bonus bDex, 2;
+ bonus bVariableCastrate, -getequiprefinerycnt(EQI_HAND_R);
+ ">
+},
+{
+ Items: ["Wizardy_Staff", "Spiritual_Ring_C"]
+ Script: <"
+ bonus bMatkRate, 6;
+ bonus bDex, 2;
+ bonus bVariableCastrate, -getequiprefinerycnt(EQI_HAND_R);
+ ">
+},
+{
+ Items: ["Gae_Bolg", "Dragon_Breath"]
+ Script: <"
+ bonus2 bAddRace, RC_Dragon, 5;
+ ">
+},
+{
+ Items: ["Spectral_Spear", "Red_Silk_Seal"]
+ Script: <"
+ bonus2 bResEff, Eff_Confusion, 9500;
+ ">
+},
+{
+ Items: ["Spectral_Spear_", "Red_Silk_Seal"]
+ Script: <"
+ bonus2 bResEff, Eff_Confusion, 9500;
+ ">
+},
+{
+ Items: ["Encyclopedia", "Encyclopedia_Revision"]
+ Script: <"
+ bonus bAspdRate, getequiprefinerycnt(EQI_HAND_R);
+ ">
+},
+{
+ Items: ["Hollgrehenn_Hammer", "B_Harword_Card"]
+ Script: <"
+ bonus bBreakArmorRate, 900;
+ bonus bBreakWeaponRate, 900;
+ ">
+},
+{
+ Items: ["Principles_Of_Magic", "Librarian_Glove", "Pocket_Watch_"]
+ Script: <"
+ bonus bInt, 5;
+ bonus bMaxHP, 700;
+ bonus bAspdRate, 5;
+ ">
+},
+{
+ Items: ["Ancient_Magic", "Mage_Coat"]
+ Script: <"
+ bonus bMdef, 8;
+ bonus bMaxSPrate, 10;
+ bonus bInt, 4;
+ ">
+},
+{
+ Items: ["Ancient_Magic", "Mage_Coat_"]
+ Script: <"
+ bonus bMdef, 8;
+ bonus bMaxSPrate, 10;
+ bonus bInt, 4;
+ ">
+},
+{
+ Items: ["Ancient_Magic", "Librarian_Glove", "Pocket_Watch_"]
+ Script: <"
+ bonus bInt, 5;
+ bonus bMaxHP, 700;
+ bonus bAspdRate, 5;
+ ">
+},
+{
+ Items: ["Snake_Encyclopedia", "Snake_Card"]
+ Script: <"
+ bonus bAspdRate, 5;
+ ">
+},
+{
+ Items: ["Snake_Encyclopedia", "Side_Winder_Card"]
+ Script: <"
+ bonus bAspdRate, 5;
+ ">
+},
+{
+ Items: ["Snake_Encyclopedia", "Snake_Card", "Side_Winder_Card"]
+ Script: <"
+ bonus bAspd, 1;
+ ">
+},
+{
+ Items: ["Snake_Encyclopedia_", "Snake_Card"]
+ Script: <"
+ bonus bAspdRate, 5;
+ ">
+},
+{
+ Items: ["Snake_Encyclopedia_", "Side_Winder_Card"]
+ Script: <"
+ bonus bAspdRate, 5;
+ ">
+},
+{
+ Items: ["Snake_Encyclopedia_", "Snake_Card", "Side_Winder_Card"]
+ Script: <"
+ bonus bAspd, 1;
+ ">
+},
+{
+ Items: ["Bone_Wand", "Skull_Cap"]
+ Script: <"
+ bonus bMatk, 10 * getequiprefinerycnt(EQI_HAND_R);
+ bonus bVariableCastrate, -10;
+ ">
+},
+{
+ Items: ["Staff_Of_Wing", "Wing_Of_Eagle"]
+ Script: <"
+ bonus bSpeedRate, 25;
+ ">
+},
+{
+ Items: ["Survival_Rod_", "Clack_Of_Servival"]
+ Script: <"
+ bonus bMaxHP, 300;
+ bonus bMatkRate, getequiprefinerycnt(EQI_HAND_R) - 5;
+ if (getequiprefinerycnt(EQI_GARMENT) > 10) {
+ bonus2 bSubEle, Ele_Neutral, 30;
+ } else {
+ bonus2 bSubEle, Ele_Neutral, getequiprefinerycnt(EQI_GARMENT) * 3;
+ }
+ ">
+},
+{
+ Items: ["Survival_Rod_", "Cloak_Of_Survival_C"]
+ Script: <"
+ bonus bMatkRate, 5;
+ bonus2 bSubEle, Ele_Neutral, 25;
+ ">
+},
+{
+ Items: ["Survival_Rod_", "Survive_Circlet"]
+ Script: <"
+ bonus bMatk, getequiprefinerycnt(EQI_HAND_R) * 10;
+ if (getequiprefinerycnt(EQI_HAND_R) >= 10)
+ autobonus "{ bonus bVariableCastrate,-50; }", 50, 5000, BF_MAGIC, "{ specialeffect(EF_SUFFRAGIUM, AREA, playerattached()); }";
+ ">
+},
+{
+ Items: ["Survival_Rod2_", "Clack_Of_Servival"]
+ Script: <"
+ bonus bMaxHP, 300;
+ bonus bMatkRate, getequiprefinerycnt(EQI_HAND_R) - 5;
+ if (getequiprefinerycnt(EQI_GARMENT) > 10) {
+ bonus2 bSubEle, Ele_Neutral, 30;
+ } else {
+ bonus2 bSubEle, Ele_Neutral, getequiprefinerycnt(EQI_GARMENT) * 3;
+ }
+ ">
+},
+{
+ Items: ["Survival_Rod2_", "Cloak_Of_Survival_C"]
+ Script: <"
+ bonus bMatkRate, 5;
+ bonus2 bSubEle, Ele_Neutral, 25;
+ ">
+},
+{
+ Items: ["Healing_Staff", "All_Love_Guard"]
+ Script: <"
+ bonus bHealPower, getequiprefinerycnt(EQI_HAND_R);
+ ">
+},
+{
+ Items: ["Walking_Stick", "Magician_Hat"]
+ Script: <"
+ bonus bDex, 2;
+ bonus bInt, 2;
+ bonus bSPrecovRate, 5;
+ bonus bMatkRate, getequiprefinerycnt(EQI_HAND_R);
+ ">
+},
+{
+ Items: ["Holy_Stick", "Exorcism_Bible"]
+ Script: <"
+ bonus2 bSkillAtk, PR_MAGNUS, 20;
+ bonus3 bAutoSpellWhenHit, PR_TURNUNDEAD, 1, 20;
+ ">
+},
+{
+ Items: ["Holy_Stick", "All_Love_Guard"]
+ Script: <"
+ bonus bHealPower, getequiprefinerycnt(EQI_HAND_R) * 3;
+ ">
+},
+{
+ Items: ["Thorn_Staff", "Skull_Cap"]
+ Script: <"
+ bonus bMatk, 10 * getequiprefinerycnt(EQI_HAND_R);
+ bonus bVariableCastrate, -10;
+ ">
+},
+{
+ Items: ["Thorn_Staff", "Thornwood_Band"]
+ Script: <"
+ bonus bMatk, getequiprefinerycnt(EQI_HAND_R) * 10;
+ ">
+},
+{
+ Items: ["Rafini_Staff", "Lapine_Shield"]
+ Script: <"
+ if (getequiprefinerycnt(EQI_HAND_L) > 8) {
+ bonus bMatk, getequiprefinerycnt(EQI_HAND_R) * 15;
+ }
+ if (getequiprefinerycnt(EQI_HAND_R) > 9) {
+ bonus bMatk, 50;
+ bonus bVariableCastrate, -10;
+ }
+ ">
+},
+{
+ Items: ["Wand_Of_Affection", "Shoes_Of_Affection", "Shawl_Of_Affection", "Robe_Of_Affection"]
+ Script: <"
+ bonus bHealPower, 25;
+ ">
+},
+{
+ Items: ["Wand_Of_Affection2", "Shoes_Of_Affection", "Shawl_Of_Affection", "Robe_Of_Affection"]
+ Script: <"
+ bonus bHealPower, 45;
+ bonus3 bAutoSpellWhenHit, AB_SILENTIUM, 1, 10;
+ ">
+},
+{
+ Items: ["Bone_Wand_", "Skull_Cap"]
+ Script: <"
+ bonus bMatk, 10 * getequiprefinerycnt(EQI_HAND_R);
+ bonus bVariableCastrate, -10;
+ ">
+},
+{
+ Items: ["Hunter_Bow", "Hunting_Arrow"]
+ Script: <"
+ bonus bLongAtkRate, 50;
+ ">
+},
+{
+ Items: ["Luna_Bow", "Lunatic_Brooch"]
+ Script: <"
+ bonus bDex, 1;
+ bonus bMaxSP, 50;
+ bonus bSPrecovRate, 10;
+ ">
+},
+{
+ Items: ["Hunter_Bow_", "Hunting_Arrow"]
+ Script: <"
+ bonus bLongAtkRate, 50;
+ ">
+},
+{
+ Items: ["Burning_Bow", "Fire_Arrow"]
+ Script: <"
+ bonus bLongAtkRate, 25;
+ ">
+},
+{
+ Items: ["Frozen_Bow", "Crystal_Arrow"]
+ Script: <"
+ bonus bLongAtkRate, 25;
+ ">
+},
+{
+ Items: ["Earth_Bow", "Stone_Arrow"]
+ Script: <"
+ bonus bLongAtkRate, 25;
+ bonus2 bAddEff, Eff_Stone, 1000;
+ ">
+},
+{
+ Items: ["Gust_Bow", "Arrow_Of_Wind"]
+ Script: <"
+ bonus bLongAtkRate, 25;
+ bonus3 bAutoSpell, NJ_HUUJIN, 5, 100;
+ if (readparam(bInt) > 39)
+ bonus3 bAutoSpell, NJ_HUUJIN, 5, 200;
+ ">
+},
+{
+ Items: ["Orc_Archer_Bow", "Steel_Arrow"]
+ Script: <"
+ bonus bLongAtkRate, 50;
+ ">
+},
+{
+ Items: ["Cursed_Lyre", "Cursed_Star"]
+ Script: <"
+ bonus bAtk, 25;
+ bonus3 bAddEff, Eff_Curse, 200, ATF_WEAPON | ATF_LONG | ATF_TARGET;
+ ">
+},
+{
+ Items: ["Elven_Bow", "Arrow_Of_Elf"]
+ Script: <"
+ bonus bLongAtkRate, 50;
+ ">
+},
+{
+ Items: ["Incisive_Arrow", "Little_Fhat"]
+ Script: <"
+ bonus bCritAtkRate, 5;
+ ">
+},
+{
+ Items: ["Siege_Arrow_S", "Velum_CrossBow"]
+ Script: <"
+ bonus bLongAtkRate, 70;
+ ">
+},
+{
+ Items: ["Siege_Arrow_A", "Velum_CrossBow"]
+ Script: <"
+ bonus bLongAtkRate, 40;
+ ">
+},
+{
+ Items: ["Ukulele_Of_Newoz", "Winged_Ring_Of_Newoz"]
+ Script: <"
+ bonus2 bSkillAtk, CG_ARROWVULCAN, 200;
+ bonus2 bSkillUseSP, CG_ARROWVULCAN, 20;
+ ">
+},
+{
+ Items: ["Floral_Mic_Of_Igu", "Floral_Bracelet_Of_Igu"]
+ Script: <"
+ bonus2 bSkillAtk, CG_ARROWVULCAN, 200;
+ ">
+},
+{
+ Items: ["Divine_Cross", "Spiritual_Ring"]
+ Script: <"
+ bonus bMatkRate, 10;
+ bonus bDex, 2;
+ bonus2 bSubRace, RC_Demon, 10;
+ bonus2 bSubRace, RC_Undead, 10;
+ ">
+},
+{
+ Items: ["Divine_Cross", "Spiritual_Ring_C"]
+ Script: <"
+ bonus bMatkRate, 10;
+ bonus bDex, 2;
+ bonus2 bSubRace, RC_Demon, 10;
+ bonus2 bSubRace, RC_Undead, 10;
+ ">
+},
+{
+ Items: ["Golden_Rod_Staff", "Golden_Rod_Shoes", "Golden_Rod_Orb", "Golden_Rod_Robe"]
+ Script: <"
+ bonus2 bMagicAtkEle, Ele_Wind, 40;
+ bonus2 bMagicAtkEle, Ele_Earth, -30;
+ bonus2 bSubEle, Ele_Earth, -50;
+ ">
+},
+{
+ Items: ["Aqua_Staff", "Aqua_Shoes", "Aqua_Orb", "Aqua_Robe"]
+ Script: <"
+ bonus2 bMagicAtkEle, Ele_Water, 40;
+ bonus2 bMagicAtkEle, Ele_Wind, -30;
+ bonus2 bSubEle, Ele_Wind, -50;
+ ">
+},
+{
+ Items: ["Crimson_Staff", "Crimson_Shoes", "Crimson_Orb", "Crimson_Robe"]
+ Script: <"
+ bonus2 bMagicAtkEle, Ele_Fire, 40;
+ bonus2 bMagicAtkEle, Ele_Water, -30;
+ bonus2 bSubEle, Ele_Water, -50;
+ ">
+},
+{
+ Items: ["Forest_Staff", "Forest_Shoes", "Forest_Orb", "Forest_Robe"]
+ Script: <"
+ bonus2 bMagicAtkEle, Ele_Earth, 40;
+ bonus2 bMagicAtkEle, Ele_Fire, -30;
+ bonus2 bSubEle, Ele_Fire, -50;
+ ">
+},
+{
+ Items: ["Golden_Rod_Staff2", "Golden_Rod_Shoes", "Golden_Rod_Orb", "Golden_Rod_Robe"]
+ Script: <"
+ bonus2 bMagicAtkEle, Ele_Wind, 60;
+ bonus2 bMagicAtkEle, Ele_Earth, -60;
+ bonus2 bSubEle, Ele_Earth, -50;
+ ">
+},
+{
+ Items: ["Aqua_Staff2", "Aqua_Shoes", "Aqua_Orb", "Aqua_Robe"]
+ Script: <"
+ bonus2 bMagicAtkEle, Ele_Water, 60;
+ bonus2 bMagicAtkEle, Ele_Wind, -60;
+ bonus2 bSubEle, Ele_Wind, -50;
+ ">
+},
+{
+ Items: ["Crimson_Staff2", "Crimson_Shoes", "Crimson_Orb", "Crimson_Robe"]
+ Script: <"
+ bonus2 bMagicAtkEle, Ele_Fire, 60;
+ bonus2 bMagicAtkEle, Ele_Water, -60;
+ bonus2 bSubEle, Ele_Water, -50;
+ ">
+},
+{
+ Items: ["Forest_Staff2", "Forest_Shoes", "Forest_Orb", "Forest_Robe"]
+ Script: <"
+ bonus2 bMagicAtkEle, Ele_Earth, 60;
+ bonus2 bMagicAtkEle, Ele_Fire, -60;
+ bonus2 bSubEle, Ele_Fire, -50;
+ ">
+},
+{
+ Items: ["Memorize_Book", "Pocket_Watch_", "One_Eyed_Glass"]
+ Script: <"
+ bonus bHPrecovRate, 15;
+ bonus bSPrecovRate, 15;
+ bonus bMatkRate, 7;
+ ">
+},
+{
+ Items: ["Stone_Buckler", "Odins_Blessing", "Magni_Cap"]
+ Script: <"
+ bonus bStr, 2;
+ bonus bDef, 5;
+ bonus bMdef, 5;
+ if (BaseClass == Job_Swordman) bonus bDef, 6;
+ ">
+},
+{
+ Items: ["Valkyrjas_Shield", "Odins_Blessing", "Fricca_Circlet"]
+ Script: <"
+ bonus bDef, 2 - getequiprefinerycnt(EQI_HAND_L, EQI_HEAD_TOP);
+ bonus bMdef, 5 + getequiprefinerycnt(EQI_HAND_L, EQI_HEAD_TOP);
+ ">
+},
+{
+ Items: ["Angels_Safeguard", "Angels_Protection", "Angels_Arrival", "Angels_Warmth", "Kiss_Of_Angel"]
+ Script: <"
+ bonus bMaxHP, 900;
+ bonus bMaxSP, 100;
+ bonus3 bAutoSpellWhenHit, HP_ASSUMPTIO, 1, 30;
+ ">
+},
+{
+ Items: ["Memorize_Book_", "Pocket_Watch_", "One_Eyed_Glass"]
+ Script: <"
+ bonus bHPrecovRate, 15;
+ bonus bSPrecovRate, 15;
+ bonus bMatkRate, 7;
+ ">
+},
+{
+ Items: ["Orleans_Server", "Orleans_Glove"]
+ Script: <"
+ bonus bVariableCastrate, -10;
+ ">
+},
+{
+ Items: ["Orleans_Server", "Orleans_Necklace"]
+ Script: <"
+ bonus bMatk, getrefine() * 2;
+ ">
+},
+{
+ Items: ["Thorny_Buckler", "Bison_Horn"]
+ Script: <"
+ bonus bAspdRate, 10;
+ bonus bShortWeaponDamageReturn, 5;
+ ">
+},
+{
+ Items: ["Strong_Shield", "Hoplite_Helmet"]
+ Script: <"
+ bonus bDef, 2;
+ ">
+},
+{
+ Items: ["Shadow_Guard", "Shadow_Walk"]
+ Script: <"
+ bonus2 bAddEff, Eff_Blind, 500;
+ autobonus "{ bonus bFlee,20; }", 200, 10000, BF_WEAPON, "{ specialeffect(EF_INCAGILITY, AREA, playerattached()); }";
+ ">
+},
+{
+ Items: ["Valkyrjas_Shield_C", "Odins_Blessing", "Fricca_Circlet"]
+ Script: <"
+ bonus bDef, 2 - getequiprefinerycnt(EQI_HAND_L, EQI_HEAD_TOP);
+ bonus bMdef, 5 + getequiprefinerycnt(EQI_HAND_L, EQI_HEAD_TOP);
+ ">
+},
+{
+ Items: ["Imperial_Guard", "Imperial_Ring"]
+ Script: <"
+ if (getequiprefinerycnt(EQI_HAND_L) > 5) {
+ bonus2 bSkillAtk, LG_SHIELDPRESS, (getequiprefinerycnt(EQI_HAND_L) * 8) - 40;
+ }
+ ">
+},
+{
+ Items: ["Insecticide", "Super_Ora_Ora"]
+ Script: <"
+ bonus2 bAddRaceTolerance, RC_Insect, 10;
+ if (getequiprefinerycnt(EQI_HAND_L) > 7) {
+ bonus2 bMagicAddRace, RC_Insect, 4;
+ bonus2 bAddRaceTolerance, RC_Insect, 20;
+ }
+ ">
+},
+{
+ Items: ["Giant_Shield", "Gigant_Helm"]
+ Script: <"
+ bonus2 bSkillAtk, WS_CARTTERMINATION, 15 + (getequiprefinerycnt(EQI_HAND_R) * 5);
+ ">
+},
+{
+ Items: ["Kalasak", "Bangungot_Boots", "Buwaya_Cloth", "Bakonawa_Armor"]
+ Script: <"
+ bonus bMaxHPrate, 20;
+ bonus bMaxSPrate, 10;
+ ">
+},
+{
+ Items: ["Fox_Armguard", "Special_Ninja_Suit"]
+ Script: <"
+ bonus bAgi, 2;
+ ">
+},
+{
+ Items: ["Fox_Armguard", "Special_Ninja_Suit_"]
+ Script: <"
+ bonus bAgi, 2;
+ ">
+},
+{
+ Items: ["Crescent_Armguard", "Tenebris_Latitantes"]
+ Script: <"
+ bonus bFlee, 10;
+ bonus bFlee2, 10;
+ ">
+},
+{
+ Items: ["Impr_Angels_Safeguard", "Im_Angels_Protection", "Improved_Kiss_Of_Angel", "Impr_Angels_Warmth", "Impr_Angels_Arrival"]
+ Script: <"
+ bonus(bMaxHP, 900);
+ bonus(bMaxSP, 100);
+ bonus3(bAutoSpellWhenHit, HP_ASSUMPTIO, 1, 30);
+ ">
+},
+{
+ Items: ["Lapine_Shield", "KarduiEar"]
+ Script: <"
+ if (!isequipped(Fallen_Bishop_Card)) {
+ if (getequiprefinerycnt(EQI_HAND_L) > 6) {
+ bonus2 bSkillCooldown, WL_COMET, -20000;
+ }
+ if (getequiprefinerycnt(EQI_HAND_L) > 9) {
+ bonus2 bSkillCooldown, WL_COMET, -20000;
+ }
+ }
+ ">
+},
+{
+ Items: ["Angelic_Chain", "Bell_Pigeon"]
+ Script: <"
+ bonus2 bExpAddRace, RC_All, 5;
+ ">
+},
+{
+ Items: ["Centimental_Flower", "Persika"]
+ Script: <"
+ bonus bMaxSP, 30;
+ bonus bInt, 1;
+ ">
+},
+{
+ Items: ["Centimental_Flower", "Ancient_Elven_Ear"]
+ Script: <"
+ bonus bMatkRate, 1;
+ ">
+},
+{
+ Items: ["Centimental_Flower", "Black_Cat_Hat"]
+ Script: <"
+ bonus bAllStats, 1;
+ ">
+},
+{
+ Items: ["Centimental_Leaf", "Persika"]
+ Script: <"
+ bonus bLuk, 1;
+ bonus bFlee, 2;
+ ">
+},
+{
+ Items: ["Centimental_Leaf", "Ancient_Elven_Ear"]
+ Script: <"
+ bonus bAtkRate, 1;
+ ">
+},
+{
+ Items: ["Centimental_Leaf", "Black_Cat_Hat"]
+ Script: <"
+ bonus bAllStats, 1;
+ ">
+},
+{
+ Items: ["Mr_Smile", "Gloomy_Pumpkin_Hat"]
+ Script: <"
+ bonus2 bAddMonsterDropItem, 12192, 20;
+ ">
+},
+{
+ Items: ["Phantom_Of_Opera", "Gloomy_Pumpkin_Hat"]
+ Script: <"
+ bonus bFlee, 10;
+ ">
+},
+{
+ Items: ["Impr_Angels_Safeguard", "Im_Angels_Protection"]
+ Script: <"
+ bonus bAllStats, 2;
+ ">
+},
+{
+ Items: ["Elven_Ears", "Skull_Cap"]
+ Script: <"
+ bonus bUseSPrate, -3;
+ ">
+},
+{
+ Items: ["Padded_Armor", "Hyper_Changer"]
+ Script: <"
+ bonus bDef, 5;
+ bonus bMaxHP, 150;
+ ">
+},
+{
+ Items: ["Padded_Armor_", "Hyper_Changer"]
+ Script: <"
+ bonus bDef, 5;
+ bonus bMaxHP, 150;
+ ">
+},
+{
+ Items: ["Ninja_Suit", "Shinobis_Sash"]
+ Script: <"
+ bonus bUseSPrate, -20;
+ bonus bMaxHP, 300;
+ ">
+},
+{
+ Items: ["G_Strings", "Undershirt"]
+ Script: <"
+ bonus bAgi, 5;
+ bonus bFlee, 10;
+ ">
+},
+{
+ Items: ["G_Strings", "Undershirt_"]
+ Script: <"
+ bonus bAgi, 5;
+ bonus bFlee, 10;
+ ">
+},
+{
+ Items: ["Odins_Blessing", "Fricco_Shoes", "Falcon_Robe"]
+ Script: <"
+ bonus bAgi, 3;
+ bonus bMaxHPrate, 5;
+ bonus bMaxSPrate, 5;
+ ">
+},
+{
+ Items: ["Odins_Blessing", "Vidars_Boots", "Valis_Manteau"]
+ Script: <"
+ bonus bVit, 5;
+ bonus bHPrecovRate, 10;
+ bonus bSPrecovRate, 10;
+ ">
+},
+{
+ Items: ["Odins_Blessing", "Ulle_Cap"]
+ Script: <"
+ if (readparam(bDex) > 69)
+ bonus bUseSPrate, -10;
+ ">
+},
+{
+ Items: ["Odins_Blessing", "Ulle_Cap_I"]
+ Script: <"
+ if (readparam(bDex) > 69)
+ bonus bUseSPrate, -10;
+ ">
+},
+{
+ Items: ["Odins_Blessing", "Priest_Sword"]
+ Script: <"
+ bonus bMaxSP, 50;
+ bonus2 bSkillAtk, KN_BOWLINGBASH, 5;
+ ">
+},
+{
+ Items: ["Goibnes_Armor", "Goibnes_Combat_Boots", "Goibnes_Shoulder_Arms", "Goibnes_Helmet"]
+ Script: <"
+ 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;
+ ">
+},
+{
+ Items: ["Goibnes_Armor", "Goibnes_Combat_Boots_", "Goibnes_Shoulder_Arms_", "Goibnes_Helmet_"]
+ Script: <"
+ 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;
+ ">
+},
+{
+ Items: ["Valkyrie_Armor", "Valkyrie_Shoes", "Valkyrie_Manteau", "Valkyrie_Helm"]
+ Script: <"
+ bonus bAllStats, 1;
+ ">
+},
+{
+ Items: ["Dress_Of_Angel", "Angeling_Hairpin"]
+ Script: <"
+ bonus bLuk, 6;
+ bonus bFlee, 5;
+ bonus bInt, 2;
+ ">
+},
+{
+ Items: ["Ninja_Suit_", "Shinobis_Sash"]
+ Script: <"
+ bonus bUseSPrate, -20;
+ bonus bMaxHP, 300;
+ ">
+},
+{
+ Items: ["Orleans_Gown", "Orleans_Necklace"]
+ Script: <"
+ bonus bVariableCastrate, 15;
+ ">
+},
+{
+ Items: ["Freyja_Overcoat", "Freyja_Boots", "Freyja_Cape", "Freyja_Crown"]
+ Script: <"
+ bonus2 bSubRace, RC_DemiPlayer, 10;
+ bonus bMaxHPrate, 20;
+ bonus2 bResEff, Eff_Freeze, 10000;
+ skill WZ_FIREPILLAR, 10;
+ ">
+},
+{
+ Items: ["G_Strings_", "Undershirt"]
+ Script: <"
+ bonus bAgi, 5;
+ bonus bFlee, 10;
+ ">
+},
+{
+ Items: ["G_Strings_", "Undershirt_"]
+ Script: <"
+ bonus bAgi, 5;
+ bonus bFlee, 10;
+ ">
+},
+{
+ Items: ["Diabolus_Robe", "Diabolus_Ring"]
+ Script: <"
+ bonus2 bAddRace, RC_All, 3;
+ bonus bMatkRate, 3;
+ ">
+},
+{
+ Items: ["Diabolus_Armor", "Diabolus_Ring"]
+ Script: <"
+ bonus2 bAddRace, RC_All, 3;
+ bonus bMatkRate, 3;
+ ">
+},
+{
+ Items: ["Assaulter_Plate", "Battle_Greave", "Commander_Manteau"]
+ Script: <"
+ bonus2 bSubRace, RC_NonDemiPlayer, -300;
+ bonus bVit, 3;
+ bonus bMaxHPrate, 12;
+ bonus bHealPower2, 10;
+ bonus bAddItemHealRate, 10;
+ autobonus2 "{ bonus2 bHPRegenRate,600,1000; }", 5, 10000, BF_WEAPON, "{ specialeffect(EF_HEAL, AREA, playerattached()); }";
+ ">
+},
+{
+ Items: ["Elite_Engineer_Armor", "Battle_Greave", "Commander_Manteau"]
+ Script: <"
+ bonus2 bSubRace, RC_NonDemiPlayer, -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;
+ ">
+},
+{
+ Items: ["Assassin_Robe", "Battle_Greave", "Commander_Manteau"]
+ Script: <"
+ bonus2 bSubRace, RC_NonDemiPlayer, -300;
+ bonus bAgi, 3;
+ bonus bMaxHPrate, 12;
+ bonus bCritical, 5;
+ bonus bAspdRate, 5;
+ autobonus "{ bonus2 bHPRegenRate,300,1000; }", 10, 10000, BF_WEAPON, "{ specialeffect(EF_HEAL, AREA, playerattached()); }";
+ ">
+},
+{
+ Items: ["Warlock_Battle_Robe", "Combat_Boots", "Commander_Manteau_"]
+ Script: <"
+ bonus2 bSubRace, RC_NonDemiPlayer, -300;
+ bonus bInt, 3;
+ bonus bMaxHPrate, 12;
+ bonus2 bResEff, Eff_Stun, 2000;
+ autobonus2 "{ bonus bDefEle,Ele_Ghost; }", 30, 10000, BF_WEAPON, "{ specialeffect(EF_ENERGYCOAT, AREA, playerattached()); }";
+ ">
+},
+{
+ Items: ["Medic_Robe", "Combat_Boots", "Commander_Manteau_"]
+ Script: <"
+ bonus2 bSubRace, RC_NonDemiPlayer, -300;
+ bonus bInt, 3;
+ bonus bMaxHPrate, 12;
+ bonus2 bVariableCastrate, AL_HOLYLIGHT, -50;
+ bonus bHealPower, 6;
+ autobonus2 "{ bonus bDefEle,Ele_Ghost; }", 30, 10000, BF_WEAPON, "{ specialeffect(EF_ENERGYCOAT, AREA, playerattached()); }";
+ ">
+},
+{
+ Items: ["Elite_Archer_Suit", "Combat_Boots", "Commander_Manteau_"]
+ Script: <"
+ bonus2 bSubRace, RC_NonDemiPlayer, -300;
+ bonus bDex, 3;
+ bonus bMaxHPrate, 12;
+ bonus bLongAtkDef, 10;
+ bonus bDelayrate, -25;
+ ">
+},
+{
+ Items: ["Elite_Shooter_Suit", "Battle_Boots", "Sheriff_Manteau"]
+ Script: <"
+ bonus2 bSubRace, RC_NonDemiPlayer, -300;
+ bonus bDex, 3;
+ bonus bMaxHPrate, 12;
+ bonus bLongAtkDef, 10;
+ bonus bDelayrate, -25;
+ ">
+},
+{
+ Items: ["Sprint_Mail", "Sprint_Shoes", "Sprint_Ring"]
+ Script: <"
+ bonus bMaxHPrate, 7;
+ bonus bMaxSPrate, 7;
+ bonus bVariableCastrate, -3;
+ bonus bDelayrate, -15;
+ ">
+},
+{
+ Items: ["Improved_Tights", "Linen_Glove"]
+ Script: <"
+ bonus bFlee2, 5;
+ ">
+},
+{
+ Items: ["Krieger_Suit1", "Krieger_Shoes1", "Krieger_Muffler1"]
+ Script: <"
+ bonus2 bAddRace, RC_All, 5;
+ bonus bMatkRate, 5;
+ bonus2 bResEff, Eff_Freeze, 10000;
+ bonus2 bSkillHeal2, AM_POTIONPITCHER, 3;
+ bonus2 bSkillHeal2, AL_HEAL, 3;
+ bonus2 bSkillHeal2, PR_SANCTUARY, 3;
+ ">
+},
+{
+ Items: ["Dragon_Vest", "Dragon_Manteau"]
+ Script: <"
+ bonus bAgi, 5;
+ bonus bFlee, 15;
+ ">
+},
+{
+ Items: ["Cuffs", "Bloody_Iron_Ball"]
+ Script: <"
+ bonus bBaseAtk, 50;
+ bonus2 bAddDefClass, 1196, 20;
+ bonus2 bAddDefClass, 1197, 20;
+ ">
+},
+{
+ Items: ["Tidal_Shoes", "Wool_Scarf"]
+ Script: <"
+ bonus bHPrecovRate, 5;
+ bonus bMaxHPrate, 10;
+ ">
+},
+{
+ Items: ["Black_Leather_Boots", "Rider_Insignia"]
+ Script: <"
+ bonus bFlee, 10;
+ ">
+},
+{
+ Items: ["Black_Leather_Boots", "Rider_Insignia_"]
+ Script: <"
+ bonus bFlee, 10;
+ ">
+},
+{
+ Items: ["Black_Leather_Boots", "Rider_Insignia_M"]
+ Script: <"
+ bonus bFlee, 10;
+ ">
+},
+{
+ Items: ["Diabolus_Boots", "Diabolus_Manteau"]
+ Script: <"
+ bonus bMaxHPrate, 6;
+ ">
+},
+{
+ Items: ["Black_Leather_Boots_", "Rider_Insignia"]
+ Script: <"
+ bonus bFlee, 10;
+ ">
+},
+{
+ Items: ["Black_Leather_Boots_", "Rider_Insignia_"]
+ Script: <"
+ bonus bFlee, 10;
+ ">
+},
+{
+ Items: ["Black_Leather_Boots_", "Rider_Insignia_M"]
+ Script: <"
+ bonus bFlee, 10;
+ ">
+},
+{
+ Items: ["Beach_Sandal", "Beach_Manteau"]
+ Script: <"
+ bonus bFlee, 5;
+ ">
+},
+{
+ Items: ["Shoes_Of_Judgement", "Shawl_Of_Judgement", "Robe_Of_Judgement", "Mace_Of_Judgement"]
+ Script: <"
+ bonus2 bAddRace, RC_Undead, 15;
+ bonus2 bMagicAddRace, RC_Undead, 15;
+ bonus2 bSkillAtk, AB_ADORAMUS, 100;
+ ">
+},
+{
+ Items: ["Shoes_Of_Judgement", "Shawl_Of_Judgement", "Robe_Of_Judgement", "Mace_Of_Judgement2"]
+ Script: <"
+ bonus2 bAddRace, RC_Undead, 30;
+ bonus2 bMagicAddRace, RC_Undead, 30;
+ bonus2 bSkillAtk, AB_ADORAMUS, 200;
+ bonus bVariableCastrate, -50;
+ ">
+},
+{
+ Items: ["Ur_Greave", "Ur_Manteau", "Ur_Seal", "Ur_Plate"]
+ Script: <"
+ bonus bMaxHPrate, 14;
+ bonus2 bSkillAtk, RK_HUNDREDSPEAR, 50;
+ skill CR_AUTOGUARD, 1;
+ bonus bUseSPrate, 10;
+ bonus2 bSubEle, Ele_Neutral, 10;
+ ">
+},
+{
+ Items: ["Peuz_Greave", "Peuz_Manteau", "Peuz_Seal", "Peuz_Plate"]
+ Script: <"
+ bonus2 bAddRace, RC_All, 10;
+ bonus2 bSkillAtk, RK_SONICWAVE, 100;
+ bonus2 bSkillAtk, RK_WINDCUTTER, 100;
+ bonus3 bAutoSpell, RK_STORMBLAST, 1, 20;
+ autobonus3 "{ bonus bAspd,2; }", 1000, 10000, LK_CONCENTRATION, "{ specialeffect(EF_ENHANCE, AREA, playerattached()); }";
+ ">
+},
+{
+ Items: ["Sabah_Shoes", "Sabah_Hood", "Sabah_Ring", "Sabah_Cloth"]
+ Script: <"
+ bonus bCritical, 15;
+ bonus bFlee, 10;
+ bonus bCritAtkRate, 40;
+ bonus2 bSkillAtk, GC_CROSSIMPACT, 20;
+ bonus bUseSPrate, 10;
+ ">
+},
+{
+ Items: ["Nab_Shoes", "Nab_Hood", "Nab_Ring", "Nab_Cloth"]
+ Script: <"
+ bonus2 bAddRace, RC_All, 10;
+ bonus bMatkRate, 10;
+ if (readparam(bStr) > 119) {
+ bonus bBaseAtk, 30;
+ }
+ bonus3 bAutoSpell, ASC_BREAKER, getskilllv(ASC_BREAKER), 10;
+ bonus bCritical, -20;
+ ">
+},
+{
+ Items: ["White_Wing_Boots", "White_Wing_Manteau", "White_Wing_Brooch", "White_Wing_Suits"]
+ Script: <"
+ bonus bAspd, 2;
+ bonus bLongAtkRate, 30;
+ bonus3 bAutoSpell, AC_DOUBLE, 3, 10;
+ bonus2 bSkillAtk, RA_ARROWSTORM, 50;
+ ">
+},
+{
+ Items: ["Black_Wing_Boots", "Black_Wing_Manteau", "Black_wing_Brooch", "Black_Wing_Suits"]
+ Script: <"
+ bonus bMaxHPrate, 15;
+ bonus2 bSkillAtk, RA_CLUSTERBOMB, 20;
+ bonus bFlee2, 20;
+ bonus bLongAtkRate, -30;
+ bonus bAspd, -7;
+ ">
+},
+{
+ Items: ["Siege_Greave", "Siege_Manteau", "Siege_Plate"]
+ Script: <"
+ bonus bVit, 5;
+ bonus2 bSubRace, RC_DemiPlayer, 15;
+ ">
+},
+{
+ Items: ["Siege_Boots", "Siege_Manteau", "Siege_Suits"]
+ Script: <"
+ bonus bDex, 5;
+ bonus2 bSubRace, RC_DemiPlayer, 15;
+ ">
+},
+{
+ Items: ["Siege_Shoes", "Siege_Muffler", "Siege_Robe"]
+ Script: <"
+ bonus bInt, 5;
+ bonus bMdef, 10;
+ bonus2 bSubRace, RC_DemiPlayer, 15;
+ ">
+},
+{
+ Items: ["Morpheuss_Shawl", "Morpheuss_Ring", "Morpheuss_Armlet", "Morpheuss_Hood"]
+ Script: <"
+ bonus bInt, 5;
+ bonus bMdef, 11;
+ bonus bMaxSPrate, 20;
+ bonus bNoCastCancel, 0;
+ bonus bVariableCastrate, 25;
+ ">
+},
+{
+ Items: ["Morriganes_Manteau", "Morriganes_Belt", "Morriganes_Pendant", "Morriganes_Helm"]
+ Script: <"
+ bonus bStr, 2;
+ bonus bLuk, 9;
+ bonus bCritical, 13;
+ bonus bBaseAtk, 18;
+ bonus bFlee2, 13;
+ ">
+},
+{
+ Items: ["Morriganes_Manteau", "Morriganes_Belt_", "Morriganes_Pendant_", "Morriganes_Helm_"]
+ Script: <"
+ bonus bStr, 2;
+ bonus bLuk, 9;
+ bonus bCritical, 13;
+ bonus bBaseAtk, 18;
+ bonus bFlee2, 13;
+ ">
+},
+{
+ Items: ["Dragon_Breath", "Dragon_Killer"]
+ Script: <"
+ bonus2 bAddRace, RC_Dragon, 5;
+ ">
+},
+{
+ Items: ["Scarlet_Poncho", "Critical_Ring"]
+ Script: <"
+ bonus bCritAtkRate, 5;
+ bonus bCritical, 10;
+ if (getequiprefinerycnt(EQI_GARMENT) >= 5) {
+ bonus bCritAtkRate, 3;
+ }
+ if (getequiprefinerycnt(EQI_GARMENT) >= 7) {
+ bonus bCritAtkRate, 4;
+ }
+ ">
+},
+{
+ Items: ["Scarlet_Poncho", "Rose_Cascade"]
+ Script: <"
+ bonus bUseSPrate, -5;
+ ">
+},
+{
+ Items: ["Clip", "Spiritual_Ring"]
+ Script: <"
+ bonus2 bSkillAtk, AL_HEAL, 50;
+ bonus2 bSkillAtk, PR_MAGNUS, 30;
+ bonus bSPrecovRate, 9;
+ ">
+},
+{
+ Items: ["Clip", "Spiritual_Ring_C"]
+ Script: <"
+ bonus2 bSkillAtk, AL_HEAL, 50;
+ bonus2 bSkillAtk, PR_MAGNUS, 30;
+ bonus bSPrecovRate, 9;
+ ">
+},
+{
+ Items: ["Clip", "Spiritual_Ring_M"]
+ Script: <"
+ bonus2 bSkillAtk, AL_HEAL, 50;
+ bonus2 bSkillAtk, PR_MAGNUS, 30;
+ bonus bSPrecovRate, 9;
+ ">
+},
+{
+ Items: ["Rosary", "Spiritual_Ring"]
+ Script: <"
+ bonus2 bSkillAtk, AL_HEAL, 50;
+ bonus2 bSkillAtk, PR_MAGNUS, 30;
+ bonus bSPrecovRate, 9;
+ ">
+},
+{
+ Items: ["Rosary", "Spiritual_Ring_C"]
+ Script: <"
+ bonus2 bSkillAtk, AL_HEAL, 50;
+ bonus2 bSkillAtk, PR_MAGNUS, 30;
+ bonus bSPrecovRate, 9;
+ ">
+},
+{
+ Items: ["Rosary", "Spiritual_Ring_M"]
+ Script: <"
+ bonus2 bSkillAtk, AL_HEAL, 50;
+ bonus2 bSkillAtk, PR_MAGNUS, 30;
+ bonus bSPrecovRate, 9;
+ ">
+},
+{
+ Items: ["Safety_Ring", "Angel_Earing"]
+ Script: <"
+ bonus bMdef, 7;
+ bonus bDef, 7;
+ ">
+},
+{
+ Items: ["Critical_Ring", "Angel_Earing"]
+ Script: <"
+ bonus bCritical, 7;
+ ">
+},
+{
+ Items: ["Ring_Of_Rogue", "Cold_Heart"]
+ Script: <"
+ bonus2 bAddSize, Size_Medium, 8;
+ bonus bAspdRate, 3;
+ ">
+},
+{
+ Items: ["Ring_Of_Rogue", "Black_Cat"]
+ Script: <"
+ bonus2 bAddSize, Size_Large, 8;
+ bonus bHit, 3;
+ bonus bVariableCastrate, -3;
+ ">
+},
+{
+ Items: ["Rosary_", "Spiritual_Ring"]
+ Script: <"
+ bonus2 bSkillAtk, AL_HEAL, 50;
+ bonus2 bSkillAtk, PR_MAGNUS, 30;
+ bonus bSPrecovRate, 9;
+ ">
+},
+{
+ Items: ["Rosary_", "Spiritual_Ring_C"]
+ Script: <"
+ bonus2 bSkillAtk, AL_HEAL, 50;
+ bonus2 bSkillAtk, PR_MAGNUS, 30;
+ bonus bSPrecovRate, 9;
+ ">
+},
+{
+ Items: ["Rosary_", "Spiritual_Ring_M"]
+ Script: <"
+ bonus2 bSkillAtk, AL_HEAL, 50;
+ bonus2 bSkillAtk, PR_MAGNUS, 30;
+ bonus bSPrecovRate, 9;
+ ">
+},
+{
+ Items: ["Ring_Of_Flame_Lord", "Ring_Of_Resonance"]
+ Script: <"
+ bonus4 bAutoSpell, MO_EXTREMITYFIST, 1, 3, 1;
+ bonus3 bAutoSpell, PR_LEXAETERNA, 1, 20;
+ bonus3 bAutoSpell, AS_SONICBLOW, 5, 50;
+ bonus3 bAutoSpell, MO_INVESTIGATE, 5, 20;
+ bonus3 bAutoSpell, ASC_METEORASSAULT, 2, 50;
+ ">
+},
+{
+ Items: ["Ring_Of_Resonance", "Ring_Of_Flame_Lord_I"]
+ Script: <"
+ bonus4 bAutoSpell, MO_EXTREMITYFIST, 1, 3, 1;
+ bonus3 bAutoSpell, PR_LEXAETERNA, 1, 20;
+ bonus3 bAutoSpell, AS_SONICBLOW, 5, 50;
+ bonus3 bAutoSpell, MO_INVESTIGATE, 5, 20;
+ bonus3 bAutoSpell, ASC_METEORASSAULT, 2, 50;
+ ">
+},
+{
+ Items: ["Orleans_Glove", "Orleans_Necklace"]
+ Script: <"
+ bonus bMatk, 20;
+ ">
+},
+{
+ Items: ["Medal_Swordman", "Krieger_Ring1"]
+ Script: <"
+ bonus2 bAddRace, RC_All, 5;
+ bonus bMatkRate, 3;
+ bonus bHealPower, 5;
+ ">
+},
+{
+ Items: ["Medal_Thief", "Krieger_Ring1"]
+ Script: <"
+ bonus2 bAddRace, RC_All, 5;
+ bonus bMatkRate, 3;
+ bonus bHealPower, 5;
+ ">
+},
+{
+ Items: ["Medal_Acolyte", "Krieger_Ring1"]
+ Script: <"
+ bonus2 bAddRace, RC_All, 5;
+ bonus bMatkRate, 3;
+ bonus bHealPower, 5;
+ ">
+},
+{
+ Items: ["Medal_Mage", "Krieger_Ring1"]
+ Script: <"
+ bonus2 bAddRace, RC_All, 5;
+ bonus bMatkRate, 3;
+ bonus bHealPower, 5;
+ ">
+},
+{
+ Items: ["Medal_Archer", "Krieger_Ring1"]
+ Script: <"
+ bonus2 bAddRace, RC_All, 5;
+ bonus bMatkRate, 3;
+ bonus bHealPower, 5;
+ ">
+},
+{
+ Items: ["Medal_Merchant", "Krieger_Ring1"]
+ Script: <"
+ bonus2 bAddRace, RC_All, 5;
+ bonus bMatkRate, 3;
+ bonus bHealPower, 5;
+ ">
+},
+{
+ Items: ["Icarus_Wing", "Bowman_Scarf"]
+ Script: <"
+ bonus bUseSPrate, -25;
+ ">
+},
+{
+ Items: ["Medal_Gunner", "Krieger_Ring1"]
+ Script: <"
+ bonus2 bAddRace, RC_All, 5;
+ bonus bMatkRate, 3;
+ bonus bHealPower, 5;
+ ">
+},
+{
+ Items: ["Black_Cat", "Black_Wing"]
+ Script: <"
+ bonus bHit, 5;
+ bonus bMatk, 5;
+ bonus2 bSkillUseSP, SC_ENERVATION, 20;
+ bonus2 bSkillUseSP, SC_GROOMY, 20;
+ ">
+},
+{
+ Items: ["Shaman_Ring", "Shaman_Earing", "Shamans_Hair_Ornament"]
+ Script: <"
+ bonus bMaxHP, 300;
+ bonus bMatkRate, 5;
+ bonus2 bSubEle, Ele_Neutral, 5;
+ ">
+},
+{
+ Items: ["Dark_Knight_Belt", "Dark_Knight_Glove", "Dark_Knight_Mask"]
+ Script: <"
+ bonus bMatkRate, 10;
+ bonus bInt, 5;
+ bonus2 bSubRace, RC_Angel, 10;
+ ">
+},
+{
+ Items: ["Dark_Knight_Belt", "Dark_Knight_Glove", "Dark_Knight_MaskB"]
+ Script: <"
+ bonus bMatkRate, 10;
+ bonus bInt, 5;
+ bonus2 bSubRace, RC_Angel, 10;
+ ">
+},
+{
+ Items: ["Rune_Ring", "Rune_Suit", "Mana_Manteau", "Mana_Boots"]
+ Script: <"
+ bonus2 bExpAddRace, RC_All, 10;
+ ">
+},
+{
+ Items: ["Body_Power_Up_Ring", "Anti_Magic_Suit"]
+ Script: <"
+ bonus bAspdRate, 5;
+ ">
+},
+{
+ Items: ["Body_Power_Up_Ring", "Geffen_Mage_Robe"]
+ Script: <"
+ bonus bDelayrate, -5;
+ bonus2 bAddRaceTolerance, RC_DemiPlayer, 5;
+ ">
+},
+{
+ Items: ["Ring_Of_Spell_Explosion", "Anti_Magic_Suit"]
+ Script: <"
+ bonus bDelayrate, -5;
+ bonus2 bAddRaceTolerance, RC_DemiPlayer, 5;
+ ">
+},
+{
+ Items: ["Ring_Of_Spell_Explosion", "Geffen_Mage_Robe"]
+ Script: <"
+ bonus bVariableCastrate, -5;
+ ">
+},
+{
+ Items: ["RWC_Gold_Brooch", "RWC_Silver_Brooch"]
+ Script: <"
+ bonus bMatkRate, 10;
+ bonus bAtkRate, 10;
+ ">
+},
+{
+ Items: ["Poring_Card", "Mastering_Card"]
+ Script: <"
+ bonus bFlee, 18;
+ ">
+},
+{
+ Items: ["Lunatic_Card", "Eclipse_Card"]
+ Script: <"
+ bonus bFlee, 18;
+ ">
+},
+{
+ Items: ["Chonchon_Card", "Dragon_Fly_Card"]
+ Script: <"
+ bonus bFlee, 18;
+ ">
+},
+{
+ Items: ["Roda_Frog_Card", "Toad_Card"]
+ Script: <"
+ bonus bFlee, 18;
+ ">
+},
+{
+ Items: ["Condor_Card", "FlyingGalapago"]
+ Script: <"
+ bonus2 bSubEle, Ele_All, 5;
+ ">
+},
+{
+ Items: ["Rocker_Card", "Vocal_Card"]
+ Script: <"
+ bonus bFlee, 18;
+ ">
+},
+{
+ Items: ["Skeleton_Card", "Skel_Prisoner_Card"]
+ Script: <"
+ bonus2 bAddEffWhenHit, Eff_Sleep, 600;
+ ">
+},
+{
+ Items: ["Tarou_Card", "Cramp_Card"]
+ Script: <"
+ bonus bStr, 3;
+ ">
+},
+{
+ Items: ["Wolf_Card", "Vagabond_Wolf_Card"]
+ Script: <"
+ bonus bFlee, 18;
+ ">
+},
+{
+ Items: ["Pecopeco_Card", "Grand_Peco_Card"]
+ Script: <"
+ bonus bDef, 3;
+ bonus bVit, 3;
+ ">
+},
+{
+ Items: ["Muka_Card", "Raggler_Card", "Baby_Leopard_Card", "Zipper_Bear_Card", "Mole_Card"]
+ Script: <"
+ bonus bStr, 4;
+ bonus bMaxHPrate, 7;
+ bonus bMaxSPrate, 7;
+ bonus2 bSkillAtk, MC_MAMMONITE, 20;
+ bonus bSPDrainValue, 1;
+ if (BaseJob == Job_Alchemist) {
+ bonus3 bAutoSpell, BS_ADRENALINE, 1, 10;
+ bonus2 bAddMonsterDropItem, 7139, 3;
+ bonus2 bAddMonsterDropItem, 905, 10;
+ }
+ ">
+},
+{
+ Items: ["Stainer_Card", "Wander_Man_Card", "Shinobi_Card", "Wild_Rose_Card", "Whikebain_Card"]
+ Script: <"
+ bonus bStr, 6;
+ bonus bAgi, 4;
+ bonus2 bSkillAtk, RG_BACKSTAP, 10;
+ if (getskilllv(RG_STRIPARMOR) == 5)
+ bonus3 bAutoSpell, RG_STRIPARMOR, 5, 50;
+ if (BaseJob == Job_Rogue) {
+ bonus bUseSPrate, -20;
+ bonus3 bAutoSpell, RG_INTIMIDATE, 1, -20;
+ }
+ ">
+},
+{
+ Items: ["Golem_Card", "Companion_Cavalry_Sword"]
+ Script: <"
+ bonus2 bSubSize, Size_Large, 15;
+ bonus2 bSubSize, Size_Small, 15;
+ ">
+},
+{
+ Items: ["BigFoot_Card", "Grizzly_Card"]
+ Script: <"
+ bonus2 bAddEffWhenHit, Eff_Blind, 600;
+ ">
+},
+{
+ Items: ["Munak_Card", "Bon_Gun_Card", "Hyegun_Card"]
+ Script: <"
+ bonus bAllStats, 1;
+ ">
+},
+{
+ Items: ["Mummy_Card", "Ancient_Mummy_Card"]
+ Script: <"
+ bonus bPerfectHitAddRate, 20;
+ ">
+},
+{
+ Items: ["Nightmare_Card", "Nightmare_Terror_Card"]
+ Script: <"
+ bonus2 bAddEffWhenHit, Eff_Curse, 600;
+ ">
+},
+{
+ Items: ["Knight_Of_Abyss_Card", "Lord_of_Death"]
+ Script: <"
+ bonus2 bAddRace, RC_Boss, 5;
+ if (getequiprefinerycnt(EQI_HEAD_TOP) >= 11)
+ bonus2 bSubRace, RC_NonBoss, 5;
+ ">
+},
+{
+ Items: ["Galapago_Card", "FlyingGalapago"]
+ Script: <"
+ bonus2 bAddItemHealRate, Apple_Juice, 1000;
+ bonus2 bAddItemHealRate, Banana_Juice, 1000;
+ bonus2 bAddItemHealRate, Carrot_Juice, 1000;
+ ">
+},
+{
+ Items: ["Crab_Card", "Aster_Card", "Shellfish_Card"]
+ Script: <"
+ bonus3 bAddMonsterDropItem, 544, RC_Fish, 3000;
+ bonus2 bAddEle, Ele_Water, 30;
+ ">
+},
+{
+ Items: ["Grand_Peco_Card", "Heaven_Cage"]
+ Script: <"
+ bonus4 bAutoSpell, PR_GLORIA, 5, 10, 0;
+ ">
+},
+{
+ Items: ["Gryphon_Card", "FlyingGalapago"]
+ Script: <"
+ bonus bAspdRate, 3;
+ bonus bAspd, 1;
+ bonus bAtkRate, -5;
+ if (getiteminfo(getequipid(EQI_HAND_R), ITEMINFO_SUBTYPE) == W_BOW) {
+ if (getequiprefinerycnt(EQI_HAND_R) > 8)
+ bonus bAspd, 1;
+ }
+ ">
+},
+{
+ Items: ["Dark_Lord_Card", "Dark_Illusion_Card"]
+ Script: <"
+ bonus bMaxHPrate, 20;
+ bonus bMaxSPrate, 20;
+ bonus bVariableCastrate, -10;
+ ">
+},
+{
+ Items: ["The_Paper_Card", "Wander_Man_Card", "Shinobi_Card", "Wild_Rose_Card", "Dancing_Dragon_Card"]
+ Script: <"
+ bonus bAgi, 5;
+ bonus bStr, 5;
+ bonus bAspdRate, 5;
+ bonus bSpeedRate, 25;
+ bonus2 bSPDrainValue, 1, 0;
+ if (BaseClass == Job_Thief)
+ bonus bNoGemStone, 0;
+ ">
+},
+{
+ Items: ["Dragon_Tail_Card", "Merman_Card", "Anolian_Card", "Alligator_Card", "Cruiser_Card"]
+ Script: <"
+ bonus bAgi, 5;
+ bonus bDex, 3;
+ bonus bLongAtkRate, 20;
+ bonus bPerfectHitAddRate, 20;
+ if (BaseClass == Job_Archer) {
+ bonus2 bExpAddRace, RC_Brute, 5;
+ bonus2 bWeaponComaRace, RC_Brute, 100;
+ }
+ ">
+},
+{
+ Items: ["Dragon_Tail_Card", "Anolian_Card", "Alligator_Card", "Cruiser_Card", "Ferus__Card"]
+ Script: <"
+ bonus bDex, 5;
+ bonus2 bSkillAtk, CG_ARROWVULCAN, 5;
+ bonus2 bSkillAtk, DC_THROWARROW, 10;
+ bonus2 bSkillAtk, BA_MUSICALSTRIKE, 10;
+ if (BaseJob == Job_Bard || BaseJob == Job_Dancer)
+ bonus3 bAutoSpellWhenHit, CG_TAROTCARD, 2, 50;
+ ">
+},
+{
+ Items: ["Rideword_Card", "Live_Peach_Tree_Card", "Geographer_Card", "Cookie_Card", "Fur_Seal_Card"]
+ Script: <"
+ bonus bVit, 10;
+ bonus bVariableCastrate, -10;
+ bonus bUseSPrate, -10;
+ if (BaseClass == Job_Acolyte) {
+ bonus2 bExpAddRace, RC_Undead, 5;
+ bonus2 bExpAddRace, RC_Demon, 5;
+ bonus2 bSubRace, RC_Undead, 30;
+ bonus2 bSubRace, RC_Demon, 30;
+ }
+ ">
+},
+{
+ Items: ["Rideword_Card", "Cookie_Card", "Fur_Seal_Card", "Waste_Stove_Card"]
+ Script: <"
+ bonus bStr, 3;
+ bonus bMaxSP, 80;
+ bonus bBaseAtk, 25;
+ bonus3 bAutoSpell, AL_CRUCIS, 5, 10;
+ bonus2 bSkillAtk, MO_EXTREMITYFIST, 10;
+ if (BaseJob == Job_Monk) {
+ bonus bUseSPrate, -10;
+ bonus bNoCastCancel, 0;
+ }
+ ">
+},
+{
+ Items: ["Raggler_Card", "Mystcase_Card", "Baby_Leopard_Card", "Zipper_Bear_Card", "Hylozoist_Card"]
+ Script: <"
+ bonus bLuk, 10;
+ bonus2 bSPDrainValue, 2, 0;
+ bonus2 bSkillAtk, 42, 20;
+ if (BaseClass == Job_Merchant) {
+ bonus2 bAddMonsterDropItem, 617, 5;
+ bonus bMagicDamageReturn, 20;
+ }
+ ">
+},
+{
+ Items: ["Loli_Ruri_Card", "Miyabi_Ningyo_Card", "Wicked_Nymph_Card", "Parasite_Card", "Harpy_Card", "Blood_Butterfly_Card"]
+ Script: <"
+ bonus bMaxHP, 500;
+ bonus bDef, 5;
+ bonus bMdef, 5;
+ bonus2 bSkillAtk, 14, 10;
+ bonus2 bSkillAtk, 19, 10;
+ bonus2 bSkillAtk, 20, 10;
+ if (BaseClass == Job_Mage) {
+ bonus bMatkRate, 3;
+ bonus bVariableCastrate, -15;
+ }
+ ">
+},
+{
+ Items: ["Lude_Card", "Quve_Card"]
+ Script: <"
+ bonus bMaxHP, 300;
+ bonus bMaxSP, 60;
+ ">
+},
+{
+ Items: ["Miyabi_Ningyo_Card", "Wicked_Nymph_Card", "Harpy_Card", "Blood_Butterfly_Card", "Novus__Card"]
+ Script: <"
+ bonus bInt, 3;
+ bonus2 bSkillAtk, WZ_HEAVENDRIVE, 10;
+ bonus2 bSkillAtk, MG_THUNDERSTORM, 10;
+ if (BaseJob == Job_Sage) {
+ bonus bMagicDamageReturn, 20;
+ bonus2 bAddMonsterDropItem, 716, 100;
+ bonus2 bAddMonsterDropItem, 715, 100;
+ bonus bVariableCastrate, -20;
+ }
+ ">
+},
+{
+ Items: ["Succubus_Card", "Incubus_Card"]
+ Script: <"
+ bonus bHPrecovRate, 30;
+ bonus bSPrecovRate, 30;
+ bonus bVit, 4;
+ bonus bInt, 4;
+ ">
+},
+{
+ Items: ["Solider_Card", "Assulter_Card", "Permeter_Card", "Freezer_Card", "Heater_Card"]
+ Script: <"
+ bonus bStr, 10;
+ bonus bMaxHPrate, 20;
+ bonus bHPrecovRate, 50;
+ bonus3 bAutoSpell, BS_WEAPONPERFECT, 1, 3;
+ bonus2 bAddMonsterDropItem, 501, 500;
+ if (BaseClass == Job_Swordman) {
+ bonus2 bAddItemHealRate, Red_Potion, 50;
+ bonus2 bAddItemHealRate, Yellow_Potion, 50;
+ bonus2 bAddItemHealRate, Orange_Potion, 50;
+ bonus2 bAddItemHealRate, White_Potion, 50;
+ }
+ ">
+},
+{
+ Items: ["C_Tower_Manager_Card", "Alarm_Card", "Clock_Card", "Punk_Card"]
+ Script: <"
+ bonus bDef, 3;
+ bonus bMdef, 3;
+ ">
+},
+{
+ Items: ["Owl_Duke_Card", "Owl_Baron_Card"]
+ Script: <"
+ bonus3 bAutoSpell, MG_LIGHTNINGBOLT, 5, 20;
+ ">
+},
+{
+ Items: ["Injustice_Card", "Zherlthsh_Card"]
+ Script: <"
+ bonus bBaseAtk, 20;
+ bonus bLuk, 3;
+ ">
+},
+{
+ Items: ["Permeter_Card", "Freezer_Card", "Heater_Card", "Archdam_Card"]
+ Script: <"
+ bonus bInt, 1;
+ bonus bStr, 1;
+ bonus bDef, 2;
+ bonus bSPrecovRate, 10;
+ bonus2 bSkillAtk, PA_SHIELDCHAIN, 10;
+ bonus2 bSkillAtk, PA_SACRIFICE, 10;
+ bonus bVariableCastrate, -10;
+ if (BaseJob == Job_Crusader)
+ bonus bDefEle, Ele_Holy;
+ ">
+},
+{
+ Items: ["Garm_Baby_Card", "Garm_Card"]
+ Script: <"
+ bonus3 bAutoSpell, MG_FROSTDIVER, 3, 250;
+ ">
+},
+{
+ Items: ["Pitman_Card", "Mashirubeken"]
+ Script: <"
+ bonus3 bAutoSpell, WZ_EARTHSPIKE, 5, 20 + (getequiprefinerycnt(EQI_HAND_R));
+ ">
+},
+{
+ Items: ["Hill_Wind_Card", "Mashirubeken"]
+ Script: <"
+ bonus3 bAutoSpell, MG_LIGHTNINGBOLT, 5, 20 + (getequiprefinerycnt(EQI_HAND_R));
+ ">
+},
+{
+ Items: ["Rawrel_Card", "Mashirubeken"]
+ Script: <"
+ bonus3 bAutoSpell, MG_COLDBOLT, 5, 20 + (getequiprefinerycnt(EQI_HAND_R));
+ ">
+},
+{
+ Items: ["Ferus_Card", "Mashirubeken"]
+ Script: <"
+ bonus3 bAutoSpell, MG_FIREBOLT, 5, 20 + (getequiprefinerycnt(EQI_HAND_R));
+ ">
+},
+{
+ Items: ["Deathword_Card", "Mashirubeken"]
+ Script: <"
+ bonus3 bAutoSpell, MG_SOULSTRIKE, 5, 20 + (getequiprefinerycnt(EQI_HAND_R));
+ ">
+},
+{
+ Items: ["Zombie_Slaughter_Card", "Ragged_Zombie_Card"]
+ Script: <"
+ bonus2 bSPGainRace, RC_DemiPlayer, 2;
+ ">
+},
+{
+ Items: ["Tendrilion_Card", "KarduiEar"]
+ Script: <"
+ if (getiteminfo(getequipid(EQI_HAND_R), ITEMINFO_SUBTYPE) == W_2HSPEAR
+ || getiteminfo(getequipid(EQI_HAND_R), ITEMINFO_SUBTYPE) == W_2HSTAFF
+ || getiteminfo(getequipid(EQI_HAND_R), ITEMINFO_SUBTYPE) == W_STAFF) {
+ bonus2 bMagicAddRace, RC_DemiPlayer, getequipid(EQI_HAND_R) * 2;
+ bonus2 bMagicAddRace, RC_Player, getequipid(EQI_HAND_R) * 2;
+ }
+ ">
+},
+{
+ Items: ["Scaraba_Card", "Gold_Scaraba_Card"]
+ Script: <"
+ bonus3 bAutoSpell, NPC_DRAGONFEAR, 2, 100 + (getrefine() * 10);
+ ">
+},
+{
+ Items: ["Q_Scaraba_Card", "Queen_Scaraba_Crown"]
+ Script: <"
+ bonus2 bAddRace2, 7, 30;
+ ">
+},
+{
+ Items: ["Gold_Q_Scaraba_Card", "Queen_Scaraba_Crown"]
+ Script: <"
+ bonus2 bSubRace, RC_Insect, 10;
+ bonus2 bResEff, Eff_Confusion, 10000;
+ ">
+},
+{
+ Items: ["Cendrawasih_Card", "FlyingGalapago"]
+ Script: <"
+ bonus bInt, 1;
+ bonus bCritAtkRate, 5;
+ if (BaseClass == Job_Archer) {
+ bonus bCritAtkRate, 10;
+ }
+ ">
+},
+{
+ Items: ["UndeadKnightF_Card", "Crimson_Stole"]
+ Script: <"
+ bonus bMaxSPrate, 44;
+ bonus bSPGainValue, -(20 + (getequiprefinerycnt(EQI_GARMENT) / 2));
+ ">
+},
+{
+ Items: ["White_Knightage_Card", "Khali_Knightage_Card"]
+ Script: <"
+ bonus2 bAddSize, Size_Medium, 15;
+ bonus2 bAddSize, Size_Large, 15;
+ bonus2 bSubSize, Size_Medium, 5;
+ bonus2 bSubSize, Size_Large, 5;
+ ">
+},
+{
+ Items: ["P_Amdarais_Card", "Bijou_Card"]
+ Script: <"
+ bonus2 bResEff, Eff_Burning, 10000;
+ ">
+},
+{
+ Items: ["Min_Toad_Card", "Min_Chimera_Card"]
+ Script: <"
+ bonus bAtkRate, 10;
+ bonus bMatkRate, 10;
+ ">
+},
+{
+ Items: ["Min_Vagabond_Wolf_Card", "Min_Chimera_Card"]
+ Script: <"
+ bonus bAtkRate, 10;
+ bonus bMatkRate, 10;
+ ">
+},
+{
+ Items: ["Min_Vocal_Card", "Min_Chimera_Card"]
+ Script: <"
+ bonus bAtkRate, 10;
+ bonus bMatkRate, 10;
+ ">
+},
+{
+ Items: ["Min_Eclipse_Card", "Min_Chimera_Card"]
+ Script: <"
+ bonus bAtkRate, 10;
+ bonus bMatkRate, 10;
+ ">
+},
+{
+ Items: ["N_Arclouse_Card", "N_Mimic_Card"]
+ Script: <"
+ bonus2 bSubRace, RC_Brute, 5;
+ bonus2 bSubRace, RC_Undead, 5;
+ bonus2 bIgnoreMdefRate, 50, RC_Brute;
+ bonus2 bIgnoreMdefRate, 50, RC_Undead;
+ ">
+},
+{
+ Items: ["N_Arclouse_Card", "N_Minorous_Card"]
+ Script: <"
+ bonus2 bSubRace, RC_Brute, 5;
+ bonus2 bSubRace, RC_Undead, 5;
+ bonus2 bIgnoreDefRate, 50, RC_Brute;
+ bonus2 bIgnoreDefRate, 50, RC_Undead;
+ ">
+},
+{
+ Items: ["Loard_Circlet", "Gossip_Raven"]
+ Script: <"
+ bonus2 bExpAddRace, RC_All, 5;
+ ">
+},
+{
+ Items: ["Bankruptcy_Of_Heart", "Mask_Of_Bankrupt"]
+ Script: <"
+ bonus bMaxHP, 100;
+ bonus2 bSubEle, Ele_Neutral, getequiprefinerycnt(EQI_HEAD_TOP);
+ ">
+},
+{
+ Items: ["Blush", "Necktie"]
+ Script: <"
+ bonus bAspdRate, 3;
+ bonus bVariableCastrate, 3;
+ ">
+},
+{
+ Items: ["Blush", "Tare_Pope"]
+ Script: <"
+ bonus bSPrecovRate, 3;
+ ">
+},
+{
+ Items: ["Blush", "Tare_Pope_"]
+ Script: <"
+ bonus bHealPower, 10;
+ ">
+},
+{
+ Items: ["Ear_Of_Devils_Wing", "Darkness_Helm_J"]
+ Script: <"
+ bonus bStr, 1;
+ bonus bAtkRate, 5;
+ ">
+},
+{
+ Items: ["Ear_Of_Angels_Wing", "Darkness_Helm_J"]
+ Script: <"
+ bonus bStr, 1;
+ bonus bAspdRate, 2;
+ ">
+},
+{
+ Items: ["Alarm_Mask", "Gloomy_Pumpkin_Hat"]
+ Script: <"
+ bonus2 bAddItemHealRate, 12192, 200;
+ ">
+},
+{
+ Items: ["Feather_Beret", "Protect_Feathers"]
+ Script: <"
+ bonus bAspdRate, 5;
+ if (getequiprefinerycnt(EQI_HEAD_TOP) > 6)
+ bonus bAspdRate, 5;
+ if (getequiprefinerycnt(EQI_HEAD_TOP) > 8)
+ bonus bMaxHPrate, 5;
+ ">
+},
+{
+ Items: ["Hahoe_Mask", "Gloomy_Pumpkin_Hat"]
+ Script: <"
+ bonus bAspdRate, 5;
+ ">
+},
+{
+ Items: ["Captain_Hat", "Antique_Pipe_J"]
+ Script: <"
+ bonus bLongAtkRate, getequiprefinerycnt(EQI_HEAD_TOP);
+ ">
+},
+{
+ Items: ["Pecopeco_Wing_Ears", "Darkness_Helm_J"]
+ Script: <"
+ bonus bAgi, 1;
+ bonus bFlee, 3;
+ ">
+},
+{
+ Items: ["Pencil_In_Mouth", "Cap_Of_Concentration"]
+ Script: <"
+ bonus bDex, 2;
+ bonus bDef, 2;
+ ">
+},
+{
+ Items: ["Black_Glasses", "Darkness_Helm_J"]
+ Script: <"
+ bonus bInt, 1;
+ bonus bMatkRate, 2;
+ ">
+},
+{
+ Items: ["Eyes_Of_Darkness", "Darkness_Helm_J"]
+ Script: <"
+ bonus bDex, 1;
+ bonus bLongAtkRate, 3;
+ ">
+},
+{
+ Items: ["Red_Wing_Hat", "Priest_Sword"]
+ Script: <"
+ bonus2 bAddRace, RC_DemiPlayer, 10;
+ bonus bHit, 10;
+ ">
+},
+{
+ Items: ["Angel_Earing", "Bless_Of_Moon"]
+ Script: <"
+ bonus2 bAddRace, RC_All, 3;
+ ">
+},
+{
+ Items: ["Heaven_Cage", "Ixion_Wing"]
+ Script: <"
+ if (Class == Job_Ranger || Class == Job_Ranger_T)
+ skill HT_BLITZBEAT, 5 * getequiprefinerycnt(EQI_HAND_R);
+ ">
+},
+{
+ Items: ["Scalpel", "Green_Operation_Coat"]
+ Script: <"
+ bonus3 bAddMonsterDropItem, 929, RC_Brute, 100 + (getequiprefinerycnt(EQI_HAND_R) * 10);
+ bonus3 bAddMonsterDropItem, 929, RC_DemiPlayer, 100 + (getequiprefinerycnt(EQI_HAND_R) * 10);
+ bonus3 bAddMonsterDropItem, 970, RC_Brute, 20 + (getequiprefinerycnt(EQI_HAND_R) * 2);
+ bonus3 bAddMonsterDropItem, 970, RC_DemiPlayer, 20 + (getequiprefinerycnt(EQI_HAND_R) * 2);
+ ">
+},
+{
+ Items: ["Twilight_Desert", "Sandstorm"]
+ Script: <"
+ bonus bMaxSP, 20;
+ bonus bMaxHPrate, 5;
+ bonus bHit, 10;
+ bonus2 bAddSize, Size_Large, 30;
+ autobonus "{ bonus bAspdRate,100; }", 1, 7000, BF_WEAPON, "{ specialeffect(EF_POTION_BERSERK, AREA, playerattached()); }";
+ ">
+},
+{
+ Items: ["Sandstorm", "Twilight_Desert_"]
+ Script: <"
+ bonus bMaxSP, 20;
+ bonus bMaxHPrate, 5;
+ bonus bHit, 10;
+ bonus2 bAddSize, Size_Large, 30;
+ autobonus "{ bonus bAspdRate,100; }", 1, 7000, BF_WEAPON, "{ specialeffect(EF_POTION_BERSERK, AREA, playerattached()); }";
+ ">
+},
+{
+ Items: ["Boitata_Armor", "Boitata_Hat"]
+ Script: <"
+ bonus2 bAddEle, Ele_Earth, 10;
+ bonus bDefEle, Ele_Fire;
+ ">
+},
+{
+ Items: ["Egir_Armor", "Aegir_Helm"]
+ Script: <"
+ bonus2 bAddRaceTolerance, RC_Fish, 10 + getequiprefinerycnt(EQI_ARMOR);
+ ">
+},
+{
+ Items: ["Im_Angels_Protection", "Impr_Angels_Warmth"]
+ Script: <"
+ bonus(bAgi, 5);
+ bonus(bFlee, 10);
+ ">
+},
+{
+ Items: ["Female_Poring_Egg", "Excellion_Wing"]
+ Script: <"
+ bonus bDelayrate, -10;
+ bonus bFlee2, 6;
+ if (BaseLevel > 130) {
+ bonus bDelayrate, -10;
+ }
+ ">
+},
+{
+ Items: ["Elven_Ears_", "Skull_Cap"]
+ Script: <"
+ bonus bUseSPrate, -3;
+ ">
+},
+{
+ Items: ["Blush_", "Tare_Pope"]
+ Script: <"
+ bonus bSPrecovRate, 3;
+ ">
+},
+{
+ Items: ["Blush_", "Tare_Pope_"]
+ Script: <"
+ bonus bHealPower, 10;
+ ">
+},
+{
+ Items: ["Imperial_Feather", "Imperial_Ring"]
+ Script: <"
+ bonus2 bSkillVariableCast, CR_GRANDCROSS, -2000;
+ bonus2 bSkillUseSP, LG_RAYOFGENESIS, 10;
+ bonus2 bSkillAtk, CR_GRANDCROSS, BaseLevel;
+ bonus2 bSkillAtk, LG_RAYOFGENESIS, BaseLevel / 30;
+ ">
+},
+{
+ Items: ["Imperial_Feather", "Imperial_Guard", "Imperial_Spear"]
+ Script: <"
+ bonus2 bSkillAtk, LG_CANNONSPEAR, 20;
+ bonus2 bSkillAtk, LG_BANISHINGPOINT, 20;
+ bonus2 bSkillAtk, LG_SHIELDPRESS, 20;
+ ">
+},
+{
+ Items: ["Armor_Of_Gray", "Gray_Helmet", "Cloak_Of_Gray", "Boots_Of_Gray"]
+ Script: <"
+ bonus2 bSubEle, Ele_Neutral, 15;
+ bonus3 bAutoSpellWhenHit, WL_DRAINLIFE, 3, 100;
+ ">
+},
+{
+ Items: ["Gray_Robe", "Gray_Helmet", "Cloak_Of_Gray", "Boots_Of_Gray"]
+ Script: <"
+ bonus2 bSubEle, Ele_Neutral, 15;
+ bonus bMaxHPrate, 25;
+ bonus bMaxSPrate, 25;
+ bonus bMatkRate, 10;
+ ">
+},
+{
+ Items: ["Felock_Armor", "Felock_Cape", "Felock_Boots"]
+ Script: <"
+ bonus bMaxHP, 25;
+ bonus bMaxSP, 25;
+ bonus bSpeedRate, 25;
+ if (getequiprefinerycnt(EQI_GARMENT, EQI_SHOES, EQI_ARMOR) >= 30) {
+ bonus bMaxHP, 5;
+ bonus bMaxSP, 5;
+ }
+ ">
+},
+{
+ Items: ["Blood_Angel_Hair_Band", "Blood_Angel_Wing_Ear"]
+ Script: <"
+ bonus2 bAddRace, RC_Angel, 3;
+ ">
+},
+{
+ Items: ["Egir_Helm", "Egir_Armor", "Egir_Shoes", "Egir_Manteau"]
+ Script: <"
+ bonus bAllStats, 1;
+ bonus2 bSubEle, Ele_Water, 50;
+ ">
+},
+{
+ Items: ["Improved_Kiss_Of_Angel", "Impr_Angels_Warmth"]
+ Script: <"
+ bonus(bBaseAtk, 10);
+ ">
+},
+{
+ Items: ["Improved_Kiss_Of_Angel", "Impr_Angels_Arrival"]
+ Script: <"
+ bonus(bMatk, 20);
+ ">
+},
+{
+ Items: ["Mask_Of_Bankrupt", "Bankruptcy_Of_Heart_"]
+ Script: <"
+ bonus bMaxHP, 100;
+ bonus2 bSubEle, Ele_Neutral, getequiprefinerycnt(EQI_HEAD_TOP);
+ ">
+},
+{
+ Items: ["One_Eyed_Glass_", "Memorize_Book", "Pocket_Watch__"]
+ Script: <"
+ bonus bHPrecovRate, 15;
+ bonus bSPrecovRate, 15;
+ bonus bMatkRate, 7;
+ ">
+},
+{
+ Items: ["Riot_Chip", "Broken_Chip_1", "Broken_Chip_2"]
+ Script: <"
+ bonus bSpeedRate, 10;
+ bonus bBaseAtk, 50;
+ bonus bMatk, 50;
+ if (getequiprefinerycnt(EQI_HEAD_TOP) >= 9) {
+ bonus bMaxHPrate, 10;
+ bonus bMaxSPrate, 50;
+ }
+ ">
+},
+{
+ Items: ["Aegir_Helm", "Aegir_Armor"]
+ Script: <"
+ bonus2 bAddRaceTolerance, RC_Fish, 10 + getequiprefinerycnt(EQI_ARMOR);
+ ">
+},
+{
+ Items: ["Aegir_Helm", "Aegir_Cloak"]
+ Script: <"
+ .@r = getequiprefinerycnt(EQI_GARMENT);
+ bonus2 bSPGainRace, RC_Fish, 10;
+ bonus3 bAddMonsterDropItem, Shusi, RC_Fish, (5 + .@r);
+ bonus3 bAddMonsterDropItem, Fish_Slice, RC_Fish, (5 + .@r);
+ bonus2 bAddItemHealRate, Shusi, 5;
+ bonus2 bAddItemHealRate, Fish_Slice, 5;
+ bonus bHPrecovRate, (5 + .@r);
+ ">
+},
+{
+ Items: ["Aegir_Helm", "Aegir_Shoes"]
+ Script: <"
+ bonus2 bCriticalAddRace, RC_Fish, 10 + getequiprefinerycnt(EQI_SHOES);
+ ">
+},
+{
+ Items: ["Aegir_Helm", "Aegir_Armor", "Aegir_Shoes", "Aegir_Cloak"]
+ Script: <"
+ bonus bMaxHP, 1000;
+ bonus bMaxSP, 100;
+ bonus2 bExpAddRace, RC_Fish, 20;
+ bonus2 bAddRace, RC_Fish, 50;
+ bonus2 bMagicAddRace, RC_Fish, 50;
+ bonus2 bSubEle, Ele_Water, 50;
+ ">
+},
+{
+ Items: ["C_Amistr_Cap", "C_Amistr_Bag"]
+ Script: <"
+ bonus2 bAddRaceTolerance, RC_Player, 4;
+ ">
+},
+{
+ Items: ["FaceWorm_Skin", "Temporal_Str_Boots"]
+ Script: <"
+ bonus bMaxHPrate, 15;
+ bonus bMaxSPrate, 5;
+ ">
+},
+{
+ Items: ["FaceWorm_Skin", "Temporal_Int_Boots"]
+ Script: <"
+ bonus bMaxHPrate, 15;
+ bonus bMaxSPrate, 5;
+ ">
+},
+{
+ Items: ["FaceWorm_Skin", "Temporal_Agi_Boots"]
+ Script: <"
+ bonus bMaxHPrate, 15;
+ bonus bMaxSPrate, 5;
+ ">
+},
+{
+ Items: ["FaceWorm_Skin", "Temporal_Vit_Boots"]
+ Script: <"
+ bonus bMaxHPrate, 15;
+ bonus bMaxSPrate, 5;
+ ">
+},
+{
+ Items: ["FaceWorm_Skin", "Temporal_Dex_Boots"]
+ Script: <"
+ bonus bMaxHPrate, 15;
+ bonus bMaxSPrate, 5;
+ ">
+},
+{
+ Items: ["FaceWorm_Skin", "Temporal_Luk_Boots"]
+ Script: <"
+ bonus bMaxHPrate, 15;
+ bonus bMaxSPrate, 5;
+ ">
+},
+{
+ Items: ["FaceWorm_Skin", "Temporal_Str_Boots_"]
+ Script: <"
+ bonus bMaxHPrate, 15;
+ bonus bMaxSPrate, 5;
+ ">
+},
+{
+ Items: ["FaceWorm_Skin", "Temporal_Vit_Boots_"]
+ Script: <"
+ bonus bMaxHPrate, 15;
+ bonus bMaxSPrate, 5;
+ ">
+},
+{
+ Items: ["FaceWorm_Skin", "Temporal_Dex_Boots_"]
+ Script: <"
+ bonus bMaxHPrate, 15;
+ bonus bMaxSPrate, 5;
+ ">
+},
+{
+ Items: ["FaceWorm_Skin", "Temporal_Int_Boots_"]
+ Script: <"
+ bonus bMaxHPrate, 15;
+ bonus bMaxSPrate, 5;
+ ">
+},
+{
+ Items: ["FaceWorm_Skin", "Temporal_Agi_Boots_"]
+ Script: <"
+ bonus bMaxHPrate, 15;
+ bonus bMaxSPrate, 5;
+ ">
+},
+{
+ Items: ["FaceWorm_Skin", "Temporal_Luk_Boots_"]
+ Script: <"
+ bonus bMaxHPrate, 15;
+ bonus bMaxSPrate, 5;
+ ">
+},
+{
+ Items: ["FaceWorm_Skin_", "Temporal_Str_Boots"]
+ Script: <"
+ bonus bMaxHPrate, 15;
+ bonus bMaxSPrate, 5;
+ ">
+},
+{
+ Items: ["FaceWorm_Skin_", "Temporal_Int_Boots"]
+ Script: <"
+ bonus bMaxHPrate, 15;
+ bonus bMaxSPrate, 5;
+ ">
+},
+{
+ Items: ["FaceWorm_Skin_", "Temporal_Agi_Boots"]
+ Script: <"
+ bonus bMaxHPrate, 15;
+ bonus bMaxSPrate, 5;
+ ">
+},
+{
+ Items: ["FaceWorm_Skin_", "Temporal_Vit_Boots"]
+ Script: <"
+ bonus bMaxHPrate, 15;
+ bonus bMaxSPrate, 5;
+ ">
+},
+{
+ Items: ["FaceWorm_Skin_", "Temporal_Dex_Boots"]
+ Script: <"
+ bonus bMaxHPrate, 15;
+ bonus bMaxSPrate, 5;
+ ">
+},
+{
+ Items: ["FaceWorm_Skin_", "Temporal_Luk_Boots"]
+ Script: <"
+ bonus bMaxHPrate, 15;
+ bonus bMaxSPrate, 5;
+ ">
+},
+{
+ Items: ["FaceWorm_Skin_", "Temporal_Str_Boots_"]
+ Script: <"
+ bonus bMaxHPrate, 15;
+ bonus bMaxSPrate, 5;
+ ">
+},
+{
+ Items: ["FaceWorm_Skin_", "Temporal_Vit_Boots_"]
+ Script: <"
+ bonus bMaxHPrate, 15;
+ bonus bMaxSPrate, 5;
+ ">
+},
+{
+ Items: ["FaceWorm_Skin_", "Temporal_Dex_Boots_"]
+ Script: <"
+ bonus bMaxHPrate, 15;
+ bonus bMaxSPrate, 5;
+ ">
+},
+{
+ Items: ["FaceWorm_Skin_", "Temporal_Int_Boots_"]
+ Script: <"
+ bonus bMaxHPrate, 15;
+ bonus bMaxSPrate, 5;
+ ">
+},
+{
+ Items: ["FaceWorm_Skin_", "Temporal_Agi_Boots_"]
+ Script: <"
+ bonus bMaxHPrate, 15;
+ bonus bMaxSPrate, 5;
+ ">
+},
+{
+ Items: ["FaceWorm_Skin_", "Temporal_Luk_Boots_"]
+ Script: <"
+ bonus bMaxHPrate, 15;
+ bonus bMaxSPrate, 5;
+ ">
+},
+{
+ Items: ["Supplement_Part_Con", "Tornado_Axe"]
+ Script: <"
+ bonus2 bAddRace, RC_All, 25;
+ ">
+},
+{
+ Items: ["Assassin_Shoes", "Desperation_of_Assassin"]
+ Script: <"
+ bonus2 bAddRace, RC_DemiPlayer, getequiprefinerycnt(EQI_SHOES);
+ bonus2 bAddRace, RC_Player, getequiprefinerycnt(EQI_SHOES);
+ ">
+},
+{
+ Items: ["Broken_Chip_1", "Broken_Chip_2"]
+ Script: <"
+ bonus bInt, 8;
+ bonus bStr, 8;
+ ">
+},
+{
+ Items: ["S_Promotion_Weapon", "S_Promotion_Armor", "S_Promotion_Shoes", "S_Promotion_Shield", "S_Promotion_Earring", "S_Promotion_Pendant"]
+ Script: <"
+ bonus bAllStats, 9;
+ ">
+},
+{
+ Items: ["S_Physical_Earring", "S_Physical_Weapon", "S_Physical_Pendant"]
+ Script: <"
+ if (getequiprefinerycnt(EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L, EQI_SHADOW_WEAPON) >= 23) {
+ bonus bAtkRate, 1;
+ }
+ ">
+},
+{
+ Items: ["S_Magical_Earring", "S_Magical_Weapon", "S_Magical_Pendant"]
+ Script: <"
+ if (getequiprefinerycnt(EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L, EQI_SHADOW_WEAPON) >= 23) {
+ bonus bMatkRate, 1;
+ }
+ ">
+},
+{
+ Items: ["S_Champion_Shoes", "S_Hard_Armor"]
+ Script: <"
+ .@r = getequiprefinerycnt(EQI_SHADOW_ARMOR, EQI_SHADOW_SHOES);
+ bonus bMaxHP, .@r;
+ bonus bMaxSP, .@r;
+ if (.@r >= 15) {
+ bonus bMaxHPrate, 1;
+ }
+ ">
+},
+{
+ Items: ["S_Athena_Shield", "S_Immune_Armor"]
+ Script: <"
+ .@r = getequiprefinerycnt(EQI_SHADOW_ARMOR, EQI_SHADOW_SHIELD);
+ bonus bDef, .@r;
+ if (.@r >= 15) {
+ bonus2 bSubEle, 0, 1;
+ }
+ ">
+},
+{
+ Items: ["S_Ancient_Armor", "S_Kingbird_Weapon"]
+ Script: <"
+ .@r = getequiprefinerycnt(EQI_SHADOW_ARMOR, EQI_SHADOW_WEAPON);
+ bonus bBaseAtk, .@r;
+ if (.@r >= 15) {
+ bonus bLongAtkRate, 1;
+ }
+ ">
+},
+{
+ Items: ["S_Critical_Armor", "S_Cri_Hit_Weapon"]
+ Script: <"
+ .@r = getequiprefinerycnt(EQI_SHADOW_ARMOR, EQI_SHADOW_WEAPON);
+ bonus bCritical, .@r;
+ bonus bBaseAtk, .@r;
+ if (.@r >= 15) {
+ bonus bCritAtkRate, 1;
+ }
+ ">
+},
+{
+ Items: ["S_Lucky_Weapon", "S_Lucky_Armor"]
+ Script: <"
+ bonus bLuk, 1;
+ ">
+},
+{
+ Items: ["S_Power_Earring", "S_Power_Pendant"]
+ Script: <"
+ bonus bStr, 1;
+ ">
+},
+{
+ Items: ["S_Int_Pendant", "S_Int_Earring"]
+ Script: <"
+ bonus bInt, 1;
+ ">
+},
+{
+ Items: ["S_Dexterous_Armor", "S_Dexterous_Weapon"]
+ Script: <"
+ bonus bDex, 1;
+ ">
+},
+{
+ Items: ["S_Vital_Shoes", "S_Vital_Shield"]
+ Script: <"
+ bonus bVit, 1;
+ ">
+},
+{
+ Items: ["S_Athletic_Shield", "S_Athletic_Shoes"]
+ Script: <"
+ bonus bAgi, 1;
+ ">
+},
+{
+ Items: ["S_Resist_Spell_Pendant", "S_Athena_Earring"]
+ Script: <"
+ bonus2 bSubEle, Ele_Neutral, 1;
+ if (getequiprefinerycnt(EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L) >= 15) {
+ bonus2 bSubEle, Ele_Neutral, 1;
+ }
+ ">
+},
+{
+ Items: ["S_Cranial_Shield", "S_Bloody_Shoes"]
+ Script: <"
+ bonus2 bExpAddRace, RC_DemiPlayer, 3;
+ ">
+},
+{
+ Items: ["S_Safeguard_Shield", "S_Liberation_Shoes"]
+ Script: <"
+ bonus2 bAddRace, RC_Boss, 5;
+ bonus2 bMagicAddRace, RC_Boss, 5;
+ ">
+},
+{
+ Items: ["S_Brutal_Shield", "S_Clamorous_Shoes"]
+ Script: <"
+ bonus2 bExpAddRace, RC_Brute, 3;
+ ">
+},
+{
+ Items: ["S_Gargantua_Shield", "S_Insecticide_Shoes"]
+ Script: <"
+ bonus2 bExpAddRace, RC_Insect, 3;
+ ">
+},
+{
+ Items: ["S_Homers_Shield", "S_Fisher_Shoes"]
+ Script: <"
+ bonus2 bExpAddRace, RC_Fish, 3;
+ ">
+},
+{
+ Items: ["S_Dragoon_Shield", "S_Dragoon_Shoes"]
+ Script: <"
+ bonus2 bExpAddRace, RC_Dragon, 3;
+ ">
+},
+{
+ Items: ["S_Satanic_Shield", "S_Seraphim_Shoes"]
+ Script: <"
+ bonus2 bExpAddRace, RC_Angel, 3;
+ ">
+},
+{
+ Items: ["S_Flameguard_Shield", "S_Beholder_Shoes"]
+ Script: <"
+ bonus2 bExpAddRace, RC_Formless, 3;
+ ">
+},
+{
+ Items: ["S_Requiem_Shield", "S_Divine_Shoes"]
+ Script: <"
+ bonus2 bExpAddRace, RC_Undead, 3;
+ ">
+},
+{
+ Items: ["S_Cadi_Shield", "S_Chemical_Shoes"]
+ Script: <"
+ bonus2 bExpAddRace, RC_Plant, 3;
+ ">
+},
+{
+ Items: ["S_Big_Armor", "S_Big_Weapon"]
+ Script: <"
+ bonus bMaxHPrate, 1;
+ bonus bMaxSPrate, 1;
+ ">
+},
+{
+ Items: ["S_Medium_Armor", "S_Medium_Weapon"]
+ Script: <"
+ bonus bMaxHPrate, 1;
+ bonus bMaxSPrate, 1;
+ ">
+},
+{
+ Items: ["S_Small_Armor", "S_Small_Weapon"]
+ Script: <"
+ bonus bMaxHPrate, 1;
+ bonus bMaxSPrate, 1;
+ ">
+},
+{
+ Items: ["S_Spiritual_Weapon", "S_Spiritual_Earring", "S_Spiritual_Pendent"]
+ Script: <"
+ bonus3 bSPDrainRate, 10, 1 + (getequiprefinerycnt(EQI_SHADOW_WEAPON, EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L) / 10), 0;
+ ">
+},
+{
+ Items: ["S_Malicious_Armor", "S_Malicious_Shoes", "S_Malicious_Shield"]
+ Script: <"
+ bonus3 bHPDrainRateRace, 11, 40, 2 + (getequiprefinerycnt(EQI_SHADOW_ARMOR, EQI_SHADOW_SHIELD, EQI_SHADOW_SHOES) / 5);
+ ">
+},
+{
+ Items: ["S_Gemstone_Armor", "S_Gemstone_Shoes", "S_Gemstone_Shield", "S_Gemstone_Weapon", "S_Gemstone_Earring", "S_Gemstone_Pendent"]
+ Script: <"
+ bonus bAllStats, 1;
+ .@r = getequiprefinerycnt(EQI_SHADOW_ARMOR, EQI_SHADOW_WEAPON, EQI_SHADOW_SHIELD, EQI_SHADOW_SHOES, EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L);
+ if (.@r >= 45) {
+ bonus bNoGemStone, 1;
+ }
+ bonus bUseSPrate, 100 - .@r;
+ ">
+},
+{
+ Items: ["S_Stability_Shield", "S_Plasterers_Armor", "S_Plasterers_Shoes"]
+ Script: <"
+ bonus bDef, 5;
+ if (getequiprefinerycnt(EQI_SHADOW_SHIELD, EQI_SHADOW_ARMOR, EQI_SHADOW_SHOES) >= 20)
+ bonus2 bResEff, Eff_Stone, 100;
+ ">
+},
+{
+ Items: ["S_Stability_Shield", "S_Insomniac_Armor", "S_Insomniac_Shoes"]
+ Script: <"
+ bonus bDef, 5;
+ if (getequiprefinerycnt(EQI_SHADOW_SHIELD, EQI_SHADOW_ARMOR, EQI_SHADOW_SHOES) >= 20)
+ bonus2 bResEff, Eff_Sleep, 100;
+ ">
+},
+{
+ Items: ["S_Stability_Shield", "S_Peerless_Armor", "S_Peerless_Shoes"]
+ Script: <"
+ bonus bDef, 5;
+ if (getequiprefinerycnt(EQI_SHADOW_SHIELD, EQI_SHADOW_ARMOR, EQI_SHADOW_SHOES) >= 20)
+ bonus2 bResEff, Eff_Silence, 100;
+ ">
+},
+{
+ Items: ["S_Stability_Shield", "S_Adurate_Armor", "S_Adurate_Shoes"]
+ Script: <"
+ bonus bDef, 5;
+ if (getequiprefinerycnt(EQI_SHADOW_SHIELD, EQI_SHADOW_ARMOR, EQI_SHADOW_SHOES) >= 20)
+ bonus2 bResEff, Eff_Blind, 100;
+ ">
+},
+{
+ Items: ["S_Stability_Shield", "Unfreez_Weapon_S", "Unfreeze_Earing_S", "Unfreeze_Pendent_S"]
+ Script: <"
+ bonus bDef, 4;
+ if (getequiprefinerycnt(EQI_SHADOW_SHIELD, EQI_SHADOW_WEAPON, EQI_SHADOW_ACC_L, EQI_SHADOW_ACC_R) >= 30)
+ bonus2 bResEff, Eff_Freeze, 100;
+ ">
+},
+{
+ Items: ["S_Stability_Shield", "Vitality_Earing_S", "Vitality_Pendant_S"]
+ Script: <"
+ bonus bDef, 5;
+ if (getequiprefinerycnt(EQI_SHADOW_SHIELD, EQI_SHADOW_ACC_L, EQI_SHADOW_ACC_R) >= 20)
+ bonus2 bResEff, Eff_Bleeding, 100;
+ ">
+},
+{
+ Items: ["S_Stability_Shield", "S_Neutral_Weapon", "S_Neutral_Earring", "S_Neutral_Pendent"]
+ Script: <"
+ bonus bDef, 4;
+ if (getequiprefinerycnt(EQI_SHADOW_SHIELD, EQI_SHADOW_WEAPON, EQI_SHADOW_ACC_L, EQI_SHADOW_ACC_R) >= 30)
+ bonus2 bResEff, Eff_Stun, 100;
+ ">
+},
+{
+ Items: ["S_Stability_Shield", "S_Curse_Lift_Earring", "S_Curse_Lift_Pendent"]
+ Script: <"
+ bonus bDef, 5;
+ if (getequiprefinerycnt(EQI_SHADOW_SHIELD, EQI_SHADOW_ACC_L, EQI_SHADOW_ACC_R) >= 20)
+ bonus2 bResEff, Eff_Curse, 100;
+ ">
+},
+{
+ Items: ["S_Caster_earring", "S_Caster_Weapon", "S_Caster_Pendant"]
+ Script: <"
+ bonus bNoCastCancel, 1;
+ bonus bVariableCastrate, 40 - (getequiprefinerycnt(EQI_SHADOW_WEAPON, EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L));
+ ">
+},
+{
+ Items: ["S_Spell_Flow_Shoes", "S_Spell_Flow_Armor", "S_Spell_Flow_Shield"]
+ Script: <"
+ bonus bNoCastCancel, 1;
+ bonus bUseSPrate, 40 - getequiprefinerycnt(EQI_SHADOW_SHIELD) - getequiprefinerycnt(EQI_SHADOW_ARMOR) - getequiprefinerycnt(EQI_SHADOW_SHOES);
+ ">
+},
+{
+ Items: ["S_Infinity_Earring", "S_Infinity_Pendant"]
+ Script: <"
+ bonus bAtkRate, 1;
+ if (getequiprefinerycnt(EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L) >= 15)
+ bonus bNoSizeFix, 1;
+ ">
+},
+{
+ Items: ["S_Solid_Weapon", "S_Solid_Earring"]
+ Script: <"
+ bonus bAtk, getequiprefinerycnt(EQI_SHADOW_WEAPON);
+ if (getequiprefinerycnt(EQI_SHADOW_WEAPON, EQI_SHADOW_ACC_R) >= 15)
+ bonus bUnbreakableWeapon, 1;
+ ">
+},
+{
+ Items: ["S_Immortal_Armor", "S_Immortal_Pendant"]
+ Script: <"
+ bonus bDef, getequiprefinerycnt(EQI_SHADOW_ARMOR);
+ if (getequiprefinerycnt(EQI_SHADOW_ARMOR, EQI_SHADOW_ACC_L) >= 15)
+ bonus bUnbreakableArmor, 1;
+ ">
+},
+{
+ Items: ["S_Executioner_Weapon", "S_Penetration_Earring", "S_Penetration_Pendent"]
+ Script: <"
+ bonus bBaseAtk, 5;
+ if (getequiprefinerycnt(EQI_SHADOW_WEAPON, EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L) >= 25)
+ bonus bIgnoreDefRace, RC_DemiPlayer;
+ ">
+},
+{
+ Items: ["S_Exorcist_Weapon", "S_Penetration_Earring", "S_Penetration_Pendent"]
+ Script: <"
+ bonus bBaseAtk, 5;
+ if (getequiprefinerycnt(EQI_SHADOW_WEAPON, EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L) >= 25)
+ bonus bIgnoreDefRace, RC_Demon;
+ ">
+},
+{
+ Items: ["S_Hunting_Weapon", "S_Penetration_Earring", "S_Penetration_Pendent"]
+ Script: <"
+ bonus bBaseAtk, 5;
+ if (getequiprefinerycnt(EQI_SHADOW_WEAPON, EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L) >= 25)
+ bonus bIgnoreDefRace, RC_Brute;
+ ">
+},
+{
+ Items: ["S_Insect_Net_Weapon", "S_Penetration_Earring", "S_Penetration_Pendent"]
+ Script: <"
+ bonus bBaseAtk, 5;
+ if (getequiprefinerycnt(EQI_SHADOW_WEAPON, EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L) >= 25)
+ bonus bIgnoreDefRace, RC_Insect;
+ ">
+},
+{
+ Items: ["S_Fishing_Weapon", "S_Penetration_Earring", "S_Penetration_Pendent"]
+ Script: <"
+ bonus bBaseAtk, 5;
+ if (getequiprefinerycnt(EQI_SHADOW_WEAPON, EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L) >= 25)
+ bonus bIgnoreDefRace, RC_Fish;
+ ">
+},
+{
+ Items: ["S_Dragon_Killer_Weapon", "S_Penetration_Earring", "S_Penetration_Pendent"]
+ Script: <"
+ bonus bBaseAtk, 5;
+ if (getequiprefinerycnt(EQI_SHADOW_WEAPON, EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L) >= 25)
+ bonus bIgnoreDefRace, RC_Dragon;
+ ">
+},
+{
+ Items: ["S_Corrupt_Weapon", "S_Penetration_Earring", "S_Penetration_Pendent"]
+ Script: <"
+ bonus bBaseAtk, 5;
+ if (getequiprefinerycnt(EQI_SHADOW_WEAPON, EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L) >= 25)
+ bonus bIgnoreDefRace, RC_Angel;
+ ">
+},
+{
+ Items: ["S_Vibration_Weapon", "S_Penetration_Earring", "S_Penetration_Pendent"]
+ Script: <"
+ bonus bBaseAtk, 5;
+ if (getequiprefinerycnt(EQI_SHADOW_WEAPON, EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L) >= 25)
+ bonus bIgnoreDefRace, RC_Formless;
+ ">
+},
+{
+ Items: ["S_Holy_Water_Weapon", "S_Penetration_Earring", "S_Penetration_Pendent"]
+ Script: <"
+ bonus bBaseAtk, 5;
+ if (getequiprefinerycnt(EQI_SHADOW_WEAPON, EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L) >= 25)
+ bonus bIgnoreDefRace, RC_Undead;
+ ">
+},
+{
+ Items: ["S_Scissors_Weapon", "S_Penetration_Earring", "S_Penetration_Pendent"]
+ Script: <"
+ bonus bBaseAtk, 5;
+ if (getequiprefinerycnt(EQI_SHADOW_WEAPON, EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L) >= 25)
+ bonus bIgnoreDefRace, RC_Plant;
+ ">
+},
+{
+ Items: ["S_Tempest_Earring", "S_Tempest_Pendent", "S_M_Executioner_Weapon"]
+ Script: <"
+ bonus bMatk, 5;
+ if (getequiprefinerycnt(EQI_SHADOW_WEAPON, EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L) >= 25)
+ bonus bIgnoreMdefRace, RC_DemiPlayer;
+ ">
+},
+{
+ Items: ["S_Tempest_Earring", "S_Tempest_Pendent", "S_M_Exorcist_Weapon"]
+ Script: <"
+ bonus bMatk, 5;
+ if (getequiprefinerycnt(EQI_SHADOW_WEAPON, EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L) >= 25)
+ bonus bIgnoreMdefRace, RC_Demon;
+ ">
+},
+{
+ Items: ["S_Tempest_Earring", "S_Tempest_Pendent", "S_M_Hunting_Weapon"]
+ Script: <"
+ bonus bMatk, 5;
+ if (getequiprefinerycnt(EQI_SHADOW_WEAPON, EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L) >= 25)
+ bonus bIgnoreMdefRace, RC_Brute;
+ ">
+},
+{
+ Items: ["S_Tempest_Earring", "S_Tempest_Pendent", "S_M_Insect_Net_Weapon"]
+ Script: <"
+ bonus bMatk, 5;
+ if (getequiprefinerycnt(EQI_SHADOW_WEAPON, EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L) >= 25)
+ bonus bIgnoreMdefRace, RC_Insect;
+ ">
+},
+{
+ Items: ["S_Tempest_Earring", "S_Tempest_Pendent", "S_M_Fishing_Weapon"]
+ Script: <"
+ bonus bMatk, 5;
+ if (getequiprefinerycnt(EQI_SHADOW_WEAPON, EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L) >= 25)
+ bonus bIgnoreMdefRace, RC_Fish;
+ ">
+},
+{
+ Items: ["S_Tempest_Earring", "S_Tempest_Pendent", "S_M_Dragon_K_Weapon"]
+ Script: <"
+ bonus bMatk, 5;
+ if (getequiprefinerycnt(EQI_SHADOW_WEAPON, EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L) >= 25)
+ bonus bIgnoreMdefRace, RC_Dragon;
+ ">
+},
+{
+ Items: ["S_Tempest_Earring", "S_Tempest_Pendent", "S_M_Corrupt_Weapon"]
+ Script: <"
+ bonus bMatk, 5;
+ if (getequiprefinerycnt(EQI_SHADOW_WEAPON, EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L) >= 25)
+ bonus bIgnoreMdefRace, RC_Angel;
+ ">
+},
+{
+ Items: ["S_Tempest_Earring", "S_Tempest_Pendent", "S_M_Vibration_Weapon"]
+ Script: <"
+ bonus bMatk, 5;
+ if (getequiprefinerycnt(EQI_SHADOW_WEAPON, EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L) >= 25)
+ bonus bIgnoreMdefRace, RC_Formless;
+ ">
+},
+{
+ Items: ["S_Tempest_Earring", "S_Tempest_Pendent", "S_M_Holy_Water_Weapon"]
+ Script: <"
+ bonus bMatk, 5;
+ if (getequiprefinerycnt(EQI_SHADOW_WEAPON, EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L) >= 25)
+ bonus bIgnoreMdefRace, RC_Undead;
+ ">
+},
+{
+ Items: ["S_Tempest_Earring", "S_Tempest_Pendent", "S_M_Scissors_Weapon"]
+ Script: <"
+ bonus bMatk, 5;
+ if (getequiprefinerycnt(EQI_SHADOW_WEAPON, EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L) >= 25)
+ bonus bIgnoreMdefRace, RC_Plant;
+ ">
+},
+{
+ Items: ["S_Bearers_Armor", "S_Bearers_Shoes", "S_Bearers_Shield", "S_Bearers_Weapon", "S_Bearers_Earring", "S_Bearers_Pendent"]
+ Script: <"
+ .@refine = getequiprefinerycnt(EQI_SHADOW_ARMOR, EQI_SHADOW_WEAPON, EQI_SHADOW_SHIELD, EQI_SHADOW_SHOES, EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L);
+ bonus bAllStats, 1;
+ if (.@refine >= 45) {
+ bonus bMaxHPrate, (.@refine - 60);
+ sc_start4 SC_ENDURE, 1, 10, 0, 0, 1;
+ }
+ ">
+},
+{
+ Items: ["S_Hasty_Shoes", "S_Hasty_Armor"]
+ Script: <"
+ bonus bFlee, 5;
+ if (getequiprefinerycnt(EQI_SHADOW_SHOES, EQI_SHADOW_ARMOR) >= 15)
+ bonus bSpeedAddRate, 3;
+ ">
+},
+{
+ Items: ["S_Expert_Shoes", "S_Expert_Shield"]
+ Script: <"
+ bonus2 bExpAddRace, RC_All, ((getequiprefinerycnt(EQI_SHADOW_SHOES, EQI_SHADOW_SHIELD)) >= 15 ? 10 : 1);
+ ">
+},
+{
+ Items: ["S_Beginner_Shoes", "S_Beginner_Shield"]
+ Script: <"
+ bonus2 bExpAddRace, RC_All, ((getequiprefinerycnt(EQI_SHADOW_SHOES, EQI_SHADOW_SHIELD)) >= 15 ? 20 : 10);
+ ">
+},
+{
+ Items: ["S_Rookie_Shoes", "S_Rookie_Shield"]
+ Script: <"
+ bonus2 bExpAddRace, RC_All, ((getequiprefinerycnt(EQI_SHADOW_SHOES, EQI_SHADOW_SHIELD)) >= 15 ? 10 : 5);
+ ">
+},
+{
+ Items: ["S_Advanced_Shoes", "S_Advanced_Shield"]
+ Script: <"
+ bonus2 bExpAddRace, RC_All, ((getequiprefinerycnt(EQI_SHADOW_SHOES, EQI_SHADOW_SHIELD)) >= 15 ? 4 : 2);
+ ">
+},
+{
+ Items: ["S_Blitz_Earring", "S_Blitz_Pendent"]
+ Script: <"
+ if (getequiprefinerycnt(EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L) >= 15)
+ bonus bAspd, 1;
+ ">
+},
+{
+ Items: ["S_Force_Weapon", "S_Force_Earring", "S_Force_Pendant"]
+ Script: <"
+ .@refine = getequiprefinerycnt(EQI_SHADOW_WEAPON, EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L);
+ if (.@refine >= 25) {
+ bonus bAtkRate, 2;
+ } else if (.@refine >= 20) {
+ bonus bAtkRate, 1;
+ }
+ bonus bAtk2, 10;
+ ">
+},
+{
+ Items: ["S_Spirit_Weapon", "S_Spirit_Earring", "S_Spirit_Pendant"]
+ Script: <"
+ .@refine = getequiprefinerycnt(EQI_SHADOW_WEAPON, EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L);
+ if (.@refine >= 25) {
+ bonus bMatkRate, 2;
+ } else if (.@refine >= 20) {
+ bonus bMatkRate, 1;
+ }
+ bonus bMatk, 10;
+ ">
+},
+{
+ Items: ["S_Blitz_Shoes", "S_Blitz_Shield"]
+ Script: <"
+ bonus bFlee, 5;
+ if (getequiprefinerycnt(EQI_SHADOW_SHOES, EQI_SHADOW_SHIELD) >= 15) {
+ bonus bAspd, 1;
+ }
+ ">
+},
+{
+ Items: ["S_Titan_Earring", "S_Titan_Pendant"]
+ Script: <"
+ bonus bAtk, 5;
+ if (getequiprefinerycnt(EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L) >= 15) {
+ bonus2 bAddSize, Size_Large, 1;
+ }
+ ">
+},
+{
+ Items: ["S_Boned_Earring", "S_Boned_Pendant"]
+ Script: <"
+ bonus bAtk, 5;
+ if (getequiprefinerycnt(EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L) >= 15) {
+ bonus2 bAddSize, Size_Medium, 1;
+ }
+ ">
+},
+{
+ Items: ["S_Gigantic_Earring", "S_Gigantic_Pendant"]
+ Script: <"
+ bonus bAtk, 5;
+ if (getequiprefinerycnt(EQI_SHADOW_ACC_R, EQI_SHADOW_ACC_L) >= 15) {
+ bonus2 bAddSize, Size_Small, 1;
+ }
+ ">
+},
+{
+ Items: ["S_Caster_Shoes", "S_Caster_Shield", "S_Caster_Armor"]
+ Script: <"
+ bonus bUseSPrate, -1;
+ .@refine = getequiprefinerycnt(EQI_SHADOW_SHIELD, EQI_SHADOW_ARMOR, EQI_SHADOW_SHOES);
+ bonus bVariableCastrate, (.@refine) / 5;
+ if (.@refine >= 25) {
+ bonus bUseSPrate, -1;
+ }
+ ">
+},
+{
+ Items: ["S_Reload_Shoes", "S_Reload_Shield", "S_Reload_Armor"]
+ Script: <"
+ bonus bDelayrate, -1;
+ if (getequiprefinerycnt(EQI_SHADOW_SHIELD, EQI_SHADOW_ARMOR, EQI_SHADOW_SHOES) >= 25)
+ bonus bDelayrate, -5;
+ ">
+},
+{
+ Items: ["Geffenia_Book_Water", "Lacryma_Stick"]
+ Script: <"
+ .@r = (getequiprefinerycnt(EQI_HAND_L) * 4);
+ bonus2 bVariableCastrate, "WZ_STORMGUST", -.@r;
+ bonus2 bVariableCastrate, "WL_FROSTMISTY", -.@r;
+ bonus2 bVariableCastrate, "WL_JACKFROST", -.@r;
+ ">
+},
+)
diff --git a/db/re/item_combo_db.txt b/db/re/item_combo_db.txt
deleted file mode 100644
index 3cbaef807..000000000
--- a/db/re/item_combo_db.txt
+++ /dev/null
@@ -1,439 +0,0 @@
-// Item Combos Database
-//
-// Structure of Database:
-// ID:ID:ID:ID,{ Script }
-
-1166:2527,{ bonus2 bAddRace,RC_Dragon,5; }
-1219:5782,{ bonus bAtkRate,3; }
-1220:5782,{ bonus bAtkRate,3; }
-1221:5782,{ bonus bAtkRate,3; }
-1284:2892,{ bonus bBaseAtk,50; bonus2 bSkillAtk,AS_SONICBLOW,50; bonus bFlee,-30; }
-1285:2892,{ bonus bCritAtkRate,40; bonus bCritical,4; bonus bMaxHPrate,-10; }
-1287:15123,{ if(getequiprefinerycnt(EQI_HAND_R)>6) { autobonus2 "{ bonus bIgnoreDefRace,RC_NonBoss; }",20,3000,BF_WEAPON,"{}"; } }
-1298:4317,{ bonus bCritAtkRate,5; }
-1298:4521,{ bonus bCritAtkRate,5; }
-1387:19021,{ bonus2 bSkillAtk,WS_CARTTERMINATION,15+(getequiprefinerycnt(EQI_HAND_R)*5); }
-1407:5782,{ bonus bAtkRate,3; }
-1408:5782,{ bonus bAtkRate,3; }
-1409:5782,{ bonus bAtkRate,3; }
-1420:2115,{ bonus3 bAutoSpellWhenHit,HP_ASSUMPTIO,2,5; }
-1420:2133,{ bonus2 bAddRace, RC_All, 4; bonus bDef,2; }
-1421:2133,{ bonus2 bAddRace, RC_All, 4; bonus bDef,2; }
-1422:2133,{ bonus2 bAddRace, RC_All, 4; bonus bDef,2; }
-1428:2115,{ bonus3 bAutoSpellWhenHit,HP_ASSUMPTIO,2,5; }
-1433:2153,{ bonus2 bSkillAtk,CR_GRANDCROSS,10; bonus2 bSkillAtk,LG_RAYOFGENESIS,10; }
-1433:2153:18823:28372,{ bonus2 bSkillUseSP,CR_GRANDCROSS,30; bonus2 bSkillUseSP,LG_SHIELDPRESS,5; bonus2 bSkillUseSP,LG_BANISHINGPOINT,15; bonus2 bSkillUseSP,LG_CANNONSPEAR,10; }
-1433:28372,{ bonus2 bSkillAtk,LG_CANNONSPEAR,7*(getequiprefinerycnt(EQI_HAND_L)/2); }
-1472:2677,{ bonus bMatkRate,6; bonus bDex,2; bonus bVariableCastrate,-getequiprefinerycnt(EQI_HAND_R); }
-1472:2711,{ bonus bMatkRate,6; bonus bDex,2; bonus bVariableCastrate,-getequiprefinerycnt(EQI_HAND_R); }
-1473:2677,{ bonus bMatkRate,6; bonus bDex,2; bonus bVariableCastrate,-getequiprefinerycnt(EQI_HAND_R); }
-1473:2711,{ bonus bMatkRate,6; bonus bDex,2; bonus bVariableCastrate,-getequiprefinerycnt(EQI_HAND_R); }
-1474:2527,{ bonus2 bAddRace,RC_Dragon,5; }
-1477:2700,{ bonus2 bResEff,Eff_Confusion,9500; }
-1479:2700,{ bonus2 bResEff,Eff_Confusion,9500; }
-1564:2186,{ bonus bAspdRate,getequiprefinerycnt(EQI_HAND_R); }
-1535:4361,{ bonus bBreakArmorRate,900; bonus bBreakWeaponRate,900; }
-1572:2716:2717,{ bonus bInt,5; bonus bMaxHP,700; bonus bAspdRate,5; }
-1573:2334,{ bonus bMdef,8; bonus bMaxSPrate,10; bonus bInt,4; }
-1573:2372,{ bonus bMdef,8; bonus bMaxSPrate,10; bonus bInt,4; }
-1573:2716:2717,{ bonus bInt,5; bonus bMaxHP,700; bonus bAspdRate,5; }
-1590:4037,{ bonus bAspdRate,5; }
-1590:4117,{ bonus bAspdRate,5; }
-1590:4037:4117,{ bonus bAspd,1; }
-1598:4037,{ bonus bAspdRate,5; }
-1598:4117,{ bonus bAspdRate,5; }
-1598:4037:4117,{ bonus bAspd,1; }
-1615:18539,{ bonus bMatk,10*getequiprefinerycnt(EQI_HAND_R); bonus bVariableCastrate,-10; }
-1616:2515,{ bonus bSpeedRate,25; }
-1618:2509,{ bonus bMaxHP,300; bonus bMatkRate,getequiprefinerycnt(EQI_HAND_R)-5; if(getequiprefinerycnt(EQI_GARMENT) > 10) { bonus2 bSubEle,Ele_Neutral,30; } else { bonus2 bSubEle,Ele_Neutral,getequiprefinerycnt(EQI_GARMENT)*3; } }
-1618:2535,{ bonus bMatkRate,5; bonus2 bSubEle,Ele_Neutral,25; }
-1618:19020,{ bonus bMatk,getequiprefinerycnt(EQI_HAND_R)*10; if (getequiprefinerycnt(EQI_HAND_R)>=10) autobonus "{ bonus bVariableCastrate,-50; }",50,5000,BF_MAGIC,"{ specialeffect(EF_SUFFRAGIUM, AREA, playerattached()); }"; }
-1620:2509,{ bonus bMaxHP,300; bonus bMatkRate,getequiprefinerycnt(EQI_HAND_R)-5; if(getequiprefinerycnt(EQI_GARMENT) > 10) { bonus2 bSubEle,Ele_Neutral,30; } else { bonus2 bSubEle,Ele_Neutral,getequiprefinerycnt(EQI_GARMENT)*3; } }
-1620:2535,{ bonus bMatkRate,5; bonus2 bSubEle,Ele_Neutral,25; }
-1625:18542,{ bonus bHealPower,getequiprefinerycnt(EQI_HAND_R); }
-1629:5045,{ bonus bDex,2; bonus bInt,2; bonus bSPrecovRate,5; bonus bMatkRate,getequiprefinerycnt(EQI_HAND_R); }
-1631:2129,{ bonus2 bSkillAtk,PR_MAGNUS,20; bonus3 bAutoSpellWhenHit,PR_TURNUNDEAD,1,20; }
-1631:18542,{ bonus bHealPower,getequiprefinerycnt(EQI_HAND_R)*3; }
-1636:18539,{ bonus bMatk,10*getequiprefinerycnt(EQI_HAND_R); bonus bVariableCastrate,-10; }
-1636:18804,{ bonus bMatk,getequiprefinerycnt(EQI_HAND_R)*10; }
-1649:2198,{ if(getequiprefinerycnt(EQI_HAND_L)>8) { bonus bMatk,getequiprefinerycnt(EQI_HAND_R)*15; } if(getequiprefinerycnt(EQI_HAND_R)>9) { bonus bMatk,50; bonus bVariableCastrate,-10; } }
-1657:2471:2569:15029,{ bonus bHealPower,25; }
-1660:2471:2569:15029,{ bonus bHealPower,45; bonus3 bAutoSpellWhenHit,AB_SILENTIUM,1,10; }
-1662:18539,{ bonus bMatk,10*getequiprefinerycnt(EQI_HAND_R); bonus bVariableCastrate,-10; }
-1718:1774,{ bonus bLongAtkRate,50; }
-1723:2718,{ bonus bDex,1; bonus bMaxSP,50; bonus bSPrecovRate,10; }
-1726:1774,{ bonus bLongAtkRate,50; }
-1730:1752,{ bonus bLongAtkRate,25; }
-1731:1754,{ bonus bLongAtkRate,25; }
-1732:1756,{ bonus bLongAtkRate,25; bonus2 bAddEff,Eff_Stone,1000; }
-1733:1755,{ bonus bLongAtkRate,25; bonus3 bAutoSpell,NJ_HUUJIN,5,100; if(readparam(bInt)>39) bonus3 bAutoSpell,NJ_HUUJIN,5,200; }
-1734:1753,{ bonus bLongAtkRate,50; }
-1741:2748,{ bonus bAtk,25; bonus3 bAddEff,Eff_Curse,200,ATF_WEAPON|ATF_LONG|ATF_TARGET; }
-1746:1773,{ bonus bLongAtkRate,50; }
-1764:18541,{ bonus bCritAtkRate,5; }
-1775:18114,{ bonus bLongAtkRate,70; }
-1776:18114,{ bonus bLongAtkRate,40; }
-1935:2988,{ bonus2 bSkillAtk,CG_ARROWVULCAN,200; bonus2 bSkillUseSP,CG_ARROWVULCAN,20; }
-1990:2989,{ bonus2 bSkillAtk,CG_ARROWVULCAN,200; }
-2001:2677,{ bonus bMatkRate,10; bonus bDex,2; bonus2 bSubRace,RC_Demon,10; bonus2 bSubRace,RC_Undead,10; }
-2001:2711,{ bonus bMatkRate,10; bonus bDex,2; bonus2 bSubRace,RC_Demon,10; bonus2 bSubRace,RC_Undead,10; }
-2007:2467:2859:15025,{ bonus2 bMagicAtkEle,Ele_Wind,40; bonus2 bMagicAtkEle,Ele_Earth,-30; bonus2 bSubEle,Ele_Earth,-50; }
-2008:2468:2860:15026,{ bonus2 bMagicAtkEle,Ele_Water,40; bonus2 bMagicAtkEle,Ele_Wind,-30; bonus2 bSubEle,Ele_Wind,-50; }
-2009:2469:2861:15027,{ bonus2 bMagicAtkEle,Ele_Fire,40; bonus2 bMagicAtkEle,Ele_Water,-30; bonus2 bSubEle,Ele_Water,-50; }
-2010:2470:2862:15028,{ bonus2 bMagicAtkEle,Ele_Earth,40; bonus2 bMagicAtkEle,Ele_Fire,-30; bonus2 bSubEle,Ele_Fire,-50; }
-2011:2467:2859:15025,{ bonus2 bMagicAtkEle,Ele_Wind,60; bonus2 bMagicAtkEle,Ele_Earth,-60; bonus2 bSubEle,Ele_Earth,-50; }
-2012:2468:2860:15026,{ bonus2 bMagicAtkEle,Ele_Water,60; bonus2 bMagicAtkEle,Ele_Wind,-60; bonus2 bSubEle,Ele_Wind,-50; }
-2013:2469:2861:15027,{ bonus2 bMagicAtkEle,Ele_Fire,60; bonus2 bMagicAtkEle,Ele_Water,-60; bonus2 bSubEle,Ele_Water,-50; }
-2014:2470:2862:15028,{ bonus2 bMagicAtkEle,Ele_Earth,60; bonus2 bMagicAtkEle,Ele_Fire,-60; bonus2 bSubEle,Ele_Fire,-50; }
-2109:2717:2239,{ bonus bHPrecovRate,15; bonus bSPrecovRate,15; bonus bMatkRate,7; }
-2114:2353:5122,{ bonus bStr,2; bonus bDef,5; bonus bMdef,5; if(BaseClass==Job_Swordman) bonus bDef,6; }
-2115:2353:5124,{ bonus bDef,2-getequiprefinerycnt(EQI_HAND_L)-getequiprefinerycnt(EQI_HEAD_TOP); bonus bMdef,5+getequiprefinerycnt(EQI_HAND_L)+getequiprefinerycnt(EQI_HEAD_TOP); }
-2116:2355:2420:2521:5125,{ bonus bMaxHP,900; bonus bMaxSP,100; bonus3 bAutoSpellWhenHit,HP_ASSUMPTIO,1,30; }
-2121:2717:2239,{ bonus bHPrecovRate,15; bonus bSPrecovRate,15; bonus bMatkRate,7; }
-2123:2701,{ bonus bVariableCastrate,-10; }
-2123:2881,{ bonus bMatk,getrefine()*2; }
-2124:2702,{ bonus bAspdRate,10; bonus bShortWeaponDamageReturn,5; }
-2125:5782,{ bonus bDef,2; }
-2135:2426,{ bonus2 bAddEff,Eff_Blind,500; autobonus "{ bonus bFlee,20; }",200,10000,BF_WEAPON,"{ specialeffect(EF_INCAGILITY, AREA, playerattached()); }"; }
-2137:2353:5124,{ bonus bDef,2-getequiprefinerycnt(EQI_HAND_L)-getequiprefinerycnt(EQI_HEAD_TOP); bonus bMdef,5+getequiprefinerycnt(EQI_HAND_L)+getequiprefinerycnt(EQI_HEAD_TOP); }
-2153:28372,{ if(getequiprefinerycnt(EQI_HAND_L)>5) { bonus2 bSkillAtk,LG_SHIELDPRESS,(getequiprefinerycnt(EQI_HAND_L)*8)-40; } }
-2157:2905,{ bonus2 bAddRaceTolerance,RC_Insect,10; if (getequiprefinerycnt(EQI_HAND_L)>7) { bonus2 bMagicAddRace,RC_Insect,4; bonus2 bAddRaceTolerance,RC_Insect,20; } }
-2160:19021,{ bonus2 bSkillAtk,WS_CARTTERMINATION,15+(getequiprefinerycnt(EQI_HAND_R)*5); }
-2169:2491:2590:15051,{ bonus bMaxHPrate,20; bonus bMaxSPrate,10; }
-2171:15053,{ bonus bAgi,2; }
-2171:15056,{ bonus bAgi,2; }
-2173:15055,{ bonus bFlee,10; bonus bFlee2,10; }
-2183:15068:18776:20710:22015,{ bonus(bMaxHP, 900); bonus(bMaxSP, 100); bonus3(bAutoSpellWhenHit, HP_ASSUMPTIO, 1, 30); }
-2198:5966,{ if (isequipped(4441)) {} else { if(getequiprefinerycnt(EQI_HAND_L)>6) { bonus2 bSkillCooldown,WL_COMET,-20000; } if(getequiprefinerycnt(EQI_HAND_L)>9) { bonus2 bSkillCooldown,WL_COMET,-20000; } } }
-2254:18912,{ bonus2 bExpAddRace, RC_All, 5; }
-2269:5781,{ bonus bMaxSP,30; bonus bInt,1; }
-2269:5786,{ bonus bMatkRate,1; }
-2269:5891,{ bonus bAllStats,1; }
-2270:5781,{ bonus bLuk,1; bonus bFlee,2; }
-2270:5786,{ bonus bAtkRate,1; }
-2270:5891,{ bonus bAllStats,1; }
-2278:18527,{ bonus2 bAddMonsterDropItem,12192,20; }
-2281:18527,{ bonus bFlee,10; }
-2183:15068,{ bonus bAllStats,2; }
-2286:18539,{ bonus bUseSPrate,-3; }
-2312:2656,{ bonus bDef,5; bonus bMaxHP,150; }
-2313:2656,{ bonus bDef,5; bonus bMaxHP,150; }
-2337:2654,{ bonus bUseSPrate,-20; bonus bMaxHP,300; }
-2339:2522,{ bonus bAgi,5; bonus bFlee,10; }
-2339:2523,{ bonus bAgi,5; bonus bFlee,10; }
-2353:2417:2516,{ bonus bAgi,3; bonus bMaxHPrate,5; bonus bMaxSPrate,5; }
-2353:2418:2517,{ bonus bVit,5; bonus bHPrecovRate,10; bonus bSPrecovRate,10; }
-2353:5123,{ if(readparam(bDex)>69) bonus bUseSPrate,-10; }
-2353:5493,{ if(readparam(bDex)>69) bonus bUseSPrate,-10; }
-2353:13428,{ bonus bMaxSP,50; bonus2 bSkillAtk,KN_BOWLINGBASH,5; }
-2354:2419:2520:5128,{ 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; }
-2354:2493:2599:19043,{ 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; }
-2357:2421:2524:5171,{ bonus bAllStats,1; }
-2358:5153,{ bonus bLuk,6; bonus bFlee,5; bonus bInt,2; }
-2359:2654,{ bonus bUseSPrate,-20; bonus bMaxHP,300; }
-2365:2881,{ bonus bVariableCastrate,15; }
-2369:2428:2533:5306,{ bonus2 bSubRace,RC_DemiPlayer,10; bonus bMaxHPrate,20; bonus2 bResEff,Eff_Freeze,10000; skill WZ_FIREPILLAR,10; }
-2371:2522,{ bonus bAgi,5; bonus bFlee,10; }
-2371:2523,{ bonus bAgi,5; bonus bFlee,10; }
-2374:2729,{ bonus2 bAddRace, RC_All, 3; bonus bMatkRate,3; }
-2375:2729,{ bonus2 bAddRace, RC_All, 3; bonus bMatkRate,3; }
-2376:2435:2538,{ bonus2 bSubRace,RC_NonDemiPlayer,-300; bonus bVit,3; bonus bMaxHPrate,12; bonus bHealPower2,10; bonus bAddItemHealRate,10; autobonus2 "{ bonus2 bHPRegenRate,600,1000; }",5,10000,BF_WEAPON,"{ specialeffect(EF_HEAL, AREA, playerattached()); }"; }
-2377:2435:2538,{ bonus2 bSubRace,RC_NonDemiPlayer,-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:2435:2538,{ bonus2 bSubRace,RC_NonDemiPlayer,-300; bonus bAgi,3; bonus bMaxHPrate,12; bonus bCritical,5; bonus bAspdRate,5; autobonus "{ bonus2 bHPRegenRate,300,1000; }",10,10000,BF_WEAPON,"{ specialeffect(EF_HEAL, AREA, playerattached()); }"; }
-2379:2436:2539,{ bonus2 bSubRace,RC_NonDemiPlayer,-300; bonus bInt,3; bonus bMaxHPrate,12; bonus2 bResEff,Eff_Stun,2000; autobonus2 "{ bonus bDefEle,Ele_Ghost; }",30,10000,BF_WEAPON,"{ specialeffect(EF_ENERGYCOAT, AREA, playerattached()); }"; }
-2380:2436:2539,{ bonus2 bSubRace,RC_NonDemiPlayer,-300; bonus bInt,3; bonus bMaxHPrate,12; bonus2 bVariableCastrate,AL_HOLYLIGHT,-50; bonus bHealPower,6; autobonus2 "{ bonus bDefEle,Ele_Ghost; }",30,10000,BF_WEAPON,"{ specialeffect(EF_ENERGYCOAT, AREA, playerattached()); }"; }
-2381:2436:2539,{ bonus2 bSubRace,RC_NonDemiPlayer,-300; bonus bDex,3; bonus bMaxHPrate,12; bonus bLongAtkDef,10; bonus bDelayrate,-25; }
-2382:2437:2540,{ bonus2 bSubRace,RC_NonDemiPlayer,-300; bonus bDex,3; bonus bMaxHPrate,12; bonus bLongAtkDef,10; bonus bDelayrate,-25; }
-2387:2440:2744,{ bonus bMaxHPrate,7; bonus bMaxSPrate,7; bonus bVariableCastrate,-3; bonus bDelayrate,-15; }
-2390:2749,{ bonus bFlee2,5; }
-2394:2444:2549,{ bonus2 bAddRace, RC_All, 5; bonus bMatkRate,5; bonus2 bResEff,Eff_Freeze,10000; bonus2 bSkillHeal2,AM_POTIONPITCHER,3; bonus2 bSkillHeal2,AL_HEAL,3; bonus2 bSkillHeal2,PR_SANCTUARY,3; }
-2399:2553,{ bonus bAgi,5; bonus bFlee,15; }
-2408:2655,{ bonus bBaseAtk,50; bonus2 bAddDefClass,1196,20; bonus2 bAddDefClass,1197,20; }
-2424:2528,{ bonus bHPrecovRate,5; bonus bMaxHPrate,10; }
-2425:2529,{ bonus bFlee,10; }
-2425:2530,{ bonus bFlee,10; }
-2425:2551,{ bonus bFlee,10; }
-2433:2537,{ bonus bMaxHPrate,6; }
-2434:2529,{ bonus bFlee,10; }
-2434:2530,{ bonus bFlee,10; }
-2434:2551,{ bonus bFlee,10; }
-2441:2546,{ bonus bFlee,5; }
-2472:2570:15030:16013,{ bonus2 bAddRace,RC_Undead,15; bonus2 bMagicAddRace,RC_Undead,15; bonus2 bSkillAtk,AB_ADORAMUS,100; }
-2472:2570:15030:16018,{ bonus2 bAddRace,RC_Undead,30; bonus2 bMagicAddRace,RC_Undead,30; bonus2 bSkillAtk,AB_ADORAMUS,200; bonus bVariableCastrate,-50; }
-2475:2574:2883:15036,{ bonus bMaxHPrate,14; bonus2 bSkillAtk,RK_HUNDREDSPEAR,50; skill CR_AUTOGUARD,1; bonus bUseSPrate,10; bonus2 bSubEle,Ele_Neutral,10; }
-2476:2575:2884:15037,{ bonus2 bAddRace, RC_All, 10; bonus2 bSkillAtk,RK_SONICWAVE,100; bonus2 bSkillAtk,RK_WINDCUTTER,100; bonus3 bAutoSpell,RK_STORMBLAST,1,20; autobonus3 "{ bonus bAspd,2; }",1000,10000,LK_CONCENTRATION,"{ specialeffect(EF_ENHANCE, AREA, playerattached()); }"; }
-2477:2577:2886:15038,{ bonus bCritical,15; bonus bFlee,10; bonus bCritAtkRate,40; bonus2 bSkillAtk,GC_CROSSIMPACT,20; bonus bUseSPrate,10; }
-2478:2578:2887:15039,{ bonus2 bAddRace, RC_All, 10; bonus bMatkRate,10; if(readparam(bStr)>119) { bonus bBaseAtk,30; } bonus3 bAutoSpell,ASC_BREAKER,getskilllv(ASC_BREAKER),10; bonus bCritical,-20; }
-2479:2580:2890:15042,{ bonus bAspd,2; bonus bLongAtkRate,30; bonus3 bAutoSpell,AC_DOUBLE,3,10; bonus2 bSkillAtk,RA_ARROWSTORM,50; }
-2480:2581:2891:15043,{ bonus bMaxHPrate,15; bonus2 bSkillAtk,RA_CLUSTERBOMB,20; bonus bFlee2,20; bonus bLongAtkRate,-30; bonus bAspd,-7; }
-2483:2586:15046,{ bonus bVit,5; bonus2 bSubRace,RC_DemiPlayer,15; }
-2484:2586:15047,{ bonus bDex,5; bonus2 bSubRace,RC_DemiPlayer,15; }
-2485:2587:15048,{ bonus bInt,5; bonus bMdef,10; bonus2 bSubRace,RC_DemiPlayer,15; }
-2518:2648:2649:5126,{ bonus bInt,5; bonus bMdef,11; bonus bMaxSPrate,20; bonus bNoCastCancel,0; bonus bVariableCastrate,25; }
-2519:2650:2651:5127,{ bonus bStr,2; bonus bLuk,9; bonus bCritical,13; bonus bBaseAtk,18; bonus bFlee2,13; }
-2519:2900:2901:19044,{ bonus bStr,2; bonus bLuk,9; bonus bCritical,13; bonus bBaseAtk,18; bonus bFlee2,13; }
-2527:13001,{ bonus2 bAddRace,RC_Dragon,5; }
-2597:2616,{ bonus bCritAtkRate,5; bonus bCritical,10; if (getequiprefinerycnt(EQI_GARMENT)>=5) { bonus bCritAtkRate,3; } if (getequiprefinerycnt(EQI_GARMENT)>=7) { bonus bCritAtkRate,4;} }
-2597:18803,{ bonus bUseSPrate,-5; }
-2607:2677,{ bonus2 bSkillAtk,AL_HEAL,50; bonus2 bSkillAtk,PR_MAGNUS,30; bonus bSPrecovRate,9; }
-2607:2711,{ bonus2 bSkillAtk,AL_HEAL,50; bonus2 bSkillAtk,PR_MAGNUS,30; bonus bSPrecovRate,9; }
-2607:2786,{ bonus2 bSkillAtk,AL_HEAL,50; bonus2 bSkillAtk,PR_MAGNUS,30; bonus bSPrecovRate,9; }
-2608:2677,{ bonus2 bSkillAtk,AL_HEAL,50; bonus2 bSkillAtk,PR_MAGNUS,30; bonus bSPrecovRate,9; }
-2608:2711,{ bonus2 bSkillAtk,AL_HEAL,50; bonus2 bSkillAtk,PR_MAGNUS,30; bonus bSPrecovRate,9; }
-2608:2786,{ bonus2 bSkillAtk,AL_HEAL,50; bonus2 bSkillAtk,PR_MAGNUS,30; bonus bSPrecovRate,9; }
-2615:5890,{ bonus bMdef,7; bonus bDef,7; }
-2616:5890,{ bonus bCritical,7; }
-2620:2746,{ bonus2 bAddSize,Size_Medium,8; bonus bAspdRate,3; }
-2620:2747,{ bonus2 bAddSize,Size_Large,8; bonus bHit,3; bonus bVariableCastrate,-3; }
-2626:2677,{ bonus2 bSkillAtk,AL_HEAL,50; bonus2 bSkillAtk,PR_MAGNUS,30; bonus bSPrecovRate,9; }
-2626:2711,{ bonus2 bSkillAtk,AL_HEAL,50; bonus2 bSkillAtk,PR_MAGNUS,30; bonus bSPrecovRate,9; }
-2626:2786,{ bonus2 bSkillAtk,AL_HEAL,50; bonus2 bSkillAtk,PR_MAGNUS,30; bonus bSPrecovRate,9; }
-2678:2679,{ bonus4 bAutoSpell,MO_EXTREMITYFIST,1,3,1; bonus3 bAutoSpell,PR_LEXAETERNA,1,20; bonus3 bAutoSpell,AS_SONICBLOW,5,50; bonus3 bAutoSpell,MO_INVESTIGATE,5,20; bonus3 bAutoSpell,ASC_METEORASSAULT,2,50; }
-2679:2792,{ bonus4 bAutoSpell,MO_EXTREMITYFIST,1,3,1; bonus3 bAutoSpell,PR_LEXAETERNA,1,20; bonus3 bAutoSpell,AS_SONICBLOW,5,50; bonus3 bAutoSpell,MO_INVESTIGATE,5,20; bonus3 bAutoSpell,ASC_METEORASSAULT,2,50; }
-2701:2881,{ bonus bMatk,20; }
-2720:2772,{ bonus2 bAddRace, RC_All, 5; bonus bMatkRate,3; bonus bHealPower,5; }
-2721:2772,{ bonus2 bAddRace, RC_All, 5; bonus bMatkRate,3; bonus bHealPower,5; }
-2722:2772,{ bonus2 bAddRace, RC_All, 5; bonus bMatkRate,3; bonus bHealPower,5; }
-2723:2772,{ bonus2 bAddRace, RC_All, 5; bonus bMatkRate,3; bonus bHealPower,5; }
-2724:2772,{ bonus2 bAddRace, RC_All, 5; bonus bMatkRate,3; bonus bHealPower,5; }
-2725:2772,{ bonus2 bAddRace, RC_All, 5; bonus bMatkRate,3; bonus bHealPower,5; }
-2726:2727,{ bonus bUseSPrate,-25; }
-2733:2772,{ bonus2 bAddRace, RC_All, 5; bonus bMatkRate,3; bonus bHealPower,5; }
-2747:13061,{ bonus bHit,5; bonus bMatk,5; bonus2 bSkillUseSP,SC_ENERVATION,20; bonus2 bSkillUseSP,SC_GROOMY,20;}
-2777:2778:5479,{ bonus bMaxHP,300; bonus bMatkRate,5; bonus2 bSubEle,Ele_Neutral,5; }
-2779:2780:5482,{ bonus bMatkRate,10; bonus bInt,5; bonus2 bSubRace,RC_Angel,10; }
-2779:2780:5577,{ bonus bMatkRate,10; bonus bInt,5; bonus2 bSubRace,RC_Angel,10; }
-2950:15067:20709:22012,{ bonus2 bExpAddRace,RC_All,10; }
-2963:15073,{ bonus bAspdRate,5; }
-2963:15074,{ bonus bDelayrate,-5; bonus2 bAddRaceTolerance,RC_DemiPlayer,5; }
-2964:15073,{ bonus bDelayrate,-5; bonus2 bAddRaceTolerance,RC_DemiPlayer,5; }
-2964:15074,{ bonus bVariableCastrate,-5; }
-2997:2999,{ bonus bMatkRate,10; bonus bAtkRate,10; }
-4001:4197,{ bonus bFlee,18; }
-4006:4266,{ bonus bFlee,18; }
-4009:4179,{ bonus bFlee,18; }
-4014:4306,{ bonus bFlee,18; }
-4015:5967,{ bonus2 bSubEle,Ele_All,5; }
-4021:4211,{ bonus bFlee,18; }
-4025:4222,{ bonus2 bAddEffWhenHit,Eff_Sleep,600; }
-4028:4296,{ bonus bStr,3; }
-4029:4183,{ bonus bFlee,18; }
-4031:4161,{ bonus bDef,3; bonus bVit,3; }
-4036:4186:4233:4281:4343,{ bonus bStr,4; bonus bMaxHPrate,7; bonus bMaxSPrate,7; bonus2 bSkillAtk,MC_MAMMONITE,20; bonus bSPDrainValue,1; if(BaseJob==Job_Alchemist) { bonus3 bAutoSpell,BS_ADRENALINE,1,10; bonus2 bAddMonsterDropItem,7139,3; bonus2 bAddMonsterDropItem,905,10; } }
-4039:4210:4230:4257:4348,{ bonus bStr,6; bonus bAgi,4; bonus2 bSkillAtk,RG_BACKSTAP,10; if(getskilllv(RG_STRIPARMOR)==5) bonus3 bAutoSpell,RG_STRIPARMOR,5,50; if(BaseJob==Job_Rogue) { bonus bUseSPrate,-20; bonus3 bAutoSpell,RG_INTIMIDATE,1,-20; } }
-4072:21013,{ bonus2 bSubSize,Size_Large,15; bonus2 bSubSize,Size_Small,15; }
-4074:4162,{ bonus2 bAddEffWhenHit,Eff_Blind,600; }
-4090:4212:4328,{ bonus bAllStats,1; }
-4106:4248,{ bonus bPerfectHitAddRate,20; }
-4127:4166,{ bonus2 bAddEffWhenHit,Eff_Curse,600; }
-4140:18574,{ bonus2 bAddRace,RC_Boss,5; if (getequiprefinerycnt(EQI_HEAD_TOP)>=11) bonus2 bSubRace,RC_NonBoss,5; }
-4152:5967,{ bonus2 bAddItemHealRate,Apple_Juice,1000; bonus2 bAddItemHealRate,Banana_Juice,1000; bonus2 bAddItemHealRate,Carrot_Juice,1000; }
-4153:4247:4273,{ bonus3 bAddMonsterDropItem,544,RC_Fish,3000; bonus2 bAddEle,Ele_Water,30; }
-4161:5932,{ bonus4 bAutoSpell,PR_GLORIA,5,10,0; }
-4163:5967,{ bonus bAspdRate,3; bonus bAspd,1; bonus bAtkRate,-5; if(getiteminfo(getequipid(EQI_HAND_R),11)==11) { if(getequiprefinerycnt(EQI_HAND_R)>8) bonus bAspd,1; } }
-4168:4169,{ bonus bMaxHPrate,20; bonus bMaxSPrate,20; bonus bVariableCastrate,-10; }
-4172:4210:4230:4257:4272,{ bonus bAgi,5; bonus bStr,5; bonus bAspdRate,5; bonus bSpeedRate,25; bonus2 bSPDrainValue,1,0; if(BaseClass==Job_Thief) bonus bNoGemStone,0; }
-4178:4199:4234:4252:4297,{ bonus bAgi,5; bonus bDex,3; bonus bLongAtkRate,20; bonus bPerfectHitAddRate,20; if(BaseClass==Job_Archer) { bonus2 bExpAddRace,RC_Brute,5; bonus2 bWeaponComaRace,RC_Brute,100; } }
-4178:4234:4252:4297:4381,{ bonus bDex,5; bonus2 bSkillAtk,CG_ARROWVULCAN,5; bonus2 bSkillAtk,DC_THROWARROW,10; bonus2 bSkillAtk,BA_MUSICALSTRIKE,10; if(BaseJob==Job_Bard||BaseJob==Job_Dancer) bonus3 bAutoSpellWhenHit,CG_TAROTCARD,2,50; }
-4185:4217:4280:4293:4312,{ bonus bVit,10; bonus bVariableCastrate,-10; bonus bUseSPrate,-10; if(BaseClass==Job_Acolyte) { bonus2 bExpAddRace,RC_Undead,5; bonus2 bExpAddRace,RC_Demon,5; bonus2 bSubRace,RC_Undead,30; bonus2 bSubRace,RC_Demon,30; } }
-4185:4293:4312:4332,{ bonus bStr,3; bonus bMaxSP,80; bonus bBaseAtk,25; bonus3 bAutoSpell,AL_CRUCIS,5,10; bonus2 bSkillAtk,MO_EXTREMITYFIST,10; if(BaseJob==Job_Monk) { bonus bUseSPrate,-10; bonus bNoCastCancel,0; } }
-4186:4206:4233:4281:4321,{ bonus bLuk,10; bonus2 bSPDrainValue,2,0; bonus2 bSkillAtk,42,20; if(BaseClass==Job_Merchant) { bonus2 bAddMonsterDropItem,617,5; bonus bMagicDamageReturn,20; } }
-4191:4208:4258:4309:4325:4327,{ bonus bMaxHP,500; bonus bDef,5; bonus bMdef,5; bonus2 bSkillAtk,14,10; bonus2 bSkillAtk,19,10; bonus2 bSkillAtk,20,10; if(BaseClass==Job_Mage) { bonus bMatkRate,3; bonus bVariableCastrate,-15; } }
-4193:4294,{ bonus bMaxHP,300; bonus bMaxSP,60; }
-4208:4258:4325:4327:4382,{ bonus bInt,3; bonus2 bSkillAtk,WZ_HEAVENDRIVE,10; bonus2 bSkillAtk,MG_THUNDERSTORM,10; if(BaseJob==Job_Sage) { bonus bMagicDamageReturn,20; bonus2 bAddMonsterDropItem,716,100; bonus2 bAddMonsterDropItem,715,100; bonus bVariableCastrate,-20; } }
-4218:4269,{ bonus bHPrecovRate,30; bonus bSPrecovRate,30; bonus bVit,4; bonus bInt,4; }
-4220:4246:4311:4319:4331,{ bonus bStr,10; bonus bMaxHPrate,20; bonus bHPrecovRate,50; bonus3 bAutoSpell,BS_WEAPONPERFECT,1,3; bonus2 bAddMonsterDropItem,501,500; if(BaseClass==Job_Swordman) { bonus2 bAddItemHealRate,Red_Potion,50; bonus2 bAddItemHealRate,Yellow_Potion,50; bonus2 bAddItemHealRate,Orange_Potion,50; bonus2 bAddItemHealRate,White_Potion,50; } }
-4229:4244:4299:4313,{ bonus bDef,3; bonus bMdef,3; }
-4237:4238,{ bonus3 bAutoSpell,MG_LIGHTNINGBOLT,5,20; }
-4268:4277,{ bonus bBaseAtk,20; bonus bLuk,3; }
-4311:4319:4331:4371,{ bonus bInt,1; bonus bStr,1; bonus bDef,2; bonus bSPrecovRate,10; bonus2 bSkillAtk,PA_SHIELDCHAIN,10; bonus2 bSkillAtk,PA_SACRIFICE,10; bonus bVariableCastrate,-10; if(BaseJob==Job_Crusader) bonus bDefEle,Ele_Holy; }
-4323:4324,{ bonus3 bAutoSpell,MG_FROSTDIVER,3,250; }
-4335:21012,{ bonus3 bAutoSpell,WZ_EARTHSPIKE,5,20+(getequiprefinerycnt(EQI_HAND_R)); }
-4345:21012,{ bonus3 bAutoSpell,MG_LIGHTNINGBOLT,5,20+(getequiprefinerycnt(EQI_HAND_R)); }
-4350:21012,{ bonus3 bAutoSpell,MG_COLDBOLT,5,20+(getequiprefinerycnt(EQI_HAND_R)); }
-4380:21012,{ bonus3 bAutoSpell,MG_FIREBOLT,5,20+(getequiprefinerycnt(EQI_HAND_R)); }
-4388:21012,{ bonus3 bAutoSpell,MG_SOULSTRIKE,5,20+(getequiprefinerycnt(EQI_HAND_R)); }
-4435:4436,{ bonus2 bSPGainRace,RC_DemiPlayer,2; }
-4463:5966,{ if(getiteminfo(getequipid(EQI_HAND_R),11)==5||getiteminfo(getequipid(EQI_HAND_R),11)==23||getiteminfo(getequipid(EQI_HAND_R),11)==10) { bonus2 bMagicAddRace,RC_DemiPlayer,getequipid(EQI_HAND_R)*2; bonus2 bMagicAddRace,RC_Player,getequipid(EQI_HAND_R)*2; } }
-4505:4508,{ bonus3 bAutoSpell,NPC_DRAGONFEAR,2,100+(getrefine()*10); }
-4507:19023,{ bonus2 bAddRace2,7,30; }
-4509:19023,{ bonus2 bSubRace,RC_Insect,10; bonus2 bResEff,Eff_Confusion,10000; }
-4517:5967,{ bonus bInt,1; bonus bCritAtkRate,5; if(BaseClass==Job_Archer) { bonus bCritAtkRate,10; } }
-4606:20778,{ bonus bMaxSPrate,44; bonus bSPGainValue,-(20+(getequiprefinerycnt(EQI_GARMENT)/2)); }
-4608:4609,{ bonus2 bAddSize,Size_Medium,15; bonus2 bAddSize,Size_Large,15; bonus2 bSubSize,Size_Medium,5; bonus2 bSubSize,Size_Large,5; }
-4635:4636,{ bonus2 bResEff,Eff_Burning,10000; }
-4642:4646,{ bonus bAtkRate,10; bonus bMatkRate,10; }
-4643:4646,{ bonus bAtkRate,10; bonus bMatkRate,10; }
-4644:4646,{ bonus bAtkRate,10; bonus bMatkRate,10; }
-4645:4646,{ bonus bAtkRate,10; bonus bMatkRate,10; }
-4653:4654,{ bonus2 bSubRace,RC_Brute,5; bonus2 bSubRace,RC_Undead,5; bonus2 bIgnoreMdefRate,50,RC_Brute; bonus2 bIgnoreMdefRate,50,RC_Undead; }
-4653:4655,{ bonus2 bSubRace,RC_Brute,5; bonus2 bSubRace,RC_Undead,5; bonus2 bIgnoreDefRate,50,RC_Brute; bonus2 bIgnoreDefRate,50,RC_Undead; }
-//4656:4657,{ bonus2 bSubEle,Ele_Neutral,5; /* Increase the probability of causing Sleep to all targets on 11x11 cells. */ }
-5007:18913,{ bonus2 bExpAddRace, RC_All, 5; }
-5021:18824,{ bonus bMaxHP,100; bonus2 bSubEle,Ele_Neutral,getequiprefinerycnt(EQI_HEAD_TOP); }
-5040:5442,{ bonus bAspdRate,3; bonus bVariableCastrate,3; }
-5040:18672,{ bonus bSPrecovRate,3; }
-5040:18673,{ bonus bHealPower,10; }
-5068:5653,{ bonus bStr,1; bonus bAtkRate,5; }
-5074:5653,{ bonus bStr,1; bonus bAspdRate,2; }
-5086:18527,{ bonus2 bAddItemHealRate,12192,200; }
-5170:19024,{ bonus bAspdRate,5; if(getequiprefinerycnt(EQI_HEAD_TOP)>6) bonus bAspdRate,5; if(getequiprefinerycnt(EQI_HEAD_TOP)>8) bonus bMaxHPrate,5; }
-5176:18527,{ bonus bAspdRate,5; }
-5184:5657,{ bonus bLongAtkRate,getequiprefinerycnt(EQI_HEAD_TOP); }
-//5206:5768,{ bonus bDex,1; if(getequiprefinerycnt(EQI_HEAD_TOP) > 4) bonus bDelayrate,4-getequiprefinerycnt(EQI_HEAD_TOP); }
-5358:5653,{ bonus bAgi,1; bonus bFlee,3; }
-//5359:5657,{ bonus bLongAtkRate,getequiprefinerycnt(EQI_HEAD_TOP); }
-5574:5073,{ bonus bDex, 2; bonus bDef, 2; }
-5401:5653,{ bonus bInt,1; bonus bMatkRate,2; }
-5470:5653,{ bonus bDex,1; bonus bLongAtkRate,3; }
-5690:13428,{ bonus2 bAddRace,RC_DemiPlayer,10; bonus bHit,10; }
-5890:28306,{ bonus2 bAddRace, RC_All, 3; }
-5932:1737,{ if (Class == Job_Ranger || Class == Job_Ranger_T) skill HT_BLITZBEAT,5*getequiprefinerycnt(EQI_HAND_R); }
-//5967:28321,{ skill HT_BLITZBEAT,-200; }
-13027:15044,{ bonus3 bAddMonsterDropItem,929,RC_Brute,100+(getequiprefinerycnt(EQI_HAND_R)*10); bonus3 bAddMonsterDropItem,929,RC_DemiPlayer,100+(getequiprefinerycnt(EQI_HAND_R)*10); bonus3 bAddMonsterDropItem,970,RC_Brute,20+(getequiprefinerycnt(EQI_HAND_R)*2); bonus3 bAddMonsterDropItem,970,RC_DemiPlayer,20+(getequiprefinerycnt(EQI_HAND_R)*2); }
-13034:13035,{ bonus bMaxSP,20; bonus bMaxHPrate,5; bonus bHit,10; bonus2 bAddSize,Size_Large,30; autobonus "{ bonus bAspdRate,100; }",1,7000,BF_WEAPON,"{ specialeffect(EF_POTION_BERSERK, AREA, playerattached()); }"; }
-13035:28704,{ bonus bMaxSP,20; bonus bMaxHPrate,5; bonus bHit,10; bonus2 bAddSize,Size_Large,30; autobonus "{ bonus bAspdRate,100; }",1,7000,BF_WEAPON,"{ specialeffect(EF_POTION_BERSERK, AREA, playerattached()); }"; }
-15041:18659,{ bonus2 bAddEle,Ele_Earth,10; bonus bDefEle,Ele_Fire; }
-15061:19026,{ bonus2 bAddRaceTolerance,RC_Fish,10+getequiprefinerycnt(EQI_ARMOR); }
-15068:20710,{ bonus(bAgi, 5); bonus(bFlee, 10); }
-15128:20773,{ bonus bDelayrate,-10; bonus bFlee2,6; if(BaseLevel>130) { bonus bDelayrate,-10;} }
-18507:18539,{ bonus bUseSPrate,-3; }
-18607:18672,{ bonus bSPrecovRate,3; }
-18607:18673,{ bonus bHealPower,10; }
-18823:28372,{ bonus2 bSkillVariableCast,CR_GRANDCROSS,-2000; bonus2 bSkillUseSP,LG_RAYOFGENESIS,10; bonus2 bSkillAtk,CR_GRANDCROSS,BaseLevel; bonus2 bSkillAtk,LG_RAYOFGENESIS,BaseLevel/30; }
-18823:2153:1433,{ bonus2 bSkillAtk,LG_CANNONSPEAR,20; bonus2 bSkillAtk,LG_BANISHINGPOINT,20; bonus2 bSkillAtk,LG_SHIELDPRESS,20; }
-15090:18820:20721:22033,{ bonus2 bSubEle,Ele_Neutral,15; bonus3 bAutoSpellWhenHit,WL_DRAINLIFE,3,100; }
-15091:18820:20721:22033,{ bonus2 bSubEle,Ele_Neutral,15; bonus bMaxHPrate,25; bonus bMaxSPrate,25; bonus bMatkRate,10; }
-15117:20744:22047,{ bonus bMaxHP,25; bonus bMaxSP,25; bonus bSpeedRate,25; if (getequiprefinerycnt(EQI_GARMENT)+getequiprefinerycnt(EQI_SHOES)+getequiprefinerycnt(EQI_ARMOR) >= 30) { bonus bMaxHP,5; bonus bMaxSP,5; } }
-18510:18511,{ bonus2 bAddRace,RC_Angel,3; }
-18728:15061:2495:20700,{ bonus bAllStats, 1; bonus2 bSubEle, Ele_Water, 50; }
-18776:20710,{ bonus(bBaseAtk, 10); }
-18776:22015,{ bonus(bMatk, 20); }
-18824:18825,{ bonus bMaxHP,100; bonus2 bSubEle,Ele_Neutral,getequiprefinerycnt(EQI_HEAD_TOP); }
-18874:2109:2971,{ bonus bHPrecovRate,15; bonus bSPrecovRate,15; bonus bMatkRate,7; }
-18997:28326:28327,{ bonus bSpeedRate,10; bonus bBaseAtk,50; bonus bMatk,50; if(getequiprefinerycnt(EQI_HEAD_TOP)>=9){ bonus bMaxHPrate,10; bonus bMaxSPrate,50; } }
-19026:15138,{ bonus2 bAddRaceTolerance, RC_Fish, 10 + getequiprefinerycnt(EQI_ARMOR); }
-19026:20756,{ .@r = getequiprefinerycnt(EQI_GARMENT); bonus2 bSPGainRace, RC_Fish, 10; bonus3 bAddMonsterDropItem, Shusi, RC_Fish, (5 + .@r); bonus3 bAddMonsterDropItem, Fish_Slice, RC_Fish, (5 + .@r); bonus2 bAddItemHealRate, Shusi, 5; bonus2 bAddItemHealRate, Fish_Slice, 5; bonus bHPrecovRate, (5 + .@r); }
-19026:22059,{ bonus2 bCriticalAddRace, RC_Fish, 10 + getequiprefinerycnt(EQI_SHOES); }
-19026:15138:22059:20756,{ bonus bMaxHP, 1000; bonus bMaxSP, 100; bonus2 bExpAddRace, RC_Fish, 20; bonus2 bAddRace, RC_Fish, 50; bonus2 bMagicAddRace, RC_Fish, 50; bonus2 bSubEle, Ele_Water, 50; }
-19827:20763,{ bonus2 bAddRaceTolerance,RC_Player,4; }
-20717:22000,{ bonus bMaxHPrate,15; bonus bMaxSPrate,5; }
-20717:22001,{ bonus bMaxHPrate,15; bonus bMaxSPrate,5; }
-20717:22002,{ bonus bMaxHPrate,15; bonus bMaxSPrate,5; }
-20717:22003,{ bonus bMaxHPrate,15; bonus bMaxSPrate,5; }
-20717:22004,{ bonus bMaxHPrate,15; bonus bMaxSPrate,5; }
-20717:22005,{ bonus bMaxHPrate,15; bonus bMaxSPrate,5; }
-20717:22006,{ bonus bMaxHPrate,15; bonus bMaxSPrate,5; }
-20717:22007,{ bonus bMaxHPrate,15; bonus bMaxSPrate,5; }
-20717:22008,{ bonus bMaxHPrate,15; bonus bMaxSPrate,5; }
-20717:22009,{ bonus bMaxHPrate,15; bonus bMaxSPrate,5; }
-20717:22010,{ bonus bMaxHPrate,15; bonus bMaxSPrate,5; }
-20717:22011,{ bonus bMaxHPrate,15; bonus bMaxSPrate,5; }
-20718:22000,{ bonus bMaxHPrate,15; bonus bMaxSPrate,5; }
-20718:22001,{ bonus bMaxHPrate,15; bonus bMaxSPrate,5; }
-20718:22002,{ bonus bMaxHPrate,15; bonus bMaxSPrate,5; }
-20718:22003,{ bonus bMaxHPrate,15; bonus bMaxSPrate,5; }
-20718:22004,{ bonus bMaxHPrate,15; bonus bMaxSPrate,5; }
-20718:22005,{ bonus bMaxHPrate,15; bonus bMaxSPrate,5; }
-20718:22006,{ bonus bMaxHPrate,15; bonus bMaxSPrate,5; }
-20718:22007,{ bonus bMaxHPrate,15; bonus bMaxSPrate,5; }
-20718:22008,{ bonus bMaxHPrate,15; bonus bMaxSPrate,5; }
-20718:22009,{ bonus bMaxHPrate,15; bonus bMaxSPrate,5; }
-20718:22010,{ bonus bMaxHPrate,15; bonus bMaxSPrate,5; }
-20718:22011,{ bonus bMaxHPrate,15; bonus bMaxSPrate,5; }
-20732:28101,{ bonus2 bAddRace, RC_All, 25; }
-22016:28320,{ bonus2 bAddRace,RC_DemiPlayer,getequiprefinerycnt(EQI_SHOES); bonus2 bAddRace,RC_Player,getequiprefinerycnt(EQI_SHOES); }
-28326:28327,{ bonus bInt,8; bonus bStr,8; }
-
-// Shadow Equipment
-24012:24013:24014:24015:24016:24017,{ bonus bAllStats,9; }
-24018:24019:24020,{ if(getequiprefinerycnt(EQI_SHADOW_ACC_R) + getequiprefinerycnt(EQI_SHADOW_ACC_L) + getequiprefinerycnt(EQI_SHADOW_WEAPON) >= 23) { bonus bAtkRate,1; } }
-24021:24022:24023,{ if(getequiprefinerycnt(EQI_SHADOW_ACC_R) + getequiprefinerycnt(EQI_SHADOW_ACC_L) + getequiprefinerycnt(EQI_SHADOW_WEAPON) >= 23) { bonus bMatkRate,1; } }
-24025:24028,{ .@r = getequiprefinerycnt(EQI_SHADOW_ARMOR) + getequiprefinerycnt(EQI_SHADOW_SHOES); bonus bMaxHP,.@r; bonus bMaxSP,.@r; if(.@r >= 15) { bonus bMaxHPrate,1; } }
-24026:24027,{ .@r = getequiprefinerycnt(EQI_SHADOW_ARMOR) + getequiprefinerycnt(EQI_SHADOW_SHIELD); bonus bDef,.@r; if(.@r >= 15) { bonus2 bSubEle,0,1; } }
-24029:24031,{ .@r = getequiprefinerycnt(EQI_SHADOW_ARMOR) + getequiprefinerycnt(EQI_SHADOW_WEAPON); bonus bBaseAtk,.@r; if(.@r >= 15) { bonus bLongAtkRate,1; } }
-24030:24032,{ .@r = getequiprefinerycnt(EQI_SHADOW_ARMOR) + getequiprefinerycnt(EQI_SHADOW_WEAPON); bonus bCritical,.@r; bonus bBaseAtk,.@r; if(.@r >= 15) { bonus bCritAtkRate,1; } }
-24034:24040,{ bonus bLuk,1; }
-24035:24041,{ bonus bStr,1; }
-24036:24042,{ bonus bInt,1; }
-24037:24043,{ bonus bDex,1; }
-24038:24044,{ bonus bVit,1; }
-24039:24045,{ bonus bAgi,1; }
-24046:24051,{ bonus2 bSubEle,Ele_Neutral,1; if(getequiprefinerycnt(EQI_SHADOW_ACC_R) + getequiprefinerycnt(EQI_SHADOW_ACC_L) >= 15) { bonus2 bSubEle,Ele_Neutral,1; } }
-24052:24062,{ bonus2 bExpAddRace,RC_DemiPlayer,3; }
-24053:24063,{ bonus2 bAddRace,RC_Boss,5; bonus2 bMagicAddRace,RC_Boss,5; }
-24054:24065,{ bonus2 bExpAddRace,RC_Brute,3; }
-24055:24066,{ bonus2 bExpAddRace,RC_Insect,3; }
-24056:24067,{ bonus2 bExpAddRace,RC_Fish,3; }
-24057:24071,{ bonus2 bExpAddRace,RC_Dragon,3; }
-24058:24068,{ bonus2 bExpAddRace,RC_Angel,3; }
-24059:24069,{ bonus2 bExpAddRace,RC_Formless,3; }
-24060:24070,{ bonus2 bExpAddRace,RC_Undead,3; }
-24061:24064,{ bonus2 bExpAddRace,RC_Plant,3; }
-24072:24075,{ bonus bMaxHPrate,1; bonus bMaxSPrate,1; }
-24073:24076,{ bonus bMaxHPrate,1; bonus bMaxSPrate,1; }
-24074:24077,{ bonus bMaxHPrate,1; bonus bMaxSPrate,1; }
-24078:24079:24080,{ bonus3 bSPDrainRate,10,1+(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)/10),0; }
-24081:24082:24083,{ bonus3 bHPDrainRateRace,11,40,2+(getequiprefinerycnt(EQI_SHADOW_ARMOR)+getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_SHOES)/5); }
-24084:24085:24086:24087:24088:24089,{ bonus bAllStats,1; .@r = getequiprefinerycnt(EQI_SHADOW_ARMOR)+getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_SHOES)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L); if (.@r >= 45) { bonus bNoGemStone,1; } bonus bUseSPrate,100-.@r; }
-24090:24091:24092,{ bonus bDef,5; if (getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_ARMOR)+getequiprefinerycnt(EQI_SHADOW_SHOES) >= 20) bonus2 bResEff,Eff_Stone,100; }
-24090:24093:24094,{ bonus bDef,5; if (getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_ARMOR)+getequiprefinerycnt(EQI_SHADOW_SHOES) >= 20) bonus2 bResEff,Eff_Sleep,100; }
-24090:24095:24096,{ bonus bDef,5; if (getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_ARMOR)+getequiprefinerycnt(EQI_SHADOW_SHOES) >= 20) bonus2 bResEff,Eff_Silence,100; }
-24090:24097:24098,{ bonus bDef,5; if (getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_ARMOR)+getequiprefinerycnt(EQI_SHADOW_SHOES) >= 20) bonus2 bResEff,Eff_Blind,100; }
-24090:24099:24100:24101,{ bonus bDef,4; if (getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_L)+getequiprefinerycnt(EQI_SHADOW_ACC_R) >= 30) bonus2 bResEff,Eff_Freeze,100; }
-24090:24102:24103,{ bonus bDef,5; if (getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_ACC_L)+getequiprefinerycnt(EQI_SHADOW_ACC_R) >= 20) bonus2 bResEff,Eff_Bleeding,100; }
-24090:24104:24105:24106,{ bonus bDef,4; if (getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_L)+getequiprefinerycnt(EQI_SHADOW_ACC_R) >= 30) bonus2 bResEff,Eff_Stun,100; }
-24090:24107:24108,{ bonus bDef,5; if (getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_ACC_L)+getequiprefinerycnt(EQI_SHADOW_ACC_R) >= 20) bonus2 bResEff,Eff_Curse,100; }
-24109:24110:24048,{ bonus bNoCastCancel,1; bonus bVariableCastrate,40-(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)); }
-24111:24112:24113,{ bonus bNoCastCancel,1; bonus bUseSPrate,40-getequiprefinerycnt(EQI_SHADOW_SHIELD)-getequiprefinerycnt(EQI_SHADOW_ARMOR)-getequiprefinerycnt(EQI_SHADOW_SHOES); }
-24150:24151,{ bonus bAtkRate,1; if (getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L) >= 15) bonus bNoSizeFix,1; }
-24152:24153,{ bonus bAtk,getequiprefinerycnt(EQI_SHADOW_WEAPON); if (getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R) >= 15) bonus bUnbreakableWeapon,1; }
-24154:24155,{ bonus bDef,getequiprefinerycnt(EQI_SHADOW_ARMOR); if (getequiprefinerycnt(EQI_SHADOW_ARMOR)+getequiprefinerycnt(EQI_SHADOW_ACC_L) >= 15) bonus bUnbreakableArmor,1; }
-24156:24166:24167,{ bonus bBaseAtk,5; if(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=25) bonus bIgnoreDefRace,RC_DemiPlayer; }
-24157:24166:24167,{ bonus bBaseAtk,5; if(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=25) bonus bIgnoreDefRace,RC_Demon; }
-24158:24166:24167,{ bonus bBaseAtk,5; if(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=25) bonus bIgnoreDefRace,RC_Brute; }
-24159:24166:24167,{ bonus bBaseAtk,5; if(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=25) bonus bIgnoreDefRace,RC_Insect; }
-24160:24166:24167,{ bonus bBaseAtk,5; if(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=25) bonus bIgnoreDefRace,RC_Fish; }
-24161:24166:24167,{ bonus bBaseAtk,5; if(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=25) bonus bIgnoreDefRace,RC_Dragon; }
-24162:24166:24167,{ bonus bBaseAtk,5; if(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=25) bonus bIgnoreDefRace,RC_Angel; }
-24163:24166:24167,{ bonus bBaseAtk,5; if(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=25) bonus bIgnoreDefRace,RC_Formless; }
-24164:24166:24167,{ bonus bBaseAtk,5; if(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=25) bonus bIgnoreDefRace,RC_Undead; }
-24165:24166:24167,{ bonus bBaseAtk,5; if(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=25) bonus bIgnoreDefRace,RC_Plant; }
-24168:24169:24170,{ bonus bMatk,5; if(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=25) bonus bIgnoreMdefRace,RC_DemiPlayer; }
-24168:24169:24171,{ bonus bMatk,5; if(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=25) bonus bIgnoreMdefRace,RC_Demon; }
-24168:24169:24172,{ bonus bMatk,5; if(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=25) bonus bIgnoreMdefRace,RC_Brute; }
-24168:24169:24173,{ bonus bMatk,5; if(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=25) bonus bIgnoreMdefRace,RC_Insect; }
-24168:24169:24174,{ bonus bMatk,5; if(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=25) bonus bIgnoreMdefRace,RC_Fish; }
-24168:24169:24175,{ bonus bMatk,5; if(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=25) bonus bIgnoreMdefRace,RC_Dragon; }
-24168:24169:24176,{ bonus bMatk,5; if(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=25) bonus bIgnoreMdefRace,RC_Angel; }
-24168:24169:24177,{ bonus bMatk,5; if(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=25) bonus bIgnoreMdefRace,RC_Formless; }
-24168:24169:24178,{ bonus bMatk,5; if(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=25) bonus bIgnoreMdefRace,RC_Undead; }
-24168:24169:24179,{ bonus bMatk,5; if(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=25) bonus bIgnoreMdefRace,RC_Plant; }
-24180:24181:24182:24183:24184:24185,{ .@refine = getequiprefinerycnt(EQI_SHADOW_ARMOR)+getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_SHOES)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L); bonus bAllStats,1; if(.@refine>=45) { bonus bMaxHPrate,(.@refine-60); sc_start4 SC_ENDURE,1,10,0,0,1;} }
-// 24186:24198,{ /* Reduces physical and magical damage received from Neutral property monsters by 2% */ }
-// 24187:24199,{ /* Reduces physical and magical damage received from Shadow property monsters by 2% */ }
-// 24188:24200,{ /* Reduces physical and magical damage received from Water property monsters by 2% */ }
-// 24189:24201,{ /* Reduces physical and magical damage received from Earth property monsters by 2% */ }
-// 24190:24202,{ /* Reduces physical and magical damage received from Fire property monsters by 2% */ }
-// 24191:24203,{ /* Reduces physical and magical damage received from Wind property monsters by 2% */; }
-// 24192:24204,{ /* Reduces physical and magical damage received from Poison property monsters by 2% */ }
-// 24193:24205,{ /* Reduces physical and magical damage received from Holy property monsters by 2% */ }
-// 24194:24206,{ /* Reduces physical and magical damage received from Ghost property monsters by 2% */ }
-// 24195:24207,{ /* Reduces physical and magical damage received from Undead property monsters by 2% */ }
-24196:24197,{ bonus bFlee,5; if(getequiprefinerycnt(EQI_SHADOW_SHOES)+getequiprefinerycnt(EQI_SHADOW_ARMOR)>=15) bonus bSpeedAddRate,3; }
-24208:24209,{ bonus2 bExpAddRace, RC_All, ((getequiprefinerycnt(EQI_SHADOW_SHOES)+getequiprefinerycnt(EQI_SHADOW_SHIELD))>=15?10:1); }
-24210:24211,{ bonus2 bExpAddRace, RC_All, ((getequiprefinerycnt(EQI_SHADOW_SHOES)+getequiprefinerycnt(EQI_SHADOW_SHIELD))>=15?20:10); }
-24212:24213,{ bonus2 bExpAddRace, RC_All, ((getequiprefinerycnt(EQI_SHADOW_SHOES)+getequiprefinerycnt(EQI_SHADOW_SHIELD))>=15?10:5); }
-24214:24215,{ bonus2 bExpAddRace, RC_All, ((getequiprefinerycnt(EQI_SHADOW_SHOES)+getequiprefinerycnt(EQI_SHADOW_SHIELD))>=15?4:2); }
-24217:24218,{ if(getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=15) bonus bAspd,1; }
-//24223:Enhanced Force Shadow Earring:Enhanced Force Shadow Pendant,{ .@refine = getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L); if(.@refine)>=25 {bonus bAtkRate,2;} else if(.@refine)>=20 {bonus bAtkRate,1;} bonus bAtkRate,1; }
-24224:24225:24226,{ .@refine = getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L); if(.@refine)>=25 { bonus bAtkRate,2; } else if(.@refine)>=20 { bonus bAtkRate,1; } bonus bAtk2,10; }
-//24227:Enhanced Soul Earring:Enhanced Soul Pendant,{ .@refine = getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L); if(.@refine)>=25 {bonus bMatkRate,2;} else if(.@refine)>=20 {bonus bMatkRate,1;} bonus bMatkRate,1; }
-24228:24229:24230,{ .@refine = getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L); if(.@refine)>=25 { bonus bMatkRate,2; } else if(.@refine)>=20 { bonus bMatkRate,1; } bonus bMatk,10; }
-24231:24232,{ bonus bFlee,5; if(getequiprefinerycnt(EQI_SHADOW_SHOES) + getequiprefinerycnt(EQI_SHADOW_SHIELD) >=15) { bonus bAspd,1; } }
-24234:24235,{ bonus bAtk,5; if(getequiprefinerycnt(EQI_SHADOW_ACC_R) + getequiprefinerycnt(EQI_SHADOW_ACC_L) >=15) { bonus2 bAddSize,Size_Large,1; } }
-24236:24237,{ bonus bAtk,5; if(getequiprefinerycnt(EQI_SHADOW_ACC_R) + getequiprefinerycnt(EQI_SHADOW_ACC_L) >=15) { bonus2 bAddSize,Size_Medium,1; } }
-24238:24239,{ bonus bAtk,5; if(getequiprefinerycnt(EQI_SHADOW_ACC_R) + getequiprefinerycnt(EQI_SHADOW_ACC_L) >=15) { bonus2 bAddSize,Size_Small,1; } }
-24240:24241:24242,{ bonus bUseSPrate,-1; .@refine = getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_ARMOR)+getequiprefinerycnt(EQI_SHADOW_SHOES); bonus bVariableCastrate,(.@refine)/5; if(.@refine)>=25 { bonus bUseSPrate,-1; } }
-24243:24244:24245,{ bonus bDelayrate,-1; if (getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_ARMOR)+getequiprefinerycnt(EQI_SHADOW_SHOES) >= 25) bonus bDelayrate,-5; }
-2161:1646,{ .@r = (getequiprefinerycnt(EQI_HAND_L)*4); bonus2 bVariableCastrate,"WZ_STORMGUST",-.@r; bonus2 bVariableCastrate,"WL_FROSTMISTY",-.@r; bonus2 bVariableCastrate,"WL_JACKFROST",-.@r; }
diff --git a/db/re/item_db.conf b/db/re/item_db.conf
index 6c0bea7f0..19e3d2f99 100644
--- a/db/re/item_db.conf
+++ b/db/re/item_db.conf
@@ -121,6 +121,8 @@ item_db: (
">
OnEquipScript: <" OnEquip Script (can also be multi-line) ">
OnUnequipScript: <" OnUnequip Script (can also be multi-line) ">
+ OnRentalStartScript: <" On item renting script, gets called after item is created in inventory (can also be multi-line) ">
+ OnRentalEndScript: <" On item rent end/expire script, gets called after item is removed from inventory (can also be multi-line) ">
},
**************************************************************************/
@@ -21494,6 +21496,11 @@ item_db: (
Name: "Combo_Battle_Glove_IL"
},
{
+ Id: 1847
+ AegisName: "Iron_Nail_K"
+ Name: "Iron_Nail_K"
+},
+{
Id: 1848
AegisName: "Rebeginer_SR_Nuckle"
Name: "Rebeginer_SR_Nuckle"
@@ -21508,6 +21515,11 @@ item_db: (
AegisName: "Evt_Iron_Nail_K"
Name: "Evt_Iron_Nail_K"
},
+{
+ Id: 1867
+ AegisName: "Ein_1HKNUCK"
+ Name: "Ein_1HKNUCK"
+},
//== Instruments ===========================================
{
@@ -24340,6 +24352,11 @@ item_db: (
Name: "Rebeginer_WL_Staff"
},
{
+ Id: 2048
+ AegisName: "Iron_Staff"
+ Name: "Iron_Staff"
+},
+{
Id: 2051
AegisName: "Survival_Staff_IL"
Name: "Survival_Staff_IL"
@@ -24349,6 +24366,11 @@ item_db: (
AegisName: "Evt_Iron_Staff"
Name: "Evt_Iron_Staff"
},
+{
+ Id: 2058
+ AegisName: "Ein_BHSTAFF"
+ Name: "Ein_BHSTAFF"
+},
//== Shields ===============================================
{
@@ -83806,6 +83828,31 @@ item_db: (
Type: "IT_PETEGG"
Buy: 20
},
+{
+ Id: 9514
+ AegisName: "Ein_Ddbox"
+ Name: "Ein_Ddbox"
+},
+{
+ Id: 9523
+ AegisName: "Metal_Rifine_Ticket"
+ Name: "Metal_Rifine_Ticket"
+},
+{
+ Id: 9529
+ AegisName: "Ein_Ddbox2"
+ Name: "Ein_Ddbox2"
+},
+{
+ Id: 9550
+ AegisName: "Gemstone_Of_Time"
+ Name: "Gemstone_Of_Time"
+},
+{
+ Id: 9551
+ AegisName: "Time_Unseal_Key"
+ Name: "Time_Unseal_Key"
+},
//== Pet Accessories =======================================
{
@@ -89226,7 +89273,11 @@ item_db: (
nomail: true
noauction: true
}
- Script: <" setfont 1; ">
+ Script: <" setfont(1); ">
+ OnRentalEndScript: <"
+ if (getfont() == 1)
+ setfont(0);
+ ">
},
{
Id: 12288
@@ -89243,7 +89294,11 @@ item_db: (
nomail: true
noauction: true
}
- Script: <" setfont 2; ">
+ Script: <" setfont(2); ">
+ OnRentalEndScript: <"
+ if (getfont() == 2)
+ setfont(0);
+ ">
},
{
Id: 12289
@@ -89260,7 +89315,11 @@ item_db: (
nomail: true
noauction: true
}
- Script: <" setfont 3; ">
+ Script: <" setfont(3); ">
+ OnRentalEndScript: <"
+ if (getfont() == 3)
+ setfont(0);
+ ">
},
{
Id: 12290
@@ -89512,7 +89571,11 @@ item_db: (
nomail: true
noauction: true
}
- Script: <" setfont 4; ">
+ Script: <" setfont(4); ">
+ OnRentalEndScript: <"
+ if (getfont() == 4)
+ setfont(0);
+ ">
},
{
Id: 12305
@@ -89529,7 +89592,11 @@ item_db: (
nomail: true
noauction: true
}
- Script: <" setfont 5; ">
+ Script: <" setfont(5); ">
+ OnRentalEndScript: <"
+ if (getfont() == 5)
+ setfont(0);
+ ">
},
{
Id: 12306
@@ -89546,7 +89613,11 @@ item_db: (
nomail: true
noauction: true
}
- Script: <" setfont 6; ">
+ Script: <" setfont(6); ">
+ OnRentalEndScript: <"
+ if (getfont() == 6)
+ setfont(0);
+ ">
},
{
Id: 12307
@@ -89563,7 +89634,11 @@ item_db: (
nomail: true
noauction: true
}
- Script: <" setfont 7; ">
+ Script: <" setfont(7); ">
+ OnRentalEndScript: <"
+ if (getfont() == 7)
+ setfont(0);
+ ">
},
{
Id: 12308
@@ -89580,7 +89655,11 @@ item_db: (
nomail: true
noauction: true
}
- Script: <" setfont 8; ">
+ Script: <" setfont(8); ">
+ OnRentalEndScript: <"
+ if (getfont() == 8)
+ setfont(0);
+ ">
},
{
Id: 12309
@@ -89597,7 +89676,11 @@ item_db: (
nomail: true
noauction: true
}
- Script: <" setfont 9; ">
+ Script: <" setfont(9); ">
+ OnRentalEndScript: <"
+ if (getfont() == 9)
+ setfont(0);
+ ">
},
{
Id: 12310
@@ -93349,6 +93432,7 @@ item_db: (
noauction: true
}
Script: <" setcashmount(); ">
+ OnRentalEndScript: <" sc_end(SC_ALL_RIDING); ">
},
{
Id: 12623
@@ -94644,7 +94728,7 @@ item_db: (
Nouse: {
sitting: true
}
- Stack: [20, 1]
+ Stack: [60, 1]
Script: <" itemskill RK_REFRESH, 1; ">
},
{
@@ -94671,7 +94755,7 @@ item_db: (
Nouse: {
sitting: true
}
- Stack: [20, 1]
+ Stack: [60, 1]
Script: <" itemskill RK_CRUSHSTRIKE, 1; ">
},
{
@@ -94698,7 +94782,7 @@ item_db: (
Nouse: {
sitting: true
}
- Stack: [20, 1]
+ Stack: [60, 1]
Script: <" itemskill RK_MILLENNIUMSHIELD, 1; ">
},
{
@@ -94724,7 +94808,7 @@ item_db: (
Nouse: {
sitting: true
}
- Stack: [20, 1]
+ Stack: [60, 1]
Script: <" itemskill RK_VITALITYACTIVATION, 1; ">
},
{
@@ -94750,7 +94834,6 @@ item_db: (
Nouse: {
sitting: true
}
- Stack: [20, 1]
Script: <" itemskill RK_FIGHTINGSPIRIT, 1; ">
},
{
@@ -94776,7 +94859,7 @@ item_db: (
Nouse: {
sitting: true
}
- Stack: [20, 1]
+ Stack: [60, 1]
Script: <" itemskill RK_ABUNDANCE, 1; ">
},
{
@@ -94802,7 +94885,6 @@ item_db: (
Nouse: {
sitting: true
}
- Stack: [20, 1]
Script: <" itemskill RK_GIANTGROWTH, 1; ">
},
{
@@ -94829,7 +94911,6 @@ item_db: (
Nouse: {
sitting: true
}
- Stack: [20, 1]
Script: <" itemskill RK_STORMBLAST, 1; ">
},
{
@@ -94855,7 +94936,7 @@ item_db: (
Nouse: {
sitting: true
}
- Stack: [20, 1]
+ Stack: [60, 1]
Script: <" itemskill RK_STONEHARDSKIN, 1; ">
},
@@ -104210,6 +104291,16 @@ item_db: (
AegisName: "Rebeginer_KO_Humma"
Name: "Rebeginer_KO_Humma"
},
+{
+ Id: 13345
+ AegisName: "Humma_Clear"
+ Name: "Humma_Clear"
+},
+{
+ Id: 13346
+ AegisName: "Ein_BHHuuma"
+ Name: "Ein_BHHuuma"
+},
//== More One-Handed Swords ================================
{
@@ -105603,6 +105694,11 @@ item_db: (
Name: "Rebeginer_GN_Sword"
},
{
+ Id: 13485
+ AegisName: "Sword_Of_Bluefire"
+ Name: "Sword_Of_Bluefire"
+},
+{
Id: 13493
AegisName: "Cannon_Rapier_OS"
Name: "Cannon_Rapier_OS"
@@ -125170,16 +125266,46 @@ item_db: (
Name: "Rebeginer_Suits"
},
{
+ Id: 15278
+ AegisName: "Overwhelm_Str_Armor"
+ Name: "Overwhelm_Str_Armor"
+},
+{
+ Id: 15279
+ AegisName: "Overwhelm_Int_Armor"
+ Name: "Overwhelm_Int_Armor"
+},
+{
Id: 15280
AegisName: "S_CriticalHit_Armor"
Name: "S_CriticalHit_Armor"
},
{
+ Id: 15346
+ AegisName: "Overwhelm_Luk_Armor"
+ Name: "Overwhelm_Luk_Armor"
+},
+{
+ Id: 15347
+ AegisName: "Overwhelm_Vit_Armor"
+ Name: "Overwhelm_Vit_Armor"
+},
+{
Id: 15348
AegisName: "Goibne_Armor_IL"
Name: "Goibne_Armor_IL"
},
{
+ Id: 15353
+ AegisName: "Overwhelm_Agi_Armor"
+ Name: "Overwhelm_Agi_Armor"
+},
+{
+ Id: 15354
+ AegisName: "Overwhelm_Dex_Armor"
+ Name: "Overwhelm_Dex_Armor"
+},
+{
Id: 15376
AegisName: "Illusion_Armor_A"
Name: "Illusion_Armor_A"
@@ -125190,6 +125316,21 @@ item_db: (
Name: "Illusion_Armor_B"
},
{
+ Id: 15378
+ AegisName: "Lava_Leather_Armor"
+ Name: "Lava_Leather_Armor"
+},
+{
+ Id: 15379
+ AegisName: "Lava_Leather_Suits"
+ Name: "Lava_Leather_Suits"
+},
+{
+ Id: 15380
+ AegisName: "Lava_Leather_Robe"
+ Name: "Lava_Leather_Robe"
+},
+{
Id: 15383
AegisName: "Time_Overload_Robe"
Name: "Time_Overload_Robe"
@@ -125204,6 +125345,36 @@ item_db: (
AegisName: "Schmidt_Manteau"
Name: "Schmidt_Manteau"
},
+{
+ Id: 15391
+ AegisName: "DragonA_Red"
+ Name: "DragonA_Red"
+},
+{
+ Id: 15392
+ AegisName: "DragonA_Green"
+ Name: "DragonA_Green"
+},
+{
+ Id: 15393
+ AegisName: "DragonA_Gold"
+ Name: "DragonA_Gold"
+},
+{
+ Id: 15394
+ AegisName: "DragonA_Purple"
+ Name: "DragonA_Purple"
+},
+{
+ Id: 15395
+ AegisName: "DragonA_Blue"
+ Name: "DragonA_Blue"
+},
+{
+ Id: 15396
+ AegisName: "DragonA_Silver"
+ Name: "DragonA_Silver"
+},
//== More Maces ============================================
{
@@ -126237,6 +126408,11 @@ item_db: (
AegisName: "Ultio_Spes_OS"
Name: "Ultio_Spes_OS"
},
+{
+ Id: 16099
+ AegisName: "Ein_1HHAMMER"
+ Name: "Ein_1HHAMMER"
+},
//== More Rental Boxes =====================================
{
@@ -131546,6 +131722,11 @@ item_db: (
Name: "Balistar_IL"
},
{
+ Id: 18164
+ AegisName: "Royal_Bow_K"
+ Name: "Royal_Bow_K"
+},
+{
Id: 18165
AegisName: "Rebeginer_RN_Bow"
Name: "Rebeginer_RN_Bow"
@@ -131590,6 +131771,11 @@ item_db: (
AegisName: "Evt_Narcis_Bow"
Name: "Evt_Narcis_Bow"
},
+{
+ Id: 18190
+ AegisName: "Ein_BHBOW"
+ Name: "Ein_BHBOW"
+},
//== More Headgears ========================================
{
@@ -145732,6 +145918,11 @@ item_db: (
Name: "C_GiantCatBag_TW"
},
{
+ Id: 20519
+ AegisName: "C_Full_BloomCherry_Tree"
+ Name: "C_Full_BloomCherry_Tree"
+},
+{
Id: 20528
AegisName: "C_GoldButterfly_Wing"
Name: "C_GoldButterfly_Wing"
@@ -145752,6 +145943,36 @@ item_db: (
Name: "C_Digital_Space"
},
{
+ Id: 20543
+ AegisName: "C_Halloween_Poring_Bag"
+ Name: "C_Halloween_Poring_Bag"
+},
+{
+ Id: 20546
+ AegisName: "C_Backside_Ribbon_Bell"
+ Name: "C_Backside_Ribbon_Bell"
+},
+{
+ Id: 20570
+ AegisName: "C_HeartChocoBag"
+ Name: "C_HeartChocoBag"
+},
+{
+ Id: 20572
+ AegisName: "C_WingOfHeart"
+ Name: "C_WingOfHeart"
+},
+{
+ Id: 20576
+ AegisName: "C_Cat_Fork"
+ Name: "C_Cat_Fork"
+},
+{
+ Id: 20584
+ AegisName: "C_Big_Foxtail"
+ Name: "C_Big_Foxtail"
+},
+{
Id: 20600
AegisName: "Fantastic_Aura"
Name: "Fantastic Aura"
@@ -146508,6 +146729,41 @@ item_db: (
AegisName: "Fairy_Cloth"
Name: "Fairy_Cloth"
},
+{
+ Id: 20946
+ AegisName: "Drag_Manteau"
+ Name: "Drag_Manteau"
+},
+{
+ Id: 20963
+ AegisName: "Temporal_M_Str"
+ Name: "Temporal_M_Str"
+},
+{
+ Id: 20964
+ AegisName: "Temporal_M_Agi"
+ Name: "Temporal_M_Agi"
+},
+{
+ Id: 20965
+ AegisName: "Temporal_M_Vit"
+ Name: "Temporal_M_Vit"
+},
+{
+ Id: 20966
+ AegisName: "Temporal_M_Int"
+ Name: "Temporal_M_Int"
+},
+{
+ Id: 20967
+ AegisName: "Temporal_M_Dex"
+ Name: "Temporal_M_Dex"
+},
+{
+ Id: 20968
+ AegisName: "Temporal_M_Luk"
+ Name: "Temporal_M_Luk"
+},
//== New Two-Handed Swords =================================
{
@@ -146993,6 +147249,11 @@ item_db: (
Name: "Rebeginer_RK_T_Sword"
},
{
+ Id: 21038
+ AegisName: "Oriental_Sword"
+ Name: "Oriental_Sword"
+},
+{
Id: 21047
AegisName: "Beam_Claymore_OS"
Name: "Beam_Claymore_OS"
@@ -147002,6 +147263,16 @@ item_db: (
AegisName: "Evt_Oriental_Sword"
Name: "Evt_Oriental_Sword"
},
+{
+ Id: 21050
+ AegisName: "Taegoolyeon_IL"
+ Name: "Taegoolyeon_IL"
+},
+{
+ Id: 21054
+ AegisName: "Ein_BHSWORD"
+ Name: "Ein_BHSWORD"
+},
//== New Shoes =============================================
{
@@ -147838,6 +148109,11 @@ item_db: (
AegisName: "Time_Overload_Boots"
Name: "Time_Overload_Boots"
},
+{
+ Id: 22208
+ AegisName: "Dragon_Boots"
+ Name: "Dragon_Boots"
+},
//== New Etc Items =========================================
{
@@ -147917,7 +148193,7 @@ item_db: (
nomail: true
noauction: true
}
- Stack: [20, 1]
+ Stack: [60, 1]
Script: <" itemskill RK_LUXANIMA, 1; ">
},
{
@@ -148376,6 +148652,11 @@ item_db: (
Name: "Green_Scroll_K2"
},
{
+ Id: 23436
+ AegisName: "Shadow_Refine_Hammer"
+ Name: "Shadow_Refine_Hammer"
+},
+{
Id: 23440
AegisName: "Sentimental_Scroll"
Name: "Sentimental_Scroll"
@@ -148396,6 +148677,11 @@ item_db: (
Name: "Infinity_Scroll"
},
{
+ Id: 23474
+ AegisName: "InfinityShadow_Mix"
+ Name: "InfinityShadow_Mix"
+},
+{
Id: 23475
AegisName: "Infinity_Drink"
Name: "Infinity_Drink"
@@ -148526,6 +148812,21 @@ item_db: (
Name: "Bloody_Scroll"
},
{
+ Id: 23545
+ AegisName: "Silver_Statue"
+ Name: "Silver_Statue"
+},
+{
+ Id: 23546
+ AegisName: "Cursed_Blood"
+ Name: "Cursed_Blood"
+},
+{
+ Id: 23547
+ AegisName: "Gold_Statue"
+ Name: "Gold_Statue"
+},
+{
Id: 23549
AegisName: "Snow_Cookie"
Name: "Snow_Cookie"
@@ -148631,6 +148932,56 @@ item_db: (
Name: "2018_New_Year_Scroll"
},
{
+ Id: 23665
+ AegisName: "PhysicalMagical_Mix"
+ Name: "PhysicalMagical_Mix"
+},
+{
+ Id: 23666
+ AegisName: "ImmunedAthena_Mix"
+ Name: "ImmunedAthena_Mix"
+},
+{
+ Id: 23667
+ AegisName: "HardChamption_Mix"
+ Name: "HardChamption_Mix"
+},
+{
+ Id: 23668
+ AegisName: "KingbirdAncient_Mix"
+ Name: "KingbirdAncient_Mix"
+},
+{
+ Id: 23669
+ AegisName: "CriticalHit_Mix"
+ Name: "CriticalHit_Mix"
+},
+{
+ Id: 23675
+ AegisName: "Geffen_Magic_Scroll"
+ Name: "Geffen_Magic_Scroll"
+},
+{
+ Id: 23676
+ AegisName: "Gray_Charcoal_Melee"
+ Name: "Gray_Charcoal_Melee"
+},
+{
+ Id: 23677
+ AegisName: "Gray_Charcoal_Magic"
+ Name: "Gray_Charcoal_Magic"
+},
+{
+ Id: 23678
+ AegisName: "Gray_Charcoal_Range"
+ Name: "Gray_Charcoal_Range"
+},
+{
+ Id: 23679
+ AegisName: "Geffen_Magic_Scroll2"
+ Name: "Geffen_Magic_Scroll2"
+},
+{
Id: 23683
AegisName: "EVT_JAN02KR"
Name: "EVT_JAN02KR"
@@ -148656,6 +149007,11 @@ item_db: (
Name: "2018_Spring_Scroll"
},
{
+ Id: 23720
+ AegisName: "Shadow_Random_Mix"
+ Name: "Shadow_Random_Mix"
+},
+{
Id: 23723
AegisName: "Melon_Bread"
Name: "Melon_Bread"
@@ -148691,16 +149047,431 @@ item_db: (
Name: "EP17_1_SPC04"
},
{
+ Id: 23776
+ AegisName: "EP17_1_SPC05"
+ Name: "EP17_1_SPC05"
+},
+{
+ Id: 23777
+ AegisName: "EP17_1_SPC06"
+ Name: "EP17_1_SPC06"
+},
+{
+ Id: 23778
+ AegisName: "EP17_1_SPC07"
+ Name: "EP17_1_SPC07"
+},
+{
+ Id: 23779
+ AegisName: "EP17_1_SPC08"
+ Name: "EP17_1_SPC08"
+},
+{
+ Id: 23780
+ AegisName: "EP17_1_SPC09"
+ Name: "EP17_1_SPC09"
+},
+{
+ Id: 23781
+ AegisName: "EP17_1_SPC10"
+ Name: "EP17_1_SPC10"
+},
+{
+ Id: 23815
+ AegisName: "Magma_Essence"
+ Name: "Magma_Essence"
+},
+{
Id: 23817
AegisName: "Bs_Making_Scrolls"
Name: "Bs_Making_Scrolls"
},
{
+ Id: 23818
+ AegisName: "Bs_Item_M_S_2"
+ Name: "Bs_Item_M_S_2"
+},
+{
+ Id: 23819
+ AegisName: "Bs_Item_M_S_8"
+ Name: "Bs_Item_M_S_8"
+},
+{
+ Id: 23820
+ AegisName: "Bs_Item_M_S_10"
+ Name: "Bs_Item_M_S_10"
+},
+{
+ Id: 23821
+ AegisName: "Bs_Item_M_S_11"
+ Name: "Bs_Item_M_S_11"
+},
+{
+ Id: 23822
+ AegisName: "Bs_Item_M_S_34"
+ Name: "Bs_Item_M_S_34"
+},
+{
+ Id: 23823
+ AegisName: "Bs_Item_M_S_41"
+ Name: "Bs_Item_M_S_41"
+},
+{
+ Id: 23824
+ AegisName: "Bs_Item_M_S_42"
+ Name: "Bs_Item_M_S_42"
+},
+{
+ Id: 23825
+ AegisName: "Bs_Item_M_S_43"
+ Name: "Bs_Item_M_S_43"
+},
+{
+ Id: 23826
+ AegisName: "Bs_Item_M_S_44"
+ Name: "Bs_Item_M_S_44"
+},
+{
+ Id: 23827
+ AegisName: "Bs_Sha_M_S_1"
+ Name: "Bs_Sha_M_S_1"
+},
+{
+ Id: 23828
+ AegisName: "Bs_Sha_M_S_17"
+ Name: "Bs_Sha_M_S_17"
+},
+{
+ Id: 23829
+ AegisName: "Bs_Sha_M_S_18"
+ Name: "Bs_Sha_M_S_18"
+},
+{
+ Id: 23830
+ AegisName: "Bs_Sha_M_S_19"
+ Name: "Bs_Sha_M_S_19"
+},
+{
+ Id: 23831
+ AegisName: "Bs_Sha_M_S_20"
+ Name: "Bs_Sha_M_S_20"
+},
+{
+ Id: 23832
+ AegisName: "Bs_Item_M_S_4"
+ Name: "Bs_Item_M_S_4"
+},
+{
+ Id: 23833
+ AegisName: "Bs_Item_M_S_6"
+ Name: "Bs_Item_M_S_6"
+},
+{
+ Id: 23834
+ AegisName: "Bs_Item_M_S_7"
+ Name: "Bs_Item_M_S_7"
+},
+{
+ Id: 23835
+ AegisName: "Bs_Item_M_S_12"
+ Name: "Bs_Item_M_S_12"
+},
+{
+ Id: 23836
+ AegisName: "Bs_Item_M_S_13"
+ Name: "Bs_Item_M_S_13"
+},
+{
+ Id: 23837
+ AegisName: "Bs_Item_M_S_15"
+ Name: "Bs_Item_M_S_15"
+},
+{
+ Id: 23838
+ AegisName: "Bs_Item_M_S_28"
+ Name: "Bs_Item_M_S_28"
+},
+{
+ Id: 23839
+ AegisName: "Bs_Item_M_S_29"
+ Name: "Bs_Item_M_S_29"
+},
+{
+ Id: 23840
+ AegisName: "Bs_Item_M_S_31"
+ Name: "Bs_Item_M_S_31"
+},
+{
+ Id: 23841
+ AegisName: "Bs_Item_M_S_32"
+ Name: "Bs_Item_M_S_32"
+},
+{
+ Id: 23842
+ AegisName: "Bs_Item_M_S_33"
+ Name: "Bs_Item_M_S_33"
+},
+{
+ Id: 23843
+ AegisName: "Bs_Item_M_S_36"
+ Name: "Bs_Item_M_S_36"
+},
+{
+ Id: 23844
+ AegisName: "Bs_Item_M_S_37"
+ Name: "Bs_Item_M_S_37"
+},
+{
+ Id: 23845
+ AegisName: "Bs_Item_M_S_38"
+ Name: "Bs_Item_M_S_38"
+},
+{
+ Id: 23846
+ AegisName: "Bs_Item_M_S_39"
+ Name: "Bs_Item_M_S_39"
+},
+{
+ Id: 23847
+ AegisName: "Bs_Item_M_S_40"
+ Name: "Bs_Item_M_S_40"
+},
+{
+ Id: 23848
+ AegisName: "Bs_Item_M_S_45"
+ Name: "Bs_Item_M_S_45"
+},
+{
+ Id: 23849
+ AegisName: "Bs_Item_M_S_46"
+ Name: "Bs_Item_M_S_46"
+},
+{
+ Id: 23850
+ AegisName: "Bs_Item_M_S_47"
+ Name: "Bs_Item_M_S_47"
+},
+{
+ Id: 23851
+ AegisName: "Bs_Item_M_S_48"
+ Name: "Bs_Item_M_S_48"
+},
+{
+ Id: 23852
+ AegisName: "Bs_Item_M_S_49"
+ Name: "Bs_Item_M_S_49"
+},
+{
+ Id: 23853
+ AegisName: "Bs_Item_M_S_50"
+ Name: "Bs_Item_M_S_50"
+},
+{
+ Id: 23854
+ AegisName: "Bs_Sha_M_S_2"
+ Name: "Bs_Sha_M_S_2"
+},
+{
+ Id: 23855
+ AegisName: "Bs_Sha_M_S_5"
+ Name: "Bs_Sha_M_S_5"
+},
+{
+ Id: 23856
+ AegisName: "Bs_Sha_M_S_6"
+ Name: "Bs_Sha_M_S_6"
+},
+{
+ Id: 23857
+ AegisName: "Bs_Sha_M_S_7"
+ Name: "Bs_Sha_M_S_7"
+},
+{
+ Id: 23858
+ AegisName: "Bs_Sha_M_S_8"
+ Name: "Bs_Sha_M_S_8"
+},
+{
+ Id: 23859
+ AegisName: "Bs_Sha_M_S_13"
+ Name: "Bs_Sha_M_S_13"
+},
+{
+ Id: 23860
+ AegisName: "Bs_Sha_M_S_15"
+ Name: "Bs_Sha_M_S_15"
+},
+{
+ Id: 23861
+ AegisName: "Bs_Sha_M_S_16"
+ Name: "Bs_Sha_M_S_16"
+},
+{
+ Id: 23862
+ AegisName: "Bs_Sha_M_S_23"
+ Name: "Bs_Sha_M_S_23"
+},
+{
+ Id: 23863
+ AegisName: "Bs_Item_M_S_5"
+ Name: "Bs_Item_M_S_5"
+},
+{
+ Id: 23864
+ AegisName: "Bs_Item_M_S_9"
+ Name: "Bs_Item_M_S_9"
+},
+{
+ Id: 23865
+ AegisName: "Bs_Item_M_S_14"
+ Name: "Bs_Item_M_S_14"
+},
+{
+ Id: 23866
+ AegisName: "Bs_Item_M_S_16"
+ Name: "Bs_Item_M_S_16"
+},
+{
+ Id: 23867
+ AegisName: "Bs_Item_M_S_17"
+ Name: "Bs_Item_M_S_17"
+},
+{
+ Id: 23868
+ AegisName: "Bs_Item_M_S_19"
+ Name: "Bs_Item_M_S_19"
+},
+{
+ Id: 23869
+ AegisName: "Bs_Item_M_S_27"
+ Name: "Bs_Item_M_S_27"
+},
+{
+ Id: 23870
+ AegisName: "Bs_Item_M_S_35"
+ Name: "Bs_Item_M_S_35"
+},
+{
+ Id: 23871
+ AegisName: "Bs_Sha_M_S_9"
+ Name: "Bs_Sha_M_S_9"
+},
+{
+ Id: 23872
+ AegisName: "Bs_Sha_M_S_10"
+ Name: "Bs_Sha_M_S_10"
+},
+{
+ Id: 23873
+ AegisName: "Bs_Sha_M_S_11"
+ Name: "Bs_Sha_M_S_11"
+},
+{
+ Id: 23874
+ AegisName: "Bs_Sha_M_S_21"
+ Name: "Bs_Sha_M_S_21"
+},
+{
+ Id: 23875
+ AegisName: "Bs_Sha_M_S_22"
+ Name: "Bs_Sha_M_S_22"
+},
+{
+ Id: 23876
+ AegisName: "Bs_Item_M_S_1"
+ Name: "Bs_Item_M_S_1"
+},
+{
+ Id: 23877
+ AegisName: "Bs_Item_M_S_3"
+ Name: "Bs_Item_M_S_3"
+},
+{
Id: 23878
AegisName: "StarSoul_Scroll"
Name: "StarSoul_Scroll"
},
{
+ Id: 23879
+ AegisName: "Bs_Item_M_S_18"
+ Name: "Bs_Item_M_S_18"
+},
+{
+ Id: 23880
+ AegisName: "Bs_Item_M_S_20"
+ Name: "Bs_Item_M_S_20"
+},
+{
+ Id: 23881
+ AegisName: "Bs_Item_M_S_21"
+ Name: "Bs_Item_M_S_21"
+},
+{
+ Id: 23882
+ AegisName: "Bs_Item_M_S_22"
+ Name: "Bs_Item_M_S_22"
+},
+{
+ Id: 23883
+ AegisName: "Bs_Item_M_S_23"
+ Name: "Bs_Item_M_S_23"
+},
+{
+ Id: 23884
+ AegisName: "Bs_Item_M_S_24"
+ Name: "Bs_Item_M_S_24"
+},
+{
+ Id: 23885
+ AegisName: "Bs_Item_M_S_25"
+ Name: "Bs_Item_M_S_25"
+},
+{
+ Id: 23886
+ AegisName: "Bs_Item_M_S_26"
+ Name: "Bs_Item_M_S_26"
+},
+{
+ Id: 23887
+ AegisName: "Bs_Item_M_S_30"
+ Name: "Bs_Item_M_S_30"
+},
+{
+ Id: 23888
+ AegisName: "Bs_Sha_M_S_3"
+ Name: "Bs_Sha_M_S_3"
+},
+{
+ Id: 23889
+ AegisName: "Bs_Sha_M_S_4"
+ Name: "Bs_Sha_M_S_4"
+},
+{
+ Id: 23890
+ AegisName: "Bs_Sha_M_S_12"
+ Name: "Bs_Sha_M_S_12"
+},
+{
+ Id: 23891
+ AegisName: "Bs_Sha_M_S_14"
+ Name: "Bs_Sha_M_S_14"
+},
+{
+ Id: 23892
+ AegisName: "Bs_Sha_M_S_24"
+ Name: "Bs_Sha_M_S_24"
+},
+{
+ Id: 23893
+ AegisName: "Bs_Sha_M_S_25"
+ Name: "Bs_Sha_M_S_25"
+},
+{
+ Id: 23894
+ AegisName: "Bs_Item_M_S_51"
+ Name: "Bs_Item_M_S_51"
+},
+{
Id: 23897
AegisName: "2018_Jump_Thx_Box"
Name: "2018_Jump_Thx_Box"
@@ -148731,10 +149502,25 @@ item_db: (
Name: "Season_Evt_Reward"
},
{
+ Id: 23926
+ AegisName: "Shadow_9_Refine_Hammer"
+ Name: "Shadow_9_Refine_Hammer"
+},
+{
Id: 23962
AegisName: "Malang_Cat_Can2"
Name: "Malang_Cat_Can2"
},
+{
+ Id: 23967
+ AegisName: "EnchantStone_Recipe_9m"
+ Name: "EnchantStone_Recipe_9m"
+},
+{
+ Id: 23981
+ AegisName: "Abyss_Ddbox"
+ Name: "Abyss_Ddbox"
+},
//== Shadow Equipments =====================================
{
@@ -151856,6 +152642,811 @@ item_db: (
Name: "S_Timeoverload_Pandent"
},
{
+ Id: 24423
+ AegisName: "S_Tempest_Weapon"
+ Name: "S_Tempest_Weapon"
+},
+{
+ Id: 24424
+ AegisName: "S_Tempest_Armor"
+ Name: "S_Tempest_Armor"
+},
+{
+ Id: 24425
+ AegisName: "S_PerfectSize_Weapon"
+ Name: "S_PerfectSize_Weapon"
+},
+{
+ Id: 24426
+ AegisName: "S_PerfectSize_Armor"
+ Name: "S_PerfectSize_Armor"
+},
+{
+ Id: 24427
+ AegisName: "S_M_Exo_Co_Weapon"
+ Name: "S_M_Exo_Co_Weapon"
+},
+{
+ Id: 24428
+ AegisName: "S_M_Viv_Dr_Weapon"
+ Name: "S_M_Viv_Dr_Weapon"
+},
+{
+ Id: 24429
+ AegisName: "S_M_Sci_Hu_Weapon"
+ Name: "S_M_Sci_Hu_Weapon"
+},
+{
+ Id: 24430
+ AegisName: "S_M_Fis_In_Weapon"
+ Name: "S_M_Fis_In_Weapon"
+},
+{
+ Id: 24431
+ AegisName: "S_M_Exe_Ho_Weapon"
+ Name: "S_M_Exe_Ho_Weapon"
+},
+{
+ Id: 24432
+ AegisName: "S_Penetration_Weapon"
+ Name: "S_Penetration_Weapon"
+},
+{
+ Id: 24433
+ AegisName: "S_Penetration_Armor"
+ Name: "S_Penetration_Armor"
+},
+{
+ Id: 24434
+ AegisName: "S_Exe_Ho_Weapon"
+ Name: "S_Exe_Ho_Weapon"
+},
+{
+ Id: 24435
+ AegisName: "S_Fis_In_Weapon"
+ Name: "S_Fis_In_Weapon"
+},
+{
+ Id: 24436
+ AegisName: "S_Sci_Hu_Weapon"
+ Name: "S_Sci_Hu_Weapon"
+},
+{
+ Id: 24437
+ AegisName: "S_Viv_Dr_Weapon"
+ Name: "S_Viv_Dr_Weapon"
+},
+{
+ Id: 24438
+ AegisName: "S_Exo_Co_Weapon"
+ Name: "S_Exo_Co_Weapon"
+},
+{
+ Id: 24439
+ AegisName: "S_Hasty_Weapon"
+ Name: "S_Hasty_Weapon"
+},
+{
+ Id: 24440
+ AegisName: "S_Sonic_Armor"
+ Name: "S_Sonic_Armor"
+},
+{
+ Id: 24441
+ AegisName: "S_Sonic_Shield"
+ Name: "S_Sonic_Shield"
+},
+{
+ Id: 24442
+ AegisName: "S_Sonic_Shoes"
+ Name: "S_Sonic_Shoes"
+},
+{
+ Id: 24443
+ AegisName: "S_Ignition_Weapon"
+ Name: "S_Ignition_Weapon"
+},
+{
+ Id: 24444
+ AegisName: "S_Ignition_Pendant"
+ Name: "S_Ignition_Pendant"
+},
+{
+ Id: 24445
+ AegisName: "S_Ignition_Earing"
+ Name: "S_Ignition_Earing"
+},
+{
+ Id: 24446
+ AegisName: "S_W_Breath_Armor"
+ Name: "S_W_Breath_Armor"
+},
+{
+ Id: 24447
+ AegisName: "S_W_Breath_Shield"
+ Name: "S_W_Breath_Shield"
+},
+{
+ Id: 24448
+ AegisName: "S_W_Breath_Shoes"
+ Name: "S_W_Breath_Shoes"
+},
+{
+ Id: 24449
+ AegisName: "S_F_Breath_Weapon"
+ Name: "S_F_Breath_Weapon"
+},
+{
+ Id: 24450
+ AegisName: "S_F_Breath_Pendant"
+ Name: "S_F_Breath_Pendant"
+},
+{
+ Id: 24451
+ AegisName: "S_F_Breath_Earing"
+ Name: "S_F_Breath_Earing"
+},
+{
+ Id: 24452
+ AegisName: "S_Cluster_Armor"
+ Name: "S_Cluster_Armor"
+},
+{
+ Id: 24453
+ AegisName: "S_Cluster_Shield"
+ Name: "S_Cluster_Shield"
+},
+{
+ Id: 24454
+ AegisName: "S_Cluster_Shoes"
+ Name: "S_Cluster_Shoes"
+},
+{
+ Id: 24455
+ AegisName: "S_Aimed_Weapon"
+ Name: "S_Aimed_Weapon"
+},
+{
+ Id: 24456
+ AegisName: "S_Aimed_Pendant"
+ Name: "S_Aimed_Pendant"
+},
+{
+ Id: 24457
+ AegisName: "S_Aimed_Earing"
+ Name: "S_Aimed_Earing"
+},
+{
+ Id: 24458
+ AegisName: "S_Arrow_Armor"
+ Name: "S_Arrow_Armor"
+},
+{
+ Id: 24459
+ AegisName: "S_Arrow_Shield"
+ Name: "S_Arrow_Shield"
+},
+{
+ Id: 24460
+ AegisName: "S_Arrow_Shoes"
+ Name: "S_Arrow_Shoes"
+},
+{
+ Id: 24461
+ AegisName: "S_Shooting_Weapon"
+ Name: "S_Shooting_Weapon"
+},
+{
+ Id: 24462
+ AegisName: "S_Shooting_Pendant"
+ Name: "S_Shooting_Pendant"
+},
+{
+ Id: 24463
+ AegisName: "S_Shooting_Earing"
+ Name: "S_Shooting_Earing"
+},
+{
+ Id: 24464
+ AegisName: "S_Tornado_Armor"
+ Name: "S_Tornado_Armor"
+},
+{
+ Id: 24465
+ AegisName: "S_Tornado_Shield"
+ Name: "S_Tornado_Shield"
+},
+{
+ Id: 24466
+ AegisName: "S_Tornado_Shoes"
+ Name: "S_Tornado_Shoes"
+},
+{
+ Id: 24467
+ AegisName: "S_Boomerang_Weapon"
+ Name: "S_Boomerang_Weapon"
+},
+{
+ Id: 24468
+ AegisName: "S_Boomerang_Pendant"
+ Name: "S_Boomerang_Pendant"
+},
+{
+ Id: 24469
+ AegisName: "S_Boomerang_Earing"
+ Name: "S_Boomerang_Earing"
+},
+{
+ Id: 24470
+ AegisName: "S_Vulcan_Armor"
+ Name: "S_Vulcan_Armor"
+},
+{
+ Id: 24471
+ AegisName: "S_Vulcan_Shield"
+ Name: "S_Vulcan_Shield"
+},
+{
+ Id: 24472
+ AegisName: "S_Vulcan_Shoes"
+ Name: "S_Vulcan_Shoes"
+},
+{
+ Id: 24473
+ AegisName: "S_Arms_Weapon"
+ Name: "S_Arms_Weapon"
+},
+{
+ Id: 24474
+ AegisName: "S_Arms_Pendant"
+ Name: "S_Arms_Pendant"
+},
+{
+ Id: 24475
+ AegisName: "S_Arms_Earing"
+ Name: "S_Arms_Earing"
+},
+{
+ Id: 24476
+ AegisName: "S_Rampage_Armor"
+ Name: "S_Rampage_Armor"
+},
+{
+ Id: 24477
+ AegisName: "S_Rampage_Shield"
+ Name: "S_Rampage_Shield"
+},
+{
+ Id: 24478
+ AegisName: "S_Rampage_Shoes"
+ Name: "S_Rampage_Shoes"
+},
+{
+ Id: 24479
+ AegisName: "S_Skynetblow_Weapon"
+ Name: "S_Skynetblow_Weapon"
+},
+{
+ Id: 24480
+ AegisName: "S_Skynetblow_Pendant"
+ Name: "S_Skynetblow_Pendant"
+},
+{
+ Id: 24481
+ AegisName: "S_Skynetblow_Earing"
+ Name: "S_Skynetblow_Earing"
+},
+{
+ Id: 24482
+ AegisName: "S_Knucklearrow_Armor"
+ Name: "S_Knucklearrow_Armor"
+},
+{
+ Id: 24483
+ AegisName: "S_Knucklearrow_Shield"
+ Name: "S_Knucklearrow_Shield"
+},
+{
+ Id: 24484
+ AegisName: "S_Knucklearrow_Shoes"
+ Name: "S_Knucklearrow_Shoes"
+},
+{
+ Id: 24485
+ AegisName: "S_TigerCannon_Weapon"
+ Name: "S_TigerCannon_Weapon"
+},
+{
+ Id: 24486
+ AegisName: "S_Tigercannon_Pendant"
+ Name: "S_Tigercannon_Pendant"
+},
+{
+ Id: 24487
+ AegisName: "S_Tigercannon_Earing"
+ Name: "S_Tigercannon_Earing"
+},
+{
+ Id: 24488
+ AegisName: "S_Duplelight_Armor"
+ Name: "S_Duplelight_Armor"
+},
+{
+ Id: 24489
+ AegisName: "S_Duplelight_Shield"
+ Name: "S_Duplelight_Shield"
+},
+{
+ Id: 24490
+ AegisName: "S_Duplelight_Shoes"
+ Name: "S_Duplelight_Shoes"
+},
+{
+ Id: 24491
+ AegisName: "S_Adoramus_Weapon"
+ Name: "S_Adoramus_Weapon"
+},
+{
+ Id: 24492
+ AegisName: "S_Adoramus_Pendant"
+ Name: "S_Adoramus_Pendant"
+},
+{
+ Id: 24493
+ AegisName: "S_Adoramus_Earing"
+ Name: "S_Adoramus_Earing"
+},
+{
+ Id: 24494
+ AegisName: "S_Judex_Armor"
+ Name: "S_Judex_Armor"
+},
+{
+ Id: 24495
+ AegisName: "S_Judex_Shield"
+ Name: "S_Judex_Shield"
+},
+{
+ Id: 24496
+ AegisName: "S_Judex_Shoes"
+ Name: "S_Judex_Shoes"
+},
+{
+ Id: 24497
+ AegisName: "S_Magnus_Weapon"
+ Name: "S_Magnus_Weapon"
+},
+{
+ Id: 24498
+ AegisName: "S_Magnus_Pendant"
+ Name: "S_Magnus_Pendant"
+},
+{
+ Id: 24499
+ AegisName: "S_Magnus_Earing"
+ Name: "S_Magnus_Earing"
+},
+{
+ Id: 24500
+ AegisName: "S_Rainstorm_Armor"
+ Name: "S_Rainstorm_Armor"
+},
+{
+ Id: 24501
+ AegisName: "S_Rainstorm_Shield"
+ Name: "S_Rainstorm_Shield"
+},
+{
+ Id: 24502
+ AegisName: "S_Rainstorm_Shoes"
+ Name: "S_Rainstorm_Shoes"
+},
+{
+ Id: 24503
+ AegisName: "S_Arrowvulcan_Weapon"
+ Name: "S_Arrowvulcan_Weapon"
+},
+{
+ Id: 24504
+ AegisName: "S_Arrowvulcan_Pendant"
+ Name: "S_Arrowvulcan_Pendant"
+},
+{
+ Id: 24505
+ AegisName: "S_Arrowvulcan_Earing"
+ Name: "S_Arrowvulcan_Earing"
+},
+{
+ Id: 24506
+ AegisName: "S_Metalic_Armor"
+ Name: "S_Metalic_Armor"
+},
+{
+ Id: 24507
+ AegisName: "S_Metalic_Shield"
+ Name: "S_Metalic_Shield"
+},
+{
+ Id: 24508
+ AegisName: "S_Metalic_Shoes"
+ Name: "S_Metalic_Shoes"
+},
+{
+ Id: 24509
+ AegisName: "S_Reverberation_Weapon"
+ Name: "S_Reverberation_Weapon"
+},
+{
+ Id: 24510
+ AegisName: "S_Reverberation_Pendant"
+ Name: "S_Reverberation_Pendant"
+},
+{
+ Id: 24511
+ AegisName: "S_Reverberation_Earing"
+ Name: "S_Reverberation_Earing"
+},
+{
+ Id: 24512
+ AegisName: "S_Jack_Armor"
+ Name: "S_Jack_Armor"
+},
+{
+ Id: 24513
+ AegisName: "S_Jack_Shield"
+ Name: "S_Jack_Shield"
+},
+{
+ Id: 24514
+ AegisName: "S_Jack_Shoes"
+ Name: "S_Jack_Shoes"
+},
+{
+ Id: 24515
+ AegisName: "S_Strain_Weapon"
+ Name: "S_Strain_Weapon"
+},
+{
+ Id: 24516
+ AegisName: "S_Strain_Pendant"
+ Name: "S_Strain_Pendant"
+},
+{
+ Id: 24517
+ AegisName: "S_Strain_Earing"
+ Name: "S_Strain_Earing"
+},
+{
+ Id: 24518
+ AegisName: "S_Crimson_Armor"
+ Name: "S_Crimson_Armor"
+},
+{
+ Id: 24519
+ AegisName: "S_Crimson_Shield"
+ Name: "S_Crimson_Shield"
+},
+{
+ Id: 24520
+ AegisName: "S_Crimson_Shoes"
+ Name: "S_Crimson_Shoes"
+},
+{
+ Id: 24521
+ AegisName: "S_Chain_Weapon"
+ Name: "S_Chain_Weapon"
+},
+{
+ Id: 24522
+ AegisName: "S_Chain_Pendant"
+ Name: "S_Chain_Pendant"
+},
+{
+ Id: 24523
+ AegisName: "S_Chain_Earing"
+ Name: "S_Chain_Earing"
+},
+{
+ Id: 24524
+ AegisName: "S_Triangle_Armor"
+ Name: "S_Triangle_Armor"
+},
+{
+ Id: 24525
+ AegisName: "S_Triangle_Shield"
+ Name: "S_Triangle_Shield"
+},
+{
+ Id: 24526
+ AegisName: "S_Triangle_Shoes"
+ Name: "S_Triangle_Shoes"
+},
+{
+ Id: 24527
+ AegisName: "S_Shadowspell_Weapon"
+ Name: "S_Shadowspell_Weapon"
+},
+{
+ Id: 24528
+ AegisName: "S_Shadowspell_Pendant"
+ Name: "S_Shadowspell_Pendant"
+},
+{
+ Id: 24529
+ AegisName: "S_Shadowspell_Earing"
+ Name: "S_Shadowspell_Earing"
+},
+{
+ Id: 24530
+ AegisName: "S_Menace_Armor"
+ Name: "S_Menace_Armor"
+},
+{
+ Id: 24531
+ AegisName: "S_Menace_Shield"
+ Name: "S_Menace_Shield"
+},
+{
+ Id: 24532
+ AegisName: "S_Menace_Shoes"
+ Name: "S_Menace_Shoes"
+},
+{
+ Id: 24533
+ AegisName: "S_Paint_Weapon"
+ Name: "S_Paint_Weapon"
+},
+{
+ Id: 24534
+ AegisName: "S_Paint_Pendant"
+ Name: "S_Paint_Pendant"
+},
+{
+ Id: 24535
+ AegisName: "S_Paint_Earing"
+ Name: "S_Paint_Earing"
+},
+{
+ Id: 24536
+ AegisName: "S_Rolling_Armor"
+ Name: "S_Rolling_Armor"
+},
+{
+ Id: 24537
+ AegisName: "S_Rolling_Shield"
+ Name: "S_Rolling_Shield"
+},
+{
+ Id: 24538
+ AegisName: "S_Rolling_Shoes"
+ Name: "S_Rolling_Shoes"
+},
+{
+ Id: 24539
+ AegisName: "S_Katar_Weapon"
+ Name: "S_Katar_Weapon"
+},
+{
+ Id: 24540
+ AegisName: "S_Katar_Pendant"
+ Name: "S_Katar_Pendant"
+},
+{
+ Id: 24541
+ AegisName: "S_Katar_Earing"
+ Name: "S_Katar_Earing"
+},
+{
+ Id: 24542
+ AegisName: "S_Slash_Armor"
+ Name: "S_Slash_Armor"
+},
+{
+ Id: 24543
+ AegisName: "S_Slash_Shield"
+ Name: "S_Slash_Shield"
+},
+{
+ Id: 24544
+ AegisName: "S_Slash_Shoes"
+ Name: "S_Slash_Shoes"
+},
+{
+ Id: 24545
+ AegisName: "S_Ripper_Weapon"
+ Name: "S_Ripper_Weapon"
+},
+{
+ Id: 24546
+ AegisName: "S_Ripper_Pendant"
+ Name: "S_Ripper_Pendant"
+},
+{
+ Id: 24547
+ AegisName: "S_Ripper_Earing"
+ Name: "S_Ripper_Earing"
+},
+{
+ Id: 24548
+ AegisName: "S_Dust_Armor"
+ Name: "S_Dust_Armor"
+},
+{
+ Id: 24549
+ AegisName: "S_Dust_Shield"
+ Name: "S_Dust_Shield"
+},
+{
+ Id: 24550
+ AegisName: "S_Dust_Shoes"
+ Name: "S_Dust_Shoes"
+},
+{
+ Id: 24551
+ AegisName: "S_Grave_Weapon"
+ Name: "S_Grave_Weapon"
+},
+{
+ Id: 24552
+ AegisName: "S_Grave_Pendant"
+ Name: "S_Grave_Pendant"
+},
+{
+ Id: 24553
+ AegisName: "S_Grave_Earing"
+ Name: "S_Grave_Earing"
+},
+{
+ Id: 24554
+ AegisName: "S_Psychic_Armor"
+ Name: "S_Psychic_Armor"
+},
+{
+ Id: 24555
+ AegisName: "S_Psychic_Shield"
+ Name: "S_Psychic_Shield"
+},
+{
+ Id: 24556
+ AegisName: "S_Psychic_Shoes"
+ Name: "S_Psychic_Shoes"
+},
+{
+ Id: 24557
+ AegisName: "S_Varetyr_Weapon"
+ Name: "S_Varetyr_Weapon"
+},
+{
+ Id: 24558
+ AegisName: "S_Varetyr_Pendant"
+ Name: "S_Varetyr_Pendant"
+},
+{
+ Id: 24559
+ AegisName: "S_Varetyr_Earing"
+ Name: "S_Varetyr_Earing"
+},
+{
+ Id: 24560
+ AegisName: "S_Cart_Tornado_Armor"
+ Name: "S_Cart_Tornado_Armor"
+},
+{
+ Id: 24561
+ AegisName: "S_Cart_Tornado_Shield"
+ Name: "S_Cart_Tornado_Shield"
+},
+{
+ Id: 24562
+ AegisName: "S_Cart_Tornado_Shoes"
+ Name: "S_Cart_Tornado_Shoes"
+},
+{
+ Id: 24563
+ AegisName: "S_Cannon_Cart_Weapon"
+ Name: "S_Cannon_Cart_Weapon"
+},
+{
+ Id: 24564
+ AegisName: "S_Cannon_Cart_Pendant"
+ Name: "S_Cannon_Cart_Pendant"
+},
+{
+ Id: 24565
+ AegisName: "S_Cannon_Cart_Earing"
+ Name: "S_Cannon_Cart_Earing"
+},
+{
+ Id: 24566
+ AegisName: "S_Spore_Bomb_Armor"
+ Name: "S_Spore_Bomb_Armor"
+},
+{
+ Id: 24567
+ AegisName: "S_Spore_Bomb_Shield"
+ Name: "S_Spore_Bomb_Shield"
+},
+{
+ Id: 24568
+ AegisName: "S_Spore_Bomb_Shoes"
+ Name: "S_Spore_Bomb_Shoes"
+},
+{
+ Id: 24569
+ AegisName: "S_Crazy_Weapon"
+ Name: "S_Crazy_Weapon"
+},
+{
+ Id: 24570
+ AegisName: "S_Crazy_Pendant"
+ Name: "S_Crazy_Pendant"
+},
+{
+ Id: 24571
+ AegisName: "S_Crazy_Earing"
+ Name: "S_Crazy_Earing"
+},
+{
+ Id: 24572
+ AegisName: "S_Brand_Armor"
+ Name: "S_Brand_Armor"
+},
+{
+ Id: 24573
+ AegisName: "S_Brand_Shield"
+ Name: "S_Brand_Shield"
+},
+{
+ Id: 24574
+ AegisName: "S_Brand_Shoes"
+ Name: "S_Brand_Shoes"
+},
+{
+ Id: 24575
+ AegisName: "S_Chain_Press_Weapon"
+ Name: "S_Chain_Press_Weapon"
+},
+{
+ Id: 24576
+ AegisName: "S_Chain_Press_Pendant"
+ Name: "S_Chain_Press_Pendant"
+},
+{
+ Id: 24577
+ AegisName: "S_Chain_Press_Earing"
+ Name: "S_Chain_Press_Earing"
+},
+{
+ Id: 24578
+ AegisName: "S_Banish_Cannon_Armor"
+ Name: "S_Banish_Cannon_Armor"
+},
+{
+ Id: 24579
+ AegisName: "S_Banish_Cannon_Shield"
+ Name: "S_Banish_Cannon_Shield"
+},
+{
+ Id: 24580
+ AegisName: "S_Banish_Cannon_Shoes"
+ Name: "S_Banish_Cannon_Shoes"
+},
+{
+ Id: 24581
+ AegisName: "S_Genesis_Weapon"
+ Name: "S_Genesis_Weapon"
+},
+{
+ Id: 24582
+ AegisName: "S_Genesis_Pendant"
+ Name: "S_Genesis_Pendant"
+},
+{
+ Id: 24583
+ AegisName: "S_Genesis_Earing"
+ Name: "S_Genesis_Earing"
+},
+{
Id: 25258
AegisName: "BrokenArrow"
Name: "BrokenArrow"
@@ -152386,6 +153977,186 @@ item_db: (
Name: "Inventory_Extension_Coupon"
},
{
+ Id: 25797
+ AegisName: "SuraStone_Robe2"
+ Name: "SuraStone_Robe2"
+},
+{
+ Id: 25798
+ AegisName: "SuraStone_Bottom2"
+ Name: "SuraStone_Bottom2"
+},
+{
+ Id: 25799
+ AegisName: "SuraStone_Middle2"
+ Name: "SuraStone_Middle2"
+},
+{
+ Id: 25800
+ AegisName: "SuraStone_Top2"
+ Name: "SuraStone_Top2"
+},
+{
+ Id: 25801
+ AegisName: "SorcererStone_Robe2"
+ Name: "SorcererStone_Robe2"
+},
+{
+ Id: 25802
+ AegisName: "SorcererStone_Bottom2"
+ Name: "SorcererStone_Bottom2"
+},
+{
+ Id: 25803
+ AegisName: "SorcererStone_Middle2"
+ Name: "SorcererStone_Middle2"
+},
+{
+ Id: 25804
+ AegisName: "SorcererStone_Top2"
+ Name: "SorcererStone_Top2"
+},
+{
+ Id: 25805
+ AegisName: "ShadowchaserStone_Robe2"
+ Name: "ShadowchaserStone_Robe2"
+},
+{
+ Id: 25806
+ AegisName: "ShadowchasStone_Bottom2"
+ Name: "ShadowchasStone_Bottom2"
+},
+{
+ Id: 25807
+ AegisName: "ShadowchasStone_Middle2"
+ Name: "ShadowchasStone_Middle2"
+},
+{
+ Id: 25808
+ AegisName: "ShadowchaserStone_Top2"
+ Name: "ShadowchaserStone_Top2"
+},
+{
+ Id: 25815
+ AegisName: "Ein_SOLIDDUST"
+ Name: "Ein_SOLIDDUST"
+},
+{
+ Id: 25816
+ AegisName: "Ein_RUSTHELM"
+ Name: "Ein_RUSTHELM"
+},
+{
+ Id: 25817
+ AegisName: "Ein_EYEROCK"
+ Name: "Ein_EYEROCK"
+},
+{
+ Id: 25842
+ AegisName: "SoulreaperStone_Robe"
+ Name: "SoulreaperStone_Robe"
+},
+{
+ Id: 25843
+ AegisName: "SoullinkerStone_Top"
+ Name: "SoullinkerStone_Top"
+},
+{
+ Id: 25844
+ AegisName: "SoullinkerStone_Middle"
+ Name: "SoullinkerStone_Middle"
+},
+{
+ Id: 25845
+ AegisName: "SoullinkerStone_Bottom"
+ Name: "SoullinkerStone_Bottom"
+},
+{
+ Id: 25846
+ AegisName: "GladiatorStone_Top"
+ Name: "GladiatorStone_Top"
+},
+{
+ Id: 25847
+ AegisName: "GladiatorStone_Middle"
+ Name: "GladiatorStone_Middle"
+},
+{
+ Id: 25848
+ AegisName: "GladiatorStone_Bottom"
+ Name: "GladiatorStone_Bottom"
+},
+{
+ Id: 25849
+ AegisName: "StaremperorStone_Robe"
+ Name: "StaremperorStone_Robe"
+},
+{
+ Id: 25850
+ AegisName: "NinjaStone_Top"
+ Name: "NinjaStone_Top"
+},
+{
+ Id: 25851
+ AegisName: "NinjaStone_Middle"
+ Name: "NinjaStone_Middle"
+},
+{
+ Id: 25852
+ AegisName: "NinjaStone_Bottom"
+ Name: "NinjaStone_Bottom"
+},
+{
+ Id: 25853
+ AegisName: "KagerouStone_Robe"
+ Name: "KagerouStone_Robe"
+},
+{
+ Id: 25854
+ AegisName: "OboroStone_Robe"
+ Name: "OboroStone_Robe"
+},
+{
+ Id: 25855
+ AegisName: "GunslingerStone_Top"
+ Name: "GunslingerStone_Top"
+},
+{
+ Id: 25856
+ AegisName: "GunslingerStone_Middle"
+ Name: "GunslingerStone_Middle"
+},
+{
+ Id: 25857
+ AegisName: "GunslingerStone_Bottom"
+ Name: "GunslingerStone_Bottom"
+},
+{
+ Id: 25858
+ AegisName: "RebellionStone_Robe"
+ Name: "RebellionStone_Robe"
+},
+{
+ Id: 25859
+ AegisName: "DoramStone_Top"
+ Name: "DoramStone_Top"
+},
+{
+ Id: 25860
+ AegisName: "DoramStone_Middle"
+ Name: "DoramStone_Middle"
+},
+{
+ Id: 25861
+ AegisName: "DoramStone_Bottom"
+ Name: "DoramStone_Bottom"
+},
+{
+ Id: 25862
+ AegisName: "DoramStone_Robe"
+ Name: "DoramStone_Robe"
+},
+{
Id: 26007
AegisName: "Spectral_Spear_IL"
Name: "Spectral_Spear_IL"
@@ -152436,6 +154207,11 @@ item_db: (
Name: "Metal_Foxtail"
},
{
+ Id: 26118
+ AegisName: "Shadow_Staff_K"
+ Name: "Shadow_Staff_K"
+},
+{
Id: 26119
AegisName: "Rebeginer_SO_Rod"
Name: "Rebeginer_SO_Rod"
@@ -152451,6 +154227,11 @@ item_db: (
Name: "Rutilus_Stick_OS"
},
{
+ Id: 26154
+ AegisName: "SoulWeight"
+ Name: "SoulWeight"
+},
+{
Id: 26155
AegisName: "MeawFoxtail"
Name: "MeawFoxtail"
@@ -152460,6 +154241,21 @@ item_db: (
AegisName: "Evt_Shadow_Staff_K"
Name: "Evt_Shadow_Staff_K"
},
+{
+ Id: 26162
+ AegisName: "Ein_1HWAND"
+ Name: "Ein_1HWAND"
+},
+{
+ Id: 26164
+ AegisName: "ElectricFox_OS"
+ Name: "ElectricFox_OS"
+},
+{
+ Id: 26215
+ AegisName: "Ein_1HWHIP"
+ Name: "Ein_1HWHIP"
+},
//== New Cards
@@ -152660,10 +154456,20 @@ item_db: (
Name: "Meuchler_OS"
},
{
+ Id: 28039
+ AegisName: "Shiver_Katar_K"
+ Name: "Shiver_Katar_K"
+},
+{
Id: 28040
AegisName: "Evt_Shiver_Katar_K"
Name: "Evt_Shiver_Katar_K"
},
+{
+ Id: 28045
+ AegisName: "Ein_BHKATAR"
+ Name: "Ein_BHKATAR"
+},
//== New Axes ==============================================
{
@@ -152816,6 +154622,11 @@ item_db: (
">
},
{
+ Id: 28130
+ AegisName: "Avenger"
+ Name: "Avenger"
+},
+{
Id: 28136
AegisName: "Blasti_OS"
Name: "Blasti_OS"
@@ -152825,6 +154636,11 @@ item_db: (
AegisName: "Evt_Avenger"
Name: "Evt_Avenger"
},
+{
+ Id: 28140
+ AegisName: "Ein_BHAXE"
+ Name: "Ein_BHAXE"
+},
//== New Grenade Launcher ==================================
{
@@ -152961,6 +154777,31 @@ item_db: (
AegisName: "HR_S55_OS"
Name: "HR_S55_OS"
},
+{
+ Id: 28254
+ AegisName: "Butcher_IL"
+ Name: "Butcher_IL"
+},
+{
+ Id: 28255
+ AegisName: "Master_Soul_Rifle"
+ Name: "Master_Soul_Rifle"
+},
+{
+ Id: 28256
+ AegisName: "Demon_S_Shot"
+ Name: "Demon_S_Shot"
+},
+{
+ Id: 28257
+ AegisName: "Golden_L_Launcher"
+ Name: "Golden_L_Launcher"
+},
+{
+ Id: 28258
+ AegisName: "The_Black_Gatling"
+ Name: "The_Black_Gatling"
+},
//== New Accessories =======================================
{
@@ -153600,10 +155441,20 @@ item_db: (
Name: "Circuit_Board_OS"
},
{
+ Id: 28630
+ AegisName: "Demon_Hunting_Bible_K"
+ Name: "Demon_Hunting_Bible_K"
+},
+{
Id: 28631
AegisName: "Time_Kamiji"
Name: "Time_Kamiji"
},
+{
+ Id: 28635
+ AegisName: "Ein_1HBOOK"
+ Name: "Ein_1HBOOK"
+},
//== New Daggers ===========================================
{
@@ -153763,6 +155614,11 @@ item_db: (
Name: "Rebeginer_SC_Dagger"
},
{
+ Id: 28744
+ AegisName: "Magic_Sword"
+ Name: "Magic_Sword"
+},
+{
Id: 28745
AegisName: "Counter_Dagger_IL"
Name: "Counter_Dagger_IL"
@@ -153777,6 +155633,31 @@ item_db: (
AegisName: "Evt_Magic_Sword"
Name: "Evt_Magic_Sword"
},
+{
+ Id: 28762
+ AegisName: "Bazerald_IL"
+ Name: "Bazerald_IL"
+},
+{
+ Id: 28763
+ AegisName: "Sharp_Wind_Sword"
+ Name: "Sharp_Wind_Sword"
+},
+{
+ Id: 28764
+ AegisName: "Fog_Dew_Sword"
+ Name: "Fog_Dew_Sword"
+},
+{
+ Id: 28771
+ AegisName: "Ein_1HDAGGER"
+ Name: "Ein_1HDAGGER"
+},
+{
+ Id: 28772
+ AegisName: "Ein_1HMAGGER"
+ Name: "Ein_1HMAGGER"
+},
//== New Shields ===========================================
{
@@ -154360,6 +156241,11 @@ item_db: (
Name: "Straight_Long_YL_"
},
{
+ Id: 31382
+ AegisName: "C_Cat_Ears_Punkish"
+ Name: "C_Cat_Ears_Punkish"
+},
+{
Id: 31387
AegisName: "Jjakk"
Name: "Jjakk"
@@ -154420,6 +156306,11 @@ item_db: (
Name: "C_Fluffy_Heart_Earmuffs"
},
{
+ Id: 31440
+ AegisName: "C_Snow_Bear_Food"
+ Name: "C_Snow_Bear_Food"
+},
+{
Id: 31452
AegisName: "White_Cat"
Name: "White_Cat"
@@ -154450,6 +156341,16 @@ item_db: (
Name: "Egg_Minihat"
},
{
+ Id: 31481
+ AegisName: "C_CatCoffeeCup_TW"
+ Name: "C_CatCoffeeCup_TW"
+},
+{
+ Id: 31483
+ AegisName: "C_CatEarRibbon_TW"
+ Name: "C_CatEarRibbon_TW"
+},
+{
Id: 31489
AegisName: "C_Bouquet_Hat"
Name: "C_Bouquet_Hat"
@@ -154475,6 +156376,11 @@ item_db: (
Name: "C_Elephangel_TH"
},
{
+ Id: 31512
+ AegisName: "C_Panda_Rabbit"
+ Name: "C_Panda_Rabbit"
+},
+{
Id: 31516
AegisName: "Mini_Melon"
Name: "Mini_Melon"
@@ -154495,21 +156401,111 @@ item_db: (
Name: "C_Happy_Rabbit_Ribbon"
},
{
+ Id: 31565
+ AegisName: "C_Princess_Ribbon_Crown"
+ Name: "C_Princess_Ribbon_Crown"
+},
+{
+ Id: 31569
+ AegisName: "C_OpenAir_Headset"
+ Name: "C_OpenAir_Headset"
+},
+{
+ Id: 31572
+ AegisName: "C_Mobile_Pursuit_System"
+ Name: "C_Mobile_Pursuit_System"
+},
+{
+ Id: 31573
+ AegisName: "C_Mecha_Cat_Ears"
+ Name: "C_Mecha_Cat_Ears"
+},
+{
+ Id: 31574
+ AegisName: "C_Cyber_Income"
+ Name: "C_Cyber_Income"
+},
+{
Id: 31580
AegisName: "Autumnal_Flavor"
Name: "Autumnal_Flavor"
},
{
+ Id: 31586
+ AegisName: "C_Poporing_Muffler"
+ Name: "C_Poporing_Muffler"
+},
+{
Id: 31589
AegisName: "GOLD_MAJESTIC_GOUT"
Name: "GOLD_MAJESTIC_GOUT"
},
{
+ Id: 31600
+ AegisName: "C_Kishu_Inu"
+ Name: "C_Kishu_Inu"
+},
+{
Id: 31606
AegisName: "C_Autumn_Headband"
Name: "C_Autumn_Headband"
},
{
+ Id: 31614
+ AegisName: "C_Fox"
+ Name: "C_Fox"
+},
+{
+ Id: 31616
+ AegisName: "C_Sleep_Sheep_TW"
+ Name: "C_Sleep_Sheep_TW"
+},
+{
+ Id: 31624
+ AegisName: "C_HeartOfCat_TW"
+ Name: "C_HeartOfCat_TW"
+},
+{
+ Id: 31625
+ AegisName: "C_Protect_Cloth"
+ Name: "C_Protect_Cloth"
+},
+{
+ Id: 31693
+ AegisName: "C_LunaticMuffler"
+ Name: "C_LunaticMuffler"
+},
+{
+ Id: 31698
+ AegisName: "C_Pigtail_Red_Hood"
+ Name: "C_Pigtail_Red_Hood"
+},
+{
+ Id: 31699
+ AegisName: "C_Smiling_Eyes"
+ Name: "C_Smiling_Eyes"
+},
+{
+ Id: 31765
+ AegisName: "C_Garnet_Tiara"
+ Name: "C_Garnet_Tiara"
+},
+{
+ Id: 31766
+ AegisName: "C_Peony_Hair_Ornament"
+ Name: "C_Peony_Hair_Ornament"
+},
+{
+ Id: 31787
+ AegisName: "C_SavageB_On_Shoulder"
+ Name: "C_SavageB_On_Shoulder"
+},
+{
+ Id: 31798
+ AegisName: "C_Baby_Panda"
+ Name: "C_Baby_Panda"
+},
+{
Id: 32005
AegisName: "Pole_Axe_IL"
Name: "Pole_Axe_IL"
@@ -154520,6 +156516,11 @@ item_db: (
Name: "Metal_Stick"
},
{
+ Id: 32018
+ AegisName: "Undine_Spear_K"
+ Name: "Undine_Spear_K"
+},
+{
Id: 32019
AegisName: "Boost_Lance_OS"
Name: "Boost_Lance_OS"
@@ -154530,6 +156531,16 @@ item_db: (
Name: "Evt_Undine_Spear_K"
},
{
+ Id: 32026
+ AegisName: "Ein_1HSPEAR"
+ Name: "Ein_1HSPEAR"
+},
+{
+ Id: 32110
+ AegisName: "Ein_1HLUTE"
+ Name: "Ein_1HLUTE"
+},
+{
Id: 32207
AegisName: "Illusion_B_R"
Name: "Illusion_B_R"
@@ -154559,4 +156570,1114 @@ item_db: (
AegisName: "Celine_Brooch"
Name: "Celine_Brooch"
},
+{
+ Id: 32301
+ AegisName: "Gold_Lux_IL"
+ Name: "Gold_Lux_IL"
+},
+{
+ Id: 32302
+ AegisName: "Crimson_Rose"
+ Name: "Crimson_Rose"
+},
+{
+ Id: 32303
+ AegisName: "Ein_1HGUN"
+ Name: "Ein_1HGUN"
+},
+{
+ Id: 32352
+ AegisName: "Ein_1HSWORD"
+ Name: "Ein_1HSWORD"
+},
+{
+ Id: 100000
+ AegisName: "IDTest_Special"
+ Name: "IDTest_Special"
+},
+{
+ Id: 100003
+ AegisName: "ILL_Piece_A"
+ Name: "ILL_Piece_A"
+},
+{
+ Id: 100004
+ AegisName: "ILL_Piece_B"
+ Name: "ILL_Piece_B"
+},
+{
+ Id: 100009
+ AegisName: "Joy_Of_Victory"
+ Name: "Joy_Of_Victory"
+},
+{
+ Id: 100010
+ AegisName: "PerfectSize_Mix"
+ Name: "PerfectSize_Mix"
+},
+{
+ Id: 100011
+ AegisName: "MagicPiercing_Mix"
+ Name: "MagicPiercing_Mix"
+},
+{
+ Id: 100023
+ AegisName: "Ancient_Hero_Bravery"
+ Name: "Ancient_Hero_Bravery"
+},
+{
+ Id: 100025
+ AegisName: "Ancient_Hero_Wisdom"
+ Name: "Ancient_Hero_Wisdom"
+},
+{
+ Id: 100043
+ AegisName: "Boost_Up_1"
+ Name: "Boost_Up_1"
+},
+{
+ Id: 100044
+ AegisName: "Boost_Up_2"
+ Name: "Boost_Up_2"
+},
+{
+ Id: 100053
+ AegisName: "Piercing_Mix"
+ Name: "Piercing_Mix"
+},
+{
+ Id: 100058
+ AegisName: "Hasty_Mix"
+ Name: "Hasty_Mix"
+},
+{
+ Id: 100060
+ AegisName: "EnchantStone_Recipe_4m"
+ Name: "EnchantStone_Recipe_4m"
+},
+{
+ Id: 100128
+ AegisName: "Noblesse_Rifine_Ticket"
+ Name: "Noblesse_Rifine_Ticket"
+},
+{
+ Id: 100129
+ AegisName: "Imperial_Rifine_Ticket"
+ Name: "Imperial_Rifine_Ticket"
+},
+{
+ Id: 100130
+ AegisName: "Grace_Rifine_Ticket"
+ Name: "Grace_Rifine_Ticket"
+},
+{
+ Id: 100131
+ AegisName: "Imperial_Convert1"
+ Name: "Imperial_Convert1"
+},
+{
+ Id: 100132
+ AegisName: "Imperial_Convert2"
+ Name: "Imperial_Convert2"
+},
+{
+ Id: 100133
+ AegisName: "Grace_Convert1"
+ Name: "Grace_Convert1"
+},
+{
+ Id: 100134
+ AegisName: "Grace_Convert2"
+ Name: "Grace_Convert2"
+},
+{
+ Id: 100135
+ AegisName: "Imperial_Convert3"
+ Name: "Imperial_Convert3"
+},
+{
+ Id: 100136
+ AegisName: "Imperial_Convert4"
+ Name: "Imperial_Convert4"
+},
+{
+ Id: 100137
+ AegisName: "Grace_Convert3"
+ Name: "Grace_Convert3"
+},
+{
+ Id: 100138
+ AegisName: "Grace_Convert4"
+ Name: "Grace_Convert4"
+},
+{
+ Id: 100142
+ AegisName: "Abyss_Ddbox2"
+ Name: "Abyss_Ddbox2"
+},
+{
+ Id: 100144
+ AegisName: "Abyss_Ddbox3"
+ Name: "Abyss_Ddbox3"
+},
+{
+ Id: 100145
+ AegisName: "Abyss_Ddbox4"
+ Name: "Abyss_Ddbox4"
+},
+{
+ Id: 400002
+ AegisName: "Victory_Wing_Ear_"
+ Name: "Victory_Wing_Ear_"
+},
+{
+ Id: 400020
+ AegisName: "C_BeachBall"
+ Name: "C_BeachBall"
+},
+{
+ Id: 440000
+ AegisName: "C_SharkHead"
+ Name: "C_SharkHead"
+},
+{
+ Id: 450001
+ AegisName: "Atker_Plate"
+ Name: "Atker_Plate"
+},
+{
+ Id: 450002
+ AegisName: "Ele_Robe"
+ Name: "Ele_Robe"
+},
+{
+ Id: 450003
+ AegisName: "Defn_Robe"
+ Name: "Defn_Robe"
+},
+{
+ Id: 450004
+ AegisName: "Ran_Suits"
+ Name: "Ran_Suits"
+},
+{
+ Id: 450018
+ AegisName: "Noblesse_Breath_Armor"
+ Name: "Noblesse_Breath_Armor"
+},
+{
+ Id: 450019
+ AegisName: "Noblesse_Knight_Armor"
+ Name: "Noblesse_Knight_Armor"
+},
+{
+ Id: 450020
+ AegisName: "Noblesse_Spear_Armor"
+ Name: "Noblesse_Spear_Armor"
+},
+{
+ Id: 450021
+ AegisName: "Noblesse_Genesis_Armor"
+ Name: "Noblesse_Genesis_Armor"
+},
+{
+ Id: 450022
+ AegisName: "Noblesse_Sharp_Suit"
+ Name: "Noblesse_Sharp_Suit"
+},
+{
+ Id: 450023
+ AegisName: "Noblesse_Aim_Suit"
+ Name: "Noblesse_Aim_Suit"
+},
+{
+ Id: 450024
+ AegisName: "Noblesse_Severe_Suit"
+ Name: "Noblesse_Severe_Suit"
+},
+{
+ Id: 450025
+ AegisName: "Noblesse_Reverb_Suit"
+ Name: "Noblesse_Reverb_Suit"
+},
+{
+ Id: 450026
+ AegisName: "Noblesse_Adora_Robe"
+ Name: "Noblesse_Adora_Robe"
+},
+{
+ Id: 450027
+ AegisName: "Noblesse_Duple_Robe"
+ Name: "Noblesse_Duple_Robe"
+},
+{
+ Id: 450028
+ AegisName: "Noblesse_Tonado_Armor"
+ Name: "Noblesse_Tonado_Armor"
+},
+{
+ Id: 450029
+ AegisName: "Noblesse_Vulcan_Armor"
+ Name: "Noblesse_Vulcan_Armor"
+},
+{
+ Id: 450030
+ AegisName: "Noblesse_Kart_Suit"
+ Name: "Noblesse_Kart_Suit"
+},
+{
+ Id: 450031
+ AegisName: "Noblesse_Kart_Suit2"
+ Name: "Noblesse_Kart_Suit2"
+},
+{
+ Id: 450032
+ AegisName: "Noblesse_Rolling_Suit"
+ Name: "Noblesse_Rolling_Suit"
+},
+{
+ Id: 450033
+ AegisName: "Noblesse_Assasin_Suit"
+ Name: "Noblesse_Assasin_Suit"
+},
+{
+ Id: 450034
+ AegisName: "Noblesse_Fatal_Suit"
+ Name: "Noblesse_Fatal_Suit"
+},
+{
+ Id: 450035
+ AegisName: "Noblesse_Stalker_Suit"
+ Name: "Noblesse_Stalker_Suit"
+},
+{
+ Id: 450036
+ AegisName: "Noblesse_Picky_Robe"
+ Name: "Noblesse_Picky_Robe"
+},
+{
+ Id: 450037
+ AegisName: "Noblesse_Carrot_Robe"
+ Name: "Noblesse_Carrot_Robe"
+},
+{
+ Id: 450038
+ AegisName: "Noblesse_Trip_Suit"
+ Name: "Noblesse_Trip_Suit"
+},
+{
+ Id: 450039
+ AegisName: "Noblesse_Firerain_Suit"
+ Name: "Noblesse_Firerain_Suit"
+},
+{
+ Id: 450040
+ AegisName: "Noblesse_Crimson_Robe"
+ Name: "Noblesse_Crimson_Robe"
+},
+{
+ Id: 450041
+ AegisName: "Noblesse_Frost_Robe"
+ Name: "Noblesse_Frost_Robe"
+},
+{
+ Id: 450042
+ AegisName: "Noblesse_Psychic_Robe"
+ Name: "Noblesse_Psychic_Robe"
+},
+{
+ Id: 450043
+ AegisName: "Noblesse_Dust_Robe"
+ Name: "Noblesse_Dust_Robe"
+},
+{
+ Id: 450044
+ AegisName: "Noblesse_Sun_Suit"
+ Name: "Noblesse_Sun_Suit"
+},
+{
+ Id: 450045
+ AegisName: "Noblesse_Moon_Suit"
+ Name: "Noblesse_Moon_Suit"
+},
+{
+ Id: 450046
+ AegisName: "Noblesse_Ninja_Suit"
+ Name: "Noblesse_Ninja_Suit"
+},
+{
+ Id: 450047
+ AegisName: "Noblesse_Kunai_Suit"
+ Name: "Noblesse_Kunai_Suit"
+},
+{
+ Id: 450048
+ AegisName: "Noblesse_Swhoo_Robe"
+ Name: "Noblesse_Swhoo_Robe"
+},
+{
+ Id: 450049
+ AegisName: "Noblesse_Explosion_Robe"
+ Name: "Noblesse_Explosion_Robe"
+},
+{
+ Id: 450050
+ AegisName: "Noblesse_Knuckle_Suit"
+ Name: "Noblesse_Knuckle_Suit"
+},
+{
+ Id: 450051
+ AegisName: "Noblesse_Tiger_Suit"
+ Name: "Noblesse_Tiger_Suit"
+},
+{
+ Id: 450052
+ AegisName: "Imperial_Breath_Armor"
+ Name: "Imperial_Breath_Armor"
+},
+{
+ Id: 450053
+ AegisName: "Imperial_Knight_Armor"
+ Name: "Imperial_Knight_Armor"
+},
+{
+ Id: 450054
+ AegisName: "Imperial_Spear_Armor"
+ Name: "Imperial_Spear_Armor"
+},
+{
+ Id: 450055
+ AegisName: "Imperial_Genesis_Armor"
+ Name: "Imperial_Genesis_Armor"
+},
+{
+ Id: 450056
+ AegisName: "Imperial_Sharp_Suit"
+ Name: "Imperial_Sharp_Suit"
+},
+{
+ Id: 450057
+ AegisName: "Imperial_Aim_Suit"
+ Name: "Imperial_Aim_Suit"
+},
+{
+ Id: 450058
+ AegisName: "Imperial_Severe_Suit"
+ Name: "Imperial_Severe_Suit"
+},
+{
+ Id: 450059
+ AegisName: "Imperial_Reverb_Suit"
+ Name: "Imperial_Reverb_Suit"
+},
+{
+ Id: 450060
+ AegisName: "Imperial_Adora_Robe"
+ Name: "Imperial_Adora_Robe"
+},
+{
+ Id: 450061
+ AegisName: "Imperial_Duple_Robe"
+ Name: "Imperial_Duple_Robe"
+},
+{
+ Id: 450062
+ AegisName: "Imperial_Knuckle_Suit"
+ Name: "Imperial_Knuckle_Suit"
+},
+{
+ Id: 450063
+ AegisName: "Imperial_Tiger_Suit"
+ Name: "Imperial_Tiger_Suit"
+},
+{
+ Id: 450064
+ AegisName: "Imperial_Tonado_Armor"
+ Name: "Imperial_Tonado_Armor"
+},
+{
+ Id: 450065
+ AegisName: "Imperial_Vulcan_Armor"
+ Name: "Imperial_Vulcan_Armor"
+},
+{
+ Id: 450066
+ AegisName: "Imperial_Kart_Suit"
+ Name: "Imperial_Kart_Suit"
+},
+{
+ Id: 450067
+ AegisName: "Imperial_Kart_Suit2"
+ Name: "Imperial_Kart_Suit2"
+},
+{
+ Id: 450068
+ AegisName: "Imperial_Rolling_Suit"
+ Name: "Imperial_Rolling_Suit"
+},
+{
+ Id: 450069
+ AegisName: "Imperial_Assasin_Suit"
+ Name: "Imperial_Assasin_Suit"
+},
+{
+ Id: 450070
+ AegisName: "Imperial_Fatal_Suit"
+ Name: "Imperial_Fatal_Suit"
+},
+{
+ Id: 450071
+ AegisName: "Imperial_Stalker_Suit"
+ Name: "Imperial_Stalker_Suit"
+},
+{
+ Id: 450072
+ AegisName: "Imperial_Picky_Robe"
+ Name: "Imperial_Picky_Robe"
+},
+{
+ Id: 450073
+ AegisName: "Imperial_Carrot_Robe"
+ Name: "Imperial_Carrot_Robe"
+},
+{
+ Id: 450074
+ AegisName: "Imperial_Trip_Suit"
+ Name: "Imperial_Trip_Suit"
+},
+{
+ Id: 450075
+ AegisName: "Imperial_Firerain_Suit"
+ Name: "Imperial_Firerain_Suit"
+},
+{
+ Id: 450076
+ AegisName: "Imperial_Crimson_Robe"
+ Name: "Imperial_Crimson_Robe"
+},
+{
+ Id: 450077
+ AegisName: "Imperial_Frost_Robe"
+ Name: "Imperial_Frost_Robe"
+},
+{
+ Id: 450078
+ AegisName: "Imperial_Psychic_Robe"
+ Name: "Imperial_Psychic_Robe"
+},
+{
+ Id: 450079
+ AegisName: "Imperial_Dust_Robe"
+ Name: "Imperial_Dust_Robe"
+},
+{
+ Id: 450080
+ AegisName: "Imperial_Sun_Suit"
+ Name: "Imperial_Sun_Suit"
+},
+{
+ Id: 450081
+ AegisName: "Imperial_Moon_Suit"
+ Name: "Imperial_Moon_Suit"
+},
+{
+ Id: 450082
+ AegisName: "Imperial_Ninja_Suit"
+ Name: "Imperial_Ninja_Suit"
+},
+{
+ Id: 450083
+ AegisName: "Imperial_Kunai_Suit"
+ Name: "Imperial_Kunai_Suit"
+},
+{
+ Id: 450084
+ AegisName: "Imperial_Swhoo_Robe"
+ Name: "Imperial_Swhoo_Robe"
+},
+{
+ Id: 450085
+ AegisName: "Imperial_Explosion_Robe"
+ Name: "Imperial_Explosion_Robe"
+},
+{
+ Id: 450086
+ AegisName: "Grace_Breath_Armor"
+ Name: "Grace_Breath_Armor"
+},
+{
+ Id: 450087
+ AegisName: "Grace_Knight_Armor"
+ Name: "Grace_Knight_Armor"
+},
+{
+ Id: 450088
+ AegisName: "Grace_Spear_Armor"
+ Name: "Grace_Spear_Armor"
+},
+{
+ Id: 450089
+ AegisName: "Grace_Genesis_Armor"
+ Name: "Grace_Genesis_Armor"
+},
+{
+ Id: 450090
+ AegisName: "Grace_Sharp_Suit"
+ Name: "Grace_Sharp_Suit"
+},
+{
+ Id: 450091
+ AegisName: "Grace_Aim_Suit"
+ Name: "Grace_Aim_Suit"
+},
+{
+ Id: 450092
+ AegisName: "Grace_Severe_Suit"
+ Name: "Grace_Severe_Suit"
+},
+{
+ Id: 450093
+ AegisName: "Grace_Reverb_Suit"
+ Name: "Grace_Reverb_Suit"
+},
+{
+ Id: 450094
+ AegisName: "Grace_Adora_Robe"
+ Name: "Grace_Adora_Robe"
+},
+{
+ Id: 450095
+ AegisName: "Grace_Duple_Robe"
+ Name: "Grace_Duple_Robe"
+},
+{
+ Id: 450096
+ AegisName: "Grace_Knuckle_Suit"
+ Name: "Grace_Knuckle_Suit"
+},
+{
+ Id: 450097
+ AegisName: "Grace_Tiger_Suit"
+ Name: "Grace_Tiger_Suit"
+},
+{
+ Id: 450098
+ AegisName: "Grace_Tonado_Armor"
+ Name: "Grace_Tonado_Armor"
+},
+{
+ Id: 450099
+ AegisName: "Grace_Vulcan_Armor"
+ Name: "Grace_Vulcan_Armor"
+},
+{
+ Id: 450100
+ AegisName: "Grace_Kart_Suit"
+ Name: "Grace_Kart_Suit"
+},
+{
+ Id: 450101
+ AegisName: "Grace_Kart_Suit2"
+ Name: "Grace_Kart_Suit2"
+},
+{
+ Id: 450102
+ AegisName: "Grace_Rolling_Suit"
+ Name: "Grace_Rolling_Suit"
+},
+{
+ Id: 450103
+ AegisName: "Grace_Assasin_Suit"
+ Name: "Grace_Assasin_Suit"
+},
+{
+ Id: 450104
+ AegisName: "Grace_Fatal_Suit"
+ Name: "Grace_Fatal_Suit"
+},
+{
+ Id: 450105
+ AegisName: "Grace_Stalker_Suit"
+ Name: "Grace_Stalker_Suit"
+},
+{
+ Id: 450106
+ AegisName: "Grace_Picky_Robe"
+ Name: "Grace_Picky_Robe"
+},
+{
+ Id: 450107
+ AegisName: "Grace_Carrot_Robe"
+ Name: "Grace_Carrot_Robe"
+},
+{
+ Id: 450108
+ AegisName: "Grace_Trip_Suit"
+ Name: "Grace_Trip_Suit"
+},
+{
+ Id: 450109
+ AegisName: "Grace_Firerain_Suit"
+ Name: "Grace_Firerain_Suit"
+},
+{
+ Id: 450110
+ AegisName: "Grace_Crimson_Robe"
+ Name: "Grace_Crimson_Robe"
+},
+{
+ Id: 450111
+ AegisName: "Grace_Frost_Robe"
+ Name: "Grace_Frost_Robe"
+},
+{
+ Id: 450112
+ AegisName: "Grace_Psychic_Robe"
+ Name: "Grace_Psychic_Robe"
+},
+{
+ Id: 450113
+ AegisName: "Grace_Dust_Robe"
+ Name: "Grace_Dust_Robe"
+},
+{
+ Id: 450114
+ AegisName: "Grace_Sun_Suit"
+ Name: "Grace_Sun_Suit"
+},
+{
+ Id: 450115
+ AegisName: "Grace_Moon_Suit"
+ Name: "Grace_Moon_Suit"
+},
+{
+ Id: 450116
+ AegisName: "Grace_Ninja_Suit"
+ Name: "Grace_Ninja_Suit"
+},
+{
+ Id: 450117
+ AegisName: "Grace_Kunai_Suit"
+ Name: "Grace_Kunai_Suit"
+},
+{
+ Id: 450118
+ AegisName: "Grace_Swhoo_Robe"
+ Name: "Grace_Swhoo_Robe"
+},
+{
+ Id: 450119
+ AegisName: "Grace_Explosion_Robe"
+ Name: "Grace_Explosion_Robe"
+},
+{
+ Id: 450121
+ AegisName: "Noblesse_Snovice_Suit"
+ Name: "Noblesse_Snovice_Suit"
+},
+{
+ Id: 450122
+ AegisName: "Noblesse_Snovice_Robe"
+ Name: "Noblesse_Snovice_Robe"
+},
+{
+ Id: 450123
+ AegisName: "Imperial_Snovice_Suit"
+ Name: "Imperial_Snovice_Suit"
+},
+{
+ Id: 450124
+ AegisName: "Imperial_Snovice_Robe"
+ Name: "Imperial_Snovice_Robe"
+},
+{
+ Id: 450125
+ AegisName: "Grace_Snovice_Suit"
+ Name: "Grace_Snovice_Suit"
+},
+{
+ Id: 450126
+ AegisName: "Grace_Snovice_Robe"
+ Name: "Grace_Snovice_Robe"
+},
+{
+ Id: 470000
+ AegisName: "Atker_Greave"
+ Name: "Atker_Greave"
+},
+{
+ Id: 470001
+ AegisName: "Ele_Shoes"
+ Name: "Ele_Shoes"
+},
+{
+ Id: 470002
+ AegisName: "Defn_Shoes"
+ Name: "Defn_Shoes"
+},
+{
+ Id: 470003
+ AegisName: "Ran_Boots"
+ Name: "Ran_Boots"
+},
+{
+ Id: 470016
+ AegisName: "Noblesse_Attack_Boots"
+ Name: "Noblesse_Attack_Boots"
+},
+{
+ Id: 470017
+ AegisName: "Noblesse_Magic_Boots"
+ Name: "Noblesse_Magic_Boots"
+},
+{
+ Id: 470018
+ AegisName: "Imperial_Attack_Boots"
+ Name: "Imperial_Attack_Boots"
+},
+{
+ Id: 470019
+ AegisName: "Imperial_Magic_Boots"
+ Name: "Imperial_Magic_Boots"
+},
+{
+ Id: 470020
+ AegisName: "Grace_Attack_Boots"
+ Name: "Grace_Attack_Boots"
+},
+{
+ Id: 470021
+ AegisName: "Grace_Magic_Boots"
+ Name: "Grace_Magic_Boots"
+},
+{
+ Id: 480000
+ AegisName: "Atker_Manteau"
+ Name: "Atker_Manteau"
+},
+{
+ Id: 480001
+ AegisName: "Ele_Muffler"
+ Name: "Ele_Muffler"
+},
+{
+ Id: 480002
+ AegisName: "Defn_Muffler"
+ Name: "Defn_Muffler"
+},
+{
+ Id: 480003
+ AegisName: "Ran_Manteau"
+ Name: "Ran_Manteau"
+},
+{
+ Id: 480012
+ AegisName: "Noblesse_Attack_Manteau"
+ Name: "Noblesse_Attack_Manteau"
+},
+{
+ Id: 480014
+ AegisName: "Noblesse_Magic_Manteau"
+ Name: "Noblesse_Magic_Manteau"
+},
+{
+ Id: 480016
+ AegisName: "Imperial_Attack_Manteau"
+ Name: "Imperial_Attack_Manteau"
+},
+{
+ Id: 480017
+ AegisName: "Imperial_Magic_Manteau"
+ Name: "Imperial_Magic_Manteau"
+},
+{
+ Id: 480018
+ AegisName: "Grace_Attack_Manteau"
+ Name: "Grace_Attack_Manteau"
+},
+{
+ Id: 480019
+ AegisName: "Grace_Magic_Manteau"
+ Name: "Grace_Magic_Manteau"
+},
+{
+ Id: 500001
+ AegisName: "Boost_Sword"
+ Name: "Boost_Sword"
+},
+{
+ Id: 500003
+ AegisName: "Light_Blade"
+ Name: "Light_Blade"
+},
+{
+ Id: 500004
+ AegisName: "Slate_Sword"
+ Name: "Slate_Sword"
+},
+{
+ Id: 510001
+ AegisName: "Boost_Dagger"
+ Name: "Boost_Dagger"
+},
+{
+ Id: 510002
+ AegisName: "Boost_Nindo"
+ Name: "Boost_Nindo"
+},
+{
+ Id: 510006
+ AegisName: "Fatalist"
+ Name: "Fatalist"
+},
+{
+ Id: 520000
+ AegisName: "Boost_Axe"
+ Name: "Boost_Axe"
+},
+{
+ Id: 530000
+ AegisName: "Boost_Spear"
+ Name: "Boost_Spear"
+},
+{
+ Id: 540000
+ AegisName: "Boost_Spl_Book"
+ Name: "Boost_Spl_Book"
+},
+{
+ Id: 540001
+ AegisName: "Boost_Text"
+ Name: "Boost_Text"
+},
+{
+ Id: 550001
+ AegisName: "Boost_Soul_Rod"
+ Name: "Boost_Soul_Rod"
+},
+{
+ Id: 550002
+ AegisName: "Boost_Foxtail"
+ Name: "Boost_Foxtail"
+},
+{
+ Id: 550006
+ AegisName: "Ein_1H_Foxtail"
+ Name: "Ein_1H_Foxtail"
+},
+{
+ Id: 550007
+ AegisName: "Freezing_Rod"
+ Name: "Freezing_Rod"
+},
+{
+ Id: 560000
+ AegisName: "Boost_Knuckle"
+ Name: "Boost_Knuckle"
+},
+{
+ Id: 560005
+ AegisName: "Ray_Knuckle"
+ Name: "Ray_Knuckle"
+},
+{
+ Id: 570000
+ AegisName: "Boost_Guitar"
+ Name: "Boost_Guitar"
+},
+{
+ Id: 570002
+ AegisName: "Trumpet_Shell_K"
+ Name: "Trumpet_Shell_K"
+},
+{
+ Id: 580000
+ AegisName: "Boost_Whip"
+ Name: "Boost_Whip"
+},
+{
+ Id: 580002
+ AegisName: "Barb_Wire_K"
+ Name: "Barb_Wire_K"
+},
+{
+ Id: 590000
+ AegisName: "Boost_Hall"
+ Name: "Boost_Hall"
+},
+{
+ Id: 590002
+ AegisName: "Meteor_Striker"
+ Name: "Meteor_Striker"
+},
+{
+ Id: 590003
+ AegisName: "Saint_Hall"
+ Name: "Saint_Hall"
+},
+{
+ Id: 600001
+ AegisName: "Boost_TH_Sword"
+ Name: "Boost_TH_Sword"
+},
+{
+ Id: 600004
+ AegisName: "Dragonic_Slayer"
+ Name: "Dragonic_Slayer"
+},
+{
+ Id: 610000
+ AegisName: "Boost_Katar"
+ Name: "Boost_Katar"
+},
+{
+ Id: 610003
+ AegisName: "Blade_Katar"
+ Name: "Blade_Katar"
+},
+{
+ Id: 640000
+ AegisName: "Boost_Staff"
+ Name: "Boost_Staff"
+},
+{
+ Id: 640004
+ AegisName: "Blue_Crystal_Staff"
+ Name: "Blue_Crystal_Staff"
+},
+{
+ Id: 700001
+ AegisName: "Boost_Bow"
+ Name: "Boost_Bow"
+},
+{
+ Id: 700003
+ AegisName: "Scalet_Dragon_L_Bow"
+ Name: "Scalet_Dragon_L_Bow"
+},
+{
+ Id: 830000
+ AegisName: "Boost_Gatling"
+ Name: "Boost_Gatling"
+},
+{
+ Id: 1000008
+ AegisName: "RangerStone_Top2"
+ Name: "RangerStone_Top2"
+},
+{
+ Id: 1000009
+ AegisName: "RangerStone_Middle2"
+ Name: "RangerStone_Middle2"
+},
+{
+ Id: 1000010
+ AegisName: "RangerStone_Bottom2"
+ Name: "RangerStone_Bottom2"
+},
+{
+ Id: 1000011
+ AegisName: "RangerStone_Robe2"
+ Name: "RangerStone_Robe2"
+},
+{
+ Id: 1000012
+ AegisName: "MechanicStone_Top2"
+ Name: "MechanicStone_Top2"
+},
+{
+ Id: 1000013
+ AegisName: "MechanicStone_Middle2"
+ Name: "MechanicStone_Middle2"
+},
+{
+ Id: 1000014
+ AegisName: "MechanicStone_Bottom2"
+ Name: "MechanicStone_Bottom2"
+},
+{
+ Id: 1000015
+ AegisName: "MechanicStone_Robe2"
+ Name: "MechanicStone_Robe2"
+},
+{
+ Id: 1000016
+ AegisName: "HighpriestStone_Top2"
+ Name: "HighpriestStone_Top2"
+},
+{
+ Id: 1000017
+ AegisName: "HighpriestStone_Middle2"
+ Name: "HighpriestStone_Middle2"
+},
+{
+ Id: 1000018
+ AegisName: "HighpriestStone_Bottom2"
+ Name: "HighpriestStone_Bottom2"
+},
+{
+ Id: 1000019
+ AegisName: "ArchbishopStone_Robe2"
+ Name: "ArchbishopStone_Robe2"
+},
+{
+ Id: 1000213
+ AegisName: "WarlockStone_Robe2"
+ Name: "WarlockStone_Robe2"
+},
+{
+ Id: 1000214
+ AegisName: "WarlockStone_Top2"
+ Name: "WarlockStone_Top2"
+},
+{
+ Id: 1000215
+ AegisName: "WarlockStone_Middle2"
+ Name: "WarlockStone_Middle2"
+},
+{
+ Id: 1000216
+ AegisName: "WarlockStone_Bottom2"
+ Name: "WarlockStone_Bottom2"
+},
+{
+ Id: 1000217
+ AegisName: "RoyalguardStone_Robe2"
+ Name: "RoyalguardStone_Robe2"
+},
+{
+ Id: 1000218
+ AegisName: "PaladinStone_Top2"
+ Name: "PaladinStone_Top2"
+},
+{
+ Id: 1000219
+ AegisName: "PaladinStone_Middle2"
+ Name: "PaladinStone_Middle2"
+},
+{
+ Id: 1000220
+ AegisName: "PaladinStone_Bottom2"
+ Name: "PaladinStone_Bottom2"
+},
+{
+ Id: 1000221
+ AegisName: "GuillcrossStone_Robe2"
+ Name: "GuillcrossStone_Robe2"
+},
+{
+ Id: 1000222
+ AegisName: "AssacrossStone_Top2"
+ Name: "AssacrossStone_Top2"
+},
+{
+ Id: 1000223
+ AegisName: "AssacrossStone_Middle2"
+ Name: "AssacrossStone_Middle2"
+},
+{
+ Id: 1000224
+ AegisName: "AssacrossStone_Bottom2"
+ Name: "AssacrossStone_Bottom2"
+},
)
diff --git a/db/re/item_lapineddukddak.conf b/db/re/item_lapineddukddak.conf
new file mode 100644
index 000000000..018be95ac
--- /dev/null
+++ b/db/re/item_lapineddukddak.conf
@@ -0,0 +1,2318 @@
+//================= Hercules Database =====================================
+//= _ _ _
+//= | | | | | |
+//= | |_| | ___ _ __ ___ _ _| | ___ ___
+//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __|
+//= | | | | __/ | | (__| |_| | | __/\__ \
+//= \_| |_/\___|_| \___|\__,_|_|\___||___/
+//================= License ===============================================
+//= This file is part of Hercules.
+//= http://herc.ws - http://github.com/HerculesWS/Hercules
+//=
+//= Copyright (C) 2018-2019 Hercules Dev Team
+//= Copyright (C) 2018-2019 Asheraf
+//=
+//= Hercules is free software: you can redistribute it and/or modify
+//= it under the terms of the GNU General Public License as published by
+//= the Free Software Foundation, either version 3 of the License, or
+//= (at your option) any later version.
+//=
+//= This program is distributed in the hope that it will be useful,
+//= but WITHOUT ANY WARRANTY; without even the implied warranty of
+//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+//= GNU General Public License for more details.
+//=
+//= You should have received a copy of the GNU General Public License
+//= along with this program. If not, see <http://www.gnu.org/licenses/>.
+//=========================================================================
+
+/**************************************************************************
+ ************* Entry structure ********************************************
+ **************************************************************************
+<Box_Item_Const>: {
+ NeedCount: (int, defaults to 0) The required amount of unique items
+ NeedRefineMin: (int, defaults to 0) The minimum refine for each of the items
+ NeedRefineMax: (int, defaults to 0) The maximum refine for each of the items
+ SourceItems: { A list of allowed items to be converted with specific amount for each item
+ <Item_Const>: <amount> (string, int)
+ ...
+ }
+ Script: <"
+ Script (it can be multi-line)
+ Executes on success
+ ">
+}
+**************************************************************************/
+/*
+22529: {
+ NeedCount: 3
+ SourceItems: {
+ S_CriticalHit_Armor: 1
+ S_Physical_Earring: 1
+ S_Physical_Weapon: 1
+ S_Physical_Pendant: 1
+ S_Magical_Earring: 1
+ S_Magical_Weapon: 1
+ S_Magical_Pendant: 1
+ S_Breezy_Armor: 1
+ S_Champion_Shoes: 1
+ S_Athena_Shield: 1
+ S_Immune_Armor: 1
+ S_Hard_Armor: 1
+ S_Ancient_Armor: 1
+ S_Critical_Armor: 1
+ S_Kingbird_Weapon: 1
+ S_Cri_Hit_Weapon: 1
+ S_Healing_Weapon: 1
+ S_Lucky_Weapon: 1
+ S_Power_Earring: 1
+ S_Int_Pendant: 1
+ S_Dexterous_Armor: 1
+ S_Vital_Shoes: 1
+ S_Athletic_Shield: 1
+ S_Lucky_Armor: 1
+ S_Power_Pendant: 1
+ S_Int_Earring: 1
+ S_Dexterous_Weapon: 1
+ S_Vital_Shield: 1
+ S_Athletic_Shoes: 1
+ S_Resist_Spell_Pendant: 1
+ S_Rapid_Pendant: 1
+ S_Caster_Pendant: 1
+ S_Hard_Earring: 1
+ S_Wise_Earring: 1
+ S_Athena_Earring: 1
+ S_Cranial_Shield: 1
+ S_Safeguard_Shield: 1
+ S_Brutal_Shield: 1
+ S_Gargantua_Shield: 1
+ S_Homers_Shield: 1
+ S_Dragoon_Shield: 1
+ S_Satanic_Shield: 1
+ S_Flameguard_Shield: 1
+ S_Requiem_Shield: 1
+ S_Cadi_Shield: 1
+ S_Bloody_Shoes: 1
+ S_Liberation_Shoes: 1
+ S_Chemical_Shoes: 1
+ S_Clamorous_Shoes: 1
+ S_Insecticide_Shoes: 1
+ S_Fisher_Shoes: 1
+ S_Seraphim_Shoes: 1
+ S_Beholder_Shoes: 1
+ S_Divine_Shoes: 1
+ S_Dragoon_Shoes: 1
+ S_Big_Armor: 1
+ S_Medium_Armor: 1
+ S_Small_Armor: 1
+ S_Big_Weapon: 1
+ S_Medium_Weapon: 1
+ S_Small_Weapon: 1
+ S_Spiritual_Weapon: 1
+ S_Spiritual_Earring: 1
+ S_Spiritual_Pendent: 1
+ S_Malicious_Armor: 1
+ S_Malicious_Shoes: 1
+ S_Malicious_Shield: 1
+ S_Gemstone_Armor: 1
+ S_Gemstone_Shoes: 1
+ S_Gemstone_Shield: 1
+ S_Gemstone_Weapon: 1
+ S_Gemstone_Earring: 1
+ S_Gemstone_Pendent: 1
+ S_Stability_Shield: 1
+ S_Plasterers_Armor: 1
+ S_Plasterers_Shoes: 1
+ S_Insomniac_Armor: 1
+ S_Insomniac_Shoes: 1
+ S_Peerless_Armor: 1
+ S_Peerless_Shoes: 1
+ S_Adurate_Armor: 1
+ S_Adurate_Shoes: 1
+ Unfreez_Weapon_S: 1
+ Unfreeze_Earing_S: 1
+ Unfreeze_Pendent_S: 1
+ Vitality_Earing_S: 1
+ Vitality_Pendant_S: 1
+ S_Neutral_Weapon: 1
+ S_Neutral_Earring: 1
+ S_Neutral_Pendent: 1
+ S_Curse_Lift_Earring: 1
+ S_Curse_Lift_Pendent: 1
+ S_Caster_earring: 1
+ S_Caster_Weapon: 1
+ S_Spell_Flow_Shoes: 1
+ S_Spell_Flow_Armor: 1
+ S_Spell_Flow_Shield: 1
+ S_Greed_Armor: 1
+ S_Greed_Shoes: 1
+ S_Greed_Shield: 1
+ S_Greed_Weapon: 1
+ S_Greed_Earring: 1
+ S_Greed_Pendant: 1
+ S_Heal_Armor: 1
+ S_Heal_Shoes: 1
+ S_Heal_Shield: 1
+ S_Heal_Weapon: 1
+ S_Heal_Earring: 1
+ S_Heal_Pendant: 1
+ S_Hiding_Armor: 1
+ S_Hiding_Shoes: 1
+ S_Hiding_Shield: 1
+ S_Hiding_Weapon: 1
+ S_Hiding_Earring: 1
+ S_Hiding_Pendant: 1
+ S_Cloaking_Armor: 1
+ S_Cloaking_Shoes: 1
+ S_Cloaking_Shield: 1
+ S_Cloaking_Weapon: 1
+ S_Cloaking_Earring: 1
+ S_Cloaking_Pendant: 1
+ S_Teleport_Armor: 1
+ S_Teleport_Shoes: 1
+ S_Teleport_Shield: 1
+ S_Teleport_Weapon: 1
+ S_Teleport_Earring: 1
+ S_Teleport_Pendant: 1
+ S_Steal_Armor: 1
+ S_Steal_Shoes: 1
+ S_Steal_Shield: 1
+ S_Steal_Weapon: 1
+ S_Steal_Earring: 1
+ S_Steal_Pendant: 1
+ S_Infinity_Earring: 1
+ S_Infinity_Pendant: 1
+ S_Solid_Weapon: 1
+ S_Solid_Earring: 1
+ S_Immortal_Armor: 1
+ S_Immortal_Pendant: 1
+ S_Executioner_Weapon: 1
+ S_Exorcist_Weapon: 1
+ S_Hunting_Weapon: 1
+ S_Insect_Net_Weapon: 1
+ S_Fishing_Weapon: 1
+ S_Dragon_Killer_Weapon: 1
+ S_Corrupt_Weapon: 1
+ S_Vibration_Weapon: 1
+ S_Holy_Water_Weapon: 1
+ S_Scissors_Weapon: 1
+ S_Penetration_Earring: 1
+ S_Penetration_Pendent: 1
+ S_Tempest_Earring: 1
+ S_Tempest_Pendent: 1
+ S_M_Executioner_Weapon: 1
+ S_M_Exorcist_Weapon: 1
+ S_M_Hunting_Weapon: 1
+ S_M_Insect_Net_Weapon: 1
+ S_M_Fishing_Weapon: 1
+ S_M_Dragon_K_Weapon: 1
+ S_M_Corrupt_Weapon: 1
+ S_M_Vibration_Weapon: 1
+ S_M_Holy_Water_Weapon: 1
+ S_M_Scissors_Weapon: 1
+ S_Bearers_Armor: 1
+ S_Bearers_Shoes: 1
+ S_Bearers_Shield: 1
+ S_Bearers_Weapon: 1
+ S_Bearers_Earring: 1
+ S_Bearers_Pendent: 1
+ S_Basis_Armor: 1
+ S_Hallowed_Armor: 1
+ S_Saharic_Armor: 1
+ S_Underneath_Armor: 1
+ S_Flam_Armor: 1
+ S_Windy_Armor: 1
+ S_Envenom_Armor: 1
+ S_Damned_Armor: 1
+ S_Geist_Armor: 1
+ S_Divine_Armor: 1
+ S_Hasty_Shoes: 1
+ S_Hasty_Armor: 1
+ S_Basis_Shield: 1
+ S_Hallowed_Shield: 1
+ S_Saharic_Shield: 1
+ S_Underneath_Shield: 1
+ S_Flam_Shield: 1
+ S_Windy_Shield: 1
+ S_Envenom_Shield: 1
+ S_Damned_Shield: 1
+ S_Geist_Shield: 1
+ S_Divine_Shield: 1
+ S_Expert_Shoes: 1
+ S_Expert_Shield: 1
+ S_Beginner_Shoes: 1
+ S_Beginner_Shield: 1
+ S_Rookie_Shoes: 1
+ S_Rookie_Shield: 1
+ S_Advanced_Shoes: 1
+ S_Advanced_Shield: 1
+ S_Attack_Armor: 1
+ S_Blitz_Earring: 1
+ S_Blitz_Pendent: 1
+ S_ColdBolt_Armor: 1
+ S_FireBolt_Armor: 1
+ S_LightingBolt_Armor: 1
+ S_EarthSpike_Armor: 1
+ S_Enhance_Force_Weapon: 1
+ S_Force_Weapon: 1
+ S_Force_Earring: 1
+ S_Force_Pendant: 1
+ S_Enhance_Spirit_Weapon: 1
+ S_Spirit_Weapon: 1
+ S_Spirit_Earring: 1
+ S_Spirit_Pendant: 1
+ S_Blitz_Shoes: 1
+ S_Blitz_Shield: 1
+ S_Exceed_Weapon: 1
+ S_Titan_Earring: 1
+ S_Titan_Pendant: 1
+ S_Boned_Earring: 1
+ S_Boned_Pendant: 1
+ S_Gigantic_Earring: 1
+ S_Gigantic_Pendant: 1
+ S_Caster_Shoes: 1
+ S_Caster_Shield: 1
+ S_Caster_Armor: 1
+ S_Reload_Shoes: 1
+ S_Reload_Shield: 1
+ S_Reload_Armor: 1
+ // 24246: 1
+ // 24247: 1
+ // 24248: 1
+ // 24249: 1
+ // 24250: 1
+ // 24251: 1
+ // 24252: 1
+ // 24253: 1
+ // 24254: 1
+ // 24255: 1
+ // 24256: 1
+ // 24257: 1
+ // 24258: 1
+ // 24259: 1
+ // 24260: 1
+ // 24261: 1
+ // 24262: 1
+ // 24263: 1
+ // 24264: 1
+ // 24265: 1
+ // 24266: 1
+ // 24267: 1
+ // 24268: 1
+ // 24269: 1
+ // 24270: 1
+ // 24271: 1
+ // 24272: 1
+ // 24273: 1
+ // 24274: 1
+ // 24275: 1
+ // 24276: 1
+ // 24277: 1
+ // 24278: 1
+ // 24279: 1
+ // 24280: 1
+ // 24281: 1
+ // 24282: 1
+ // 24283: 1
+ // 24284: 1
+ // 24285: 1
+ // 24286: 1
+ // 24287: 1
+ // 24288: 1
+ // 24289: 1
+ // 24290: 1
+ // 24291: 1
+ // 24292: 1
+ // 24293: 1
+ // 24294: 1
+ // 24295: 1
+ // 24296: 1
+ // 24297: 1
+ // 24298: 1
+ // 24299: 1
+ // 24300: 1
+ // 24301: 1
+ // 24302: 1
+ // 24303: 1
+ // 24304: 1
+ // 24305: 1
+ // 24306: 1
+ // 24307: 1
+ // 24308: 1
+ // 24309: 1
+ // 24310: 1
+ // 24311: 1
+ // 24312: 1
+ // 24313: 1
+ // 24314: 1
+ // 24315: 1
+ // 24316: 1
+ // 24317: 1
+ // 24318: 1
+ // 24319: 1
+ // 24320: 1
+ // 24321: 1
+ // 24322: 1
+ // 24323: 1
+ // 24324: 1
+ // 24325: 1
+ // 24326: 1
+ // 24327: 1
+ // 24328: 1
+ // 24329: 1
+ // 24330: 1
+ // 24331: 1
+ // 24332: 1
+ // 24333: 1
+ // 24334: 1
+ // 24335: 1
+ // 24336: 1
+ // 24337: 1
+ // 24338: 1
+ // 24339: 1
+ // 24340: 1
+ // 24345: 1
+ // 24346: 1
+ // 24347: 1
+ // 24348: 1
+ // 24349: 1
+ // 24350: 1
+ // 24351: 1
+ // 24352: 1
+ // 24353: 1
+ // 24354: 1
+ // 24355: 1
+ // 24356: 1
+ // 24357: 1
+ // 24358: 1
+ // 24359: 1
+ // 24360: 1
+ // 24361: 1
+ // 24362: 1
+ // 24363: 1
+ // 24364: 1
+ // 24365: 1
+ // 24366: 1
+ // 24367: 1
+ // 24368: 1
+ // 24369: 1
+ // 24370: 1
+ // 24371: 1
+ // 24372: 1
+ // 24373: 1
+ // 24374: 1
+ // 24375: 1
+ // 24376: 1
+ // 24377: 1
+ // 24378: 1
+ // 24379: 1
+ Sentimental_Weapone_S: 1
+ Sentimental_Earring_S: 1
+ Sentimental_Pendant_S: 1
+ Enchanting_Weapone_S: 1
+ Enchanting_Earring_S: 1
+ Enchanting_Pendant_S: 1
+ S_Infinity_Weapon: 1
+ S_Physical_Shoes: 1
+ S_Physical_Shield: 1
+ S_Physical_Armor: 1
+ S_Magical_Shoes: 1
+ S_Magical_Shield: 1
+ S_Magical_Armor: 1
+ S_ImmunedAthena_Shield: 1
+ S_HardChamption_Shoes: 1
+ S_KingbirdAncient_Armor: 1
+ S_Rebellion_Armor: 1
+ S_Kagerou_Armor: 1
+ S_Oboro_Armor: 1
+ S_Rebellion_Shoes: 1
+ S_Kagerou_Shoes: 1
+ S_Oboro_Shoes: 1
+ S_DoramPhysical_Armor: 1
+ S_DoramPhysical_Shoes: 1
+ S_DoramMagical_Armor: 1
+ S_DoramMagical_Shoes: 1
+ S_Star_Emperor_Armor: 1
+ S_Star_Emperor_Shoes: 1
+ S_Soul_Reaper_Armor: 1
+ S_Soul_Reaper_Shoes: 1
+ S_Tempest_Weapon: 1
+ S_Tempest_Armor: 1
+ S_PerfectSize_Weapon: 1
+ S_PerfectSize_Armor: 1
+ S_M_Exo_Co_Weapon: 1
+ S_M_Viv_Dr_Weapon: 1
+ S_M_Sci_Hu_Weapon: 1
+ S_M_Fis_In_Weapon: 1
+ S_M_Exe_Ho_Weapon: 1
+ S_Penetration_Weapon: 1
+ S_Penetration_Armor: 1
+ S_Exe_Ho_Weapon: 1
+ S_Fis_In_Weapon: 1
+ S_Sci_Hu_Weapon: 1
+ S_Viv_Dr_Weapon: 1
+ S_Exo_Co_Weapon: 1
+ S_Hasty_Weapon: 1
+ S_Sonic_Armor: 1
+ S_Sonic_Shield: 1
+ S_Sonic_Shoes: 1
+ S_Ignition_Weapon: 1
+ S_Ignition_Pendant: 1
+ S_Ignition_Earing: 1
+ S_W_Breath_Armor: 1
+ S_W_Breath_Shield: 1
+ S_W_Breath_Shoes: 1
+ S_F_Breath_Weapon: 1
+ S_F_Breath_Pendant: 1
+ S_F_Breath_Earing: 1
+ S_Cluster_Armor: 1
+ S_Cluster_Shield: 1
+ S_Cluster_Shoes: 1
+ S_Aimed_Weapon: 1
+ S_Aimed_Pendant: 1
+ S_Aimed_Earing: 1
+ S_Arrow_Armor: 1
+ S_Arrow_Shield: 1
+ S_Arrow_Shoes: 1
+ S_Shooting_Weapon: 1
+ S_Shooting_Pendant: 1
+ S_Shooting_Earing: 1
+ S_Tornado_Armor: 1
+ S_Tornado_Shield: 1
+ S_Tornado_Shoes: 1
+ S_Boomerang_Weapon: 1
+ S_Boomerang_Pendant: 1
+ S_Boomerang_Earing: 1
+ S_Vulcan_Armor: 1
+ S_Vulcan_Shield: 1
+ S_Vulcan_Shoes: 1
+ S_Arms_Weapon: 1
+ S_Arms_Pendant: 1
+ S_Arms_Earing: 1
+ S_Rampage_Armor: 1
+ S_Rampage_Shield: 1
+ S_Rampage_Shoes: 1
+ S_Skynetblow_Weapon: 1
+ S_Skynetblow_Pendant: 1
+ S_Skynetblow_Earing: 1
+ S_Knucklearrow_Armor: 1
+ S_Knucklearrow_Shield: 1
+ S_Knucklearrow_Shoes: 1
+ S_TigerCannon_Weapon: 1
+ S_Tigercannon_Pendant: 1
+ S_Tigercannon_Earing: 1
+ S_Duplelight_Armor: 1
+ S_Duplelight_Shield: 1
+ S_Duplelight_Shoes: 1
+ S_Adoramus_Weapon: 1
+ S_Adoramus_Pendant: 1
+ S_Adoramus_Earing: 1
+ S_Judex_Armor: 1
+ S_Judex_Shield: 1
+ S_Judex_Shoes: 1
+ S_Magnus_Weapon: 1
+ S_Magnus_Pendant: 1
+ S_Magnus_Earing: 1
+ S_Rainstorm_Armor: 1
+ S_Rainstorm_Shield: 1
+ S_Rainstorm_Shoes: 1
+ S_Arrowvulcan_Weapon: 1
+ S_Arrowvulcan_Pendant: 1
+ S_Arrowvulcan_Earing: 1
+ S_Metalic_Armor: 1
+ S_Metalic_Shield: 1
+ S_Metalic_Shoes: 1
+ S_Reverberation_Weapon: 1
+ S_Reverberation_Pendant: 1
+ S_Reverberation_Earing: 1
+ S_Jack_Armor: 1
+ S_Jack_Shield: 1
+ S_Jack_Shoes: 1
+ S_Strain_Weapon: 1
+ S_Strain_Pendant: 1
+ S_Strain_Earing: 1
+ S_Crimson_Armor: 1
+ S_Crimson_Shield: 1
+ S_Crimson_Shoes: 1
+ S_Chain_Weapon: 1
+ S_Chain_Pendant: 1
+ S_Chain_Earing: 1
+ S_Triangle_Armor: 1
+ S_Triangle_Shield: 1
+ S_Triangle_Shoes: 1
+ S_Shadowspell_Weapon: 1
+ S_Shadowspell_Pendant: 1
+ S_Shadowspell_Earing: 1
+ S_Menace_Armor: 1
+ S_Menace_Shield: 1
+ S_Menace_Shoes: 1
+ S_Paint_Weapon: 1
+ S_Paint_Pendant: 1
+ S_Paint_Earing: 1
+ S_Rolling_Armor: 1
+ S_Rolling_Shield: 1
+ S_Rolling_Shoes: 1
+ S_Katar_Weapon: 1
+ S_Katar_Pendant: 1
+ S_Katar_Earing: 1
+ S_Slash_Armor: 1
+ S_Slash_Shield: 1
+ S_Slash_Shoes: 1
+ S_Ripper_Weapon: 1
+ S_Ripper_Pendant: 1
+ S_Ripper_Earing: 1
+ S_Dust_Armor: 1
+ S_Dust_Shield: 1
+ S_Dust_Shoes: 1
+ S_Grave_Weapon: 1
+ S_Grave_Pendant: 1
+ S_Grave_Earing: 1
+ S_Psychic_Armor: 1
+ S_Psychic_Shield: 1
+ S_Psychic_Shoes: 1
+ S_Varetyr_Weapon: 1
+ S_Varetyr_Pendant: 1
+ S_Varetyr_Earing: 1
+ S_Cart_Tornado_Armor: 1
+ S_Cart_Tornado_Shield: 1
+ S_Cart_Tornado_Shoes: 1
+ S_Cannon_Cart_Weapon: 1
+ S_Cannon_Cart_Pendant: 1
+ S_Cannon_Cart_Earing: 1
+ S_Spore_Bomb_Armor: 1
+ S_Spore_Bomb_Shield: 1
+ S_Spore_Bomb_Shoes: 1
+ S_Crazy_Weapon: 1
+ S_Crazy_Pendant: 1
+ S_Crazy_Earing: 1
+ S_Brand_Armor: 1
+ S_Brand_Shield: 1
+ S_Brand_Shoes: 1
+ S_Chain_Press_Weapon: 1
+ S_Chain_Press_Pendant: 1
+ S_Chain_Press_Earing: 1
+ S_Banish_Cannon_Armor: 1
+ S_Banish_Cannon_Shield: 1
+ S_Banish_Cannon_Shoes: 1
+ S_Genesis_Weapon: 1
+ S_Genesis_Pendant: 1
+ S_Genesis_Earing: 1
+ // 28391: 1
+ // 28392: 1
+ }
+}
+*/
+/*
+23151: {
+ NeedCount: 3
+ SourceItems: {
+ // 6636: 1
+ // 6637: 1
+ // 6638: 1
+ // 6639: 1
+ // 6640: 1
+ // 6641: 1
+ // 6642: 1
+ // 6643: 1
+ // 6644: 1
+ // 6645: 1
+ // 6716: 1
+ // 6717: 1
+ // 6718: 1
+ // 6740: 1
+ // 6741: 1
+ // 6742: 1
+ // 6743: 1
+ // 6744: 1
+ // 6745: 1
+ // 6790: 1
+ // 6791: 1
+ // 6792: 1
+ // 6908: 1
+ // 6943: 1
+ // 6944: 1
+ // 6945: 1
+ // 6946: 1
+ // 6947: 1
+ // 6948: 1
+ // 6949: 1
+ // 6950: 1
+ // 6951: 1
+ // 6963: 1
+ // 6964: 1
+ // 6999: 1
+ // 25000: 1
+ // 25001: 1
+ // 25002: 1
+ // 25003: 1
+ // 25004: 1
+ // 25005: 1
+ // 25006: 1
+ // 25007: 1
+ // 25008: 1
+ // 25009: 1
+ // 25010: 1
+ // 25011: 1
+ // 25012: 1
+ // 25013: 1
+ // 25014: 1
+ // 25015: 1
+ // 25016: 1
+ // 25017: 1
+ // 25058: 1
+ // 25059: 1
+ // 25060: 1
+ // 25061: 1
+ // 25062: 1
+ // 25063: 1
+ // 25064: 1
+ // 25065: 1
+ // 25066: 1
+ // 25067: 1
+ // 25068: 1
+ // 25069: 1
+ // 25070: 1
+ // 25071: 1
+ // 25072: 1
+ // 25136: 1
+ // 25137: 1
+ // 25138: 1
+ // 25139: 1
+ // 25141: 1
+ // 25170: 1
+ // 25171: 1
+ // 25172: 1
+ // 25173: 1
+ // 25174: 1
+ // 25175: 1
+ // 25176: 1
+ // 25177: 1
+ // 25178: 1
+ // 25205: 1
+ // 25206: 1
+ // 25207: 1
+ // 25208: 1
+ // 25209: 1
+ // 25210: 1
+ // 25224: 1
+ // 25225: 1
+ // 25226: 1
+ // 25227: 1
+ // 25228: 1
+ // 25229: 1
+ // 25302: 1
+ // 25303: 1
+ // 25304: 1
+ // 25305: 1
+ // 25306: 1
+ SuraStone_Top: 1
+ SuraStone_Middle: 1
+ SuraStone_Bottom: 1
+ SuraStone_Robe: 1
+ RangerStone_Top: 1
+ RangerStone_Middle: 1
+ RangerStone_Bottom: 1
+ RangerStone_Robe: 1
+ SorcererStone_Top: 1
+ SorcererStone_Middle: 1
+ SorcererStone_Bottom: 1
+ SorcererStone_Robe: 1
+ RuneknightStone_Top: 1
+ RuneknightStone_Middle: 1
+ RuneknightStone_Bottom: 1
+ RuneknightStone_Robe: 1
+ GeneticStone_Robe: 1
+ GeneticStone_Top: 1
+ GeneticStone_Middle: 1
+ GeneticStone_Bottom: 1
+ WarlockStone_Top: 1
+ WarlockStone_Middle: 1
+ WarlockStone_Bottom: 1
+ WarlockStone_Robe: 1
+ ShadowchaserStone_Top: 1
+ ShadowchaseStone_Middle: 1
+ ShadowchaseStone_Bottom: 1
+ ShadowchaserStone_Robe: 1
+ MechanicStone_Top: 1
+ MechanicStone_Middle: 1
+ MechanicStone_Bottom: 1
+ MechanicStone_Robe: 1
+ WanderMinstrelStone_Top: 1
+ WanderMinstStone_Middle: 1
+ WanderMinstStone_Bottom: 1
+ WanderMinstreStone_Robe: 1
+ HighpriestStone_Top: 1
+ HighpriestStone_Middle: 1
+ HighpriestStone_Bottom: 1
+ ArchbishopStone_Robe: 1
+ PaladinStone_Top: 1
+ PaladinStone_Middle: 1
+ PaladinStone_Bottom: 1
+ RoyalguardStone_Robe: 1
+ AssacrossStone_Top: 1
+ AssacrossStone_Middle: 1
+ AssacrossStone_Bottom: 1
+ GuillcrossStone_Robe: 1
+ SuraStone_Robe2: 1
+ SuraStone_Bottom2: 1
+ SuraStone_Middle2: 1
+ SuraStone_Top2: 1
+ SorcererStone_Robe2: 1
+ SorcererStone_Bottom2: 1
+ SorcererStone_Middle2: 1
+ SorcererStone_Top2: 1
+ ShadowchaserStone_Robe2: 1
+ ShadowchasStone_Bottom2: 1
+ ShadowchasStone_Middle2: 1
+ ShadowchaserStone_Top2: 1
+ SoulreaperStone_Robe: 1
+ SoullinkerStone_Top: 1
+ SoullinkerStone_Middle: 1
+ SoullinkerStone_Bottom: 1
+ GladiatorStone_Top: 1
+ GladiatorStone_Middle: 1
+ GladiatorStone_Bottom: 1
+ StaremperorStone_Robe: 1
+ NinjaStone_Top: 1
+ NinjaStone_Middle: 1
+ NinjaStone_Bottom: 1
+ KagerouStone_Robe: 1
+ OboroStone_Robe: 1
+ GunslingerStone_Top: 1
+ GunslingerStone_Middle: 1
+ GunslingerStone_Bottom: 1
+ RebellionStone_Robe: 1
+ DoramStone_Top: 1
+ DoramStone_Middle: 1
+ DoramStone_Bottom: 1
+ DoramStone_Robe: 1
+ RangerStone_Top2: 1
+ RangerStone_Middle2: 1
+ RangerStone_Bottom2: 1
+ RangerStone_Robe2: 1
+ MechanicStone_Top2: 1
+ MechanicStone_Middle2: 1
+ MechanicStone_Bottom2: 1
+ MechanicStone_Robe2: 1
+ HighpriestStone_Top2: 1
+ HighpriestStone_Middle2: 1
+ HighpriestStone_Bottom2: 1
+ ArchbishopStone_Robe2: 1
+ WarlockStone_Robe2: 1
+ WarlockStone_Top2: 1
+ WarlockStone_Middle2: 1
+ WarlockStone_Bottom2: 1
+ RoyalguardStone_Robe2: 1
+ PaladinStone_Top2: 1
+ PaladinStone_Middle2: 1
+ PaladinStone_Bottom2: 1
+ GuillcrossStone_Robe2: 1
+ AssacrossStone_Top2: 1
+ AssacrossStone_Middle2: 1
+ AssacrossStone_Bottom2: 1
+ }
+}
+*/
+/*
+23152: {
+ NeedCount: 10
+ SourceItems: {
+ Danggie: 10
+ Tree_Root: 10
+ Reptile_Tongue: 10
+ Scorpions_Tail: 10
+ Stem: 10
+ Pointed_Scale: 10
+ Resin: 10
+ Spawn: 10
+ Jellopy: 10
+ Garlet: 10
+ Scell: 10
+ Zargon: 10
+ Tooth_Of_Bat: 10
+ Fluff: 10
+ Chrysalis: 10
+ Feather_Of_Birds: 10
+ Talon: 10
+ Sticky_Webfoot: 10
+ Animals_Skin: 10
+ Claw_Of_Wolves: 10
+ Mushroom_Spore: 10
+ Orcish_Cuspid: 10
+ Evil_Horn: 10
+ Powder_Of_Butterfly: 10
+ Bill_Of_Birds: 10
+ Scale_Of_Snakes: 10
+ Insect_Feeler: 10
+ Immortal_Heart: 10
+ Rotten_Bandage: 10
+ Orcish_Voucher: 10
+ Skel_Bone: 10
+ Shell: 10
+ Scales_Shell: 10
+ Posionous_Canine: 10
+ Sticky_Mucus: 10
+ Bee_Sting: 10
+ Grasshoppers_Leg: 10
+ Nose_Ring: 10
+ Yoyo_Tail: 10
+ Solid_Shell: 10
+ Horseshoe: 10
+ Raccoon_Leaf: 10
+ Snails_Shell: 10
+ Horn: 10
+ Bears_Foot: 10
+ Feather: 10
+ Heart_Of_Mermaid: 10
+ Fin: 10
+ Cactus_Needle: 10
+ Stone_Heart: 10
+ Shining_Scales: 10
+ Worm_Peelings: 10
+ Gill: 10
+ Decayed_Nail: 10
+ Horrendous_Mouth: 10
+ Rotten_Scale: 10
+ Nipper: 10
+ Conch: 10
+ Tentacle: 10
+ Sharp_Scale: 10
+ Crap_Shell: 10
+ Clam_Shell: 10
+ Flesh_Of_Clam: 10
+ Turtle_Shell: 10
+ Voucher_Of_Orcish_Hero: 10
+ Gold: 10
+ Lizard_Scruff: 10
+ Colorful_Shell: 10
+ Jaws_Of_Ant: 10
+ Thin_N_Long_Tongue: 10
+ Rat_Tail: 10
+ Moustache_Of_Mole: 10
+ Nail_Of_Mole: 10
+ Wooden_Block: 10
+ Long_Hair: 10
+ Dokkaebi_Horn: 10
+ Fox_Tail: 10
+ Fish_Tail: 10
+ Chinese_Ink: 10
+ Spiderweb: 10
+ Acorn: 10
+ Porcupine_Spike: 10
+ Wild_Boars_Mane: 10
+ Tigers_Skin: 10
+ Tiger_Footskin: 10
+ Limb_Of_Mantis: 10
+ Blossom_Of_Maneater: 10
+ Root_Of_Maneater: 10
+ Cobold_Hair: 10
+ Dragon_Canine: 10
+ Dragon_Scale: 10
+ Dragon_Train: 10
+ Petite_DiablOfs_Horn: 10
+ Petite_DiablOfs_Wing: 10
+ Elder_Pixies_Beard: 10
+ Lantern: 10
+ Short_Leg: 10
+ Nail_Of_Orc: 10
+ Tooth_Of_: 10
+ Sacred_Masque: 10
+ Tweezer: 10
+ Head_Of_Medusa: 10
+ Slender_Snake: 10
+ Skirt_Of_Virgin: 10
+ Tendon: 10
+ Detonator: 10
+ Single_Cell: 10
+ Tooth_Of_Ancient_Fish: 10
+ Lip_Of_Ancient_Fish: 10
+ Earthworm_Peeling: 10
+ Grit: 10
+ Moth_Dust: 10
+ Wing_Of_Moth: 10
+ Transparent_Cloth: 10
+ Golden_Hair: 10
+ Starsand_Of_Witch: 10
+ Pumpkin_Head: 10
+ Sharpened_Cuspid: 10
+ Reins: 10
+ Tree_Of_Archer_1: 10
+ Tree_Of_Archer_2: 10
+ Tree_Of_Archer_3: 10
+ Short_Daenggie: 10
+ Needle_Of_Alarm: 10
+ Round_Shell: 10
+ Worn_Out_Page: 10
+ Manacles: 10
+ Worn_Out_Prison_Uniform: 10
+ Light_Up_Card1: 10
+ Light_Up_Card2: 10
+ Light_Up_Card3: 10
+ Light_Up_Card4: 10
+ Fur: 10
+ Peaked_Hat: 10
+ Hard_Skin: 10
+ Mystic_Horn: 10
+ Rakehorn_Helm: 10
+ Antler_Helm: 10
+ Twinhorn_Helm: 10
+ Singlehorn_Helm: 10
+ White_Spider_Limb: 10
+ Fortune_Cookie_Fail: 10
+ Tikbalang_Thick_Spine: 10
+ Glast_Decayed_Nail: 10
+ Glast_Horrendous_Mouth: 10
+ // 6648: 10
+ // 6936: 10
+ // 6937: 10
+ // 6938: 10
+ // 6939: 10
+ // 6940: 10
+ // 6941: 10
+ // 6942: 10
+ Mould_Powder: 10
+ Ogre_Tooth: 10
+ Anolian_Skin: 10
+ Mud_Lump: 10
+ Skull: 10
+ Wing_Of_Red_Bat: 10
+ Claw_Of_Rat: 10
+ Stiff_Horn: 10
+ Glitter_Shell: 10
+ Tail_Of_Steel_Scorpion: 10
+ Claw_Of_Monkey: 10
+ Tough_Scalelike_Stem: 10
+ Coral_Reef: 10
+ Executioners_Mitten: 10
+ Claw_Of_Desert_Wolf: 10
+ Old_Frying_Pan: 10
+ Piece_Of_Egg_Shell: 10
+ Poison_Spore: 10
+ Alices_Apron: 10
+ Talon_Of_Griffin: 10
+ Cyfar: 10
+ Brigan: 10
+ Treasure_Box: 10
+ Old_White_Cloth: 10
+ Clattering_Skull: 10
+ Broken_Farming_Utensil: 10
+ Broken_Crown: 10
+ // 25156: 10
+ // 25157: 10
+ // 25158: 10
+ // 25256: 10
+ BrokenArrow: 10
+ // 25259: 10
+ // 25261: 10
+ // 25262: 10
+ // 25263: 10
+ // 25264: 10
+ Shining_Spore: 10
+ Dried_Leaf_Of_Ygg: 10
+ // 25267: 10
+ // 25272: 10
+ // 25276: 10
+ // 25277: 10
+ // 25278: 10
+ // 25279: 10
+ // 25280: 10
+ // 25281: 10
+ // 25282: 10
+ // 25283: 10
+ // 25284: 10
+ // 25285: 10
+ // 25297: 10
+ // 25298: 10
+ // 25299: 10
+ // 25300: 10
+ // 25311: 10
+ // 25312: 10
+ // 25313: 10
+ Ein_SOLIDDUST: 10
+ Ein_RUSTHELM: 10
+ Ein_EYEROCK: 10
+ }
+}
+*/
+/*
+23153: {
+ NeedCount: 2
+ SourceItems: {
+ Poring_Egg: 1
+ Drops_Egg: 1
+ Poporing_Egg: 1
+ Lunatic_Egg: 1
+ Picky_Egg: 1
+ Chonchon_Egg: 1
+ Steel_Chonchon_Egg: 1
+ Hunter_Fly_Egg: 1
+ Savage_Bebe_Egg: 1
+ Baby_Desert_Wolf_Egg: 1
+ Rocker_Egg: 1
+ Spore_Egg: 1
+ Poison_Spore_Egg: 1
+ PecoPeco_Egg: 1
+ Smokie_Egg: 1
+ Yoyo_Egg: 1
+ Orc_Warrior_Egg: 1
+ Munak_Egg: 1
+ Dokkaebi_Egg: 1
+ Sohee_Egg: 1
+ Isis_Egg: 1
+ Green_Petite_Egg: 1
+ Deviruchi_Egg: 1
+ Bapho_Jr_Egg: 1
+ Bongun_Egg: 1
+ Zherlthsh_Egg: 1
+ Alice_Egg: 1
+ Rice_Cake_Egg: 1
+ Santa_Goblin_Egg: 1
+ Chung_E_Egg: 1
+ Spring_Rabbit_Egg: 1
+ Knife_Goblin_Egg: 1
+ Flail_Goblin_Egg: 1
+ Hammer_Goblin_Egg: 1
+ Red_Deleter_Egg: 1
+ Diabolic_Egg: 1
+ Wanderer_Egg: 1
+ New_Year_Doll_Egg: 1
+ Bacsojin_Egg: 1
+ Civil_Servant_Egg: 1
+ Leaf_Cat_Egg: 1
+ Loli_Ruri_Egg: 1
+ Marionette_Egg: 1
+ Shinobi_Egg: 1
+ Whisper_Egg: 1
+ Goblin_Leader_Egg: 1
+ Wicked_Nymph_Egg: 1
+ Miyabi_Ningyo_Egg: 1
+ Dullahan_Egg: 1
+ Medusa_Egg: 1
+ Stone_Shooter_Egg: 1
+ Incubus_Egg: 1
+ Golem_Egg: 1
+ Nightmare_Terror_Egg: 1
+ Succubus_Egg: 1
+ Imp_Egg: 1
+ Egg_Of_Tiny: 1
+ Snow_Rabbit_Egg: 1
+ Tikbalang_Pet: 1
+ Brownie_Egg: 1
+ Marin_Egg: 1
+ // 9063: 1
+ // 9068: 1
+ Nine_Tails_Egg: 1
+ Teddy_Bear_Egg: 1
+ Gremlin_Egg: 1
+ Scatelon_Egg: 1
+ Mummy_Egg: 1
+ Willow_Egg: 1
+ Roween_Egg: 1
+ }
+}
+*/
+/*
+23154: {
+ NeedCount: 1
+ SourceItems: {
+ // 5909: 1
+ // 5979: 1
+ C_Hair_Of_The_Strong: 1
+ // 19158: 1
+ // 19289: 1
+ C_Shiba_Inu: 1
+ C_CatEars_Cyber_HeadP_R: 1
+ C_Chick_Hat: 1
+ C_Whikebain_Ears: 1
+ C_J_Captain_Hat: 1
+ C_Little_Angel_Doll: 1
+ C_Darkness_Helm: 1
+ C_White_Lily: 1
+ C_Lolita_Ten_Gallon_Hat: 1
+ C_Pecopeco_Cap: 1
+ C_White_Cat_Hood: 1
+ C_Rabbit_Ear_Hat: 1
+ C_3D_Glasses: 1
+ C_Drooping_Argiope: 1
+ C_Chain_Puppet: 1
+ C_Snow_Rabbit_Knit_Hat: 1
+ C_Chilly_Breath: 1
+ C_Love_Fragment: 1
+ C_Buddhist_Priest_Crown: 1
+ C_Sword_Master_Crown: 1
+ C_Worg_In_Mouth: 1
+ C_Vampire_Hairband: 1
+ C_Whisper_Tall_Hat: 1
+ C_Subject_Aura: 1
+ C_Poring_Mascot_Costume: 1
+ C_Robo_Eye: 1
+ C_Angel_Spirit: 1
+ C_Bell_Pigeon: 1
+ C_Sepia_Cap: 1
+ C_Pumpkin_Head: 1
+ C_Halloween_Hat_Orange: 1
+ C_Diabolic_Headphone: 1
+ C_Scratching_Cat: 1
+ C_Evil_Marcher_Hat: 1
+ C_Rabbit_Head_Dress: 1
+ C_Banshee_Master_Kiss: 1
+ C_Deviruchi_Balloon: 1
+ C_Mask_Of_Bankrupt: 1
+ C_Snowman_Hat: 1
+ C_Celines_Ribbon: 1
+ C_Gold_Angel_Sculpture: 1
+ C_Large_Ribbon_Muffler: 1
+ C_Snownow_Hat: 1
+ C_Love_Cheek: 1
+ C_Black_Rabbit_Bonnet: 1
+ C_Secret_Zipper: 1
+ C_Sleep_Eclipse_Family: 1
+ C_Soft_Sheep_Hat: 1
+ C_Under_Rim_Glasses_Red: 1
+ C_Face_Crusher: 1
+ C_Hill_Wind_Mask: 1
+ C_Analyze_Eye: 1
+ C_Charleston_Antenna: 1
+ // 20325: 1
+ C_Very_Cute_Doll_Hat: 1
+ C_Sombrero: 1
+ // 20340: 1
+ // 20341: 1
+ // 20342: 1
+ // 20349: 1
+ // 20350: 1
+ // 20351: 1
+ // 20352: 1
+ // 20353: 1
+ // 20354: 1
+ // 20355: 1
+ // 20356: 1
+ // 20357: 1
+ // 20358: 1
+ // 20359: 1
+ // 20360: 1
+ // 20361: 1
+ // 20362: 1
+ // 20363: 1
+ // 20364: 1
+ // 20365: 1
+ // 20366: 1
+ // 20367: 1
+ // 20368: 1
+ // 20369: 1
+ // 20370: 1
+ // 20381: 1
+ // 20395: 1
+ // 20396: 1
+ // 20398: 1
+ // 20399: 1
+ // 20404: 1
+ // 20405: 1
+ // 20430: 1
+ // 20432: 1
+ // 20433: 1
+ // 20440: 1
+ // 20447: 1
+ // 20448: 1
+ // 20449: 1
+ // 20458: 1
+ // 20459: 1
+ // 20464: 1
+ // 20482: 1
+ // 20486: 1
+ // 20487: 1
+ // 20488: 1
+ // 20489: 1
+ // 20491: 1
+ // 20499: 1
+ // 20502: 1
+ // 20504: 1
+ // 20507: 1
+ // 20509: 1
+ // 20510: 1
+ // 20511: 1
+ C_Thanatos_Sword: 1
+ C_Magic_Circle: 1
+ C_Wings_of_Michael: 1
+ C_GiantCatBag_TW: 1
+ C_Full_BloomCherry_Tree: 1
+ C_PinkButterfly_Wing_T: 1
+ C_Digital_Space: 1
+ C_Halloween_Poring_Bag: 1
+ C_Backside_Ribbon_Bell: 1
+ C_HeartChocoBag: 1
+ C_WingOfHeart: 1
+ C_Cat_Fork: 1
+ C_Big_Foxtail: 1
+ C_Rudra_Wing: 1
+ C_Wing_Of_Happiness: 1
+ C_GreatDevilWing: 1
+ C_Fallen_Angel_Wing: 1
+ C_Archangel_Wing: 1
+ // 31027: 1
+ // 31029: 1
+ // 31031: 1
+ // 31033: 1
+ // 31040: 1
+ // 31055: 1
+ // 31057: 1
+ // 31062: 1
+ // 31063: 1
+ // 31064: 1
+ // 31065: 1
+ // 31066: 1
+ // 31067: 1
+ // 31068: 1
+ // 31069: 1
+ // 31070: 1
+ // 31071: 1
+ // 31072: 1
+ // 31073: 1
+ // 31074: 1
+ // 31075: 1
+ // 31076: 1
+ // 31077: 1
+ // 31078: 1
+ // 31079: 1
+ // 31080: 1
+ // 31081: 1
+ // 31082: 1
+ // 31083: 1
+ // 31084: 1
+ // 31085: 1
+ // 31086: 1
+ // 31087: 1
+ // 31088: 1
+ // 31118: 1
+ // 31120: 1
+ // 31123: 1
+ // 31125: 1
+ // 31134: 1
+ // 31136: 1
+ // 31139: 1
+ // 31160: 1
+ // 31162: 1
+ // 31164: 1
+ // 31165: 1
+ // 31166: 1
+ // 31168: 1
+ // 31178: 1
+ // 31180: 1
+ C_Black_Cat: 1
+ Rabbit_Hopping: 1
+ Warm_Cat_Muffler: 1
+ C_Ghost_Holiday: 1
+ C_Alice_Wig: 1
+ C_Khalitzburg_Helm_BL: 1
+ C_Cat_Ears_Punkish: 1
+ C_Sorcerer_Hood: 1
+ C_Pope_Sitting_Head: 1
+ C_Blinking_Thin_Eyes: 1
+ C_Wanderer_Sakkat: 1
+ C_Luwmin_Ice: 1
+ C_Baby_Penguin: 1
+ C_Fluffy_Heart_Earmuffs: 1
+ C_Snow_Bear_Food: 1
+ C_Blessing_Sky_Lantern: 1
+ C_CatCoffeeCup_TW: 1
+ C_CatEarRibbon_TW: 1
+ C_Bouquet_Hat: 1
+ C_Poring_Muffler: 1
+ C_Panda_Rabbit: 1
+ C_Happy_Rabbit_Ribbon: 1
+ C_Princess_Ribbon_Crown: 1
+ C_OpenAir_Headset: 1
+ C_Mobile_Pursuit_System: 1
+ C_Mecha_Cat_Ears: 1
+ C_Cyber_Income: 1
+ C_Poporing_Muffler: 1
+ C_Kishu_Inu: 1
+ C_Autumn_Headband: 1
+ C_Fox: 1
+ C_Sleep_Sheep_TW: 1
+ C_HeartOfCat_TW: 1
+ C_Protect_Cloth: 1
+ C_LunaticMuffler: 1
+ C_Pigtail_Red_Hood: 1
+ C_Smiling_Eyes: 1
+ C_Garnet_Tiara: 1
+ C_Peony_Hair_Ornament: 1
+ C_SavageB_On_Shoulder: 1
+ C_Baby_Panda: 1
+ C_BeachBall: 1
+ C_SharkHead: 1
+ }
+}
+*/
+/*
+23170: {
+ NeedCount: 1
+ SourceItems: {
+ // 28439: 1
+ }
+}
+*/
+/*
+23236: {
+ NeedCount: 1
+ NeedRefineMin: 7
+ SourceItems: {
+ // 24282: 1
+ // 24283: 1
+ // 24284: 1
+ // 24285: 1
+ // 24286: 1
+ // 24287: 1
+ // 24288: 1
+ // 24289: 1
+ // 24290: 1
+ // 24291: 1
+ // 24292: 1
+ // 24293: 1
+ // 24294: 1
+ // 24295: 1
+ // 24296: 1
+ // 24297: 1
+ // 24298: 1
+ // 24299: 1
+ // 24300: 1
+ }
+}
+*/
+/*
+23237: {
+ NeedCount: 1
+ NeedRefineMin: 7
+ SourceItems: {
+ // 24269: 1
+ // 24270: 1
+ // 24271: 1
+ // 24272: 1
+ // 24273: 1
+ // 24274: 1
+ // 24275: 1
+ // 24276: 1
+ // 24277: 1
+ // 24278: 1
+ // 24279: 1
+ // 24280: 1
+ // 24281: 1
+ S_Rebellion_Armor: 1
+ S_Kagerou_Armor: 1
+ S_Oboro_Armor: 1
+ S_DoramPhysical_Armor: 1
+ S_DoramMagical_Armor: 1
+ S_Star_Emperor_Armor: 1
+ S_Soul_Reaper_Armor: 1
+ }
+}
+*/
+/*
+23238: {
+ NeedCount: 1
+ NeedRefineMin: 7
+ SourceItems: {
+ // 24256: 1
+ // 24257: 1
+ // 24258: 1
+ // 24259: 1
+ // 24260: 1
+ // 24261: 1
+ // 24262: 1
+ // 24263: 1
+ // 24264: 1
+ // 24265: 1
+ // 24266: 1
+ // 24267: 1
+ // 24268: 1
+ S_Rebellion_Shoes: 1
+ S_Kagerou_Shoes: 1
+ S_Oboro_Shoes: 1
+ S_DoramPhysical_Shoes: 1
+ S_DoramMagical_Shoes: 1
+ S_Star_Emperor_Shoes: 1
+ S_Soul_Reaper_Shoes: 1
+ }
+}
+*/
+/*
+23239: {
+ NeedCount: 1
+ NeedRefineMin: 7
+ SourceItems: {
+ // 24301: 1
+ // 24302: 1
+ // 24303: 1
+ // 24304: 1
+ // 24305: 1
+ // 24306: 1
+ // 24307: 1
+ // 24308: 1
+ // 24309: 1
+ // 24310: 1
+ // 24311: 1
+ // 24312: 1
+ // 24313: 1
+ // 24314: 1
+ // 24315: 1
+ // 24316: 1
+ // 24317: 1
+ // 24318: 1
+ // 24319: 1
+ }
+}
+*/
+/*
+23240: {
+ NeedCount: 1
+ NeedRefineMin: 7
+ SourceItems: {
+ // 24250: 1
+ // 24251: 1
+ // 24252: 1
+ // 24253: 1
+ // 24254: 1
+ // 24255: 1
+ }
+}
+*/
+/*
+23241: {
+ NeedCount: 1
+ NeedRefineMin: 7
+ SourceItems: {
+ // 24246: 1
+ // 24247: 1
+ // 24248: 1
+ // 24249: 1
+ // 28391: 1
+ // 28392: 1
+ }
+}
+*/
+/*
+23247: {
+ NeedCount: 5
+ NeedRefineMin: 7
+ SourceItems: {
+ S_Lucky_Weapon: 1
+ S_Power_Earring: 1
+ S_Int_Pendant: 1
+ S_Dexterous_Armor: 1
+ S_Vital_Shoes: 1
+ S_Athletic_Shield: 1
+ S_Lucky_Armor: 1
+ S_Power_Pendant: 1
+ S_Int_Earring: 1
+ S_Dexterous_Weapon: 1
+ S_Vital_Shield: 1
+ S_Athletic_Shoes: 1
+ }
+}
+*/
+/*
+23248: {
+ NeedCount: 3
+ NeedRefineMin: 7
+ SourceItems: {
+ S_Gemstone_Armor: 1
+ S_Gemstone_Shoes: 1
+ S_Gemstone_Shield: 1
+ S_Gemstone_Weapon: 1
+ S_Gemstone_Earring: 1
+ S_Gemstone_Pendent: 1
+ }
+}
+*/
+/*
+23249: {
+ NeedCount: 3
+ NeedRefineMin: 7
+ SourceItems: {
+ S_Bearers_Armor: 1
+ S_Bearers_Shoes: 1
+ S_Bearers_Shield: 1
+ S_Bearers_Weapon: 1
+ S_Bearers_Earring: 1
+ S_Bearers_Pendent: 1
+ }
+}
+*/
+/*
+23250: {
+ NeedCount: 4
+ NeedRefineMin: 7
+ SourceItems: {
+ S_ColdBolt_Armor: 1
+ S_FireBolt_Armor: 1
+ S_LightingBolt_Armor: 1
+ S_EarthSpike_Armor: 1
+ }
+}
+*/
+/*
+23281: {
+ NeedCount: 4
+ NeedRefineMin: 7
+ SourceItems: {
+ S_Cranial_Shield: 1
+ S_Brutal_Shield: 1
+ S_Gargantua_Shield: 1
+ S_Homers_Shield: 1
+ S_Dragoon_Shield: 1
+ S_Satanic_Shield: 1
+ S_Flameguard_Shield: 1
+ S_Requiem_Shield: 1
+ S_Cadi_Shield: 1
+ S_Bloody_Shoes: 1
+ S_Chemical_Shoes: 1
+ S_Clamorous_Shoes: 1
+ S_Insecticide_Shoes: 1
+ S_Fisher_Shoes: 1
+ S_Seraphim_Shoes: 1
+ S_Beholder_Shoes: 1
+ S_Divine_Shoes: 1
+ S_Dragoon_Shoes: 1
+ }
+}
+*/
+/*
+23308: {
+ NeedCount: 1
+ SourceItems: {
+ // 19241: 1
+ }
+}
+*/
+/*
+23324: {
+ NeedCount: 3
+ NeedRefineMin: 5
+ SourceItems: {
+ S_Plasterers_Armor: 1
+ S_Plasterers_Shoes: 1
+ S_Insomniac_Armor: 1
+ S_Insomniac_Shoes: 1
+ S_Peerless_Armor: 1
+ S_Peerless_Shoes: 1
+ S_Adurate_Armor: 1
+ S_Adurate_Shoes: 1
+ Unfreez_Weapon_S: 1
+ Unfreeze_Earing_S: 1
+ Unfreeze_Pendent_S: 1
+ Vitality_Earing_S: 1
+ Vitality_Pendant_S: 1
+ S_Neutral_Weapon: 1
+ S_Neutral_Earring: 1
+ S_Neutral_Pendent: 1
+ S_Curse_Lift_Earring: 1
+ S_Curse_Lift_Pendent: 1
+ }
+}
+*/
+InfinityShadow_Mix: {
+ NeedCount: 2
+ NeedRefineMin: 7
+ SourceItems: {
+ S_Infinity_Earring: 1
+ S_Infinity_Pendant: 1
+ }
+}
+Silver_Statue: {
+ NeedCount: 1
+ SourceItems: {
+ Bloody_Knight_Shield: 1
+ }
+}
+PhysicalMagical_Mix: {
+ NeedCount: 3
+ NeedRefineMin: 7
+ SourceItems: {
+ S_Physical_Earring: 1
+ S_Physical_Weapon: 1
+ S_Physical_Pendant: 1
+ S_Magical_Earring: 1
+ S_Magical_Weapon: 1
+ S_Magical_Pendant: 1
+ }
+}
+ImmunedAthena_Mix: {
+ NeedCount: 2
+ NeedRefineMin: 7
+ SourceItems: {
+ S_Athena_Shield: 1
+ S_Immune_Armor: 1
+ S_Athena_Earring: 1
+ }
+}
+HardChamption_Mix: {
+ NeedCount: 2
+ NeedRefineMin: 7
+ SourceItems: {
+ S_Champion_Shoes: 1
+ S_Hard_Armor: 1
+ S_Hard_Earring: 1
+ }
+}
+KingbirdAncient_Mix: {
+ NeedCount: 2
+ NeedRefineMin: 7
+ SourceItems: {
+ S_Ancient_Armor: 1
+ S_Kingbird_Weapon: 1
+ }
+}
+CriticalHit_Mix: {
+ NeedCount: 2
+ NeedRefineMin: 7
+ SourceItems: {
+ S_Critical_Armor: 1
+ S_Cri_Hit_Weapon: 1
+ // 24332: 1
+ // 24333: 1
+ }
+}
+Bs_Item_M_S_2: {
+ NeedCount: 2
+ SourceItems: {
+ Token_of_OrcGeneral: 150
+ Zelunium: 10
+ }
+}
+Bs_Item_M_S_8: {
+ NeedCount: 2
+ SourceItems: {
+ Valhalla_Flower: 150
+ Zelunium: 10
+ }
+}
+Bs_Item_M_S_10: {
+ NeedCount: 2
+ SourceItems: {
+ Broken_Crown: 150
+ Zelunium: 10
+ }
+}
+Bs_Item_M_S_11: {
+ NeedCount: 2
+ SourceItems: {
+ Mothers_Nightmare: 150
+ Zelunium: 10
+ }
+}
+Bs_Item_M_S_34: {
+ NeedCount: 2
+ SourceItems: {
+ Piece_Of_Bone_Armor: 150
+ Zelunium: 10
+ }
+}
+Bs_Item_M_S_41: {
+ NeedCount: 2
+ SourceItems: {
+ Mothers_Nightmare: 150
+ Zelunium: 10
+ }
+}
+Bs_Item_M_S_42: {
+ NeedCount: 2
+ SourceItems: {
+ Shine_Spear_Blade: 50
+ Zelunium: 10
+ }
+}
+Bs_Item_M_S_43: {
+ NeedCount: 2
+ SourceItems: {
+ Osiris_Doll: 30
+ Zelunium: 10
+ }
+}
+Bs_Item_M_S_44: {
+ NeedCount: 2
+ SourceItems: {
+ Fang_Of_Garm: 120
+ Zelunium: 10
+ }
+}
+Bs_Sha_M_S_1: {
+ NeedCount: 2
+ SourceItems: {
+ Pocket_Watch: 50
+ Shadowdecon: 10
+ }
+}
+Bs_Sha_M_S_17: {
+ NeedCount: 2
+ SourceItems: {
+ Osiris_Doll: 10
+ Shadowdecon: 10
+ }
+}
+Bs_Sha_M_S_18: {
+ NeedCount: 2
+ SourceItems: {
+ Baphomet_Doll: 10
+ Shadowdecon: 10
+ }
+}
+Bs_Sha_M_S_19: {
+ NeedCount: 2
+ SourceItems: {
+ Shine_Spear_Blade: 50
+ Shadowdecon: 10
+ }
+}
+Bs_Sha_M_S_20: {
+ NeedCount: 2
+ SourceItems: {
+ Lokis_Whispers: 50
+ Shadowdecon: 10
+ }
+}
+Bs_Item_M_S_4: {
+ NeedCount: 2
+ SourceItems: {
+ Baphomet_Doll: 30
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_6: {
+ NeedCount: 2
+ SourceItems: {
+ Tiger_Footskin: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_7: {
+ NeedCount: 2
+ SourceItems: {
+ White_Snake_Tear: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_12: {
+ NeedCount: 2
+ SourceItems: {
+ Gemstone: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_13: {
+ NeedCount: 2
+ SourceItems: {
+ Young_Twig: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_15: {
+ NeedCount: 2
+ SourceItems: {
+ Taegeuk_Plate: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_28: {
+ NeedCount: 2
+ SourceItems: {
+ Ice_Scale: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_29: {
+ NeedCount: 2
+ SourceItems: {
+ Gemstone: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_31: {
+ NeedCount: 2
+ SourceItems: {
+ Dark_Red_Scale: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_32: {
+ NeedCount: 2
+ SourceItems: {
+ Mothers_Nightmare: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_33: {
+ NeedCount: 2
+ SourceItems: {
+ Broken_Crown: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_36: {
+ NeedCount: 2
+ SourceItems: {
+ Tiger_Footskin: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_37: {
+ NeedCount: 2
+ SourceItems: {
+ Lokis_Whispers: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_38: {
+ NeedCount: 2
+ SourceItems: {
+ Pocket_Watch: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_39: {
+ NeedCount: 2
+ SourceItems: {
+ Tutankhamens_Mask: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_40: {
+ NeedCount: 2
+ SourceItems: {
+ Broken_Pharaoh_Symbol: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_45: {
+ NeedCount: 2
+ SourceItems: {
+ Dark_Red_Scale: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_46: {
+ NeedCount: 2
+ SourceItems: {
+ Scale_Of_Red_Dragon: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_47: {
+ NeedCount: 2
+ SourceItems: {
+ Konts_Letter: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_48: {
+ NeedCount: 2
+ SourceItems: {
+ Osiris_Doll: 30
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_49: {
+ NeedCount: 2
+ SourceItems: {
+ Token_of_OrcGeneral: 150
+ Zelunium: 20
+ }
+}
+Bs_Item_M_S_50: {
+ NeedCount: 2
+ SourceItems: {
+ Young_Twig: 150
+ Zelunium: 20
+ }
+}
+Bs_Sha_M_S_2: {
+ NeedCount: 2
+ SourceItems: {
+ Scale_Of_Red_Dragon: 50
+ Shadowdecon: 20
+ }
+}
+Bs_Sha_M_S_5: {
+ NeedCount: 2
+ SourceItems: {
+ Queen_Wing_Piece: 50
+ Shadowdecon: 20
+ }
+}
+Bs_Sha_M_S_6: {
+ NeedCount: 2
+ SourceItems: {
+ Tiger_Footskin: 50
+ Shadowdecon: 20
+ }
+}
+Bs_Sha_M_S_7: {
+ NeedCount: 2
+ SourceItems: {
+ Boroken_Shiled_Piece: 50
+ Shadowdecon: 20
+ }
+}
+Bs_Sha_M_S_8: {
+ NeedCount: 2
+ SourceItems: {
+ Will_Of_Darkness_: 50
+ Shadowdecon: 20
+ }
+}
+Bs_Sha_M_S_13: {
+ NeedCount: 2
+ SourceItems: {
+ Voucher_Of_Orcish_Hero: 50
+ Shadowdecon: 20
+ }
+}
+Bs_Sha_M_S_15: {
+ NeedCount: 2
+ SourceItems: {
+ Token_of_OrcGeneral: 50
+ Shadowdecon: 20
+ }
+}
+Bs_Sha_M_S_16: {
+ NeedCount: 2
+ SourceItems: {
+ Mothers_Nightmare: 50
+ Shadowdecon: 20
+ }
+}
+Bs_Sha_M_S_23: {
+ NeedCount: 2
+ SourceItems: {
+ Broken_Horn: 50
+ Shadowdecon: 20
+ }
+}
+Bs_Item_M_S_5: {
+ NeedCount: 2
+ SourceItems: {
+ Osiris_Doll: 30
+ Zelunium: 25
+ }
+}
+Bs_Item_M_S_9: {
+ NeedCount: 2
+ SourceItems: {
+ Valhalla_Flower: 150
+ Zelunium: 25
+ }
+}
+Bs_Item_M_S_14: {
+ NeedCount: 2
+ SourceItems: {
+ Dark_Red_Scale: 150
+ Zelunium: 25
+ }
+}
+Bs_Item_M_S_16: {
+ NeedCount: 2
+ SourceItems: {
+ Will_Of_Darkness_: 150
+ Zelunium: 25
+ }
+}
+Bs_Item_M_S_17: {
+ NeedCount: 2
+ SourceItems: {
+ Mothers_Nightmare: 150
+ Zelunium: 25
+ }
+}
+Bs_Item_M_S_19: {
+ NeedCount: 2
+ SourceItems: {
+ Ice_Scale: 150
+ Zelunium: 25
+ }
+}
+Bs_Item_M_S_27: {
+ NeedCount: 2
+ SourceItems: {
+ Broken_Crown: 150
+ Zelunium: 25
+ }
+}
+Bs_Item_M_S_35: {
+ NeedCount: 2
+ SourceItems: {
+ Will_Of_Darkness_: 150
+ Zelunium: 25
+ }
+}
+Bs_Sha_M_S_9: {
+ NeedCount: 2
+ SourceItems: {
+ Young_Twig: 50
+ Shadowdecon: 25
+ }
+}
+Bs_Sha_M_S_10: {
+ NeedCount: 2
+ SourceItems: {
+ Tiger_Footskin: 50
+ Shadowdecon: 25
+ }
+}
+Bs_Sha_M_S_11: {
+ NeedCount: 2
+ SourceItems: {
+ Will_Of_Darkness_: 50
+ Shadowdecon: 25
+ }
+}
+Bs_Sha_M_S_21: {
+ NeedCount: 2
+ SourceItems: {
+ Shine_Spear_Blade: 10
+ Shadowdecon: 25
+ }
+}
+Bs_Sha_M_S_22: {
+ NeedCount: 2
+ SourceItems: {
+ Fang_Of_Garm: 50
+ Shadowdecon: 25
+ }
+}
+Bs_Item_M_S_1: {
+ NeedCount: 2
+ SourceItems: {
+ Valhalla_Flower: 300
+ Zelunium: 30
+ }
+}
+Bs_Item_M_S_3: {
+ NeedCount: 2
+ SourceItems: {
+ Broken_Crown: 150
+ Zelunium: 30
+ }
+}
+Bs_Item_M_S_18: {
+ NeedCount: 2
+ SourceItems: {
+ Rojerta_Piece: 150
+ Zelunium: 30
+ }
+}
+Bs_Item_M_S_20: {
+ NeedCount: 2
+ SourceItems: {
+ Lokis_Whispers: 200
+ Zelunium: 30
+ }
+}
+Bs_Item_M_S_21: {
+ NeedCount: 2
+ SourceItems: {
+ Broken_Horn: 150
+ Zelunium: 30
+ }
+}
+Bs_Item_M_S_22: {
+ NeedCount: 2
+ SourceItems: {
+ Taegeuk_Plate: 150
+ Zelunium: 30
+ }
+}
+Bs_Item_M_S_23: {
+ NeedCount: 2
+ SourceItems: {
+ Fang_Of_Garm: 150
+ Zelunium: 30
+ }
+}
+Bs_Item_M_S_24: {
+ NeedCount: 2
+ SourceItems: {
+ Gemstone: 150
+ Zelunium: 30
+ }
+}
+Bs_Item_M_S_25: {
+ NeedCount: 2
+ SourceItems: {
+ Young_Twig: 150
+ Zelunium: 30
+ }
+}
+Bs_Item_M_S_26: {
+ NeedCount: 2
+ SourceItems: {
+ Boroken_Shiled_Piece: 150
+ Zelunium: 30
+ }
+}
+Bs_Item_M_S_30: {
+ NeedCount: 2
+ SourceItems: {
+ Shine_Spear_Blade: 50
+ Zelunium: 30
+ }
+}
+Bs_Sha_M_S_3: {
+ NeedCount: 2
+ SourceItems: {
+ Piece_Of_Bone_Armor: 50
+ Shadowdecon: 30
+ }
+}
+Bs_Sha_M_S_4: {
+ NeedCount: 2
+ SourceItems: {
+ Konts_Letter: 50
+ Shadowdecon: 30
+ }
+}
+Bs_Sha_M_S_12: {
+ NeedCount: 2
+ SourceItems: {
+ Taegeuk_Plate: 50
+ Shadowdecon: 30
+ }
+}
+Bs_Sha_M_S_14: {
+ NeedCount: 2
+ SourceItems: {
+ Lokis_Whispers: 50
+ Shadowdecon: 30
+ }
+}
+Bs_Sha_M_S_24: {
+ NeedCount: 2
+ SourceItems: {
+ Pocket_Watch: 150
+ Shadowdecon: 25
+ }
+}
+Bs_Sha_M_S_25: {
+ NeedCount: 2
+ SourceItems: {
+ Gemstone: 150
+ Shadowdecon: 25
+ }
+}
+Bs_Item_M_S_51: {
+ NeedCount: 2
+ SourceItems: {
+ Queen_Wing_Piece: 150
+ Zelunium: 20
+ }
+}
+EnchantStone_Recipe_9m: {
+ NeedCount: 1
+ SourceItems: {
+ C_Drooping_Argiope: 1
+ C_Chain_Puppet: 1
+ C_Buddhist_Priest_Crown: 1
+ C_Sepia_Cap: 1
+ // 20482: 1
+ // 31139: 1
+ Rabbit_Hopping: 1
+ C_Ghost_Holiday: 1
+ C_Sorcerer_Hood: 1
+ C_Luwmin_Ice: 1
+ C_Astro_Circle: 1
+ C_Baby_Penguin: 1
+ C_Fluffy_Heart_Earmuffs: 1
+ C_Blessing_Sky_Lantern: 1
+ C_Flying_Drone: 1
+ C_Bouquet_Hat: 1
+ C_Poring_Muffler: 1
+ C_Elephangel_TH: 1
+ C_Happy_Rabbit_Ribbon: 1
+ C_Autumn_Headband: 1
+ }
+}
+IDTest_Special: {
+ NeedCount: 3
+ SourceItems: {
+ Jellopy: 1
+ Fluff: 1
+ Shell: 1
+ }
+}
+PerfectSize_Mix: {
+ NeedCount: 3
+ NeedRefineMin: 7
+ SourceItems: {
+ S_Big_Armor: 1
+ S_Medium_Armor: 1
+ S_Small_Armor: 1
+ S_Big_Weapon: 1
+ S_Medium_Weapon: 1
+ S_Small_Weapon: 1
+ }
+}
+MagicPiercing_Mix: {
+ NeedCount: 2
+ NeedRefineMin: 7
+ SourceItems: {
+ S_M_Executioner_Weapon: 1
+ S_M_Exorcist_Weapon: 1
+ S_M_Hunting_Weapon: 1
+ S_M_Insect_Net_Weapon: 1
+ S_M_Fishing_Weapon: 1
+ S_M_Dragon_K_Weapon: 1
+ S_M_Corrupt_Weapon: 1
+ S_M_Vibration_Weapon: 1
+ S_M_Holy_Water_Weapon: 1
+ S_M_Scissors_Weapon: 1
+ }
+}
+Piercing_Mix: {
+ NeedCount: 2
+ NeedRefineMin: 7
+ SourceItems: {
+ S_Executioner_Weapon: 1
+ S_Exorcist_Weapon: 1
+ S_Hunting_Weapon: 1
+ S_Insect_Net_Weapon: 1
+ S_Fishing_Weapon: 1
+ S_Dragon_Killer_Weapon: 1
+ S_Corrupt_Weapon: 1
+ S_Vibration_Weapon: 1
+ S_Holy_Water_Weapon: 1
+ S_Scissors_Weapon: 1
+ }
+}
+Hasty_Mix: {
+ NeedCount: 2
+ NeedRefineMin: 7
+ SourceItems: {
+ S_Hasty_Shoes: 1
+ S_Hasty_Armor: 1
+ // 24320: 1
+ }
+}
+EnchantStone_Recipe_4m: {
+ NeedCount: 1
+ SourceItems: {
+ C_Snow_Rabbit_Knit_Hat: 1
+ C_Vampire_Hairband: 1
+ C_Halloween_Hat_Orange: 1
+ C_Diabolic_Headphone: 1
+ C_Black_Rabbit_Bonnet: 1
+ // 20395: 1
+ // 20486: 1
+ C_Full_BloomCherry_Tree: 1
+ // 31139: 1
+ Rabbit_Hopping: 1
+ C_Cat_Ears_Punkish: 1
+ C_Snow_Bear_Food: 1
+ C_CatCoffeeCup_TW: 1
+ C_Panda_Rabbit: 1
+ C_Princess_Ribbon_Crown: 1
+ C_Poporing_Muffler: 1
+ C_Kishu_Inu: 1
+ C_Autumn_Headband: 1
+ C_Fox: 1
+ C_HeartOfCat_TW: 1
+ C_LunaticMuffler: 1
+ }
+}
diff --git a/db/re/mob_db.conf b/db/re/mob_db.conf
index f787d5478..95645abe6 100644
--- a/db/re/mob_db.conf
+++ b/db/re/mob_db.conf
@@ -93,6 +93,7 @@ mob_db: (
AegisName: (chance, "Option Drop Group")
// ...
}
+ DamageTakenRate: damage taken rate (int, defaults to 100)
},
**************************************************************************/
@@ -64422,7 +64423,39 @@ mob_db: (
DamageMotion: 0
MvpExp: 0
},
-//2414,RUNAWAY_BOOK
+{
+ Id: 2414
+ SpriteName: "RUNAWAY_BOOK"
+ Name: "Runaway Book"
+ Hp: 10
+ Exp: 1
+ JExp: 1
+ Attack: [6, 9]
+ Def: 1
+ Mdef: 1
+ Stats: {
+ Str: 1
+ Agi: 1
+ Vit: 1
+ Dex: 1
+ Luk: 1
+ }
+ ViewRange: 10
+ ChaseRange: 12
+ Size: "Size_Small"
+ Race: "RC_Human"
+ Element: ("Ele_Neutral", 1)
+ Mode: {
+ CanMove: true
+ CanAttack: true
+ ChangeTargetMelee: true
+ ChangeTargetChase: true
+ }
+ MoveSpeed: 150
+ AttackDelay: 864
+ AttackMotion: 500
+ DamageMotion: 192
+},
//2415,L_SEYREN
//2416,L_EREMES
//2417,L_HARWORD
diff --git a/db/sc_config.conf b/db/sc_config.conf
new file mode 100644
index 000000000..12b0e2293
--- /dev/null
+++ b/db/sc_config.conf
@@ -0,0 +1,2811 @@
+//================= Hercules Database =====================================
+//= _ _ _
+//= | | | | | |
+//= | |_| | ___ _ __ ___ _ _| | ___ ___
+//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __|
+//= | | | | __/ | | (__| |_| | | __/\__ \
+//= \_| |_/\___|_| \___|\__,_|_|\___||___/
+//================= License ===============================================
+//= This file is part of Hercules.
+//= http://herc.ws - http://github.com/HerculesWS/Hercules
+//=
+//= Copyright (C) 2019 Hercules Dev Team
+//=
+//= Hercules is free software: you can redistribute it and/or modify
+//= it under the terms of the GNU General Public License as published by
+//= the Free Software Foundation, either version 3 of the License, or
+//= (at your option) any later version.
+//=
+//= This program is distributed in the hope that it will be useful,
+//= but WITHOUT ANY WARRANTY; without even the implied warranty of
+//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+//= GNU General Public License for more details.
+//=
+//= You should have received a copy of the GNU General Public License
+//= along with this program. If not, see <http://www.gnu.org/licenses/>.
+//================= Description ===========================================
+// Configurations file for status effects
+//=========================================================================
+
+/**************************************************************************
+ ************* Entry structure ********************************************
+ **************************************************************************
+SC_TYPE: {
+ // ================ Optional fields ===============================
+ Visible: (bool) SC can be visible for all players
+ Flags: {
+ NoDeathReset: (bool) SC cannot be removed by death.
+ NoSave: (bool) SC cannot be saved.
+ NoDispelReset: (bool) SC cannot be reset by dispell.
+ NoClearanceReset: (bool) SC cannot be reset by clearance.
+ Buff: (bool) SC considered as buff and be removed by Hermode and etc.
+ Debuff: (bool) SC considered as debuff and be removed by Gospel and etc.
+ NoMadoReset: (bool) SC cannot be reset when MADO Gear is taken off.
+ NoAllReset: (bool) SC cannot be reset by 'sc_end SC_ALL' and status change clear.
+ }
+}
+**************************************************************************/
+SC_PROVOKE: {
+ Flags: {
+ Debuff: true
+ }
+}
+SC_ENDURE: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ Buff: true
+ }
+}
+SC_HIDING: {
+ Flags: {
+ NoDispelReset: true
+ }
+}
+SC_CLOAKING: {
+ Flags: {
+ NoSave: true
+ NoDispelReset: true
+ }
+}
+SC_TWOHANDQUICKEN: {
+ Flags: {
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_CONCENTRATION: {
+ Flags: {
+ Buff: true
+ }
+}
+SC_ENCHANTPOISON: {
+ Flags: {
+ Buff: true
+ }
+}
+SC_POISONREACT: {
+ Flags: {
+ Buff: true
+ }
+}
+SC_QUAGMIRE: {
+ Flags: {
+ NoSave: true
+ NoClearanceReset: true
+ Debuff: true
+ }
+}
+SC_ANGELUS: {
+ Flags: {
+ Buff: true
+ }
+}
+SC_BLESSING: {
+ Flags: {
+ Buff: true
+ NoMadoReset: true
+ }
+}
+SC_INC_AGI: {
+ Flags: {
+ Buff: true
+ NoMadoReset: true
+ }
+}
+SC_DEC_AGI: {
+ Flags: {
+ NoSave: true
+ Debuff: true
+ }
+}
+SC_SLOWPOISON: {
+ Flags: {
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_IMPOSITIO: {
+ Flags: {
+ Buff: true
+ }
+}
+SC_SUFFRAGIUM: {
+ Flags: {
+ Buff: true
+ }
+}
+SC_ASPERSIO: {
+ Flags: {
+ Buff: true
+ NoMadoReset: true
+ }
+}
+SC_BENEDICTIO: {
+ Flags: {
+ NoSave: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_KYRIE: {
+ Flags: {
+ Buff: true
+ }
+}
+SC_MAGNIFICAT: {
+ Flags: {
+ NoSave: true
+ Buff: true
+ }
+}
+SC_GLORIA: {
+ Flags: {
+ Buff: true
+ }
+}
+SC_LEXAETERNA: {
+ Flags: {
+ NoSave: true
+ Buff: true
+ }
+}
+SC_ADRENALINE: {
+ Flags: {
+ Buff: true
+ }
+}
+SC_WEAPONPERFECT: {
+ Flags: {
+ Buff: true
+ }
+}
+SC_OVERTHRUST: {
+ Flags: {
+ Buff: true
+ }
+}
+SC_MAXIMIZEPOWER: {
+ Flags: {
+ Buff: true
+ }
+}
+SC_TRICKDEAD: {
+ Flags: {
+ NoSave: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_SHOUT: {
+ Flags: {
+ Buff: true
+ }
+}
+SC_ENERGYCOAT: {
+ Flags: {
+ Buff: true
+ }
+}
+SC_ATTHASTE_POTION1: {
+ Flags: {
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_ATTHASTE_POTION2: {
+ Flags: {
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_ATTHASTE_POTION3: {
+ Flags: {
+ Buff: true
+ }
+}
+SC_MOVHASTE_POTION: {
+ Flags: {
+ NoSave: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_BARRIER: {
+ Flags: {
+ Buff: true
+ }
+}
+SC_NOEQUIPWEAPON: {
+ Flags: {
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_NOEQUIPSHIELD: {
+ Flags: {
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_NOEQUIPARMOR: {
+ Flags: {
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_NOEQUIPHELM: {
+ Flags: {
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_PROTECTWEAPON: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_PROTECTSHIELD: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_PROTECTARMOR: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_PROTECTHELM: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_AUTOGUARD: {
+ Flags: {
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_REFLECTSHIELD: {
+ Flags: {
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_DEVOTION: {
+ Flags: {
+ NoSave: true
+ Buff: true
+ }
+}
+SC_PROVIDENCE: {
+ Flags: {
+ NoSave: true
+ Buff: true
+ }
+}
+SC_DEFENDER: {
+ Flags: {
+ Buff: true
+ }
+}
+SC_MAGICROD: {
+ Flags: {
+ NoSave: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_AUTOSPELL: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ Buff: true
+ }
+}
+SC_SPEARQUICKEN: {
+ Flags: {
+ Buff: true
+ }
+}
+SC_BLADESTOP: {
+ Flags: {
+ NoSave: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_EXPLOSIONSPIRITS: {
+ Flags: {
+ NoSave: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_STEELBODY: {
+ Flags: {
+ NoSave: true
+ Buff: true
+ }
+}
+SC_PROPERTYFIRE: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_PROPERTYWATER: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_PROPERTYWIND: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_PROPERTYGROUND: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_STOP: {
+ Flags: {
+ NoSave: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_PROPERTYUNDEAD: {
+ Flags: {
+ NoSave: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_AURABLADE: {
+ Flags: {
+ NoSave: true
+ Buff: true
+ }
+}
+SC_PARRYING: {
+ Flags: {
+ NoSave: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_LKCONCENTRATION: {
+ Flags: {
+ NoSave: true
+ Buff: true
+ }
+}
+SC_TENSIONRELAX: {
+ Flags: {
+ NoSave: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_BERSERK: {
+ Flags: {
+ NoSave: true
+ Buff: true
+ }
+}
+SC_SACRIFICE: {
+ Flags: {
+ NoSave: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_GOSPEL: {
+ Flags: {
+ NoSave: true
+ Debuff: true
+ }
+}
+SC_SAFETYWALL: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_PNEUMA: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_ASSUMPTIO: {
+ Flags: {
+ Buff: true
+ }
+}
+SC_BASILICA: {
+ Flags: {
+ NoSave: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_VOLCANO: {
+ Flags: {
+ NoSave: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_DELUGE: {
+ Flags: {
+ NoSave: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_VIOLENTGALE: {
+ Flags: {
+ NoSave: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_MAGICPOWER: {
+ Flags: {
+ NoSave: true
+ Buff: true
+ }
+}
+SC_EDP: {
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ Buff: true
+ }
+}
+SC_TRUESIGHT: {
+ Flags: {
+ NoSave: true
+ Buff: true
+ }
+}
+SC_WINDWALK: {
+ Flags: {
+ NoSave: true
+ Buff: true
+ }
+}
+SC_MELTDOWN: {
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ Buff: true
+ }
+}
+SC_CARTBOOST: {
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ Buff: true
+ }
+}
+SC_BLOODING: {
+ Flags: {
+ NoSave: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_JOINTBEAT: {
+ Flags: {
+ NoSave: true
+ NoClearanceReset: true
+ Debuff: true
+ }
+}
+SC_MINDBREAKER: {
+ Flags: {
+ NoSave: true
+ Buff: true
+ }
+}
+SC_MEMORIZE: {
+ Flags: {
+ NoSave: true
+ Buff: true
+ }
+}
+SC_FOGWALL: {
+ Flags: {
+ NoSave: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_SPIDERWEB: {
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Debuff: true
+ }
+}
+SC_SUB_WEAPONPROPERTY: {
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ Buff: true
+ }
+}
+SC_RUN: {
+ Flags: {
+ NoSave: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_STRUP: {
+ Flags: {
+ NoSave: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_PROPERTYDARK: {
+ Flags: {
+ NoSave: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_ADRENALINE2: {
+ Flags: {
+ NoSave: true
+ Buff: true
+ }
+}
+SC_PROPERTYTELEKINESIS: {
+ Flags: {
+ NoSave: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_SOULLINK: {
+ Flags: {
+ NoSave: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_PLUSATTACKPOWER: {
+ Flags: {
+ NoClearanceReset: true
+ Buff: true
+ NoMadoReset: true
+ }
+}
+SC_PLUSMAGICPOWER: {
+ Flags: {
+ NoClearanceReset: true
+ Buff: true
+ NoMadoReset: true
+ }
+}
+SC_KAITE: {
+ Flags: {
+ NoSave: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_KAAHI: {
+ Flags: {
+ NoSave: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_KAUPE: {
+ Flags: {
+ NoSave: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_ONEHANDQUICKEN: {
+ Flags: {
+ NoSave: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_PRESERVE: {
+ Flags: {
+ NoSave: true
+ Buff: true
+ }
+}
+SC_CHASEWALK: {
+ Flags: {
+ NoDispelReset: true
+ }
+}
+SC_CHASEWALK2: {
+ Flags: {
+ NoSave: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_MOVESLOW_POTION: {
+ Flags: {
+ NoSave: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_DOUBLECASTING: {
+ Flags: {
+ NoSave: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_GRAVITATION: {
+ Flags: {
+ NoSave: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_OVERTHRUSTMAX: {
+ Flags: {
+ NoSave: true
+ Buff: true
+ }
+}
+SC_TAROTCARD: {
+ Flags: {
+ NoSave: true
+ NoClearanceReset: true
+ Debuff: true
+ }
+}
+SC_CR_SHRINK: {
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ Buff: true
+ }
+}
+SC_WZ_SIGHTBLASTER: {
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ Buff: true
+ }
+}
+SC_RG_CCONFINE_M: {
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_RG_CCONFINE_S: {
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_NJ_UTSUSEMI: {
+ Flags: {
+ NoSave: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_NJ_BUNSINJYUTSU: {
+ Flags: {
+ NoSave: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_NJ_SUITON: {
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Debuff: true
+ }
+}
+SC_FOOD_STR: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ NoMadoReset: true
+ }
+}
+SC_FOOD_AGI: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ NoMadoReset: true
+ }
+}
+SC_FOOD_VIT: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ NoMadoReset: true
+ }
+}
+SC_FOOD_DEX: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ NoMadoReset: true
+ }
+}
+SC_FOOD_INT: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ NoMadoReset: true
+ }
+}
+SC_FOOD_LUK: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ NoMadoReset: true
+ }
+}
+SC_FOOD_BASICAVOIDANCE: {
+ Flags: {
+ NoClearanceReset: true
+ Buff: true
+ NoMadoReset: true
+ }
+}
+SC_FOOD_BASICHIT: {
+ Flags: {
+ NoClearanceReset: true
+ Buff: true
+ NoMadoReset: true
+ }
+}
+SC_FOOD_CRITICALSUCCESSVALUE: {
+ Flags: {
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_CASH_PLUSEXP: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ NoMadoReset: true
+ }
+}
+SC_CASH_DEATHPENALTY: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ NoMadoReset: true
+ }
+}
+SC_CASH_RECEIVEITEM: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ NoMadoReset: true
+ }
+}
+SC_CASH_BOSS_ALARM: {
+ Flags: {
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ NoMadoReset: true
+ }
+}
+SC_FOOD_STR_CASH: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ NoMadoReset: true
+ }
+}
+SC_FOOD_AGI_CASH: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ NoMadoReset: true
+ }
+}
+SC_FOOD_VIT_CASH: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ NoMadoReset: true
+ }
+}
+SC_FOOD_DEX_CASH: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ NoMadoReset: true
+ }
+}
+SC_FOOD_INT_CASH: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ NoMadoReset: true
+ }
+}
+SC_FOOD_LUK_CASH: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ NoMadoReset: true
+ }
+}
+SC_SAVAGE_STEAK: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ }
+}
+SC_COCKTAIL_WARG_BLOOD: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ }
+}
+SC_MINOR_BBQ: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ }
+}
+SC_SIROMA_ICE_TEA: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ }
+}
+SC_DROCERA_HERB_STEAMED: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ }
+}
+SC_PUTTI_TAILS_NOODLES: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ }
+}
+SC_MELON_BOMB: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ }
+}
+SC_BANANA_BOMB_SITDOWN_POSTDELAY: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ }
+}
+SC_BANANA_BOMB: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ }
+}
+SC_PROMOTE_HEALTH_RESERCH: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ }
+}
+SC_ENERGY_DRINK_RESERCH: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ }
+}
+SC_EXTRACT_WHITE_POTION_Z: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ }
+}
+SC_VITATA_500: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ }
+}
+SC_EXTRACT_SALAMINE_JUICE: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ }
+}
+SC_BOOST500: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ }
+}
+SC_FULL_SWING_K: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ }
+}
+SC_MANA_PLUS: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ }
+}
+SC_MUSTLE_M: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ }
+}
+SC_LIFE_FORCE_F: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ }
+}
+SC_MER_FLEE: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_MER_ATK: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_MER_HP: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_MER_SP: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_MER_HIT: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_SLOWCAST: {
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_CRITICALWOUND: {
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ Buff: true
+ }
+}
+SC_MOVHASTE_HORSE: {
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_PROTECT_DEF: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_PROTECT_MDEF: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_HEALPLUS: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ NoMadoReset: true
+ }
+}
+SC_S_LIFEPOTION: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ NoMadoReset: true
+ }
+}
+SC_L_LIFEPOTION: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ NoMadoReset: true
+ }
+}
+SC_CRITICALPERCENT: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ NoMadoReset: true
+ }
+}
+SC_PLUSAVOIDVALUE: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ NoMadoReset: true
+ }
+}
+SC_ATKER_ASPD: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_TARGET_ASPD: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ NoMadoReset: true
+ }
+}
+SC_ATKER_MOVESPEED: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_ATKER_BLOOD: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_TARGET_BLOOD: {
+ Flags: {
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_ARMOR_PROPERTY: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_HELLPOWER: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_STEAMPACK: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Debuff: true
+ NoMadoReset: true
+ }
+}
+SC_CASH_PLUSONLYJOBEXP: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ NoMadoReset: true
+ }
+}
+SC_PARTYFLEE: {
+ Flags: {
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_ANGEL_PROTECT: {
+ Flags: {
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_ENCHANTBLADE: {
+ Flags: {
+ Buff: true
+ }
+}
+SC_DEATHBOUND: {
+ Flags: {
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_REFRESH: {
+ Flags: {
+ NoSave: true
+ NoDispelReset: true
+ Buff: true
+ }
+}
+SC_GIANTGROWTH: {
+ Flags: {
+ NoDispelReset: true
+ Buff: true
+ }
+}
+SC_STONEHARDSKIN: {
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ Buff: true
+ }
+}
+SC_VITALITYACTIVATION: {
+ Flags: {
+ NoDispelReset: true
+ Buff: true
+ }
+}
+SC_FIGHTINGSPIRIT: {
+ Flags: {
+ NoDispelReset: true
+ Buff: true
+ }
+}
+SC_ABUNDANCE: {
+ Flags: {
+ NoDispelReset: true
+ Buff: true
+ }
+}
+SC_EPICLESIS: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_ORATIO: {
+ Visible: true
+ Flags: {
+ NoDispelReset: true
+ Buff: true
+ }
+}
+SC_LAUDAAGNUS: {
+ Flags: {
+ NoDispelReset: true
+ Buff: true
+ }
+}
+SC_LAUDARAMUS: {
+ Flags: {
+ NoDispelReset: true
+ Buff: true
+ }
+}
+SC_CLOAKINGEXCEED: {
+ Flags: {
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_HALLUCINATIONWALK: {
+ Visible: true
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_HALLUCINATIONWALK_POSTDELAY: {
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_RENOVATIO: {
+ Flags: {
+ NoDispelReset: true
+ Buff: true
+ }
+}
+SC_WEAPONBLOCKING: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_ROLLINGCUTTER: {
+ Visible: true
+ Flags: {
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_EXPIATIO: {
+ Flags: {
+ NoDispelReset: true
+ Buff: true
+ }
+}
+SC_POISONINGWEAPON: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_TOXIN: {
+ Flags: {
+ NoDispelReset: true
+ Buff: true
+ }
+}
+SC_PARALYSE: {
+ Flags: {
+ NoDispelReset: true
+ Buff: true
+ }
+}
+SC_VENOMBLEED: {
+ Flags: {
+ NoDispelReset: true
+ Buff: true
+ }
+}
+SC_MAGICMUSHROOM: {
+ Flags: {
+ NoDispelReset: true
+ Buff: true
+ }
+}
+SC_DEATHHURT: {
+ Flags: {
+ NoDispelReset: true
+ Buff: true
+ }
+}
+SC_PYREXIA: {
+ Flags: {
+ NoDispelReset: true
+ Buff: true
+ }
+}
+SC_OBLIVIONCURSE: {
+ Flags: {
+ NoDispelReset: true
+ Buff: true
+ }
+}
+SC_LEECHESEND: {
+ Flags: {
+ NoDispelReset: true
+ Buff: true
+ }
+}
+SC_DUPLELIGHT: {
+ Visible: true
+ Flags: {
+ NoDispelReset: true
+ Buff: true
+ }
+}
+SC_FEARBREEZE: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_ELECTRICSHOCKER: {
+ Flags: {
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_MARSHOFABYSS: {
+ Flags: {
+ NoDispelReset: true
+ Buff: true
+ }
+}
+SC_RECOGNIZEDSPELL: {
+ Flags: {
+ NoDispelReset: true
+ Buff: true
+ }
+}
+SC_WUGDASH: {
+ Flags: {
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_WUGBITE: {
+ Flags: {
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_CAMOUFLAGE: {
+ Visible: true
+ Flags: {
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_ACCELERATION: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_HOVERING: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_SUMMON1: {
+ Visible: true
+ Flags: {
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_SUMMON2: {
+ Visible: true
+ Flags: {
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_SUMMON3: {
+ Visible: true
+ Flags: {
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_SUMMON4: {
+ Visible: true
+ Flags: {
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_SUMMON5: {
+ Visible: true
+ Flags: {
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_MVPCARD_TAOGUNKA: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ Debuff: true
+ }
+}
+SC_MVPCARD_MISTRESS: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ Debuff: true
+ }
+}
+SC_MVPCARD_ORCHERO: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ Debuff: true
+ }
+}
+SC_MVPCARD_ORCLORD: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ Debuff: true
+ }
+}
+SC_OVERHEAT_LIMITPOINT: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_OVERHEAT: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_SHAPESHIFT: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_INFRAREDSCAN: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_MAGNETICFIELD: {
+ Flags: {
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_NEUTRALBARRIER: {
+ Flags: {
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_NEUTRALBARRIER_MASTER: {
+ Flags: {
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_STEALTHFIELD_MASTER: {
+ Flags: {
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_MANU_ATK: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_MANU_DEF: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_SPL_ATK: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_SPL_DEF: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC__REPRODUCE: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_MANU_MATK: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_SPL_MATK: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_STR_SCROLL: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ Debuff: true
+ }
+}
+SC_INT_SCROLL: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ Debuff: true
+ }
+}
+SC_FORCEOFVANGUARD: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_BUCHEDENOEL: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ Debuff: true
+ }
+}
+SC__AUTOSHADOWSPELL: {
+ Flags: {
+ Buff: true
+ }
+}
+SC__SHADOWFORM: {
+ Visible: true
+ Flags: {
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_RAID: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_SHIELDSPELL_DEF: {
+ Flags: {
+ Buff: true
+ }
+}
+SC_SHIELDSPELL_MDEF: {
+ Flags: {
+ Buff: true
+ }
+}
+SC_SHIELDSPELL_REF: {
+ Flags: {
+ Buff: true
+ }
+}
+SC__BODYPAINT: {
+ Flags: {
+ NoDispelReset: true
+ Buff: true
+ }
+}
+SC_EXEEDBREAK: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_ADORAMUS: {
+ Flags: {
+ Buff: true
+ }
+}
+SC_PRESTIGE: {
+ Flags: {
+ Buff: true
+ }
+}
+SC__INVISIBILITY: {
+ Flags: {
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC__DEADLYINFECT: {
+ Flags: {
+ NoDispelReset: true
+ Buff: true
+ }
+}
+SC_BANDING: {
+ Visible: true
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_BANDING_DEFENCE: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_EARTHDRIVE: {
+ Flags: {
+ NoDispelReset: true
+ Buff: true
+ }
+}
+SC_INSPIRATION: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC__ENERVATION: {
+ Flags: {
+ Buff: true
+ }
+}
+SC__GROOMY: {
+ Flags: {
+ Buff: true
+ }
+}
+SC_RAISINGDRAGON: {
+ Flags: {
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC__IGNORANCE: {
+ Flags: {
+ Buff: true
+ }
+}
+SC__LAZINESS: {
+ Flags: {
+ Buff: true
+ }
+}
+SC_LIGHTNINGWALK: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_ACARAJE: {
+ Flags: {
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC__UNLUCKY: {
+ Flags: {
+ Buff: true
+ }
+}
+SC_CURSEDCIRCLE_ATKER: {
+ Visible: true
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_CURSEDCIRCLE_TARGET: {
+ Visible: true
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC__WEAKNESS: {
+ Flags: {
+ Buff: true
+ }
+}
+SC_CRESCENTELBOW: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC__STRIPACCESSARY: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC__MANHOLE: {
+ Flags: {
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ NoMadoReset: true
+ }
+}
+SC__BLOODYLUST: {
+ Flags: {
+ Debuff: true
+ }
+}
+SC_SWING: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_SYMPHONY_LOVE: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_PROPERTYWALK: {
+ Flags: {
+ NoSave: true
+ Buff: true
+ }
+}
+SC_SPELLFIST: {
+ Flags: {
+ Buff: true
+ }
+}
+SC_NETHERWORLD: {
+ Flags: {
+ Buff: true
+ }
+}
+SC_SIREN: {
+ Flags: {
+ Buff: true
+ }
+}
+SC_DEEP_SLEEP: {
+ Visible: true
+ Flags: {
+ NoSave: true
+ Debuff: true
+ }
+}
+SC_SIRCLEOFNATURE: {
+ Flags: {
+ Buff: true
+ }
+}
+SC_GLOOMYDAY: {
+ Flags: {
+ Buff: true
+ }
+}
+SC_GLOOMYDAY_SK: {
+ Flags: {
+ Buff: true
+ }
+}
+SC_SONG_OF_MANA: {
+ Flags: {
+ Buff: true
+ }
+}
+SC_DANCE_WITH_WUG: {
+ Flags: {
+ Buff: true
+ }
+}
+SC_RUSH_WINDMILL: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_ECHOSONG: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_HARMONIZE: {
+ Flags: {
+ Buff: true
+ }
+}
+SC_MOONLIT_SERENADE: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_SATURDAY_NIGHT_FEVER: {
+ Flags: {
+ Buff: true
+ }
+}
+SC_SITDOWN_FORCE: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_ANALYZE: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_LERADS_DEW: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_MELODYOFSINK: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_BEYOND_OF_WARCRY: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_UNLIMITED_HUMMING_VOICE: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ }
+}
+SC_WARMER: {
+ Flags: {
+ NoSave: true
+ }
+}
+SC_VENOMIMPRESS: {
+ Visible: true
+ Flags: {
+ NoDispelReset: true
+ }
+}
+SC_FROSTMISTY: {
+ Visible: true
+ Flags: {
+ Debuff: true
+ }
+}
+SC_STOMACHACHE: {
+ Flags: {
+ Debuff: true
+ }
+}
+SC_MYSTERIOUS_POWDER: {
+ Flags: {
+ Debuff: true
+ }
+}
+SC_WATER_BARRIER: {
+ Flags: {
+ NoSave: true
+ }
+}
+SC_ZEPHYR: {
+ Flags: {
+ NoSave: true
+ }
+}
+SC_POWER_OF_GAIA: {
+ Flags: {
+ NoSave: true
+ }
+}
+SC_FIRE_INSIGNIA: {
+ Flags: {
+ NoSave: true
+ }
+}
+SC_WATER_INSIGNIA: {
+ Flags: {
+ NoSave: true
+ }
+}
+SC_WIND_INSIGNIA: {
+ Flags: {
+ NoSave: true
+ }
+}
+SC_EARTH_INSIGNIA: {
+ Flags: {
+ NoSave: true
+ }
+}
+SC_MORA_BUFF: {
+ Flags: {
+ NoSave: true
+ }
+}
+SC_NEEDLE_OF_PARALYZE: {
+ Flags: {
+ NoDeathReset: true
+ }
+}
+SC_PAIN_KILLER: {
+ Flags: {
+ NoDeathReset: true
+ }
+}
+SC_G_LIFEPOTION: {
+ Flags: {
+ NoDispelReset: true
+ NoMadoReset: true
+ }
+}
+SC_LIGHT_OF_REGENE: {
+ Flags: {
+ NoDeathReset: true
+ }
+}
+SC_MAGIC_CANDY: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ Buff: true
+ NoMadoReset: true
+ }
+}
+SC_MONSTER_TRANSFORM: {
+ Visible: true
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ }
+}
+SC_MTF_ASPD: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ }
+}
+SC_MTF_RANGEATK: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ }
+}
+SC_MTF_MATK: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ }
+}
+SC_MTF_MLEATKED: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ }
+}
+SC_MTF_CRIDAMAGE: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ }
+}
+SC_FULL_THROTTLE: {
+ Flags: {
+ NoSave: true
+ Buff: true
+ }
+}
+SC_REBOUND: {
+ Flags: {
+ NoSave: true
+ Buff: true
+ }
+}
+SC_TELEKINESIS_INTENSE: {
+ Flags: {
+ NoSave: true
+ Buff: true
+ }
+}
+SC_SKELSCROLL: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoMadoReset: true
+ }
+}
+SC_DISTRUCTIONSCROLL: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoMadoReset: true
+ }
+}
+SC_ROYALSCROLL: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoMadoReset: true
+ }
+}
+SC_IMMUNITYSCROLL: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoMadoReset: true
+ }
+}
+SC_MYSTICSCROLL: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoMadoReset: true
+ }
+}
+SC_BATTLESCROLL: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoMadoReset: true
+ }
+}
+SC_ARMORSCROLL: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoMadoReset: true
+ }
+}
+SC_FREYJASCROLL: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoMadoReset: true
+ }
+}
+SC_SOULSCROLL: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoMadoReset: true
+ }
+}
+SC_QUEST_BUFF1: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ }
+}
+SC_QUEST_BUFF2: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ }
+}
+SC_QUEST_BUFF3: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ }
+}
+SC_GEFFEN_MAGIC1: {
+ Flags: {
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ }
+}
+SC_GEFFEN_MAGIC2: {
+ Flags: {
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ }
+}
+SC_GEFFEN_MAGIC3: {
+ Flags: {
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ }
+}
+SC_OVERLAPEXPUP: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ }
+}
+SC_M_LIFEPOTION: {
+ Flags: {
+ NoDispelReset: true
+ NoMadoReset: true
+ }
+}
+SC_LEADERSHIP: {
+ Flags: {
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ }
+}
+SC_GLORYWOUNDS: {
+ Flags: {
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ }
+}
+SC_SOULCOLD: {
+ Flags: {
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ }
+}
+SC_HAWKEYES: {
+ Flags: {
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ }
+}
+SC_GDSKILL_REGENERATION: {
+ Flags: {
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ }
+}
+SC_ORCISH: {
+ Flags: {
+ NoSave: true
+ }
+}
+SC_WEIGHTOVER50: {
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ NoAllReset: true
+ }
+}
+SC_WEIGHTOVER90: {
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ NoAllReset: true
+ }
+}
+SC_WEDDING: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ }
+}
+SC_XMAS: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ }
+}
+SC_SUMMER: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ }
+}
+SC_NOCHAT: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ NoAllReset: true
+ }
+}
+SC_FUSION: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ }
+}
+SC_EARTHSCROLL: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ }
+}
+SC_STORMKICK_READY: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ }
+}
+SC_DOWNKICK_READY: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ }
+}
+SC_COUNTERKICK_READY: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ }
+}
+SC_TURNKICK_READY: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ }
+}
+SC_DODGE_READY: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ }
+}
+SC_JAILED: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ NoAllReset: true
+ }
+}
+SC_AUTOTRADE: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ }
+}
+SC_DANCING: {
+ Flags: {
+ NoDispelReset: true
+ NoClearanceReset: true
+ }
+}
+SC_WHISTLE: {
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ }
+}
+SC_ASSNCROS: {
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ }
+}
+SC_POEMBRAGI: {
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ }
+}
+SC_APPLEIDUN: {
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ }
+}
+SC_HUMMING: {
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ }
+}
+SC_DONTFORGETME: {
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ }
+}
+SC_FORTUNE: {
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ }
+}
+SC_SERVICEFORYOU: {
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ }
+}
+SC_INCHIT: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ }
+}
+SC_PUSH_CART: {
+ Visible: true
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ NoAllReset: true
+ }
+}
+SC_COLD: {
+ Visible: true
+ Flags: {
+ }
+}
+SC_BLOOD_SUCKER: {
+ Visible: true
+ Flags: {
+ }
+}
+SC_MOONSTAR: {
+ Visible: true
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ NoAllReset: true
+ }
+}
+SC_SUPER_STAR: {
+ Visible: true
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ NoAllReset: true
+ }
+}
+SC_STRANGELIGHTS: {
+ Visible: true
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ NoAllReset: true
+ }
+}
+SC_DECORATION_OF_MUSIC: {
+ Visible: true
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ NoAllReset: true
+ }
+}
+SC_LJOSALFAR: {
+ Visible: true
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ NoAllReset: true
+ }
+}
+SC_MERMAID_LONGING: {
+ Visible: true
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ NoAllReset: true
+ }
+}
+SC_HAT_EFFECT: {
+ Visible: true
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ NoAllReset: true
+ }
+}
+SC_FLOWERSMOKE: {
+ Visible: true
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ NoAllReset: true
+ }
+}
+SC_FSTONE: {
+ Visible: true
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ NoAllReset: true
+ }
+}
+SC_HAPPINESS_STAR: {
+ Visible: true
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ NoAllReset: true
+ }
+}
+SC_MAPLE_FALLS: {
+ Visible: true
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ NoAllReset: true
+ }
+}
+SC_TIME_ACCESSORY: {
+ Visible: true
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ NoAllReset: true
+ }
+}
+SC_MAGICAL_FEATHER: {
+ Visible: true
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ NoAllReset: true
+ }
+}
+SC_BLOSSOM_FLUTTERING: {
+ Visible: true
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ NoAllReset: true
+ }
+}
+SC_SPRITEMABLE: {
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ NoAllReset: true
+ }
+}
+SC_BITESCAR: {
+ Flags: {
+ NoDispelReset: true
+ }
+}
+SC_CLAN_INFO: {
+ Visible: true
+ Flags: {
+ NoDeathReset: true
+ NoSave: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ NoAllReset: true
+ }
+}
+SC_ALL_RIDING: {
+ Visible: true
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoAllReset: true
+ }
+}
+SC_DAILYSENDMAILCNT: {
+ Visible: true
+ Flags: {
+ NoDeathReset: true
+ NoDispelReset: true
+ NoClearanceReset: true
+ NoMadoReset: true
+ NoAllReset: true
+ }
+}
diff --git a/db/sc_config.txt b/db/sc_config.txt
deleted file mode 100644
index 2648f7bae..000000000
--- a/db/sc_config.txt
+++ /dev/null
@@ -1,505 +0,0 @@
-// Status Change configuration database
-//
-// Structure of Database:
-// SC_NAME, flag
-//
-// flag 1 - SC cannot be removed by death.
-// 2 - SC cannot be saved.
-// 4 - SC cannot be reset by dispell.
-// 8 - SC cannot be reset by clearance.
-// 16 - SC considered as buff and be removed by Hermode and etc.
-// 32 - SC considered as debuff and be removed by Gospel and etc.
-// 64 - SC cannot be reset when MADO Gear is taken off.
-// 128 - SC cannot be reset by 'sc_end SC_ALL' and status change clear.
-// 256 - SC can be visible for all players
-// Example:
-// SC_ENDURE, 21 //SC_ENDURE: cannot be removed by death and dispell and cosidered as buff. (16 + 4 + 1 = 21)
-
-SC_PROVOKE, 32
-SC_ENDURE, 21
-SC_HIDING, 4
-SC_CLOAKING, 6
-SC_TWOHANDQUICKEN, 24
-SC_CONCENTRATION, 16
-SC_ENCHANTPOISON, 16
-SC_POISONREACT, 16
-SC_QUAGMIRE, 42
-SC_ANGELUS, 16
-SC_BLESSING, 80
-SC_INC_AGI, 80
-SC_DEC_AGI, 34
-SC_SLOWPOISON, 24
-SC_IMPOSITIO, 16
-SC_SUFFRAGIUM, 16
-SC_ASPERSIO, 80
-SC_BENEDICTIO, 26
-SC_KYRIE, 16
-SC_MAGNIFICAT, 18
-SC_GLORIA, 16
-SC_LEXAETERNA, 18
-SC_ADRENALINE, 16
-SC_WEAPONPERFECT, 16
-SC_OVERTHRUST, 16
-SC_MAXIMIZEPOWER, 16
-SC_TRICKDEAD, 26
-SC_SHOUT, 16
-SC_ENERGYCOAT, 16
-SC_ATTHASTE_POTION1, 24
-SC_ATTHASTE_POTION2, 24
-SC_ATTHASTE_POTION3, 16
-SC_MOVHASTE_POTION, 26
-//SC_POSTDELAY, 29
-SC_BARRIER, 16
-SC_NOEQUIPWEAPON, 30
-SC_NOEQUIPSHIELD, 30
-SC_NOEQUIPARMOR, 30
-SC_NOEQUIPHELM, 30
-SC_PROTECTWEAPON, 28
-SC_PROTECTSHIELD, 28
-SC_PROTECTARMOR, 28
-SC_PROTECTHELM, 28
-SC_AUTOGUARD, 24
-SC_REFLECTSHIELD, 24
-SC_DEVOTION, 18
-SC_PROVIDENCE, 18
-SC_DEFENDER, 16
-SC_MAGICROD, 26
-//SC_WEAPONPROPERTY, 24
-SC_AUTOSPELL, 21
-//SC_SPECIALZONE, 26
-//SC_MASK, 26
-SC_SPEARQUICKEN, 16
-SC_BLADESTOP, 26
-SC_EXPLOSIONSPIRITS, 26
-SC_STEELBODY, 18
-SC_PROPERTYFIRE, 29
-SC_PROPERTYWATER, 29
-SC_PROPERTYWIND, 29
-SC_PROPERTYGROUND, 29
-SC_STOP, 26
-SC_PROPERTYUNDEAD, 26
-//SC_STATUSONE, 26
-SC_AURABLADE, 18
-SC_PARRYING, 26
-SC_LKCONCENTRATION, 18
-SC_TENSIONRELAX, 26
-SC_BERSERK, 18
-SC_SACRIFICE, 26
-SC_GOSPEL, 34
-SC_SAFETYWALL, 28
-SC_PNEUMA, 28
-SC_ASSUMPTIO, 16
-SC_BASILICA, 26
-//SC_GROUNDMAGIC, 26 // is divided to SC_VOLCANO, 0xSC_DELUGE, 0xSC_VIOLENTGALE
-SC_VOLCANO, 26
-SC_DELUGE, 26
-SC_VIOLENTGALE, 26
-SC_MAGICPOWER, 18
-SC_EDP, 23
-SC_TRUESIGHT, 18
-SC_WINDWALK, 18
-SC_MELTDOWN, 23
-SC_CARTBOOST, 23
-SC_BLOODING, 26
-SC_JOINTBEAT, 42
-SC_MINDBREAKER, 18
-SC_MEMORIZE, 18
-SC_FOGWALL, 26
-SC_SPIDERWEB, 47
-SC_SUB_WEAPONPROPERTY, 23
-SC_RUN, 26
-SC_STRUP, 26
-SC_PROPERTYDARK, 26
-SC_ADRENALINE2, 18
-SC_PROPERTYTELEKINESIS, 26
-SC_SOULLINK, 26
-SC_PLUSATTACKPOWER, 88
-SC_PLUSMAGICPOWER, 88
-SC_KAITE, 26
-SC_KAAHI, 26
-SC_KAUPE, 26
-SC_ONEHANDQUICKEN, 26
-//SC_GDSKILL_POSTDELAY, 29
-SC_PRESERVE, 18
-SC_CHASEWALK, 4
-SC_CHASEWALK2, 26
-SC_MOVESLOW_POTION, 26
-SC_DOUBLECASTING, 26
-SC_GRAVITATION, 26
-SC_OVERTHRUSTMAX, 18
-SC_TAROTCARD, 42
-SC_CR_SHRINK, 23
-SC_WZ_SIGHTBLASTER, 23
-SC_RG_CCONFINE_M, 31
-SC_RG_CCONFINE_S, 31
-SC_NJ_UTSUSEMI, 26
-SC_NJ_BUNSINJYUTSU, 26
-SC_NJ_SUITON, 47
-//SC_MENTAL, 26
-//SC_EXPMEMORY, 26
-//SC_PERFORMANCE, 26
-//SC_GAIN, 26
-//SC_DRIFT, 26
-//SC_WALLSHIFT, 26
-//SC_REINCARNATION, 26
-//SC_DENERGY, 26
-//SC_DAURA, 26
-//SC_DFREEZER, 26
-//SC_DPUNISH, 26
-//SC_DBARRIER, 26
-//SC_DWARNING, 26
-//SC_MOUSEWHEEL, 30
-//SC_DACCEL, 26
-//SC_DBLOCK, 26
-SC_FOOD_STR, 92
-SC_FOOD_AGI, 92
-SC_FOOD_VIT, 92
-SC_FOOD_DEX, 92
-SC_FOOD_INT, 92
-SC_FOOD_LUK, 92
-SC_FOOD_BASICAVOIDANCE, 88
-SC_FOOD_BASICHIT, 88
-SC_FOOD_CRITICALSUCCESSVALUE, 24
-SC_CASH_PLUSEXP, 93
-SC_CASH_DEATHPENALTY, 93
-SC_CASH_RECEIVEITEM, 93
-SC_CASH_BOSS_ALARM, 94
-//SC_DA_ENERGY, 26
-//SC_DA_FIRSTSLOT, 26
-//SC_DA_HEADDEF, 26
-//SC_DA_SPACE, 30
-//SC_DA_ITEMREBUILD, 30
-//SC_DA_ILLUSION, 26
-//SC_DA_EARPLUG, 30
-//SC_DA_CONTRACT, 29
-//SC_DA_BLACK, 30
-//SC_DA_MAGICCART, 26
-//SC_CRYSTAL, 30
-//SC_DA_REBUILD, 29
-//SC_DA_EDARKNESS, 26
-//SC_DA_EGUARDIAN, 26
-//SC_DA_TIMEOUT, 26
-SC_FOOD_STR_CASH, 93
-SC_FOOD_AGI_CASH, 93
-SC_FOOD_VIT_CASH, 93
-SC_FOOD_DEX_CASH, 93
-SC_FOOD_INT_CASH, 93
-SC_FOOD_LUK_CASH, 93
-SC_SAVAGE_STEAK, 76
-SC_COCKTAIL_WARG_BLOOD, 76
-SC_MINOR_BBQ, 76
-SC_SIROMA_ICE_TEA, 76
-SC_DROCERA_HERB_STEAMED, 76
-SC_PUTTI_TAILS_NOODLES, 76
-SC_MELON_BOMB, 12
-SC_BANANA_BOMB_SITDOWN_POSTDELAY, 12
-SC_BANANA_BOMB, 12
-SC_PROMOTE_HEALTH_RESERCH, 12
-SC_ENERGY_DRINK_RESERCH, 12
-SC_EXTRACT_WHITE_POTION_Z, 12
-SC_VITATA_500, 12
-SC_EXTRACT_SALAMINE_JUICE, 12
-SC_BOOST500, 12
-SC_FULL_SWING_K, 12
-SC_MANA_PLUS, 12
-SC_MUSTLE_M, 12
-SC_LIFE_FORCE_F, 12
-SC_MER_FLEE, 28
-SC_MER_ATK, 28
-SC_MER_HP, 28
-SC_MER_SP, 28
-SC_MER_HIT, 28
-SC_SLOWCAST, 31
-SC_CRITICALWOUND, 23
-SC_MOVHASTE_HORSE, 31
-SC_PROTECT_DEF, 28
-SC_PROTECT_MDEF, 28
-SC_HEALPLUS, 92
-SC_S_LIFEPOTION, 92
-SC_L_LIFEPOTION, 92
-SC_CRITICALPERCENT, 92
-SC_PLUSAVOIDVALUE, 92
-SC_ATKER_ASPD, 28
-SC_TARGET_ASPD, 92
-SC_ATKER_MOVESPEED, 28
-SC_ATKER_BLOOD, 28
-SC_TARGET_BLOOD, 30
-SC_ARMOR_PROPERTY, 29
-//SC_REUSE_LIMIT_A, 29
-SC_HELLPOWER, 29
-SC_STEAMPACK, 108
-//SC_REUSE_LIMIT_B, 29
-//SC_REUSE_LIMIT_C, 29
-//SC_REUSE_LIMIT_D, 29
-//SC_REUSE_LIMIT_E, 29
-//SC_REUSE_LIMIT_F, 29
-SC_CASH_PLUSONLYJOBEXP, 93
-SC_PARTYFLEE, 24
-SC_ANGEL_PROTECT, 24
-//SC_ENDURE_MDEF, 21
-SC_ENCHANTBLADE, 16
-SC_DEATHBOUND, 30
-SC_REFRESH, 22
-SC_GIANTGROWTH, 20
-SC_STONEHARDSKIN, 23
-SC_VITALITYACTIVATION, 20
-SC_FIGHTINGSPIRIT, 20
-SC_ABUNDANCE, 20
-//SC_REUSE_MILLENNIUMSHIELD, 29
-//SC_REUSE_CRUSHSTRIKE, 29
-//SC_REUSE_REFRESH, 29
-//SC_REUSE_STORMBLAST, 29
-SC_EPICLESIS, 29
-SC_ORATIO, 276
-SC_LAUDAAGNUS, 20
-SC_LAUDARAMUS, 20
-SC_CLOAKINGEXCEED, 30
-SC_HALLUCINATIONWALK, 284
-SC_HALLUCINATIONWALK_POSTDELAY, 31
-SC_RENOVATIO, 20
-SC_WEAPONBLOCKING, 28
-//SC_WEAPONBLOCKING_POSTDELAY, 31
-SC_ROLLINGCUTTER, 286
-SC_EXPIATIO, 20
-SC_POISONINGWEAPON, 28
-SC_TOXIN, 20
-SC_PARALYSE, 20
-SC_VENOMBLEED, 20
-SC_MAGICMUSHROOM, 20
-SC_DEATHHURT, 20
-SC_PYREXIA, 20
-SC_OBLIVIONCURSE, 20
-SC_LEECHESEND, 20
-SC_DUPLELIGHT, 276
-SC_FEARBREEZE, 28
-SC_ELECTRICSHOCKER, 30
-SC_MARSHOFABYSS, 20
-SC_RECOGNIZEDSPELL, 20
-//SC_WUGRIDER, 29
-SC_WUGDASH, 30
-SC_WUGBITE, 30
-SC_CAMOUFLAGE, 286
-SC_ACCELERATION, 28
-SC_HOVERING, 28
-SC_SUMMON1, 280
-SC_SUMMON2, 280
-SC_SUMMON3, 280
-SC_SUMMON4, 280
-SC_SUMMON5, 280
-SC_MVPCARD_TAOGUNKA, 60
-SC_MVPCARD_MISTRESS, 60
-SC_MVPCARD_ORCHERO, 60
-SC_MVPCARD_ORCLORD, 60
-SC_OVERHEAT_LIMITPOINT, 28
-SC_OVERHEAT, 28
-SC_SHAPESHIFT, 28
-SC_INFRAREDSCAN, 28
-SC_MAGNETICFIELD, 30
-SC_NEUTRALBARRIER, 30
-SC_NEUTRALBARRIER_MASTER, 30
-SC_STEALTHFIELD_MASTER, 30
-SC_MANU_ATK, 28
-SC_MANU_DEF, 28
-SC_SPL_ATK, 28
-SC_SPL_DEF, 28
-SC__REPRODUCE, 28
-SC_MANU_MATK, 28
-SC_SPL_MATK, 28
-SC_STR_SCROLL, 61
-SC_INT_SCROLL, 61
-SC_FORCEOFVANGUARD, 28
-SC_BUCHEDENOEL, 60
-SC__AUTOSHADOWSPELL, 16
-SC__SHADOWFORM, 286
-SC_RAID, 28
-SC_SHIELDSPELL_DEF, 16
-SC_SHIELDSPELL_MDEF, 16
-SC_SHIELDSPELL_REF, 16
-SC__BODYPAINT, 20
-SC_EXEEDBREAK, 28
-SC_ADORAMUS, 16
-SC_PRESTIGE, 16
-SC__INVISIBILITY, 30
-SC__DEADLYINFECT, 20
-SC_BANDING, 284
-SC_BANDING_DEFENCE, 28
-SC_EARTHDRIVE, 20
-SC_INSPIRATION, 28
-SC__ENERVATION, 16
-SC__GROOMY, 16
-SC_RAISINGDRAGON, 30
-SC__IGNORANCE, 16
-SC__LAZINESS, 16
-SC_LIGHTNINGWALK, 28
-SC_ACARAJE, 24
-SC__UNLUCKY, 16
-SC_CURSEDCIRCLE_ATKER, 284
-SC_CURSEDCIRCLE_TARGET, 284
-SC__WEAKNESS, 16
-SC_CRESCENTELBOW, 28
-//SC_NOEQUIPACCESSARY, 30
-SC__STRIPACCESSARY, 28
-SC__MANHOLE, 94
-//SC_POPECOOKIE, 28
-SC__BLOODYLUST, 32
-SC_SWING, 28
-SC_SYMPHONY_LOVE, 28
-SC_PROPERTYWALK, 18
-SC_SPELLFIST, 16
-SC_NETHERWORLD, 16
-SC_SIREN, 16
-SC_DEEP_SLEEP, 290
-SC_SIRCLEOFNATURE, 16
-SC_GLOOMYDAY, 16
-SC_GLOOMYDAY_SK, 16
-SC_SONG_OF_MANA, 16
-SC_DANCE_WITH_WUG, 16
-SC_RUSH_WINDMILL, 28
-SC_ECHOSONG, 28
-SC_HARMONIZE, 16
-SC_MOONLIT_SERENADE, 28
-SC_SATURDAY_NIGHT_FEVER, 16
-SC_SITDOWN_FORCE, 28
-SC_ANALYZE, 28
-SC_LERADS_DEW, 28
-SC_MELODYOFSINK, 28
-SC_BEYOND_OF_WARCRY, 28
-SC_UNLIMITED_HUMMING_VOICE, 28
-SC_WARMER, 2
-SC_VENOMIMPRESS, 260
-SC_FROSTMISTY, 288
-//SC_ASSUMPTIO2, 16
-//SC_GN_TRAINING_SWORD, 31
-//SC_GN_REMODELING_CART, 31
-SC_STOMACHACHE, 32
-SC_MYSTERIOUS_POWDER, 32
-//SC_ELEMENTAL_AGGRESSIVE, 2
-//SC_ELEMENTAL_WAIT, 2
-//SC_ELEMENTAL_PASSIVE, 2
-//SC_ELEMENTAL_DEFENSIVE, 2
-SC_WATER_BARRIER, 2
-SC_ZEPHYR, 2
-SC_POWER_OF_GAIA, 2
-SC_FIRE_INSIGNIA, 2
-SC_WATER_INSIGNIA, 2
-SC_WIND_INSIGNIA, 2
-SC_EARTH_INSIGNIA, 2
-SC_MORA_BUFF, 2
-//SC_REUSE_LIMIT_G, 29
-//SC_REUSE_LIMIT_H, 29
-SC_NEEDLE_OF_PARALYZE, 1
-SC_PAIN_KILLER, 1
-SC_G_LIFEPOTION, 68
-//SC_VITALIZE_POTION, 4
-SC_LIGHT_OF_REGENE, 1
-//SC_SONIC_CLAW_POSTDELAY, 2
-//SC_SILVERVEIN_RUSH_POSTDELAY, 2
-//SC_MIDNIGHT_FRENZY_POSTDELAY, 2
-//SC_TINDER_BREAKER, 2
-//SC_TINDER_BREAKER_POSTDELAY, 2
-//SC_CBC, 2
-//SC_CBC_POSTDELAY, 2
-//SC_EQC, 2
-SC_MAGIC_CANDY, 92
-//SC_ALL_RIDING_REUSE_LIMIT, 1
-//SC_HANDICAPSTATE_DEEP_SLEEP, 80
-SC_MONSTER_TRANSFORM, 268
-SC_MTF_ASPD, 12
-SC_MTF_RANGEATK, 12
-SC_MTF_MATK, 12
-SC_MTF_MLEATKED,12
-SC_MTF_CRIDAMAGE, 12
-SC_FULL_THROTTLE, 18
-SC_REBOUND, 18
-SC_TELEKINESIS_INTENSE, 18
-
-// Geffen Scrolls
-SC_SKELSCROLL, 69
-SC_DISTRUCTIONSCROLL, 69
-SC_ROYALSCROLL, 69
-SC_IMMUNITYSCROLL, 69
-SC_MYSTICSCROLL, 69
-SC_BATTLESCROLL, 69
-SC_ARMORSCROLL, 69
-SC_FREYJASCROLL, 69
-SC_SOULSCROLL, 69
-
-// Eden Crystal Synthesis
-SC_QUEST_BUFF1, 13
-SC_QUEST_BUFF2, 13
-SC_QUEST_BUFF3, 13
-
-// Geffen Magic Tournament
-SC_GEFFEN_MAGIC1, 14
-SC_GEFFEN_MAGIC2, 14
-SC_GEFFEN_MAGIC3, 14
-
-SC_OVERLAPEXPUP, 12
-SC_M_LIFEPOTION, 68
-
-// Guild Auras should not be saved
-SC_LEADERSHIP,78
-SC_GLORYWOUNDS,78
-SC_SOULCOLD,78
-SC_HAWKEYES,78
-SC_GDSKILL_REGENERATION,78
-
-SC_ORCISH, 2
-
-// Unremovable
-SC_WEIGHTOVER50, 207
-SC_WEIGHTOVER90, 207
-SC_WEDDING, 77
-SC_XMAS, 77
-SC_SUMMER, 77
-SC_NOCHAT, 205
-SC_FUSION, 77
-SC_EARTHSCROLL, 77
-SC_STORMKICK_READY, 77
-SC_DOWNKICK_READY, 77
-SC_COUNTERKICK_READY, 77
-SC_TURNKICK_READY, 77
-SC_DODGE_READY, 77
-SC_JAILED, 205
-SC_AUTOTRADE, 77
-SC_DANCING, 12
-SC_WHISTLE, 79
-SC_ASSNCROS, 79
-SC_POEMBRAGI, 79
-SC_APPLEIDUN, 79
-SC_HUMMING, 79
-SC_DONTFORGETME, 79
-SC_FORTUNE, 79
-SC_SERVICEFORYOU, 79
-SC_INCHIT, 77
-SC_PUSH_CART, 461
-SC_COLD, 256
-SC_BLOOD_SUCKER, 256
-
-// Costumes
-SC_MOONSTAR, 463
-SC_SUPER_STAR, 463
-SC_STRANGELIGHTS, 463
-SC_DECORATION_OF_MUSIC, 463
-SC_LJOSALFAR, 463
-SC_MERMAID_LONGING, 463
-SC_HAT_EFFECT, 463
-SC_FLOWERSMOKE, 463
-SC_FSTONE, 463
-SC_HAPPINESS_STAR, 463
-SC_MAPLE_FALLS, 463
-SC_TIME_ACCESSORY, 463
-SC_MAGICAL_FEATHER, 463
-SC_BLOSSOM_FLUTTERING, 463
-
-// Summoner
-SC_SPRITEMABLE, 205
-SC_BITESCAR, 4
-
-// Clan System
-SC_CLAN_INFO, 463
-
-// Cant Clear
-SC_ALL_RIDING, 397
-
-SC_DAILYSENDMAILCNT, 461
diff --git a/doc/atcommands.txt b/doc/atcommands.txt
index dd8ad0969..0b4dce579 100644
--- a/doc/atcommands.txt
+++ b/doc/atcommands.txt
@@ -584,6 +584,12 @@ Opens the Identification window if any unappraised items are in your inventory.
---------------------------------------
+@identifyall
+
+Identifies all unappraised items in your inventory.
+
+---------------------------------------
+
@trade <player name>
Opens the trade window with the specified player.
@@ -672,17 +678,30 @@ Example:
@refine <equip position> <+/- amount>
Refines an equipped item by the specified amount.
-0: All Equipment
-1: Lower Headgear
-2: Right Hand
+-3: Refine All Equip (Shadow)
+-2: Refine All Equip (Costume)
+-1: Refine All Equip (General)
+1: Headgear (Low)
+2: Hand (Right)
4: Garment
-8: Left Accessory
+8: Accessory (Left)
16: Body Armor
-32: Left Hand
+32: Hand (Left)
64: Shoes
-128: Right Accessory
-256: Top Headgear
-512: Mid Headgear
+128: Accessory (Right)
+256: Headgear (Top)
+256: Headgear (Mid)
+1024: Costume Headgear (Top)
+2048: Costume Headgear (Mid)
+4096: Costume Headgear (Low)
+8192: Costume Garment
+65536: Shadow Armor
+131072: Shadow Weapon
+262144: Shadow Shield
+524288: Shadow Shoes
+1048576: Shadow Accessory (Right)
+2097152: Shadow Accessory (Left)
+2097152: Shadow Accessory (Left)
---------------------------------------
@@ -1040,6 +1059,12 @@ Changes the gender attached to the player's account.
---------------------------------------
+@changecharsex
+
+Changes the gender attached to the player's character.
+
+---------------------------------------
+
@marry <player 1> <player 2>
@divorce <player>
@@ -1260,6 +1285,16 @@ Example:
---------------------------------------
+@reloadnpc <path>
+
+Unloads all NPCs in a file and reload it again.
+Note: Be aware that mapflags and monsters spawned directly are not removed.
+
+Example:
+@reloadnpc npc/custom/jobmaster.txt
+
+---------------------------------------
+
=====================
| 6. Party Commands |
=====================
diff --git a/doc/constants.md b/doc/constants.md
index 48564573d..71150da6f 100644
--- a/doc/constants.md
+++ b/doc/constants.md
@@ -1442,6 +1442,7 @@
- `MOB_ELEMENT`: 20
- `MOB_MODE`: 21
- `MOB_MVPEXP`: 22
+- `MOB_DMG_TAKEN_RATE`: 23
### mercenary guilds
@@ -3487,11 +3488,38 @@
- `4_M_POPFESTA`: 10251
- `4_BONFIRE`: 10252
- `4_PCCOUNT`: 10253
+- `4_LAVAGOLEM`: 10254
+- `4_F_IA`: 10255
+- `4_LOCKE`: 10256
+- `4_LIL_LIF`: 10257
+- `4_LIL_LIF2`: 10258
+- `4_F_DRAGONHAT`: 10259
+- `4_M_DRAGONHAT`: 10260
+- `JP_NPC02`: 10261
+- `JP_NPC03`: 10262
+- `JP_NPC04`: 10263
+- `JP_NPC05`: 10264
+- `JP_NPC06`: 10265
+- `JP_NPC07`: 10266
+- `JP_NPC08`: 10267
+- `JP_NPC09`: 10268
+- `JP_NPC10`: 10269
+- `4_FIRERING`: 10270
- `4_SCATLETON`: 10271
+- `4_JP_AB_NPC_001`: 10272
+- `4_JP_AB_NPC_002`: 10273
+- `4_JP_AB_NPC_003`: 10274
+- `4_JP_AB_NPC_004`: 10275
+- `4_JP_AB_NPC_005`: 10276
+- `4_JP_AB_NPC_006`: 10277
+- `4_JP_AB_NPC_007`: 10278
+- `4_JP_AB_NPC_008`: 10279
- `4_JJAK`: 10280
- `4_M_SNOWMAN_B`: 10281
- `4_M_SNOWMAN_R`: 10282
- `4_M_SNOWMAN_G`: 10283
+- `WARPEFFECTNPC`: 10284
+- `4_HEN`: 10285
- `4_F_DANGDANG`: 10286
- `4_M_DANGDANG`: 10287
- `4_F_DANGDANG1`: 10288
@@ -3516,6 +3544,39 @@
- `4_ED_OSCAR`: 10307
- `4_ED_ORB`: 10308
- `4_ED_FENCE`: 10309
+- `4_M_ANDREA`: 10310
+- `4_M_ANDREA_D`: 10311
+- `4_F_ANES`: 10312
+- `4_F_ANES_D`: 10313
+- `4_M_SILVANO`: 10314
+- `4_M_SILVANO_D`: 10315
+- `4_F_CECILIA`: 10316
+- `4_F_CECILIA_D`: 10317
+- `4_M_MD_SEYREN`: 10318
+- `4_M_MD_EREMES`: 10319
+- `4_M_MD_HARWORD`: 10320
+- `4_F_MD_MAGALETA`: 10321
+- `4_F_MD_SHECIL`: 10322
+- `4_F_MD_KATRINN`: 10323
+- `4_M_MD_SEYREN_H`: 10324
+- `4_M_MD_EREMES_H`: 10325
+- `4_M_MD_HARWORD_H`: 10326
+- `4_F_MD_MAGALETA_H`: 10327
+- `4_F_MD_SHECIL_H`: 10328
+- `4_F_MD_KATRINN_H`: 10329
+- `4_M_MD_SEYREN_D`: 10330
+- `4_M_MD_EREMES_D`: 10331
+- `4_M_MD_HARWORD_D`: 10332
+- `4_F_MD_MAGALETA_D`: 10333
+- `4_F_MD_SHECIL_D`: 10334
+- `4_F_MD_KATRINN_D`: 10335
+- `4_F_MD_YGNIZEM`: 10336
+- `4_F_ERENE`: 10337
+- `4_M_EINCPTMINER`: 10338
+- `4_F_EINRESERCHER`: 10339
+- `4_F_REINDEER`: 10340
+- `4_PIGOCTO`: 10341
+- `4_JP_16TH`: 10343
### Mercenary IDs
@@ -4236,6 +4297,29 @@
- `ITEMINFO_MATK`: 15
- `ITEMINFO_VIEWSPRITE`: 16
- `ITEMINFO_TRADE`: 17
+- `ITEMINFO_ELV_MAX`: 18
+- `ITEMINFO_DROPEFFECT_MODE`: 19
+- `ITEMINFO_DELAY`: 20
+- `ITEMINFO_CLASS_BASE_1`: 21
+- `ITEMINFO_CLASS_BASE_2`: 22
+- `ITEMINFO_CLASS_BASE_3`: 23
+- `ITEMINFO_CLASS_UPPER`: 24
+- `ITEMINFO_FLAG_NO_REFINE`: 25
+- `ITEMINFO_FLAG_DELAY_CONSUME`: 26
+- `ITEMINFO_FLAG_AUTOEQUIP`: 27
+- `ITEMINFO_FLAG_AUTO_FAVORITE`: 28
+- `ITEMINFO_FLAG_BUYINGSTORE`: 29
+- `ITEMINFO_FLAG_BINDONEQUIP`: 30
+- `ITEMINFO_FLAG_KEEPAFTERUSE`: 31
+- `ITEMINFO_FLAG_FORCE_SERIAL`: 32
+- `ITEMINFO_FLAG_NO_OPTIONS`: 33
+- `ITEMINFO_FLAG_DROP_ANNOUNCE`: 34
+- `ITEMINFO_FLAG_SHOWDROPEFFECT`: 35
+- `ITEMINFO_STACK_AMOUNT`: 36
+- `ITEMINFO_STACK_FLAG`: 37
+- `ITEMINFO_ITEM_USAGE_FLAG`: 38
+- `ITEMINFO_ITEM_USAGE_OVERRIDE`: 39
+- `ITEMINFO_GM_LV_TRADE_OVERRIDE`: 40
### getmercinfo options
@@ -4460,6 +4544,7 @@
- `UDT_ROBE`: 55
- `UDT_BODY2`: 56
- `UDT_GROUP`: 57
+- `UDT_DAMAGE_TAKEN_RATE`: 58
### getguildonline types
@@ -4467,6 +4552,12 @@
- `GUILD_ONLINE_VENDOR`: 1
- `GUILD_ONLINE_NO_VENDOR`: 2
+### Siege Types
+
+- `SIEGE_TYPE_FE`: 0
+- `SIEGE_TYPE_SE`: 1
+- `SIEGE_TYPE_TE`: 2
+
### Renewal
- `RENEWAL`: 1
@@ -7615,6 +7706,7 @@
- `DUMMY_100`: 2410
- `DUMMY_150`: 2411
- `DUMMY_10_FIRE`: 2413
+- `RUNAWAY_BOOK`: 2414
- `MG_ZOMBIE`: 2464
- `MG_WRAITH`: 2465
- `MG_GHOUL`: 2466
@@ -9109,9 +9201,11 @@
- `Thanos_Knuckle`: 1836
- `Scarlet_Knuckle`: 1839
- `Combo_Battle_Glove_IL`: 1846
+- `Iron_Nail_K`: 1847
- `Rebeginer_SR_Nuckle`: 1848
- `Burning_Knuckle_OS`: 1862
- `Evt_Iron_Nail_K`: 1864
+- `Ein_1HKNUCK`: 1867
- `Violin_of_Vicious_Mind`: 1900
- `Violin`: 1901
- `Violin_`: 1902
@@ -9228,8 +9322,10 @@
- `Staff_of_Vicious_Mind`: 2026
- `Wizardy_Staff_IL`: 2039
- `Rebeginer_WL_Staff`: 2046
+- `Iron_Staff`: 2048
- `Survival_Staff_IL`: 2051
- `Evt_Iron_Staff`: 2054
+- `Ein_BHSTAFF`: 2058
- `Guard`: 2101
- `Guard_`: 2102
- `Buckler`: 2103
@@ -13592,6 +13688,11 @@
- `Phreeoni_Egg`: 9111
- `Moonlight_Flower_Egg`: 9112
- `Skelion_Egg`: 9113
+- `Ein_Ddbox`: 9514
+- `Metal_Rifine_Ticket`: 9523
+- `Ein_Ddbox2`: 9529
+- `Gemstone_Of_Time`: 9550
+- `Time_Unseal_Key`: 9551
- `Skull_Helm`: 10001
- `Monster_Oxygen_Mask`: 10002
- `Transparent_Headgear`: 10003
@@ -14969,6 +15070,8 @@
- `Huuma_Fluttering_Snow_IL`: 13337
- `Huuma_Bird_Wing_IL`: 13338
- `Rebeginer_KO_Humma`: 13341
+- `Humma_Clear`: 13345
+- `Ein_BHHuuma`: 13346
- `Cutlas_`: 13400
- `Excalibur_C`: 13401
- `Cutlas_C`: 13402
@@ -15014,6 +15117,7 @@
- `Saber_of_Vicious_Mind`: 13455
- `Immaterial_Sword_IL`: 13469
- `Rebeginer_GN_Sword`: 13483
+- `Sword_Of_Bluefire`: 13485
- `Cannon_Rapier_OS`: 13493
- `Evt_Bluefire_Sword`: 13495
- `Insurance60_Package`: 13500
@@ -16071,13 +16175,28 @@
- `True_Hunting_Mail`: 15246
- `R_Hunting_Mail`: 15247
- `Rebeginer_Suits`: 15250
+- `Overwhelm_Str_Armor`: 15278
+- `Overwhelm_Int_Armor`: 15279
- `S_CriticalHit_Armor`: 15280
+- `Overwhelm_Luk_Armor`: 15346
+- `Overwhelm_Vit_Armor`: 15347
- `Goibne_Armor_IL`: 15348
+- `Overwhelm_Agi_Armor`: 15353
+- `Overwhelm_Dex_Armor`: 15354
- `Illusion_Armor_A`: 15376
- `Illusion_Armor_B`: 15377
+- `Lava_Leather_Armor`: 15378
+- `Lava_Leather_Suits`: 15379
+- `Lava_Leather_Robe`: 15380
- `Time_Overload_Robe`: 15383
- `Schmidt_Suits`: 15388
- `Schmidt_Manteau`: 15389
+- `DragonA_Red`: 15391
+- `DragonA_Green`: 15392
+- `DragonA_Gold`: 15393
+- `DragonA_Purple`: 15394
+- `DragonA_Blue`: 15395
+- `DragonA_Silver`: 15396
- `Erde`: 16000
- `Red_Square_Bag`: 16001
- `Stunner_C`: 16002
@@ -16119,6 +16238,7 @@
- `Rebeginer_N2_Mace`: 16076
- `Saphir_Hall_OS`: 16088
- `Ultio_Spes_OS`: 16089
+- `Ein_1HHAMMER`: 16099
- `Lady_Tanee_Doll_Box`: 16131
- `Lunatic_Hat_Box`: 16132
- `King_Frog_Hat_Box`: 16134
@@ -16534,6 +16654,7 @@
- `Infinity_Bow`: 18128
- `Scarlet_Bow`: 18130
- `Balistar_IL`: 18149
+- `Royal_Bow_K`: 18164
- `Rebeginer_RN_Bow`: 18165
- `Rebeginer_WM_Bow`: 18166
- `Neev_Bow_Of_Rogue`: 18170
@@ -16543,6 +16664,7 @@
- `AC_B44_OS`: 18180
- `Evt_Royal_Bow_K`: 18182
- `Evt_Narcis_Bow`: 18183
+- `Ein_BHBOW`: 18190
- `Cheer_Scarf6`: 18500
- `Cheer_Scarf8`: 18501
- `Cheer_Scarf10`: 18502
@@ -17764,10 +17886,17 @@
- `C_Magic_Circle`: 20515
- `C_Wings_of_Michael`: 20516
- `C_GiantCatBag_TW`: 20517
+- `C_Full_BloomCherry_Tree`: 20519
- `C_GoldButterfly_Wing`: 20528
- `C_Wings_of_Gabriel`: 20530
- `C_PinkButterfly_Wing_T`: 20533
- `C_Digital_Space`: 20535
+- `C_Halloween_Poring_Bag`: 20543
+- `C_Backside_Ribbon_Bell`: 20546
+- `C_HeartChocoBag`: 20570
+- `C_WingOfHeart`: 20572
+- `C_Cat_Fork`: 20576
+- `C_Big_Foxtail`: 20584
- `Fantastic_Aura`: 20600
- `Egir_Manteau`: 20700
- `TE_Woe_Muffler`: 20702
@@ -17820,6 +17949,13 @@
- `Time_Overload_Hood`: 20939
- `Violet_Halo`: 20940
- `Fairy_Cloth`: 20944
+- `Drag_Manteau`: 20946
+- `Temporal_M_Str`: 20963
+- `Temporal_M_Agi`: 20964
+- `Temporal_M_Vit`: 20965
+- `Temporal_M_Int`: 20966
+- `Temporal_M_Dex`: 20967
+- `Temporal_M_Luk`: 20968
- `Upg_Twohand_Sword`: 21000
- `Velum_Claymore`: 21001
- `Velum_Katzbalger`: 21002
@@ -17840,8 +17976,11 @@
- `Lindy_Hop`: 21018
- `Onimaru`: 21019
- `Rebeginer_RK_T_Sword`: 21037
+- `Oriental_Sword`: 21038
- `Beam_Claymore_OS`: 21047
- `Evt_Oriental_Sword`: 21049
+- `Taegoolyeon_IL`: 21050
+- `Ein_BHSWORD`: 21054
- `Temporal_Str_Boots`: 22000
- `Temporal_Int_Boots`: 22001
- `Temporal_Agi_Boots`: 22002
@@ -17893,6 +18032,7 @@
- `Illusion_Leg_A`: 22196
- `Illusion_Leg_B`: 22197
- `Time_Overload_Boots`: 22204
+- `Dragon_Boots`: 22208
- `Para_Team_Mark_`: 22508
- `Candy_Holder`: 22514
- `Key_Of_Twisted_Time`: 22515
@@ -17959,10 +18099,12 @@
- `Buy_Arbeit1_2Lv_`: 23358
- `Buy_Arbeit1_3Lv_`: 23359
- `Green_Scroll_K2`: 23405
+- `Shadow_Refine_Hammer`: 23436
- `Sentimental_Scroll`: 23440
- `July_Hair_Box`: 23444
- `Savage_Trap`: 23446
- `Infinity_Scroll`: 23473
+- `InfinityShadow_Mix`: 23474
- `Infinity_Drink`: 23475
- `Firstaid_Box_5`: 23484
- `Firstaid_Box_10`: 23485
@@ -17989,6 +18131,9 @@
- `White_Potion_B_20`: 23506
- `Vote_Rose`: 23533
- `Bloody_Scroll`: 23537
+- `Silver_Statue`: 23545
+- `Cursed_Blood`: 23546
+- `Gold_Statue`: 23547
- `Snow_Cookie`: 23549
- `Winter_Cookie`: 23550
- `Festi_Cookie`: 23551
@@ -18010,11 +18155,22 @@
- `2017_Special_Scroll`: 23618
- `Ice_Scroll`: 23650
- `2018_New_Year_Scroll`: 23661
+- `PhysicalMagical_Mix`: 23665
+- `ImmunedAthena_Mix`: 23666
+- `HardChamption_Mix`: 23667
+- `KingbirdAncient_Mix`: 23668
+- `CriticalHit_Mix`: 23669
+- `Geffen_Magic_Scroll`: 23675
+- `Gray_Charcoal_Melee`: 23676
+- `Gray_Charcoal_Magic`: 23677
+- `Gray_Charcoal_Range`: 23678
+- `Geffen_Magic_Scroll2`: 23679
- `EVT_JAN02KR`: 23683
- `Lunar_New_Year_Scroll`: 23700
- `Reactor_Z`: 23706
- `Reactor_Z_`: 23707
- `2018_Spring_Scroll`: 23710
+- `Shadow_Random_Mix`: 23720
- `Melon_Bread`: 23723
- `Costama_EggV02`: 23765
- `Mysterious_Plastic`: 23771
@@ -18022,15 +18178,101 @@
- `EP17_1_SPC02`: 23773
- `EP17_1_SPC03`: 23774
- `EP17_1_SPC04`: 23775
+- `EP17_1_SPC05`: 23776
+- `EP17_1_SPC06`: 23777
+- `EP17_1_SPC07`: 23778
+- `EP17_1_SPC08`: 23779
+- `EP17_1_SPC09`: 23780
+- `EP17_1_SPC10`: 23781
+- `Magma_Essence`: 23815
- `Bs_Making_Scrolls`: 23817
+- `Bs_Item_M_S_2`: 23818
+- `Bs_Item_M_S_8`: 23819
+- `Bs_Item_M_S_10`: 23820
+- `Bs_Item_M_S_11`: 23821
+- `Bs_Item_M_S_34`: 23822
+- `Bs_Item_M_S_41`: 23823
+- `Bs_Item_M_S_42`: 23824
+- `Bs_Item_M_S_43`: 23825
+- `Bs_Item_M_S_44`: 23826
+- `Bs_Sha_M_S_1`: 23827
+- `Bs_Sha_M_S_17`: 23828
+- `Bs_Sha_M_S_18`: 23829
+- `Bs_Sha_M_S_19`: 23830
+- `Bs_Sha_M_S_20`: 23831
+- `Bs_Item_M_S_4`: 23832
+- `Bs_Item_M_S_6`: 23833
+- `Bs_Item_M_S_7`: 23834
+- `Bs_Item_M_S_12`: 23835
+- `Bs_Item_M_S_13`: 23836
+- `Bs_Item_M_S_15`: 23837
+- `Bs_Item_M_S_28`: 23838
+- `Bs_Item_M_S_29`: 23839
+- `Bs_Item_M_S_31`: 23840
+- `Bs_Item_M_S_32`: 23841
+- `Bs_Item_M_S_33`: 23842
+- `Bs_Item_M_S_36`: 23843
+- `Bs_Item_M_S_37`: 23844
+- `Bs_Item_M_S_38`: 23845
+- `Bs_Item_M_S_39`: 23846
+- `Bs_Item_M_S_40`: 23847
+- `Bs_Item_M_S_45`: 23848
+- `Bs_Item_M_S_46`: 23849
+- `Bs_Item_M_S_47`: 23850
+- `Bs_Item_M_S_48`: 23851
+- `Bs_Item_M_S_49`: 23852
+- `Bs_Item_M_S_50`: 23853
+- `Bs_Sha_M_S_2`: 23854
+- `Bs_Sha_M_S_5`: 23855
+- `Bs_Sha_M_S_6`: 23856
+- `Bs_Sha_M_S_7`: 23857
+- `Bs_Sha_M_S_8`: 23858
+- `Bs_Sha_M_S_13`: 23859
+- `Bs_Sha_M_S_15`: 23860
+- `Bs_Sha_M_S_16`: 23861
+- `Bs_Sha_M_S_23`: 23862
+- `Bs_Item_M_S_5`: 23863
+- `Bs_Item_M_S_9`: 23864
+- `Bs_Item_M_S_14`: 23865
+- `Bs_Item_M_S_16`: 23866
+- `Bs_Item_M_S_17`: 23867
+- `Bs_Item_M_S_19`: 23868
+- `Bs_Item_M_S_27`: 23869
+- `Bs_Item_M_S_35`: 23870
+- `Bs_Sha_M_S_9`: 23871
+- `Bs_Sha_M_S_10`: 23872
+- `Bs_Sha_M_S_11`: 23873
+- `Bs_Sha_M_S_21`: 23874
+- `Bs_Sha_M_S_22`: 23875
+- `Bs_Item_M_S_1`: 23876
+- `Bs_Item_M_S_3`: 23877
- `StarSoul_Scroll`: 23878
+- `Bs_Item_M_S_18`: 23879
+- `Bs_Item_M_S_20`: 23880
+- `Bs_Item_M_S_21`: 23881
+- `Bs_Item_M_S_22`: 23882
+- `Bs_Item_M_S_23`: 23883
+- `Bs_Item_M_S_24`: 23884
+- `Bs_Item_M_S_25`: 23885
+- `Bs_Item_M_S_26`: 23886
+- `Bs_Item_M_S_30`: 23887
+- `Bs_Sha_M_S_3`: 23888
+- `Bs_Sha_M_S_4`: 23889
+- `Bs_Sha_M_S_12`: 23890
+- `Bs_Sha_M_S_14`: 23891
+- `Bs_Sha_M_S_24`: 23892
+- `Bs_Sha_M_S_25`: 23893
+- `Bs_Item_M_S_51`: 23894
- `2018_Jump_Thx_Box`: 23897
- `Comp_Power_Booster`: 23898
- `Comp_Almighty`: 23899
- `Time_Overload_Box`: 23900
- `110LVUP`: 23901
- `Season_Evt_Reward`: 23921
+- `Shadow_9_Refine_Hammer`: 23926
- `Malang_Cat_Can2`: 23962
+- `EnchantStone_Recipe_9m`: 23967
+- `Abyss_Ddbox`: 23981
- `T1_Shadow_Armor`: 24000
- `T1_Shadow_Weapon`: 24001
- `T1_Shadow_Shield`: 24002
@@ -18319,6 +18561,167 @@
- `S_Timeoverload_Shoes`: 24419
- `S_Timeoverload_Earing`: 24420
- `S_Timeoverload_Pandent`: 24421
+- `S_Tempest_Weapon`: 24423
+- `S_Tempest_Armor`: 24424
+- `S_PerfectSize_Weapon`: 24425
+- `S_PerfectSize_Armor`: 24426
+- `S_M_Exo_Co_Weapon`: 24427
+- `S_M_Viv_Dr_Weapon`: 24428
+- `S_M_Sci_Hu_Weapon`: 24429
+- `S_M_Fis_In_Weapon`: 24430
+- `S_M_Exe_Ho_Weapon`: 24431
+- `S_Penetration_Weapon`: 24432
+- `S_Penetration_Armor`: 24433
+- `S_Exe_Ho_Weapon`: 24434
+- `S_Fis_In_Weapon`: 24435
+- `S_Sci_Hu_Weapon`: 24436
+- `S_Viv_Dr_Weapon`: 24437
+- `S_Exo_Co_Weapon`: 24438
+- `S_Hasty_Weapon`: 24439
+- `S_Sonic_Armor`: 24440
+- `S_Sonic_Shield`: 24441
+- `S_Sonic_Shoes`: 24442
+- `S_Ignition_Weapon`: 24443
+- `S_Ignition_Pendant`: 24444
+- `S_Ignition_Earing`: 24445
+- `S_W_Breath_Armor`: 24446
+- `S_W_Breath_Shield`: 24447
+- `S_W_Breath_Shoes`: 24448
+- `S_F_Breath_Weapon`: 24449
+- `S_F_Breath_Pendant`: 24450
+- `S_F_Breath_Earing`: 24451
+- `S_Cluster_Armor`: 24452
+- `S_Cluster_Shield`: 24453
+- `S_Cluster_Shoes`: 24454
+- `S_Aimed_Weapon`: 24455
+- `S_Aimed_Pendant`: 24456
+- `S_Aimed_Earing`: 24457
+- `S_Arrow_Armor`: 24458
+- `S_Arrow_Shield`: 24459
+- `S_Arrow_Shoes`: 24460
+- `S_Shooting_Weapon`: 24461
+- `S_Shooting_Pendant`: 24462
+- `S_Shooting_Earing`: 24463
+- `S_Tornado_Armor`: 24464
+- `S_Tornado_Shield`: 24465
+- `S_Tornado_Shoes`: 24466
+- `S_Boomerang_Weapon`: 24467
+- `S_Boomerang_Pendant`: 24468
+- `S_Boomerang_Earing`: 24469
+- `S_Vulcan_Armor`: 24470
+- `S_Vulcan_Shield`: 24471
+- `S_Vulcan_Shoes`: 24472
+- `S_Arms_Weapon`: 24473
+- `S_Arms_Pendant`: 24474
+- `S_Arms_Earing`: 24475
+- `S_Rampage_Armor`: 24476
+- `S_Rampage_Shield`: 24477
+- `S_Rampage_Shoes`: 24478
+- `S_Skynetblow_Weapon`: 24479
+- `S_Skynetblow_Pendant`: 24480
+- `S_Skynetblow_Earing`: 24481
+- `S_Knucklearrow_Armor`: 24482
+- `S_Knucklearrow_Shield`: 24483
+- `S_Knucklearrow_Shoes`: 24484
+- `S_TigerCannon_Weapon`: 24485
+- `S_Tigercannon_Pendant`: 24486
+- `S_Tigercannon_Earing`: 24487
+- `S_Duplelight_Armor`: 24488
+- `S_Duplelight_Shield`: 24489
+- `S_Duplelight_Shoes`: 24490
+- `S_Adoramus_Weapon`: 24491
+- `S_Adoramus_Pendant`: 24492
+- `S_Adoramus_Earing`: 24493
+- `S_Judex_Armor`: 24494
+- `S_Judex_Shield`: 24495
+- `S_Judex_Shoes`: 24496
+- `S_Magnus_Weapon`: 24497
+- `S_Magnus_Pendant`: 24498
+- `S_Magnus_Earing`: 24499
+- `S_Rainstorm_Armor`: 24500
+- `S_Rainstorm_Shield`: 24501
+- `S_Rainstorm_Shoes`: 24502
+- `S_Arrowvulcan_Weapon`: 24503
+- `S_Arrowvulcan_Pendant`: 24504
+- `S_Arrowvulcan_Earing`: 24505
+- `S_Metalic_Armor`: 24506
+- `S_Metalic_Shield`: 24507
+- `S_Metalic_Shoes`: 24508
+- `S_Reverberation_Weapon`: 24509
+- `S_Reverberation_Pendant`: 24510
+- `S_Reverberation_Earing`: 24511
+- `S_Jack_Armor`: 24512
+- `S_Jack_Shield`: 24513
+- `S_Jack_Shoes`: 24514
+- `S_Strain_Weapon`: 24515
+- `S_Strain_Pendant`: 24516
+- `S_Strain_Earing`: 24517
+- `S_Crimson_Armor`: 24518
+- `S_Crimson_Shield`: 24519
+- `S_Crimson_Shoes`: 24520
+- `S_Chain_Weapon`: 24521
+- `S_Chain_Pendant`: 24522
+- `S_Chain_Earing`: 24523
+- `S_Triangle_Armor`: 24524
+- `S_Triangle_Shield`: 24525
+- `S_Triangle_Shoes`: 24526
+- `S_Shadowspell_Weapon`: 24527
+- `S_Shadowspell_Pendant`: 24528
+- `S_Shadowspell_Earing`: 24529
+- `S_Menace_Armor`: 24530
+- `S_Menace_Shield`: 24531
+- `S_Menace_Shoes`: 24532
+- `S_Paint_Weapon`: 24533
+- `S_Paint_Pendant`: 24534
+- `S_Paint_Earing`: 24535
+- `S_Rolling_Armor`: 24536
+- `S_Rolling_Shield`: 24537
+- `S_Rolling_Shoes`: 24538
+- `S_Katar_Weapon`: 24539
+- `S_Katar_Pendant`: 24540
+- `S_Katar_Earing`: 24541
+- `S_Slash_Armor`: 24542
+- `S_Slash_Shield`: 24543
+- `S_Slash_Shoes`: 24544
+- `S_Ripper_Weapon`: 24545
+- `S_Ripper_Pendant`: 24546
+- `S_Ripper_Earing`: 24547
+- `S_Dust_Armor`: 24548
+- `S_Dust_Shield`: 24549
+- `S_Dust_Shoes`: 24550
+- `S_Grave_Weapon`: 24551
+- `S_Grave_Pendant`: 24552
+- `S_Grave_Earing`: 24553
+- `S_Psychic_Armor`: 24554
+- `S_Psychic_Shield`: 24555
+- `S_Psychic_Shoes`: 24556
+- `S_Varetyr_Weapon`: 24557
+- `S_Varetyr_Pendant`: 24558
+- `S_Varetyr_Earing`: 24559
+- `S_Cart_Tornado_Armor`: 24560
+- `S_Cart_Tornado_Shield`: 24561
+- `S_Cart_Tornado_Shoes`: 24562
+- `S_Cannon_Cart_Weapon`: 24563
+- `S_Cannon_Cart_Pendant`: 24564
+- `S_Cannon_Cart_Earing`: 24565
+- `S_Spore_Bomb_Armor`: 24566
+- `S_Spore_Bomb_Shield`: 24567
+- `S_Spore_Bomb_Shoes`: 24568
+- `S_Crazy_Weapon`: 24569
+- `S_Crazy_Pendant`: 24570
+- `S_Crazy_Earing`: 24571
+- `S_Brand_Armor`: 24572
+- `S_Brand_Shield`: 24573
+- `S_Brand_Shoes`: 24574
+- `S_Chain_Press_Weapon`: 24575
+- `S_Chain_Press_Pendant`: 24576
+- `S_Chain_Press_Earing`: 24577
+- `S_Banish_Cannon_Armor`: 24578
+- `S_Banish_Cannon_Shield`: 24579
+- `S_Banish_Cannon_Shoes`: 24580
+- `S_Genesis_Weapon`: 24581
+- `S_Genesis_Pendant`: 24582
+- `S_Genesis_Earing`: 24583
- `BrokenArrow`: 25258
- `Shining_Spore`: 25265
- `Dried_Leaf_Of_Ygg`: 25266
@@ -18425,17 +18828,58 @@
- `GH_Cursed_Crystal`: 25739
- `GH_Cursed_Gemstone`: 25740
- `Inventory_Extension_Coupon`: 25793
+- `SuraStone_Robe2`: 25797
+- `SuraStone_Bottom2`: 25798
+- `SuraStone_Middle2`: 25799
+- `SuraStone_Top2`: 25800
+- `SorcererStone_Robe2`: 25801
+- `SorcererStone_Bottom2`: 25802
+- `SorcererStone_Middle2`: 25803
+- `SorcererStone_Top2`: 25804
+- `ShadowchaserStone_Robe2`: 25805
+- `ShadowchasStone_Bottom2`: 25806
+- `ShadowchasStone_Middle2`: 25807
+- `ShadowchaserStone_Top2`: 25808
+- `Ein_SOLIDDUST`: 25815
+- `Ein_RUSTHELM`: 25816
+- `Ein_EYEROCK`: 25817
+- `SoulreaperStone_Robe`: 25842
+- `SoullinkerStone_Top`: 25843
+- `SoullinkerStone_Middle`: 25844
+- `SoullinkerStone_Bottom`: 25845
+- `GladiatorStone_Top`: 25846
+- `GladiatorStone_Middle`: 25847
+- `GladiatorStone_Bottom`: 25848
+- `StaremperorStone_Robe`: 25849
+- `NinjaStone_Top`: 25850
+- `NinjaStone_Middle`: 25851
+- `NinjaStone_Bottom`: 25852
+- `KagerouStone_Robe`: 25853
+- `OboroStone_Robe`: 25854
+- `GunslingerStone_Top`: 25855
+- `GunslingerStone_Middle`: 25856
+- `GunslingerStone_Bottom`: 25857
+- `RebellionStone_Robe`: 25858
+- `DoramStone_Top`: 25859
+- `DoramStone_Middle`: 25860
+- `DoramStone_Bottom`: 25861
+- `DoramStone_Robe`: 25862
- `Spectral_Spear_IL`: 26007
- `Rebeginer_LG_Lance`: 26015
- `Paradise_Foxtail_Staff_III`: 26101
- `Staff_Of_Bordeaux_IL`: 26109
- `CandyCaneRod`: 26110
- `Metal_Foxtail`: 26111
+- `Shadow_Staff_K`: 26118
- `Rebeginer_SO_Rod`: 26119
- `Rebeginer_DO_Rod`: 26120
- `Rutilus_Stick_OS`: 26151
+- `SoulWeight`: 26154
- `MeawFoxtail`: 26155
- `Evt_Shadow_Staff_K`: 26156
+- `Ein_1HWAND`: 26162
+- `ElectricFox_OS`: 26164
+- `Ein_1HWHIP`: 26215
- `Faceworm_Queen_Card`: 27164
- `Captain_Felock_Card`: 27182
- `Thanos_Katar`: 28000
@@ -18448,14 +18892,18 @@
- `Ghoul_Leg_IL`: 28023
- `Rebeginer_GC_Katar`: 28027
- `Meuchler_OS`: 28038
+- `Shiver_Katar_K`: 28039
- `Evt_Shiver_Katar_K`: 28040
+- `Ein_BHKATAR`: 28045
- `Thanos_Axe`: 28100
- `Tornado_Axe`: 28101
- `Infinity_Two_handed_Axe`: 28105
- `Scarlet_Twohand_Axe`: 28106
- `Two_Handed_Axe_of_Vicious_Mind`: 28107
+- `Avenger`: 28130
- `Blasti_OS`: 28136
- `Evt_Avenger`: 28137
+- `Ein_BHAXE`: 28140
- `END_OF_HORIZON`: 28200
- `Southern_Cross_R`: 28201
- `Southern_Cross_R_`: 28202
@@ -18467,6 +18915,11 @@
- `Calf_Python`: 28243
- `Gate_KeeperDD_IL`: 28244
- `HR_S55_OS`: 28253
+- `Butcher_IL`: 28254
+- `Master_Soul_Rifle`: 28255
+- `Demon_S_Shot`: 28256
+- `Golden_L_Launcher`: 28257
+- `The_Black_Gatling`: 28258
- `Bless_Of_Moon`: 28306
- `Earring_Of_Sarah_L`: 28310
- `Earring_Of_Sarah_R`: 28311
@@ -18510,16 +18963,24 @@
- `Rebeginer_AB_Bible`: 28616
- `Tablet_IL`: 28626
- `Circuit_Board_OS`: 28629
+- `Demon_Hunting_Bible_K`: 28630
- `Time_Kamiji`: 28631
+- `Ein_1HBOOK`: 28635
- `Infinity_Dagger`: 28703
- `Twilight_Desert_`: 28704
- `Scarlet_Dagger`: 28705
- `Dagger_of_Vicious_Mind`: 28706
- `Moonlight_Sword_IL`: 28725
- `Rebeginer_SC_Dagger`: 28740
+- `Magic_Sword`: 28744
- `Counter_Dagger_IL`: 28745
- `Kuroiro_OS`: 28755
- `Evt_Magic_Sword`: 28759
+- `Bazerald_IL`: 28762
+- `Sharp_Wind_Sword`: 28763
+- `Fog_Dew_Sword`: 28764
+- `Ein_1HDAGGER`: 28771
+- `Ein_1HMAGGER`: 28772
- `Praetorian_Shield`: 28900
- `Cursed_Mad_Bunny`: 28901
- `Mad_Bunny_`: 28902
@@ -18585,6 +19046,7 @@
- `Harvest_Festa_Hat`: 31368
- `Straight_Long_WH_`: 31369
- `Straight_Long_YL_`: 31370
+- `C_Cat_Ears_Punkish`: 31382
- `Jjakk`: 31387
- `White_Bird_Rose`: 31389
- `Let_It_Snow`: 31390
@@ -18597,34 +19059,281 @@
- `C_Astro_Circle`: 31433
- `C_Baby_Penguin`: 31437
- `C_Fluffy_Heart_Earmuffs`: 31439
+- `C_Snow_Bear_Food`: 31440
- `White_Cat`: 31452
- `Love_Feeling`: 31454
- `Enchanted_Dog`: 31455
- `C_Blessing_Sky_Lantern`: 31460
- `C_Flying_Drone`: 31463
- `Egg_Minihat`: 31465
+- `C_CatCoffeeCup_TW`: 31481
+- `C_CatEarRibbon_TW`: 31483
- `C_Bouquet_Hat`: 31489
- `C_Poring_Muffler`: 31490
- `Volume_Low_Twin`: 31494
- `Lolita_Two_Side_Up`: 31495
- `C_Elephangel_TH`: 31498
+- `C_Panda_Rabbit`: 31512
- `Mini_Melon`: 31516
- `Pop_Popcorn_Hat_`: 31518
- `Slurp_Slurp_Hat`: 31519
- `C_Happy_Rabbit_Ribbon`: 31529
+- `C_Princess_Ribbon_Crown`: 31565
+- `C_OpenAir_Headset`: 31569
+- `C_Mobile_Pursuit_System`: 31572
+- `C_Mecha_Cat_Ears`: 31573
+- `C_Cyber_Income`: 31574
- `Autumnal_Flavor`: 31580
+- `C_Poporing_Muffler`: 31586
- `GOLD_MAJESTIC_GOUT`: 31589
+- `C_Kishu_Inu`: 31600
- `C_Autumn_Headband`: 31606
+- `C_Fox`: 31614
+- `C_Sleep_Sheep_TW`: 31616
+- `C_HeartOfCat_TW`: 31624
+- `C_Protect_Cloth`: 31625
+- `C_LunaticMuffler`: 31693
+- `C_Pigtail_Red_Hood`: 31698
+- `C_Smiling_Eyes`: 31699
+- `C_Garnet_Tiara`: 31765
+- `C_Peony_Hair_Ornament`: 31766
+- `C_SavageB_On_Shoulder`: 31787
+- `C_Baby_Panda`: 31798
- `Pole_Axe_IL`: 32005
- `Metal_Stick`: 32013
+- `Undine_Spear_K`: 32018
- `Boost_Lance_OS`: 32019
- `Evt_Undine_Spear_K`: 32021
+- `Ein_1HSPEAR`: 32026
+- `Ein_1HLUTE`: 32110
- `Illusion_B_R`: 32207
- `Illusion_B_L`: 32208
- `Illusion_BC_R`: 32209
- `Illusion_BC_L`: 32210
- `Time_Overload_Ring`: 32221
- `Celine_Brooch`: 32237
+- `Gold_Lux_IL`: 32301
+- `Crimson_Rose`: 32302
+- `Ein_1HGUN`: 32303
+- `Ein_1HSWORD`: 32352
+- `Atker_Plate`: 450001
+- `Ele_Robe`: 450002
+- `Atker_Manteau`: 480000
+- `Defn_Robe`: 450003
+- `Ele_Muffler`: 480001
+- `Ran_Suits`: 450004
+- `Defn_Muffler`: 480002
+- `Ran_Manteau`: 480003
+- `Boost_Dagger`: 510001
+- `Boost_Nindo`: 510002
+- `Boost_Spl_Book`: 540000
+- `Boost_Text`: 540001
+- `Boost_Guitar`: 570000
+- `Fatalist`: 510006
+- `Trumpet_Shell_K`: 570002
+- `Boost_TH_Sword`: 600001
+- `Noblesse_Attack_Manteau`: 480012
+- `Dragonic_Slayer`: 600004
+- `Noblesse_Magic_Manteau`: 480014
+- `Noblesse_Breath_Armor`: 450018
+- `Imperial_Attack_Manteau`: 480016
+- `Noblesse_Knight_Armor`: 450019
+- `Imperial_Magic_Manteau`: 480017
+- `Noblesse_Spear_Armor`: 450020
+- `Grace_Attack_Manteau`: 480018
+- `Noblesse_Genesis_Armor`: 450021
+- `Grace_Magic_Manteau`: 480019
+- `Noblesse_Sharp_Suit`: 450022
+- `Noblesse_Aim_Suit`: 450023
+- `Noblesse_Severe_Suit`: 450024
+- `Noblesse_Reverb_Suit`: 450025
+- `Noblesse_Adora_Robe`: 450026
+- `Noblesse_Duple_Robe`: 450027
+- `Noblesse_Tonado_Armor`: 450028
+- `Noblesse_Vulcan_Armor`: 450029
+- `Noblesse_Kart_Suit`: 450030
+- `Noblesse_Kart_Suit2`: 450031
+- `Noblesse_Rolling_Suit`: 450032
+- `Noblesse_Assasin_Suit`: 450033
+- `Noblesse_Fatal_Suit`: 450034
+- `Noblesse_Stalker_Suit`: 450035
+- `Noblesse_Picky_Robe`: 450036
+- `Noblesse_Carrot_Robe`: 450037
+- `Noblesse_Trip_Suit`: 450038
+- `Noblesse_Firerain_Suit`: 450039
+- `Noblesse_Crimson_Robe`: 450040
+- `Noblesse_Frost_Robe`: 450041
+- `Noblesse_Psychic_Robe`: 450042
+- `Noblesse_Dust_Robe`: 450043
+- `Noblesse_Sun_Suit`: 450044
+- `Noblesse_Moon_Suit`: 450045
+- `Noblesse_Ninja_Suit`: 450046
+- `Noblesse_Kunai_Suit`: 450047
+- `Noblesse_Swhoo_Robe`: 450048
+- `Noblesse_Explosion_Robe`: 450049
+- `Noblesse_Knuckle_Suit`: 450050
+- `Noblesse_Tiger_Suit`: 450051
+- `Imperial_Breath_Armor`: 450052
+- `Imperial_Knight_Armor`: 450053
+- `Imperial_Spear_Armor`: 450054
+- `Imperial_Genesis_Armor`: 450055
+- `Imperial_Sharp_Suit`: 450056
+- `Imperial_Aim_Suit`: 450057
+- `Imperial_Severe_Suit`: 450058
+- `Imperial_Reverb_Suit`: 450059
+- `Imperial_Adora_Robe`: 450060
+- `Imperial_Duple_Robe`: 450061
+- `WarlockStone_Robe2`: 1000213
+- `Imperial_Knuckle_Suit`: 450062
+- `WarlockStone_Top2`: 1000214
+- `Imperial_Tiger_Suit`: 450063
+- `WarlockStone_Middle2`: 1000215
+- `Imperial_Tonado_Armor`: 450064
+- `WarlockStone_Bottom2`: 1000216
+- `Imperial_Vulcan_Armor`: 450065
+- `RoyalguardStone_Robe2`: 1000217
+- `Imperial_Kart_Suit`: 450066
+- `PaladinStone_Top2`: 1000218
+- `Imperial_Kart_Suit2`: 450067
+- `PaladinStone_Middle2`: 1000219
+- `Imperial_Rolling_Suit`: 450068
+- `PaladinStone_Bottom2`: 1000220
+- `Imperial_Assasin_Suit`: 450069
+- `GuillcrossStone_Robe2`: 1000221
+- `Imperial_Fatal_Suit`: 450070
+- `AssacrossStone_Top2`: 1000222
+- `IDTest_Special`: 100000
+- `Imperial_Stalker_Suit`: 450071
+- `AssacrossStone_Middle2`: 1000223
+- `Imperial_Picky_Robe`: 450072
+- `AssacrossStone_Bottom2`: 1000224
+- `Imperial_Carrot_Robe`: 450073
+- `ILL_Piece_A`: 100003
+- `Imperial_Trip_Suit`: 450074
+- `ILL_Piece_B`: 100004
+- `Imperial_Firerain_Suit`: 450075
+- `Imperial_Crimson_Robe`: 450076
+- `Imperial_Frost_Robe`: 450077
+- `Imperial_Psychic_Robe`: 450078
+- `Imperial_Dust_Robe`: 450079
+- `Joy_Of_Victory`: 100009
+- `Imperial_Sun_Suit`: 450080
+- `PerfectSize_Mix`: 100010
+- `Imperial_Moon_Suit`: 450081
+- `MagicPiercing_Mix`: 100011
+- `Imperial_Ninja_Suit`: 450082
+- `Imperial_Kunai_Suit`: 450083
+- `Imperial_Swhoo_Robe`: 450084
+- `Imperial_Explosion_Robe`: 450085
+- `Grace_Breath_Armor`: 450086
+- `Grace_Knight_Armor`: 450087
+- `Grace_Spear_Armor`: 450088
+- `Grace_Genesis_Armor`: 450089
+- `Grace_Sharp_Suit`: 450090
+- `Grace_Aim_Suit`: 450091
+- `Grace_Severe_Suit`: 450092
+- `Victory_Wing_Ear_`: 400002
+- `Grace_Reverb_Suit`: 450093
+- `Ancient_Hero_Bravery`: 100023
+- `Grace_Adora_Robe`: 450094
+- `Grace_Duple_Robe`: 450095
+- `Ancient_Hero_Wisdom`: 100025
+- `Grace_Knuckle_Suit`: 450096
+- `Grace_Tiger_Suit`: 450097
+- `Grace_Tonado_Armor`: 450098
+- `Grace_Vulcan_Armor`: 450099
+- `Boost_Axe`: 520000
+- `Grace_Kart_Suit`: 450100
+- `Grace_Kart_Suit2`: 450101
+- `Grace_Rolling_Suit`: 450102
+- `Boost_Soul_Rod`: 550001
+- `Grace_Assasin_Suit`: 450103
+- `Boost_Foxtail`: 550002
+- `Boost_Whip`: 580000
+- `Grace_Fatal_Suit`: 450104
+- `Grace_Stalker_Suit`: 450105
+- `Barb_Wire_K`: 580002
+- `Boost_Katar`: 610000
+- `Grace_Picky_Robe`: 450106
+- `Grace_Carrot_Robe`: 450107
+- `Ein_1H_Foxtail`: 550006
+- `Boost_Staff`: 640000
+- `Grace_Trip_Suit`: 450108
+- `Freezing_Rod`: 550007
+- `Blade_Katar`: 610003
+- `Grace_Firerain_Suit`: 450109
+- `Grace_Crimson_Robe`: 450110
+- `C_BeachBall`: 400020
+- `Grace_Frost_Robe`: 450111
+- `Blue_Crystal_Staff`: 640004
+- `Grace_Psychic_Robe`: 450112
+- `Boost_Bow`: 700001
+- `Grace_Dust_Robe`: 450113
+- `Boost_Up_1`: 100043
+- `Grace_Sun_Suit`: 450114
+- `Scalet_Dragon_L_Bow`: 700003
+- `Boost_Up_2`: 100044
+- `Grace_Moon_Suit`: 450115
+- `Grace_Ninja_Suit`: 450116
+- `Grace_Kunai_Suit`: 450117
+- `Grace_Swhoo_Robe`: 450118
+- `Grace_Explosion_Robe`: 450119
+- `Noblesse_Snovice_Suit`: 450121
+- `Noblesse_Snovice_Robe`: 450122
+- `Imperial_Snovice_Suit`: 450123
+- `Piercing_Mix`: 100053
+- `Imperial_Snovice_Robe`: 450124
+- `Grace_Snovice_Suit`: 450125
+- `Grace_Snovice_Robe`: 450126
+- `Hasty_Mix`: 100058
+- `EnchantStone_Recipe_4m`: 100060
+- `RangerStone_Top2`: 1000008
+- `RangerStone_Middle2`: 1000009
+- `RangerStone_Bottom2`: 1000010
+- `RangerStone_Robe2`: 1000011
+- `MechanicStone_Top2`: 1000012
+- `MechanicStone_Middle2`: 1000013
+- `MechanicStone_Bottom2`: 1000014
+- `MechanicStone_Robe2`: 1000015
+- `HighpriestStone_Top2`: 1000016
+- `HighpriestStone_Middle2`: 1000017
+- `HighpriestStone_Bottom2`: 1000018
+- `ArchbishopStone_Robe2`: 1000019
+- `C_SharkHead`: 440000
+- `Atker_Greave`: 470000
+- `Ele_Shoes`: 470001
+- `Defn_Shoes`: 470002
+- `Ran_Boots`: 470003
+- `Boost_Sword`: 500001
+- `Boost_Spear`: 530000
+- `Light_Blade`: 500003
+- `Slate_Sword`: 500004
+- `Boost_Knuckle`: 560000
+- `Boost_Hall`: 590000
+- `Noblesse_Rifine_Ticket`: 100128
+- `Imperial_Rifine_Ticket`: 100129
+- `Meteor_Striker`: 590002
+- `Grace_Rifine_Ticket`: 100130
+- `Ray_Knuckle`: 560005
+- `Saint_Hall`: 590003
+- `Imperial_Convert1`: 100131
+- `Imperial_Convert2`: 100132
+- `Grace_Convert1`: 100133
+- `Grace_Convert2`: 100134
+- `Imperial_Convert3`: 100135
+- `Noblesse_Attack_Boots`: 470016
+- `Imperial_Convert4`: 100136
+- `Noblesse_Magic_Boots`: 470017
+- `Grace_Convert3`: 100137
+- `Imperial_Attack_Boots`: 470018
+- `Grace_Convert4`: 100138
+- `Imperial_Magic_Boots`: 470019
+- `Grace_Attack_Boots`: 470020
+- `Grace_Magic_Boots`: 470021
+- `Abyss_Ddbox2`: 100142
+- `Boost_Gatling`: 830000
+- `Abyss_Ddbox3`: 100144
+- `Abyss_Ddbox4`: 100145
> End of list
diff --git a/doc/sample/getiteminfo.txt b/doc/sample/getiteminfo.txt
index 9d5121635..316318cb6 100644
--- a/doc/sample/getiteminfo.txt
+++ b/doc/sample/getiteminfo.txt
@@ -37,5 +37,28 @@ prontera,156,179,6 script test_getiteminfo 4_F_KAFRA1,{
.@trade$ = callfunc("F_GetTradeRestriction", .@value);
mesf("Trade Restriction: %s", .@trade$);
+
+ mesf("Drop delay: %d", getiteminfo(.@value, ITEMINFO_DELAY));
+ mesf("Drop effect mode: %d", getiteminfo(.@value, ITEMINFO_DROPEFFECT_MODE));
+ mesf("Class base 1: %d", getiteminfo(.@value, ITEMINFO_CLASS_BASE_1));
+ mesf("Class base 2: %d", getiteminfo(.@value, ITEMINFO_CLASS_BASE_2));
+ mesf("Class base 3: %d", getiteminfo(.@value, ITEMINFO_CLASS_BASE_3));
+ mesf("Class Upper: %d", getiteminfo(.@value, ITEMINFO_CLASS_UPPER));
+ mesf("No refine flag: %d", getiteminfo(.@value, ITEMINFO_FLAG_NO_REFINE));
+ mesf("Delay consume flag: %d", getiteminfo(.@value, ITEMINFO_FLAG_DELAY_CONSUME));
+ mesf("Auto equip flag: %d", getiteminfo(.@value, ITEMINFO_FLAG_AUTOEQUIP));
+ mesf("Auto favorite flag: %d", getiteminfo(.@value, ITEMINFO_FLAG_AUTO_FAVORITE));
+ mesf("Buying store flag: %d", getiteminfo(.@value, ITEMINFO_FLAG_BUYINGSTORE));
+ mesf("Bind on equip flag: %d", getiteminfo(.@value, ITEMINFO_FLAG_BINDONEQUIP));
+ mesf("Keep after use flag: %d", getiteminfo(.@value, ITEMINFO_FLAG_KEEPAFTERUSE));
+ mesf("Force serial flag: %d", getiteminfo(.@value, ITEMINFO_FLAG_FORCE_SERIAL));
+ mesf("No random item options flag: %d", getiteminfo(.@value, ITEMINFO_FLAG_NO_OPTIONS));
+ mesf("Drop announce flag: %d", getiteminfo(.@value, ITEMINFO_FLAG_DROP_ANNOUNCE));
+ mesf("Shopw drop effect flag: %d", getiteminfo(.@value, ITEMINFO_FLAG_SHOWDROPEFFECT));
+ mesf("Stack amount: %d", getiteminfo(.@value, ITEMINFO_STACK_AMOUNT));
+ mesf("Stack amount flag: %d", getiteminfo(.@value, ITEMINFO_STACK_FLAG));
+ mesf("Item usage flag: %d", getiteminfo(.@value, ITEMINFO_ITEM_USAGE_FLAG));
+ mesf("Item usage override: %d", getiteminfo(.@value, ITEMINFO_ITEM_USAGE_OVERRIDE));
+ mesf("GM Level override: %d", getiteminfo(.@value, ITEMINFO_GM_LV_TRADE_OVERRIDE));
close;
}
diff --git a/doc/script_commands.txt b/doc/script_commands.txt
index a08d8a71c..fa35b3a7c 100644
--- a/doc/script_commands.txt
+++ b/doc/script_commands.txt
@@ -2208,11 +2208,11 @@ Multiple statements can be grouped with { }, curly braces, just like with
the 'if' statement.
Example 1:
- while (switch(select("Yes", "No") == 2))
+ while (select("Yes", "No") == 2)
mes("You picked no.");
Example 2: multiple statements
- while (switch(select("Yes", "No") == 2 )) {
+ while (select("Yes", "No") == 2) {
mes("Why did you pick no?");
mes("You should pick yes instead!");
}
@@ -2999,18 +2999,20 @@ of equipment slots see getequipid().
---------------------------------------
-*getequiprefinerycnt(<equipment slot>)
+*getequiprefinerycnt(<equipment slot>{, <equipment slot>{, <equipment slot>}})
-Returns the current number of pluses for the item in the specified
-equipment slot. For a list of equipment slots see 'getequipid'.
+Returns the total of refine of item equipped in the equipment slots.
+For a list of equipment slots, see 'getequipid'.
-Can be used to check if you have reached a maximum refine value, default
-for this is +10:
-
- if (getequiprefinerycnt(EQI_HEAD_TOP) < 10)
- mes("I will now upgrade your "+getequipname(EQI_HEAD_TOP));
- else
- mes("Sorry, it's not possible to refine hats better than +10");
+For example:
+ if (getequiprefinerycnt(EQI_HEAD_TOP) > 10) {
+ mes("You equipped a headgear (top) with above 10 refine.");
+ }
+
+For example:
+ if (getequiprefinerycnt(EQI_ARMOR, EQI_SHOES) > 20) {
+ mes("Total refine of Armor and Shoes exceed 20.");
+ }
---------------------------------------
@@ -3207,6 +3209,30 @@ runs of getcartinventorylist().
---------------------------------------
+*setfavoriteitemidx(<idx>, <flag>)
+
+This function will set an item in inventory as favorite or not.
+If its favorite item, it will be moved to favorite tab, else move out from favorite tab.
+Note: Cant change favorite flag of an equipped item.
+
+Valid Parameters:
+ <idx> - inventory index, refer *getinventorylist()
+ <flag> - true/false (true = favorite item, false = otherwise)
+
+---------------------------------------
+
+*autofavoriteitem(<item_id>, <flag>)
+
+This function will auto set an item as favorite when <item_id> is obtained.
+If its favorite item, it will be auto moved to favorite tab, else move out from favorite tab.
+This setting affect not only attached player, but also everyone player globally.
+
+Valid Parameters:
+ <item_id> - item ID
+ <flag> - true/false (true = favorite item, false = otherwise)
+
+---------------------------------------
+
*cardscnt()
This function will return the number of cards inserted into the weapon
@@ -3252,26 +3278,49 @@ It will return -1 if there is no such item.
Valid types are:
- ITEMINFO_BUYPRICE - Buy Price
- ITEMINFO_SELLPRICE - Sell Price
- ITEMINFO_TYPE - Item Type
- ITEMINFO_MAXCHANCE - Max drop chance of this item e.g. 1 = 0.01% , etc..
- if = 0, then monsters don't drop it at all (rare or a quest item)
- if = 10000, then this item is sold in NPC shops only
- ITEMINFO_SEX - Sex
- ITEMINFO_LOC - Equip location
- ITEMINFO_WEIGHT - Weight (note: 1/10 of unit)
- ITEMINFO_ATK - Attack
- ITEMINFO_DEF - Defense
- ITEMINFO_RANGE - Range
- ITEMINFO_SLOTS - Slots
- ITEMINFO_SUBTYPE - Item subtype
- ITEMINFO_ELV - Equip min. level
- ITEMINFO_WLV - Weapon level
- ITEMINFO_VIEWID - View ID ("Sprite" field in the Item DB)
- ITEMINFO_MATK - MATK (only relevant if RENEWAL is set)
- ITEMINFO_VIEWSPRITE - View Sprite ("ViewSprite" field in the Item DB)
- ITEMINFO_TRADE - Trade Restriction (see "doc/constant.md": item trade restriction)
+ ITEMINFO_BUYPRICE - Buy Price
+ ITEMINFO_SELLPRICE - Sell Price
+ ITEMINFO_TYPE - Item Type
+ ITEMINFO_MAXCHANCE - Max drop chance of this item e.g. 1 = 0.01% , etc..
+ if = 0, then monsters don't drop it at all (rare or a quest item)
+ if = 10000, then this item is sold in NPC shops only
+ ITEMINFO_SEX - Sex
+ ITEMINFO_LOC - Equip location
+ ITEMINFO_WEIGHT - Weight (note: 1/10 of unit)
+ ITEMINFO_ATK - Attack
+ ITEMINFO_DEF - Defense
+ ITEMINFO_RANGE - Range
+ ITEMINFO_SLOTS - Slots
+ ITEMINFO_SUBTYPE - Item subtype
+ ITEMINFO_ELV - Equip min. level
+ ITEMINFO_ELV_MAX - Equip max. level
+ ITEMINFO_WLV - Weapon level
+ ITEMINFO_VIEWID - View ID ("Sprite" field in the Item DB)
+ ITEMINFO_MATK - MATK (only relevant if RENEWAL is set)
+ ITEMINFO_VIEWSPRITE - View Sprite ("ViewSprite" field in the Item DB)
+ ITEMINFO_TRADE - Trade Restriction (see "doc/constant.md": item trade restriction)
+ ITEMINFO_DELAY - Delay
+ ITEMINFO_DROPEFFECT_MODE - Drop effect mode
+ ITEMINFO_CLASS_BASE_1 - Class base 1
+ ITEMINFO_CLASS_BASE_2 - Class base 2
+ ITEMINFO_CLASS_BASE_3 - Class base 3
+ ITEMINFO_CLASS_UPPER - Class Upper
+ ITEMINFO_FLAG_NO_REFINE - No refine flag
+ ITEMINFO_FLAG_DELAY_CONSUME - Delay consume flag
+ ITEMINFO_FLAG_AUTOEQUIP - Auto equip flag
+ ITEMINFO_FLAG_AUTO_FAVORITE - Auto favorite flag
+ ITEMINFO_FLAG_BUYINGSTORE - Buying store flag
+ ITEMINFO_FLAG_BINDONEQUIP - Bind on equip flag
+ ITEMINFO_FLAG_KEEPAFTERUSE - Keep after use flag
+ ITEMINFO_FLAG_FORCE_SERIAL - Force serial flag
+ ITEMINFO_FLAG_NO_OPTIONS - No random item options flag
+ ITEMINFO_FLAG_DROP_ANNOUNCE - Drop announce flag
+ ITEMINFO_FLAG_SHOWDROPEFFECT - Shopw drop effect flag
+ ITEMINFO_STACK_AMOUNT - Stack amount
+ ITEMINFO_STACK_FLAG - Stack amount flag (1: inventory, 2:cart, 4:storage: 8:guildstorage)
+ ITEMINFO_ITEM_USAGE_FLAG - Item usage flag
+ ITEMINFO_ITEM_USAGE_OVERRIDE - Item usage override
+ ITEMINFO_GM_LV_TRADE_OVERRIDE - Min. GM level override trade restriction
Check sample in doc/sample/getiteminfo.txt
@@ -3345,6 +3394,24 @@ This will set a Hat Effect onto the player. The state field allows you to
enable (true) or disable (false) the effect on the player.
---------------------------------------
+
+*identify(<Item ID>)
+
+This function identifies the first <Item ID> item in attached player's inventory.
+
+Returns -2 if an error happens, -1 if no unidentified <Item ID> was found.
+Otherwise, returns the idx of the identified item.
+
+---------------------------------------
+
+*identifyidx(<Inventory Index>)
+
+This will identify item at attached player's <Inventory Index> inventory index.
+
+Returns true if the item was identified, false otherwise.
+Note: If the item was already identified, it returns false.
+
+---------------------------------------
//=====================================
2.1 - End of Item-Related Commands
//=====================================
@@ -3927,29 +3994,30 @@ It will return -1 if there is no such monster (or the type value is
invalid), or "null" if you requested the monster's name.
Valid types are listed in doc/constants.md:
- MOB_NAME 0
- MOB_LV 1
- MOB_MAXHP 2
- MOB_BASEEXP 3
- MOB_JOBEXP 4
- MOB_ATK1 5
- MOB_ATK2 6
- MOB_DEF 7
- MOB_MDEF 8
- MOB_STR 9
- MOB_AGI 10
- MOB_VIT 11
- MOB_INT 12
- MOB_DEX 13
- MOB_LUK 14
- MOB_RANGE 15
- MOB_RANGE2 16
- MOB_RANGE3 17
- MOB_SIZE 18
- MOB_RACE 19
- MOB_ELEMENT 20
- MOB_MODE 21
- MOB_MVPEXP 22
+ MOB_NAME 0
+ MOB_LV 1
+ MOB_MAXHP 2
+ MOB_BASEEXP 3
+ MOB_JOBEXP 4
+ MOB_ATK1 5
+ MOB_ATK2 6
+ MOB_DEF 7
+ MOB_MDEF 8
+ MOB_STR 9
+ MOB_AGI 10
+ MOB_VIT 11
+ MOB_INT 12
+ MOB_DEX 13
+ MOB_LUK 14
+ MOB_RANGE 15
+ MOB_RANGE2 16
+ MOB_RANGE3 17
+ MOB_SIZE 18
+ MOB_RACE 19
+ MOB_ELEMENT 20
+ MOB_MODE 21
+ MOB_MVPEXP 22
+ MOB_DMG_TAKEN_RATE 23
Check sample in doc/sample/getmonsterinfo.txt
@@ -9104,6 +9172,12 @@ currently used font is used, default interface font is used again.
---------------------------------------
+*getfont()
+
+This command return the player's current font.
+if no player is attached it would always return a 0, which is also the default font.
+
+---------------------------------------'
*showdigit(<value>{, <type>})
Displays given numeric 'value' in large digital clock font on top of the
@@ -10198,60 +10272,61 @@ Sets or alters the data in real-time for game objects of the following types -
NPCs, Pets, Monsters, Homunuculus', Mercenaries, Elementals.
Applicable Data Types (available as constants) -
- Data Types Description (parameter type)
- UDT_SIZE: Unit Size
- UDT_LEVEL: Level
- UDT_HP: Current HP
- UDT_MAXHP: Max HP
- UDT_SP: SP
- UDT_MAXSP: MAX SP
- UDT_MASTERAID: Master Account ID (for Summons)
- UDT_MASTERCID: Master Char ID (for Summons)
- UDT_SPEED: Unit Speed.
- UDT_MODE: Mode (Mobs only)
- UDT_AI: Unit AI Type (see doc/constants.md for Unit AI Types)
- UDT_SCOPTION: Status Options. (see doc/constants.md for Unit Option Types)
- UDT_SEX: Gender of the unit. (see doc/constants.md for Genders)
- UDT_CLASS: Class of the unit. (Monster ID)
- UDT_HAIRSTYLE: Hair Style ID.
- UDT_HAIRCOLOR: Hair Color ID.
- UDT_HEADBOTTOM: Headgear Bottom Sprite ID.
- UDT_HEADMIDDLE: Headgear Middle Sprite ID.
- UDT_HEADTOP: Headgear Top Sprite ID.
- UDT_CLOTHCOLOR: Cloth Color ID.
- UDT_SHIELD: Shield Sprite ID.
- UDT_WEAPON: Weapon Sprite ID.
- UDT_LOOKDIR: Face direction.
- UDT_CANMOVETICK: Stop a unit from move for n seconds.
- UDT_STR: Unit STR.
- UDT_AGI: Unit AGI.
- UDT_VIT: Unit VIT.
- UDT_INT: Unit INT.
- UDT_DEX: Unit DEX.
- UDT_LUK: Unit LUK.
- UDT_ATKRANGE: Attack range of a unit.
- UDT_ATKMIN: Min Atk of a unit.
- UDT_ATKMAX: Max Atk of a unit.
- UDT_MATKMIN: Min MATK of a unit.
- UDT_MATKMAX: Max MATK of a unit.
- UDT_DEF: DEF.
- UDT_MDEF: MDEF.
- UDT_HIT: HIT.
- UDT_FLEE: FLEE.
- UDT_PDODGE: Perfect Dodge.
- UDT_CRIT: Critical Rate.
- UDT_RACE: Race. (Eg. constants RC_DemiHuman or Integer 7).
- UDT_ELETYPE: Element. (Eg. constants Ele_Neutral or Integer 0).
- UDT_ELELEVEL: Element Level.
- UDT_AMOTION: AMotion Rate.
- UDT_ADELAY: ADelay Rate.
- UDT_DMOTION: DMotion Rate.
- UDT_HUNGER: Hunger Rate - for summons.
- UDT_INTIMACY: Intimacy Rate - for summons.
- UDT_LIFETIME: LifeTime - for summons.
- UDT_MERC_KILLCOUNT: Kill count for mercenaries
- UDT_STATADD: Status Points - for NPCs.
- UDT_GROUP: group id
+ Data Types Description (parameter type)
+ UDT_SIZE: Unit Size
+ UDT_LEVEL: Level
+ UDT_HP: Current HP
+ UDT_MAXHP: Max HP
+ UDT_SP: SP
+ UDT_MAXSP: MAX SP
+ UDT_MASTERAID: Master Account ID (for Summons)
+ UDT_MASTERCID: Master Char ID (for Summons)
+ UDT_SPEED: Unit Speed.
+ UDT_MODE: Mode (Mobs only)
+ UDT_AI: Unit AI Type (see doc/constants.md for Unit AI Types)
+ UDT_SCOPTION: Status Options. (see doc/constants.md for Unit Option Types)
+ UDT_SEX: Gender of the unit. (see doc/constants.md for Genders)
+ UDT_CLASS: Class of the unit. (Monster ID)
+ UDT_HAIRSTYLE: Hair Style ID.
+ UDT_HAIRCOLOR: Hair Color ID.
+ UDT_HEADBOTTOM: Headgear Bottom Sprite ID.
+ UDT_HEADMIDDLE: Headgear Middle Sprite ID.
+ UDT_HEADTOP: Headgear Top Sprite ID.
+ UDT_CLOTHCOLOR: Cloth Color ID.
+ UDT_SHIELD: Shield Sprite ID.
+ UDT_WEAPON: Weapon Sprite ID.
+ UDT_LOOKDIR: Face direction.
+ UDT_CANMOVETICK: Stop a unit from move for n seconds.
+ UDT_STR: Unit STR.
+ UDT_AGI: Unit AGI.
+ UDT_VIT: Unit VIT.
+ UDT_INT: Unit INT.
+ UDT_DEX: Unit DEX.
+ UDT_LUK: Unit LUK.
+ UDT_ATKRANGE: Attack range of a unit.
+ UDT_ATKMIN: Min Atk of a unit.
+ UDT_ATKMAX: Max Atk of a unit.
+ UDT_MATKMIN: Min MATK of a unit.
+ UDT_MATKMAX: Max MATK of a unit.
+ UDT_DEF: DEF.
+ UDT_MDEF: MDEF.
+ UDT_HIT: HIT.
+ UDT_FLEE: FLEE.
+ UDT_PDODGE: Perfect Dodge.
+ UDT_CRIT: Critical Rate.
+ UDT_RACE: Race. (Eg. constants RC_DemiHuman or Integer 7).
+ UDT_ELETYPE: Element. (Eg. constants Ele_Neutral or Integer 0).
+ UDT_ELELEVEL: Element Level.
+ UDT_AMOTION: AMotion Rate.
+ UDT_ADELAY: ADelay Rate.
+ UDT_DMOTION: DMotion Rate.
+ UDT_HUNGER: Hunger Rate - for summons.
+ UDT_INTIMACY: Intimacy Rate - for summons.
+ UDT_LIFETIME: LifeTime - for summons.
+ UDT_MERC_KILLCOUNT: Kill count for mercenaries
+ UDT_STATADD: Status Points - for NPCs.
+ UDT_GROUP: group id
+ UDT_DAMAGE_TAKEN_RATE: damage taken rate of a unit.
returns 0 if value could not be set, 1 if successful.
@@ -10262,59 +10337,60 @@ returns 0 if value could not be set, 1 if successful.
Retrieves real-time data of a game object.
Applicable Data types (available as constants) -
- Data Types Description (return type)
- UDT_SIZE: Unit Size
- UDT_LEVEL: Level
- UDT_HP: Current HP
- UDT_MAXHP: Max HP
- UDT_SP: SP
- UDT_MAXSP: MAX SP
- UDT_MASTERAID: Master Account ID (for Summons)
- UDT_MASTERCID: Master Char ID (for Summons)
- UDT_SPEED: Unit Speed.
- UDT_MODE: Mode (Mobs only)
- UDT_AI: Unit AI Type (see doc/constants.md for Unit AI Types)
- UDT_SCOPTION: Status Options. (see doc/constants.md for Unit Option Types)
- UDT_SEX: Gender of the unit. (see doc/constants.md for Genders)
- UDT_CLASS: Class of the unit. (Monster ID)
- UDT_HAIRSTYLE: Hair Style ID.
- UDT_HAIRCOLOR: Hair Color ID.
- UDT_HEADBOTTOM: Headgear Bottom Sprite ID.
- UDT_HEADMIDDLE: Headgear Middle Sprite ID.
- UDT_HEADTOP: Headgear Top Sprite ID.
- UDT_CLOTHCOLOR: Cloth Color ID.
- UDT_SHIELD: Shield Sprite ID.
- UDT_WEAPON: Weapon Sprite ID.
- UDT_LOOKDIR: Face direction.
- UDT_CANMOVETICK: Stop a unit from move for n seconds.
- UDT_STR: Unit STR.
- UDT_AGI: Unit AGI.
- UDT_VIT: Unit VIT.
- UDT_INT: Unit INT.
- UDT_DEX: Unit DEX.
- UDT_LUK: Unit LUK.
- UDT_ATKRANGE: Attack range of a unit.
- UDT_ATKMIN: Min Atk of a unit.
- UDT_ATKMAX: Max Atk of a unit.
- UDT_MATKMIN: Min MATK of a unit.
- UDT_MATKMAX: Max MATK of a unit.
- UDT_DEF: DEF.
- UDT_MDEF: MDEF.
- UDT_HIT: HIT.
- UDT_FLEE: FLEE.
- UDT_PDODGE: Perfect Dodge.
- UDT_CRIT: Critical Rate.
- UDT_RACE: Race. (Eg. constants RC_DemiHuman or Integer 7).
- UDT_ELETYPE: Element. (Eg. constants Ele_Neutral or Integer 0).
- UDT_ELELEVEL: Element Level.
- UDT_AMOTION: AMotion Rate.
- UDT_ADELAY: ADelay Rate.
- UDT_DMOTION: DMotion Rate.
- UDT_HUNGER: Hunger Rate - for summons.
- UDT_INTIMACY: Intimacy Rate - for summons.
- UDT_LIFETIME: LifeTime - for summons.
- UDT_MERC_KILLCOUNT: Kill count for mercenaries.
- UDT_GROUP: group id
+ Data Types Description (return type)
+ UDT_SIZE: Unit Size
+ UDT_LEVEL: Level
+ UDT_HP: Current HP
+ UDT_MAXHP: Max HP
+ UDT_SP: SP
+ UDT_MAXSP: MAX SP
+ UDT_MASTERAID: Master Account ID (for Summons)
+ UDT_MASTERCID: Master Char ID (for Summons)
+ UDT_SPEED: Unit Speed.
+ UDT_MODE: Mode (Mobs only)
+ UDT_AI: Unit AI Type (see doc/constants.md for Unit AI Types)
+ UDT_SCOPTION: Status Options. (see doc/constants.md for Unit Option Types)
+ UDT_SEX: Gender of the unit. (see doc/constants.md for Genders)
+ UDT_CLASS: Class of the unit. (Monster ID)
+ UDT_HAIRSTYLE: Hair Style ID.
+ UDT_HAIRCOLOR: Hair Color ID.
+ UDT_HEADBOTTOM: Headgear Bottom Sprite ID.
+ UDT_HEADMIDDLE: Headgear Middle Sprite ID.
+ UDT_HEADTOP: Headgear Top Sprite ID.
+ UDT_CLOTHCOLOR: Cloth Color ID.
+ UDT_SHIELD: Shield Sprite ID.
+ UDT_WEAPON: Weapon Sprite ID.
+ UDT_LOOKDIR: Face direction.
+ UDT_CANMOVETICK: Stop a unit from move for n seconds.
+ UDT_STR: Unit STR.
+ UDT_AGI: Unit AGI.
+ UDT_VIT: Unit VIT.
+ UDT_INT: Unit INT.
+ UDT_DEX: Unit DEX.
+ UDT_LUK: Unit LUK.
+ UDT_ATKRANGE: Attack range of a unit.
+ UDT_ATKMIN: Min Atk of a unit.
+ UDT_ATKMAX: Max Atk of a unit.
+ UDT_MATKMIN: Min MATK of a unit.
+ UDT_MATKMAX: Max MATK of a unit.
+ UDT_DEF: DEF.
+ UDT_MDEF: MDEF.
+ UDT_HIT: HIT.
+ UDT_FLEE: FLEE.
+ UDT_PDODGE: Perfect Dodge.
+ UDT_CRIT: Critical Rate.
+ UDT_RACE: Race. (Eg. constants RC_DemiHuman or Integer 7).
+ UDT_ELETYPE: Element. (Eg. constants Ele_Neutral or Integer 0).
+ UDT_ELELEVEL: Element Level.
+ UDT_AMOTION: AMotion Rate.
+ UDT_ADELAY: ADelay Rate.
+ UDT_DMOTION: DMotion Rate.
+ UDT_HUNGER: Hunger Rate - for summons.
+ UDT_INTIMACY: Intimacy Rate - for summons.
+ UDT_LIFETIME: LifeTime - for summons.
+ UDT_MERC_KILLCOUNT: Kill count for mercenaries.
+ UDT_GROUP: group id
+ UDT_DAMAGE_TAKEN_RATE: damage taken rate of a unit.
returns -1 if value could not be retrieved.
@@ -10546,3 +10622,9 @@ Opens refinery user interface for the player
returns true on success and false on failure
---------------------------------------
+*openlapineddukddakboxui(<item_id>)
+
+Opens lapine ddukddak user interface for the player
+returns true on success and false on failure
+
+---------------------------------------
diff --git a/npc/airports/airships.txt b/npc/airports/airships.txt
index 7bac19e21..75708d167 100644
--- a/npc/airports/airships.txt
+++ b/npc/airports/airships.txt
@@ -491,9 +491,8 @@ airplane,50,66,5 script Apple Merchant#airplane 4_M_04,{
" '0' to cancel your order.");
next;
while (1) {
- input .@input;
- .@pay = .@input * 15;
- if (.@input == 0) {
+ input(.@input);
+ if (.@input <= 0) {
mes("[Fruitz]");
mes("Thanks for stopping\r"
"by my shop. Farewell!");
@@ -502,7 +501,7 @@ airplane,50,66,5 script Apple Merchant#airplane 4_M_04,{
"Apple to snack on~");
close;
}
- else if (.@input < 1 || .@input > 500) {
+ if (.@input > 500) {
mes("[Fruitz]");
mes("You've entered a number\r"
"higher than the maximum\r"
@@ -510,25 +509,25 @@ airplane,50,66,5 script Apple Merchant#airplane 4_M_04,{
"the number of Apples you\r"
"wish to purchase again.");
next;
+ continue;
}
- else {
+ .@pay = .@input * 15;
+ mes("[Fruitz]");
+ mesf("A total of ^FF0000%d^000000 Apples\r"
+ "will cost you ^FF0000%d Zeny^000000.",
+ .@input, .@pay);
+ mes("Would you like to continue?");
+ next;
+ if (select("Yes", "No") == 2) {
mes("[Fruitz]");
- mesf("A total of ^FF0000%d^000000 Apples\r"
- "will cost you ^FF0000%d Zeny^000000.",
- .@input, .@pay);
- mes("Would you like to continue?");
- next;
- if (select("Yes", "No") == 2) {
- mes("[Fruitz]");
- mes("Thanks for stopping\r"
- "by my shop. Farewell!");
- mes("Come by anytime when\r"
- "you feel like having an\r"
- "Apple to snack on~");
- close;
- }
- break;
+ mes("Thanks for stopping\r"
+ "by my shop. Farewell!");
+ mes("Come by anytime when\r"
+ "you feel like having an\r"
+ "Apple to snack on~");
+ close;
}
+ break;
}
if (Zeny < .@pay) {
mes("[Fruitz]");
@@ -853,44 +852,43 @@ airplane_01,50,66,5 script Apple Merchant#air01 4_M_04,{
"'0' to cancel your order.");
next;
while (1) {
- input .@input;
- .@pay = .@input * 15;
- if (.@input == 0) {
+ input(.@input);
+ if (.@input <= 0) {
mes("[Meltz]");
mes("Thanks for stopping\r"
"by my shop. Farewell!");
mes("Come by anytime when\r"
"you feel like having an\r"
"Apple to snack on~");
- close;
+ close();
}
- else if (.@input < 1 || .@input > 500) {
+ if (.@input > 500) {
mes("[Meltz]");
mes("You've entered a number\r"
"higher than the maximum\r"
"value of 500. Please enter\r"
"the number of Apples you\r"
"wish to purchase again.");
- next;
+ next();
+ continue;
}
- else {
+ .@pay = .@input * 15;
+ mes("[Meltz]");
+ mesf("A total of ^FF0000%d^000000 Apples\r"
+ "will cost you ^FF0000%d Zeny^000000.",
+ .@input, .@pay);
+ mes("Would you like to continue?");
+ next;
+ if (select("Yes", "No") == 2) {
mes("[Meltz]");
- mesf("A total of ^FF0000%d^000000 Apples\r"
- "will cost you ^FF0000%d Zeny^000000.",
- .@input, .@pay);
- mes("Would you like to continue?");
- next;
- if (select("Yes", "No") == 2) {
- mes("[Meltz]");
- mes("Thanks for stopping\r"
- "by my shop. Farewell!");
- mes("Come by anytime when\r"
- "you feel like having an\r"
- "Apple to snack on~");
- close;
- }
- break;
+ mes("Thanks for stopping\r"
+ "by my shop. Farewell!");
+ mes("Come by anytime when\r"
+ "you feel like having an\r"
+ "Apple to snack on~");
+ close;
}
+ break;
}
if (Zeny < .@pay) {
mes("[Meltz]");
@@ -1150,7 +1148,7 @@ airplane_01,32,61,4 script Nils#ein 1_M_03,1,1,{
mes(.@line1_3$[.@wordtest]);
.@start_time = gettime(GETTIME_HOUR)*60*60 + gettime(GETTIME_MINUTE)*60 + gettime(GETTIME_SECOND);
next;
- input .@save1$;
+ input(.@save1$);
.@end_time = gettime(GETTIME_HOUR)*60*60 + gettime(GETTIME_MINUTE)*60 + gettime(GETTIME_SECOND);
.@total_time = .@end_time - .@start_time;
mes("[Nils]");
@@ -1158,7 +1156,7 @@ airplane_01,32,61,4 script Nils#ein 1_M_03,1,1,{
mes(.@line2_2$[.@wordtest]);
.@start_time = gettime(GETTIME_HOUR)*60*60 + gettime(GETTIME_MINUTE)*60 + gettime(GETTIME_SECOND);
next;
- input .@save2$;
+ input(.@save2$);
.@end_time = gettime(GETTIME_HOUR)*60*60 + gettime(GETTIME_MINUTE)*60 + gettime(GETTIME_SECOND);
.@total_time = .@total_time + (.@start_time - .@end_time);
.@tasoo = (.@letters[.@wordtest] / .@total_time) * 6;
@@ -1329,15 +1327,15 @@ function script applegamble {
"to cancel, please enter '0'.");
next;
while(1) {
- input .@amount;
- if (.@amount == 0) {
+ input(.@amount);
+ if (.@amount <= 0) {
mes(.@n$);
mes("Changed your mind?");
mes("I understand. Well then,\r"
"I hope we can play sometime.");
close;
}
- else if (.@amount < 1 || .@amount > 50) {
+ if (.@amount > 50) {
mes(.@n$);
mes("You can't bet more than\r"
"50 Apples. Remember, we\r"
diff --git a/npc/battleground/kvm/kvm_item_pay.txt b/npc/battleground/kvm/kvm_item_pay.txt
index f9dac0766..e6ef623b5 100644
--- a/npc/battleground/kvm/kvm_item_pay.txt
+++ b/npc/battleground/kvm/kvm_item_pay.txt
@@ -37,15 +37,15 @@
//=========================================================================
bat_room,151,144,3 script KVM Logistic Officer#a 4_M_JOB_KNIGHT2,{
- if (countitem(War_Badge)) {
- .@pointstoadd = countitem(War_Badge);
- delitem 7773,.@pointstoadd;
+ if (countitem(KVM_Badge)) {
+ .@pointstoadd = countitem(KVM_Badge);
+ delitem KVM_Badge,.@pointstoadd;
kvm_point += .@pointstoadd;
mes("[Logistics]");
- mesf("Are those %ss I see?", getitemname(7773));
+ mesf("Are those %ss I see?", getitemname(KVM_Badge));
mes("We no longer accept that currency,\r"
"but I can exchange those for you.");
- mesf("So you have %d %ss?", .@pointstoadd, getitemname(7773));
+ mesf("So you have %d %ss?", .@pointstoadd, getitemname(KVM_Badge));
mesf("Alright, all set, you now have ^580080%d^000000 KVM Points.", kvm_point);
next;
}
diff --git a/npc/cities/alberta.txt b/npc/cities/alberta.txt
index ed4be5438..abac7b76a 100644
--- a/npc/cities/alberta.txt
+++ b/npc/cities/alberta.txt
@@ -347,7 +347,7 @@ alberta,190,173,4 script Phelix 4_M_03,{
mes "[Phelix]";
mes "I'm not giving you more then 100 at a time so don't bother, OK? If you don't want any, just say '0'.";
mes "Right now, the most you can get is " + .@max + " but remember, 100 at most, you want to break my back?.";
- input .@amount;
+ input(.@amount);
next;
mes "[Phelix]";
if (.@amount <= 0) {
@@ -396,10 +396,10 @@ alberta,190,173,4 script Phelix 4_M_03,{
case 2:
mes "[Phelix]";
mes "Right I'm not giving you more then 100 at a time so don't bother, okay? If you don't want any, just say '0'.";
- input .@amount;
+ input(.@amount);
next;
mes "[Phelix]";
- if (.@amount == 0) {
+ if (.@amount <= 0) {
mes "Alright then, see you next time.";
close;
}
diff --git a/npc/cities/aldebaran.txt b/npc/cities/aldebaran.txt
index 57d4205df..bd74a8971 100644
--- a/npc/cities/aldebaran.txt
+++ b/npc/cities/aldebaran.txt
@@ -1200,8 +1200,9 @@ function script F_Lottery {
mes "[Kafra]";
mes "How many times do you want the Lottery Machine to spin? You can choose up to 5 times.";
next;
- input @input;
- if(@input < 1 || @input > 5) @input = rand(1,5); //Lupus's fix
+ input(@input);
+ if (@input < 1 || @input > 5)
+ @input = rand(1,5); // Lupus's fix
callsub sF_Spin;
mes "[Kafra]";
mes "Ok~ Let me check the results~ guess what it is?";
@@ -1274,7 +1275,8 @@ sF_Spin:
next;
@temp = rand(10);
--@input;
- if(@input <= 0) return;
+ if (@input <= 0)
+ return;
}
}
diff --git a/npc/cities/geffen.txt b/npc/cities/geffen.txt
index 7f299dfa2..2bc972c70 100644
--- a/npc/cities/geffen.txt
+++ b/npc/cities/geffen.txt
@@ -274,8 +274,8 @@ OnTouch:
mes "them at a time.";
next;
while(1) {
- input .@input;
- if (.@input == 0) {
+ input(.@input);
+ if (.@input <= 0) {
mes "[Suspicious Guy]";
if (Sex == SEX_MALE)
mes "Ah duuuuuude~ You're breakin' my heart! I mean, at these prices, I'm practically performing charity!";
@@ -283,14 +283,14 @@ OnTouch:
mes "W-waaaait! You didn't let me tell you the part about how Red Potions help you lose and gain weight in all the right places! Waaaaait!";
close;
}
- else if (.@input > 100) {
+ if (.@input > 100) {
mes "[Suspicious Guy]";
mes "Whoa...";
mes "I can't let you buy that many. I mean, it's not like, you know, there's a trace impurity in these Potions or anything like that...";
next;
+ continue;
}
- else
- break;
+ break;
}
.@Red_potion_hap = .@input * 500;
if (Zeny < .@Red_potion_hap) {
@@ -344,8 +344,8 @@ OnTouch:
mes "There's no way you can pass this up! Now, how many do you want?";
next;
while(1) {
- input .@input;
- if (.@input == 0) {
+ input(.@input);
+ if (.@input <= 0) {
mes "[Suspicious Guy]";
mes "Man, how many chances of a lifetime have you passed up? Man, I hope you win the lottery...";
mes "You'd probably";
@@ -353,14 +353,14 @@ OnTouch:
close;
}
- else if (.@input > 100) {
+ if (.@input > 100) {
mes "[Suspicious Guy]";
mes "Whoa!";
mes "I can't sell that many Daggers! That'll attract the Prontera Chiv--I mean, um, I was gonna donate some Daggers to... Hungry children?";
next;
+ continue;
}
- else
- break;
+ break;
}
.@Main_gauche_hap = .@input * 9400;
if (Zeny < .@Main_gauche_hap) {
@@ -398,21 +398,21 @@ OnTouch:
mes "Clearly, this is the deal of the century. So how many do you want?";
next;
while(1) {
- input .@input;
- if (.@input == 0) {
+ input(.@input);
+ if (.@input <= 0) {
mes "[Suspicious Guy]";
mes "Awww...";
mes "It wasn't because of the whole drawstrings thing, was it?";
close;
}
- else if (.@input > 100) {
+ if (.@input > 100) {
mes "[Suspicious Guy]";
mes "Whoa~!";
mes "I can't sell you that many! What are you trying to do, take advantage of me?";
next;
+ continue;
}
- else
- break;
+ break;
}
.@Hood__hap = .@input * 930;
if (Zeny < .@Hood__hap) {
diff --git a/npc/cities/jawaii.txt b/npc/cities/jawaii.txt
index 71ec8264f..7e117b45c 100644
--- a/npc/cities/jawaii.txt
+++ b/npc/cities/jawaii.txt
@@ -880,7 +880,7 @@ jawaii_in,28,124,0 script Bartender#jaw 1_ETC_01,{
mes "Bartender,";
mes "I'm so depressed";
mes "because of...";
- input .@inputstr$;
+ input(.@inputstr$);
mes .@inputstr$+"...";
next;
mes "[Bartender]";
diff --git a/npc/cities/lighthalzen.txt b/npc/cities/lighthalzen.txt
index 3cbe900c3..88f117747 100644
--- a/npc/cities/lighthalzen.txt
+++ b/npc/cities/lighthalzen.txt
@@ -561,16 +561,8 @@ lighthalzen,182,102,3 script Lucius#zen5 4_M_LGTGRAND,{
mes "starving children. If you wish";
mes "to cancel, please enter ''0.''";
next;
- input .@input;
- if (.@input > 30000 || .@input < 0) {
- mes "[Lucius]";
- mes "Please enter a value";
- mes "from 1 to 30,000 in";
- mes "order to make a donation";
- mes "to the needy, youngster.";
- close;
- }
- else if (.@input == 0) {
+ input(.@input);
+ if (.@input == 0) {
mes "[Lucius]";
mes "How disappointing,";
mes "but I'm sure you have";
@@ -580,6 +572,14 @@ lighthalzen,182,102,3 script Lucius#zen5 4_M_LGTGRAND,{
mes "to come back at any time.";
close;
}
+ if (.@input > 30000 || .@input < 1) {
+ mes "[Lucius]";
+ mes "Please enter a value";
+ mes "from 1 to 30,000 in";
+ mes "order to make a donation";
+ mes "to the needy, youngster.";
+ close;
+ }
mes "[Lucius]";
mes "Thank you so much";
mes "for your " + .@input + " zeny donation.";
diff --git a/npc/custom/battleground/bg_kvm01.txt b/npc/custom/battleground/bg_kvm01.txt
index a66e202e3..bb3ba3e06 100644
--- a/npc/custom/battleground/bg_kvm01.txt
+++ b/npc/custom/battleground/bg_kvm01.txt
@@ -329,7 +329,7 @@ bat_c01,51,130,5 script Guillaume Vintenar::VintenarKvM01a 4_M_KY_HEAD,{
}
setquest 6025;
- getitem 7773, .@reward;
+ getitem KVM_Badge, .@reward;
bg_leave;
warp "bat_room",155,150;
end;
@@ -365,7 +365,7 @@ bat_c01,148,53,1 script Croix Vintenar::VintenarKvM01b 4_M_CRU_HEAD,{
}
setquest 6025;
- getitem 7773, .@reward;
+ getitem KVM_Badge, .@reward;
bg_leave;
warp "bat_room",155,150;
end;
diff --git a/npc/custom/battleground/bg_kvm02.txt b/npc/custom/battleground/bg_kvm02.txt
index f1637069a..a6cadb3af 100644
--- a/npc/custom/battleground/bg_kvm02.txt
+++ b/npc/custom/battleground/bg_kvm02.txt
@@ -329,7 +329,7 @@ bat_c02,51,130,5 script Guillaume Vintenar::VintenarKvM02a 4_M_KY_HEAD,{
}
setquest 6025;
- getitem 7773, .@reward;
+ getitem KVM_Badge, .@reward;
bg_leave;
warp "bat_room",155,150;
end;
@@ -365,7 +365,7 @@ bat_c02,148,53,1 script Croix Vintenar::VintenarKvM02b 4_M_CRU_HEAD,{
}
setquest 6025;
- getitem 7773, .@reward;
+ getitem KVM_Badge, .@reward;
bg_leave;
warp "bat_room",155,150;
end;
diff --git a/npc/custom/battleground/bg_kvm03.txt b/npc/custom/battleground/bg_kvm03.txt
index 612047dcb..8f255c90f 100644
--- a/npc/custom/battleground/bg_kvm03.txt
+++ b/npc/custom/battleground/bg_kvm03.txt
@@ -329,7 +329,7 @@ bat_c03,51,130,5 script Guillaume Vintenar::VintenarKvM03a 4_M_KY_HEAD,{
}
setquest 6025;
- getitem 7773, .@reward;
+ getitem KVM_Badge, .@reward;
bg_leave;
warp "bat_room",155,150;
end;
@@ -365,7 +365,7 @@ bat_c03,148,53,1 script Croix Vintenar::VintenarKvM03b 4_M_CRU_HEAD,{
}
setquest 6025;
- getitem 7773, .@reward;
+ getitem KVM_Badge, .@reward;
bg_leave;
warp "bat_room",155,150;
end;
diff --git a/npc/custom/etc/bank.txt b/npc/custom/etc/bank.txt
index c5bed187b..4135ed192 100644
--- a/npc/custom/etc/bank.txt
+++ b/npc/custom/etc/bank.txt
@@ -28,27 +28,25 @@ switch(select("I'd like to make a deposit.", "I'd like to make a withdrawl.", "W
mes "Oh, and do realize there is a " +@cost + " Zeny charge on all transactions!";
next;
}
- input @deposit;
+ input(@deposit);
if (@deposit < 1) {
mes "Make sure you ask me to deposit a real amount.";
close;
}
- else if (@deposit > Zeny) {
+ if (@deposit > Zeny) {
mes "It does not appear like you have the amount of zeny you're trying to deposit!";
close;
}
- else if (@deposit > (Zeny - @cost)) {
+ if (@deposit > Zeny - @cost) {
mes "You need " + @cost + " Zeny to cover the transaction fee!";
close;
}
- else {
Zeny -= @deposit;
Zeny -= @cost;
- set #bankstorage,#bankstorage + @deposit;
+ #bankstorage += @deposit;
mes "[Banker]";
mes "Thank you very much... Your zeny is in good hands.";
close;
- }
case 2:
mes "[Banker]";
@@ -59,16 +57,16 @@ switch(select("I'd like to make a deposit.", "I'd like to make a withdrawl.", "W
mes "Oh, and do realize there is a " +@cost + " Zeny charge on all transactions!";
next;
}
- input @withdrawl;
+ input(@withdrawl);
if (@withdrawl < 1) {
mes "Please don't play games. I need a real amount to withdraw.";
close;
}
- else if (@withdrawl > #bankstorage) {
+ if (@withdrawl > #bankstorage) {
mes "I show you only have ^00FF00" + #bankstorage +"^000000 zeny in your account!";
close;
}
- else if ((@cost > Zeny) && ((Zeny + @withdrawl) > @cost)) {
+ if (@cost > Zeny && Zeny + @withdrawl > @cost) {
mes "[Banker]";
mes "You don't have the Zeny for the transaction fee right now. Would you like me to take the fee directly from your withdrawl?";
next;
@@ -76,13 +74,13 @@ switch(select("I'd like to make a deposit.", "I'd like to make a withdrawl.", "W
case 1:
mes "[Banker]";
mes "Removing " + @cost + " from your withdrawl to cover the deposit fee...";
- set @withdrawl,@withdrawl - @cost;
- set #bankstorage,#bankstorage - @cost;
- set @cost,0;
+ @withdrawl -= @cost;
+ #bankstorage -= @cost;
+ @cost = 0;
next;
Zeny -= @cost;
Zeny += @withdrawl;
- set #bankstorage,#bankstorage - @withdrawl;
+ #bankstorage -= @withdrawl;
mes "[Banker]";
mes "There's your Zeny. Have a good day.";
close;
@@ -92,14 +90,12 @@ switch(select("I'd like to make a deposit.", "I'd like to make a withdrawl.", "W
close;
}
}
- else {
- Zeny -= @cost;
- Zeny += @withdrawl;
- set #bankstorage,#bankstorage - @withdrawl;
- mes "[Banker]";
- mes "There's your Zeny. Have a good day.";
- close;
- }
+ Zeny -= @cost;
+ Zeny += @withdrawl;
+ #bankstorage -= @withdrawl;
+ mes "[Banker]";
+ mes "There's your Zeny. Have a good day.";
+ close;
case 3:
mes "[Banker]";
mes "Hmmmm let me check some paper work.";
diff --git a/npc/custom/etc/bank_kafra.txt b/npc/custom/etc/bank_kafra.txt
index 375a9f611..a970f8302 100644
--- a/npc/custom/etc/bank_kafra.txt
+++ b/npc/custom/etc/bank_kafra.txt
@@ -44,7 +44,8 @@ L_NoIncomeToday:
mes"[Maniss]";
mes "Please, tell me how much zeny you would like to deposit.";
next;
- if(input(@kafrabank) == 1) goto L_TOO_BIG_AMOUNT;
+ if (input(@kafrabank, 0) == 1)
+ goto L_TOO_BIG_AMOUNT;
if(@kafrabank<1000) goto L_LESS_1000;
if(@kafrabank>Zeny) goto L_NOT_ENOUGH;
@@ -62,7 +63,8 @@ M_WITHDRAW:
mes "Your account: ^135445" + #kafrabank + "^000000 zeny.";
mes "How much zeny would you like to withdraw?";
next;
- if(input(@kafrabank) == 1) goto L_TOO_BIG_AMOUNT;
+ if (input(@kafrabank, 0) == 1)
+ goto L_TOO_BIG_AMOUNT;
if(@kafrabank<1) goto B_EXIT2;
if(@kafrabank>#kafrabank) goto L_NOT_ENOUGH;
diff --git a/npc/custom/etc/lottery.txt b/npc/custom/etc/lottery.txt
index 421fccc78..0c6c987a5 100644
--- a/npc/custom/etc/lottery.txt
+++ b/npc/custom/etc/lottery.txt
@@ -171,43 +171,64 @@ L_HandPick:
set @L5,0;
set @L6,0;
Input1:
- input @L1;
- if (@L1 < 1 || @L1 > 40) goto Input1;
+ input(@L1);
+ if (@L1 < 1 || @L1 > 40)
+ goto Input1;
mes @L1;
Input2:
- input @L2;
- if (@L2 < 1 || @L2 > 40) goto Input2;
- if (@L2 == @L1) goto Input2;
+ input(@L2);
+ if (@L2 < 1 || @L2 > 40)
+ goto Input2;
+ if (@L2 == @L1)
+ goto Input2;
mes @L2;
Input3:
- input @L3;
- if (@L3 < 1 || @L3 > 40) goto Input3;
- if (@L3 == @L1) goto Input3;
- if (@L3 == @L2) goto Input3;
+ input(@L3);
+ if (@L3 < 1 || @L3 > 40)
+ goto Input3;
+ if (@L3 == @L1)
+ goto Input3;
+ if (@L3 == @L2)
+ goto Input3;
mes @L3;
Input4:
- input @L4;
- if (@L4 < 1 || @L4 > 40) goto Input4;
- if (@L4 == @L1) goto Input4;
- if (@L4 == @L2) goto Input4;
- if (@L4 == @L3) goto Input4;
+ input(@L4);
+ if (@L4 < 1 || @L4 > 40)
+ goto Input4;
+ if (@L4 == @L1)
+ goto Input4;
+ if (@L4 == @L2)
+ goto Input4;
+ if (@L4 == @L3)
+ goto Input4;
mes @L4;
Input5:
- input @L5;
- if (@L5 < 1 || @L5 > 40) goto Input5;
- if (@L5 == @L1) goto Input5;
- if (@L5 == @L2) goto Input5;
- if (@L5 == @L3) goto Input5;
- if (@L5 == @L4) goto Input5;
+ input(@L5);
+ if (@L5 < 1 || @L5 > 40)
+ goto Input5;
+ if (@L5 == @L1)
+ goto Input5;
+ if (@L5 == @L2)
+ goto Input5;
+ if (@L5 == @L3)
+ goto Input5;
+ if (@L5 == @L4)
+ goto Input5;
mes @L5;
Input6:
- input @L6;
- if (@L6 < 1 || @L6 > 40) goto Input6;
- if (@L6 == @L1) goto Input6;
- if (@L6 == @L2) goto Input6;
- if (@L6 == @L3) goto Input6;
- if (@L6 == @L4) goto Input6;
- if (@L6 == @L5) goto Input6;
+ input(@L6);
+ if (@L6 < 1 || @L6 > 40)
+ goto Input6;
+ if (@L6 == @L1)
+ goto Input6;
+ if (@L6 == @L2)
+ goto Input6;
+ if (@L6 == @L3)
+ goto Input6;
+ if (@L6 == @L4)
+ goto Input6;
+ if (@L6 == @L5)
+ goto Input6;
mes @L6;
next;
mes "[Lottery]";
@@ -406,43 +427,64 @@ L_GM_Rig:
set $LR5,0;
set $LR6,0;
GMInput1:
- input $LR1;
- if ($LR1 < 1 || $LR1 > 40) goto GMInput1;
+ input($LR1);
+ if ($LR1 < 1 || $LR1 > 40)
+ goto GMInput1;
mes $LR1;
GMInput2:
- input $LR2;
- if ($LR2 < 1 || $LR2 > 40) goto GMInput2;
- if ($LR2 == $LR1) goto GMInput2;
+ input($LR2);
+ if ($LR2 < 1 || $LR2 > 40)
+ goto GMInput2;
+ if ($LR2 == $LR1)
+ goto GMInput2;
mes $LR2;
GMInput3:
- input $LR3;
- if ($LR3 < 1 || $LR3 > 40) goto GMInput3;
- if ($LR3 == $LR1) goto GMInput3;
- if ($LR3 == $LR2) goto GMInput3;
+ input($LR3);
+ if ($LR3 < 1 || $LR3 > 40)
+ goto GMInput3;
+ if ($LR3 == $LR1)
+ goto GMInput3;
+ if ($LR3 == $LR2)
+ goto GMInput3;
mes $LR3;
GMInput4:
- input $LR4;
- if ($LR4 < 1 || $LR4 > 40) goto GMInput4;
- if ($LR4 == $LR1) goto GMInput4;
- if ($LR4 == $LR2) goto GMInput4;
- if ($LR4 == $LR3) goto GMInput4;
+ input($LR4);
+ if ($LR4 < 1 || $LR4 > 40)
+ goto GMInput4;
+ if ($LR4 == $LR1)
+ goto GMInput4;
+ if ($LR4 == $LR2)
+ goto GMInput4;
+ if ($LR4 == $LR3)
+ goto GMInput4;
mes $LR4;
GMInput5:
- input $LR5;
- if ($LR5 < 1 || $LR5 > 40) goto GMInput5;
- if ($LR5 == $LR1) goto GMInput5;
- if ($LR5 == $LR2) goto GMInput5;
- if ($LR5 == $LR3) goto GMInput5;
- if ($LR5 == $LR4) goto GMInput5;
+ input($LR5);
+ if ($LR5 < 1 || $LR5 > 40)
+ goto GMInput5;
+ if ($LR5 == $LR1)
+ goto GMInput5;
+ if ($LR5 == $LR2)
+ goto GMInput5;
+ if ($LR5 == $LR3)
+ goto GMInput5;
+ if ($LR5 == $LR4)
+ goto GMInput5;
mes $LR5;
GMInput6:
- input $LR6;
- if ($LR6 < 1 || $LR6 > 40) goto GMInput6;
- if ($LR6 == $LR1) goto GMInput6;
- if ($LR6 == $LR2) goto GMInput6;
- if ($LR6 == $LR3) goto GMInput6;
- if ($LR6 == $LR4) goto GMInput6;
- if ($LR6 == $LR5) goto GMInput6;
+ input($LR6);
+ if ($LR6 < 1 || $LR6 > 40)
+ goto GMInput6;
+ if ($LR6 == $LR1)
+ goto GMInput6;
+ if ($LR6 == $LR2)
+ goto GMInput6;
+ if ($LR6 == $LR3)
+ goto GMInput6;
+ if ($LR6 == $LR4)
+ goto GMInput6;
+ if ($LR6 == $LR5)
+ goto GMInput6;
mes $LR6;
next;
mes "[Lottery]";
diff --git a/npc/custom/etc/marriage.txt b/npc/custom/etc/marriage.txt
index 4e521ec55..c392c5ff1 100644
--- a/npc/custom/etc/marriage.txt
+++ b/npc/custom/etc/marriage.txt
@@ -105,7 +105,7 @@ prt_church,100,123,4 script Vomars 1_M_PASTOR,{
npctalk "Ladies and gentlemen, "+strcharinfo(PC_NAME)+" has an objection to the wedding!";
SF_wed_end();
mes "Why should they not be wed?";
- input $@msg$;
+ input($@msg$);
npctalk strcharinfo(PC_NAME)+"'s objection is: "+$@msg$;
emotion e_sob;
mes "I see...";
diff --git a/npc/custom/etc/monster_arena.txt b/npc/custom/etc/monster_arena.txt
index 8420cd544..249e5518d 100644
--- a/npc/custom/etc/monster_arena.txt
+++ b/npc/custom/etc/monster_arena.txt
@@ -322,10 +322,11 @@ L_Sell:
mes "You have: ^FF0000" + #monpoints + "^000000 experience points";
mes "How many would you like to sell?";
next;
- input @sellexp;
- if (@sellexp > #monpoints) goto L_NoExp;
- set #monpoints,#monpoints-@sellexp;
- set @sellearn,100*@sellexp; // Price of exp
+ input(@sellexp, 0);
+ if (@sellexp > #monpoints)
+ goto L_NoExp;
+ #monpoints -= @sellexp;
+ @sellearn = 100 * @sellexp; // Price of exp
Zeny += @sellearn;
mes "[Monster Trainer]";
mes "You earned ^0000FF" + @sellearn + "^000000z.";
diff --git a/npc/custom/etc/quest_warper.txt b/npc/custom/etc/quest_warper.txt
index 2ae2e7f7f..fec9c6b14 100644
--- a/npc/custom/etc/quest_warper.txt
+++ b/npc/custom/etc/quest_warper.txt
@@ -173,19 +173,19 @@ Setprice:
next;
mes "Basic - Warps are = "+(($QW_BW_PRICE)?"^00FF00"+$QW_BW_PRICE:"^FF0000Free")+"^000000";
mes "Basic - Warps are starter towns and related dungeons.";
- input $QW_BW_PRICE;
+ input($QW_BW_PRICE, 0);
goto Setprice;
case 2:
next;
mes "Advanced - Warps are = "+(($QW_AW_PRICE)?"^00FF00"+$QW_AW_PRICE:"^FF0000Free")+"^000000";
mes "Advanced - Warps are towns and dungeons on the same island but not close to any starter town.";
- input $QW_AW_PRICE;
+ input($QW_AW_PRICE, 0);
goto Setprice;
case 3:
next;
mes "Overseas - Warps are = "+(($QW_OW_PRICE)?"^00FF00"+$QW_OW_PRICE:"^FF0000Free")+"^000000";
mes "Overseas - Warps are towns and dungeons overseas reachable by boat from Alberta.";
- input $QW_OW_PRICE;
+ input($QW_OW_PRICE, 0);
goto Setprice;
case 4:
next;
@@ -193,7 +193,7 @@ Setprice:
mes "Basic - Warps are starter town related dungeons.";
mes "Dungeon warp fees are calculated by maps away from entrance of the dungeon times Dungeon warp fee.";
mes "These costs are on top of the regular Warp costs.";
- input $QW_BW_FEE;
+ input($QW_BW_FEE, 0);
goto Setprice;
case 5:
next;
@@ -201,7 +201,7 @@ Setprice:
mes "Advanced - Warps are dungeons not close to any starter town.";
mes "Dungeon warp fees are calculated by maps away from entrance of the dungeon times Dungeon warp fee.";
mes "These costs are on top of the regular Warp costs.";
- input $QW_AW_FEE;
+ input($QW_AW_FEE, 0);
goto Setprice;
case 6:
next;
@@ -209,13 +209,13 @@ Setprice:
mes "Overseas - Warps are dungeons related to towns overseas reachable by boat from Alberta.";
mes "Dungeon warp fees are calculated by maps away from entrance of the dungeon times Dungeon warp fee.";
mes "These costs are on top of the regular Warp costs.";
- input $QW_OW_FEE;
+ input($QW_OW_FEE, 0);
goto Setprice;
case 7:
next;
mes "Full Healing = "+(($QW_HF_PRICE)?"^00FF00"+$QW_HF_PRICE:"^FF0000Free")+"^000000";
mes "Instant full healing 1 price.";
- input $QW_HF_PRICE;
+ input($QW_HF_PRICE, 0);
goto Setprice;
case 8:
next;
@@ -224,8 +224,8 @@ Setprice:
mes "Healing price per 1 HP.";
mes "Healing price per 1 SP.";
mes "2 inputs, first HP then SP.";
- input $QW_HP_H_PRICE;
- input $QW_HP_S_PRICE;
+ input($QW_HP_H_PRICE, 0);
+ input($QW_HP_S_PRICE, 0);
goto Setprice;
case 9:
next;
@@ -233,13 +233,13 @@ Setprice:
if (!$QW_S_PRICE) mes "Storage = ^FF0000 Free ^000000";
if ($QW_S_PRICE == 60) mes "Storage = ^0000FF Kafra Mode ^000000";
mes "Storage cost, if set to 60 Kafra pricing will be handled.";
- input $QW_S_PRICE;
+ input($QW_S_PRICE, 0);
goto Setprice;
case 10:
next;
mes "Guild Storage = "+(($QW_GS_PRICE)?"^00FF00"+$QW_GS_PRICE:"^FF0000Free")+"^000000";
mes "Guild Storage, free on Guild Kafras.";
- input $QW_GS_PRICE;
+ input($QW_GS_PRICE, 0);
goto Setprice;
case 11:
goto GM_Menu;
@@ -264,21 +264,21 @@ SpecialWarpMenu:
case 1:
next;
mes "Set the name to show in the menu as option.";
- input $QW_SP_Warpname$;
+ input($QW_SP_Warpname$, 0);
goto SpecialWarpMenu;
case 2:
next;
mes "Set the map in the ^0000FFmapname^000000 format.";
mes "When this warpmap is set the option for players will show once they meet the requirments.";
mes "To disable Special Warp Menu option, clear this!";
- input $QW_SP_WarpMap$;
+ input($QW_SP_WarpMap$, 0);
goto SpecialWarpMenu;
case 3:
next;
mes "First input = Xcoord";
mes "Second input = Ycoord";
- input $QW_SP_WarpX;
- input $QW_SP_WarpY;
+ input($QW_SP_WarpX, 0);
+ input($QW_SP_WarpY, 0);
goto SpecialWarpMenu;
case 4:
goto GM_Menu;
@@ -301,7 +301,7 @@ DungeonLevelLimit:
mes "Set limit of Dungeon Depth 0 = entrance";
mes "Depth 1 is a map connected to 0 and so on";
mes "Shortest Route to map counts as depth";
- input $QW_DDL;
+ input($QW_DDL, 0);
goto DungeonLevelLimit;
case 3: goto GM_Menu;
default:
@@ -464,7 +464,7 @@ L_Storage:
if(#kafra_code) {
mes "Enter your storage password:";
set @code_,0;
- input @code_;
+ input(@code_, 0);
if(@code_ != #kafra_code) {
dispbottom "Wrong storage password.";
close;
diff --git a/npc/custom/etc/shifty_assassin.txt b/npc/custom/etc/shifty_assassin.txt
index 4acf7c8ac..cc92d3fce 100644
--- a/npc/custom/etc/shifty_assassin.txt
+++ b/npc/custom/etc/shifty_assassin.txt
@@ -27,7 +27,7 @@ morocc,148,86,5 script Shifty Assassin 4_F_JOB_ASSASSIN,{
mes "They cost ^0000FF" + $ninja_price + " zeny ^000000each.";
set @buy,0;
- input @buy;
+ input(@buy, 0);
next;
if ($ninja_avail < 1) {
mes "[Shifty Assassin]";
@@ -83,8 +83,7 @@ morocc,148,86,5 script Shifty Assassin 4_F_JOB_ASSASSIN,{
mes "Active Ninjas: "+#ninjas;
mes "Resting Ninjas: "+#ninjasr;
mes "How many do you want to send?";
- set @number,0;
- input @number;
+ input(@number);
if (@number < 1) {
mes "[Shifty Assassin]";
mes "You can't kill anyone without ninjas.";
@@ -144,7 +143,7 @@ morocc,148,86,5 script Shifty Assassin 4_F_JOB_ASSASSIN,{
mes "How many ninjas do you want to make available?";
next;
set @add,0;
- input @add;
+ input(@add, 0);
set $ninja_avail,$ninja_avail+@add;
mes @add + " ninjas added.";
close;
diff --git a/npc/custom/etc/stock_market.txt b/npc/custom/etc/stock_market.txt
index 465840dfe..b761d8d16 100644
--- a/npc/custom/etc/stock_market.txt
+++ b/npc/custom/etc/stock_market.txt
@@ -323,11 +323,8 @@ prontera,140,181,5 script Stock Market::stockmarket 4_M_MANAGER,{
mes "Enter the name of the share company";
mes "Transaction fee of ^FF0000" + $S_Trans + "z^000000 will apply.";
- set @buyname$,"0";
- input @buyname$;
-
- set @buyamount,0;
- input @buyamount;
+ input(@buyname$);
+ input(@buyamount);
// Checks valid number //
if (@buyamount < $S_BuyMin) {
mes "^FF0000Minimum of " + $S_BuyMin + " shares can be bought at a time.^000000";
@@ -476,10 +473,8 @@ prontera,140,181,5 script Stock Market::stockmarket 4_M_MANAGER,{
if (#S8 > 0) mes "^0000FF"+$S8N$+"^FF0000" + " x " + #S8 + " [" + $S8 + "z]";
if (#S9 > 0) mes "^0000FF"+$S9N$+"^FF0000" + " x " + #S9 + " [" + $S9 + "z]";
if (#S10 > 0) mes "^0000FF"+$S10N$+"^FF0000" + " x " + #S10 + " [" + $S10 + "z]";
- set @sellname$,"0";
- input @sellname$;
- set @sellamount,0;
- input @sellamount;
+ input(@sellname$);
+ input(@sellamount);
if (@sellamount < 1) {
mes "^FF0000Invalid integer.^000000";
next;
@@ -756,7 +751,7 @@ OnGMOpen:
if (select("Yes", "No") != 1)
return;
set @gmset,0;
- input @gmset;
+ input(@gmset, 0);
set $S1,@gmset;
set $S2,@gmset;
set $S3,@gmset;
diff --git a/npc/custom/events/cluckers.txt b/npc/custom/events/cluckers.txt
index 7047ca00e..2e6170693 100644
--- a/npc/custom/events/cluckers.txt
+++ b/npc/custom/events/cluckers.txt
@@ -74,11 +74,11 @@ prontera,156,219,4 script Cluckers 4_NFCOCK,{
case 3:
mes "[Cluckers]";
mes "Cluck cluck? Cluck??? ^FF0000~What should the prize for winning be? Please input the ID.~^000000";
- input $cluck_item_id;
+ input($cluck_item_id, 0);
next;
mes "[Cluckers]";
mes "Cluck? cluuuck? ^FF0000~How many if this item should I give away?~^000000";
- input $cluck_item_amount;
+ input($cluck_item_amount, 0);
next;
mes "[Cluckers]";
mes "Cluck cluck..? Cluck. ^FF0000~So, the prize is^000000 ^008000"+ $cluck_item_amount +" "+ getitemname($cluck_item_id) +"^000000? ^FF0000Great.~^000000";
diff --git a/npc/custom/events/disguise.txt b/npc/custom/events/disguise.txt
index fde5e544a..37f8a4f99 100644
--- a/npc/custom/events/disguise.txt
+++ b/npc/custom/events/disguise.txt
@@ -67,7 +67,7 @@ prontera,160,155,4 script Disguise Event 4_M_NFDEADMAN,{
mes "Input the number of rounds you want the event to last.";
mes "Current number: [^0000FF"+.Rounds+"^000000]";
next;
- input .@Rounds;
+ input(.@Rounds, 0);
set .Rounds,.@Rounds;
mes .@n$;
mes "The number of rounds has been changed to "+.Rounds+".";
@@ -77,7 +77,7 @@ prontera,160,155,4 script Disguise Event 4_M_NFDEADMAN,{
mes "Input the Item ID of the prize given each round.";
mes "Current item: [^0000FF"+getitemname(.Prize)+"^000000] (ID #"+.Prize+")";
next;
- input .@Prize;
+ input(.@Prize, 0);
mes .@n$;
if (getitemname(.@Prize)=="" || getitemname(.@Prize)=="null") {
mes "That item does not exist. Please try again.";
@@ -86,11 +86,11 @@ prontera,160,155,4 script Disguise Event 4_M_NFDEADMAN,{
set .Prize,.@Prize;
mes "Input the amount to be given.";
next;
- input .@amount;
+ input(.@amount);
mes .@n$;
- if (.@amount<=0 || .@amount>=10000) {
+ if (.@amount <= 0 || .@amount >= 10000) {
mes "That amount is invalid. Using default ammount of 1.";
- set .@amount,1;
+ .@amount = 1;
next;
mes .@n$;
}
diff --git a/npc/custom/events/valentinesdayexp.txt b/npc/custom/events/valentinesdayexp.txt
index 33339dcd9..195f20275 100644
--- a/npc/custom/events/valentinesdayexp.txt
+++ b/npc/custom/events/valentinesdayexp.txt
@@ -95,12 +95,15 @@ alberta,26,243,4 script Stephen#val1 1_M_MERCHANT,{
mes "you can come back again.";
mes "So how many do you want?";
next;
- set @needmon,0;
- input @flag_num;
- if (@flag_num <= 0) goto L_NONE;
- if (@flag_num > 5) goto L_ERR;
- set @needmon,@flag_num*5000;
- if (Zeny < @needmon) goto L_NOTENO;
+ @needmon = 0;
+ input(@flag_num);
+ if (@flag_num <= 0)
+ goto L_NONE;
+ if (@flag_num > 5)
+ goto L_ERR;
+ @needmon = @flag_num * 5000;
+ if (Zeny < @needmon)
+ goto L_NOTENO;
Zeny -= @needmon;
getitem 558,@flag_num;
mes "[Stephen]";
@@ -154,13 +157,17 @@ alberta,29,243,4 script Jainie#val1 1_M_INNKEEPER,{
mes "you can come back again.";
mes "So how many do you want? 1 portion is 4500z + 1 Milk.";
next;
- set @needmon,0;
- input @flag_num;
- if (@flag_num == 0) goto L_NONE;
- if (@flag_num > 5) goto L_ERR;
- set @needmon,@flag_num*4500;
- if (Zeny < @needmon) goto L_NOTENO;
- if (countitem(Milk) < @flag_num) goto L_NOMILK;
+ @needmon = 0;
+ input(@flag_num);
+ if (@flag_num == 0)
+ goto L_NONE;
+ if (@flag_num > 5)
+ goto L_ERR;
+ @needmon = @flag_num * 4500;
+ if (Zeny < @needmon)
+ goto L_NOTENO;
+ if (countitem(Milk) < @flag_num)
+ goto L_NOMILK;
Zeny -= @needmon;
delitem 519,@flag_num;
getitem 561,@flag_num;
diff --git a/npc/custom/stylist.txt b/npc/custom/stylist.txt
index 0ee7d8822..188a91ca7 100644
--- a/npc/custom/stylist.txt
+++ b/npc/custom/stylist.txt
@@ -3,32 +3,72 @@
//===== By: ==================================================
//= Euphy
//===== Current Version: =====================================
-//= 1.1
+//= 1.2
//===== Description: =========================================
//= Changes your hair style, hair color, and cloth color.
//===== Additional Comments: =================================
//= 1.1 Switched to 'getbattleflag', credits to Saithis. [Euphy]
+//= 1.2 Fix style start at min_style, add Job_Summoner [AnnieRuru]
//============================================================
prontera,170,180,1 script Stylist#custom_stylist 2_M_DYEINGER,{
-
- setarray .@styles[1],getbattleflag("max_cloth_color"),getbattleflag("max_hair_style"),getbattleflag("max_hair_color");
- setarray .@Look[1],7,1,6;
- set .@s, select(" ~ Cloth color", " ~ Hairstyle", " ~ Hair color");
- set .@Revert, getlook(.@Look[.@s]);
- set .@style,1;
- while(1) {
- setlook .@Look[.@s], .@style;
- message strcharinfo(PC_NAME),"This is style #"+.@style+".";
- set .@menu$, " ~ Next (^0055FF"+((.@style!=.@styles[.@s])?.@style+1:1)+"^000000): ~ Previous (^0055FF"+((.@style!=1)?.@style-1:.@styles[.@s])+"^000000): ~ Jump to...: ~ Revert to original (^0055FF"+.@Revert+"^000000)";
- switch(select(.@menu$)) {
- case 1: set .@style, ((.@style!=.@styles[.@s])?.@style+1:1); break;
- case 2: set .@style, ((.@style!=1)?.@style-1:.@styles[.@s]); break;
- case 3: message strcharinfo(PC_NAME),"Choose a style between 1 - "+.@styles[.@s]+".";
- input .@style,0,.@styles[.@s];
- if (!.@style) set .@style, rand(1,.@styles[.@s]);
- break;
- case 4: set .@style, .@Revert; setlook .@Look[.@s], .@Revert; break;
+ .@choose = select("Hair style", "Hair color", "Cloth color") - 1;
+ .@part = .look[.@choose];
+ if (BaseClass != Job_Summoner)
+ callsub(L_styles, .@part, .minstyle[.@part], .maxstyle[.@part]);
+ else
+ callsub(L_styles, .@part, .summoner_minstyle[.@part], .summoner_maxstyle[.@part]);
+L_styles:
+ .@lookpart = getarg(0);
+ .@minstyle = getarg(1);
+ .@maxstyle = getarg(2);
+ .@i = .@revert = getlook(.@lookpart);
+ while (true) {
+ setlook(.@lookpart, .@i);
+ message(strcharinfo(PC_NAME), sprintf(_("This is style #%d."), .@i));
+ if (.@i == .@maxstyle)
+ .@next = .@minstyle;
+ else
+ .@next = .@i + 1;
+ if (.@i == .@minstyle)
+ .@previous = .@maxstyle;
+ else
+ .@previous = .@i - 1;
+ switch(select(
+ sprintf(_(" ~ Next (%s%d%s)"), F_MesColor(C_BLUE), .@next, F_MesColor(C_BLACK)),
+ sprintf(_(" ~ Previous (%s%d%s)"), F_MesColor(C_BLUE), .@previous, F_MesColor(C_BLACK)),
+ " ~ Jump to...",
+ sprintf(_(" ~ Revert to original (%s%d%s)"), F_MesColor(C_BLUE), .@revert, F_MesColor(C_BLACK)))) {
+ case 1:
+ .@i = .@next;
+ break;
+ case 2:
+ .@i = .@previous;
+ break;
+ case 3:
+ message(strcharinfo(PC_NAME), sprintf(_("Choose a style between %d - %d."), .@minstyle, .@maxstyle));
+ input(.@i, .@minstyle, .@maxstyle);
+ break;
+ case 4:
+ .@i = .@revert;
}
}
+ end;
+OnInit:
+ setarray .look[0], LOOK_HAIR, LOOK_HAIR_COLOR, LOOK_CLOTHES_COLOR;
+
+ .minstyle[LOOK_HAIR] = getbattleflag("min_hair_style");
+ .maxstyle[LOOK_HAIR] = getbattleflag("max_hair_style");
+ .minstyle[LOOK_HAIR_COLOR] = getbattleflag("min_hair_color");
+ .maxstyle[LOOK_HAIR_COLOR] = getbattleflag("max_hair_color");
+ .minstyle[LOOK_CLOTHES_COLOR] = getbattleflag("min_cloth_color");
+ .maxstyle[LOOK_CLOTHES_COLOR] = getbattleflag("max_cloth_color");
+
+ .summoner_minstyle[LOOK_HAIR] = getbattleflag("min_hair_style");
+ .summoner_maxstyle[LOOK_HAIR] = getbattleflag("max_hair_style");
+ .summoner_minstyle[LOOK_HAIR_COLOR] = getbattleflag("min_hair_color");
+ .summoner_maxstyle[LOOK_HAIR_COLOR] = getbattleflag("max_hair_color");
+ .summoner_minstyle[LOOK_CLOTHES_COLOR] = getbattleflag("min_cloth_color");
+ .summoner_maxstyle[LOOK_CLOTHES_COLOR] = getbattleflag("max_cloth_color");
+ end;
}
diff --git a/npc/events/dumplingfestival.txt b/npc/events/dumplingfestival.txt
index 641b8f2da..9f5ac381a 100644
--- a/npc/events/dumplingfestival.txt
+++ b/npc/events/dumplingfestival.txt
@@ -67,8 +67,8 @@ payon,93,81,4 script Exorcist Master Fahae 4_M_BUDDHIST,{
mes "Each costs "+ .@price +"z.";
mes "(Type in 0 to cancel)";
next;
- input @input;
- if (@input == 0)
+ input(@input);
+ if (@input <= 0)
close;
if (@input > 5) {
mes "[Exorcist Master Fahae]";
diff --git a/npc/events/easter_2008.txt b/npc/events/easter_2008.txt
index 4d914ebcb..a2d6a2155 100644
--- a/npc/events/easter_2008.txt
+++ b/npc/events/easter_2008.txt
@@ -91,7 +91,7 @@ prontera,111,99,5 script Egg Salesman#prt::EggVendor 4W_M_02,{
mes "Chicken Eggs so easily!";
next;
while(1) {
- input .@input;
+ input(.@input);
if (.@input == 0) {
mes "[Egg Salesman]";
mes "Hey, if you're not";
@@ -101,7 +101,7 @@ prontera,111,99,5 script Egg Salesman#prt::EggVendor 4W_M_02,{
mes "help out my customers?";
close;
}
- else if (.@input < 0 || .@input > 1000) {
+ if (.@input < 1 || .@input > 1000) {
mes "[Egg Salesman]";
mes "Hey, you mind giving";
mes "me a real number? I also";
@@ -110,42 +110,37 @@ prontera,111,99,5 script Egg Salesman#prt::EggVendor 4W_M_02,{
mes "you know. C'mon, tell me how";
mes "many you want for real now.";
next;
+ continue;
}
- else {
- .@egg_zeny = .@input*500;
- if (Zeny < .@egg_zeny) {
- mes "[Egg Salesman]";
- mes "You don't have enough Zeny.";
- next;
- mes "[Egg Salesman]";
- mes "No discount, go and get enough Zeny.";
- close;
- }
- else {
- if (checkweight(Chicken_Egg,.@input) == 0) {
- mes "[Egg Salesman]";
- mes "Hey, I know you really";
- mes "want to buy some Chicken";
- mes "Eggs, but you won't be able";
- mes "to carry that much now. Why";
- mes "don't you free up some";
- mes "Inventory space first?.";
- close;
- }
- else {
- mes "[Egg Salesman]";
- mes "Here's your Chicken Eggs!";
- mes "I guess there's some festival";
- mes "happening where you'll need";
- mes "them, but I don't know anything";
- mes "about that. Well, have a good";
- mes "time, and I'll see you again!";
- Zeny -= .@egg_zeny;
- getitem Chicken_Egg,.@input;
- close;
- }
- }
+ .@egg_zeny = .@input*500;
+ if (Zeny < .@egg_zeny) {
+ mes "[Egg Salesman]";
+ mes "You don't have enough Zeny.";
+ next;
+ mes "[Egg Salesman]";
+ mes "No discount, go and get enough Zeny.";
+ close;
}
+ if (checkweight(Chicken_Egg,.@input) == 0) {
+ mes "[Egg Salesman]";
+ mes "Hey, I know you really";
+ mes "want to buy some Chicken";
+ mes "Eggs, but you won't be able";
+ mes "to carry that much now. Why";
+ mes "don't you free up some";
+ mes "Inventory space first?.";
+ close;
+ }
+ mes "[Egg Salesman]";
+ mes "Here's your Chicken Eggs!";
+ mes "I guess there's some festival";
+ mes "happening where you'll need";
+ mes "them, but I don't know anything";
+ mes "about that. Well, have a good";
+ mes "time, and I'll see you again!";
+ Zeny -= .@egg_zeny;
+ getitem Chicken_Egg,.@input;
+ close;
}
case 4:
mes "[Egg Salesman]";
@@ -263,8 +258,8 @@ prontera,230,312,3 script Nerlen#es07 1_F_PRIEST,{
mes "Enter ''0'' to cancel.";
next;
while(1) {
- input .@input;
- if (.@input == 0) {
+ input(.@input);
+ if (.@input <= 0) {
mes "[Nerlen]";
mes "Oh, you changed your";
mes "mind? Feel free to visit me";
@@ -272,35 +267,32 @@ prontera,230,312,3 script Nerlen#es07 1_F_PRIEST,{
mes "make you some Holy Eggs~";
close;
}
- else if (.@input < 0 || .@input > 10) {
+ if (.@input > 10) {
mes "[Nerlen]";
mes "I'm sorry, but I can only";
mes "make up to 10 Holy Eggs";
mes "at a time. If you wanted to";
mes "cancel, then just enter ''0.''";
next;
+ continue;
}
- else {
- if ((countitem(White_Herb) < .@input) || (countitem(Green_Herb) < .@input) || (countitem(Yellow_Herb) < .@input) || (countitem(Holy_Water) < .@input) || (countitem(Chicken_Egg) < .@input)) {
- mes "[Nerlen]";
- mes "I'm sorry, but you don't";
- mes "have enough items to make";
- mes "Holy Eggs. You need the";
- mes "following for me to create";
- mes "each Holy Egg for you.";
- next;
- mes "[Nerlen]";
- mes "^4D4DFF1 White Herb^000000,";
- mes "^4D4DFF1 Green Herb^000000,";
- mes "^4D4DFF1 Yellow Herb^000000,";
- mes "^4D4DFF1 Holy Water^000000, and";
- mes "^4D4DFF1 Chicken Egg^000000.";
- close;
- }
- else {
- break;
- }
+ if ((countitem(White_Herb) < .@input) || (countitem(Green_Herb) < .@input) || (countitem(Yellow_Herb) < .@input) || (countitem(Holy_Water) < .@input) || (countitem(Chicken_Egg) < .@input)) {
+ mes "[Nerlen]";
+ mes "I'm sorry, but you don't";
+ mes "have enough items to make";
+ mes "Holy Eggs. You need the";
+ mes "following for me to create";
+ mes "each Holy Egg for you.";
+ next;
+ mes "[Nerlen]";
+ mes "^4D4DFF1 White Herb^000000,";
+ mes "^4D4DFF1 Green Herb^000000,";
+ mes "^4D4DFF1 Yellow Herb^000000,";
+ mes "^4D4DFF1 Holy Water^000000, and";
+ mes "^4D4DFF1 Chicken Egg^000000.";
+ close;
}
+ break;
}
if (checkweight(Holy_Egg,.@input) == 0) {
mes "[Nerlen]";
@@ -311,20 +303,18 @@ prontera,230,312,3 script Nerlen#es07 1_F_PRIEST,{
mes "space in your Inventory first.";
close;
}
- else {
- delitem White_Herb,.@input;
- delitem Green_Herb,.@input;
- delitem Yellow_Herb,.@input;
- delitem Holy_Water,.@input;
- delitem Chicken_Egg,.@input; //Egg
- getitem Holy_Egg,.@input;
- mes "[Nerlen]";
- mes "Thank you!";
- mes "I hope you enjoy";
- mes "these Holy Eggs~";
- mes "Hope you to be with God's love.";
- close;
- }
+ delitem White_Herb,.@input;
+ delitem Green_Herb,.@input;
+ delitem Yellow_Herb,.@input;
+ delitem Holy_Water,.@input;
+ delitem Chicken_Egg,.@input; //Egg
+ getitem Holy_Egg,.@input;
+ mes "[Nerlen]";
+ mes "Thank you!";
+ mes "I hope you enjoy";
+ mes "these Holy Eggs~";
+ mes "Hope you to be with God's love.";
+ close;
case 3:
mes "[Nerlen]";
mes "Alright, I understand.";
diff --git a/npc/events/halloween_2006.txt b/npc/events/halloween_2006.txt
index 940ffe30a..6f954c299 100644
--- a/npc/events/halloween_2006.txt
+++ b/npc/events/halloween_2006.txt
@@ -614,20 +614,20 @@ nif_fild01,165,115,3 script Chicken Masta#06_hw 4_M_NFDEADMAN2,{
mes "And maximum 3 is all you can get.";
next;
while(1) {
- input .@input;
- if (.@input == 0) {
+ input(.@input);
+ if (.@input <= 0) {
mes "[Chicken Masta]";
mes "You don't have to buy it, if you don't need it.";
close;
}
- else if (@input > 3) {
+ if (@input > 3) {
mes "[Chicken Masta]";
mes "What did I tell you.";
mes "I'm going to sell only three eggs.";
next;
+ continue;
}
- else
- break;
+ break;
}
.@hw_egg = .@input * 1000;
if (Zeny < @hw_egg) {
@@ -666,7 +666,7 @@ nif_fild01,167,113,3 script Masta's chicken#06_hw01 4_NFCOCK,{
mes "Oh, this must be Chicken Masta's chicken.";
mes "I should insert the magic word.";
next;
- input .@inputstr$;
+ input(.@inputstr$);
if( .@inputstr$ == "Return" ) {
emotion e_omg;
specialeffect EF_TELEPORTATION;
diff --git a/npc/events/halloween_2009.txt b/npc/events/halloween_2009.txt
index e71abeaef..532e04b2e 100644
--- a/npc/events/halloween_2009.txt
+++ b/npc/events/halloween_2009.txt
@@ -349,8 +349,8 @@ prontera,220,72,5 duplicate(09Treats) Trick or Treater#iRO8 4_M_KID1,2,2
mes "[Halloween Wizard]";
mes "How many Fabrics or Jack o' Pumpkins do you want to use? Don't go over 100 because that is the max amount that I can use.";
next;
- input .@input;
- if (.@input == 0) {
+ input(.@input);
+ if (.@input <= 0) {
mes "[Halloween Wizard]";
mes "You have no definite idea.";
mes "It's not a big deal.";
@@ -358,91 +358,89 @@ prontera,220,72,5 duplicate(09Treats) Trick or Treater#iRO8 4_M_KID1,2,2
next;
break;
}
- else if (.@input > 100) {
+ if (.@input > 100) {
mes "[Halloween Wizard]";
mes "I told you that it must be between 1 to 100!";
mes "You didn't pay attention!";
next;
break;
}
- else {
- .@fabric = countitem(Transparent_Cloth);
- .@jack = countitem(Pumpkin_Head);
- .@worn = countitem(Worn_Cloth_Piece);
- .@crushed = countitem(Pumpkin_Head_Crushed);
- .@whispers = 0;
- .@darklords = 0;
+ .@fabric = countitem(Transparent_Cloth);
+ .@jack = countitem(Pumpkin_Head);
+ .@worn = countitem(Worn_Cloth_Piece);
+ .@crushed = countitem(Pumpkin_Head_Crushed);
+ .@whispers = 0;
+ .@darklords = 0;
- .@total = .@fabric + .@jack + .@worn + .@crushed;
+ .@total = .@fabric + .@jack + .@worn + .@crushed;
- if(.@total < .@input) {
- mes "[Halloween Wizard]";
- mes "Recount the number of items you have and tell me the total.";
- mes "Huhuhuhuhuhu...";
- next;
- break;
- }
+ if(.@total < .@input) {
+ mes "[Halloween Wizard]";
+ mes "Recount the number of items you have and tell me the total.";
+ mes "Huhuhuhuhuhu...";
+ next;
+ break;
+ }
- if(.@fabric > 0) {
- if(.@fabric >= .@input) {
- delitem 1059,.@input;
- .@whispers += .@input;
- .@input = 0;
- }
- else{
- delitem 1059,.@fabric;
- .@input -= .@fabric;
- .@whispers += .@fabric;
- }
+ if(.@fabric > 0) {
+ if(.@fabric >= .@input) {
+ delitem 1059,.@input;
+ .@whispers += .@input;
+ .@input = 0;
}
- if(.@worn > 0 && .@input != 0) {
- if(.@worn >= .@input) {
- delitem 6299,.@input;
- .@whispers += .@input;
- .@input = 0;
- }
- else{
- delitem 6299,.@worn;
- .@input -= .@worn;
- .@whispers += .@worn;
- }
+ else{
+ delitem 1059,.@fabric;
+ .@input -= .@fabric;
+ .@whispers += .@fabric;
}
- if(.@jack > 0 && .@input != 0) {
- if(.@jack >= .@input) {
- delitem 1062,.@input;
- .@darklords += .@input;
- .@input = 0;
- }
- else{
- delitem 1062,.@jack;
- .@input -= .@jack;
- .@darklords += .@jack;
- }
+ }
+ if(.@worn > 0 && .@input != 0) {
+ if(.@worn >= .@input) {
+ delitem 6299,.@input;
+ .@whispers += .@input;
+ .@input = 0;
}
- if(.@crushed > 0 && .@input != 0) {
- if(.@crushed >= .@input) {
- delitem 6298,.@input;
- .@darklords += .@input;
- .@input = 0;
- }
- else{
- delitem 6298,.@crushed;
- .@input -= .@crushed;
- .@darklords += .@crushed;
- }
+ else{
+ delitem 6299,.@worn;
+ .@input -= .@worn;
+ .@whispers += .@worn;
}
- if (.@input > 0) {
- mes "Theres a problem.";
- close;
+ }
+ if(.@jack > 0 && .@input != 0) {
+ if(.@jack >= .@input) {
+ delitem 1062,.@input;
+ .@darklords += .@input;
+ .@input = 0;
}
- monster ""+.@HallowTowns$[.@HallowTown]+"",0,0,"Halloween Whisper",3014,.@whispers;
- monster ""+.@HallowTowns$[.@HallowTown]+"",0,0,"Halloween Dark Lord",3015,.@darklords;
- mes "[Halloween Wizard]";
- mes "Here's what you wanted.";
- mes "Imagine what the people must be thinking in the other villages?";
- mes "Muahahaha";
+ else{
+ delitem 1062,.@jack;
+ .@input -= .@jack;
+ .@darklords += .@jack;
+ }
+ }
+ if(.@crushed > 0 && .@input != 0) {
+ if(.@crushed >= .@input) {
+ delitem 6298,.@input;
+ .@darklords += .@input;
+ .@input = 0;
+ }
+ else{
+ delitem 6298,.@crushed;
+ .@input -= .@crushed;
+ .@darklords += .@crushed;
+ }
+ }
+ if (.@input > 0) {
+ mes "Theres a problem.";
close;
}
+ monster ""+.@HallowTowns$[.@HallowTown]+"",0,0,"Halloween Whisper",3014,.@whispers;
+ monster ""+.@HallowTowns$[.@HallowTown]+"",0,0,"Halloween Dark Lord",3015,.@darklords;
+ mes "[Halloween Wizard]";
+ mes "Here's what you wanted.";
+ mes "Imagine what the people must be thinking in the other villages?";
+ mes "Muahahaha";
+ close;
case 3:
mes "[Halloween Wizard]";
mes "If you change your mind, come back here...";
diff --git a/npc/events/valentinesday.txt b/npc/events/valentinesday.txt
index bb64f4121..89979e166 100644
--- a/npc/events/valentinesday.txt
+++ b/npc/events/valentinesday.txt
@@ -58,8 +58,9 @@ alberta,26,243,4 script Stephen 1_M_MERCHANT,{
mes "you can come back again.";
mes "So how many do you want?";
next;
- input .@i;
- if (.@i <= 0) close;
+ input(.@i);
+ if (.@i <= 0)
+ close;
mes "[Stephen]";
if (.@i > 5) {
mes "I'm sorry, but I can't give you that many.";
diff --git a/npc/events/valentinesday_2009.txt b/npc/events/valentinesday_2009.txt
index 1151a08fb..919f4255f 100644
--- a/npc/events/valentinesday_2009.txt
+++ b/npc/events/valentinesday_2009.txt
@@ -66,7 +66,7 @@ prontera,164,174,4 script Trader#Val09 1_M_MERCHANT,{
mes "How many do you want anyway?";
next;
while(.@input <= 0 || .@input > 5) {
- input .@input;
+ input(.@input);
if (.@input < 1) {
mes "[Marco Bassinio]";
mes "Oh, it's such a shame!";
@@ -195,7 +195,7 @@ prontera,147,171,5 script Packs Trader#Val09 1_M_MERCHANT,{
mes "How many do you want?";
mes "You can't buy more than 10 items at once.";
next;
- input .@input;
+ input(.@input);
if (.@input <= 0) {
mes "[Packs Trader]";
mes "Nothing to buy.";
@@ -236,7 +236,7 @@ prontera,147,171,5 script Packs Trader#Val09 1_M_MERCHANT,{
mes "How many do you want?";
mes "You can't buy more than 10 items at once.";
next;
- input .@input;
+ input(.@input);
if (.@input <= 0) {
mes "[Packs Trader]";
mes "Nothing to buy.";
@@ -277,7 +277,7 @@ prontera,147,171,5 script Packs Trader#Val09 1_M_MERCHANT,{
mes "How many do you want?";
mes "You can't buy more than 10 items at once.";
next;
- input .@input;
+ input(.@input);
if (.@input <= 0) {
mes "[Packs Trader]";
mes "Nothing to buy.";
@@ -443,7 +443,7 @@ prontera,157,185,4 script Valentine Vote Manager#v 4_F_KAFRA5,{
mes "When you write the number of the rings, the number shouldn't be larger than the number of rings you actually have.";
mes "'0', cancels everything.";
next;
- input .@input;
+ input(.@input);
if (.@input <= 0) {
mes "[Valentine Vote Manager]";
diff --git a/npc/events/whiteday.txt b/npc/events/whiteday.txt
index 58655bf11..b7bae2d97 100644
--- a/npc/events/whiteday.txt
+++ b/npc/events/whiteday.txt
@@ -118,16 +118,18 @@ S_Purchase:
.@price = getarg(0);
.@item_id = getarg(1);
while (true) {
- input .@amount;
- if (.@amount <= 5)
- break;
- mes "[Sugar]";
- mes "???";
- mes "You seem to have a failure on hearing.";
- mes "I will tell you once again?";
- mes "You can only purchase";
- mes "^ff0000 5 pieces^000000 at once.";
- next;
+ input(.@amount);
+ if (.@amount < 0 || .@amount > 5) {
+ mes "[Sugar]";
+ mes "???";
+ mes "You seem to have a failure on hearing.";
+ mes "I will tell you once again?";
+ mes "You can only purchase";
+ mes "^ff0000 5 pieces^000000 at once.";
+ next;
+ continue;
+ }
+ break;
}
if (.@amount == 0) // Cancel
return;
diff --git a/npc/instances/EndlessTower.txt b/npc/instances/EndlessTower.txt
index 2964f7e2a..4353de224 100644
--- a/npc/instances/EndlessTower.txt
+++ b/npc/instances/EndlessTower.txt
@@ -1300,7 +1300,7 @@ OnTimer120000:
mes("This NPC manages the tower from the 1st to the 25th Level.");
mes("Please enter the Level number to open.");
mes("(i.g.: 1F->1, 25F->25)");
- input(.@input, 1, 25);
+ input(.@input);
next();
if (.@input < 1 || .@input > 25) {
mes("You can only enter a number from 1 to 25.");
@@ -1412,9 +1412,9 @@ OnTouch_:
mes("This NPC manages the tower from the 26st to the 50th Level.");
mes("Please enter the Level number to open.");
mes("(i.g.: 26F->26, 50F->50)");
- input(.@input, 26, 50);
+ input(.@input);
next();
- if (.@onput < 26 || .@input > 50) {
+ if (.@input < 26 || .@input > 50) {
mes("You can only enter a number from 26 to 50.");
} else {
donpcevent(instance_npcname(.@input+"FGate102tower")+"::OnEnable");
@@ -1524,7 +1524,7 @@ OnTouch_:
mes("This NPC manages the tower from the 51st to the 75th Level.");
mes("Please enter the Level number to open.");
mes("(i.g.: 51F->51, 75F->75)");
- input(.@input, 51, 75);
+ input(.@input);
next();
if (.@input < 51 || .@input > 75) {
mes("You can only enter a number from 51 to 75.");
@@ -1635,7 +1635,7 @@ OnTouch_:
mes("This NPC manages the tower from the 76th to the 99th Level.");
mes("Please enter the Level number to open.");
mes("(i.g.: 76F->76, 99F->99)");
- input(.@input, 76, 99);
+ input(.@input);
next();
if (.@input < 76 || .@input > 99) {
mes("You can only enter a number from 76 to 99.");
diff --git a/npc/instances/NydhoggsNest.txt b/npc/instances/NydhoggsNest.txt
index d39d90cd3..ebaf70f92 100644
--- a/npc/instances/NydhoggsNest.txt
+++ b/npc/instances/NydhoggsNest.txt
@@ -2234,7 +2234,7 @@ sec_in02,36,167,3 script Nidhoggur Manager 4_M_FAIRYSOLDIER,1,1,{
}
mes("Input the variable number");
next();
- input(.@input);
+ input(.@input, 0);
setd(.@var$, .@input);
mesf("%s has been set to %d.", .@var$, .@input);
close();
diff --git a/npc/instances/SealedShrine.txt b/npc/instances/SealedShrine.txt
index 91771c31c..1c4f4b9d8 100644
--- a/npc/instances/SealedShrine.txt
+++ b/npc/instances/SealedShrine.txt
@@ -1108,13 +1108,15 @@ OnInstanceInit:
next();
mes("The bottom of the Main Altar trembles furiously.");
next();
- specialeffect(EF_METEORSTORM);
- specialeffect(EF_METEORSTORM);
- mesf("[%s]", strcharinfo(PC_NAME));
- mes("Watch out! Something... Something is coming.");
- 'ins_baphomet = 6;
- donpcevent(instance_npcname("ins_2f_hero_broad")+"::OnEnable");
- disablenpc(instance_npcname("The Main Altar#ss"));
+ if ('ins_baphomet == 5) {
+ specialeffect(EF_METEORSTORM);
+ specialeffect(EF_METEORSTORM);
+ mesf("[%s]", strcharinfo(PC_NAME));
+ mes("Watch out! Something... Something is coming.");
+ 'ins_baphomet = 6;
+ donpcevent(instance_npcname("ins_2f_hero_broad")+"::OnEnable");
+ disablenpc(instance_npcname("The Main Altar#ss"));
+ }
close();
} else {
mes("An evil power, too terrible to describe, lies under the great altar radiating a violet color.");
diff --git a/npc/jobs/2-2/alchemist.txt b/npc/jobs/2-2/alchemist.txt
index 634e0753b..3db39f11c 100644
--- a/npc/jobs/2-2/alchemist.txt
+++ b/npc/jobs/2-2/alchemist.txt
@@ -567,33 +567,39 @@ alde_alche,175,107,3 script Fastidious Alchemist#am 4_M_ALCHE_B,{
mes "[Raspuchin Gregory]";
mes "12 + 23 + 34 + 45 = ?";
next;
- input .@input;
- if (.@input != 114) .@w_point += 1;
+ input(.@input);
+ if (.@input != 114)
+ .@w_point += 1;
mes "[Raspuchin Gregory]";
mes "1000 - 36 - 227 - 348 = ?";
next;
- input .@input;
- if (.@input != 389) .@w_point += 1;
+ input(.@input);
+ if (.@input != 389)
+ .@w_point += 1;
mes "[Raspuchin Gregory]";
mes "14 * 17 * 3 = ?";
next;
- input .@input;
- if (.@input != 714) .@w_point += 1;
+ input(.@input);
+ if (.@input != 714)
+ .@w_point += 1;
mes "[Raspuchin Gregory]";
mes "9765 / 3 / 5 / 7 = ?";
next;
- input .@input;
- if (.@input != 93) .@w_point += 1;
+ input(.@input);
+ if (.@input != 93)
+ .@w_point += 1;
mes "[Raspuchin Gregory]";
mes "(47 * 28) - (1376 / 4) = ?";
next;
- input .@input;
- if (.@input != 972) .@w_point += 1;
+ input(.@input);
+ if (.@input != 972)
+ .@w_point += 1;
mes "[Raspuchin Gregory]";
mes "(2646 / 7) + (13 * 28) = ?";
next;
- input .@input;
- if (.@input != 742) .@w_point += 1;
+ input(.@input);
+ if (.@input != 742)
+ .@w_point += 1;
mes "[Raspuchin Gregory]";
mesf("How much do\r"
"12 %s,\r"
@@ -604,8 +610,9 @@ alde_alche,175,107,3 script Fastidious Alchemist#am 4_M_ALCHE_B,{
getitemname(Wing_Of_Butterfly),
getitemname(Wing_Of_Fly));
next;
- input .@input;
- if (.@input != 909) .@w_point += 1;
+ input(.@input);
+ if (.@input != 909)
+ .@w_point += 1;
mes "[Raspuchin Gregory]";
mesf("What is the\r"
"total weight of\r"
@@ -615,8 +622,9 @@ alde_alche,175,107,3 script Fastidious Alchemist#am 4_M_ALCHE_B,{
getitemname(Helm),
getitemname(Coat));
next;
- input .@input;
- if (.@input != 450) .@w_point += 1;
+ input(.@input);
+ if (.@input != 450)
+ .@w_point += 1;
mes "[Raspuchin Gregory]";
mesf("What is the\r"
"total defense of\r"
@@ -632,8 +640,9 @@ alde_alche,175,107,3 script Fastidious Alchemist#am 4_M_ALCHE_B,{
getitemname(Boots),
getitemname(Ear_Mufs));
next;
- input .@input;
- if (.@input != 20) .@w_point += 1;
+ input(.@input);
+ if (.@input != 20)
+ .@w_point += 1;
mes "[Raspuchin Gregory]";
mesf("If you buy 5 %s\r"
"with a 24%% discount\r"
@@ -642,45 +651,53 @@ alde_alche,175,107,3 script Fastidious Alchemist#am 4_M_ALCHE_B,{
"do you earn?",
getitemname(Helm));
next;
- input .@input;
- if (.@input != 8800) .@w_point += 1;
+ input(.@input);
+ if (.@input != 8800)
+ .@w_point += 1;
break;
case 2:
mes "[Raspuchin Gregory]";
mes "13 + 25 + 37 + 48 = ?";
next;
- input .@input;
- if (.@input != 123) .@w_point += 1;
+ input(.@input);
+ if (.@input != 123)
+ .@w_point += 1;
mes "[Raspuchin Gregory]";
mes "1000 - 58 - 214 - 416 = ?";
next;
- input .@input;
- if (.@input != 312) .@w_point += 1;
+ input(.@input);
+ if (.@input != 312)
+ .@w_point += 1;
mes "[Raspuchin Gregory]";
mes "12 * 24 * 3 = ?";
next;
- input .@input;
- if (.@input != 864) .@w_point += 1;
+ input(.@input);
+ if (.@input != 864)
+ .@w_point += 1;
mes "[Raspuchin Gregory]";
mes "10530 / 3 / 5 / 2 = ?";
next;
- input .@input;
- if (.@input != 351) .@w_point += 1;
+ input(.@input);
+ if (.@input != 351)
+ .@w_point += 1;
mes "[Raspuchin Gregory]";
mes "(35 * 19) - (1792 / 7) = ?";
next;
- input .@input;
- if (.@input != 409) .@w_point += 1;
+ input(.@input);
+ if (.@input != 409)
+ .@w_point += 1;
mes "[Raspuchin Gregory]";
mes "(2368 / 8) + (24 * 17) = ?";
next;
- input .@input;
- if (.@input != 704) .@w_point += 1;
+ input(.@input);
+ if (.@input != 704)
+ .@w_point += 1;
mes "[Raspuchin Gregory]";
mes "(2646 / 7) + (13 * 28) = ?";
next;
- input .@input;
- if (.@input != 742) .@w_point += 1;
+ input(.@input);
+ if (.@input != 742)
+ .@w_point += 1;
mes "[Raspuchin Gregory]";
mesf("What is the\r"
"total price of\r"
@@ -692,8 +709,9 @@ alde_alche,175,107,3 script Fastidious Alchemist#am 4_M_ALCHE_B,{
getitemname(Spectacles),
getitemname(Booby_Trap));
next;
- input .@input;
- if (.@input != 934) .@w_point += 1;
+ input(.@input);
+ if (.@input != 934)
+ .@w_point += 1;
mes "[Raspuchin Gregory]";
mesf("What is the\r"
"total weight of\r"
@@ -703,8 +721,9 @@ alde_alche,175,107,3 script Fastidious Alchemist#am 4_M_ALCHE_B,{
getitemname(Cap),
getitemname(Boots));
next;
- input .@input;
- if (.@input != 550) .@w_point += 1;
+ input(.@input);
+ if (.@input != 550)
+ .@w_point += 1;
mes "[Raspuchin Gregory]";
mesf("What is the\r"
"total defense of\r"
@@ -720,8 +739,9 @@ alde_alche,175,107,3 script Fastidious Alchemist#am 4_M_ALCHE_B,{
getitemname(Sahkkat),
getitemname(Glasses));
next;
- input .@input;
- if (.@input != 16) .@w_point += 1;
+ input(.@input);
+ if (.@input != 16)
+ .@w_point += 1;
mes "[Raspuchin Gregory]";
mesf("How much profit do you\r"
"make if you buy %s\r"
@@ -730,40 +750,47 @@ alde_alche,175,107,3 script Fastidious Alchemist#am 4_M_ALCHE_B,{
"the normal price?",
getitemname(Tights));
next;
- input .@input;
- if (.@input != 8520) .@w_point += 1;
+ input(.@input);
+ if (.@input != 8520)
+ .@w_point += 1;
break;
case 3:
mes "[Raspuchin Gregory]";
mes "12 + 23 + 34 + 45 = ?";
next;
- input .@input;
- if (.@input != 114) .@w_point += 1;
+ input(.@input);
+ if (.@input != 114)
+ .@w_point += 1;
mes "[Raspuchin Gregory]";
mes "1000 - 58 - 214 - 416 = ?";
next;
- input .@input;
- if (.@input != 312) .@w_point += 1;
+ input(.@input);
+ if (.@input != 312)
+ .@w_point += 1;
mes "[Raspuchin Gregory]";
mes "14 * 17 * 3 = ?";
next;
- input .@input;
- if (.@input != 714) .@w_point += 1;
+ input(.@input);
+ if (.@input != 714)
+ .@w_point += 1;
mes "[Raspuchin Gregory]";
mes "10530 / 3 / 5 / 2 = ?";
next;
- input .@input;
- if (.@input != 351) .@w_point += 1;
+ input(.@input);
+ if (.@input != 351)
+ .@w_point += 1;
mes "[Raspuchin Gregory]";
mes "(47 * 28) - (1376 / 4) = ?";
next;
- input .@input;
- if (.@input != 972) .@w_point += 1;
+ input(.@input);
+ if (.@input != 972)
+ .@w_point += 1;
mes "[Raspuchin Gregory]";
mes "(2646 / 7) + (13 * 28) = ?";
next;
- input .@input;
- if (.@input != 742) .@w_point += 1;
+ input(.@input);
+ if (.@input != 742)
+ .@w_point += 1;
mes "[Raspuchin Gregory]";
mesf("What is the\r"
"total cost of\r"
@@ -775,8 +802,9 @@ alde_alche,175,107,3 script Fastidious Alchemist#am 4_M_ALCHE_B,{
getitemname(Green_Potion),
getitemname(Wing_Of_Fly));
next;
- input .@input;
- if (.@input != 798) .@w_point += 1;
+ input(.@input);
+ if (.@input != 798)
+ .@w_point += 1;
mes "[Raspuchin Gregory]";
mesf("What is the\r"
"total weight of\r"
@@ -786,8 +814,9 @@ alde_alche,175,107,3 script Fastidious Alchemist#am 4_M_ALCHE_B,{
getitemname(Cap),
getitemname(Boots));
next;
- input .@input;
- if (.@input != 480) .@w_point += 1;
+ input(.@input);
+ if (.@input != 480)
+ .@w_point += 1;
mes "[Raspuchin Gregory]";
mesf("What is the\r"
"total defense of\r"
@@ -800,8 +829,9 @@ alde_alche,175,107,3 script Fastidious Alchemist#am 4_M_ALCHE_B,{
getitemname(Muffler),
getitemname(Eye_Bandage));
next;
- input .@input;
- if (.@input != 12) .@w_point += 1;
+ input(.@input);
+ if (.@input != 12)
+ .@w_point += 1;
mes "[Raspuchin Gregory]";
mesf("If you buy 4 Padded Armors\r"
"at a 24%% discount and sell\r"
@@ -810,8 +840,9 @@ alde_alche,175,107,3 script Fastidious Alchemist#am 4_M_ALCHE_B,{
"you make from this sale?",
getitemname(Padded_Armor));
next;
- input .@input;
- if (.@input != 7680) .@w_point += 1;
+ input(.@input);
+ if (.@input != 7680)
+ .@w_point += 1;
}
if (.@w_point == 0) {
mes "[Raspuchin Gregory]";
diff --git a/npc/jobs/2-2/bard.txt b/npc/jobs/2-2/bard.txt
index e44299193..d75ec7458 100644
--- a/npc/jobs/2-2/bard.txt
+++ b/npc/jobs/2-2/bard.txt
@@ -499,7 +499,7 @@ comodo,226,123,5 script Wandering Bard 2_M_BARD_ORIENT,{
mes "The evil giant Papner,";
mes "Turned into a dragon and ate him.";
next;
- input .@Song$;
+ input(.@Song$);
if (.@Song$ != "There was a man")
.@w_point += 1;
@@ -510,7 +510,7 @@ comodo,226,123,5 script Wandering Bard 2_M_BARD_ORIENT,{
mes "The evil giant Papner,";
mes "Turned into a dragon and ate him.";
next;
- input .@Song$;
+ input(.@Song$);
if (.@Song$ != "who was said to be immortal.")
.@w_point += 1;
@@ -521,7 +521,7 @@ comodo,226,123,5 script Wandering Bard 2_M_BARD_ORIENT,{
mes "The evil giant Papner,";
mes "Turned into a dragon and ate him.";
next;
- input .@Song$;
+ input(.@Song$);
if (.@Song$ != "His name Jichfreid,")
.@w_point += 1;
@@ -532,7 +532,7 @@ comodo,226,123,5 script Wandering Bard 2_M_BARD_ORIENT,{
mes "The evil giant Papner,";
mes "Turned into a dragon and ate him.";
next;
- input .@Song$;
+ input(.@Song$);
if (.@Song$ != "Son of the hero Jichmunt.")
.@w_point += 1;
@@ -543,7 +543,7 @@ comodo,226,123,5 script Wandering Bard 2_M_BARD_ORIENT,{
mes "The evil giant Papner,^000000";
mes "Turned into a dragon and ate him.";
next;
- input .@Song$;
+ input(.@Song$);
if (.@Song$ != "The evil giant Papner,")
.@w_point += 1;
@@ -554,7 +554,7 @@ comodo,226,123,5 script Wandering Bard 2_M_BARD_ORIENT,{
mes "The evil giant Papner,";
mes "Turned into a dragon and ate him.^000000";
next;
- input .@Song$;
+ input(.@Song$);
if (.@Song$ != "Turned into a dragon and ate him.")
.@w_point += 1;
}
@@ -566,7 +566,7 @@ comodo,226,123,5 script Wandering Bard 2_M_BARD_ORIENT,{
mes "At first he only sold Red Potions.";
mes "Some say he sold Sweet Potatoes, too.";
next;
- input .@Song$;
+ input(.@Song$);
if (.@Song$ != "A Merchant without money or equipment,")
.@w_point += 1;
@@ -577,7 +577,7 @@ comodo,226,123,5 script Wandering Bard 2_M_BARD_ORIENT,{
mes "At first he only sold Red Potions.";
mes "Some say he sold Sweet Potatoes, too.";
next;
- input .@Song$;
+ input(.@Song$);
if (.@Song$ != "a Merchant that couldn't sell anything.")
.@w_point += 1;
@@ -588,7 +588,7 @@ comodo,226,123,5 script Wandering Bard 2_M_BARD_ORIENT,{
mes "At first he only sold Red Potions.";
mes "Some say he sold Sweet Potatoes, too.";
next;
- input .@Song$;
+ input(.@Song$);
if (.@Song$ != "But he was too proud to beg.")
.@w_point += 1;
@@ -599,7 +599,7 @@ comodo,226,123,5 script Wandering Bard 2_M_BARD_ORIENT,{
mes "At first he only sold Red Potions.";
mes "Some say he sold Sweet Potatoes, too.";
next;
- input .@Song$;
+ input(.@Song$);
if (.@Song$ != "So he gathered some money selling items.")
.@w_point += 1;
@@ -610,7 +610,7 @@ comodo,226,123,5 script Wandering Bard 2_M_BARD_ORIENT,{
mes "At first he only sold Red Potions.^000000";
mes "Some say he sold Sweet Potatoes, too.";
next;
- input .@Song$;
+ input(.@Song$);
if (.@Song$ != "At first he only sold Red Potions.")
.@w_point += 1;
@@ -621,7 +621,7 @@ comodo,226,123,5 script Wandering Bard 2_M_BARD_ORIENT,{
mes "At first he only sold Red Potions.";
mes "Some say he sold Sweet Potatoes, too.^000000";
next;
- input .@Song$;
+ input(.@Song$);
if (.@Song$ != "Some say he sold Sweet Potatoes, too.")
.@w_point += 1;
}
@@ -633,7 +633,7 @@ comodo,226,123,5 script Wandering Bard 2_M_BARD_ORIENT,{
mes "Her sweet apples in her basket,";
mes "All thanks to her sweet apples.";
next;
- input .@Song$;
+ input(.@Song$);
if (.@Song$ != "All Gods never age.")
.@w_point += 1;
@@ -644,7 +644,7 @@ comodo,226,123,5 script Wandering Bard 2_M_BARD_ORIENT,{
mes "Her sweet apples in her basket,";
mes "All thanks to her sweet apples.";
next;
- input .@Song$;
+ input(.@Song$);
if (.@Song$ != "The ever so Beautiful Goddess Eden,")
.@w_point += 1;
@@ -655,7 +655,7 @@ comodo,226,123,5 script Wandering Bard 2_M_BARD_ORIENT,{
mes "Her sweet apples in her basket,";
mes "All thanks to her sweet apples.";
next;
- input .@Song$;
+ input(.@Song$);
if (.@Song$ != "Beautiful and graceful Goddess Eden,")
.@w_point += 1;
@@ -666,7 +666,7 @@ comodo,226,123,5 script Wandering Bard 2_M_BARD_ORIENT,{
mes "Her sweet apples in her basket,";
mes "All thanks to her sweet apples.";
next;
- input .@Song$;
+ input(.@Song$);
if (.@Song$ != "Odin's daughter-in-law and Bragi's wife.")
.@w_point += 1;
@@ -677,7 +677,7 @@ comodo,226,123,5 script Wandering Bard 2_M_BARD_ORIENT,{
mes "Her sweet apples in her basket,^000000";
mes "All thanks to her sweet apples.";
next;
- input .@Song$;
+ input(.@Song$);
if (.@Song$ != "Her sweet apples in her basket,")
.@w_point += 1;
@@ -688,7 +688,7 @@ comodo,226,123,5 script Wandering Bard 2_M_BARD_ORIENT,{
mes "Her sweet apples in her basket,";
mes "All thanks to her sweet apples.^000000";
next;
- input .@Song$;
+ input(.@Song$);
if (.@Song$ != "All thanks to her sweet apples.")
.@w_point += 1;
}
@@ -700,7 +700,7 @@ comodo,226,123,5 script Wandering Bard 2_M_BARD_ORIENT,{
mes "All wandering poets are his people,";
mes "And all praise shall go to him.";
next;
- input .@Song$;
+ input(.@Song$);
if (.@Song$ != "Bragi, Bragi,")
.@w_point += 1;
@@ -711,7 +711,7 @@ comodo,226,123,5 script Wandering Bard 2_M_BARD_ORIENT,{
mes "All wandering poets are his people,";
mes "And all praise shall go to him.";
next;
- input .@Song$;
+ input(.@Song$);
if (.@Song$ != "Forever call the poets name.")
.@w_point += 1;
@@ -722,7 +722,7 @@ comodo,226,123,5 script Wandering Bard 2_M_BARD_ORIENT,{
mes "All wandering poets are his people,";
mes "And all praise shall go to him.";
next;
- input .@Song$;
+ input(.@Song$);
if (.@Song$ != "My songs are his breath,")
.@w_point += 1;
@@ -733,7 +733,7 @@ comodo,226,123,5 script Wandering Bard 2_M_BARD_ORIENT,{
mes "All wandering poets are his people,";
mes "And all praise shall go to him.";
next;
- input .@Song$;
+ input(.@Song$);
if (.@Song$ != "My mind is his will,")
.@w_point += 1;
@@ -744,7 +744,7 @@ comodo,226,123,5 script Wandering Bard 2_M_BARD_ORIENT,{
mes "All wandering poets are his people,^000000";
mes "And all praise shall go to him.";
next;
- input .@Song$;
+ input(.@Song$);
if (.@Song$ != "All wandering poets are his people,")
.@w_point += 1;
@@ -755,7 +755,7 @@ comodo,226,123,5 script Wandering Bard 2_M_BARD_ORIENT,{
mes "All wandering poets are his people,";
mes "And all praise shall go to him.^000000";
next;
- input .@Song$;
+ input(.@Song$);
if (.@Song$ != "And all praise shall go to him.")
.@w_point += 1;
}
@@ -767,7 +767,7 @@ comodo,226,123,5 script Wandering Bard 2_M_BARD_ORIENT,{
mes "Let the castle walls ring.";
mes "This day will never come again!";
next;
- input .@Song$;
+ input(.@Song$);
if (.@Song$ != "Louder, louder, louder.")
.@w_point += 1;
@@ -778,7 +778,7 @@ comodo,226,123,5 script Wandering Bard 2_M_BARD_ORIENT,{
mes "Let the castle walls ring.";
mes "This day will never come again!";
next;
- input .@Song$;
+ input(.@Song$);
if (.@Song$ != "Give strength to the warriors!")
.@w_point += 1;
@@ -789,7 +789,7 @@ comodo,226,123,5 script Wandering Bard 2_M_BARD_ORIENT,{
mes "Let the castle walls ring.";
mes "This day will never come again!";
next;
- input .@Song$;
+ input(.@Song$);
if (.@Song$ != "Shake the sky and roar through the land.")
.@w_point += 1;
@@ -800,7 +800,7 @@ comodo,226,123,5 script Wandering Bard 2_M_BARD_ORIENT,{
mes "Let the castle walls ring.";
mes "This day will never come again!";
next;
- input .@Song$;
+ input(.@Song$);
if (.@Song$ != "Make my heart pound again!")
.@w_point += 1;
@@ -811,7 +811,7 @@ comodo,226,123,5 script Wandering Bard 2_M_BARD_ORIENT,{
mes "Let the castle walls ring.^000000";
mes "This day will never come again!";
next;
- input .@Song$;
+ input(.@Song$);
if (.@Song$ != "Let the castle walls ring.")
.@w_point += 1;
@@ -822,7 +822,7 @@ comodo,226,123,5 script Wandering Bard 2_M_BARD_ORIENT,{
mes "Let the castle walls ring.";
mes "This day will never come again!^000000";
next;
- input .@Song$;
+ input(.@Song$);
if (.@Song$ != "This day will never come again!")
.@w_point += 1;
}
diff --git a/npc/jobs/2-2/rogue.txt b/npc/jobs/2-2/rogue.txt
index 311915097..656b9eed4 100644
--- a/npc/jobs/2-2/rogue.txt
+++ b/npc/jobs/2-2/rogue.txt
@@ -1292,7 +1292,7 @@ in_rogue,270,130,0 script he_to_rogue#rg WARPNPC,1,1,{
OnTouch:
mes "^3355FFThe door is locked. You'll need to enter the four number combination to open it.^000000";
next;
- input .@input;
+ input(.@input);
if (.@input < 1 || .@input > 10000) {
if (ROGUE_Q == 12)
mes "^3355FFIt didn't work. Please re-enter the four number combination.^000000";
@@ -1300,7 +1300,7 @@ OnTouch:
mes "^3355FFPlease enter a combination of four numbers.^000000";
close;
}
- else if (.@input == 3019) {
+ if (.@input == 3019) {
if (ROGUE_Q == 12) {
mes "^3355FFThe door";
mes "has opened.^000000";
@@ -1308,8 +1308,7 @@ OnTouch:
warp "in_rogue",10,21;
ROGUE_Q = 12;
end;
- }
- else {
+ } else {
mes "[HermanthornJr.]";
mes "Well...";
mes "Didn't I tell you";
@@ -1318,11 +1317,9 @@ OnTouch:
close;
}
}
- else {
- mes "^3355FFThe door";
- mes "is still locked.^000000";
- close;
- }
+ mes "^3355FFThe door";
+ mes "is still locked.^000000";
+ close;
}
in_rogue,200,389,0 script gen_ro#1 FAKE_NPC,3,3,{
diff --git a/npc/jobs/valkyrie.txt b/npc/jobs/valkyrie.txt
index d4f1d3982..71bbb75ac 100644
--- a/npc/jobs/valkyrie.txt
+++ b/npc/jobs/valkyrie.txt
@@ -216,6 +216,70 @@ yuno_in02,88,164,5 script Metheus Sylphe#Library 2_M_SAGE_B,{
if (valkyrie_Q == 0) {
mes "[Metheus Sylphe]";
mes "Welcome to the Library of the Schweicherbil Magic Academy.";
+ if (RENEWAL) {
+ if (questprogress(5160) != 0) { // Quest #5160 - Library Mistake
+ mes("I assume you have come here to confirm the status of the library guards report?");
+ next();
+ if (select((countitem(Captured_Book) > 0 ? "I'm here for the book." : "Tell me the report."), "Donate Zeny") == 1) {
+ if (countitem(Captured_Book) != 0) {
+ mes("[Metheus Sylphe]");
+ mes("Just now the libary guard report aren't helpful, but there is a reason for that...");
+ next();
+ mes("[Metheus Sylphe]");
+ mes("Most importantly, you found the escaped book!");
+ next();
+ mes("[Metheus Sylphe]");
+ mes("As promised, I'll allow you to read the book of Ymir, you may now go in and read the book.");
+ if (countitem(Captured_Book) == 0)
+ close();
+ delitem(Captured_Book, countitem(Captured_Book));
+ valkyrie_Q = 1;
+ if (questprogress(5160) != 0)
+ completequest 5160;
+ close();
+ }
+ mes("[Metheus Sylphe]");
+ mes("This is a note from the library guards we were searching for.");
+ next();
+ mes("[Metheus Sylphe]");
+ mes("Search for the escaped book near the Juno Fields.");
+ next();
+ mes("[Metheus Sylphe]");
+ mes("However, there is no detailed description of the location. I'm glad that the search range was reduced.");
+ next();
+ mes("[Metheus Sylphe]");
+ mes("Search for the escaped book near the Juno Fields.");
+ next();
+ mes("[Metheus Sylphe]");
+ mes("Why don't you try search around Kiel Heir Area first.");
+ next();
+ mes("[Metheus Sylphe]");
+ mes("Because there are more than one book escaped.");
+ close();
+ }
+ if (Zeny < 1285000) {
+ mes("[Metheus Sylphe]");
+ mes("It's all good, but I don't think there's enough Zeny to make donation. Donation requires 1,285,000 Zeny.");
+ close();
+ }
+ mes("[Metheus Sylphe]");
+ mes("Ah?! Did you give up searching for the escaped books?");
+ next();
+ if (select("Unable to tell.", "Just Donate..") != 2) {
+ mes("[Metheus Sylphe]");
+ mes("Haha. I thought you picked up Zeny anywhere.");
+ close();
+ }
+ Zeny -= 1285000;
+ valkyrie_Q = 1;
+ setquest(1000);
+ if (questprogress(5160) != 0)
+ completequest(5160);
+ mes("[Metheus Sylphe]");
+ mes("Thank you, your donation will be used for a good cause. You may now go in and read the book.");
+ close();
+ }
+ }
mes "I assume you have come here";
mes "to read the 'Book of Ymir.'";
next;
@@ -230,10 +294,12 @@ yuno_in02,88,164,5 script Metheus Sylphe#Library 2_M_SAGE_B,{
mes "donation amount is";
mes "1,285,000 zeny.";
next;
- if (select("Donate.", "Cancel.") == 1) {
+ switch (select("Donate.", (RENEWAL ? "Can't we just see it?" : ""), "Cancel.")) {
+ case 1:
if (Zeny >= 1285000) {
Zeny -= 1285000;
valkyrie_Q = 1;
+ setquest(1000);
mes "[Metheus Sylphe]";
mes "Thank you, your donation will be used for a good cause. You may";
mes "now go in and read the book.";
@@ -242,20 +308,116 @@ yuno_in02,88,164,5 script Metheus Sylphe#Library 2_M_SAGE_B,{
mes "[Metheus Sylphe]";
mes "Unfortunately, you don't seem to possess enough zeny at the moment. Please check your funds and come back again.";
close;
+ case 2:
+ mes("[Metheus Sylphe]");
+ mes("It is to preserve the original 'Book of Ymir,' we have decided to accept donations from people who wish to read the copy we have provided.");
+ next();
+ mes("[Metheus Sylphe]");
+ mes("Although I understand your feeling, but that's the rule.");
+ next();
+ select("But, I dont have enough Zeny.");
+ mes("[Metheus Sylphe]");
+ mes("The rules stated that everyone must made a donation, if they want to read the book...");
+ next();
+ mes("[Metheus Sylphe]");
+ mes("I guess sometime when life is difficult, we may not follow with the principle?");
+ next();
+ if (select("I must follow the principle!", "I'll do anything.") != 2) {
+ close();
+ }
+ mes("[Metheus Sylphe]");
+ mes("I see enthusiasm within you, but I couldn't let you enter for free.");
+ next();
+ mes("[Metheus Sylphe]");
+ mes("So help me resolve the problems happen in the Schweicherbil Magic Academy's library.");
+ mes("I'll help you to read the book of Ymir.");
+ next();
+ while (true) {
+ switch (select("What happened?", "Where does it escaped?", "I'll find it.", "Ignore")) {
+ case 1:
+ mes("[Metheus Sylphe]");
+ mes("This is really a headache.");
+ mes("The library consists of a lot undisclosed books.");
+ next();
+ mes("[Metheus Sylphe]");
+ mes("For example, ^0055FFRideword Hat^000000 that would attack humans can't be disclose to the public.");
+ next();
+ mes("[Metheus Sylphe]");
+ mes("But not long ago, part of the undisclosed books escaped from the library...");
+ next();
+ mes("[Metheus Sylphe]");
+ mes("Although the library guards are currently searching for it, but failed due to lack of manpower.");
+ next();
+ continue;
+ case 2:
+ mes("[Metheus Sylphe]");
+ mes("We're still trying to figure out where it escaped to.");
+ mes("I'll inform you when the library guards have any news for it.");
+ next();
+ continue;
+ case 3:
+ mes("[Metheus Sylphe]");
+ mes("Do you already know the problem now? That's weird. Did you know anything else?");
+ next();
+ switch (select("Sorry.", "Worry about gift for girlfriend?", "Worry about the lunch?", "Worry about the escaped books?")) {
+ case 1:
+ mes("[Metheus Sylphe]");
+ mes("It seemed to be too. I think we need to know what are the problem first.");
+ next();
+ continue;
+ case 2:
+ mes("[Metheus Sylphe]");
+ mes("Isn't it polite to ask if you already have a girlfriend? But this isn't a problem.");
+ next();
+ continue;
+ case 3:
+ mes("[Metheus Sylphe]");
+ mes("It's not a problem these days because I'm not having lunch yet. You should listen to the library problem, not my problem.");
+ next();
+ continue;
+ case 4:
+ mes("[Metheus Sylphe]");
+ mes("Ah! You knew the problem already?");
+ mes("or the news already leaked to public?");
+ next();
+ mes("[Metheus Sylphe]");
+ mes("Wait a moment, the library guard has returned with the report.");
+ next();
+ mes("[Metheus Sylphe]");
+ mes("Let's hear the report before you left!");
+ if (questprogress(5160) == 0)
+ setquest(5160); // Quest #5160 - Library Mistake
+ close();
+ }
+ case 4:
+ close();
+ }
+ }
+ end;
+ default:
+ break;
}
mes "[Metheus Sylphe]";
mes "Take your time, and";
mes "enjoy your travels.";
close;
}
- mes "[Metheus Sylphe]";
- mes "Once again, thank you for your generous donation. Feel free to read a carbon copy of the 'Book of Ymir' at your leisure.";
- close;
+ mes("[Metheus Sylphe]");
+ if (questprogress(5160) != 0)
+ mes("Once again, thank you for your generous assistance. Feel free to read a carbon copy of the 'Book of Ymir' at your leisure.");
+ else
+ mes("Once again, thank you for your generous donation. Feel free to read a carbon copy of the 'Book of Ymir' at your leisure.");
+ close();
}
mes "[Metheus Sylphe]";
mes "Welcome to the Library of the Schweicherbil Magic Academy.";
mes "Here, we have a countless number of books. Please take your time and look around.";
close;
+
+OnKill:
+ if (questprogress(5160) == 1) // Quest #5160 - Library Mistake
+ getitem(Captured_Book, 1);
+ end;
}
yuno_in02,93,207,1 script Book of Ymir HIDDEN_NPC,{
diff --git a/npc/kafras/dts_warper.txt b/npc/kafras/dts_warper.txt
index a482652ed..057429ae0 100644
--- a/npc/kafras/dts_warper.txt
+++ b/npc/kafras/dts_warper.txt
@@ -1209,8 +1209,8 @@ sec_in02,17,160,4 script Vote Globalvar Girl#yuno 4_F_OPERATION,{
mes "[Christy's Maid]";
mes "Please enter a number among 0 and 1000.";
next;
- input .@input;
- if ((.@input < 0) || (.@input > 1000)) {
+ input(.@input);
+ if (.@input < 0 || .@input > 1000) {
mes "[Christy's Maid]";
mes "The value is incorrect.";
close;
@@ -1223,8 +1223,8 @@ sec_in02,17,160,4 script Vote Globalvar Girl#yuno 4_F_OPERATION,{
mes "[Christy's Maid]";
mes "Please enter a number among 0 and 1000.";
next;
- input .@input;
- if ((.@input < 0) || (.@input > 1000)) {
+ input(.@input);
+ if (.@input < 0 || .@input > 1000) {
mes "[Christy's Maid]";
mes "The value is incorrect.";
close;
@@ -1237,8 +1237,8 @@ sec_in02,17,160,4 script Vote Globalvar Girl#yuno 4_F_OPERATION,{
mes "[Christy's Maid]";
mes "Please enter a number among 0 and 1000.";
next;
- input .@input;
- if ((.@input < 0) || (.@input > 1000)) {
+ input(.@input);
+ if (.@input < 0 || .@input > 1000) {
mes "[Christy's Maid]";
mes "The value is incorrect.";
close;
@@ -1251,8 +1251,8 @@ sec_in02,17,160,4 script Vote Globalvar Girl#yuno 4_F_OPERATION,{
mes "[Christy's Maid]";
mes "Please enter a number among 0 and 3.";
next;
- input .@input;
- if ((.@input < 0) || (.@input > 3)) {
+ input(.@input);
+ if (.@input < 0 || .@input > 3) {
mes "[Christy's Maid]";
mes "The value is incorrect.";
close;
@@ -1265,8 +1265,8 @@ sec_in02,17,160,4 script Vote Globalvar Girl#yuno 4_F_OPERATION,{
mes "[Christy's Maid]";
mes "Please enter a number among 0 and 1000.";
next;
- input .@input;
- if ((.@input < 0) || (.@input > 1000)) {
+ input(.@input);
+ if (.@input < 0 || .@input > 1000) {
mes "[Christy's Maid]";
mes "The value is incorrect.";
close;
@@ -1279,8 +1279,8 @@ sec_in02,17,160,4 script Vote Globalvar Girl#yuno 4_F_OPERATION,{
mes "[Christy's Maid]";
mes "Please enter a number among 0 and 2.";
next;
- input .@input;
- if ((.@input < 0) || (.@input > 2)) {
+ input(.@input);
+ if (.@input < 0 || .@input > 2) {
mes "[Christy's Maid]";
mes "The value is incorrect.";
close;
@@ -1293,8 +1293,8 @@ sec_in02,17,160,4 script Vote Globalvar Girl#yuno 4_F_OPERATION,{
mes "[Christy's Maid]";
mes "Please enter a number among 0 and 2.";
next;
- input .@input;
- if ((.@input < 0) || (.@input > 2)) {
+ input(.@input);
+ if (.@input < 0 || .@input > 2) {
mes "[Christy's Maid]";
mes "The value is incorrect.";
close;
@@ -1307,8 +1307,8 @@ sec_in02,17,160,4 script Vote Globalvar Girl#yuno 4_F_OPERATION,{
mes "[Christy's Maid]";
mes "Please enter a number among 0 and 10000.";
next;
- input .@input;
- if ((.@input < 0) || (.@input > 10000)) {
+ input(.@input);
+ if (.@input < 0 || .@input > 10000) {
mes "[Christy's Maid]";
mes "The value is incorrect.";
close;
diff --git a/npc/kafras/functions_kafras.txt b/npc/kafras/functions_kafras.txt
index 90334cc6e..d9253cd13 100644
--- a/npc/kafras/functions_kafras.txt
+++ b/npc/kafras/functions_kafras.txt
@@ -490,7 +490,7 @@ function script F_CheckKafCode {
return;
mes "Enter your storage password:";
@code_ = 0;
- input @code_;
+ input(@code_, 0);
if (@code_ != #kafra_code) {
dispbottom "Wrong storage password.";
close2;
@@ -601,7 +601,7 @@ function script F_EntKafCode {
@kafcode_try = 0;
logmes "Hack: Tried to fit storage password.";
}
- if (input(@code_) == 1) {
+ if (input(@code_, 0) == 1) {
mes "You can't use such big password.";
return 0;
}
diff --git a/npc/merchants/alchemist.txt b/npc/merchants/alchemist.txt
index ea926ae6b..cdfdd06fc 100644
--- a/npc/merchants/alchemist.txt
+++ b/npc/merchants/alchemist.txt
@@ -64,22 +64,21 @@ alde_alche,24,188,3 script Guild Dealer 2_M_ALCHE,{
mes "Enter '0' if you want to quit.";
next;
while(1) {
- input .@input, 0, 2001;
- if (.@input == 0) {
+ input(.@input);
+ if (.@input <= 0) {
mes "[Gever Al Sharp]";
mes "The deal was cancelled.";
mes "Come again next time.";
close;
}
- else if (.@input < 1 || .@input > 2000) {
+ if (.@input > 2000) {
mes "[Gever Al Sharp]";
mes "The number must";
mes "be less than 2000.";
next;
+ continue;
}
- else {
- break;
- }
+ break;
}
if (RENEWAL) {
.@sell = .@input * 250;
diff --git a/npc/merchants/ammo_boxes.txt b/npc/merchants/ammo_boxes.txt
index 69310388f..aef74f81f 100644
--- a/npc/merchants/ammo_boxes.txt
+++ b/npc/merchants/ammo_boxes.txt
@@ -102,8 +102,8 @@ function script Func_Casing {
mes "the number of Magazines you";
mes "want to receive. If you want to cancel, then just enter ''0.''";
next;
- input .@amount;
- if (.@amount > 50 || .@amount == 0) {
+ input(.@amount);
+ if (.@amount > 50 || .@amount <= 0) {
mes "[Kenny]";
mes "Hey, I can't give you";
mes "that many Magazines.";
diff --git a/npc/merchants/ammo_dealer.txt b/npc/merchants/ammo_dealer.txt
index 490be66ba..313f54653 100644
--- a/npc/merchants/ammo_dealer.txt
+++ b/npc/merchants/ammo_dealer.txt
@@ -97,7 +97,7 @@ function script Bullet_Trade {
mes "that you'd like. If you want to";
mes "cancel, then just enter ''0.''";
next;
- input .@amount;
+ input(.@amount);
if (.@amount < 1 || .@amount > 500) {
mes "[Tony]";
mes "Hey, I can't give you";
diff --git a/npc/merchants/buying_shops.txt b/npc/merchants/buying_shops.txt
index eaf62bbe1..ff368d910 100644
--- a/npc/merchants/buying_shops.txt
+++ b/npc/merchants/buying_shops.txt
@@ -67,31 +67,32 @@ que_job01,68,84,1 script Black Marketeer#Buying 4_M_SITDOWN,{
mes "It'll cost 500 zeny for each one.";
next;
while(1) {
- input .@input;
+ input(.@input);
mes "[Mr. Jass]";
- if (.@input == 0) {
+ if (.@input <= 0) {
mes "Don't you need those licenses?";
close;
- } else if (.@input > 10) {
+ }
+ if (.@input > 10) {
mes "I can only make up to 10 at a time, you know.";
next;
- } else {
- mes "It'll cost "+(.@input*500)+" zeny.";
- if (Zeny < (.@input*500)) {
- mes "but you don't have enough money.";
- next;
- mes "[Mr. Jass]";
- mes "Don't you know the basics of business? Everything has a price.";
- mes "If you want something, you gotta pay for it.";
- } else {
- mes "Ha... Ha ha ha!";
- mes "Mr. Hugh, I'll take over your license business. You'll see!";
- mes "*Giggle Giggle*";
- getitem Buy_Market_Permit2,.@input;
- Zeny -= (.@input*500);
- }
- close;
+ continue;
}
+ mes "It'll cost "+(.@input*500)+" zeny.";
+ if (Zeny < (.@input*500)) {
+ mes "but you don't have enough money.";
+ next;
+ mes "[Mr. Jass]";
+ mes "Don't you know the basics of business? Everything has a price.";
+ mes "If you want something, you gotta pay for it.";
+ close();
+ }
+ mes "Ha... Ha ha ha!";
+ mes "Mr. Hugh, I'll take over your license business. You'll see!";
+ mes "*Giggle Giggle*";
+ getitem Buy_Market_Permit2,.@input;
+ Zeny -= (.@input*500);
+ close;
}
case 2:
mes "[Mr. Jass]";
@@ -139,26 +140,27 @@ alberta_in,58,52,4 script Purchasing Team#Buying 1_M_ORIENT01,{
mes "How many licenses do you need?";
next;
while(1) {
- input .@input;
+ input(.@input);
mes "[Mr. Hugh]";
- if (.@input == 0) {
+ if (.@input <= 0) {
mes "You have cancelled the trade.";
mes "Have a good day.";
close;
- } else if (.@input > 50) {
+ }
+ if (.@input > 50) {
mes "Please enter a value of 50 or less.";
next;
+ continue;
+ }
+ mes "It'll cost "+(.@input*200)+" zeny for "+.@input+" licenses.";
+ if (Zeny < (.@input*200)) {
+ mes "but you don't seem to have enough money.";
} else {
- mes "It'll cost "+(.@input*200)+" zeny for "+.@input+" licenses.";
- if (Zeny < (.@input*200)) {
- mes "but you don't seem to have enough money.";
- } else {
- mes "Thank you for your patronage.";
- getitem Buy_Market_Permit,.@input; //Buy_Stall_Permit
- Zeny -= (.@input*200);
- }
- close;
+ mes "Thank you for your patronage.";
+ getitem Buy_Market_Permit,.@input; //Buy_Stall_Permit
+ Zeny -= (.@input*200);
}
+ close;
}
} else {
mes "I'm Hugh from the Purchasing Team at the Alberta Merchant Guild.";
@@ -234,7 +236,7 @@ alberta_in,58,52,4 script Purchasing Team#Buying 1_M_ORIENT01,{
mes "You've made a good decision.";
mes "Please give me the registration fee, and sign right here....";
next;
- input .@name$;
+ input(.@name$);
mes "[Mr. Hugh]";
mes .@name$+"....";
mes "I like your handwriting.";
diff --git a/npc/merchants/gemstone.txt b/npc/merchants/gemstone.txt
index 6028d9ddb..44be2569c 100644
--- a/npc/merchants/gemstone.txt
+++ b/npc/merchants/gemstone.txt
@@ -84,31 +84,33 @@ S_TradeGems:
mes "that you can enter is 100.";
next;
while(1) {
- input .@input,0,101;
- if (.@input == 0) {
+ input(.@input);
+ if (.@input <= 0) {
mes "[Jade]";
mes "None at all?";
mes "I guess you";
mes "changed your mind...";
close;
}
- else if (.@input > 100) {
+ if (.@input > 100) {
mes "[Jade]";
mes "Errm...";
mes "I asked you to enter";
mes "an amount no greater";
mes "than 100, remember...?";
next;
+ continue;
}
- else if (.@gems < .@input) {
+ if (.@gems < .@input) {
// Custom dialogue
mes "[Jade]";
mes "Errm...";
mes "You don't have that";
mes "many gems to trade...";
next;
+ continue;
}
- else break;
+ break;
}
delitem getarg(0),.@input * 2;
getitem getarg(1),.@input;
diff --git a/npc/merchants/hair_style.txt b/npc/merchants/hair_style.txt
index f940a5982..fd6cc1b96 100644
--- a/npc/merchants/hair_style.txt
+++ b/npc/merchants/hair_style.txt
@@ -51,15 +51,8 @@ alberta_in,55,142,7 script Hair Dresser 4_F_02,{
mes "If you wish to cancel,";
mes "please enter 0.";
next;
- input .@style;
- if(.@style > 19) {
- mes "[Veronica]";
- mes "Oops, I'm sorry, but that";
- mes "style is not available.";
- mes "Remember to enter a number";
- mes "from 1 to 19.";
- next;
- } else if(.@style == 0) {
+ input(.@style);
+ if(.@style == 0) {
mes "[Veronica]";
mes "So, how do you like the style?";
mes "Feel free to ask me about any";
@@ -68,313 +61,357 @@ alberta_in,55,142,7 script Hair Dresser 4_F_02,{
mes "hair.";
close;
}
- else {
- callsub L_cutin,.@style;
+ if (.@style < 1 || .@style > 19) {
mes "[Veronica]";
- switch(.@style) {
- case 1:
- if (Sex == SEX_MALE) {
- mes "Oh, that's 'Play Dead' style!";
- mes "It's a nice, basic haircut.";
- mes "I notice that usually the";
- mes "cute, conversative types seem";
- mes "to prefer this style.";
- close2; cutin "",255; end;
- }
- mes "Oh, that's 'First Aid' style!";
- mes "The shoulder length tresses";
- mes "are straightened for those";
- mes "no nonsense adventurers. It";
- mes "seems to be the style of";
- mes "choice for Novices.";
- close2; cutin "",255; end;
- case 2:
- if (Sex == SEX_MALE) {
- mes "Oh, that's the 'Two Handed Sword";
- mes "Mastery' style! It's perfect for";
- mes "for Swordmen who might muss their";
- mes "hair while swinging their swords";
- mes "all day long.";
- close2; cutin "",255; end;
- }
- mes "Oh, that's 'Bash' style!";
- mes "For the powerful woman that's";
- mes "not afraid to get a little";
- mes "blood on her hands, but knows";
- mes "how great her hair will look";
- mes "while wildly flailing a sword.";
- close2; cutin "",255; end;
- case 3:
- if (Sex == SEX_MALE) {
- mes "Oh, that's 'Napalm Beat' style!";
- mes "It's a unique look with a hint";
- mes "of eccentricity that's offset";
- mes "with a helping of elegance.";
- close2; cutin "",255; end;
- }
- mes "Oh, that's 'Frost Diver' style!";
- mes "The pigtails lend an innocent,";
- mes "demure look for those Mages";
- mes "and Wizards that usually scare";
- mes "off the boys with their spells.";
- close2; cutin "",255; end;
- case 4:
- if (Sex == SEX_MALE) {
- mes "Oh, that's the 'Double Strafe'";
- mes "style! The arrangement of the";
- mes "hair conducts ambient static";
- mes "electricity, naturally clearing";
- mes "the mind. At least, that's what";
- mes "I was taught in fashion school.";
- close2; cutin "",255; end;
- }
- mes "Oh, that's 'Arrow Shower' style!";
- mes "For the Bowswoman who doesn't";
- mes "want fashion to interfere with";
- mes "her depth perception. Much more";
- mes "attractive than those horrid";
- mes "granny-style hairbuns.";
- close2; cutin "",255; end;
- case 5:
- if (Sex == SEX_MALE) {
- mes "Oh, that's 'Angelus' style!";
- mes "It's for calm and devout people,";
- mes "as well as those bashful,";
- mes "mild-mannered types.";
- close2; cutin "",255; end;
- }
- mes "Oh, that's 'Heal' style!";
- mes "This is in trend among";
- mes "Priests and Acolytes since";
- mes "this style is appropriate";
- mes "for formal situations, but";
- mes "is also practical in battle.";
- close2; cutin "",255; end;
- case 6:
- if (Sex == SEX_MALE) {
- mes "Oh, that's 'Push Cart' style!";
- mes "It was based on the design of a";
- mes "cart...at least, that's what";
- mes "I learned in beautician school.";
- close2; cutin "",255; end;
- }
- mes "Ooh, that's 'Vending' style!";
- mes "It's the hairdo of money";
- mes "makers...and if I may say so,";
- mes "it's also economical.";
- close2; cutin "",255; end;
- case 7:
- if (Sex == SEX_MALE) {
- mes "Ooh, that's 'Envenom' style!";
- mes "It looks great on Thieves and";
- mes "and Assassins when they're";
- mes "out poisoning people and animals.";
- mes "It's fashion for the aggressive";
- mes "and eclectic~!";
- close2; cutin "",255; end;
- }
- mes "Oh, that's 'Double Attack' style!";
- mes "The adorable pigtail, paired with";
- mes "those provacative bangs are sure";
- mes "to help you steal the heart of";
- mes "some cute guy.";
- close2; cutin "",255; end;
- case 8:
- if (Sex == SEX_MALE) {
- mes "Oh, that's 'Bowling Bash' style!";
- mes "A popular style for Knights, its";
- mes "manly, rugged look tends to";
- mes "attract all of the ladies,";
- mes "and looks great on men with";
- mes "strong chins.";
- close2; cutin "",255; end;
- }
- mes "Oh, that's 'Gloria' style!";
- mes "It's very elegant and looks";
- mes "great on holy Priests. This";
- mes "style is most attractive to";
- mes "ladies who aren't that used";
- mes "to fighting with their hands.";
- close2; cutin "",255; end;
- case 9:
- if (Sex == SEX_MALE) {
- mes "Oh, that's 'Venom Dust' style!";
- mes "Definitely a look for rebels,";
- mes "the sweeping, yet decidedly";
- mes "luxorious locks seems to enchant";
- mes "girls with a fatal attraction.";
- close2; cutin "",255; end;
- }
- mes "Oh, that's 'SP Recovery' style!";
- mes "To add more body to the special";
- mes "style of these bangs, I use a";
- mes "special conditioner that makes";
- mes "you feel like you're regaining SP";
- mes "...Although, it acutally doesn't.";
- close2; cutin "",255; end;
- case 10:
- if (Sex == SEX_MALE) {
- mes "Oh, that's 'Turn Undead' style!";
- mes "This is popular among Priests";
- mes "that want a serious, yet a bit";
- mes "of a wild, agressive look.";
- mes "Definitely more attractive";
- mes "than the 'Holy Light' mullet.";
- close2; cutin "",255; end;
- }
- mes "Oh, that's 'Prepare Potion' style!";
- mes "The flared out tresses are chosen";
- mes "by beginning Alchemists, since";
- mes "early, explosive experiments would";
- mes "make their hair to stick out anyway.";
- close2; cutin "",255; end;
- case 11:
- if (Sex == SEX_MALE) {
- mes "Oh, that's 'Dragonology' style!";
- mes "It's neat and clean cut, perfect";
- mes "for studious people and looks";
- mes "great with eyeglasses. This";
- mes "is a fashion well suited to";
- mes "intellectual types.";
- close2; cutin "",255; end;
- }
- mes "Oh, that's 'Grand Cross' style!";
- mes "It's in style among those pious";
- mes "Crusaders that need hair that";
- mes "won't muss during fighting, yet";
- mes "is respectable enough to attend";
- mes "religious services.";
- close2; cutin "",255; end;
- case 12:
- if (Sex == SEX_MALE) {
- mes "Oh, that's 'Mace Mastery' style!";
- mes "A lot of care goes into making";
- mes "that tussled hair say, 'I don't";
- mes "care how I look at all.'";
- close2; cutin "",255; end;
- }
- mes "Oh, that's 'Intimidate' style!";
- mes "The Rogue women seem to like";
- mes "this style...although I imagine";
- mes "that more of them would prefer";
- mes "something wilder to match those";
- mes "stockings...";
- close2; cutin "",255; end;
- case 13:
- if (Sex == SEX_MALE) {
- mes "Oh, that's 'Thunder Storm' style!";
- mes "This hot, flamboyant hairstyle";
- mes "flares out wildly like thunder.";
- mes "...And you will too with this new look.";
- close2; cutin "",255; end;
- }
- mes "Oh, that's 'Spiritual Sphere";
- mes "Absorption' style! There's a";
- mes "charismatic quality to this";
- mes "fashion: it's tough, slightly";
- mes "tomboyish, but not so much";
- mes "that it can't be cute.";
- close2; cutin "",255; end;
- case 14:
- if (Sex == SEX_MALE) {
- mes "Oh, that's 'Encore' style!";
- mes "The elegant, flowing locks";
- mes "fit well with Bards, or men who";
- mes "appreciate the value of male";
- mes "beauty.";
- close2; cutin "",255; end;
- }
- mes "Oh, that's 'Gypsy's Kiss' style!";
- mes "Dancers seem to like this style,";
- mes "although personally, I think";
- mes "this fashion fits very well";
- mes "with glasses.";
- close2; cutin "",255; end;
- case 15:
- if (Sex == SEX_MALE) {
- mes "Oh, that's 'Grimtooth' style!";
- mes "Spiky and unkempt, this style";
- mes "is a popular counterculture";
- mes "street fashion. You might";
- mes "not want to wear your hair";
- mes "this way at a wedding, though.";
- close2; cutin "",255; end;
- }
- mes "Oh, that's 'Counter Attack' style!";
- mes "This is an intimidating look for";
- mes "girls that want to say 'You hit";
- mes "me, I'll hit you back!' It really";
- mes "emphasizes strong looking";
- mes "foreheads and cheekbones.";
- close2; cutin "",255; end;
- case 16:
- if (Sex == SEX_MALE) {
- mes "Oh, that's 'Blitz Beat' style!";
- mes "A funky and lively fashion,";
- mes "this style was developed for a";
- mes "Hunter who liked really long";
- mes "bangs and wanted to see";
- mes "through them at the same time.";
- close2; cutin "",255; end;
- }
- mes "Oh, that's 'Anke Snare' style!";
- mes "The style style is specially";
- mes "made for Hunters that don't like";
- mes "to get their hair tangled...";
- mes "After all, what kind of Hunter";
- mes "lets their hair get trapped?";
- close2; cutin "",255; end;
- case 17:
- if (Sex == SEX_MALE) {
- mes "Oh, that's 'Find Ore' style!";
- mes "It's a practical, economical look";
- mes "that is popular among Blacksmiths.";
- mes "Some swear that this fashion helps";
- mes "them in finding ores, but where's";
- mes "the science in that??";
- close2; cutin "",255; end;
- }
- mes "Oh, that's 'Hammer Fall' style!";
- mes "For the woman that doesn't want";
- mes "her hair to get in the way when";
- mes "she's savagely swinging heavy";
- mes "objects. Of course, this is a";
- mes "Blacksmith favorite.";
- close2; cutin "",255; end;
- case 18:
- if (Sex == SEX_MALE) {
- mes "Oh, that's 'Fire Pillar' style!";
- mes "It's a trendy look, in which";
- mes "you cover one eye for that";
- mes "intrigue effect. The element";
- mes "of mystery is always in";
- mes "fashion, don't you think?";
- close2; cutin "",255; end;
- }
- mes "Oh, that's 'Jupitel Thunder'";
- mes "style! A look that strikes";
- mes "like lightening, without";
- mes "any of that annoying static";
- mes "cling or muss. This fashion";
- mes "looks great with Mage Hats.";
- close2; cutin "",255; end;
- case 19:
- if (Sex == SEX_MALE) {
- mes "Oh, that's 'Guillotine Fist'";
- mes "style! The smooth, slicked back";
- mes "pompadour shows that you're";
- mes "serious about your passion";
- mes "for brawling... or just your passion.";
- close2; cutin "",255; end;
- }
- mes "Oh, that's 'Whirlwind' style!";
- mes "A favorite among the studious";
- mes "Sages, the hair is tied back";
- mes "in a stylish braid so that";
- mes "it doesn't fly around after";
- mes "casting those windy spells.";
- close2; cutin "",255; end;
+ mes "Oops, I'm sorry, but that";
+ mes "style is not available.";
+ mes "Remember to enter a number";
+ mes "from 1 to 19.";
+ close();
+ }
+ callsub L_cutin,.@style;
+ mes "[Veronica]";
+ switch(.@style) {
+ case 1:
+ if (Sex == SEX_MALE) {
+ mes "Oh, that's 'Play Dead' style!";
+ mes "It's a nice, basic haircut.";
+ mes "I notice that usually the";
+ mes "cute, conversative types seem";
+ mes "to prefer this style.";
+ } else {
+ mes "Oh, that's 'First Aid' style!";
+ mes "The shoulder length tresses";
+ mes "are straightened for those";
+ mes "no nonsense adventurers. It";
+ mes "seems to be the style of";
+ mes "choice for Novices.";
+ }
+ close2;
+ cutin "",255;
+ end;
+ case 2:
+ if (Sex == SEX_MALE) {
+ mes "Oh, that's the 'Two Handed Sword";
+ mes "Mastery' style! It's perfect for";
+ mes "for Swordmen who might muss their";
+ mes "hair while swinging their swords";
+ mes "all day long.";
+ } else {
+ mes "Oh, that's 'Bash' style!";
+ mes "For the powerful woman that's";
+ mes "not afraid to get a little";
+ mes "blood on her hands, but knows";
+ mes "how great her hair will look";
+ mes "while wildly flailing a sword.";
+ }
+ close2;
+ cutin "",255;
+ end;
+ case 3:
+ if (Sex == SEX_MALE) {
+ mes "Oh, that's 'Napalm Beat' style!";
+ mes "It's a unique look with a hint";
+ mes "of eccentricity that's offset";
+ mes "with a helping of elegance.";
+ } else {
+ mes "Oh, that's 'Frost Diver' style!";
+ mes "The pigtails lend an innocent,";
+ mes "demure look for those Mages";
+ mes "and Wizards that usually scare";
+ mes "off the boys with their spells.";
+ }
+ close2;
+ cutin "",255;
+ end;
+ case 4:
+ if (Sex == SEX_MALE) {
+ mes "Oh, that's the 'Double Strafe'";
+ mes "style! The arrangement of the";
+ mes "hair conducts ambient static";
+ mes "electricity, naturally clearing";
+ mes "the mind. At least, that's what";
+ mes "I was taught in fashion school.";
+ } else {
+ mes "Oh, that's 'Arrow Shower' style!";
+ mes "For the Bowswoman who doesn't";
+ mes "want fashion to interfere with";
+ mes "her depth perception. Much more";
+ mes "attractive than those horrid";
+ mes "granny-style hairbuns.";
+ }
+ close2;
+ cutin "",255;
+ end;
+ case 5:
+ if (Sex == SEX_MALE) {
+ mes "Oh, that's 'Angelus' style!";
+ mes "It's for calm and devout people,";
+ mes "as well as those bashful,";
+ mes "mild-mannered types.";
+ } else {
+ mes "Oh, that's 'Heal' style!";
+ mes "This is in trend among";
+ mes "Priests and Acolytes since";
+ mes "this style is appropriate";
+ mes "for formal situations, but";
+ mes "is also practical in battle.";
+ }
+ close2;
+ cutin "",255;
+ end;
+ case 6:
+ if (Sex == SEX_MALE) {
+ mes "Oh, that's 'Push Cart' style!";
+ mes "It was based on the design of a";
+ mes "cart...at least, that's what";
+ mes "I learned in beautician school.";
+ } else {
+ mes "Ooh, that's 'Vending' style!";
+ mes "It's the hairdo of money";
+ mes "makers...and if I may say so,";
+ mes "it's also economical.";
+ }
+ close2;
+ cutin "",255;
+ end;
+ case 7:
+ if (Sex == SEX_MALE) {
+ mes "Ooh, that's 'Envenom' style!";
+ mes "It looks great on Thieves and";
+ mes "and Assassins when they're";
+ mes "out poisoning people and animals.";
+ mes "It's fashion for the aggressive";
+ mes "and eclectic~!";
+ } else {
+ mes "Oh, that's 'Double Attack' style!";
+ mes "The adorable pigtail, paired with";
+ mes "those provacative bangs are sure";
+ mes "to help you steal the heart of";
+ mes "some cute guy.";
+ }
+ close2;
+ cutin "",255;
+ end;
+ case 8:
+ if (Sex == SEX_MALE) {
+ mes "Oh, that's 'Bowling Bash' style!";
+ mes "A popular style for Knights, its";
+ mes "manly, rugged look tends to";
+ mes "attract all of the ladies,";
+ mes "and looks great on men with";
+ mes "strong chins.";
+ } else {
+ mes "Oh, that's 'Gloria' style!";
+ mes "It's very elegant and looks";
+ mes "great on holy Priests. This";
+ mes "style is most attractive to";
+ mes "ladies who aren't that used";
+ mes "to fighting with their hands.";
+ }
+ close2;
+ cutin "",255;
+ end;
+ case 9:
+ if (Sex == SEX_MALE) {
+ mes "Oh, that's 'Venom Dust' style!";
+ mes "Definitely a look for rebels,";
+ mes "the sweeping, yet decidedly";
+ mes "luxorious locks seems to enchant";
+ mes "girls with a fatal attraction.";
+ } else {
+ mes "Oh, that's 'SP Recovery' style!";
+ mes "To add more body to the special";
+ mes "style of these bangs, I use a";
+ mes "special conditioner that makes";
+ mes "you feel like you're regaining SP";
+ mes "...Although, it acutally doesn't.";
+ }
+ close2;
+ cutin "",255;
+ end;
+ case 10:
+ if (Sex == SEX_MALE) {
+ mes "Oh, that's 'Turn Undead' style!";
+ mes "This is popular among Priests";
+ mes "that want a serious, yet a bit";
+ mes "of a wild, agressive look.";
+ mes "Definitely more attractive";
+ mes "than the 'Holy Light' mullet.";
+ } else {
+ mes "Oh, that's 'Prepare Potion' style!";
+ mes "The flared out tresses are chosen";
+ mes "by beginning Alchemists, since";
+ mes "early, explosive experiments would";
+ mes "make their hair to stick out anyway.";
+ }
+ close2;
+ cutin "",255;
+ end;
+ case 11:
+ if (Sex == SEX_MALE) {
+ mes "Oh, that's 'Dragonology' style!";
+ mes "It's neat and clean cut, perfect";
+ mes "for studious people and looks";
+ mes "great with eyeglasses. This";
+ mes "is a fashion well suited to";
+ mes "intellectual types.";
+ } else {
+ mes "Oh, that's 'Grand Cross' style!";
+ mes "It's in style among those pious";
+ mes "Crusaders that need hair that";
+ mes "won't muss during fighting, yet";
+ mes "is respectable enough to attend";
+ mes "religious services.";
+ }
+ close2;
+ cutin "",255;
+ end;
+ case 12:
+ if (Sex == SEX_MALE) {
+ mes "Oh, that's 'Mace Mastery' style!";
+ mes "A lot of care goes into making";
+ mes "that tussled hair say, 'I don't";
+ mes "care how I look at all.'";
+ } else {
+ mes "Oh, that's 'Intimidate' style!";
+ mes "The Rogue women seem to like";
+ mes "this style...although I imagine";
+ mes "that more of them would prefer";
+ mes "something wilder to match those";
+ mes "stockings...";
+ }
+ close2;
+ cutin "",255;
+ end;
+ case 13:
+ if (Sex == SEX_MALE) {
+ mes "Oh, that's 'Thunder Storm' style!";
+ mes "This hot, flamboyant hairstyle";
+ mes "flares out wildly like thunder.";
+ mes "...And you will too with this new look.";
+ } else {
+ mes "Oh, that's 'Spiritual Sphere";
+ mes "Absorption' style! There's a";
+ mes "charismatic quality to this";
+ mes "fashion: it's tough, slightly";
+ mes "tomboyish, but not so much";
+ mes "that it can't be cute.";
+ }
+ close2;
+ cutin "",255;
+ end;
+ case 14:
+ if (Sex == SEX_MALE) {
+ mes "Oh, that's 'Encore' style!";
+ mes "The elegant, flowing locks";
+ mes "fit well with Bards, or men who";
+ mes "appreciate the value of male";
+ mes "beauty.";
+ } else {
+ mes "Oh, that's 'Gypsy's Kiss' style!";
+ mes "Dancers seem to like this style,";
+ mes "although personally, I think";
+ mes "this fashion fits very well";
+ mes "with glasses.";
+ }
+ close2;
+ cutin "",255;
+ end;
+ case 15:
+ if (Sex == SEX_MALE) {
+ mes "Oh, that's 'Grimtooth' style!";
+ mes "Spiky and unkempt, this style";
+ mes "is a popular counterculture";
+ mes "street fashion. You might";
+ mes "not want to wear your hair";
+ mes "this way at a wedding, though.";
+ } else {
+ mes "Oh, that's 'Counter Attack' style!";
+ mes "This is an intimidating look for";
+ mes "girls that want to say 'You hit";
+ mes "me, I'll hit you back!' It really";
+ mes "emphasizes strong looking";
+ mes "foreheads and cheekbones.";
+ }
+ close2;
+ cutin "",255;
+ end;
+ case 16:
+ if (Sex == SEX_MALE) {
+ mes "Oh, that's 'Blitz Beat' style!";
+ mes "A funky and lively fashion,";
+ mes "this style was developed for a";
+ mes "Hunter who liked really long";
+ mes "bangs and wanted to see";
+ mes "through them at the same time.";
+ } else {
+ mes "Oh, that's 'Anke Snare' style!";
+ mes "The style style is specially";
+ mes "made for Hunters that don't like";
+ mes "to get their hair tangled...";
+ mes "After all, what kind of Hunter";
+ mes "lets their hair get trapped?";
+ }
+ close2;
+ cutin "",255;
+ end;
+ case 17:
+ if (Sex == SEX_MALE) {
+ mes "Oh, that's 'Find Ore' style!";
+ mes "It's a practical, economical look";
+ mes "that is popular among Blacksmiths.";
+ mes "Some swear that this fashion helps";
+ mes "them in finding ores, but where's";
+ mes "the science in that??";
+ } else {
+ mes "Oh, that's 'Hammer Fall' style!";
+ mes "For the woman that doesn't want";
+ mes "her hair to get in the way when";
+ mes "she's savagely swinging heavy";
+ mes "objects. Of course, this is a";
+ mes "Blacksmith favorite.";
+ }
+ close2;
+ cutin "",255;
+ end;
+ case 18:
+ if (Sex == SEX_MALE) {
+ mes "Oh, that's 'Fire Pillar' style!";
+ mes "It's a trendy look, in which";
+ mes "you cover one eye for that";
+ mes "intrigue effect. The element";
+ mes "of mystery is always in";
+ mes "fashion, don't you think?";
+ } else {
+ mes "Oh, that's 'Jupitel Thunder'";
+ mes "style! A look that strikes";
+ mes "like lightening, without";
+ mes "any of that annoying static";
+ mes "cling or muss. This fashion";
+ mes "looks great with Mage Hats.";
}
+ close2;
+ cutin "",255;
+ end;
+ case 19:
+ if (Sex == SEX_MALE) {
+ mes "Oh, that's 'Guillotine Fist'";
+ mes "style! The smooth, slicked back";
+ mes "pompadour shows that you're";
+ mes "serious about your passion";
+ mes "for brawling... or just your passion.";
+ } else {
+ mes "Oh, that's 'Whirlwind' style!";
+ mes "A favorite among the studious";
+ mes "Sages, the hair is tied back";
+ mes "in a stylish braid so that";
+ mes "it doesn't fly around after";
+ mes "casting those windy spells.";
+ }
+ close2;
+ cutin "",255;
+ end;
}
case 2:
if(BaseLevel < 60) {
@@ -413,17 +450,19 @@ alberta_in,55,142,7 script Hair Dresser 4_F_02,{
mes "no.19. I will do my best to";
mes "make you look your very best.";
next;
- input .@style;
- if(.@style > 19) {
+ input(.@style);
+ if(.@style == 0) {
mes "[Veronica]";
- mes "I am sorry, you chose an unavailable style.";
- mes "Make sure you enter the correct number.";
+ mes "You have canceled your request.";
close;
- } else if(.@style == 0) {
+ }
+ if (.@style < 1 || .@style > 19) {
mes "[Veronica]";
- mes "You have canceled your request.";
+ mes "I am sorry, you chose an unavailable style.";
+ mes "Make sure you enter the correct number.";
close;
- } else if(getlook(1) == .@style) {
+ }
+ if(getlook(1) == .@style) {
mes "[Veronica]";
mes "I am sorry, but you are already";
mes "wearing the style you have";
@@ -976,7 +1015,7 @@ lhz_in02,100,143,3 script Hair Dresser#li 2_M_DYEINGER,{
mes "No. 27: Oratio Cut.";
}
next;
- input .@input;
+ input(.@input);
if (.@input == 0) {
mes "[Prince Shammi]";
mes "Oh...?";
@@ -986,7 +1025,7 @@ lhz_in02,100,143,3 script Hair Dresser#li 2_M_DYEINGER,{
mes "Still, I'm so disappointed~";
close;
}
- else if ((.@input < 20) || (.@input > 27)) {
+ if (.@input < 20 || .@input > 27) {
mes "[Prince Shammi]";
mes "Dearie, please enter";
mes "a number from ''20'' to";
@@ -995,7 +1034,7 @@ lhz_in02,100,143,3 script Hair Dresser#li 2_M_DYEINGER,{
mes "you soooooooo beautiful!";
close;
}
- else if (getlook(LOOK_HAIR) == .@input) {
+ if (getlook(LOOK_HAIR) == .@input) {
mes "[Prince Shammi]";
mes "Oh dear me, you're not";
mes "going to waste money for";
@@ -1005,107 +1044,104 @@ lhz_in02,100,143,3 script Hair Dresser#li 2_M_DYEINGER,{
mes "your hair color, you know.";
close;
}
- else {
- if (Sex == SEX_MALE)
- cutin "hair_m_"+.@input+".BMP",4;
- else
- cutin "hair_f_"+.@input+".BMP",4;
- mes "[Prince Shammi]";
- mes "Oooh! Now, is this the";
- mes "hairstyle that you wanted?";
- mes "This is No. "+.@input+", by the way.";
- next;
- switch(select("Yes.", "No.")) {
- case 1:
- if (getlook(LOOK_HAIR_COLOR) == 0) {
- mes "[Prince Shammi]";
- mes "Oh, Sweet Christmas,";
- mes "I almost forgot! Would";
- mes "you like me to dye your";
- mes "hair, free of charge? It's";
- mes "a part of my service, so";
- mes "please choose a color~";
- next;
- switch(select("Red", "Yellow", "Purple", "Orange", "Green", "Blue", "White", "Dark Brown")) {
- case 1:
- .@headpalette = 8;
- break;
- case 2:
- .@headpalette = 1;
- break;
- case 3:
- .@headpalette = 2;
- break;
- case 4:
- .@headpalette = 3;
- break;
- case 5:
- .@headpalette = 4;
- break;
- case 6:
- .@headpalette = 5;
- break;
- case 7:
- .@headpalette = 6;
- break;
- case 8:
- .@headpalette = 7;
- break;
- }
- }
+ if (Sex == SEX_MALE)
+ cutin "hair_m_"+.@input+".BMP",4;
+ else
+ cutin "hair_f_"+.@input+".BMP",4;
+ mes "[Prince Shammi]";
+ mes "Oooh! Now, is this the";
+ mes "hairstyle that you wanted?";
+ mes "This is No. "+.@input+", by the way.";
+ next;
+ switch(select("Yes.", "No.")) {
+ case 1:
+ if (getlook(LOOK_HAIR_COLOR) == 0) {
mes "[Prince Shammi]";
- mes "Okay, let's get";
- mes "started, shall we?";
- mes "Keep your head still,";
- mes "now. Yes, that's good...";
+ mes "Oh, Sweet Christmas,";
+ mes "I almost forgot! Would";
+ mes "you like me to dye your";
+ mes "hair, free of charge? It's";
+ mes "a part of my service, so";
+ mes "please choose a color~";
next;
- mes "^3355FF*Snip snip*";
- mes "*Rustle rustle*";
- mes "*Clip clip clip clip*";
- mes "*Bzzzzzzzzzzzzzzzzzzzz*^000000";
- next;
- Zeny -= 99800;
- delitem Counteragent,3;
- delitem Mixture,3;
- delitem Danggie,100;
- delitem Short_Daenggie,100;
- delitem Long_Hair,100;
- delitem Golden_Hair,100;
- delitem Glossy_Hair,100;
- setlook LOOK_HAIR,.@input;
- setlook LOOK_HAIR_COLOR,.@headpalette;
- mes "[Prince Shammi]";
- mes "Well, we're all finished!";
- mes "And my, oh my, you look even";
- mes "more fabulous that I thought";
- mes "you would! Oh, I can't believe";
- if (Sex == SEX_MALE) {
- mes "how tough and elegant you are~";
- mes "So ruggedly manly and handsome!";
- }
- else {
- mes "how graceful and elegant you";
- mes "look! Absolutely gorgeous!";
+ switch(select("Red", "Yellow", "Purple", "Orange", "Green", "Blue", "White", "Dark Brown")) {
+ case 1:
+ .@headpalette = 8;
+ break;
+ case 2:
+ .@headpalette = 1;
+ break;
+ case 3:
+ .@headpalette = 2;
+ break;
+ case 4:
+ .@headpalette = 3;
+ break;
+ case 5:
+ .@headpalette = 4;
+ break;
+ case 6:
+ .@headpalette = 5;
+ break;
+ case 7:
+ .@headpalette = 6;
+ break;
+ case 8:
+ .@headpalette = 7;
+ break;
}
- emotion e_kis,"Hair Dresser#li";
- next;
- mes "[Prince Shammi]";
- mes "You love your new";
- mes "hair, don't you? Feel";
- mes "free to come back anytime.";
- mes "I'll make you the best looking";
- mes "person in the entire world!";
- emotion e_no1,"Hair Dresser#li";
- close;
- case 2:
- mes "[Prince Shammi]";
- mes "Oh, did you forget which";
- mes "hairstyle goes with which";
- mes "number? By all means, please";
- mes "check again! Find the one that";
- mes "is perfect just for you, okay?";
- close;
}
+ mes "[Prince Shammi]";
+ mes "Okay, let's get";
+ mes "started, shall we?";
+ mes "Keep your head still,";
+ mes "now. Yes, that's good...";
+ next;
+ mes "^3355FF*Snip snip*";
+ mes "*Rustle rustle*";
+ mes "*Clip clip clip clip*";
+ mes "*Bzzzzzzzzzzzzzzzzzzzz*^000000";
+ next;
+ Zeny -= 99800;
+ delitem Counteragent,3;
+ delitem Mixture,3;
+ delitem Danggie,100;
+ delitem Short_Daenggie,100;
+ delitem Long_Hair,100;
+ delitem Golden_Hair,100;
+ delitem Glossy_Hair,100;
+ setlook LOOK_HAIR,.@input;
+ setlook LOOK_HAIR_COLOR,.@headpalette;
+ mes "[Prince Shammi]";
+ mes "Well, we're all finished!";
+ mes "And my, oh my, you look even";
+ mes "more fabulous that I thought";
+ mes "you would! Oh, I can't believe";
+ if (Sex == SEX_MALE) {
+ mes "how tough and elegant you are~";
+ mes "So ruggedly manly and handsome!";
+ } else {
+ mes "how graceful and elegant you";
+ mes "look! Absolutely gorgeous!";
+ }
+ emotion e_kis,"Hair Dresser#li";
+ next;
+ mes "[Prince Shammi]";
+ mes "You love your new";
+ mes "hair, don't you? Feel";
+ mes "free to come back anytime.";
+ mes "I'll make you the best looking";
+ mes "person in the entire world!";
+ emotion e_no1,"Hair Dresser#li";
+ close;
+ case 2:
+ mes "[Prince Shammi]";
+ mes "Oh, did you forget which";
+ mes "hairstyle goes with which";
+ mes "number? By all means, please";
+ mes "check again! Find the one that";
+ mes "is perfect just for you, okay?";
+ close;
}
break;
case 3:
@@ -1200,7 +1236,7 @@ lhz_in02,91,155,5 script Assistant Beautician#li 4_F_LGTGIRL,{
mes "Um, if you need to";
mes "cancel, just enter ''0.''";
next;
- input .@input;
+ input(.@input);
if (.@input == 0) {
mes "[Assistant Beautician]";
mes "Awwww...";
@@ -1208,7 +1244,7 @@ lhz_in02,91,155,5 script Assistant Beautician#li 4_F_LGTGIRL,{
mes "trust me after all...";
close;
}
- else if ((.@input < 1) || (.@input > 23)) {
+ if (.@input < 1 || .@input > 23) {
mes "[Assistant Beautician]";
mes "Huh? I thought I asked";
mes "you to enter a number from";
@@ -1216,34 +1252,31 @@ lhz_in02,91,155,5 script Assistant Beautician#li 4_F_LGTGIRL,{
mes "wrong this time? Hmmm...";
close;
}
- else {
+ mes "[Assistant Beautician]";
+ mes "So this is the";
+ mes "style you want me";
+ mes "to try to do for you?";
+ if (Sex == SEX_MALE) {
+ if (.@input < 10)
+ cutin "hair_m_0"+.@input+".BMP",4;
+ else
+ cutin "hair_m_"+.@input+".BMP",4;
+ } else {
+ if (.@input < 10)
+ cutin "hair_f_0"+.@input+".BMP",4;
+ else
+ cutin "hair_f_"+.@input+".BMP",4;
+ }
+ next;
+ switch(select("Yes, let's try it~", "Cancel.")) {
+ case 1:
+ break;
+ case 2:
mes "[Assistant Beautician]";
- mes "So this is the";
- mes "style you want me";
- mes "to try to do for you?";
- if (Sex == SEX_MALE) {
- if (.@input < 10)
- cutin "hair_m_0"+.@input+".BMP",4;
- else
- cutin "hair_m_"+.@input+".BMP",4;
- }
- else {
- if (.@input < 10)
- cutin "hair_f_0"+.@input+".BMP",4;
- else
- cutin "hair_f_"+.@input+".BMP",4;
- }
- next;
- switch(select("Yes, let's try it~", "Cancel.")) {
- case 1:
- break;
- case 2:
- mes "[Assistant Beautician]";
- mes "Oooh, there must";
- mes "be some style that";
- mes "you like, right? Hmmm...";
- close;
- }
+ mes "Oooh, there must";
+ mes "be some style that";
+ mes "you like, right? Hmmm...";
+ close;
}
mes "[Assistant Beautician]";
mes "Great, you finally";
@@ -1279,8 +1312,7 @@ lhz_in02,91,155,5 script Assistant Beautician#li 4_F_LGTGIRL,{
if (.@input == .@style_r) {
mes "So... How do you like";
mes "your new style? I love it!";
- }
- else {
+ } else {
mes "Wha...? This isn't what";
mes "you wanted? Uh oh... Um...";
mes "Well, next time I know I can";
diff --git a/npc/merchants/icecream.txt b/npc/merchants/icecream.txt
index 14f83b2a0..99da2fc18 100644
--- a/npc/merchants/icecream.txt
+++ b/npc/merchants/icecream.txt
@@ -56,8 +56,8 @@
mes "so you can only purchase 5 at a time!!";
next;
while(1) {
- input .@input;
- if(.@input < 1) {
+ input(.@input);
+ if (.@input <= 0) {
mes "[Ice Cream Maker]";
mes "If you don't want to buy any,";
mes "could you please let the next customer";
@@ -65,7 +65,7 @@
mes "Thank you.";
close;
}
- if(.@input > 5) {
+ if (.@input > 5) {
mes "[Ice Cream Maker]";
mes "Ouch";
mes "You expect too much.";
@@ -74,7 +74,9 @@
mes "If you might haveto make a lot of trips";
mes "to the bathroom tonight.";
next;
+ continue;
}
+ break;
}
if(Zeny<.@input*100) {
mes "[Ice Cream Maker]";
diff --git a/npc/merchants/kunai_maker.txt b/npc/merchants/kunai_maker.txt
index 06a2f8bdb..05d322ec6 100644
--- a/npc/merchants/kunai_maker.txt
+++ b/npc/merchants/kunai_maker.txt
@@ -84,7 +84,7 @@ function script Kunai_Trade {
mes "If you want to cancel the trade, then please enter ''0.'' How many";
mes "Kunai sets would you like?";
next;
- input .@amount;
+ input(.@amount);
if(.@amount < 1 || .@amount > 500) {
mes "[Kashin]";
mes "Eh? I'm sorry, but";
diff --git a/npc/merchants/novice_exchange.txt b/npc/merchants/novice_exchange.txt
index c27fc6570..7e023588d 100644
--- a/npc/merchants/novice_exchange.txt
+++ b/npc/merchants/novice_exchange.txt
@@ -355,8 +355,8 @@ function script F_PotExchange {
mes "mind, just enter '0' to cancel.";
next;
while(1) {
- input .@input,0,101;
- if (.@input == 0) {
+ input(.@input);
+ if (.@input <= 0) {
mes "[Merchant]";
mes "What...?";
mes "Why the hell do you";
@@ -364,17 +364,16 @@ function script F_PotExchange {
mes "Pretty indecisive, aren't you?";
close;
}
- else if (.@input > 100) {
+ if (.@input > 100) {
mes "[Merchant]";
mes "I can't give you more";
mes "than 100 Red Potions";
mes "at once. Let's try";
mes "this again.";
next;
+ continue;
}
- else {
- break;
- }
+ break;
}
.@put_out_item = .@input * getarg(1);
if (countitem(getarg(0)) < .@put_out_item) {
diff --git a/npc/merchants/old_pharmacist.txt b/npc/merchants/old_pharmacist.txt
index 0cbbeda6d..f87f55d83 100644
--- a/npc/merchants/old_pharmacist.txt
+++ b/npc/merchants/old_pharmacist.txt
@@ -106,8 +106,8 @@ alberta_in,16,28,4 script Pharmacist 1_M_PUBMASTER,{
next;
mes "[Old Pharmacist]";
mes "Then pick a number below 100. If you don't want any, just enter '0'. With the materials you have, you can make about "+.@max+" potions.";
- input .@amount,0,101;
- if (.@amount == 0) {
+ input(.@amount);
+ if (.@amount <= 0) {
next;
mes "[Old Pharmacist]";
mes "Make up your mind, will you?!";
@@ -235,9 +235,9 @@ L_Making:
next;
mes "[Old Pharmacist]";
mes "Then pick a number below 100. If you don't want any, just enter '0'. With the materials you have, you can make about "+.@max+" potions.";
- input .@amount;
+ input(.@amount);
next;
- if (.@amount == 0) {
+ if (.@amount <= 0) {
mes "[Old Pharmacist]";
mes "Make up your mind, will you?!";
close;
diff --git a/npc/merchants/refine.txt b/npc/merchants/refine.txt
index 19ebf4a8e..87b5270a8 100644
--- a/npc/merchants/refine.txt
+++ b/npc/merchants/refine.txt
@@ -120,20 +120,19 @@ geffen_in,110,172,0 script Christopher#1 1_M_SMITH,{
mes "It's a much needed tool fer refining metal! So, How many do ye wish to buy? If ye want to quit, just type the number '0.'";
next;
while(1) {
- input .@input;
- if (.@input == 0) {
+ input(.@input);
+ if (.@input <= 0) {
mes "[Christopher Guillenrow]";
mes "Aye, the deal is canceled. Fare ye well.";
close;
}
- else if ((.@input < 0) || (.@input > 500)) {
+ if (.@input > 500) {
mes "[Christopher Guillenrow]";
mes "Ye can buy 500, er less.";
next;
+ continue;
}
- else {
- break;
- }
+ break;
}
.@sell = .@input * 150;
if (Zeny < .@sell) {
@@ -199,22 +198,21 @@ geffen_in,110,172,0 script Christopher#1 1_M_SMITH,{
mes "So, How many do ye wish to buy? If ye dont want anything, just type the number as '0.'";
next;
while(1) {
- input .@input;
- if (.@input == 0) {
+ input(.@input);
+ if (.@input <= 0) {
mes "[Christopher Guillenrow]";
mes "Deal has";
mes "been canceled.";
mes "Fare ye well.";
close;
}
- else if ((.@input < 0) || (.@input > 500)) {
+ if (.@input > 500) {
mes "[Christopher Guillenrow]";
mes "Ye can buy 500, er less.";
next;
+ continue;
}
- else {
- break;
- }
+ break;
}
.@sell = .@input * 200;
if (Zeny < .@sell) {
@@ -237,22 +235,21 @@ geffen_in,110,172,0 script Christopher#1 1_M_SMITH,{
mes "So, how many do ye wish to buy? If ye dont want anything at all, just type the number as '0.'";
next;
while(1) {
- input .@input;
- if (.@input == 0) {
+ input(.@input);
+ if (.@input <= 0) {
mes "[Christopher Guillenrow]";
mes "Deal has";
mes "been canceled.";
mes "Fare ye well.";
close;
}
- else if ((.@input < 0) || (.@input > 500)) {
+ if (.@input > 500) {
mes "[Christopher Guillenrow]";
mes "Ye can buy 500, er less.";
next;
+ continue;
}
- else {
- break;
- }
+ break;
}
.@sell = .@input * 1000;
if (Zeny < .@sell) {
@@ -424,20 +421,19 @@ ein_in01,38,29,0 script Paul Spanner 1_M_SMITH,{
mes "So, how many do you need? If you want to cancel the trade, enter '0'.";
next;
while(1) {
- input .@input;
- if (.@input == 0) {
+ input(.@input);
+ if (.@input <= 0) {
mes "[Paul Spanner]";
mes "You have canceled the trade. If you need anything, just let me know.";
close;
}
- else if ((.@input < 0) || (.@input > 500)) {
+ if (.@input > 500) {
mes "[Paul Spanner]";
mes "You can only buy 500 or less at a time.";
next;
+ continue;
}
- else {
- break;
- }
+ break;
}
.@sell = .@input * .@item_cost;
if (Zeny < .@sell) {
@@ -478,20 +474,19 @@ ein_in01,38,29,0 script Paul Spanner 1_M_SMITH,{
mes "So, how many of them do you need? If you want to cancel the trade, enter '0'.";
next;
while(1) {
- input .@input;
- if (.@input == 0) {
+ input(.@input);
+ if (.@input <= 0) {
mes "[Paul Spanner]";
mes "The trade has been canceled. If you need anything, just let me know.";
close;
}
- else if ((.@input < 0) || (.@input > 500)) {
+ if (.@input > 500) {
mes "[Paul Spanner]";
mes "You can buy 500 or less at a time.";
next;
+ continue;
}
- else {
- break;
- }
+ break;
}
.@sell = .@input * .@item_price;
if (Zeny < .@sell) {
@@ -808,7 +803,7 @@ function script refinemain {
mes "[" + getarg(0) + "]";
mes "How many times would you like me to refine your item?";
next;
- input .@refinecnt;
+ input(.@refinecnt);
.@refinecheck = .@refinecnt + getequiprefinerycnt(.@part);
if (.@refinecnt < 1 || .@refinecheck > 10) {
mes "[" + getarg(0) + "]";
@@ -954,24 +949,23 @@ function script phramain {
mes "If you don't want any, please enter the number, '0.'";
next;
while(1) {
- input .@input;
- if (.@input == 0) {
+ input(.@input);
+ if (.@input <= 0) {
mes "[" + getarg(0) + "]";
mes "The deal has";
mes "been cancelled.";
close;
}
- else if (.@input < 0 || .@input > 500) {
+ if (.@input > 500) {
mes "[" + getarg(0) + "]";
mes "Alright, you can";
mes "puchase up to 500.";
mes "No more than that,";
mes "got it? Good.";
next;
+ continue;
}
- else {
- break;
- }
+ break;
}
.@sell = .@input * .@price;
if (Zeny < .@sell) {
diff --git a/npc/other/arena/arena_party.txt b/npc/other/arena/arena_party.txt
index c3133af30..f3362687d 100644
--- a/npc/other/arena/arena_party.txt
+++ b/npc/other/arena/arena_party.txt
@@ -165,6 +165,8 @@ OnTouch:
}
force_1-2,99,31,4 script Slipslowrun#party 4_F_TELEPORTER,{
+ end;
+
OnStart:
initnpctimer;
$arena_minptst = gettime(GETTIME_MINUTE);
@@ -1059,7 +1061,7 @@ prt_are_in,77,135,3 script Staff#party-2 1_F_02,{
donpcevent "Ponox::OnStart";
}
specialeffect(EH_HIT5, AREA, playerattached());
- donpcevent "cast#pt::OnNomal1";
+ donpcevent "cast#pt::OnNomal1";
warp "arena_room",100,75;
end;
} else {
@@ -1078,7 +1080,7 @@ prt_are_in,77,135,3 script Staff#party-2 1_F_02,{
next;
switch( select( "Ok.","Let me think." ) ) {
case 1:
- input .@arnparty$;
+ input(.@arnparty$);
mes "[Staff]";
mes "You have entered ^3131FF"+.@arnparty$+"^000000. Is it correct?";
next;
diff --git a/npc/other/arena/arena_point.txt b/npc/other/arena/arena_point.txt
index 5292ebab3..c2ef52e6a 100644
--- a/npc/other/arena/arena_point.txt
+++ b/npc/other/arena/arena_point.txt
@@ -80,70 +80,66 @@ prt_are_in,103,11,3 script Arena Point Manager 4_M_JOB_HUNTER,{
mes "value you may enter is 20.";
mes "To cancel, enter ''^3355FF0^000000.''";
next;
- input .@input;
- if (.@input == 0) {
+ input(.@input);
+ if (.@input <= 0) {
mes "[Arena Point Manager]";
mes "You have";
mes "canceled";
mes "this service.";
close;
}
- else if (.@input > 20) {
+ if (.@input > 20) {
mes "[Arena Point Manager]";
mes "Your request exceeds";
mes "the maximum limit. Please";
mes "enter a value no greater than 20.";
close;
}
- else {
- .@want_point1 = 10 * .@input;
- .@want_point = 5 * .@input;
- .@my_arena_all = arena_point + .@want_point;
- .@my_turbo_all = tt_point - .@want_point1;
- if (.@my_arena_all > 28999) {
- mes "[Arena Point Manager]";
- mes "You will exceed the";
- mes "maximum amount of";
- mes "Arena Points if we proceed";
- mes "with this conversion of your";
- mes "Turbo Track Points. You cannot";
- mes "have more than 29,000 Arena Points.";
- next;
- mes "[Arena Point Manager]";
- mes "Please spend some of";
- mes "your Arena Points before";
- mes "using this service again.";
- mes "Thank you for your patronage.";
- close;
- }
- if (.@my_turbo_all < 0) {
- mes "[Arena Point Manager]";
- mes "I'm sorry, but";
- mes "you don't have enough";
- mes "Turbo Track Points to";
- mes "perform this Arena";
- mes "Point conversion.";
- close;
- }
- else {
- mes "[Arena Point Manager]";
- mes "You have converted";
- mes "10 Turbo Track Points";
- mes "into 5 Arena Points " + .@input + " times.";
- mes "A total of " + .@want_point1 + " Turbo Track Points were converted into";
- mes "" + .@want_point +" Arena Points.";
- tt_point -= .@want_point1;
- arena_point += .@want_point;
- next;
- mes "[Arena Point Manager]";
- mes "" + strcharinfo(PC_NAME) + ",";
- mes "you now have";
- mes "^4682B4" + arena_point + "^000000 Arena Points";
- mes "and ^00688B" + tt_point + "^000000 Turbo Track Points.";
- mes "Thank you for your patronage.";
- close;
- }
+ .@want_point1 = 10 * .@input;
+ .@want_point = 5 * .@input;
+ .@my_arena_all = arena_point + .@want_point;
+ .@my_turbo_all = tt_point - .@want_point1;
+ if (.@my_arena_all > 28999) {
+ mes "[Arena Point Manager]";
+ mes "You will exceed the";
+ mes "maximum amount of";
+ mes "Arena Points if we proceed";
+ mes "with this conversion of your";
+ mes "Turbo Track Points. You cannot";
+ mes "have more than 29,000 Arena Points.";
+ next;
+ mes "[Arena Point Manager]";
+ mes "Please spend some of";
+ mes "your Arena Points before";
+ mes "using this service again.";
+ mes "Thank you for your patronage.";
+ close;
+ }
+ if (.@my_turbo_all < 0) {
+ mes "[Arena Point Manager]";
+ mes "I'm sorry, but";
+ mes "you don't have enough";
+ mes "Turbo Track Points to";
+ mes "perform this Arena";
+ mes "Point conversion.";
+ close;
}
+ mes "[Arena Point Manager]";
+ mes "You have converted";
+ mes "10 Turbo Track Points";
+ mes "into 5 Arena Points " + .@input + " times.";
+ mes "A total of " + .@want_point1 + " Turbo Track Points were converted into";
+ mes "" + .@want_point +" Arena Points.";
+ tt_point -= .@want_point1;
+ arena_point += .@want_point;
+ next;
+ mes "[Arena Point Manager]";
+ mes "" + strcharinfo(PC_NAME) + ",";
+ mes "you now have";
+ mes "^4682B4" + arena_point + "^000000 Arena Points";
+ mes "and ^00688B" + tt_point + "^000000 Turbo Track Points.";
+ mes "Thank you for your patronage.";
+ close;
case 6:
mes "[Arena Point Manager]";
mes "You have";
diff --git a/npc/other/arena/arena_room.txt b/npc/other/arena/arena_room.txt
index b8806e112..b70ce7e4c 100644
--- a/npc/other/arena/arena_room.txt
+++ b/npc/other/arena/arena_room.txt
@@ -520,9 +520,9 @@ sec_in02,72,180,3 script Arena Manager#arena 4_NFWISP,{
//mes "If not, please enter a value for minutes first and then seconds.";
mes "Please enter a value for minutes first and then seconds.";
next;
- input .@arenamin;
+ input(.@arenamin, 0);
setd .@min$,.@arenamin;
- input .@arenasec;
+ input(.@arenasec, 0);
setd .@sec$,.@arenasec;
mes "[Arena Manager]";
mes "Current "+.@mode$+" ranker's play time has been rearranged to ^FF0000"+getd(.@min$)+"^000000 minutes and ^FF0000"+getd(.@sec$)+"^000000 seconds.";
@@ -1011,12 +1011,13 @@ function script Func_Are_Rew {
mes "You can exchange ^3131FF"+getarg(2)+" arena points with "+getarg(1)+" "+getitemname(getarg(0))+"^000000.";
mes "If you wish to cancel, please enter 0. If you don't, please enter how many ^3131FFtimes^000000 of arena points you wish to spend.";
next;
- input .@reward;
- if (.@reward == 0) {
+ input(.@reward);
+ if (.@reward <= 0) {
mes "[Givu]";
mes "You have canceled your request.";
close;
- } else if (.@reward > 1500) {
+ }
+ if (.@reward > 1500) {
mes "[Givu]";
mes "You have exceeded the maximum capacity.";
close;
diff --git a/npc/other/card_trader.txt b/npc/other/card_trader.txt
index 514a032b0..1fca99440 100644
--- a/npc/other/card_trader.txt
+++ b/npc/other/card_trader.txt
@@ -121,7 +121,7 @@ prontera,115,90,0 script Putty 4_F_01,{
mes "[Putty]";
mes "Please tell me what card you want to exchange.";
next;
- input .@i$;
+ input(.@i$);
.@input$ = "_"+.@i$;
.@card = 0;
freeloop(1);
diff --git a/npc/other/comodo_gambling.txt b/npc/other/comodo_gambling.txt
index bd2b0d692..dab52fbbc 100644
--- a/npc/other/comodo_gambling.txt
+++ b/npc/other/comodo_gambling.txt
@@ -540,14 +540,15 @@ mjolnir_02,85,362,3 script Blacksmith Miner 4_F_JOB_BLACKSMITH,{
mes "If you change your mind,";
mes "please enter '0' to cancel.";
next;
- input .@amount;
- if (.@amount == 0) {
+ input(.@amount);
+ if (.@amount <= 0) {
mes "[Dwayne]";
mes "Alright, you've";
mes "canceled the trade.";
mes "Take care!";
close;
- } else if (.@amount < 1 || .@amount > 500){
+ }
+ if (.@amount > 500) {
mes "[Dwayne]";
mes "The maximum";
mes "amount is 500.";
diff --git a/npc/other/fortune.txt b/npc/other/fortune.txt
index 23d65e88f..c3bec40f3 100644
--- a/npc/other/fortune.txt
+++ b/npc/other/fortune.txt
@@ -57,23 +57,21 @@ payon_in03,117,128,5 script Fortune Teller 4_M_BIBI,{
mes "Then...";
mes "Please pay your fee with all of your sincerity.";
next;
- input .@input;
- if (.@input == 0) {
+ input(.@input);
+ if (.@input <= 0) {
mes "[Lhimetorra]";
mes "Ah...?!";
mes "You have angered the monster spirits!";
close;
}
- else if (.@input > Zeny) {
+ if (.@input > Zeny) {
mes "[Lhimetorra]";
mes "There's no need to overdo it. Just give with all your heart... *Tsk tsk*";
close;
}
- else {
- mes "[Lhimetorra]";
- mes "I accept your heart and your devotion with my gratitude. Thoughts are more important than the amount when paying a fortune teller.";
- Zeny -= .@input;
- }
+ mes "[Lhimetorra]";
+ mes "I accept your heart and your devotion with my gratitude. Thoughts are more important than the amount when paying a fortune teller.";
+ Zeny -= .@input;
next;
mes "[Lhimetorra]";
mes "Then, I will begin to tell the fortune of your wish. Concentrate on yourself...";
diff --git a/npc/other/gm_npcs.txt b/npc/other/gm_npcs.txt
index d86535104..b4ee7028e 100644
--- a/npc/other/gm_npcs.txt
+++ b/npc/other/gm_npcs.txt
@@ -63,7 +63,7 @@ function script F_GM_NPC {
if (.@error)
return -2;
} else
- input .@input;
+ input(.@input, 0);
if (.@input == 0)
return -1;
else
diff --git a/npc/other/hugel_bingo.txt b/npc/other/hugel_bingo.txt
index 9c7b87ee4..bf64d7105 100644
--- a/npc/other/hugel_bingo.txt
+++ b/npc/other/hugel_bingo.txt
@@ -481,7 +481,7 @@ OnTouch:
mes "Quickly, say ''^FF0000Bingo^000000!''";
mes "Remember, you'll only";
mes "have one chance to say it!";
- input @bingoyell$;
+ input(@bingoyell$);
if (@bingoyell$ == "Bingo") {
if ($@hu_bingoa == 5) {
$@hu_bingoa = 6;
@@ -500,14 +500,13 @@ OnTouch:
mes "next time, alright?";
close;
}
- } else {
- next;
- mes "I'm sorry, but you";
- mes "said it wrong. Next time,";
- mes "make sure that you yell";
- mes "out the word, ''^FF0000Bingo^000000,'' okay?";
- close;
}
+ next;
+ mes "I'm sorry, but you";
+ mes "said it wrong. Next time,";
+ mes "make sure that you yell";
+ mes "out the word, ''^FF0000Bingo^000000,'' okay?";
+ close;
}
close;
}
@@ -860,11 +859,17 @@ function script Func_Bingo {
}
}
next;
- input .@bingoinput;
- if(.@bingoinput < 1 || .@bingoinput > 25) { @bingo_case = .@i; return 0; }
- if(.@i > 1) {
- for(.@j = .@i; .@j > 0; --.@j) {
- if(.@bingoinput == @bingoplate[.@j -1]) { @bingo_case = .@i; return 0; }
+ input(.@bingoinput);
+ if (.@bingoinput < 1 || .@bingoinput > 25) {
+ @bingo_case = .@i;
+ return 0;
+ }
+ if (.@i > 1) {
+ for (.@j = .@i; .@j > 0; --.@j) {
+ if (.@bingoinput == @bingoplate[.@j -1]) {
+ @bingo_case = .@i;
+ return 0;
+ }
}
}
setarray @bingoplate[.@i],.@bingoinput;
diff --git a/npc/other/marriage.txt b/npc/other/marriage.txt
index 0f640af2a..42c817957 100644
--- a/npc/other/marriage.txt
+++ b/npc/other/marriage.txt
@@ -188,7 +188,7 @@ prt_church,97,100,4 script Wedding Staff#w 1_F_LIBRARYGIRL,{
mes "name of your partner using";
mes "the method I just described.";
next;
- input .@partner$;
+ input(.@partner$);
mes "[Marry Happy]";
mes "Alright, after you've";
mes "decided to get married,";
@@ -329,7 +329,7 @@ prt_church,97,100,4 script Wedding Staff#w 1_F_LIBRARYGIRL,{
mes "down your exact name here.";
next;
while(1) {
- input .@name$;
+ input(.@name$);
if (.@name$ == strcharinfo(PC_NAME))
break;
mes "[Marry Happy]";
@@ -599,7 +599,7 @@ prt_church,100,128,4 script Bishop#w 1_M_PASTOR,{
mes "her and protect her. Now, may";
mes "I know the name of your bride?";
next;
- input $@wed_bride$;
+ input($@wed_bride$);
mes "[Vomars]";
mes "Mr. " + strcharinfo(PC_NAME) + "...";
mes "Do you swear on your life";
diff --git a/npc/other/mercenary_rent.txt b/npc/other/mercenary_rent.txt
index 4b0878e79..cc7364bf4 100644
--- a/npc/other/mercenary_rent.txt
+++ b/npc/other/mercenary_rent.txt
@@ -252,8 +252,8 @@ pay_arche,99,167,4 duplicate(Mercenary Manager#main) Mercenary Manager#Bow 4_M_J
mes "each cost " + .@str_cost$ + " zeny.";
mes "How many would you like?";
next;
- input .@input;
- if (!.@input) {
+ input(.@input);
+ if (.@input <= 0) {
mes "[Mercenary Goods Merchant]";
mes "You changed your mind?";
mes "Alright, feel free to come";
@@ -261,7 +261,7 @@ pay_arche,99,167,4 duplicate(Mercenary Manager#main) Mercenary Manager#Bow 4_M_J
mes "to buy any Mercenary Potions.";
close;
}
- if (.@input < 0 || .@input > 10000) {
+ if (.@input > 10000) {
mes "[Mercenary Goods Merchant]";
mes "I'm sorry, but you";
mes "can only buy up to";
diff --git a/npc/other/monster_race.txt b/npc/other/monster_race.txt
index 9e938c663..84087fb6d 100644
--- a/npc/other/monster_race.txt
+++ b/npc/other/monster_race.txt
@@ -348,7 +348,7 @@ p_track01,67,45,5 script Medal Distributor#single 4_F_RACING,{
mes "Oh! Congratulations, you";
mes "won! May I have your name?";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == strcharinfo(PC_NAME)) {
.@insa = rand(1,1000);
mes "[Medal Distributor]";
@@ -359,14 +359,15 @@ p_track01,67,45,5 script Medal Distributor#single 4_F_RACING,{
mes "number now. Your ticket";
mes "exchange number is ^FF0000" + .@insa + "^000000.";
next;
- input .@input; //,0,1000;
- if (!.@input) {
+ input(.@input);
+ if (.@input == 0) {
mes "[Medal Distributor]";
mes "Oh? You don't want";
mes "to exchange your";
mes "winning ticket?";
close;
- } else if (.@input == .@insa) {
+ }
+ if (.@input == .@insa) {
mes "[Medal Distributor]";
mes "Thank you! You entered";
mes "the correct number...";
@@ -2534,8 +2535,8 @@ S_Reward:
mes "number greater than 100.";
next;
while (true) {
- input .@input;
- if (!.@input) {
+ input(.@input);
+ if (.@input <= 0) {
mes "[Ei'felle]";
mes "Aw, so you've decided";
mes "to cancel? Well, it's your";
@@ -2543,7 +2544,8 @@ S_Reward:
mes "disappointed. Please come";
mes "back if you change your mind...";
close;
- } else if (.@input < 1 || .@input > 100) {
+ }
+ if (.@input > 100) {
mes "[Ei'felle]";
mes "Remember, you can only";
mes "enter a number from 1 to 100.";
@@ -2551,7 +2553,9 @@ S_Reward:
mes "medals, then perhaps you";
mes "should just give them all to me~";
next;
- } else break;
+ continue;
+ }
+ break;
}
if (countitem(Marvelous_Medal) < .@input) {
mes "[Ei'felle]";
diff --git a/npc/other/turbo_track.txt b/npc/other/turbo_track.txt
index f70c97427..948f190ba 100644
--- a/npc/other/turbo_track.txt
+++ b/npc/other/turbo_track.txt
@@ -4126,15 +4126,15 @@ turbo_room,93,117,5 script Point Exchange Helper 4_M_TELEPORTER,{
mes "you wish to have. To cancel,";
mes "please enter ''^3355FF0^000000.''";
next;
- input .@input;
- if (.@input == 0) {
+ input(.@input);
+ if (.@input <= 0) {
mes "[Item Exchange Helper]";
mes "You have";
mes "canceled";
mes "your request.";
close;
}
- else if (.@input < 0 || .@input > 50) {
+ if (.@input > 50) {
mes "[Item Exchange Helper]";
mes "Your request exceeds";
mes "the maximum limit. You";
@@ -4142,28 +4142,26 @@ turbo_room,93,117,5 script Point Exchange Helper 4_M_TELEPORTER,{
mes "of 50 tickets at once.";
close;
}
- else {
- .@total_point = 10 * .@input;
- if (.@total_point > tt_point) {
- mes "[Item Exchange Helper]";
- mes "I'm sorry, but you do";
- mes "not have enough Turbo";
- mes "Track Points. Please check";
- mes "the amount of Turbo Track";
- mes "Points you have earned before";
- mes "redeeming your points again.";
- close;
- }
- tt_point -= .@total_point;
- getitem Warp_Free_Ticket,.@input;
+ .@total_point = 10 * .@input;
+ if (.@total_point > tt_point) {
mes "[Item Exchange Helper]";
- mes "Thank you for";
- mes "your patronage.";
- mes "We hope you enjoy";
- mes "your time here in";
- mes "the Turbo Track~";
+ mes "I'm sorry, but you do";
+ mes "not have enough Turbo";
+ mes "Track Points. Please check";
+ mes "the amount of Turbo Track";
+ mes "Points you have earned before";
+ mes "redeeming your points again.";
close;
}
+ tt_point -= .@total_point;
+ getitem Warp_Free_Ticket,.@input;
+ mes "[Item Exchange Helper]";
+ mes "Thank you for";
+ mes "your patronage.";
+ mes "We hope you enjoy";
+ mes "your time here in";
+ mes "the Turbo Track~";
+ close;
case 2:
mes "[Item Exchange Helper]";
mes "Each Magic Scroll costs";
@@ -4214,15 +4212,15 @@ turbo_room,93,117,5 script Point Exchange Helper 4_M_TELEPORTER,{
mes "you would like to receive.";
mes "To cancel, enter ''^3355FF0^000000.''";
next;
- input .@input;
- if (.@input == 0) {
+ input(.@input);
+ if (.@input <= 0) {
mes "[Item Exchange Helper]";
mes "You have";
mes "canceled";
mes "your request.";
close;
}
- else if (.@input < 0 || .@input > 50) {
+ if (.@input > 50) {
mes "[Item Exchange Helper]";
mes "I'm sorry, but your";
mes "request has exceeded the";
@@ -4230,28 +4228,26 @@ turbo_room,93,117,5 script Point Exchange Helper 4_M_TELEPORTER,{
mes "request up to 50 scrolls at once.";
close;
}
- else {
- .@total_point = 12 * .@input;
- if (.@total_point > tt_point) {
- mes "[Item Exchange Helper]";
- mes "I'm sorry, but you do";
- mes "not have enough Turbo";
- mes "Track Points. Please check";
- mes "the amount of Turbo Track";
- mes "Points you have earned before";
- mes "redeeming your points again.";
- close;
- }
- tt_point -= .@total_point;
- getitem .@scroll,.@input;
+ .@total_point = 12 * .@input;
+ if (.@total_point > tt_point) {
mes "[Item Exchange Helper]";
- mes "Thank you for";
- mes "your patronage.";
- mes "We hope you enjoy";
- mes "your time here in";
- mes "the Turbo Track~";
+ mes "I'm sorry, but you do";
+ mes "not have enough Turbo";
+ mes "Track Points. Please check";
+ mes "the amount of Turbo Track";
+ mes "Points you have earned before";
+ mes "redeeming your points again.";
close;
}
+ tt_point -= .@total_point;
+ getitem .@scroll,.@input;
+ mes "[Item Exchange Helper]";
+ mes "Thank you for";
+ mes "your patronage.";
+ mes "We hope you enjoy";
+ mes "your time here in";
+ mes "the Turbo Track~";
+ close;
case 3:
mes "[Item Exchange Helper]";
mes "You can exchange";
@@ -4298,15 +4294,15 @@ turbo_room,93,117,5 script Point Exchange Helper 4_M_TELEPORTER,{
mes "diamonds you would like to receive.";
mes "To cancel, enter ''^3355FF0^000000.''";
next;
- input .@input;
- if (.@input == 0) {
+ input(.@input);
+ if (.@input <= 0) {
mes "[Item Exchange Helper]";
mes "You have";
mes "canceled";
mes "your request.";
close;
}
- else if (.@input < 0 || .@input > 10) {
+ if (.@input > 10) {
mes "[Item Exchange Helper]";
mes "Your request exceeds";
mes "the maximum limit. You";
@@ -4314,28 +4310,26 @@ turbo_room,93,117,5 script Point Exchange Helper 4_M_TELEPORTER,{
mes "of 10 diamonds at once.";
close;
}
- else {
- .@total_point = 150 * .@input;
- if (.@total_point > tt_point) {
- mes "[Item Exchange Helper]";
- mes "I'm sorry, but you do";
- mes "not have enough Turbo";
- mes "Track Points. Please check";
- mes "the amount of Turbo Track";
- mes "Points you have earned before";
- mes "redeeming your points again.";
- close;
- }
- tt_point -= .@total_point;
- getitem Crystal_Jewel__,.@input;
+ .@total_point = 150 * .@input;
+ if (.@total_point > tt_point) {
mes "[Item Exchange Helper]";
- mes "Thank you for";
- mes "your patronage.";
- mes "We hope you enjoy";
- mes "your time here in";
- mes "the Turbo Track~";
+ mes "I'm sorry, but you do";
+ mes "not have enough Turbo";
+ mes "Track Points. Please check";
+ mes "the amount of Turbo Track";
+ mes "Points you have earned before";
+ mes "redeeming your points again.";
close;
}
+ tt_point -= .@total_point;
+ getitem Crystal_Jewel__,.@input;
+ mes "[Item Exchange Helper]";
+ mes "Thank you for";
+ mes "your patronage.";
+ mes "We hope you enjoy";
+ mes "your time here in";
+ mes "the Turbo Track~";
+ close;
case 5:
mes "[Item Exchange Helper]";
mes "You can exchange";
@@ -4345,15 +4339,15 @@ turbo_room,93,117,5 script Point Exchange Helper 4_M_TELEPORTER,{
mes "that you'd like to receive.";
mes "To cancel, enter ''^3355FF0^000000.''";
next;
- input .@input;
- if (.@input == 0) {
+ input(.@input);
+ if (.@input <= 0) {
mes "[Item Exchange Helper]";
mes "You have";
mes "canceled";
mes "your request.";
close;
}
- else if (.@input < 0 || .@input > 10) {
+ if (.@input > 10) {
mes "[Item Exchange Helper]";
mes "Your request exceeds";
mes "the maximum limit. You";
@@ -4361,28 +4355,26 @@ turbo_room,93,117,5 script Point Exchange Helper 4_M_TELEPORTER,{
mes "of 10 Gift Boxes at once.";
close;
}
- else {
- .@total_point = 300 * .@input;
- if (.@total_point > tt_point) {
- mes "[Item Exchange Helper]";
- mes "I'm sorry, but you do";
- mes "not have enough Turbo";
- mes "Track Points. Please check";
- mes "the amount of Turbo Track";
- mes "Points you have earned before";
- mes "redeeming your points again.";
- close;
- }
- tt_point -= .@total_point;
- getitem Gift_Box,.@input;
+ .@total_point = 300 * .@input;
+ if (.@total_point > tt_point) {
mes "[Item Exchange Helper]";
- mes "Thank you for";
- mes "your patronage.";
- mes "We hope you enjoy";
- mes "your time here in";
- mes "the Turbo Track~";
+ mes "I'm sorry, but you do";
+ mes "not have enough Turbo";
+ mes "Track Points. Please check";
+ mes "the amount of Turbo Track";
+ mes "Points you have earned before";
+ mes "redeeming your points again.";
close;
}
+ tt_point -= .@total_point;
+ getitem Gift_Box,.@input;
+ mes "[Item Exchange Helper]";
+ mes "Thank you for";
+ mes "your patronage.";
+ mes "We hope you enjoy";
+ mes "your time here in";
+ mes "the Turbo Track~";
+ close;
case 6:
mes "[Item Exchange Helper]";
mes "You can exchange";
@@ -4392,15 +4384,15 @@ turbo_room,93,117,5 script Point Exchange Helper 4_M_TELEPORTER,{
mes "that you'd like to receive.";
mes "To cancel, enter ''^3355FF0^000000.''";
next;
- input .@input;
- if (.@input == 0) {
+ input(.@input);
+ if (.@input <= 0) {
mes "[Item Exchange Helper]";
mes "You have";
mes "canceled";
mes "your request.";
close;
}
- else if (.@input < 0 || .@input > 10) {
+ if (.@input > 10) {
mes "[Item Exchange Helper]";
mes "Your request exceeds";
mes "the maximum limit. You";
@@ -4408,28 +4400,26 @@ turbo_room,93,117,5 script Point Exchange Helper 4_M_TELEPORTER,{
mes "of 10 potions at once.";
close;
}
- else {
- .@total_point = 400 * .@input;
- if (.@total_point > tt_point) {
- mes "[Item Exchange Helper]";
- mes "I'm sorry, but you do";
- mes "not have enough Turbo";
- mes "Track Points. Please check";
- mes "the amount of Turbo Track";
- mes "Points you have earned before";
- mes "redeeming your points again.";
- close;
- }
- tt_point -= .@total_point;
- getitem Speed_Up_Potion,.@input;
+ .@total_point = 400 * .@input;
+ if (.@total_point > tt_point) {
mes "[Item Exchange Helper]";
- mes "Thank you for";
- mes "your patronage.";
- mes "We hope you enjoy";
- mes "your time here in";
- mes "the Turbo Track~";
+ mes "I'm sorry, but you do";
+ mes "not have enough Turbo";
+ mes "Track Points. Please check";
+ mes "the amount of Turbo Track";
+ mes "Points you have earned before";
+ mes "redeeming your points again.";
close;
}
+ tt_point -= .@total_point;
+ getitem Speed_Up_Potion,.@input;
+ mes "[Item Exchange Helper]";
+ mes "Thank you for";
+ mes "your patronage.";
+ mes "We hope you enjoy";
+ mes "your time here in";
+ mes "the Turbo Track~";
+ close;
case 7:
mes "[Item Exchange Helper]";
mes "This Item Exchange";
@@ -4506,59 +4496,57 @@ turbo_room,106,117,3 script Point Manager#tt 4_M_ZONDAOYAJI,{
mes "Please enter the number of times you wish to convert 10 Arena Points into Turbo Track Points. The largest value you may enter";
mes "is 20. To cancel, enter '^3355FF0^000000.'";
next;
- input .@input;
- if (.@input == 0) {
+ input(.@input);
+ if (.@input <= 0) {
mes "[Turbo Track Point Manager]";
mes "You have";
mes "canceled";
mes "your request.";
close;
}
- else if (.@input > 20) {
+ if (.@input > 20) {
mes "[Turbo Track Point Manager]";
mes "Your request exceeds";
mes "the maximum limit. Please";
mes "enter a value no greater than 20.";
close;
}
+ .@want_point1 = 10 * .@input;
+ .@want_point = 5 * .@input;
+ .@my_turbo_all = tt_point+.@want_point;
+ .@my_arena_all = arena_point-.@want_point1;
+ if (.@my_turbo_all > 28999) {
+ mes "[Turbo Track Point Manager]";
+ mes "Unfortunately, your Turbo Track Points will exceed the maximum limit if we proceed with point conversion. Please spend more";
+ mes "of your Turbo Track Points before using this service. Thank you.";
+ close;
+ }
+ if (.@my_arena_all < 0) {
+ mes "[Turbo Track Point Manager]";
+ mes "I am sorry, but you do";
+ mes "not have enough Arena Points";
+ mes "to perform this Turbo Track";
+ mes "Point conversion.";
+ close;
+ }
else {
- .@want_point1 = 10 * .@input;
- .@want_point = 5 * .@input;
- .@my_turbo_all = tt_point+.@want_point;
- .@my_arena_all = arena_point-.@want_point1;
- if (.@my_turbo_all > 28999) {
- mes "[Turbo Track Point Manager]";
- mes "Unfortunately, your Turbo Track Points will exceed the maximum limit if we proceed with point conversion. Please spend more";
- mes "of your Turbo Track Points before using this service. Thank you.";
- close;
- }
- if (.@my_arena_all < 0) {
- mes "[Turbo Track Point Manager]";
- mes "I am sorry, but you do";
- mes "not have enough Arena Points";
- mes "to perform this Turbo Track";
- mes "Point conversion.";
- close;
- }
- else {
- mes "[Turbo Track Point Manager]";
- mes "You have converted";
- mes "10 Arena Points into";
- mes "Turbo Track Points " + .@input + " times.";
- mes "A total of " + .@want_point1 + " Arena Points";
- mes "has been converted into";
- mes "" + .@want_point +" Turbo Track Points.";
- arena_point = .@my_arena_all; //arena_point
- tt_point = .@my_turbo_all;
- next;
- mes "[Turbo Track Point Manager]";
- mes "" + strcharinfo(PC_NAME) + ",";
- mes "you now have";
- mes "^00688B" + tt_point + "^000000 Turbo Track Points";
- mes "and ^4682B4" + arena_point + "^000000 Arena Points.";
- mes "Thank you for your patronage.";
- close;
- }
+ mes "[Turbo Track Point Manager]";
+ mes "You have converted";
+ mes "10 Arena Points into";
+ mes "Turbo Track Points " + .@input + " times.";
+ mes "A total of " + .@want_point1 + " Arena Points";
+ mes "has been converted into";
+ mes "" + .@want_point +" Turbo Track Points.";
+ arena_point = .@my_arena_all; //arena_point
+ tt_point = .@my_turbo_all;
+ next;
+ mes "[Turbo Track Point Manager]";
+ mes "" + strcharinfo(PC_NAME) + ",";
+ mes "you now have";
+ mes "^00688B" + tt_point + "^000000 Turbo Track Points";
+ mes "and ^4682B4" + arena_point + "^000000 Arena Points.";
+ mes "Thank you for your patronage.";
+ close;
}
case 6:
mes "[Turbo Track Point Manager]";
diff --git a/npc/pre-re/jobs/1-1/mage.txt b/npc/pre-re/jobs/1-1/mage.txt
index 47ae792fe..684c7335e 100644
--- a/npc/pre-re/jobs/1-1/mage.txt
+++ b/npc/pre-re/jobs/1-1/mage.txt
@@ -437,50 +437,50 @@ geffen_in,164,112,4 script Mixing Machine HIDDEN_NPC,{
switch(select("Jellopy.", "Fluff.", "Milk.", "Ready to Mix.")) {
case 1:
while(1) {
- input .@input;
+ input(.@input, 0);
if (.@input > 10000) {
next;
mes "[Mixing Machine]";
mes "Error: Item limit exceeded. Please enter values less than 10,000 try again.";
next;
+ continue;
}
- else {
- if (countitem(Jellopy) > 0) .@mixitem1_1 += .@input;
- .@progress = 2;
- break;
- }
+ if (countitem(Jellopy) > 0)
+ .@mixitem1_1 += .@input;
+ .@progress = 2;
+ break;
}
break;
case 2:
while(1) {
- input .@input;
+ input(.@input, 0);
if (.@input > 10000) {
next;
mes "[Mixing Machine]";
mes "Error: Item limit exceeded. Please enter values less than 10,000 try again.";
next;
+ continue;
}
- else {
- if (countitem(Fluff) > 0) .@mixitem1_2 += .@input;
- .@progress = 2;
- break;
- }
+ if (countitem(Fluff) > 0)
+ .@mixitem1_2 += .@input;
+ .@progress = 2;
+ break;
}
break;
case 3:
while(1) {
- input .@input;
+ input(.@input, 0);
if (.@input > 10000) {
next;
mes "[Mixing Machine]";
mes "Error: Item limit exceeded. Please enter values less than 10,000 try again.";
next;
+ continue;
}
- else {
- if (countitem(Milk) > 0) .@mixitem1_3 += .@input;
- .@progress = 2;
- break;
- }
+ if (countitem(Milk) > 0)
+ .@mixitem1_3 += .@input;
+ .@progress = 2;
+ break;
}
break;
@@ -499,40 +499,39 @@ geffen_in,164,112,4 script Mixing Machine HIDDEN_NPC,{
mes "the Magic Powder.";
next;
while(1) {
- input .@input;
- if (.@input < 1000 || .@input > 9999) {
+ input(.@input);
+ if (.@input == 0) {
mes "[Mixing Machine]";
- if (.@input == 0) {
- mes "Do you want to skip this Menu?";
- next;
- if (select("Yes.", "No.") == 1) {
- break;
- }
- }
- else {
- mes "Invalid Serial Number.";
- mes "Please try again.";
- next;
+ mes "Do you want to skip this Menu?";
+ next;
+ if (select("Yes.", "No.") == 1) {
+ break;
}
+ continue;
}
- else {
+ if (.@input < 1000 || .@input > 9999) {
mes "[Mixing Machine]";
- mes "The Serial Number is #" + .@input + ", correct?";
+ mes "Invalid Serial Number.";
+ mes "Please try again.";
next;
- if (select("Confirm.", "Cancel.") == 1) {
- if (.@input == 8472)
- .@magic_powder = 1;
- else if (.@input == 3735)
- .@magic_powder = 2;
- else if (.@input == 2750)
- .@magic_powder = 3;
- else if (.@input == 5429)
- .@magic_powder = 4;
- else
- .@magic_powder = 5;
- }
- break;
+ continue;
}
+ mes "[Mixing Machine]";
+ mes "The Serial Number is #" + .@input + ", correct?";
+ next;
+ if (select("Confirm.", "Cancel.") == 1) {
+ if (.@input == 8472)
+ .@magic_powder = 1;
+ else if (.@input == 3735)
+ .@magic_powder = 2;
+ else if (.@input == 2750)
+ .@magic_powder = 3;
+ else if (.@input == 5429)
+ .@magic_powder = 4;
+ else
+ .@magic_powder = 5;
+ }
+ break;
}
mes "[Mixing Machine]";
mes "Choose a";
diff --git a/npc/pre-re/jobs/1-1/merchant.txt b/npc/pre-re/jobs/1-1/merchant.txt
index 2d1cd9ba3..b6ce65b3d 100644
--- a/npc/pre-re/jobs/1-1/merchant.txt
+++ b/npc/pre-re/jobs/1-1/merchant.txt
@@ -705,7 +705,7 @@ alberta_in,28,29,2 script Merchant Guildsman#mer 4_M_01,{
next;
while(1) {
while(1) {
- input .@input;
+ input(.@input);
if (.@input == 0) {
mes "[Union Staff Kay]";
mes "Are you sure that you wanna cancel?";
@@ -714,14 +714,15 @@ alberta_in,28,29,2 script Merchant Guildsman#mer 4_M_01,{
close;
}
next;
+ continue;
}
- else if (.@input < 1000000 || .@input > 5000000) {
+ if (.@input < 1000000 || .@input > 5000000) {
mes "[Union Staff Kay]";
mes "Hey hey. That number's not valid! Enter a value from 1000000 to 5000000. got it?";
next;
- } else {
- break;
+ continue;
}
+ break;
}
mes "[Union Staff Kay]";
if (.@where_village == 1)
diff --git a/npc/pre-re/jobs/novice/novice.txt b/npc/pre-re/jobs/novice/novice.txt
index 356eaae7d..bbae29988 100644
--- a/npc/pre-re/jobs/novice/novice.txt
+++ b/npc/pre-re/jobs/novice/novice.txt
@@ -82,8 +82,8 @@ new_1-2,100,29,4 script Receptionist#nv1 4_M_04,{
mes "Hello, you look to be new here.";
mes "What is your name?";
next;
- input .@charname$;
- if (.@charname$!=strcharinfo(PC_NAME)) {
+ input(.@charname$);
+ if (.@charname$ != strcharinfo(PC_NAME)) {
mes "[Training Grounds Receptionist]";
mes "Sorry, but I don't think I heard";
mes "you correctly";
diff --git a/npc/quests/bard_quest.txt b/npc/quests/bard_quest.txt
index 7a187e6a3..43ef61cbf 100644
--- a/npc/quests/bard_quest.txt
+++ b/npc/quests/bard_quest.txt
@@ -320,7 +320,7 @@ geffen,132,38,3 script Bard#2 1_M_BARD,{
mes "[" + @name$ + "]";
mes "Don't you think...";
mes "The person would be...";
- input .@inputstr$;
+ input(.@inputstr$);
mes .@inputstr$ + "?";
next;
@@ -546,7 +546,7 @@ geffen,132,38,3 script Bard#2 1_M_BARD,{
mes "The lyrics. They must have been changed. Did Gunther say anything about this?! Hmmm, but who would change the lyrics...?";
next;
cutin "bard_eland01",2;
- input .@inputstr$;
+ input(.@inputstr$);
if (.@inputstr$ == "Kino Kitty") {
mes "[Errende]";
@@ -678,7 +678,7 @@ geffen,132,38,3 script Bard#2 1_M_BARD,{
mes "Could it be that";
mes "the person who";
mes "changed the song is...";
- input .@inputstr$;
+ input(.@inputstr$);
mes "" + .@inputstr$ + "?";
next;
@@ -879,7 +879,7 @@ geffen,132,38,3 script Bard#2 1_M_BARD,{
mes "[Errende]";
mes "The lyrics. They must have been changed. Did Gunther say anything about this?! Hmmm, but who would change the lyrics...?";
next;
- input .@inputstr$;
+ input(.@inputstr$);
if (.@inputstr$ == "Kino Kitty") {
cutin "bard_eland01",2;
mes "[Errende]";
@@ -2486,14 +2486,14 @@ payon,181,172,3 script Bard#4 1_M_BARD,{
mes "Now, what was the";
mes "name of the song again?";
next;
- input .@inputstr$;
+ input(.@inputstr$);
if (.@inputstr$ == "At One, I Fall in Love") {
mes "[Gunther Doubleharmony]";
mes "Ah~ that song...?";
mes "By the way, who asked you";
mes "to find out about the song?";
next;
- input .@inputstr$;
+ input(.@inputstr$);
if (.@inputstr$ == "Minty Errende") {
mes "[Gunther Doubleharmony]";
mes "Yes, that's my friend! Minty Errende! We used to so close to each other, so I'll write every word of the song for my friend Minty Errende, so turn around please!";
@@ -2843,7 +2843,7 @@ yuno_in04,20,123,7 script Representative#bq 4_F_SISTER,{
mes "[Marlin Putiur]";
mes "I also hear the Bards have been helping scholars instill bulletin boards in fields which indicate the location for new adventurers. Would you let me know the full name of the person you're looking for?";
next;
- input .@inputstr$;
+ input(.@inputstr$);
if (.@inputstr$ == "Minty Errende") {
mes "[Marlin Putiur]";
mes "Minty Errende...";
@@ -2909,7 +2909,7 @@ yuno_in04,33,119,3 script Adventurer#1 4_M_ROGUE,{
mes "My name is Pane.";
mes "May I ask yours?";
@name$ = strcharinfo(PC_NAME);
- input .@inputstr$;
+ input(.@inputstr$);
next;
mes "[Energetic Young Man]";
mes "Oh...";
diff --git a/npc/quests/cooking_quest.txt b/npc/quests/cooking_quest.txt
index 505561f52..f124a07d4 100644
--- a/npc/quests/cooking_quest.txt
+++ b/npc/quests/cooking_quest.txt
@@ -1102,8 +1102,8 @@ prt_castle,43,30,3 script Charles Orleans#cook 4_M_OILMAN,{
mes "but I'm not lending those out.";
mes "Oh, and enter 0 to cancel.";
next;
- input .@new_book;
- if (.@new_book < 0 || .@new_book > 5) {
+ input(.@new_book);
+ if (.@new_book > 5) {
cutin "orleans_5",0;
mes "[Charles Orleans]";
mes "Hmm...";
@@ -1113,8 +1113,9 @@ prt_castle,43,30,3 script Charles Orleans#cook 4_M_OILMAN,{
mes "only cookbooks that I will";
mes "lend out to my students.";
callsub L_End;
+ end;
}
- else if (.@new_book == 0) {
+ if (.@new_book <= 0) {
cutin "orleans_5",0;
mes "[Charles Orleans]";
mes "So you changed your mind?";
@@ -1123,6 +1124,7 @@ prt_castle,43,30,3 script Charles Orleans#cook 4_M_OILMAN,{
mes "have right now before trying";
mes "something new, I suppose.";
callsub L_End;
+ end;
}
mes "[Charles Orleans]";
mes "So you wanted to borrow a";
@@ -1131,8 +1133,8 @@ prt_castle,43,30,3 script Charles Orleans#cook 4_M_OILMAN,{
mes "me the level of the cookbook";
mes "that you are returning to me?";
next;
- input .@old_book;
- if (.@old_book < 0 || .@old_book > 5) {
+ input(.@old_book);
+ if (.@old_book > 5) {
mes "[Charles Orleans]";
mes "There must be some";
mes "kind of mistake-- I only";
@@ -1141,8 +1143,9 @@ prt_castle,43,30,3 script Charles Orleans#cook 4_M_OILMAN,{
mes "me again when you remember";
mes "which cookbook you have, okay?";
callsub L_End;
+ end;
}
- else if (.@old_book == 0) {
+ if (.@old_book <= 0) {
cutin "orleans_5",0;
mes "[Charles Orleans]";
mes "So you changed your mind?";
@@ -1151,8 +1154,9 @@ prt_castle,43,30,3 script Charles Orleans#cook 4_M_OILMAN,{
mes "have right now before trying";
mes "something new, I suppose.";
callsub L_End;
+ end;
}
- else if (.@old_book == .@new_book) {
+ if (.@old_book == .@new_book) {
cutin "orleans_4",0;
mes "[Charles Orleans]";
mes "Wait, wait...";
@@ -1162,62 +1166,62 @@ prt_castle,43,30,3 script Charles Orleans#cook 4_M_OILMAN,{
mes "have? I guess you made";
mes "some sort of mistake?";
callsub L_End;
+ end;
}
- else {
- if (countitem(7471+.@old_book) < 1) {
- mes "[Charles Orleans]";
- mes "Wait, wait...";
- mes "Why don't you have";
- mes "the book that you said";
- mes "that you'd return to me?";
- mes "Find it first, and then I can";
- mes "lend another cookbook to you.";
- callsub L_End;
- }
- cutin "orleans_2",0;
+ if (countitem(7471+.@old_book) < 1) {
mes "[Charles Orleans]";
- switch(.@old_book) {
- case 1:
- mes "Ah, so you're done";
- mes "with the Level 1 Cookbook.";
- mes "That's good, that means you're";
- mes "ready to graduate from the most";
- mes "basic of basics. From now on,";
- mes "the recipes will be harder...";
- break;
- case 2:
- mes "Ah, so what did you";
- mes "think of the recipes in";
- mes "the Level 2 Cookbook?";
- mes "Homestyle cooking may be";
- mes "simple, but it should never";
- mes "be neglected by chefs.";
- break;
- case 3:
- mes "Ah, done with the Level 3";
- mes "Cookbook already? The recipes";
- mes "in there are really good when you're cooking romantic dinners.";
- mes "They'll come in handy someday,";
- mes "if you know what I mean.";
- break;
- case 4:
- mes "So you've finished the";
- mes "Level 4 Cookbook. That's";
- mes "no small feat! You've got to";
- mes "use very strange ingredients";
- mes "to create delicious cuisine!";
- break;
- case 5:
- mes "You're done with the";
- mes "Level 5 Cookbook? Good";
- mes "work: most beginners don't";
- mes "even get this far. I suppose";
- mes "you'll want to review some";
- mes "of the easier recipes now~";
- break;
- }
- next;
+ mes "Wait, wait...";
+ mes "Why don't you have";
+ mes "the book that you said";
+ mes "that you'd return to me?";
+ mes "Find it first, and then I can";
+ mes "lend another cookbook to you.";
+ callsub L_End;
+ end;
}
+ cutin "orleans_2",0;
+ mes "[Charles Orleans]";
+ switch(.@old_book) {
+ case 1:
+ mes "Ah, so you're done";
+ mes "with the Level 1 Cookbook.";
+ mes "That's good, that means you're";
+ mes "ready to graduate from the most";
+ mes "basic of basics. From now on,";
+ mes "the recipes will be harder...";
+ break;
+ case 2:
+ mes "Ah, so what did you";
+ mes "think of the recipes in";
+ mes "the Level 2 Cookbook?";
+ mes "Homestyle cooking may be";
+ mes "simple, but it should never";
+ mes "be neglected by chefs.";
+ break;
+ case 3:
+ mes "Ah, done with the Level 3";
+ mes "Cookbook already? The recipes";
+ mes "in there are really good when you're cooking romantic dinners.";
+ mes "They'll come in handy someday,";
+ mes "if you know what I mean.";
+ break;
+ case 4:
+ mes "So you've finished the";
+ mes "Level 4 Cookbook. That's";
+ mes "no small feat! You've got to";
+ mes "use very strange ingredients";
+ mes "to create delicious cuisine!";
+ break;
+ case 5:
+ mes "You're done with the";
+ mes "Level 5 Cookbook? Good";
+ mes "work: most beginners don't";
+ mes "even get this far. I suppose";
+ mes "you'll want to review some";
+ mes "of the easier recipes now~";
+ break;
+ }
+ next;
cutin "orleans_1",0;
mes "[Charles Orleans]";
mes "Now, before I let you";
@@ -2079,8 +2083,8 @@ S_SellSets:
mes "enter the number 0.";
next;
while(1) {
- input .@sell;
- if (.@sell == 0) {
+ input(.@sell);
+ if (.@sell <= 0) {
mes "[Madeleine Chu]";
mes "You've changed your";
mes "mind? Well, if you need";
@@ -2089,15 +2093,16 @@ S_SellSets:
mes "to me at anytime, alright?";
close;
}
- else if (.@sell > 100) {
+ if (.@sell > 100) {
mes "[Madeleine Chu]";
mes "Oh, I'm sorry, but";
mes "I don't sell more than";
mes "100 "+getitemname(getarg(0));
mes "at a time, just to be safe.";
next;
+ continue;
}
- else break;
+ break;
}
.@total_cost = .@sell * .@item_cost;
.@total_weight = .@sell * .@item_weight;
diff --git a/npc/quests/eye_of_hellion.txt b/npc/quests/eye_of_hellion.txt
index a070bf8df..964cfb13b 100644
--- a/npc/quests/eye_of_hellion.txt
+++ b/npc/quests/eye_of_hellion.txt
@@ -1109,7 +1109,7 @@ OnTouch:
mes "all the message says is, um,";
mes "what was that last word again?";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "BINGO") {
mes "[" + strcharinfo(PC_NAME) + "]";
mes "Of course!";
@@ -1211,7 +1211,7 @@ prt_in,128,79,0 script Unknown Machine#prt_key HIDDEN_NPC,{
mes "Ah, right, the numbers";
mes "that Veggie Lady gave me!";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "3847147298") {
mes "^3355FFThe machine responds to";
mes "the password with a pleasant";
@@ -1262,7 +1262,7 @@ prt_in,128,79,0 script Unknown Machine#prt_key HIDDEN_NPC,{
mes "if I can enter the";
mes "right number this time...";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "3847147298") {
mes "^3355FFThe machine responds to";
mes "the password with a pleasant";
@@ -2107,7 +2107,7 @@ geffen,110,200,3 script Sage Welshyun#hellion 4_M_SAGE_A,3,3,{
mes "in the third part of the ballad";
mes "of Grimnir? Well, adventurer?";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Valaskjalf") {
mes "[Welshyun]";
mes "Ah, well met, well met.";
@@ -2291,7 +2291,7 @@ gef_tower,116,37,0 script Enoz#hellion 4_M_ALCHE_A,{
mes "I haven't submitted to him";
mes "yet? So what was it called?";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Monster Life in the Geffen Area") {
mes "[Enoz]";
mes "''Monster Life in";
diff --git a/npc/quests/first_class/tu_sword.txt b/npc/quests/first_class/tu_sword.txt
index fa4c0defb..5c847d7cc 100644
--- a/npc/quests/first_class/tu_sword.txt
+++ b/npc/quests/first_class/tu_sword.txt
@@ -1888,69 +1888,8 @@ geffen,154,143,3 script Dequ'ee 4_M_JOB_KNIGHT2,{
mes "from all the suspects? First,";
mes "tell me the code that Hans had.";
next;
- input .@inputstr$;
- if(.@inputstr$ == .@hans$){
- mes "[Dequ'ee]";
- mes "victkleyundncem?";
- mes "That's certainly";
- mes "strange sounding.";
- mes "Now, tell me Bankley's.";
- next;
- input .@inputstr$;
- if(.@inputstr$ == .@bang$){
- mes "[Dequ'ee]";
- mes "hekdlfiDrindkelsd..";
- mes "What the hell is that...?";
- mes "It's certainly cryptic.";
- mes "What about Muetro's?";
- next;
- input .@inputstr$;
- if(.@inputstr$ == .@mutr$){
- mes "[Dequ'ee]";
- mes "ConBanfoevidehi.";
- mes "This is going to";
- mes "be tough to figure";
- mes "out. Alright, now";
- mes "tell me Geil's.";
- next;
- input .@inputstr$;
- if(.@inputstr$ == .@geil$){
- mes "[Dequ'ee]";
- mes "TheisWesomeof...";
- mes "Alright, great.";
- mes "Now all we have to";
- mes "do is figure out what";
- mes "all of this means.";
- next;
- mes "[Dequ'ee]";
- mes "This is going to";
- mes "be really difficult.";
- mes "Do you have any ideas?";
- mes "We have to figure this";
- mes "out, it's the only clue";
- mes "that we have...";
- tu_swordman = 16;
- changequest 8223,8224;
- close;
- } else {
- mes "[Dequ'ee]";
- mes "...Are you sure that you heard";
- mes "him right? Why don't you go check it out again?";
- close;
- }
- } else {
- mes "[Dequ'ee]";
- mes "...Are you sure that you heard";
- mes "him right? Why don't you go check it out again?";
- close;
- }
- } else {
- mes "[Dequ'ee]";
- mes "...Are you sure that you heard";
- mes "him right? Why don't you go check it out again?";
- close;
- }
- } else {
+ input(.@inputstr$);
+ if(.@inputstr$ != .@hans$) {
mes "[Dequ'ee]";
mes "Are you sure that's right?";
mes "No, no, I don't think it is.";
@@ -1958,6 +1897,63 @@ geffen,154,143,3 script Dequ'ee 4_M_JOB_KNIGHT2,{
mes "if you need to?";
close;
}
+ mes "[Dequ'ee]";
+ mes "victkleyundncem?";
+ mes "That's certainly";
+ mes "strange sounding.";
+ mes "Now, tell me Bankley's.";
+ next;
+ input(.@inputstr$);
+ if(.@inputstr$ != .@bang$) {
+ mes "[Dequ'ee]";
+ mes "...Are you sure that you heard";
+ mes "him right? Why don't you go check it out again?";
+ close;
+ }
+ mes "[Dequ'ee]";
+ mes "hekdlfiDrindkelsd..";
+ mes "What the hell is that...?";
+ mes "It's certainly cryptic.";
+ mes "What about Muetro's?";
+ next;
+ input(.@inputstr$);
+ if(.@inputstr$ != .@mutr$) {
+ mes "[Dequ'ee]";
+ mes "...Are you sure that you heard";
+ mes "him right? Why don't you go check it out again?";
+ close;
+ }
+ mes "[Dequ'ee]";
+ mes "ConBanfoevidehi.";
+ mes "This is going to";
+ mes "be tough to figure";
+ mes "out. Alright, now";
+ mes "tell me Geil's.";
+ next;
+ input(.@inputstr$);
+ if(.@inputstr$ != .@geil$) {
+ mes "[Dequ'ee]";
+ mes "...Are you sure that you heard";
+ mes "him right? Why don't you go check it out again?";
+ close;
+ }
+ mes "[Dequ'ee]";
+ mes "TheisWesomeof...";
+ mes "Alright, great.";
+ mes "Now all we have to";
+ mes "do is figure out what";
+ mes "all of this means.";
+ next;
+ mes "[Dequ'ee]";
+ mes "This is going to";
+ mes "be really difficult.";
+ mes "Do you have any ideas?";
+ mes "We have to figure this";
+ mes "out, it's the only clue";
+ mes "that we have...";
+ tu_swordman = 16;
+ changequest 8223,8224;
+ close;
}
if(tu_swordman == 14){
mes "[Dequ'ee]";
diff --git a/npc/quests/juice_maker.txt b/npc/quests/juice_maker.txt
index 4c5d34b3c..250090495 100644
--- a/npc/quests/juice_maker.txt
+++ b/npc/quests/juice_maker.txt
@@ -256,21 +256,20 @@ payon_in03,188,146,5 script Marx Hansen#juice 4_M_04,{
mes "Choose a number less than 100. If you don't want to, put '0'. You can make up to " + countitem(.@fruit) + " bottles of juice.";
next;
while(1) {
- input .@input;
- if (.@input == 0) {
+ input(.@input);
+ if (.@input <= 0) {
mes "[Merchant Marx Hansen]";
mes "Well then...";
mes "Come again.";
close;
}
- else if (.@input > 100) {
+ if (.@input > 100) {
mes "[Merchant Marx Hansen]";
mes "More than 100 bottles is impossible. Choose a different amount.";
next;
+ continue;
}
- else {
- break;
- }
+ break;
}
.@make = .@input;
break;
diff --git a/npc/quests/kiel_hyre_quest.txt b/npc/quests/kiel_hyre_quest.txt
index 677a81f8d..d1ab7fcaf 100644
--- a/npc/quests/kiel_hyre_quest.txt
+++ b/npc/quests/kiel_hyre_quest.txt
@@ -566,7 +566,7 @@ yuno_fild08,158,194,6 script Security Guard#1::KHAGuard 4_M_EIN_SOLDIER,{
mes "delivered, and I'll verify it";
mes "before letting you inside.";
next;
- input .@KHDelivery$;
+ input(.@KHDelivery$);
if (.@KHDelivery$ != "Lecollane") {
mes "[Security Guard]";
mes "You're here to deliver some";
@@ -576,7 +576,7 @@ yuno_fild08,158,194,6 script Security Guard#1::KHAGuard 4_M_EIN_SOLDIER,{
mes "academy named "+.@KHDelivery$+"";
close;
}
- input .@KHDelivery$ ;
+ input(.@KHDelivery$);
if (.@KHDelivery$ != "Culinary Wine") {
mes "[Security Guard]";
mes "So you're here to make";
@@ -1438,7 +1438,7 @@ kh_school,178,180,4 script Elly 4_F_KHELLY,{
mes "^3355FFElly's not responding...^000000";
close;
case 2:
- input .@KHInput$;
+ input(.@KHInput$);
if (.@KHInput$ == "Wake up, Elly!") {
mes "[Elly]";
mes ".............";
@@ -1453,15 +1453,13 @@ kh_school,178,180,4 script Elly 4_F_KHELLY,{
KielHyreQuest = 34;
close;
}
- else {
- mes "[Elly]";
- mes "......";
- mes ".........";
- mes "............";
- next;
- mes "^3355FFElly's not responding...^000000";
- close;
- }
+ mes "[Elly]";
+ mes "......";
+ mes ".........";
+ mes "............";
+ next;
+ mes "^3355FFElly's not responding...^000000";
+ close;
case 3:
mes "^3355FFAlright...";
mes "But sooner or later,";
@@ -1647,7 +1645,7 @@ kh_school,175,176,0 script Cookie Basket#kh HIDDEN_NPC,{
mes "deliciously bittersweet.";
KielHyreQuest = 109;
next;
- input .@input$;
+ input(.@input$);
mes "["+strcharinfo(PC_NAME)+"]";
mes ""+.@input$+"";
mes "It's time to go back. I can't";
@@ -1703,7 +1701,7 @@ yuno_fild08,71,170,0 script Grave#kh HIDDEN_NPC,{
mes "^3355FFWhat should you";
mes "insert into the slot?^000000";
next;
- input .@KHInput$;
+ input(.@KHInput$);
if (.@KHInput$ == "Yellow Keycard") {
mes "^3355FFAn electronic confirmation";
mes "chime sounds once you insert";
@@ -1713,7 +1711,7 @@ yuno_fild08,71,170,0 script Grave#kh HIDDEN_NPC,{
mes "[Security System]";
mes "Please enter the password.";
next;
- input .@KHInput$;
+ input(.@KHInput$);
next;
if (.@KHInput$ == "4772961") {
mes "[Security System]";
@@ -1726,19 +1724,15 @@ yuno_fild08,71,170,0 script Grave#kh HIDDEN_NPC,{
KielHyreQuest = 38;
close;
}
- else {
- mes "[Security System]";
- mes "Incorrect password.";
- mes "Please try again.";
- close;
- }
- }
- else {
- mes "^3355FFWhatever you're trying";
- mes "to insert into the slot";
- mes "isn't working at all...^000000";
+ mes "[Security System]";
+ mes "Incorrect password.";
+ mes "Please try again.";
close;
}
+ mes "^3355FFWhatever you're trying";
+ mes "to insert into the slot";
+ mes "isn't working at all...^000000";
+ close;
}
}
else if ((KielHyreQuest >= 38) && (KielHyreQuest < 106)) {
@@ -2974,7 +2968,7 @@ kh_vila,185,68,0 script Test Tube::TestTubeKHQ2 HIDDEN_NPC,{
mes "then you know what to call me,";
mes "right? Do you know what I am?";
next;
- input .@KHInput$;
+ input(.@KHInput$);
if (.@KHInput$ == "little lost devil") {
mes "[???]";
mes "Heh... Heh heh...";
@@ -2994,14 +2988,12 @@ kh_vila,185,68,0 script Test Tube::TestTubeKHQ2 HIDDEN_NPC,{
KielHyreQuest = 30;
close;
}
- else {
- mes "[???]";
- mes "No... No...";
- mes "That's not right.";
- mes "I don't think we";
- mes "were friends. No...";
- close;
- }
+ mes "[???]";
+ mes "No... No...";
+ mes "That's not right.";
+ mes "I don't think we";
+ mes "were friends. No...";
+ close;
case 2:
mes "^3355FFLet's investigate";
mes "this area a little";
@@ -3041,7 +3033,7 @@ kh_dun01,235,48,0 script Heavy Door#kh1::HeavyDoorKHQ1 HIDDEN_NPC,{
next;
switch(select("Open Door", "Cancel")) {
case 1:
- input .@KHInput$;
+ input(.@KHInput$);
mes "^3355FFYou try to push the";
mes "door open with all";
mes "your might, but fail";
@@ -3061,7 +3053,7 @@ kh_dun01,235,48,0 script Heavy Door#kh1::HeavyDoorKHQ1 HIDDEN_NPC,{
next;
switch(select("Open Door", "Cancel")) {
case 1:
- input .@KHInput$;
+ input(.@KHInput$);
if (.@KHInput$ == "Blue Keycard") {
mes "^3355FFYou've successfully";
mes "opened the door.";
@@ -3069,13 +3061,11 @@ kh_dun01,235,48,0 script Heavy Door#kh1::HeavyDoorKHQ1 HIDDEN_NPC,{
warp "kh_school",119,144;
end;
}
- else {
- mes "^3355FFYou try to push the";
- mes "door open with all";
- mes "your might, but fail";
- mes "to make it budge.^000000";
- close;
- }
+ mes "^3355FFYou try to push the";
+ mes "door open with all";
+ mes "your might, but fail";
+ mes "to make it budge.^000000";
+ close;
case 2:
mes "^3355FFYou decided to leave";
mes "this door alone until";
@@ -3101,7 +3091,7 @@ kh_dun01,76,233,0 script Heavy Door::HeavyDoorKHQ2 HIDDEN_NPC,{
next;
switch(select("Open Door", "Cancel")) {
case 1:
- input .@KHInput$;
+ input(.@KHInput$);
mes "^3355FFYou try to push the";
mes "door open with all";
mes "your might, but fail";
@@ -3421,7 +3411,7 @@ kh_dun01,166,223,0 script Mechanical Device#kh::KHKeyardReader HIDDEN_NPC,{
mes "operated by inserting the";
mes "correct keycard into the slot.^000000";
next;
- input .@KHInput$;
+ input(.@KHInput$);
if (.@KHInput$ == "Red Keycard") {
mes "^3355FFThe door opens once";
mes "you insert the Red Keycard.^000000";
@@ -3429,10 +3419,8 @@ kh_dun01,166,223,0 script Mechanical Device#kh::KHKeyardReader HIDDEN_NPC,{
warp "kh_dun01",170,227;
end;
}
- else {
- mes "^3355FFNothing happened.^000000";
- close;
- }
+ mes "^3355FFNothing happened.^000000";
+ close;
}
}
@@ -3530,42 +3518,38 @@ kh_dun01,44,203,0 script Entrance Device#khd2::KHAccess HIDDEN_NPC,{
mes "correct keycard into the slot.^000000";
close;
}
- else {
- mes "^3355FFYou encounter";
- mes "a mechanical device.";
- mes "It looks like it can be";
- mes "operated by inserting the";
- mes "correct keycard into the slot.^000000";
- next;
- input .@KHInput$;
- if (.@KHInput$ == "Luxurious Keycard") {
- mes "^3355FFAs you insert the";
- mes "Luxurious Keycard";
- mes "into the keycard slot,";
- mes "the door swings open";
- mes "to reveal a long flight";
- mes "of descending stairs.^000000";
- next;
- switch(select("Descend Stairs", "Cancel")) {
- case 1:
- warp "kh_dun02",41,198;
- end;
- case 2:
- mes "^3355FFIt looks like this door";
- mes "has automatically closed";
- mes "after the preprogrammed";
- mes "time limit has elapsed.^000000";
- close;
- }
- }
- else {
- mes "^3355FFYou try to push the";
- mes "door open with all";
- mes "your might, but fail";
- mes "to make it budge.^000000";
+ mes "^3355FFYou encounter";
+ mes "a mechanical device.";
+ mes "It looks like it can be";
+ mes "operated by inserting the";
+ mes "correct keycard into the slot.^000000";
+ next;
+ input(.@KHInput$);
+ if (.@KHInput$ == "Luxurious Keycard") {
+ mes "^3355FFAs you insert the";
+ mes "Luxurious Keycard";
+ mes "into the keycard slot,";
+ mes "the door swings open";
+ mes "to reveal a long flight";
+ mes "of descending stairs.^000000";
+ next;
+ switch(select("Descend Stairs", "Cancel")) {
+ case 1:
+ warp "kh_dun02",41,198;
+ end;
+ case 2:
+ mes "^3355FFIt looks like this door";
+ mes "has automatically closed";
+ mes "after the preprogrammed";
+ mes "time limit has elapsed.^000000";
close;
}
}
+ mes "^3355FFYou try to push the";
+ mes "door open with all";
+ mes "your might, but fail";
+ mes "to make it budge.^000000";
+ close;
}
kh_dun01,36,195,0 duplicate(KHAccess) Entrance Device#khd1 HIDDEN_NPC
@@ -5703,7 +5687,7 @@ kh_kiehl01,19,25,0 script Box#kh1 HIDDEN_NPC,{
mes "a button for each letter";
mes "of the alphabet on top of it.^000000";
next;
- input .@KHInput$;
+ input(.@KHInput$);
mes "^3355FFNothing happened.^000000";
close;
}
@@ -5713,7 +5697,7 @@ kh_kiehl01,19,25,0 script Box#kh1 HIDDEN_NPC,{
mes "a button for each letter";
mes "of the alphabet on top of it.^000000";
next;
- input .@KHInput$;
+ input(.@KHInput$);
if (.@KHInput$ == "open the door") {
mes "^3355FFAs soon as you enter the";
mes "password, the nearby door";
@@ -5723,23 +5707,17 @@ kh_kiehl01,19,25,0 script Box#kh1 HIDDEN_NPC,{
getitem Toy_Key,1;
close;
}
- else {
- mes "^3355FFNothing happened.^000000";
- close;
- }
- }
- else {
- mes "^3355FFThis is where you";
- mes "found the Toy key^000000";
+ mes "^3355FFNothing happened.^000000";
close;
}
- }
- else{
- mes "^3355FFThe box is wide";
- mes "open, and there";
- mes "is nothing in it.^000000";
+ mes "^3355FFThis is where you";
+ mes "found the Toy key^000000";
close;
}
+ mes "^3355FFThe box is wide";
+ mes "open, and there";
+ mes "is nothing in it.^000000";
+ close;
}
//- Kiehl's Room; Big Door, (First) -
@@ -5752,7 +5730,7 @@ kh_kiehl01,44,33,0 script Big Door#BigDoorKHQ1 HIDDEN_NPC,{
mes "but there is a narrow";
mes "slot next to the doorknob.^000000";
next;
- input .@KHInput$;
+ input(.@KHInput$);
if (.@KHInput$ == "Black Keycard") {
if (countitem(Black_Key_Card) >= 1) {
mes "^3355FFYou insert the";
@@ -5811,7 +5789,7 @@ kh_kiehl01,174,40,0 script Big Door#BigDoorKHQ2 HIDDEN_NPC,{
mes "but there is a small";
mes "keyhole next to the knob.^000000";
next;
- input .@KHInput$;
+ input(.@KHInput$);
if (.@KHInput$ == "Toy Key") {
if (countitem(Toy_Key) >= 1) {
mes "^3355FFYou insert the key into";
@@ -5832,10 +5810,8 @@ kh_kiehl01,174,40,0 script Big Door#BigDoorKHQ2 HIDDEN_NPC,{
mes "to make it budge.^000000";
close;
}
- else {
- mes "^3355FFThe door is open.^000000";
- close;
- }
+ mes "^3355FFThe door is open.^000000";
+ close;
}
kh_kiehl01,174,39,0 script Big_Door_2_Warp WARPNPC,1,1,{
@@ -5869,7 +5845,7 @@ kh_kiehl01,77,108,0 script Big Door#BigDoorKHQ3 HIDDEN_NPC,{
mes "but there is a narrow";
mes "slot next to the doorknob.^000000";
next;
- input .@KHInput$;
+ input(.@KHInput$);
if (.@KHInput$ == "Black Keycard") {
if (countitem(Black_Key_Card) >= 1) {
mes "^3355FFYou insert the";
@@ -5927,7 +5903,7 @@ kh_kiehl01,42,177,0 script Big Door#BigDoorKHQ4 HIDDEN_NPC,{
mes "but there is a narrow";
mes "slot next to the doorknob.^000000";
next;
- input .@KHInput$;
+ input(.@KHInput$);
if (.@KHInput$ == "Black Keycard") {
if (countitem(Black_Key_Card) >= 2) {
mes "^3355FFYou insert the";
@@ -5947,11 +5923,8 @@ kh_kiehl01,42,177,0 script Big Door#BigDoorKHQ4 HIDDEN_NPC,{
mes "to make it budge.^000000";
close;
}
-
- else {
- mes "^3355FFThe door is open.^000000";
- close;
- }
+ mes "^3355FFThe door is open.^000000";
+ close;
}
kh_kiehl01,41,177,0 script Big_Door_4_Warp WARPNPC,1,1,{
diff --git a/npc/quests/lvl4_weapon_quest.txt b/npc/quests/lvl4_weapon_quest.txt
index 977071343..a6a3d8e9b 100644
--- a/npc/quests/lvl4_weapon_quest.txt
+++ b/npc/quests/lvl4_weapon_quest.txt
@@ -2078,7 +2078,7 @@ niflheim,240,193,3 script Kayron#lv4 4_M_NFDEADMAN2,{
mes "[Kayron]";
mes "There's nothing I can do.";
mes "I'm... Um... I'm...?";
- input .@input$;
+ input(.@input$);
next;
if (.@input$ == "I'm utterly helpless here.") {
mes "[Kayron]";
@@ -2112,14 +2112,12 @@ niflheim,240,193,3 script Kayron#lv4 4_M_NFDEADMAN2,{
lv4_weapon = 24;
close;
}
- else {
- mes "[Kayron]";
- mes "Huh...?";
- mes "What did you just say?";
- mes "I'm sorry, I'm trying to remember something my father always used";
- mes "to say...";
- close;
- }
+ mes "[Kayron]";
+ mes "Huh...?";
+ mes "What did you just say?";
+ mes "I'm sorry, I'm trying to remember something my father always used";
+ mes "to say...";
+ close;
}
if (lv4_weapon == 22) {
mes "[Kayron]";
@@ -2530,7 +2528,7 @@ niflheim,99,268,5 script Reyghema#lv4 4_M_NFDEADMAN2,{
mes "something like that,";
mes "but there was more to it...";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Live without regret.") {
mes "[Reyghema]";
mes "...";
@@ -2562,14 +2560,12 @@ niflheim,99,268,5 script Reyghema#lv4 4_M_NFDEADMAN2,{
lv4_weapon = 33;
close;
}
- else {
- mes "[Reyghema]";
- mes "What...?";
- mes "You playin' games";
- mes "with me or what?";
- mes "Get outta my face~";
- close;
- }
+ mes "[Reyghema]";
+ mes "What...?";
+ mes "You playin' games";
+ mes "with me or what?";
+ mes "Get outta my face~";
+ close;
}
if (lv4_weapon == 31) {
mes "[Reyghema]";
@@ -2986,7 +2982,7 @@ niflheim,187,280,3 script Hein#lv4 4_M_NFDEADMAN,{
mes "Back during those days,";
mes "I never accepted money for my work. Father always used to say, 'Never accept payment to forge a good weapon. It... It...'";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "It brings bad luck.") {
mes "[Hein]";
mes "That's right!";
@@ -3017,14 +3013,12 @@ niflheim,187,280,3 script Hein#lv4 4_M_NFDEADMAN,{
mes "of a deal... Right?";
close;
}
- else {
- mes "[Hein]";
- mes "Wha...?";
- mes "What are you talking about?";
- mes "What was I going to say?";
- mes "Oww... My head hurts!";
- close;
- }
+ mes "[Hein]";
+ mes "Wha...?";
+ mes "What are you talking about?";
+ mes "What was I going to say?";
+ mes "Oww... My head hurts!";
+ close;
}
if (lv4_weapon == 40) {
mes "[Hein]";
@@ -3435,7 +3429,7 @@ niflheim,331,72,3 script Waltboughst#lv4 4_M_NFDEADMAN,{
mes "[Waltboughst]";
mes "It's funny, you know. My father always used to say, 'Trying your best won't always result in success...' Um, that's ... Huh? There was more, I think.";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "But that's no excuse!") {
mes "[Waltboughst]";
mes "Yes! That was it!";
@@ -3461,14 +3455,12 @@ niflheim,331,72,3 script Waltboughst#lv4 4_M_NFDEADMAN,{
mes "It seems that being deceased has impaired my rententive faculties. Give me some time to remember the things I'll need to conduct my experiment. We shall talk later.";
close;
}
- else {
- mes "[Waltboughst]";
- mes "What...?";
- mes "No, no. That";
- mes "wasn't it at all...";
- mes "Hmmm.";
- close;
- }
+ mes "[Waltboughst]";
+ mes "What...?";
+ mes "No, no. That";
+ mes "wasn't it at all...";
+ mes "Hmmm.";
+ close;
}
if (lv4_weapon == 49) {
mes "[Waltboughst]";
diff --git a/npc/quests/obb_quest.txt b/npc/quests/obb_quest.txt
index 504e5ff70..c2b0c681c 100644
--- a/npc/quests/obb_quest.txt
+++ b/npc/quests/obb_quest.txt
@@ -672,7 +672,7 @@ moc_ruins,105,62,4 script Jacob#thai 1_M_04,{
mes "[Tommy]";
mes "^FF0000Munak Munak Munak Munak!!^000000";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ != "Pandger Mayer introduced you") {
mes "["+strcharinfo(PC_NAME)+"]";
mes ""+.@input$+"";
diff --git a/npc/quests/quests_13_1.txt b/npc/quests/quests_13_1.txt
index b1e4f90b3..2c2855a8d 100644
--- a/npc/quests/quests_13_1.txt
+++ b/npc/quests/quests_13_1.txt
@@ -824,40 +824,38 @@ lhz_in01,132,259,5 script Sikaiz#1 4_M_LGTGUARD,{
mes "[Sikaiz]";
mes "I already accept you. Just write down your name here. Go ahead.";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ != strcharinfo(PC_NAME)) {
mes "[Sikaiz]";
mes "Don't you know your own name?";
mes "Write it again.";
close;
}
- else {
- mes "[Sikaiz]";
- mes "Ok. I got your name, " + strcharinfo(PC_NAME) + ". Great name! Registration is done!";
- mes "You've become a member of the three kingdoms!";
- next;
- mes "[Sikaiz]";
- mes "All done.";
- mes "Go to the field Officer of Schwartzvalt. He should be in the banquet hall of this building downstairs.";
- next;
- mes "[Sikaiz]";
- mes "Only thing left for you is to go to the Officer to say that you are leaving now.";
- next;
- mes "[Sikaiz]";
- mes "As soon as you tell him,";
- mes "come back to me again.";
- mes "You are not the only one expecting this great challenge. I am too.";
- next;
- mes "[Sikaiz]";
- mes "I believe you can do it!";
- mes "It would bear watching you.";
- next;
- changequest 10073,10074;
- ep13_ryu = 18;
- mes "[Sikaiz]";
- mes "See you then.";
- close;
- }
+ mes "[Sikaiz]";
+ mes "Ok. I got your name, " + strcharinfo(PC_NAME) + ". Great name! Registration is done!";
+ mes "You've become a member of the three kingdoms!";
+ next;
+ mes "[Sikaiz]";
+ mes "All done.";
+ mes "Go to the field Officer of Schwartzvalt. He should be in the banquet hall of this building downstairs.";
+ next;
+ mes "[Sikaiz]";
+ mes "Only thing left for you is to go to the Officer to say that you are leaving now.";
+ next;
+ mes "[Sikaiz]";
+ mes "As soon as you tell him,";
+ mes "come back to me again.";
+ mes "You are not the only one expecting this great challenge. I am too.";
+ next;
+ mes "[Sikaiz]";
+ mes "I believe you can do it!";
+ mes "It would bear watching you.";
+ next;
+ changequest 10073,10074;
+ ep13_ryu = 18;
+ mes "[Sikaiz]";
+ mes "See you then.";
+ close;
}
if (ep13_ryu == 16) {
mes "[Sikaiz]";
@@ -4174,22 +4172,20 @@ mid_camp,188,254,3 script Monster Scholar#ep13 4_M_ALCHE_D,{
mes "["+strcharinfo(PC_NAME)+"]";
mes "The owner of the tricorn hat";
mes "is a monster called...";
- input .@input$;
+ input(.@input$);
if (compare(.@input$,"Tatacho")) {
mes "^FF0000Tatacho^000000";
next;
break;
}
- else {
- next;
- mes "["+strcharinfo(PC_NAME)+"]";
- mes ""+.@input$+"...? I don't think that was the name...";
- next;
- }
+ next;
+ mes "["+strcharinfo(PC_NAME)+"]";
+ mes ""+.@input$+"...? I don't think that was the name...";
+ next;
}
mes "["+strcharinfo(PC_NAME)+"]";
mes "The size of Tatacho is about...";
- input .@input$;
+ input(.@input$);
mes "^3131FF"+.@input$+"^000000, I guess...";
next;
mes "["+strcharinfo(PC_NAME)+"]";
@@ -8478,16 +8474,15 @@ man_fild03,95,301,0 duplicate(manukrock) Mysterious Rock#18 CLEAR_NPC
sec_in02,80,171,0 script Piece of crack#sec 2_MONEMUS,{
callfunc "F_GM_NPC";
mes "1~3000";
- input .@input;
+ input(.@input);
next;
if (.@input < 1 || .@input > 3000) {
mes "Cat trading Point adjust";
mes "You can enter the number between 1~3000.";
close;
- } else {
- ep13_yong1 = .@input;
- close;
}
+ ep13_yong1 = .@input;
+ close;
}
//== Report from the New World :: ep13_1_edq ===============
@@ -10584,7 +10579,7 @@ mid_campin,68,185,3 script Pursuit Party Leader#1 1_F_SIGNZISK,{
mes "[Echinacea]";
mes "Say, what's the tracing pattern number?";
next;
- input .@input$;
+ input(.@input$);
setarray .@pattern$[0],"SDHF92F-SDF","VWNM94GVWN90","CM3-TRDFGHE0";
.@quest = mao_morocc2;
if (.@quest > 25) .@quest -= 3;
@@ -11706,7 +11701,7 @@ mid_camp,256,272,3 script Defaria#moc2 4_M_HUGRANFA,{
mes "[Defaria]";
mes "..Huh? What do you want?";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Dandelion") {
mes "[Defaria]";
mes "..I know they're involved in this case, but";
diff --git a/npc/quests/quests_13_2.txt b/npc/quests/quests_13_2.txt
index e64e1c84a..c3dfa5ab0 100644
--- a/npc/quests/quests_13_2.txt
+++ b/npc/quests/quests_13_2.txt
@@ -3866,7 +3866,7 @@ mid_campin,168,82,3 script Arunafeltz Linguist#1 4_M_TRAINEE,{
mes "Now, let's start with the Fairies! What is the fairy's language like? Please write them down here sentence by sentence!";
next;
.@spl_score00 = 0;
- input .@input$;
+ input(.@input$);
if (.@input$ == "RLGHLRXLA TKANTLFDMS") {
mes "[Linguist Dictionary]";
mes ""+ .@input$ +"....";
@@ -3880,7 +3880,7 @@ mid_campin,168,82,3 script Arunafeltz Linguist#1 4_M_TRAINEE,{
.@spl_score01 = .@spl_score00;
next;
}
- input .@input$;
+ input(.@input$);
if (.@input$ == "WJACK TNAHRDNJSDMFH") {
mes ""+ .@input$ +"....";
mes "And?";
@@ -3893,7 +3893,7 @@ mid_campin,168,82,3 script Arunafeltz Linguist#1 4_M_TRAINEE,{
.@spl_score02 = .@spl_score01;
next;
}
- input .@input$;
+ input(.@input$);
if ((.@input$ == "WLSGHKWND !!") || (.@input$ == "WLSGHKWND")) {
mes ""+ .@input$ +"....";
mes "Is that all?";
@@ -3931,7 +3931,7 @@ mid_campin,168,82,3 script Arunafeltz Linguist#1 4_M_TRAINEE,{
mes "Good. then next is the Wooden Giants! What's their language like? Write them down sentence by sentence just as you did with the Fairy's.";
next;
.@man_score00 = 0;
- input .@input$;
+ input(.@input$);
if (.@input$ == "TJDTMFJDNS CJFDI") {
mes "[Linguist Dictionary]";
mes ""+ .@input$ +"....";
@@ -3945,7 +3945,7 @@ mid_campin,168,82,3 script Arunafeltz Linguist#1 4_M_TRAINEE,{
.@man_score01 = .@man_score00;
next;
}
- input .@input$;
+ input(.@input$);
if (.@input$ == "TKADLFDMF QKATOS") {
mes ""+ .@input$ +"....";
mes "And?";
@@ -3958,8 +3958,8 @@ mid_campin,168,82,3 script Arunafeltz Linguist#1 4_M_TRAINEE,{
.@man_score02 = .@man_score01;
next;
}
- input .@input$;
- if ((.@input$ == "EKDTLSDML DLFMADMS..") || (.@input$ == "EKDTLSDML DLFMADMS")) {
+ input(.@input$);
+ if (.@input$ == "EKDTLSDML DLFMADMS.." || .@input$ == "EKDTLSDML DLFMADMS") {
mes ""+ .@input$ +"....";
mes "This is it?";
.@man_score03 = .@man_score02+1;
diff --git a/npc/quests/quests_airship.txt b/npc/quests/quests_airship.txt
index bc6d73fad..58fde1bdb 100644
--- a/npc/quests/quests_airship.txt
+++ b/npc/quests/quests_airship.txt
@@ -192,26 +192,26 @@ airplane,47,61,7 script Crewman#ein 4_M_ZONDAOYAJI,{
mes("not send this up after all...");
emotion(e_an);
close();
- } else if (.@comment$ == "0") {
+ }
+ if (.@comment$ == "0") {
mes("[Kain Himere]");
mes("Ah, well, if you have any");
mes("helpful criticism about our");
mes("service, feel free to leave");
mes("me a comment at any time.");
close();
- } else {
- mesf("[%s]", strcharinfo(PC_NAME));
- mesf("%s.", .@comment$);
- next();
- mes("[Kain Himere]");
- mes("Hmmmm...");
- mes("I see. Well, I'll");
- mes("send your message");
- mes("to my superiors as");
- mes("soon as possible.");
- mes("Thank you very much.");
- close();
}
+ mesf("[%s]", strcharinfo(PC_NAME));
+ mesf("%s.", .@comment$);
+ next();
+ mes("[Kain Himere]");
+ mes("Hmmmm...");
+ mes("I see. Well, I'll");
+ mes("send your message");
+ mes("to my superiors as");
+ mes("soon as possible.");
+ mes("Thank you very much.");
+ close();
}
} else if (kain_ticket == 2) {
select("About the Airship...");
diff --git a/npc/quests/quests_ein.txt b/npc/quests/quests_ein.txt
index f5b2e14a6..5c1ac9ee2 100644
--- a/npc/quests/quests_ein.txt
+++ b/npc/quests/quests_ein.txt
@@ -3684,7 +3684,7 @@ ein_in01,231,163,7 script Sick Old Man#ein 4_M_DIEMAN,{
mes "["+strcharinfo(PC_NAME)+"]";
mes "It was...";
next;
- input .@input$;
+ input(.@input$);
mes "["+strcharinfo(PC_NAME)+"]";
mes "It was";
mes "^3131FF"+.@input$+"^000000!";
@@ -4214,7 +4214,7 @@ OnTouch:
.@word2$ = "burapaphurarlandreamduranbatuhiwooikabamturubamdingding";
mes "^3CBCBC"+.@word1$+"^000000";
next;
- input .@input1$;
+ input(.@input1$);
mes "[Security System]";
mes "^FF1493"+.@word2$+"^000000";
break;
@@ -4223,7 +4223,7 @@ OnTouch:
.@word2$ = "opeN,Open!op3n.openOpen0p3nOpEn0pen`open'0Pen open?open!111OPENSESAME";
mes "^3CBCBC"+.@word1$+"^000000";
next;
- input .@input1$;
+ input(.@input1$);
mes "[Security System]";
mes "^FF1493"+.@word2$+"^000000";
break;
@@ -4232,7 +4232,7 @@ OnTouch:
.@word2$ = "hfjdkeldjsieldjshfjdjeiskdlefvbd";
mes "^3CBCBC"+.@word1$+"^000000";
next;
- input .@input1$;
+ input(.@input1$);
mes "[Security System]";
mes "^FF1493"+.@word2$+"^000000";
break;
@@ -4241,7 +4241,7 @@ OnTouch:
.@word2$ = "LiGhTsPeEd RiGhT SPEed LeFT TURn RiGhT BuRn OrIGInAL GaNgSteR SmACk";
mes "^3CBCBC"+.@word1$+"^000000";
next;
- input .@input1$;
+ input(.@input1$);
mes "[Security System]";
mes "^FF1493"+.@word2$+"^000000";
break;
@@ -4251,7 +4251,7 @@ OnTouch:
mes "^3CBCBCBy the power of p-po-poi-po-poi-poin-poing";
mes "GOD-POING. I NEVER LOSE!^000000";
next;
- input .@input1$;
+ input(.@input1$);
mes "[Security System]";
mes "^FF1493"+.@word2$+"^000000";
break;
@@ -4260,7 +4260,7 @@ OnTouch:
.@word2$ = "fReeDoM eCstAcy JoUrnaLiSm ArMpIt DisCoverY hEaDaChE MoonbeAmS jUsTiCE";
mes "^3CBCBC"+.@word1$+"^000000";
next;
- input .@input1$;
+ input(.@input1$);
mes "[Security System]";
mes "^800080"+.@word2$+"^000000";
break;
@@ -4269,12 +4269,12 @@ OnTouch:
.@word2$ = "0uNflAPPaBLe LoVaBLe SeCreTs AnD BoWLiNg aGaINST tHe KarMA of YoUtH";
mes "^3CBCBC"+.@word1$+"^000000";
next;
- input .@input1$;
+ input(.@input1$);
mes "[Security System]";
mes "^800080"+.@word2$+"^000000";
}
next;
- input .@input2$;
+ input(.@input2$);
.@endtime = gettime(GETTIME_HOUR)*60*60+gettime(GETTIME_MINUTE)*60+gettime(GETTIME_SECOND);
.@time = .@endtime-.@startseconds;
mes "[Security System]";
@@ -4502,7 +4502,7 @@ ein_in01,31,138,3 script Calla#ein 4_F_01,{
mes "me! Would you please";
mes "tell me your name?";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == strcharinfo(PC_NAME)) {
mes "[Calla]";
mes "Ah, " + strcharinfo(PC_NAME) + "!";
@@ -4520,14 +4520,12 @@ ein_in01,31,138,3 script Calla#ein 4_F_01,{
changequest 8079,808;
close;
}
- else {
- mes "[Calla]";
- mes "I'm sorry...";
- mes "I didn't catch that.";
- mes "Would you please tell";
- mes "me your name again?";
- close;
- }
+ mes "[Calla]";
+ mes "I'm sorry...";
+ mes "I didn't catch that.";
+ mes "Would you please tell";
+ mes "me your name again?";
+ close;
}
if (EIN_LOVERQ == 4) {
mes "[Calla]";
@@ -4822,7 +4820,7 @@ ein_in01,200,101,5 script Klitzer#ein 4_M_EINMAN2,{
mes "So...";
mes "What's your name?";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == strcharinfo(PC_NAME)) {
mes "[Klitzer]";
mes "" + strcharinfo(PC_NAME) + "...";
@@ -4842,16 +4840,14 @@ ein_in01,200,101,5 script Klitzer#ein 4_M_EINMAN2,{
mes "likes meeting my friends.";
close;
}
- else {
- mes "[Klitzer]";
- mes "Hm...?";
- mes "Oh, don't be";
- mes "so nervous~";
- mes "But would you please";
- mes "tell me your name again?";
- mes "I couldn't hear you...";
- close;
- }
+ mes "[Klitzer]";
+ mes "Hm...?";
+ mes "Oh, don't be";
+ mes "so nervous~";
+ mes "But would you please";
+ mes "tell me your name again?";
+ mes "I couldn't hear you...";
+ close;
}
if (EIN_LOVERQ == 5) {
mes "[Klitzer]";
@@ -5141,7 +5137,7 @@ ein_in01,31,151,3 script Satra#ein 4_F_EINWOMAN,{
mes "only delivering them? Then";
mes "who actually gathered these?";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Klitzer") {
mes "[Satra]";
mes "Ah, Klitzer?";
@@ -5192,14 +5188,12 @@ ein_in01,31,151,3 script Satra#ein 4_F_EINWOMAN,{
mes "occasion. Ho ho ho ho ho~";
close;
}
- else {
- mes "[Satra]";
- mes "I beg your pardon?";
- mes .@input$ + "? Oh my...";
- mes "I believe I may have";
- mes "misheard you. Ho ho ho ho~";
- close;
- }
+ mes "[Satra]";
+ mes "I beg your pardon?";
+ mes .@input$ + "? Oh my...";
+ mes "I believe I may have";
+ mes "misheard you. Ho ho ho ho~";
+ close;
}
if (EIN_LOVERQ == 12) {
mes "[Satra]";
diff --git a/npc/quests/quests_geffen.txt b/npc/quests/quests_geffen.txt
index a582bfa8e..522d96e30 100644
--- a/npc/quests/quests_geffen.txt
+++ b/npc/quests/quests_geffen.txt
@@ -306,7 +306,7 @@ geffen,122,77,4 script Nia#yagu 8_F_GIRL,{
// Guess a number that meets all conditions.
while(1) {
- if (input(.@input,100,999) != 0) {
+ if (input(.@input, 100, 999) != 0) {
mes "[Nia]";
mes "You've canceled the";
mes "Number Match game.";
diff --git a/npc/quests/quests_hugel.txt b/npc/quests/quests_hugel.txt
index 9af2ab5fc..a036cd80b 100644
--- a/npc/quests/quests_hugel.txt
+++ b/npc/quests/quests_hugel.txt
@@ -2779,7 +2779,7 @@ hu_in01,256,40,3 script Herico 4_M_HUGRANFA,{
mes "[Herico]";
mes "By any chance, do you know a man who can aid his power in stopping them?";
next;
- input .@inputstr$;
+ input(.@inputstr$);
if (.@inputstr$ == "President Karl" || .@inputstr$ == "President Weierstrass" || .@inputstr$ == "President" || .@inputstr$ == "Karl Weierstrass") {
mes "["+strcharinfo(PC_NAME)+"]";
mes "I think that I know one...";
@@ -7566,7 +7566,7 @@ L_MilkCow:
mes "you need to brush her a";
mes "certain number of times.^000000";
next;
- input .@cowbrush;
+ input(.@cowbrush);
if (.@cowbrush != getarg(1)) {
soundeffect "taming_fail.wav",0;
mes "^3355FFAwwww...";
@@ -7646,7 +7646,7 @@ L_MilkCow:
mes "song in Burupu's notes, and then tell her the correct world without";
mes "the tilde character (''~'').^000000";
next;
- input .@cowanswer$;
+ input(.@cowanswer$);
if (.@cowanswer$ == .@cowsong$) {
soundeffect "tming_success.wav",0;
mes "^3355FFSuccess!";
diff --git a/npc/quests/quests_lighthalzen.txt b/npc/quests/quests_lighthalzen.txt
index 4795110d6..a8386ed46 100644
--- a/npc/quests/quests_lighthalzen.txt
+++ b/npc/quests/quests_lighthalzen.txt
@@ -737,7 +737,7 @@ lhz_cube,234,202,0 script Picture#cube HIDDEN_NPC,{
mes "hard to move with just";
mes "brute strength alone.^000000";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Jackknife") {
mes "^3355FFYou take the";
mes "Jackknife, thrust";
@@ -817,7 +817,7 @@ lhz_cube,242,201,0 script Drawer#cube HIDDEN_NPC,{
mes "it's locked. Hopefully, you";
mes "can figure how to open it.^000000";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Red Key") {
mes "^3355FFYou insert the Red Key";
mes "into the lock and open the";
@@ -891,7 +891,7 @@ lhz_cube,237,183,0 script Barrel#cube HIDDEN_NPC,{
mes "you need something to";
mes "smash the barrel open.^000000";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Axe") {
mes "^3355FFAxe in hand, you lift";
mes "it above your head and";
@@ -924,7 +924,7 @@ lhz_cube,237,183,0 script Barrel#cube HIDDEN_NPC,{
mes "digit numbers at one time...^000000";
next;
for( $@i = 0; .@i < 9; ++.@i )
- input .@input;
+ input(.@input);
mes "^3355FFNothing happened...^000000";
close;
}
@@ -941,8 +941,9 @@ lhz_cube,237,183,0 script Barrel#cube HIDDEN_NPC,{
mes "you found inside the keg.^000000";
next;
for( $@i = 0; .@i < 9; ++.@i ) {
- input .@input;
- if (.@input == .@numbers[.@i]) .@number_line += 1;
+ input(.@input);
+ if (.@input == .@numbers[.@i])
+ .@number_line += 1;
}
if (.@number_line == 9) {
mes "^3355FFThe metal plate slides";
@@ -980,7 +981,7 @@ lhz_cube,224,192,0 script Power Generator#cube HIDDEN_NPC,{
mes "keyhole on the machine";
mes "right next to this panel.^000000";
next;
- input .@input$;
+ input(.@input$);
mes "^3355FFNothing happened.";
mes "You probably need";
mes "to find the right key to";
@@ -995,7 +996,7 @@ lhz_cube,224,192,0 script Power Generator#cube HIDDEN_NPC,{
mes "keyhole on the machine";
mes "right next to this panel.^000000";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Yellow Key") {
mes "^3355FFYou insert the";
mes "Yellow Key into the";
@@ -1264,7 +1265,7 @@ lhz_cube,247,198,0 script Bed#cube HIDDEN_NPC,{
mes "spot an object. If only you";
mes "could reach it somehow...^000000";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Short Stick") {
mes "^3355FFYou try to reach";
mes "the object by using";
@@ -1302,7 +1303,7 @@ lhz_cube,247,198,0 script Bed#cube HIDDEN_NPC,{
mes "spot an object. If only you";
mes "could reach it somehow...^000000";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Long Stick") {
mes "^3355FFWith Long Stick in";
mes "hand, you manage to";
@@ -1376,7 +1377,7 @@ lhz_cube,231,202,0 script Chemicals#cube HIDDEN_NPC,{
mes "corrosive chemicals";
mes "that is sitting on the ledge.^000000";
next;
- input .@input$;
+ input(.@input$);
mes "^3355FFWhatever you tried to";
mes "pour the chemicals on";
mes "wasn't affected at all.";
@@ -1390,7 +1391,7 @@ lhz_cube,231,202,0 script Chemicals#cube HIDDEN_NPC,{
mes "corrosive chemicals";
mes "that is sitting on the ledge.^000000";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Rusty Key") {
mes "^3355FFPouring the chemicals";
mes "on the Rusty Key removes";
@@ -1425,7 +1426,7 @@ lhz_cube,249,191,0 script Cabinet#cube HIDDEN_NPC,{
mes "something useful is inside?";
next;
if (select("Open", "Cancel") == 1) {
- input .@input$;
+ input(.@input$);
mes "^3355FFUnfortunately, the";
mes "cabinet has been locked.";
mes "You'll need the right key";
@@ -1439,7 +1440,7 @@ lhz_cube,249,191,0 script Cabinet#cube HIDDEN_NPC,{
mes "many drawers. Perhaps";
mes "something useful is inside?";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Green Key") {
mes "^3355FFYou take the Green Key";
mes "and finds that it fits into";
@@ -1478,7 +1479,7 @@ lhz_cube,224,197,0 script Experiment Tube#cube HIDDEN_NPC,{
mes "a thin plate with a keyhole";
mes "and a card insertion slot.^000000";
next;
- input .@input$;
+ input(.@input$);
mes "^3355FFNothing happened.";
mes "You'll probably need";
mes "to find the right key for";
@@ -1494,7 +1495,7 @@ lhz_cube,224,197,0 script Experiment Tube#cube HIDDEN_NPC,{
mes "a thin plate with a keyhole";
mes "and a card insertion slot.^000000";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Black Key") {
mes "^3355FFYou insert the Black Key";
mes "into the keyhole, causing";
@@ -1524,7 +1525,7 @@ lhz_cube,224,197,0 script Experiment Tube#cube HIDDEN_NPC,{
mes "rectangular card slot";
mes "in front of the tube.^000000";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Laboratory Permit") {
if (countitem(Lab_Passport)) {
mes "^3355FFYou insert the";
@@ -1575,7 +1576,7 @@ lhz_cube,248,193,0 script Box#cube1 HIDDEN_NPC,{
mes "shaped holes.^000000";
next;
select("Oval Hole", "Cubic Hole", "Polygon Hole");
- input .@input$;
+ input(.@input$);
mes "^3355FFNothing happened.^000000";
close;
}
@@ -1588,7 +1589,7 @@ lhz_cube,248,193,0 script Box#cube1 HIDDEN_NPC,{
case 1:
if (lhz_secret01 == 9) {
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Oval") {
mes "^3355FFYou insert the Oval";
mes "into the Oval shaped";
@@ -1606,13 +1607,13 @@ lhz_cube,248,193,0 script Box#cube1 HIDDEN_NPC,{
mes "any Ovals to spare, anyway.^000000";
close;
}
- input .@input$;
+ input(.@input$);
mes "^3355FFNothing happened.^000000";
close;
case 2:
if (lhz_secret02 == 4) {
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Cube") {
mes "^3355FFYou insert the Cube";
mes "into the Cubic hole";
@@ -1634,13 +1635,13 @@ lhz_cube,248,193,0 script Box#cube1 HIDDEN_NPC,{
mes "a total waste of time.^000000";
close;
}
- input .@input$;
+ input(.@input$);
mes "^3355FFNothing happened.^000000";
close;
case 3:
if (lhz_secret03 == 3) {
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Polygon") {
mes "^3355FFFortunately, the";
mes "nondescript Polygon";
@@ -1662,7 +1663,7 @@ lhz_cube,248,193,0 script Box#cube1 HIDDEN_NPC,{
mes "as this Polygon can do for you.^000000";
close;
}
- input .@input$;
+ input(.@input$);
mes "^3355FFNothing happened.^000000";
close;
}
@@ -2829,7 +2830,7 @@ lighthalzen,337,232,3 script Maku 4_M_LGTPOOR,{
mes "Tell me what that fink";
mes "has to say, line by line!";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Hopeless bastard!") {
mes "[Maku]";
mes "''Hopeless bastard?!''";
@@ -2838,7 +2839,7 @@ lighthalzen,337,232,3 script Maku 4_M_LGTPOOR,{
mes "Through somebody else";
mes "anyway! What else'd he say?!";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "You're still a stubborn jerk!") {
mes "[Maku]";
mes "''Stubborn jerk?!''";
@@ -2846,7 +2847,7 @@ lighthalzen,337,232,3 script Maku 4_M_LGTPOOR,{
mes "bastard! Why I oughta--";
mes "Grrr! What'd he say next?!";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "You owe me at least 3 lunches!") {
mes "[Maku]";
mes "Three lunches?!";
@@ -2856,7 +2857,7 @@ lighthalzen,337,232,3 script Maku 4_M_LGTPOOR,{
mes "know the meaning of friendship!";
mes "What else did that moron say?!";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Not to mention an apology!") {
cutin "lhz_macu05",255;
mes "[Maku]";
@@ -2867,7 +2868,7 @@ lighthalzen,337,232,3 script Maku 4_M_LGTPOOR,{
mes "That selfish no-good stupid...";
mes "W-what else did he tell you?!";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "But who cares what you think?!") {
mes "[Maku]";
mes "''Who cares what I think?!''";
@@ -2877,7 +2878,7 @@ lighthalzen,337,232,3 script Maku 4_M_LGTPOOR,{
mes "dumb creep! He can't possibly";
mes "make me angrier than I am now!";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "I'm so goddamn happy without you!") {
friendship = 5;
cutin "lhz_macu06",2;
@@ -9071,7 +9072,7 @@ lhz_fild02,228,214,0 script Wounded Man 4_M_DIEMAN,{
mes "What... What organization";
mes "are you working for...?";
next;
- input @jargeah$;
+ input(@jargeah$);
if((@jargeah$ == "Kafra Corporation") || (@jargeah$ == "Secret Wing"))
{
mes "[Jargeah]";
@@ -9689,9 +9690,8 @@ OnTouch:
mes "password to open the door.^000000";
next;
while (true) {
- input @sneakpass;
- if(@sneakpass == 738495)
- {
+ input(@sneakpass);
+ if (@sneakpass == 738495) {
mes "^3355FF*Beep~*";
mes "You hear a pleasant";
mes "sounding electronic chirp,";
@@ -9822,7 +9822,7 @@ lhz_in01,182,35,0 script File Search Engine HIDDEN_NPC,{
mes "Please do not use";
mes "capital letters.^000000";
next;
- input @sneaksearch$;
+ input(@sneaksearch$);
if((@sneaksearch$ == "kafra") || (@sneaksearch$ == "cool event"))
{
mes "^663300[Search Result]";
@@ -10327,7 +10327,7 @@ sec_in02,17,170,4 script boss::lght_boss_admin 1_M_SIGNMONK,{
case 1:
break;
case 2:
- input .@input,0,1000;
+ input(.@input, 0, 1000);
lght_boss = .@input;
break;
case 3:
diff --git a/npc/quests/quests_louyang.txt b/npc/quests/quests_louyang.txt
index 03816faf2..f5edbd744 100644
--- a/npc/quests/quests_louyang.txt
+++ b/npc/quests/quests_louyang.txt
@@ -658,7 +658,7 @@ lou_fild01,175,173,3 script Jiu Lian Bu#1-2 4_M_CHN8GUEK,{
mes "Ready~!";
mes "Say it out loud!";
next;
- input .@input$;
+ input(.@input$);
mes "["+strcharinfo(PC_NAME)+"]";
mes .@input$;
mapannounce "lou_fild01","'"+strcharinfo(PC_NAME)+"' shouts : "+.@input$,bc_map,"0x9CFF00";
@@ -683,7 +683,7 @@ lou_fild01,175,173,3 script Jiu Lian Bu#1-2 4_M_CHN8GUEK,{
mes "Alright~!";
mes "Say it out loud!";
next;
- input .@input$;
+ input(.@input$);
mes "["+strcharinfo(PC_NAME)+"]";
mes .@input$;
mapannounce "lou_fild01","'"+strcharinfo(PC_NAME)+"' shouts : "+.@input$,bc_map,"0x9CFF00";
@@ -1856,7 +1856,7 @@ lou_in02,210,47,0 script City Hall Officer#lou 4_M_CHNSOLDIER,{
mes "Nothing of importance. Now, I'm very busy, so if you would go fill the application over there...";
close;
}
- input .@input;
+ input(.@input);
if (.@input < 10000) {
mes "[Jin Chiyuan]";
mes "Good lord,";
@@ -2070,7 +2070,7 @@ lou_in02,156,38,0 script Studying Officer#lou 4_M_CHNMAN,{
mes "So what kind of document";
mes "did you need?";
next;
- input .@input$;
+ input(.@input$);
switch (ch_par) {
case 11:
if (.@input$ == "Residence Transfer Application")
@@ -2686,7 +2686,7 @@ lou_in02,123,39,4 script Poison King#lou 4_M_CHNOLD,{
next;
mes "["+strcharinfo(PC_NAME)+"]";
mes "Yeah, I've got some news you might be interested in.";
- input .@input$;
+ input(.@input$);
mes "["+strcharinfo(PC_NAME)+"]";
mes ""+.@input$+"";
next;
@@ -2710,7 +2710,7 @@ lou_in02,123,39,4 script Poison King#lou 4_M_CHNOLD,{
mes "[Nagash Arses]";
mes "I just told you what 'Canine of Desert' is. Now you tell me what it is. If you were listening, you would be able to.";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Assassin Organization" || .@input$ == "Assassin" || .@input$ == "Assassins") {
mes "[Nagash Arses]";
mes "Correct. You listened to me very well. They are Assassins. Assassins that were abandoned by society.";
@@ -2843,7 +2843,7 @@ lou_in02,123,39,4 script Poison King#lou 4_M_CHNOLD,{
mes "["+strcharinfo(PC_NAME)+"]";
mes "I have news";
mes "of Morroc...";
- input .@input$;
+ input(.@input$);
mes "["+strcharinfo(PC_NAME)+"]";
mes ""+.@input$+"";
next;
@@ -2862,7 +2862,7 @@ lou_in02,123,39,4 script Poison King#lou 4_M_CHNOLD,{
mes "[Nagash Arses]";
mes "I just told you what 'Canine of Desert.' If you can't remember what I just told you, it's no use for me to explain further. You go ahead and tell me what it is.";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Assassin Organization" || .@input$ == "Assassin" || .@input$ == "Assassins") {
mes "[Nagash Arses]";
mes "Correct. You listened to me very well. They are Assassins. Assassins that were abandoned by society.";
@@ -3449,7 +3449,7 @@ lou_in02,253,45,0 script Employee#poison 4_M_CHNMAN,{
mes "What did";
mes "you just say...?";
next;
- input .@input$;
+ input(.@input$);
mes "[Song Zhi Du]";
mes ""+.@input$+"...?";
next;
@@ -4158,7 +4158,7 @@ lou_fild01,224,348,0 script Lady#delivery 4_F_CHNDRESS3,{
mes "Please tell me";
mes "his name.";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Song Zhi Du") {
mes "[Lady]";
mes "Oh, I see.";
diff --git a/npc/quests/quests_morocc.txt b/npc/quests/quests_morocc.txt
index 592711c24..2700244d5 100644
--- a/npc/quests/quests_morocc.txt
+++ b/npc/quests/quests_morocc.txt
@@ -1887,6 +1887,7 @@ OnTimer25000:
end;
OnDisable:
+ stopnpctimer;
disablenpc "Satan Broadcast#edq";
end;
}
@@ -1912,20 +1913,11 @@ moc_fild21,178,239,0 script Group of Evil#edq CLEAR_NPC,1,1,{
mes "You can feel the power of the darkness rise from the gap where light and darkness are mingled.";
close;
}
-
-OnInit:
- enablenpc "Group of Evil#edq";
- end;
-
+
OnEnable:
enablenpc "Group of Evil#edq";
$@re_moc_time$ = "";
end;
-
-OnDisable:
- disablenpc "Group of Evil#edq";
- donpcevent "Time-Space Gap#edq::OnEnable";
- end;
}
moc_fild21,177,239,0 script Time-Space Gap#edq CLEAR_NPC,1,1,{
@@ -1968,8 +1960,6 @@ OnTimer1800000:
end;
OnTimer21600000:
- stopnpctimer;
- $@re_moc = 0;
donpcevent "Time-Space Gap#edq::OnDisable";
end;
}
@@ -1998,7 +1988,9 @@ OnMyMobDead:
mapannounce "moc_fild21","I'll let live just a little longer. You'll never find me through this time-space gap!",bc_map,"0xFFFF00";
donpcevent "Time-Space Gap#edq::OnEnable";
donpcevent "Satan Broadcast#edq::OnDisable";
- donpcevent "Group of Evil#edq::OnDisable";
+ disablenpc "Group of Evil#edq";
+ stopnpctimer;
+ killmonster "moc_fild21","Satan Summon#edq::OnMyMobDead";
disablenpc "Satan Summon#edq";
end;
@@ -2008,9 +2000,6 @@ OnTimer5400000:
OnTimer5415000:
mapannounce "moc_fild21","I don't have time for this! Go away!",bc_map,"0xFFFF00";
- stopnpctimer;
- killmonster "moc_fild21","Satan Summon#edq::OnMyMobDead";
- $@re_moc = 0;
donpcevent "Satan Summon#edq::OnDisable";
end;
}
@@ -2444,7 +2433,7 @@ prt_in,179,92,3 script Library Curator#garas 1_M_LIBRARYMASTER,{
mes "[Curator Guys]";
mes "Oh, do you know the title?";
mes "Sure, now what's the name?";
- input .@input$;
+ input(.@input$);
next;
if (compare(.@input$,"The Crow of the Fate") == 1) {
mes "[Curator Guys]";
@@ -2462,7 +2451,7 @@ prt_in,179,92,3 script Library Curator#garas 1_M_LIBRARYMASTER,{
mes "[Curator Guys]";
mes "Oh, do you know the author?";
mes "Sure, now what's the name?";
- input .@input$;
+ input(.@input$);
next;
if (compare(.@input$,"Oliver Hilpert") == 1) {
mes "[Curator Guys]";
@@ -2481,7 +2470,7 @@ prt_in,179,92,3 script Library Curator#garas 1_M_LIBRARYMASTER,{
mes "You must be having a hard time remembering the book's title or author.";
mes "No problem; why don't you tell me at least a little bit of what you remember?";
next;
- input .@input$;
+ input(.@input$);
if ((compare(.@input$,"Fate") == 1) || (compare(.@input$,"Crow") == 1) || (compare(.@input$,"Oliver") == 1) || (compare(.@input$,"Hilpert") == 1)) {
mes "[Curator Guys]";
mes ""+.@input$+"...?";
@@ -3901,7 +3890,7 @@ cave,82,97,3 script Cave Settler#g1 4_M_CAVE1,3,3,{
next;
mes "["+ strcharinfo(PC_NAME) +"]";
mes "I'm here to find somebody!";
- input .@input$;
+ input(.@input$);
mes "Her name is ^FF0000"+.@input$+"^000000!";
next;
if (compare(.@input$,"Eva") == 0) {
@@ -3911,43 +3900,41 @@ cave,82,97,3 script Cave Settler#g1 4_M_CAVE1,3,3,{
warp "cave",81,92;
end;
}
- else {
- mes "[Cave Settler]";
- mes "............!!!!";
- next;
- mes "[Cave Settler]";
- mes "Did you just say Eva?";
- mes "Hmm...";
- mes "Wait here.";
- next;
- emotion e_com;
- mes "[Cave Settler]";
- mes "Hey, Jaeda!";
- enablenpc "Jaeda#garas1";
- next;
- mes "[Cave Settler]";
- mes "Go upstairs, and tell Eva that she has a visitor.";
- disablenpc "Jaeda#garas1";
- next;
- mes "^660000Surprisingly, he seemed to know who Eva is. You still could not believe that she actually exists! It's all so very strange.^000000";
- next;
- mes "^660000You can feel the excitement and anticipation well within you. Maybe you're coming closer to learning what your dreams really mean.^000000";
- enablenpc "Jaeda#garas1";
- next;
- mes "[Cave Settler]";
- mes "Hmm... Yeah? I see.";
- next;
- disablenpc "Jaeda#garas1";
- mes "[Cave Settler]";
- mes "Hey, you can pass. Go upstairs, but you'd better think twice before trying anything funny. Do you understand me?";
- next;
- mes "^660000The stern-looking man examined you, and then stepped to the side, allowing you to pass.";
- mes "You clenched your fists in nervousness, and then started up the dark stairwell.^000000";
- barmunt_crow = 9;
- close2;
- warp "cave",82,105;
- end;
- }
+ mes "[Cave Settler]";
+ mes "............!!!!";
+ next;
+ mes "[Cave Settler]";
+ mes "Did you just say Eva?";
+ mes "Hmm...";
+ mes "Wait here.";
+ next;
+ emotion e_com;
+ mes "[Cave Settler]";
+ mes "Hey, Jaeda!";
+ enablenpc "Jaeda#garas1";
+ next;
+ mes "[Cave Settler]";
+ mes "Go upstairs, and tell Eva that she has a visitor.";
+ disablenpc "Jaeda#garas1";
+ next;
+ mes "^660000Surprisingly, he seemed to know who Eva is. You still could not believe that she actually exists! It's all so very strange.^000000";
+ next;
+ mes "^660000You can feel the excitement and anticipation well within you. Maybe you're coming closer to learning what your dreams really mean.^000000";
+ enablenpc "Jaeda#garas1";
+ next;
+ mes "[Cave Settler]";
+ mes "Hmm... Yeah? I see.";
+ next;
+ disablenpc "Jaeda#garas1";
+ mes "[Cave Settler]";
+ mes "Hey, you can pass. Go upstairs, but you'd better think twice before trying anything funny. Do you understand me?";
+ next;
+ mes "^660000The stern-looking man examined you, and then stepped to the side, allowing you to pass.";
+ mes "You clenched your fists in nervousness, and then started up the dark stairwell.^000000";
+ barmunt_crow = 9;
+ close2;
+ warp "cave",82,105;
+ end;
}
}
else if (barmunt_crow < 8) {
@@ -3989,7 +3976,7 @@ OnTouch:
next;
mes "["+ strcharinfo(PC_NAME) +"]";
mes "I'm here to find somebody!";
- input .@input$;
+ input(.@input$);
mes "Her name is ^FF0000"+.@input$+"^000000!";
next;
if (compare(.@input$,"Eva") == 0) {
@@ -3999,43 +3986,41 @@ OnTouch:
warp "cave",81,92;
end;
}
- else {
- mes "[Cave Settler]";
- mes "............!!!!";
- next;
- mes "[Cave Settler]";
- mes "Did you just say Eva?";
- mes "Hmm...";
- mes "Wait here.";
- next;
- emotion e_com;
- mes "[Cave Settler]";
- mes "Hey, Jaeda!";
- enablenpc "Jaeda#garas1";
- next;
- mes "[Cave Settler]";
- mes "Go upstairs, and tell Eva that she has a visitor.";
- disablenpc "Jaeda#garas1";
- next;
- mes "^660000Surprisingly, he seemed to know who Eva is. You still could not believe that she actually exists! It's all so very strange.^000000";
- next;
- mes "^660000You can feel the excitement and anticipation well within you. Maybe you're coming closer to learning what your dreams really mean.^000000";
- enablenpc "Jaeda#garas1";
- next;
- mes "[Cave Settler]";
- mes "Hmm... Yeah? I see.";
- next;
- disablenpc "Jaeda#garas1";
- mes "[Cave Settler]";
- mes "Hey, you can pass. Go upstairs, but you'd better think twice before trying anything funny. Do you understand me?";
- next;
- mes "^660000The stern-looking man examined you, and then stepped to the side, allowing you to pass.";
- mes "You clenched your fists in nervousness, and then started up the dark stairwell.^000000";
- barmunt_crow = 9;
- close2;
- warp "cave",82,105;
- end;
- }
+ mes "[Cave Settler]";
+ mes "............!!!!";
+ next;
+ mes "[Cave Settler]";
+ mes "Did you just say Eva?";
+ mes "Hmm...";
+ mes "Wait here.";
+ next;
+ emotion e_com;
+ mes "[Cave Settler]";
+ mes "Hey, Jaeda!";
+ enablenpc "Jaeda#garas1";
+ next;
+ mes "[Cave Settler]";
+ mes "Go upstairs, and tell Eva that she has a visitor.";
+ disablenpc "Jaeda#garas1";
+ next;
+ mes "^660000Surprisingly, he seemed to know who Eva is. You still could not believe that she actually exists! It's all so very strange.^000000";
+ next;
+ mes "^660000You can feel the excitement and anticipation well within you. Maybe you're coming closer to learning what your dreams really mean.^000000";
+ enablenpc "Jaeda#garas1";
+ next;
+ mes "[Cave Settler]";
+ mes "Hmm... Yeah? I see.";
+ next;
+ disablenpc "Jaeda#garas1";
+ mes "[Cave Settler]";
+ mes "Hey, you can pass. Go upstairs, but you'd better think twice before trying anything funny. Do you understand me?";
+ next;
+ mes "^660000The stern-looking man examined you, and then stepped to the side, allowing you to pass.";
+ mes "You clenched your fists in nervousness, and then started up the dark stairwell.^000000";
+ barmunt_crow = 9;
+ close2;
+ warp "cave",82,105;
+ end;
}
}
else if (barmunt_crow < 8) {
diff --git a/npc/quests/quests_moscovia.txt b/npc/quests/quests_moscovia.txt
index e49886dbd..130b497cf 100644
--- a/npc/quests/quests_moscovia.txt
+++ b/npc/quests/quests_moscovia.txt
@@ -2903,7 +2903,7 @@ mosk_in,148,274,1 script Anna#mos 4_F_RUSCHILD,{
mes "["+strcharinfo(PC_NAME)+"]";
mes "What am I going to ask her?";
next;
- input .@AnnaInfo$;
+ input(.@AnnaInfo$);
mes "["+strcharinfo(PC_NAME)+"]";
mes "Anna,";
mes ""+.@AnnaInfo$+"?";
@@ -3995,8 +3995,8 @@ moscovia,208,182,7 script Acorn Dealer#mos 4_M_RUSMAN1,{
mes "I'll bet you that they are very fresh!";
mes "How many acorns do you need?";
next;
- while(.@input <= 0 || .@input > 500) {
- input .@input;
+ while (true) {
+ input(.@input);
if (.@input <= 0) {
mes "[Acorn Dealer]";
mes "Do you want to cancel this trade?";
@@ -4006,7 +4006,9 @@ moscovia,208,182,7 script Acorn Dealer#mos 4_M_RUSMAN1,{
mes "[Acorn Dealer]";
mes "You can't buy more than 500.";
next;
+ continue;
}
+ break;
}
if (!checkweight(Acorn, .@input)) {
mes "[Acorn Dealer]";
@@ -5349,7 +5351,7 @@ mosk_in,221,43,0 script #bowl HIDDEN_NPC,{
mes "Ok, I will stir it up this time.";
mes "How many times should I..?";
next;
- input .@input;
+ input(.@input);
if (.@input == 20) {
mes "-It must be 20 times.-";
next;
@@ -5361,7 +5363,7 @@ mosk_in,221,43,0 script #bowl HIDDEN_NPC,{
++.@maho;
++.@nankai;
next;
- } else if (!.@input) {
+ } else if (.@input <= 0) {
mes "-I won't stir it up.-";
next;
} else if (.@input > 100) {
@@ -5453,7 +5455,7 @@ mosk_in,221,43,0 script #bowl HIDDEN_NPC,{
mes "Ok, I will stir it up this time.";
mes "How many times should I...?";
next;
- input .@input;
+ input(.@input);
if (.@input == 15) {
mes "-It must be 15 times.-";
next;
@@ -5463,7 +5465,7 @@ mosk_in,221,43,0 script #bowl HIDDEN_NPC,{
++.@maho;
++.@nankai;
next;
- } else if (.@input == 0) {
+ } else if (.@input <= 0) {
mes "-I won't stir it up.-";
next;
} else if (.@input > 100) {
@@ -7070,7 +7072,7 @@ mosk_dun01,45,259,0 script Wall#rus04 HIDDEN_NPC,{
mes "Listen very carefully!";
mes "Left the key up, and shout '^0000ffThe Free wind blows and gets you wherever you want^000000'.";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "The Free wind blows and gets you wherever you want") {
mes "["+ strcharinfo(PC_NAME) +"]";
mes "^0000ff "+ .@input$ +" !! ^000000";
@@ -7778,7 +7780,7 @@ moscovia,206,81,0 script Vassili Grandpapa#rus07 4_M_05,{
mes "[Vassili Grandpapa]";
mes "Eh? What do you want to ask me about?";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Red Ring") {
mes "[Vassili Grandpapa]";
mes "Red Ring?! Why are you looking for that?";
@@ -8126,7 +8128,7 @@ moscovia,213,216,3 script Ryubaba#rus08 4_F_RUSWOMAN2,{
mes "Ah, I forgot asking you.";
mes "Why are you here?";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Red Ring") {
mes "[Ryubaba]";
mes "A Red Ring?!";
@@ -9036,7 +9038,7 @@ prontera,228,279,3 script Wanderer#rus24 4_M_RUSMAN2,{
mes "Ah, yes. I have been there...";
mes "By the way, the important thing is.. are you.....";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Igor") {
mes "["+ strcharinfo(PC_NAME) +"]";
mes "Ah, yes. I have been there...";
@@ -9692,7 +9694,7 @@ mosk_dun02,48,214,5 script Baba Yaga#rus32 4_F_BABAYAGA,{
mes "["+ strcharinfo(PC_NAME) +"]";
mes "Eh, eh.. I mean.. I say.. spell...";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Spellshield Protection") {
mes "["+ strcharinfo(PC_NAME) +"]";
mes "Eh, eh.. I mean.. I say.. spell...";
@@ -10225,19 +10227,22 @@ mosk_dun02,48,214,5 script Baba Yaga#rus32 4_F_BABAYAGA,{
mes "How many do you want me to make? I can only make 100 at a time. If you don't want any, then just say '0'. Kehehehehe.";
next;
while(1) {
- input .@input;
- if (!.@input) {
+ input(.@input);
+ if (.@input <= 0) {
mes "[Baba Yaga]";
mes "You don't want it?";
next;
mes "[Baba Yaga]";
mes "I don't understand you. What do you want? Kehehehehe.";
close;
- } else if (.@input > 100) {
+ }
+ if (.@input > 100) {
mes "[Baba Yaga]";
mes "I said no more then 100 at a time. Kehehehehe.";
next;
- } else break;
+ continue;
+ }
+ break;
}
.@redpotion_send = .@input;
.@redtube_send = .@input;
@@ -10312,19 +10317,22 @@ mosk_dun02,48,214,5 script Baba Yaga#rus32 4_F_BABAYAGA,{
mes "How many do you want me to make? Tell me the number less than 100. If you don't want, tell me zero. Kehehehehe.";
next;
while(1) {
- input .@input;
- if (!.@input) {
+ input(.@input);
+ if (.@input <= 0) {
mes "[Baba Yaga]";
mes "You don't want it?";
next;
mes "[Baba Yaga]";
mes "I don't understand you. What do you want? Kehehehehe.";
close;
- } else if (.@input > 100) {
+ }
+ if (.@input > 100) {
mes "[Baba Yaga]";
mes "I said no more then 100 at a time. Kehehehehe.";
next;
- } else break;
+ continue;
+ }
+ break;
}
.@yellpotion_send = .@input;
.@yelltube_send = .@input;
@@ -10437,7 +10445,7 @@ OnTouch:
if (rand(1,4) == 3) {
mes "- You almost get hit and dodge its attack and cast the spell !! -";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Good feed is orange-flavored") {
mes "["+ strcharinfo(PC_NAME) +"]";
mes ""+ .@input$ +" !!!";
@@ -10536,7 +10544,7 @@ OnTouch:
if (rand(1,4) == 3) {
mes "- You almost get hit and dodge its attack and cast the spell !! -";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Good feed is orange-flavored") {
mes "["+ strcharinfo(PC_NAME) +"]";
mes ""+ .@input$ +" !!!";
@@ -10636,7 +10644,7 @@ OnTouch:
if (rand(1,4) == 3) {
mes "- You almost get hit and dodge its attack and cast the spell !! -";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Good feed is orange-flavored") {
mes "["+ strcharinfo(PC_NAME) +"]";
mes ""+ .@input$ +" !!!";
@@ -11182,7 +11190,7 @@ amatsu,233,234,3 script Momotoro Publisher#rus42 4_F_JPN2,{
mes "[Momotoro Publisher]";
mes "What? Ah, did you come here to pick up the book? Please, let me know your name?";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Baba Yaga") {
mes "["+ strcharinfo(PC_NAME) +"]";
mes "I am "+ .@input$ +".";
@@ -11643,7 +11651,7 @@ pay_dun04,163,186,0 script Ghost Tree#rus45 HIDDEN_NPC,{
mes "Ok then, who was the first?!";
next;
.@rus_kafra01 = 0;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Curly Sue") {
++.@rus_kafra01;
mes "["+ strcharinfo(PC_NAME) +"]";
@@ -11658,7 +11666,7 @@ pay_dun04,163,186,0 script Ghost Tree#rus45 HIDDEN_NPC,{
mes "[Ghost Tree]";
mes "Who was the second?";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Jasmine") {
++.@rus_kafra01;
mes "["+ strcharinfo(PC_NAME) +"]";
@@ -11673,7 +11681,7 @@ pay_dun04,163,186,0 script Ghost Tree#rus45 HIDDEN_NPC,{
mes "[Ghost Tree]";
mes "Who was the third?";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Roxie") {
++.@rus_kafra01;
mes "["+ strcharinfo(PC_NAME) +"]";
@@ -11688,7 +11696,7 @@ pay_dun04,163,186,0 script Ghost Tree#rus45 HIDDEN_NPC,{
mes "[Ghost Tree]";
mes "And then who was the forth?";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Pavianne") {
++.@rus_kafra01;
mes "["+ strcharinfo(PC_NAME) +"]";
@@ -11703,7 +11711,7 @@ pay_dun04,163,186,0 script Ghost Tree#rus45 HIDDEN_NPC,{
mes "[Ghost Tree]";
mes "And who was the last?!";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Blossom") {
++.@rus_kafra01;
mes "["+ strcharinfo(PC_NAME) +"]";
@@ -11768,7 +11776,7 @@ pay_dun04,163,186,0 script Ghost Tree#rus45 HIDDEN_NPC,{
mes "[Ghost Tree]";
mes "Have you heard all of them? Who broke the 'Hat of the Sun God'?!";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Antonio") {
mes "["+ strcharinfo(PC_NAME) +"]";
mes ""+ .@input$ +" !!";
diff --git a/npc/quests/quests_nameless.txt b/npc/quests/quests_nameless.txt
index 55f5c319c..69c0ad902 100644
--- a/npc/quests/quests_nameless.txt
+++ b/npc/quests/quests_nameless.txt
@@ -1494,13 +1494,13 @@ sec_in02,15,15,4 script boss::boss_aru_monas 1_M_SIGNMONK,{
mes ""+aru_monas;
close;
case 2:
- input .@input,0,1000;
+ input(.@input, 0, 1000);
aru_monas = .@input;
mes " ";
mes ""+aru_monas;
close;
case 3:
- input .@input,0,1000;
+ input(.@input, 0, 1000);
prt_curse = .@input;
mes " ";
mes ""+prt_curse;
@@ -3873,7 +3873,7 @@ cmd_fild01,55,160,0 script Heap of Earth CLEAR_NPC,{
mes "Mystic Heater de Elegance";
mes "operates? Hmm? Well?";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "3 Centrifuge Wavelength Theory") {
mes "[Dorian]";
mes "That's right. My apologies.";
@@ -3917,16 +3917,14 @@ cmd_fild01,55,160,0 script Heap of Earth CLEAR_NPC,{
diamond_edq = 9;
close;
}
- else {
- mes "[Dorian]";
- mes "Oh? You sound dissatisfied";
- mes "with my explanation. Well...";
- mes "I surely can't let you use the";
- mes "machine unless you fathom";
- mes "how it works. Otherwise,";
- mes "you just might break it.";
- close;
- }
+ mes "[Dorian]";
+ mes "Oh? You sound dissatisfied";
+ mes "with my explanation. Well...";
+ mes "I surely can't let you use the";
+ mes "machine unless you fathom";
+ mes "how it works. Otherwise,";
+ mes "you just might break it.";
+ close;
case 2:
mes "[Dorian]";
mes "Were you too bored while";
@@ -6884,7 +6882,7 @@ in_rogue,359,116,3 script Marybell 4_F_ROGUE,{
mes "Come a little closer,";
mes "and talk right in my ear.";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "The dawn is yet to come.") {
mes "[Marybell]";
mes "Valdes sent you?!";
@@ -7387,8 +7385,8 @@ payon,244,62,3 script Moonho Ahn 4_M_HUGRANFA,{
next;
while(1) {
.@number = rand(1,2);
- input .@input$;
- if (((.@input$ == "Odd") && (.@number == 1)) || ((.@input$ == "Even") && (.@number == 2))) {
+ input(.@input$);
+ if ((.@input$ == "Odd" && .@number == 1) || (.@input$ == "Even" && .@number == 2)) {
++.@number_right;
mes "[Moonho Ahn]";
mes "^0000ff"+.@input$+"^000000?";
@@ -7401,7 +7399,7 @@ payon,244,62,3 script Moonho Ahn 4_M_HUGRANFA,{
next;
}
}
- else if (((.@input$ == "Odd") && (.@number == 2)) || ((.@input$ == "Even") && (.@number == 1))) {
+ else if ((.@input$ == "Odd" && .@number == 2) || (.@input$ == "Even" && .@number == 1)) {
++.@number_false;
mes "[Moonho Ahn]";
mes "Well, it's ^0000FFEven^000000.";
@@ -7434,7 +7432,7 @@ payon,244,62,3 script Moonho Ahn 4_M_HUGRANFA,{
next;
break;
}
- if ((.@input$ != "Even") && (.@input$ !="Odd")) {
+ if (.@input$ != "Even" && .@input$ !="Odd") {
mes "[Moonho Ahn]";
mes "You can only declare";
mes "your guess as ^0000FFOdd^000000 or ^0000FFEven^000000.";
@@ -7626,8 +7624,8 @@ payon,244,62,3 script Moonho Ahn 4_M_HUGRANFA,{
next;
while(1) {
.@number = rand(1,2);
- input .@input$;
- if (((.@input$ == "Odd") && (.@number == 1)) || ((.@input$ == "Even") && (.@number == 2))) {
+ input(.@input$);
+ if ((.@input$ == "Odd" && .@number == 1) || (.@input$ == "Even" && .@number == 2)) {
++.@number_right_3;
mes "[Moonho Ahn]";
mes "^0000FF"+.@input$+"^000000?";
@@ -7640,7 +7638,7 @@ payon,244,62,3 script Moonho Ahn 4_M_HUGRANFA,{
next;
}
}
- else if (((.@input$ == "Odd") && (.@number == 2)) || ((.@input$ == "Even") && (.@number == 1))) {
+ else if ((.@input$ == "Odd" && .@number == 2) || (.@input$ == "Even" && .@number == 1)) {
++.@number_false_3;
mes "[Moonho Ahn]";
mes "Well, it's ^0000FF"+.@input$+"^000000.";
@@ -7668,7 +7666,7 @@ payon,244,62,3 script Moonho Ahn 4_M_HUGRANFA,{
next;
break;
}
- if ((.@input$ != "Even") && (.@input$ !="Odd")) {
+ if (.@input$ != "Even" && .@input$ !="Odd") {
mes "[Moonho Ahn]";
mes "You can only declare";
mes "your guess as ^0000FFOdd^000000 or ^0000FFEven^000000.";
@@ -8559,7 +8557,7 @@ moc_fild17,209,235,0 script Odd Slab HIDDEN_NPC,4,4,{
mes "Well, I guess";
mes "I should talk to it. Um...";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Weii arr prowd Z G gna") {
mes "[Odd Slab]";
mes "^FF0000*Creak Creak*";
@@ -8571,7 +8569,7 @@ moc_fild17,209,235,0 script Odd Slab HIDDEN_NPC,4,4,{
mes "I must be doing alright.";
mes "Now what do I say?";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Aynoen hwo sspotp uys") {
mes "[Odd Slab]";
mes "^FF0000*Creak Creak*";
@@ -8581,7 +8579,7 @@ moc_fild17,209,235,0 script Odd Slab HIDDEN_NPC,4,4,{
mes "Heh! I'm on the right";
mes "track. Now what do I say?";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "wlil eb kckide on htier ssa!") {
mes "[Odd Slab]";
mes "*Creak Creak*";
@@ -10169,11 +10167,11 @@ moc_fild18,108,116,0 script #treasure CLEAR_NPC,{
mes "to remove the chest's magical";
mes "protection to get the treasure.^000000";
next;
- input .@input$;
+ input(.@input$);
getpartymember(getcharid(CHAR_ID_PARTY));
.@partymembercount = $@partymembercount;
if (.@partymembercount > 1) {
- if (((.@input$ == "OpenSesame") && (treasure_nd == 9)) || ((.@input$ == "UnlockTreasure") && (treasure_nd == 10))) {
+ if ((.@input$ == "OpenSesame" && treasure_nd == 9) || (.@input$ == "UnlockTreasure" && treasure_nd == 10)) {
mes "^3355FFThe Z Gang must have split";
mes "the spell document in two";
mes "parts because one person";
diff --git a/npc/quests/quests_niflheim.txt b/npc/quests/quests_niflheim.txt
index 37beaed06..179b41f77 100644
--- a/npc/quests/quests_niflheim.txt
+++ b/npc/quests/quests_niflheim.txt
@@ -117,7 +117,7 @@ nif_in,105,81,3 script Crayu#nif 4_M_NFDEADMAN2,{
break;
}
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == .@songline$) {
mes "[Crayu]";
mes "Excellent...!";
@@ -135,15 +135,13 @@ nif_in,105,81,3 script Crayu#nif 4_M_NFDEADMAN2,{
mes "you have done for me.";
close;
}
- else {
- mes "[Crayu]";
- mes "*Sigh*... If you had only";
- mes "listened to me, it would";
- mes "have been easy to answer.";
- mes "Try to remember the line";
- mes "and try again!";
- close;
- }
+ mes "[Crayu]";
+ mes "*Sigh*... If you had only";
+ mes "listened to me, it would";
+ mes "have been easy to answer.";
+ mes "Try to remember the line";
+ mes "and try again!";
+ close;
}
next;
mes "[Crayu]";
diff --git a/npc/quests/quests_prontera.txt b/npc/quests/quests_prontera.txt
index b2fefb3cf..f2743233b 100644
--- a/npc/quests/quests_prontera.txt
+++ b/npc/quests/quests_prontera.txt
@@ -1043,7 +1043,7 @@ morocc_in,45,126,3 script Historian#prt02 4_F_GON,{
mes "^FF0000*swallowed the serpent.*^000000";
mes "......................";
next;
- input .@answer$;
+ input(.@answer$);
if (.@answer$ == "Then the eagle built its nest.") {
mes "[Historian Rodafrian]";
mes "Really? That makes";
@@ -1078,7 +1078,7 @@ morocc_in,45,126,3 script Historian#prt02 4_F_GON,{
mes "that you heard from Karlomoff.^000000";
next;
mes "["+strcharinfo(PC_NAME)+"]";
- input .@line$;
+ input(.@line$);
if (.@line$ == "The great serpent swallowed the sea.") {
.@total += 1;
mes "*The great serpent*";
@@ -1086,7 +1086,7 @@ morocc_in,45,126,3 script Historian#prt02 4_F_GON,{
}
else mes "* "+.@line$+"*";
- input .@line$;
+ input(.@line$);
if (.@line$ == "The eagle of the rainbow swallowed the serpent.") {
.@total += 1;
mes "*The eagle of the rainbow*";
@@ -1094,14 +1094,14 @@ morocc_in,45,126,3 script Historian#prt02 4_F_GON,{
}
else mes "*"+.@line$+"*";
- input .@line$;
+ input(.@line$);
if (.@line$ == "Then the eagle built its nest.") {
.@total += 1;
mes "*Then the eagle built its nest.*";
}
else mes "*"+.@line$+"*";
- input .@line$;
+ input(.@line$);
if (.@line$ == "A nest upon the swallowed sea.") {
.@total += 1;
mes "*A nest upon the swallowed sea.*";
@@ -1514,7 +1514,7 @@ mjolnir_01,135,168,3 script Historian#prt03 4_M_SAGE_A,{
S_Song:
mes "["+strcharinfo(PC_NAME)+"]";
- input .@line$;
+ input(.@line$);
if (.@line$ == "The great serpent swallowed the sea.") {
.@total += 1;
mes "*The great serpent*";
@@ -1522,7 +1522,7 @@ S_Song:
}
else mes "*"+.@line$+"*";
- input .@line$;
+ input(.@line$);
if (.@line$ == "The eagle of the rainbow swallowed the serpent.") {
.@total += 1;
mes "*The eagle of the rainbow*";
@@ -1530,11 +1530,11 @@ S_Song:
}
else mes "*"+.@line$+"*";
- input .@line$;
+ input(.@line$);
if (.@line$ == "Then the eagle built its nest.") .@total += 1;
mes "*"+.@line$+"*";
- input .@line$;
+ input(.@line$);
if (.@line$ == "A nest upon the swallowed sea.") .@total += 1;
mes "*"+.@line$+"*";
diff --git a/npc/quests/quests_rachel.txt b/npc/quests/quests_rachel.txt
index 1cc002d80..a0905a3e4 100644
--- a/npc/quests/quests_rachel.txt
+++ b/npc/quests/quests_rachel.txt
@@ -1803,7 +1803,7 @@ ra_in01,235,194,5 script Katinshuell 4_M_RACHMAN1,{
mes "long time. What the heck do you";
mes "want to ask me about, anyway?";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Lighthalzen") {
mes "[Katinshuell]";
mes "Lighthalzen...?";
@@ -2222,7 +2222,7 @@ rachel,73,244,3 script Lachellen 4_F_SHABBY,{
mes "so I'll help you if you have";
mes "any questions for me~";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "Lighthalzen") {
mes "[Lachellen]";
mes "Lighthalzen? Oh, that's";
@@ -5468,7 +5468,7 @@ ra_temin,277,159,3 script High Priest Zhed#rachel 4_M_RACHOLD1,{
next;
mes "["+strcharinfo(PC_NAME)+"]";
mes "Isn't the scientist's name...";
- input .@input$;
+ input(.@input$);
mes "^3131FF"+.@input$+"^000000?";
next;
if (.@input$ == "Varmunt") {
@@ -5961,7 +5961,7 @@ ra_temin,277,159,3 script High Priest Zhed#rachel 4_M_RACHOLD1,{
mes "for protecting peace here";
mes "in Arunafeltz?";
next;
- input .@input$;
+ input(.@input$);
mes "["+strcharinfo(PC_NAME)+"]";
mes ""+.@input$+"?";
next;
@@ -6890,7 +6890,7 @@ ra_temsky,99,99,5 script Pope#rachel 4_F_ARUNA_POP,{
mes "So... Um... Where do you";
mes "come from, "+strcharinfo(PC_NAME)+"?";
next;
- input @input$;
+ input(@input$);
mes "[Pope]";
mes @input$ +"...?";
mes "I think I might have heard";
@@ -6898,7 +6898,7 @@ ra_temsky,99,99,5 script Pope#rachel 4_F_ARUNA_POP,{
mes "Wow... What did you do";
mes "when you lived there?";
next;
- input @input$;
+ input(@input$);
mes "[Pope]";
mes @input$ +"...?";
mes "Wow, that sounds quite";
@@ -6988,7 +6988,7 @@ ra_temsky,99,99,5 script Pope#rachel 4_F_ARUNA_POP,{
mes "interesting stories about";
mes "the outside world again?";
next;
- input .@input$;
+ input(.@input$);
mes "[Pope]";
mes "Mm. That sounds pretty";
mes "strange to me. Well, it's";
diff --git a/npc/quests/quests_umbala.txt b/npc/quests/quests_umbala.txt
index 6fc89a0cf..e9d48c6fa 100644
--- a/npc/quests/quests_umbala.txt
+++ b/npc/quests/quests_umbala.txt
@@ -554,22 +554,21 @@ um_in,44,71,2 script Utan Shaman 4_F_UMOLDWOMAN,{
mes "this request, enter '0.'";
next;
while(1) {
- input .@input,0,10;
- if (.@input == 0) {
+ input(.@input);
+ if (.@input <= 0) {
mes "[Puchuchartan]";
mes "I see. It's your call.";
mes "Come back when you need me.";
close;
}
- else if (.@input > 9) {
+ if (.@input > 9) {
mes "[Puchuchartan]";
mes "Remember to choose a number";
mes "from 1 to 9.";
next;
+ continue;
}
- else {
- break;
- }
+ break;
}
mes "[Puchuchartan]";
switch(.@success) {
@@ -707,124 +706,120 @@ um_in,44,71,2 script Utan Shaman 4_F_UMOLDWOMAN,{
mes "to divide. I can only";
mes "divide up to 10 at a time.";
next;
- input .@input,0,11;
- if ((.@input > 0) && (.@input < 11)) {
- if (countitem(.@divide) >= .@input) {
- if (checkweight(Spawn,(.@input * 30)) == 0) {
+ input(.@input);
+ if (.@input <= 0 || .@input > 10) {
+ mes "[Puchuchartan]";
+ mes "Hm? You need to enter";
+ mes "a number from 1 to 10.";
+ close;
+ }
+ if (countitem(.@divide) >= .@input) {
+ if (checkweight(Spawn,(.@input * 30)) == 0) {
+ mes "[Puchuchartan]";
+ mes "You're carrying too";
+ mes "many items right now.";
+ mes "Put some of your stuff";
+ mes "in Kafra Storage, and then";
+ mes "come back to me, okay?";
+ close;
+ }
+ mes "[Puchuchartan]";
+ mes "I'll try to revert these";
+ mes "enchanted stones to their";
+ mes "rough forms. Enter a number";
+ mes "from 1 to 9, or enter 0 if";
+ mes "you decide to cancel.";
+ next;
+ while(1) {
+ input(.@input2);
+ if (.@input2 <= 0) {
mes "[Puchuchartan]";
- mes "You're carrying too";
- mes "many items right now.";
- mes "Put some of your stuff";
- mes "in Kafra Storage, and then";
- mes "come back to me, okay?";
+ mes "You want to cancel?";
+ mes "Well, if you change your";
+ mes "mind, feel free to come";
+ mes "ask me to help at any time.";
close;
}
- mes "[Puchuchartan]";
- mes "I'll try to revert these";
- mes "enchanted stones to their";
- mes "rough forms. Enter a number";
- mes "from 1 to 9, or enter 0 if";
- mes "you decide to cancel.";
- next;
- while(1) {
- input .@input2,0,10;
- if (.@input2 == 0) {
- mes "[Puchuchartan]";
- mes "You want to cancel?";
- mes "Well, if you change your";
- mes "mind, feel free to come";
- mes "ask me to help at any time.";
- close;
- }
- else if (.@input2 > 9) {
- mes "[Puchuchartan]";
- mes "Hm? You need to enter";
- mes "a number from 1 to 9.";
- next;
- }
- else {
- break;
- }
- }
- mes "[Puchuchartan]";
- mes "I will now chant the";
- mes "sacred words. Remember";
- mes "the number you entered!";
- next;
- mes "[Puchuchartan]";
- mes "Umba Umba Kalapum! Umba! Ta!";
- mes "Lukura Ukulele Um! Umba! Ka!";
- mes "Abulaka Tabulakan! Umba! La!";
- mes "Ombaludu Zan Kunu! Umba! Ku!";
- mes "Kum Tum Lakulakun! Umba! Ha!";
- next;
- mes "[Puchuchartan]";
- mes "Here's the rough enchanted stones";
- mes "you wished to have. I created this";
- mes "with a lot of effort, so make good";
- mes "use of them.";
- while(1) {
- if (.@sha_man == .@input) {
- break;
- }
- else {
- .@shaman_max += rand(6,10);
- ++.@sha_man;
- }
- }
- switch(.@divide) {
- case 994:
- getitem Boody_Red,.@shaman_max;
- break;
- case 995:
- getitem Crystal_Blue,.@shaman_max;
- break;
- case 996:
- getitem Wind_Of_Verdure,.@shaman_max;
- break;
- case 997:
- getitem Yellow_Live,.@shaman_max;
+ if (.@input2 > 9) {
+ mes "[Puchuchartan]";
+ mes "Hm? You need to enter";
+ mes "a number from 1 to 9.";
+ next;
+ continue;
}
- delitem .@divide,.@input;
- close;
+ break;
}
- else {
- mes "[Puchuchartan]";
- mes "So, you wish to have rough";
- switch(.@divide) {
- case 994:
- mes "fire stones? Then I will need";
- mes "you to bring "+input_want+" pure fire stone.";
- break;
- case 995:
- mes "water stones? Then I'll need";
- mes "you to bring "+input_want+" pure water stone.";
- break;
- case 996:
- mes "wind stones? Then I will need";
- mes "you to bring "+input_want+" pure wind stone.";
- break;
- case 997:
- mes "earth stones? Then I'll need";
- mes "you to bring "+.@input+" pure earth stone.";
+ mes "[Puchuchartan]";
+ mes "I will now chant the";
+ mes "sacred words. Remember";
+ mes "the number you entered!";
+ next;
+ mes "[Puchuchartan]";
+ mes "Umba Umba Kalapum! Umba! Ta!";
+ mes "Lukura Ukulele Um! Umba! Ka!";
+ mes "Abulaka Tabulakan! Umba! La!";
+ mes "Ombaludu Zan Kunu! Umba! Ku!";
+ mes "Kum Tum Lakulakun! Umba! Ha!";
+ next;
+ mes "[Puchuchartan]";
+ mes "Here's the rough enchanted stones";
+ mes "you wished to have. I created this";
+ mes "with a lot of effort, so make good";
+ mes "use of them.";
+ while(1) {
+ if (.@sha_man == .@input) {
break;
}
- mes "^3377FF"+.@input+" "+getitemname(.@divide)+"^000000.";
- next;
- mes "[Puchuchartan]";
- mes "That's all I need...";
- mes "Come back when";
- mes "you're ready.";
- mes "I will be here.";
+ .@shaman_max += rand(6,10);
+ ++.@sha_man;
+ }
+ if (countitem(.@divide) < .@input) {
close;
}
- }
- else {
- mes "[Puchuchartan]";
- mes "Hm? You need to enter";
- mes "a number from 1 to 10.";
+ delitem .@divide, .@input;
+ switch(.@divide) {
+ case 994:
+ getitem Boody_Red,.@shaman_max;
+ break;
+ case 995:
+ getitem Crystal_Blue,.@shaman_max;
+ break;
+ case 996:
+ getitem Wind_Of_Verdure,.@shaman_max;
+ break;
+ case 997:
+ getitem Yellow_Live,.@shaman_max;
+ }
close;
}
+ mes "[Puchuchartan]";
+ mes "So, you wish to have rough";
+ switch(.@divide) {
+ case 994:
+ mes "fire stones? Then I will need";
+ mes "you to bring "+input_want+" pure fire stone.";
+ break;
+ case 995:
+ mes "water stones? Then I'll need";
+ mes "you to bring "+input_want+" pure water stone.";
+ break;
+ case 996:
+ mes "wind stones? Then I will need";
+ mes "you to bring "+input_want+" pure wind stone.";
+ break;
+ case 997:
+ mes "earth stones? Then I'll need";
+ mes "you to bring "+.@input+" pure earth stone.";
+ break;
+ }
+ mes "^3377FF"+.@input+" "+getitemname(.@divide)+"^000000.";
+ next;
+ mes "[Puchuchartan]";
+ mes "That's all I need...";
+ mes "Come back when";
+ mes "you're ready.";
+ mes "I will be here.";
+ close;
case 3:
mes "[Puchuchartan]";
mes "I see. It's your call.";
diff --git a/npc/quests/quests_veins.txt b/npc/quests/quests_veins.txt
index 2fde49c3e..a69a495be 100644
--- a/npc/quests/quests_veins.txt
+++ b/npc/quests/quests_veins.txt
@@ -2654,7 +2654,7 @@ sec_in02,10,43,4 script Extra Story Patch 1_M_SIGNMONK,{
mes "Yeah, you can try.";
next;
if(select("Now", "How many?") == 2) {
- input .@input,0,1000;
+ input(.@input, 0, 1000);
que_sch = .@input;
}
mes " ";
@@ -5092,7 +5092,7 @@ ra_temin,87,133,1 script Rachel Guard#vol1 4_M_RASWORD,5,2,{
mes "Of course! I should";
mes "talk to him about...";
next;
- input .@input$;
+ input(.@input$);
mes "["+strcharinfo(PC_NAME)+"]";
mes "Wait a second...";
mes "Of course! I should";
@@ -6723,7 +6723,7 @@ thor_camp,159,74,3 script Colonel Vito#3 4_M_DST_MASTER,{
mes "^FF0000as a devoted servant";
mes "of Goddess Freya";
next;
- input .@input$;
+ input(.@input$);
.@answer$ = "as a devoted servant of Goddess Freya";
if (.@input$ == .@answer$) {
mes "["+strcharinfo(PC_NAME)+"]";
@@ -6734,18 +6734,16 @@ thor_camp,159,74,3 script Colonel Vito#3 4_M_DST_MASTER,{
next;
break;
}
- else {
- mes "[Colonel Vito]";
- mes "Wrong! Try again!";
- next;
- }
+ mes "[Colonel Vito]";
+ mes "Wrong! Try again!";
+ next;
}
while(1) {
mes "[Colonel Vito]";
mes "^FF0000I pledge my honor to";
mes "overthrow our mortal enemy";
next;
- input .@input$;
+ input(.@input$);
.@answer$ = "I pledge my honor to overthrow our mortal enemy";
if (.@input$ == .@answer$) {
mes "["+strcharinfo(PC_NAME)+"]";
@@ -6755,17 +6753,15 @@ thor_camp,159,74,3 script Colonel Vito#3 4_M_DST_MASTER,{
next;
break;
}
- else {
- mes "[Colonel Vito]";
- mes "Wrong! Try again!";
- next;
- }
+ mes "[Colonel Vito]";
+ mes "Wrong! Try again!";
+ next;
}
while(1) {
mes "[Colonel Vito]";
mes "^FF0000I will show no mercy^000000";
next;
- input .@input$;
+ input(.@input$);
.@answer$ = "I will show no mercy";
if (.@input$ == .@answer$) {
mes "["+strcharinfo(PC_NAME)+"]";
@@ -6774,18 +6770,16 @@ thor_camp,159,74,3 script Colonel Vito#3 4_M_DST_MASTER,{
next;
break;
}
- else {
- mes "[Colonel Vito]";
- mes "Wrong! Try again!";
- next;
- }
+ mes "[Colonel Vito]";
+ mes "Wrong! Try again!";
+ next;
}
while(1) {
mes "[Colonel Vito]";
mes "^FF0000I shall devote";
mes "my entire life^000000";
next;
- input .@input$;
+ input(.@input$);
.@answer$ = "I shall devote my entire life";
if (.@input$ == .@answer$) {
mes "["+strcharinfo(PC_NAME)+"]";
@@ -6796,18 +6790,16 @@ thor_camp,159,74,3 script Colonel Vito#3 4_M_DST_MASTER,{
next;
break;
}
- else {
- mes "[Colonel Vito]";
- mes "Wrong! Try again!";
- next;
- }
+ mes "[Colonel Vito]";
+ mes "Wrong! Try again!";
+ next;
}
while(1) {
mes "[Colonel Vito]";
mes "^FF0000Down with the";
mes "Rune-Midgarts Kingdom!^000000";
next;
- input .@input$;
+ input(.@input$);
.@answer$ = "Down with the Rune-Midgarts Kingdom!";
if (.@input$ == .@answer$) {
mes "["+strcharinfo(PC_NAME)+"]";
@@ -6816,11 +6808,9 @@ thor_camp,159,74,3 script Colonel Vito#3 4_M_DST_MASTER,{
next;
break;
}
- else {
- mes "[Colonel Vito]";
- mes "Wrong! Try again!";
- next;
- }
+ mes "[Colonel Vito]";
+ mes "Wrong! Try again!";
+ next;
}
mes "[Colonel Vito]";
mes "Good. Now you know the";
diff --git a/npc/quests/seals/brisingamen_seal.txt b/npc/quests/seals/brisingamen_seal.txt
index ed63847a2..cd8bd0d12 100644
--- a/npc/quests/seals/brisingamen_seal.txt
+++ b/npc/quests/seals/brisingamen_seal.txt
@@ -2621,7 +2621,7 @@ gef_dun01,89,192,0 script #lowentrace HIDDEN_NPC,3,3,{
next;
switch(select("Yes", "No")) {
case 1:
- input @lowenstring$;
+ input(@lowenstring$);
if (@lowenstring$ == "Lowen") {
if (god_brising == 30) {
mes "[Lowen Ellenen]";
@@ -2743,7 +2743,7 @@ gef_dun01,203,48,0 script #lowentrace1 HIDDEN_NPC,3,3,{
next;
switch(select("Yes", "No")) {
case 1:
- input @lowenstring$;
+ input(@lowenstring$);
if (@lowenstring$ == "Lowen") {
if (god_brising == 31) {
mes "[Lowen Ellenen]";
@@ -4523,35 +4523,35 @@ mjo_dun02,126,36,0 script #brisindwarf4 HIDDEN_NPC,3,3,{
mes "Um, that song.";
mes "What was the first line...?";
next;
- input @dwarfsong1$;
+ input(@dwarfsong1$);
if (@dwarfsong1$ == "No jewel in the world can compare.") @point += 1;
mes "[" + strcharinfo(PC_NAME) + "]";
mes " " + @dwarfsong1$ + "";
mes "Then...ummm..";
mes "The second line?";
next;
- input @dwarfsong2$;
+ input(@dwarfsong2$);
if (@dwarfsong2$ == "Our masterpiece made from love.") @point += 1;
mes "[" + strcharinfo(PC_NAME) + "]";
mes " " + @dwarfsong2$ + "";
mes "Now, what was";
mes "the third line...?";
next;
- input @dwarfsong3$;
+ input(@dwarfsong3$);
if (@dwarfsong3$ == "She wanted the dazzling necklace.") @point += 1;
mes "[" + strcharinfo(PC_NAME) + "]";
mes " " + @dwarfsong3$ + "";
mes "Now, the fourth";
mes "line after that...";
next;
- input @dwarfsong4$;
+ input(@dwarfsong4$);
if (@dwarfsong4$ == "We wanted the goddess of beauty.") @point += 1;
mes "[" + strcharinfo(PC_NAME) + "]";
mes " " + @dwarfsong4$ + "";
mes "Alright, now";
mes "for the last line...";
next;
- input @dwarfsong5$;
+ input(@dwarfsong5$);
if (@dwarfsong5$ == "Our happiest times were with her.") @point += 1;
mes "[" + strcharinfo(PC_NAME) + "]";
mes " " + @dwarfsong5$ + "";
diff --git a/npc/quests/seals/god_global.txt b/npc/quests/seals/god_global.txt
index 7486bcc23..fb2b13aeb 100644
--- a/npc/quests/seals/god_global.txt
+++ b/npc/quests/seals/god_global.txt
@@ -93,7 +93,7 @@ sec_in02,15,170,0 script Golbal var 4_F_CHNDRESS3,{
}
L_Number:
- input .@input,0,$@god_check2;
+ input(.@input, 0, $@god_check2);
mes "[Check]";
mes "Would you like to change to "+.@input+"?";
mes "Please enter the password.";
@@ -112,7 +112,7 @@ L_Number:
}
L_Var:
- input .@input;
+ input(.@input, 0);
setd getarg(0),.@input;
next;
mes "[Check]";
diff --git a/npc/quests/seals/megingard_seal.txt b/npc/quests/seals/megingard_seal.txt
index 96a634a4e..75510d9a0 100644
--- a/npc/quests/seals/megingard_seal.txt
+++ b/npc/quests/seals/megingard_seal.txt
@@ -954,7 +954,7 @@ prt_in,172,106,0 script Librarian#megin 4_M_ZONDAOYAJI,{
mes "[" + strcharinfo(PC_NAME) + "]";
mes "But isn't";
mes "the file about...";
- input @str$;
+ input(@str$);
mes "^0000FF" + @str$ + "?";
next;
if (@str$ == "the 1st squad's final mission") {
@@ -1007,7 +1007,7 @@ prt_in,172,106,0 script Librarian#megin 4_M_ZONDAOYAJI,{
next;
mes "[" + strcharinfo(PC_NAME) + "]";
mes "Isn't the file...";
- input @str$;
+ input(@str$);
mes "[" + strcharinfo(PC_NAME) + "]";
mes "^0000FF" + @str$ + "?";
next;
@@ -1155,7 +1155,7 @@ prt_in,172,106,0 script Librarian#megin 4_M_ZONDAOYAJI,{
mes "Please do not use";
mes "capital letters.^000000";
next;
- input .@input$;
+ input(.@input$);
if (compare(.@input$,"crusader") == 1) {
mes "^663300[Keyword: ^996633Crusader^663300]";
mes "Crusaders are warriors preparing for the upcoming Holy War against Evil. Experienced swordsmen, usually with remarkable spiritual prowess.^000000";
@@ -1817,7 +1817,7 @@ morocc_in,146,179,0 script Employee#megin1 1_F_01,{
mes "Are you looking for";
mes "someone...?";
next;
- input @str$;
+ input(@str$);
if (@str$ == "Cuaque Donon" || @str$ == "Cuaque" || @str$ == "Donon") {
mes "[" + strcharinfo(PC_NAME) + "]";
mes "Do you happen to know a person named " + @str$ + " ...?";
diff --git a/npc/quests/seals/sleipnir_seal.txt b/npc/quests/seals/sleipnir_seal.txt
index d3982699c..4450c1778 100644
--- a/npc/quests/seals/sleipnir_seal.txt
+++ b/npc/quests/seals/sleipnir_seal.txt
@@ -1316,7 +1316,7 @@ que_god01,20,48,0 script Slab#G HIDDEN_NPC,{
mes "wkrdjswhgks shfh wkrdjswhgks wkdus wkr...";
mes "^ff00ffghswka^000000gks ........fusjs tmld.........";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ == "dirdnl") {
mes "Zap~";
mes "^3355FFAs you press the word '^ff0000dirdnl^3355FF,' the slab emitted a strange beeping noise but nothing else happened. Perhaps you must press some of the other words.^000000";
@@ -1335,7 +1335,7 @@ que_god01,20,48,0 script Slab#G HIDDEN_NPC,{
mes "is not on the slab.^000000";
close;
}
- input .@input$;
+ input(.@input$);
if (.@input$ == "tkaryf") {
mes "^3355FFYou press the word '^ff0000tkaryf^3355FF,' and another beep was emitted from";
mes "the slab.^000000";
@@ -1354,7 +1354,7 @@ que_god01,20,48,0 script Slab#G HIDDEN_NPC,{
mes "is not on the slab.^000000";
close;
}
- input .@input$;
+ input(.@input$);
if (.@input$ == "ghswka") {
mes "^3355FFYou press on the word '^ff0000ghswka^3355FF,' resulting in an affirmative beep. Nothing has still happened, so perhaps you must press another word.^000000";
next;
diff --git a/npc/quests/skills/alchemist_skills.txt b/npc/quests/skills/alchemist_skills.txt
index a8867a1a8..78cf18a25 100644
--- a/npc/quests/skills/alchemist_skills.txt
+++ b/npc/quests/skills/alchemist_skills.txt
@@ -1438,83 +1438,8 @@ lhz_in01,224,140,3 script Kellasus#qsk_al 1_M_LIBRARYMASTER,{
mes "Homunculus, putting it in";
mes "an inert state of hibernation?";
next;
- input .@input$;
- if (.@input$ == "Vaporize") {
- mes "[Kellasus]";
- mes "Hmm, not bad. So you've";
- mes "been studying. Now, the second";
- mes "question. What is the item, whose name indicates a very early stage";
- mes "of Homunculus development, used for the Call Homunculus skill?";
- next;
- input .@input$;
- if (.@input$ == "Embryo") {
- mes "[Kellasus]";
- mes "Huh. You got that one";
- mes "right too. Alright, third";
- mes "question. What is the";
- mes "name of the skill, mastered";
- mes "at Skill Level 5, which allows";
- mes "you to resurrect Homunculi?";
- next;
- input .@input$;
- if (.@input$ == "Homunculus Resurrection") {
- mes "[Kellasus]";
- mes "So you have been putting";
- mes "a lot of effort in studying";
- mes "this. I really admire your";
- mes "dedication and it looks like";
- mes "you've got the potential to";
- mes "be a really great Alchemist.";
- next;
- mes "[Kellasus]";
- mes "Still, even though you're";
- mes "qualified to learn all the";
- mes "Homunculus skills, I choose";
- mes "not to teach them based on";
- mes "my own personal principles.";
- mes "Nothing can change my mind.";
- next;
- mes "[Kellasus]";
- mes "I admit that I'm proud";
- mes "of the progress you've";
- mes "made, but I just can't";
- mes "bring myself to be a part";
- mes "of what I believe to be an";
- mes "abuse of the gift of life.";
- next;
- bioeth = 8;
- mes "[Kellasus]";
- mes "There's just so much";
- mes "risk! I don't think I can";
- mes "bear to be responsible for";
- mes "any of the consequences that";
- mes "may come with the existence";
- mes "of artificially created life.";
- close;
- }
- else {
- mes "[Kellasus]";
- mes "I'm disappointed...";
- mes "I really thought you";
- mes "had learned everything";
- mes "you could about Homunculi,";
- mes "but it looks like there are a";
- mes "few gaps in your knowledge.";
- close;
- }
- }
- else {
- mes "[Kellasus]";
- mes "Hmm... It looks like";
- mes "you still haven't learned";
- mes "enough about Homunculi.";
- mes "Even if I wanted to teach";
- mes "you, it looks like you're";
- mes "not quite ready to learn...";
- close;
- }
- }
- else {
+ input(.@input$);
+ if (.@input$ != "Vaporize") {
mes "[Kellasus]";
mes "You'd be able to get";
mes "the first question right";
@@ -1524,6 +1449,75 @@ lhz_in01,224,140,3 script Kellasus#qsk_al 1_M_LIBRARYMASTER,{
mes "find a new alchemic interest.";
close;
}
+ mes "[Kellasus]";
+ mes "Hmm, not bad. So you've";
+ mes "been studying. Now, the second";
+ mes "question. What is the item, whose name indicates a very early stage";
+ mes "of Homunculus development, used for the Call Homunculus skill?";
+ next;
+ input(.@input$);
+ if (.@input$ != "Embryo") {
+ mes "[Kellasus]";
+ mes "Hmm... It looks like";
+ mes "you still haven't learned";
+ mes "enough about Homunculi.";
+ mes "Even if I wanted to teach";
+ mes "you, it looks like you're";
+ mes "not quite ready to learn...";
+ close;
+ }
+ mes "[Kellasus]";
+ mes "Huh. You got that one";
+ mes "right too. Alright, third";
+ mes "question. What is the";
+ mes "name of the skill, mastered";
+ mes "at Skill Level 5, which allows";
+ mes "you to resurrect Homunculi?";
+ next;
+ input(.@input$);
+ if (.@input$ != "Homunculus Resurrection") {
+ mes "[Kellasus]";
+ mes "I'm disappointed...";
+ mes "I really thought you";
+ mes "had learned everything";
+ mes "you could about Homunculi,";
+ mes "but it looks like there are a";
+ mes "few gaps in your knowledge.";
+ close;
+ }
+ mes "[Kellasus]";
+ mes "So you have been putting";
+ mes "a lot of effort in studying";
+ mes "this. I really admire your";
+ mes "dedication and it looks like";
+ mes "you've got the potential to";
+ mes "be a really great Alchemist.";
+ next;
+ mes "[Kellasus]";
+ mes "Still, even though you're";
+ mes "qualified to learn all the";
+ mes "Homunculus skills, I choose";
+ mes "not to teach them based on";
+ mes "my own personal principles.";
+ mes "Nothing can change my mind.";
+ next;
+ mes "[Kellasus]";
+ mes "I admit that I'm proud";
+ mes "of the progress you've";
+ mes "made, but I just can't";
+ mes "bring myself to be a part";
+ mes "of what I believe to be an";
+ mes "abuse of the gift of life.";
+ next;
+ bioeth = 8;
+ mes "[Kellasus]";
+ mes "There's just so much";
+ mes "risk! I don't think I can";
+ mes "bear to be responsible for";
+ mes "any of the consequences that";
+ mes "may come with the existence";
+ mes "of artificially created life.";
+ close;
}
if (BaseJob == Job_Alchemist && bioeth > 3) {
mes "[Kellasus]";
diff --git a/npc/quests/thana_quest.txt b/npc/quests/thana_quest.txt
index ea01a926d..787b7a3c4 100644
--- a/npc/quests/thana_quest.txt
+++ b/npc/quests/thana_quest.txt
@@ -1048,7 +1048,7 @@ tha_t04,195,195,0 script Rune Device#tt2 HIDDEN_NPC,3,3,{
}
while (1) {
while (1) {
- input .@input;
+ input(.@input);
if (.@input < 100 || .@input > 999) {
mes "[Screen]";
mes "Number input";
@@ -1060,8 +1060,8 @@ tha_t04,195,195,0 script Rune Device#tt2 HIDDEN_NPC,3,3,{
}
.@input100 = .@input / 100;
.@input10 = (.@input % 100) / 10;
- if (((.@input100 > 0) && (.@input10 > 0)) && (.@input % 10 > 0)) {
- if (((.@input100 != .@input10) && (.@input100 != .@input % 10)) && (.@input10 != .@input % 10))
+ if (.@input100 > 0 && .@input10 > 0 && .@input % 10 > 0) {
+ if (.@input100 != .@input10 && .@input100 != .@input % 10 && .@input10 != .@input % 10)
break;
mes "[Screen]";
mes "Violation of number";
@@ -1082,12 +1082,18 @@ tha_t04,195,195,0 script Rune Device#tt2 HIDDEN_NPC,3,3,{
next;
.@strike = 0;
.@ball = 0;
- if (.@yagu100 == .@input100) .@strike += 1;
- if (.@yagu10 == .@input10) .@strike += 1;
- if (.@yagu1 == .@input % 10) .@strike += 1;
- if ((.@yagu100 == .@input10) || (.@yagu100 == .@input % 10)) .@ball += 1;
- if ((.@yagu10 == .@input100) || (.@yagu10 == .@input % 10)) .@ball += 1;
- if ((.@yagu1 == .@input100) || (.@yagu1 == .@input10)) .@ball += 1;
+ if (.@yagu100 == .@input100)
+ .@strike += 1;
+ if (.@yagu10 == .@input10)
+ .@strike += 1;
+ if (.@yagu1 == .@input % 10)
+ .@strike += 1;
+ if (.@yagu100 == .@input10 || .@yagu100 == .@input % 10)
+ .@ball += 1;
+ if (.@yagu10 == .@input100 || .@yagu10 == .@input % 10)
+ .@ball += 1;
+ if (.@yagu1 == .@input100 || .@yagu1 == .@input10)
+ .@ball += 1;
if (.@strike == 3) {
mes "[Screen]";
mes "Input number accepted.";
@@ -1193,8 +1199,8 @@ tha_t05,62,179,0 script Brilliant Statue#tt3 HIDDEN_NPC,3,3,{
mes "I'll try the left wing first.";
mes "What key should I put in?";
next;
- input .@inputstr$;
- if ((.@inputstr$ != "Red Key") && (.@inputstr$ != "red key")) {
+ input(.@inputstr$);
+ if (.@inputstr$ != "Red Key" && .@inputstr$ != "red key") {
mes "It doesn't fit into the crack.";
close;
}
@@ -1204,8 +1210,8 @@ tha_t05,62,179,0 script Brilliant Statue#tt3 HIDDEN_NPC,3,3,{
mes "["+strcharinfo(PC_NAME)+"]";
mes "Now the right side...";
next;
- input .@inputstr$;
- if ((.@inputstr$ != "Yellow Key") && (.@inputstr$ != "yellow key")) {
+ input(.@inputstr$);
+ if (.@inputstr$ != "Yellow Key" && .@inputstr$ != "yellow key") {
mes "It doesn't fit into the crack.";
close;
}
@@ -2143,7 +2149,7 @@ OnTouch:
mes "There is a fragment missing from the crest of the Seal.";
mes "Surely I saw a familiar fragment before...";
next;
- input .@inputstr$;
+ input(.@inputstr$);
.@exact_tt$ = "Fragment of "+.@j$;
if (countitem(.@i[0]) > 0 && .@exact_tt$ == .@inputstr$) {
mes "^3355FFYou insert the";
diff --git a/npc/quests/the_sign_quest.txt b/npc/quests/the_sign_quest.txt
index 4bf60993a..003972e62 100644
--- a/npc/quests/the_sign_quest.txt
+++ b/npc/quests/the_sign_quest.txt
@@ -2815,7 +2815,7 @@ aldeba_in,155,101,3 script Sir Jore#sign 1_M_SIGNALCHE,7,7,{
mes "A-anyway, please tell me";
mes "what you think it might be.";
next;
- input .@input$;
+ input(.@input$);
if (compare(.@input$,"red gemstone")) {
mes "[Sir Jore]";
mes "What...! Huh.";
@@ -2848,14 +2848,12 @@ aldeba_in,155,101,3 script Sir Jore#sign 1_M_SIGNALCHE,7,7,{
mes ""+ strcharinfo(PC_NAME) +". Farewell~";
close;
}
- else {
- mes "[Sir Jore]";
- mes "Err...?";
- mes "I don't think";
- mes "I quite understood";
- mes "you. What did you say?";
- close;
- }
+ mes "[Sir Jore]";
+ mes "Err...?";
+ mes "I don't think";
+ mes "I quite understood";
+ mes "you. What did you say?";
+ close;
}
else if (sign_q == 20) {
mes "[Sir Jore]";
@@ -3673,7 +3671,7 @@ geffen_in,59,74,4 script Jesqurienne#sign 1_F_SIGNZISK,{
mes "a battle of minds.";
mes "W-who are you...?";
next;
- input .@input$;
+ input(.@input$);
mes "[Jesqurienne]";
mes ""+.@input$+"...";
mes "I will remember that.";
@@ -6947,7 +6945,7 @@ geffen_in,159,48,5 script Lonely-looking Woman 4_F_05,{
mes "W-wait!";
mes "I'm here to see...";
next;
- input .@input$;
+ input(.@input$);
if (.@input$ != "Engel Howard") {
mes "[Brenda Howard]";
mes "Huh?";
@@ -6962,23 +6960,21 @@ geffen_in,159,48,5 script Lonely-looking Woman 4_F_05,{
emotion e_ho;
close;
}
- else {
- mes "[Brenda Howard]";
- mes "Ah... I see.";
- mes "You're looking for my husband.";
- mes "My husband, my daughter and";
- mes "I just moved to Geffen from";
- mes "Prontera a while ago.";
- next;
- mes "[Brenda Howard]";
- mes "We moved to Geffen for the sake of my husband's business. Apparently, this town is closest to something he really seems to need. Whatever it is, it must be really important to his smithing work.";
- next;
- mes "[Brenda Howard]";
- mes "Oh, and if you're going to look";
- mes "for my husband, please talk to my daughter before you go. I think she has something that she wants to give to her father...";
- sign_q = 55;
- close;
- }
+ mes "[Brenda Howard]";
+ mes "Ah... I see.";
+ mes "You're looking for my husband.";
+ mes "My husband, my daughter and";
+ mes "I just moved to Geffen from";
+ mes "Prontera a while ago.";
+ next;
+ mes "[Brenda Howard]";
+ mes "We moved to Geffen for the sake of my husband's business. Apparently, this town is closest to something he really seems to need. Whatever it is, it must be really important to his smithing work.";
+ next;
+ mes "[Brenda Howard]";
+ mes "Oh, and if you're going to look";
+ mes "for my husband, please talk to my daughter before you go. I think she has something that she wants to give to her father...";
+ sign_q = 55;
+ close;
}
else if (sign_q < 57) {
mes "Ho-ho~!";
@@ -7700,8 +7696,8 @@ gef_tower,118,36,4 script Annoyed Man 1_M_WIZARD,{
mes "What are you doing here?!";
emotion e_pif;
next;
- input .@input$;
- if ((.@input$ == "Metz Brayde") || (.@input$ == "Sobbing Starlight")) {
+ input(.@input$);
+ if (.@input$ == "Metz Brayde" || .@input$ == "Sobbing Starlight") {
mes "[Dhota]";
mes "Eh?";
if (.@input$ == "Metz Brayde") {
@@ -7738,15 +7734,13 @@ gef_tower,118,36,4 script Annoyed Man 1_M_WIZARD,{
emotion e_pif;
close;
}
- else {
- mes "[Dhota]";
- mes "Say what...?";
- mes "I have no idea what";
- mes "you're talking about!";
- mes "If you've got nothing";
- mes "to say, then leave me alone!";
- close;
- }
+ mes "[Dhota]";
+ mes "Say what...?";
+ mes "I have no idea what";
+ mes "you're talking about!";
+ mes "If you've got nothing";
+ mes "to say, then leave me alone!";
+ close;
}
else {
mes "Hmmm...";
diff --git a/npc/re/cities/brasilis.txt b/npc/re/cities/brasilis.txt
index eb30a3225..7c29265e0 100644
--- a/npc/re/cities/brasilis.txt
+++ b/npc/re/cities/brasilis.txt
@@ -133,22 +133,22 @@ brasilis,137,77,5 script Ice-Cream Maker 4_M_03,{
mes "So how many d'ya want?";
next;
while(1) {
- input .@input; //,1,5;
- if (.@input == 0) {
+ input(.@input);
+ if (.@input <= 0) {
mes "[Ice Cream Maker]";
mes "None?";
mes "Fine get outta the way, I have customers to serve.";
close;
}
- else if ((.@input < 0) || (.@input > 5)) {
+ if (.@input > 5) {
mes "[Ice Cream Maker]";
mes "Wow.";
mes "You ordered too much.";
mes "If you eat over 5 you might need to fight with a monster in your stomach. Calm down buddy.";
next;
+ continue;
}
- else
- break;
+ break;
}
.@icecream_hap = .@input*100;
if (Zeny < .@icecream_hap) {
diff --git a/npc/re/cities/dewata.txt b/npc/re/cities/dewata.txt
index d8bac5986..70e60a274 100644
--- a/npc/re/cities/dewata.txt
+++ b/npc/re/cities/dewata.txt
@@ -489,11 +489,12 @@ dewata,89,191,6 script Small Shrine#dew1 CLEAR_NPC,{
mes "^FF00001,000 ~ 100,000 Zeny^000000";
mes "How much do you want to donate?";
next;
- input .@input,0,100000;
+ input(.@input, 0, 100000);
if (.@input < 1000) {
mes "- Cancelled. -";
close;
- } else if (.@input <= 50000)
+ }
+ if (.@input <= 50000)
.@good_luck = rand(1,10000);
else
.@good_luck = rand(1,5000);
@@ -557,7 +558,7 @@ dewata,89,191,6 script Small Shrine#dew1 CLEAR_NPC,{
case 2:
mes "What is your wish?";
next;
- input .@wish$;
+ input(.@wish$);
mes "You have made your wish for ^0000FF" + .@wish$ + "^000000 to the small shrine.";
next;
callsub L_Wish;
diff --git a/npc/re/cities/mora.txt b/npc/re/cities/mora.txt
index a58ee4463..d3f5b6ed3 100644
--- a/npc/re/cities/mora.txt
+++ b/npc/re/cities/mora.txt
@@ -452,16 +452,18 @@ mora,140,186,3 script Raffle Philosopher 4_M_RAFLE_OLD,{
mes "You can pay me in the currencies listed below.";
mes "Enter the sum you're willing to pay. Enter 0 if you don't want to pay anything.";
next;
- input .@input;
+ input(.@input);
if (.@input == 0) {
mes "[Raffle Philosopher]";
mes "So you don't want to hear a quote, eh?";
close;
- } else if (.@input < 100 || .@input > 1000000) {
+ }
+ if (.@input < 100 || .@input > 1000000) {
mes "[Raffle Philosopher]";
mes "You can pay between ^FF0000100 and 1000000^000000.";
close;
- } else if (Zeny < .@input) {
+ }
+ if (Zeny < .@input) {
mes "[Raffle Philosopher]";
mes "So you think this is what my time is worth?";
close;
@@ -908,7 +910,7 @@ mora,140,186,3 script Raffle Philosopher 4_M_RAFLE_OLD,{
mes "I wonder what you think";
mes "about what I've told you.";
next;
- input .@inputstr$;
+ input(.@inputstr$);
mes "[Raffle Philosopher]";
mes "So you think that "+.@inputstr$+".";
next;
@@ -1146,7 +1148,7 @@ mora,43,127,3 script Innkeeper#mora_inn 4_M_RAFLE_OR,{
close;
}
case 3:
- input .@inputstr$;
+ input(.@inputstr$);
mes "["+strcharinfo(PC_NAME)+"]";
mes "I come from a place called "+.@inputstr$+".";
next;
diff --git a/npc/re/jobs/2e/kagerou_oboro.txt b/npc/re/jobs/2e/kagerou_oboro.txt
index 5818bb4fd..f03dece93 100644
--- a/npc/re/jobs/2e/kagerou_oboro.txt
+++ b/npc/re/jobs/2e/kagerou_oboro.txt
@@ -659,7 +659,7 @@ job_ko,25,115,4 script Old Man#ko 4_M_KAGE_OLD,{
mes "[Leader Gion]";
mes "You've come back already? You could have rested more. Is there a reason to hurry?";
next;
- input .@inputstr$;
+ input(.@inputstr$);
cutin "job_ko03",2;
mes "[Leader Gion]";
mes "Because of ^B24E59" + .@inputstr$ + "^000000?";
diff --git a/npc/re/jobs/3-1/archbishop.txt b/npc/re/jobs/3-1/archbishop.txt
index e37087857..90dadd8d1 100644
--- a/npc/re/jobs/3-1/archbishop.txt
+++ b/npc/re/jobs/3-1/archbishop.txt
@@ -243,7 +243,7 @@ umbala,139,227,3 script Priest#arch 1_M_PASTOR,{
mes "[" + strcharinfo(PC_NAME) + "]";
mes "Hmm, I wanted to tell you...";
next;
- input .@inputstr$;
+ input(.@inputstr$);
mes "[" + strcharinfo(PC_NAME) + "]";
mes "" + .@inputstr$ + "";
next;
@@ -483,7 +483,7 @@ OnTouch:
next;
mes "[" + strcharinfo(PC_NAME) + "]";
mes "Pain... What kind of faults have I had?";
- input .@inputstr$;
+ input(.@inputstr$);
next;
mes "[" + strcharinfo(PC_NAME) + "]";
mes "I confess my guilt to the Almighty God Odin.";
diff --git a/npc/re/jobs/3-1/rune_knight.txt b/npc/re/jobs/3-1/rune_knight.txt
index ad8ab8f74..6230746b1 100644
--- a/npc/re/jobs/3-1/rune_knight.txt
+++ b/npc/re/jobs/3-1/rune_knight.txt
@@ -962,7 +962,7 @@ job3_rune01,58,51,1 script Rune Furnace CLEAR_NPC,{
next;
mes .@str$[1];
next;
- input .@inputstr$;
+ input(.@inputstr$);
if (.@inputstr$ == .@str$[0]) {
mes "[Rune Knight Renoa]";
mes "Wow! This is great. The image of the rune stone in my head and the modeled rune stone match perfectly. It's well made.";
diff --git a/npc/re/jobs/3-2/royal_guard.txt b/npc/re/jobs/3-2/royal_guard.txt
index 87cf554ad..8924d61dd 100644
--- a/npc/re/jobs/3-2/royal_guard.txt
+++ b/npc/re/jobs/3-2/royal_guard.txt
@@ -521,7 +521,7 @@ sec_in02,12,43,3 script sorcereryal 1_M_LIBRARYMASTER,1,1,{
switch(select("Royal Guard", "Rune Knight", "Sorcerer")) {
case 1:
mes "1~5";
- input .@input;
+ input(.@input);
next;
if (.@input < 1 || .@input > 5) {
mes "Set item to adjust the Royal Guard";
@@ -533,7 +533,7 @@ sec_in02,12,43,3 script sorcereryal 1_M_LIBRARYMASTER,1,1,{
close;
case 2:
mes "1~24";
- input .@input;
+ input(.@input);
next;
if (.@input < 1 || .@input > 24) {
mes "Set item to adjust the Rune Knight";
@@ -545,7 +545,7 @@ sec_in02,12,43,3 script sorcereryal 1_M_LIBRARYMASTER,1,1,{
close;
case 3:
mes "1~5";
- input .@input;
+ input(.@input);
next;
if (.@input < 1 || .@input > 5) {
mes "Set item to adjust the Sorcerer";
diff --git a/npc/re/jobs/3-2/shadow_chaser.txt b/npc/re/jobs/3-2/shadow_chaser.txt
index 9cdd3f732..3b6f6bcd0 100644
--- a/npc/re/jobs/3-2/shadow_chaser.txt
+++ b/npc/re/jobs/3-2/shadow_chaser.txt
@@ -327,7 +327,7 @@ s_atelier,65,123,5 script Manager#sc04_prt 4_M_KHKYEL,{
mes "Wow, you deciphered it?";
mes "So, what's the right answer?";
next;
- input .@inputstr$;
+ input(.@inputstr$);
if (.@inputstr$ == "shadows atelier in prontera" || .@inputstr$ == "SHADOWS ATELIER IN PRONTERA") {
mes "[Manager]";
mes "Good.";
@@ -1118,7 +1118,7 @@ L_Code:
mes "["+strcharinfo(PC_NAME)+"]";
mes "Paul said...";
next;
- input .@inputstr$;
+ input(.@inputstr$);
mes "["+strcharinfo(PC_NAME)+"]";
mes "Paul said...";
mes "'"+.@inputstr$+"' .";
@@ -1694,7 +1694,7 @@ tur_dun03,38,209,1 script Blue Flame#sc_f01 4_NFWISP,{
mes "A blue flame is roaring.";
mes "The deciphered code means...";
next;
- input .@inputstr$;
+ input(.@inputstr$);
.@dap01$ = "blue fire in turtle island third floor";
.@dap02$ = "BLUE FIRE IN TURTLE ISLAND THIRD FLOOR";
if (.@inputstr$ != .@dap01$ && .@inputstr$ != .@dap02$) {
@@ -1986,7 +1986,7 @@ job3_sha01,22,78,0 script ????#keybox01 CLEAR_NPC,{
mes " ";
mes "And also letters. They are blinking as if waiting for a code to be input.";
next;
- input .@inputstr$;
+ input(.@inputstr$);
if (.@inputstr$ == .@Codes2$[.@i] || .@inputstr$ == strtolower(.@Codes2$[.@i])) {
mes "When you put the correct answer in there,";
mes "the box is opened.";
@@ -2042,7 +2042,7 @@ job3_sha01,25,28,0 script ????#keybox02 CLEAR_NPC,{
next;
switch(select("Input the answer.", "I can't get it.")) {
case 1:
- input .@input;
+ input(.@input);
if (.@input == .@numbers[.@i]) {
mes "You put 2 and "+(.@numbers[.@i]-20)+".";
mes "The box opens and you get one key.";
@@ -2122,7 +2122,7 @@ job3_sha01,73,80,0 script ????#keybox03 CLEAR_NPC,{
mes "There's no code, so 1 should be A.";
mes "And the answer is...";
next;
- input .@inputstr$;
+ input(.@inputstr$);
if (.@inputstr$ == "turn and shake" || .@inputstr$ == "TURN AND SHAKE") {
mes "["+strcharinfo(PC_NAME)+"]";
mes "Turn... Turn... and";
diff --git a/npc/re/jobs/3-2/wanderer.txt b/npc/re/jobs/3-2/wanderer.txt
index 30449e2fa..e9c88032a 100644
--- a/npc/re/jobs/3-2/wanderer.txt
+++ b/npc/re/jobs/3-2/wanderer.txt
@@ -252,7 +252,7 @@ xmas,132,143,5 script Performance Manager#wnd 4_M_06,{
next;
mes "[" + strcharinfo(PC_NAME) + "]";
mes "It's because...";
- input .@inputstr$;
+ input(.@inputstr$);
mes "^3131FF" + .@inputstr$ + "^000000";
mes "......";
next;
diff --git a/npc/re/jobs/novice/academy.txt b/npc/re/jobs/novice/academy.txt
index 3b260d3db..567a28f25 100644
--- a/npc/re/jobs/novice/academy.txt
+++ b/npc/re/jobs/novice/academy.txt
@@ -4513,7 +4513,7 @@ iz_ac01,68,49,3 script General Store Owner#ac 4_F_03,{
}
next();
input(.@input);
- if (!.@input) {
+ if (.@input <= 0) {
mes("[Querrie]");
mes("Well, you don't need to buy it now.");
mes("Use it next time.");
@@ -4525,7 +4525,7 @@ iz_ac01,68,49,3 script General Store Owner#ac 4_F_03,{
mes("You can buy up to 99 at once.");
close();
}
- set .@cost, .@input * (BaseLevel <= 20 ? 30 : 500);
+ .@cost = .@input * (BaseLevel <= 20 ? 30 : 500);
mes("[Querrie]");
mesf("%d combination kits will cost you %d.... zeny.", .@input, .@cost);
if (Zeny < .@cost) {
@@ -5945,199 +5945,199 @@ iz_ac01,69,36,3 script Otter Samssoon#ac 4W_SAILOR,{
mes("If you want to stop, say 0.");
next();
input(.@style);
- if (.@style > 19) {
- mes("[Otter Samssoon]");
- mes("Oh my!!? Honey~ You can use a coupon for the hair style in here~");
- close();
- } else if (!.@style) {
+ if (.@style <= 0) {
mes("[Otter Samssoon]");
mes("Did you decide? Which style??");
mes("I want to touch your hair with my hands~ Honey~");
close();
- } else {
- callsub(L_cutin, .@style);
+ }
+ if (.@style > 19) {
mes("[Otter Samssoon]");
- switch(.@style) {
- case 1:
- if (Sex == SEX_MALE) {
- mes("Oh my!!? 'Play Dead' cut?");
- mes("This looks neat and relaxed.. So popular style.");
- } else {
- mes("Oh my!!? 'First Aid' cut?");
- mes("This is and adorable style.");
- mes("I guess it looks good on you too!!");
- }
- break;
- case 2:
- if (Sex == SEX_MALE) {
- mes("Oh my!!? 'Two Handed Sword Mastery' cut?");
- mes("You... You know the famous D..? He has exactly the same style!");
- } else {
- mes("Oh my!!? 'Bash' cut?");
- mes("This style gives strong curls on both side hair.");
- }
- break;
- case 3:
- if (Sex == SEX_MALE) {
- mes("Oh my!!? 'Napalm Beat' cut?");
- mes("It has well arranges hair line that makes feel charisma.");
- } else {
- mes("Oh my!!? 'Frost Diver' cut?");
- mes("It is mysterious style that gives cold and warm feeling at the same time.");
- }
- break;
- case 4:
- if (Sex == SEX_MALE) {
- mes("Oh my!!? 'Double Strafe' cut?");
- mes("Natural hair is shaking by wind.. Clean and good feeling.");
- } else {
- mes("Oh my!!? 'Arrow Shower' cut?");
- mes("Cool and nice shaggy cut makes good style.");
- }
- break;
- case 5:
- if (Sex == SEX_MALE) {
- mes("Oh my!!? 'Angelus' cut?");
- mes("Calm and piety feeling.. Not boring style.");
- } else {
- mes("Oh my!!? 'Heal' cut?");
- mes("Feminine style give healing feeling.");
- }
- break;
- case 6:
- if (Sex == SEX_MALE) {
- mes("Oh my!!? 'Push Cart' cut?");
- mes("Big Kar is motivated for this style with a romance of a man.");
- } else {
- mes("Oh my!!? 'Vending' cut?");
- mes("Royal ladies like this style. Make good money style.");
- }
- break;
- case 7:
- if (Sex == SEX_MALE) {
- mes("Oh my!!? 'Envenom' cut?");
- mes("Tough style makes addicted.");
- } else {
- mes("Oh my!!? 'Double Attack' cut?");
- mes("Whoever will dash twice for this style.");
- mes("Ponytail is important.");
- }
- break;
- case 8:
- if (Sex == SEX_MALE) {
- mes("Oh my!!? 'Bowling Bash' cut?");
- mes("This style makes a nice guy to challenge.");
- mes("Just a giving a glance can steal the heart.");
- } else {
- mes("Oh my!!? 'Gloria' cut?");
- mes("This style is ultimately gorgeous and graceful.");
- }
- break;
- case 9:
- if (Sex == SEX_MALE) {
- mes("Oh my!!? 'Venom Dust' cut?");
- mes("This style has special ending line that looks fatal.");
- } else {
- mes("Oh my!!? 'SP Recovery' cut?");
- mes("This style has neat cutting that inspires.");
- }
- break;
- case 10:
- if (Sex == SEX_MALE) {
- mes("Oh my!!? 'Turn Undead' cut?");
- mes("This style is like a cold city man who is strong enough to kill a monster.");
- } else {
- mes("Oh my!!? 'Prepare Potion' cut?");
- mes("This style has a liquid medicine motive so it makes feel cure.");
- }
- break;
- case 11:
- if (Sex == SEX_MALE) {
- mes("Oh my!!? 'Dragonology' cut?");
- mes("This style is intelligent style of mysterious dragon.");
- } else {
- mes("Oh my!!? 'Grand Cross' cut?");
- mes("Well trimmed hair cut line gives trust.");
- }
- break;
- case 12:
- if (Sex == SEX_MALE) {
- mes("Oh my!!? 'Mace Mastery' cut?");
- mes("Look fresh and look neat with wax treatment.");
- } else {
- mes("Oh my!!? 'Intimidate' cut?");
- mes("This style is very familiar.");
- }
- break;
- case 13:
- if (Sex == SEX_MALE) {
- mes("Oh my!!? 'Thunder Storm' cut?");
- mes("This style has natural attractive perm which is like hitting by thunder storm.");
- } else {
- mes("Oh my!!? 'Spiritual Sphere");
- mes("Calm and a little bit looks like a boy cut draw attention.");
- }
- break;
- case 14:
- if (Sex == SEX_MALE) {
- mes("Oh my!!? 'Encore' cut?");
- mes("Rocker's favorite style.. Even the name itself..");
- } else {
- mes("Oh my!!? 'Gypsy's Kiss' cut?");
- mes("The hair.. Kind to everyone.. Neat and round hair line is very soft and charming.");
- }
- break;
- case 15:
- if (Sex == SEX_MALE) {
- mes("Oh my!!? 'Grimtooth' cut?");
- mes("The style with edge.");
- } else {
- mes("Oh my!!? 'Counter Attack' cut?");
- mes("It is the style that looks cold and arrogant. Hard to talk to..");
- mes("But might be nice to boyfriend..?");
- }
- break;
- case 16:
- if (Sex == SEX_MALE) {
- mes("Oh my!!? 'Blitz Beat' cut?");
- mes("It is the style my senior invented after he broke up with his girlfriends 5 times.");
- } else {
- mes("Oh my!!? 'Anke Snare' cut?");
- mes("It is killing style.. No one can take eyes off!");
- }
- break;
- case 17:
- if (Sex == SEX_MALE) {
- mes("Oh my!!? 'Find Ore' cut?");
- mes("This style seems to bring encounter or find unexpected things while walking on the street.");
- } else {
- mes("Oh my!!? 'Hammer Fall' cut?");
- mes("Stunning hair with attraction.");
- }
- break;
- case 18:
- if (Sex == SEX_MALE) {
- mes("Oh my!!? 'Fire Pillar' cut?");
- mes("Everyone used to have this hair style.. Which means that was a trend of an era.");
- } else {
- mes("Oh my!!? 'Jupitel Thunder'");
- mes("Fresh style by giving light waves on both side hairs.");
- }
- break;
- case 19:
- if (Sex == SEX_MALE) {
- mes("Oh my!!? 'Guillotine Fist'");
- mes("It is like one-shot style.. Like a real man. Right?");
- } else {
- mes("Oh my!!? 'Whirlwind' cut?");
- mes("It is cool style which flows with wind. Lah, lah, lah, lah ~");
- }
- break;
+ mes("Oh my!!? Honey~ You can use a coupon for the hair style in here~");
+ close();
+ }
+ callsub(L_cutin, .@style);
+ mes("[Otter Samssoon]");
+ switch(.@style) {
+ case 1:
+ if (Sex == SEX_MALE) {
+ mes("Oh my!!? 'Play Dead' cut?");
+ mes("This looks neat and relaxed.. So popular style.");
+ } else {
+ mes("Oh my!!? 'First Aid' cut?");
+ mes("This is and adorable style.");
+ mes("I guess it looks good on you too!!");
}
- close2();
- cutin("", 255);
- end;
+ break;
+ case 2:
+ if (Sex == SEX_MALE) {
+ mes("Oh my!!? 'Two Handed Sword Mastery' cut?");
+ mes("You... You know the famous D..? He has exactly the same style!");
+ } else {
+ mes("Oh my!!? 'Bash' cut?");
+ mes("This style gives strong curls on both side hair.");
+ }
+ break;
+ case 3:
+ if (Sex == SEX_MALE) {
+ mes("Oh my!!? 'Napalm Beat' cut?");
+ mes("It has well arranges hair line that makes feel charisma.");
+ } else {
+ mes("Oh my!!? 'Frost Diver' cut?");
+ mes("It is mysterious style that gives cold and warm feeling at the same time.");
+ }
+ break;
+ case 4:
+ if (Sex == SEX_MALE) {
+ mes("Oh my!!? 'Double Strafe' cut?");
+ mes("Natural hair is shaking by wind.. Clean and good feeling.");
+ } else {
+ mes("Oh my!!? 'Arrow Shower' cut?");
+ mes("Cool and nice shaggy cut makes good style.");
+ }
+ break;
+ case 5:
+ if (Sex == SEX_MALE) {
+ mes("Oh my!!? 'Angelus' cut?");
+ mes("Calm and piety feeling.. Not boring style.");
+ } else {
+ mes("Oh my!!? 'Heal' cut?");
+ mes("Feminine style give healing feeling.");
+ }
+ break;
+ case 6:
+ if (Sex == SEX_MALE) {
+ mes("Oh my!!? 'Push Cart' cut?");
+ mes("Big Kar is motivated for this style with a romance of a man.");
+ } else {
+ mes("Oh my!!? 'Vending' cut?");
+ mes("Royal ladies like this style. Make good money style.");
+ }
+ break;
+ case 7:
+ if (Sex == SEX_MALE) {
+ mes("Oh my!!? 'Envenom' cut?");
+ mes("Tough style makes addicted.");
+ } else {
+ mes("Oh my!!? 'Double Attack' cut?");
+ mes("Whoever will dash twice for this style.");
+ mes("Ponytail is important.");
+ }
+ break;
+ case 8:
+ if (Sex == SEX_MALE) {
+ mes("Oh my!!? 'Bowling Bash' cut?");
+ mes("This style makes a nice guy to challenge.");
+ mes("Just a giving a glance can steal the heart.");
+ } else {
+ mes("Oh my!!? 'Gloria' cut?");
+ mes("This style is ultimately gorgeous and graceful.");
+ }
+ break;
+ case 9:
+ if (Sex == SEX_MALE) {
+ mes("Oh my!!? 'Venom Dust' cut?");
+ mes("This style has special ending line that looks fatal.");
+ } else {
+ mes("Oh my!!? 'SP Recovery' cut?");
+ mes("This style has neat cutting that inspires.");
+ }
+ break;
+ case 10:
+ if (Sex == SEX_MALE) {
+ mes("Oh my!!? 'Turn Undead' cut?");
+ mes("This style is like a cold city man who is strong enough to kill a monster.");
+ } else {
+ mes("Oh my!!? 'Prepare Potion' cut?");
+ mes("This style has a liquid medicine motive so it makes feel cure.");
+ }
+ break;
+ case 11:
+ if (Sex == SEX_MALE) {
+ mes("Oh my!!? 'Dragonology' cut?");
+ mes("This style is intelligent style of mysterious dragon.");
+ } else {
+ mes("Oh my!!? 'Grand Cross' cut?");
+ mes("Well trimmed hair cut line gives trust.");
+ }
+ break;
+ case 12:
+ if (Sex == SEX_MALE) {
+ mes("Oh my!!? 'Mace Mastery' cut?");
+ mes("Look fresh and look neat with wax treatment.");
+ } else {
+ mes("Oh my!!? 'Intimidate' cut?");
+ mes("This style is very familiar.");
+ }
+ break;
+ case 13:
+ if (Sex == SEX_MALE) {
+ mes("Oh my!!? 'Thunder Storm' cut?");
+ mes("This style has natural attractive perm which is like hitting by thunder storm.");
+ } else {
+ mes("Oh my!!? 'Spiritual Sphere");
+ mes("Calm and a little bit looks like a boy cut draw attention.");
+ }
+ break;
+ case 14:
+ if (Sex == SEX_MALE) {
+ mes("Oh my!!? 'Encore' cut?");
+ mes("Rocker's favorite style.. Even the name itself..");
+ } else {
+ mes("Oh my!!? 'Gypsy's Kiss' cut?");
+ mes("The hair.. Kind to everyone.. Neat and round hair line is very soft and charming.");
+ }
+ break;
+ case 15:
+ if (Sex == SEX_MALE) {
+ mes("Oh my!!? 'Grimtooth' cut?");
+ mes("The style with edge.");
+ } else {
+ mes("Oh my!!? 'Counter Attack' cut?");
+ mes("It is the style that looks cold and arrogant. Hard to talk to..");
+ mes("But might be nice to boyfriend..?");
+ }
+ break;
+ case 16:
+ if (Sex == SEX_MALE) {
+ mes("Oh my!!? 'Blitz Beat' cut?");
+ mes("It is the style my senior invented after he broke up with his girlfriends 5 times.");
+ } else {
+ mes("Oh my!!? 'Anke Snare' cut?");
+ mes("It is killing style.. No one can take eyes off!");
+ }
+ break;
+ case 17:
+ if (Sex == SEX_MALE) {
+ mes("Oh my!!? 'Find Ore' cut?");
+ mes("This style seems to bring encounter or find unexpected things while walking on the street.");
+ } else {
+ mes("Oh my!!? 'Hammer Fall' cut?");
+ mes("Stunning hair with attraction.");
+ }
+ break;
+ case 18:
+ if (Sex == SEX_MALE) {
+ mes("Oh my!!? 'Fire Pillar' cut?");
+ mes("Everyone used to have this hair style.. Which means that was a trend of an era.");
+ } else {
+ mes("Oh my!!? 'Jupitel Thunder'");
+ mes("Fresh style by giving light waves on both side hairs.");
+ }
+ break;
+ case 19:
+ if (Sex == SEX_MALE) {
+ mes("Oh my!!? 'Guillotine Fist'");
+ mes("It is like one-shot style.. Like a real man. Right?");
+ } else {
+ mes("Oh my!!? 'Whirlwind' cut?");
+ mes("It is cool style which flows with wind. Lah, lah, lah, lah ~");
+ }
+ break;
}
+ close2();
+ cutin("", 255);
+ end;
close();
case 2:
if (!countitem(Cryptura_Hair_Coupon)) {
@@ -6152,15 +6152,17 @@ iz_ac01,69,36,3 script Otter Samssoon#ac 4W_SAILOR,{
mes("Pick the style from page 1 to 19.");
next();
input(.@style);
- if (.@style > 19) {
+ if (.@style <= 0) {
mes("[Otter Samssoon]");
- mes("Come on.. Honey~ You can use a coupon for the hair style in here~");
+ mes("Oh my!!? You do not want to?");
close();
- } else if (!.@style) {
+ }
+ if (.@style > 19) {
mes("[Otter Samssoon]");
- mes("Oh my!!? You do not want to?");
+ mes("Come on.. Honey~ You can use a coupon for the hair style in here~");
close();
- } else if (getlook(1) == .@style) {
+ }
+ if (getlook(1) == .@style) {
mes("[Otter Samssoon]");
mes("Come on.. Honey~ That is the same style you have.");
mes("Do you want to try something new?");
@@ -13114,18 +13116,19 @@ izlude,145,122,7 script Tadde#iz 4_M_04,{
mes("How many would you like? Enter '0' if you want to end.");
next();
while(true) {
- input(.@amount, 0, 501);
- if (.@amount == 0) {
+ input(.@amount);
+ if (.@amount <= 0) {
mes("[Tadde]");
mes("Trade ended.");
close();
- } else if (.@amount > 500) {
+ }
+ if (.@amount > 500) {
mes("[Tadde]");
mes("Please reduce your quantity to 500 or less.");
next();
- } else {
- break;
+ continue;
}
+ break;
}
.@sell = .@amount * 200;
.@item_weight = .@amount * 200;
@@ -13150,18 +13153,19 @@ izlude,145,122,7 script Tadde#iz 4_M_04,{
mes("How many would you like? Enter '0' if you want to end.");
next();
while(true) {
- input(.@amount, 0, 501);
- if (.@amount == 0) {
+ input(.@amount);
+ if (.@amount <= 0) {
mes("[Tadde]");
mes("Trade ended.");
close();
- } else if (.@amount > 500) {
+ }
+ if (.@amount > 500) {
mes("[Tadde]");
mes("Please reduce your quantity to 500 or less.");
next();
- } else {
- break;
+ continue;
}
+ break;
}
.@sell = .@amount * 1000;
.@item_weight = .@amount * 200;
diff --git a/npc/re/merchants/3rd_trader.txt b/npc/re/merchants/3rd_trader.txt
index dcf66a19f..ecfe34fba 100644
--- a/npc/re/merchants/3rd_trader.txt
+++ b/npc/re/merchants/3rd_trader.txt
@@ -72,8 +72,8 @@
mes "You can only buy a maximum of '"+.@max+"' ea.";
mes "Enter '0' if you want to cancel.";
next;
- input .@amount;
- if (.@amount == 0) {
+ input(.@amount);
+ if (.@amount <= 0) {
mes "[Poison Herb Merchant]";
mes "You've cancelled the trade.";
close;
@@ -133,8 +133,8 @@ lhz_in02,16,205,4 duplicate(phs) Poison Herb Merchant#lhz 4_F_YUNYANG
mes "and remember, you can only";
mes "buy a maximum of '2000' ea.";
next;
- input .@amount;
- if (.@amount == 0) {
+ input(.@amount);
+ if (.@amount <= 0) {
mes "[Rune Merchant]";
mes "You're not buying? Please leave!";
close;
@@ -199,8 +199,8 @@ job3_guil01,91,93,3 script Rare Herb Collector 1_M_03,{
mes "You can only buy a maximum of '2000' ea.";
mes "Enter '0' if you want to cancel.";
next;
- input .@amount;
- if (.@amount == 0) {
+ input(.@amount);
+ if (.@amount <= 0) {
mes "[Rare Poison Herb Collector]";
mes "You've cancelled the trade.";
close;
@@ -254,9 +254,9 @@ job3_guil01,91,93,3 script Rare Herb Collector 1_M_03,{
mes "How many do you want?";
mes "If you want to cancel, enter 0.";
next;
- input .@amount;
+ input(.@amount);
mes "[Point Merchant]";
- if (.@amount == 0) {
+ if (.@amount <= 0) {
mes "You've cancelled the trade.";
close;
}
diff --git a/npc/re/merchants/alchemist.txt b/npc/re/merchants/alchemist.txt
index 73344a75c..fc38ef23a 100644
--- a/npc/re/merchants/alchemist.txt
+++ b/npc/re/merchants/alchemist.txt
@@ -98,13 +98,13 @@ alde_alche,31,186,3 script Craft Book Merchant#alde 4_M_ALCHE_D,{
mes "100,000 zeny.";
mes "How many would you like to purchase?";
next;
- input .@amount;
- if (.@amount == 0) {
+ input(.@amount);
+ if (.@amount <= 0) {
mes "[Craft Book Merchant]";
mes "Would you like to see some different books?";
close;
}
- if (.@amount < 1 || .@amount > 99 ){
+ if (.@amount > 99 ){
mes "[Craft Book Merchant]";
mes "You cannot purchase more than 100 at a time.";
close;
diff --git a/npc/re/merchants/catalog.txt b/npc/re/merchants/catalog.txt
index f508014a1..11f122ace 100644
--- a/npc/re/merchants/catalog.txt
+++ b/npc/re/merchants/catalog.txt
@@ -72,19 +72,21 @@ moc_para01,22,16,5 script Catalog Magician#catal01 4_M_BIBI,{
mes "Or how many do you need?";
next;
while (1) {
- input .@input;
+ input(.@input);
mes "[Catalog Magician]";
- if (.@input == 0) {
+ if (.@input <= 0) {
mes "The trade has been stopped!";
mes "I don't know what to do next...";
mes "What should I do?";
emotion e_swt2,1;
close;
- } else if (.@input < 1 || .@input > 50) {
+ }
+ if (.@input > 50) {
mes "It should be less than 50 pieces.";
next;
- } else
- break;
+ continue;
+ }
+ break;
}
.@sell = .@ticket_cost * .@input;
mes "The total number of catalog(s) that you're trying to purchase is " + .@input + " pieces.";
diff --git a/npc/re/merchants/diamond.txt b/npc/re/merchants/diamond.txt
index 665af5e6a..762e2d145 100644
--- a/npc/re/merchants/diamond.txt
+++ b/npc/re/merchants/diamond.txt
@@ -128,7 +128,7 @@
mes .@npc$;
mes "Alright then, please sign here.";
next;
- input .@charname$;
+ input(.@charname$);
if (.@charname$ == strcharinfo(PC_NAME)) {
mes .@npc$;
mes "Okay, good.";
@@ -202,7 +202,7 @@
mes "The trade cannot be completed without your signature.";
close;
}
- input .@charname$;
+ input(.@charname$);
if (.@charname$ == strcharinfo(PC_NAME)) {
mes .@npc$;
mes "Your signature has been received.";
@@ -218,12 +218,10 @@
Zeny += 499000000;
close;
}
- else {
- mes .@npc$;
- mes "Is this really your signature?";
- mes "Will sign again to confirm?";
- next;
- }
+ mes .@npc$;
+ mes "Is this really your signature?";
+ mes "Will sign again to confirm?";
+ next;
}
}
}
diff --git a/npc/re/merchants/enchan_mora.txt b/npc/re/merchants/enchan_mora.txt
index 46979c82b..d114a3b61 100644
--- a/npc/re/merchants/enchan_mora.txt
+++ b/npc/re/merchants/enchan_mora.txt
@@ -580,16 +580,16 @@ mora,152,97,5 script Guardian of Power#pa082 4_F_DOGTRAVELER,{
next;
switch(.@job) {
case 0: // Rune Knight
- setarray .@items[0],2475,2476,2574,2575;
- .@i = select("Cancel", "Ur's Greaves (Shoes)", "Peuz's Greaves (Shoes)", "Ur's Manteau (Garment)", "Peuz's Manteau (Garment)")-2;
+ setarray .@items[0],2475,2574,2883,15036,2575,2476,2884,15037;
+ .@i = select("Cancel", "Ur's Greaves (Shoes)", "Ur's Manteau (Garment)", "Ur's Seal (Accessory)", "Ur's Plate (Armor)", "Peuz's Greaves (Shoes)", "Peuz's Manteau (Garment)", "Peuz's Seal (Accessory)", "Peuz's Plate (Armor)" )-2;
break;
case 1: // Guillotine Cross
- setarray .@items[0],2477,2478,2577,2578;
- .@i = select("Cancel", "Sapha Shoes (Shoes)", "Nab Shoes (Shoes)", "Sapha Hood (Garment)", "Nab Hood (Garment)")-2;
+ setarray .@items[0],2477,2577,2886,15038,2478,2578,2887,15039;
+ .@i = select("Cancel", "Sapha Shoes (Shoes)", "Sapha Hood (Garment)", "Sapha Ring (Accessory)", "Sapha's Cloth (Armor)", "Nab Shoes (Shoes)", "Nab Hood (Garment)", "Nab Ring (Accessory)", "Nab's Cloth (Armor)" )-2;
break;
case 2: // Ranger
- setarray .@items[0],2479,2480,2580,2581;
- .@i = select("Cancel", "White Wing Boots (Shoes)", "Black Wing Boots (Shoes)", "White Wing Manteau (Garment)", "Black Wing Manteau (Garment)")-2;
+ setarray .@items[0],2479,2580,2890,15042,2480,2581,2891,15043;
+ .@i = select("Cancel", "White Wing Boots (Shoes)", "White Wing Manteau (Garment)", "White Wing Brooch (Accessory)", "White Wing Suit (Armor)", "Black Wing Boots (Shoes)","Black Wing Manteau (Garment)", "Black Wing Brooch (Accessory)", "Black Wing Suit (Armor)" )-2;
break;
}
if (.@i == -1) {
diff --git a/npc/re/merchants/refine.txt b/npc/re/merchants/refine.txt
index 879e9a5f1..c0ec2131f 100644
--- a/npc/re/merchants/refine.txt
+++ b/npc/re/merchants/refine.txt
@@ -258,7 +258,7 @@ function script refinenew {
mes "[" + getarg(0) + "]";
mes "How many times would you like me to refine your item?";
next;
- input .@refinecnt;
+ input(.@refinecnt);
.@refinecheck = .@refinecnt + getequiprefinerycnt(.@part);
if (.@refinecnt < 1 || .@refinecheck > 20) {
mes "[" + getarg(0) + "]";
diff --git a/npc/re/mobs/fields/yuno.txt b/npc/re/mobs/fields/yuno.txt
index 4e9a82582..29b26f176 100644
--- a/npc/re/mobs/fields/yuno.txt
+++ b/npc/re/mobs/fields/yuno.txt
@@ -134,3 +134,17 @@ yuno_fild11,0,0,0,0 monster Yellow Plant 1081,10,180000,90000,1
//== yuno_fild12 - Border Checkpoint =======================
yuno_fild12,0,0,0,0 monster Geographer 1368,60,5000,0,0
yuno_fild12,0,0,0,0 monster Mantis 1139,30,5000,0,0
+
+//== Transcendent Quest - Quest #5160 - Library Mistake =======================
+yuno_fild01,0,0,0,0 monster Runaway Book 2414,1,5000,0,"Metheus Sylphe#Library::OnKill"
+yuno_fild02,0,0,0,0 monster Runaway Book 2414,1,5000,0,"Metheus Sylphe#Library::OnKill"
+yuno_fild03,0,0,0,0 monster Runaway Book 2414,1,5000,0,"Metheus Sylphe#Library::OnKill"
+yuno_fild04,0,0,0,0 monster Runaway Book 2414,1,5000,0,"Metheus Sylphe#Library::OnKill"
+// yuno_fild05,0,0,0,0 monster Runaway Book 2414,1,5000,0,"Metheus Sylphe#Library::OnKill"
+yuno_fild06,0,0,0,0 monster Runaway Book 2414,1,5000,0,"Metheus Sylphe#Library::OnKill"
+yuno_fild07,0,0,0,0 monster Runaway Book 2414,1,5000,0,"Metheus Sylphe#Library::OnKill"
+yuno_fild08,0,0,0,0 monster Runaway Book 2414,1,5000,0,"Metheus Sylphe#Library::OnKill"
+yuno_fild09,0,0,0,0 monster Runaway Book 2414,1,5000,0,"Metheus Sylphe#Library::OnKill"
+// yuno_fild10,0,0,0,0 monster Runaway Book 2414,1,5000,0,"Metheus Sylphe#Library::OnKill"
+yuno_fild11,0,0,0,0 monster Runaway Book 2414,1,5000,0,"Metheus Sylphe#Library::OnKill"
+yuno_fild12,0,0,0,0 monster Runaway Book 2414,1,5000,0,"Metheus Sylphe#Library::OnKill"
diff --git a/npc/re/quests/eden/eden_common.txt b/npc/re/quests/eden/eden_common.txt
index 9085cad91..156ff1cc0 100644
--- a/npc/re/quests/eden/eden_common.txt
+++ b/npc/re/quests/eden/eden_common.txt
@@ -96,7 +96,7 @@ moc_para01,27,35,5 script Secretary Lime Evenor 4_F_EDEN_OFFICER,{
case 1:
mes "[Lime Evenor]";
mes "Aright. Excellent! Please write down your name here.";
- input .@input$;
+ input(.@input$);
next;
mes "[Lime Evenor]";
mes "Are you done?";
@@ -113,7 +113,7 @@ moc_para01,27,35,5 script Secretary Lime Evenor 4_F_EDEN_OFFICER,{
next;
mes "[Lime Evenor]";
mes "Would you please write your name again? Please write it ^3131FFClearly^000000.";
- input .@input$;
+ input(.@input$);
next;
mes "[Lime Evenor]";
mes "Ah~ ha. You are ^3131FF"+strcharinfo(PC_NAME)+"^000000.";
@@ -148,7 +148,7 @@ moc_para01,27,35,5 script Secretary Lime Evenor 4_F_EDEN_OFFICER,{
if(select("Yes, I want to register.", "No, I don't.") == 1) {
mes "[Lime Evenor]";
mes "Alrigh. Please write down your name on it.";
- input .@input$;
+ input(.@input$);
next;
mes "[Lime Evenor]";
mes "^3131FF"+strcharinfo(PC_NAME)+"^000000.. Is that your name?";
@@ -157,7 +157,7 @@ moc_para01,27,35,5 script Secretary Lime Evenor 4_F_EDEN_OFFICER,{
mes "[Lime Evenor]";
mes "^3131FF"+strcharinfo(PC_NAME)+"^000000, tell me what you want to register. for";
mes "Which map should we go to?";
- input .@input$;
+ input(.@input$);
next;
mes "[Lime Evenor]";
mes "^3131FFMission Map: "+.@inputstr$+"^000000";
@@ -166,7 +166,7 @@ moc_para01,27,35,5 script Secretary Lime Evenor 4_F_EDEN_OFFICER,{
mes "[Lime Evenor]";
mes "Please let me know what kind of missions your are lookng for.";
mes "It should be briefly like 'Hunt 10 Porings.'";
- input .@input$;
+ input(.@input$);
next;
mes "[Lime Evenor]";
mes "Are you done?";
diff --git a/npc/re/quests/eden/eden_iro.txt b/npc/re/quests/eden/eden_iro.txt
index aae9a5566..3e5ae39fe 100644
--- a/npc/re/quests/eden/eden_iro.txt
+++ b/npc/re/quests/eden/eden_iro.txt
@@ -142,7 +142,7 @@ moc_para01,166,51,3 script Phelix#edco 4_M_03,{
mes "[Phelix]";
mes "How many do you want?";
mes "^ff0000You have enough for up to " + .@available + " Carrots.^000000";
- input .@input;
+ input(.@input);
next;
if (.@input < 1 || .@input > 10000) {
mes "[Phelix]";
@@ -321,12 +321,13 @@ moc_para01,50,39,4 script Eve Natalia 4_F_SITDOWN,{
mes "So do you want to trade the 1st one in your inventory for ^00CC00"+.@amount+" Random Safe to 7 Certificates^000000?";
mes "Tell me '1' if you do, or '0' to cancel.";
next;
- input .@input;
+ input(.@input);
if (.@input < 0 || .@input > 1) {
mes "[Eve Natalia]";
mes "It is a 0 or 1, it can't be that difficult.";
close;
- } else if (.@input == 0) {
+ }
+ if (.@input == 0) {
mes "[Eve Natalia]";
mes "It's best to be sure before trading, have a good day.";
close;
@@ -417,12 +418,13 @@ L_Exchange:
mes "I can give you up to 60.";
mes "Type 0 to cancel.";
next;
- input .@amount;
- if (.@amount == 0) {
+ input(.@amount);
+ if (.@amount <= 0) {
mes "[Trader Machine]";
mes "Cancelled.";
close;
- } else if (.@amount < 0 || .@amount > 60) {
+ }
+ if (.@amount > 60) {
mes "[Trader Machine]";
mes "I said only 60 max.";
close;
diff --git a/npc/re/quests/eden/eden_quests.txt b/npc/re/quests/eden/eden_quests.txt
index a0f4fa922..6186fa018 100644
--- a/npc/re/quests/eden/eden_quests.txt
+++ b/npc/re/quests/eden/eden_quests.txt
@@ -4302,7 +4302,7 @@ sec_in02,25,33,4 script Assistant#para_suvquest 4_M_BABYCAT,{
.@var = select("para_suv01", "para_suv02");
mes "Enter the modified value";
next;
- input .@input,0,9999;
+ input(.@input, 0, 9999);
mes "Value of para_suv0"+.@var+" has been changed to "+.@input+".";
setd "para_suv0"+.@var,.@input;
close;
diff --git a/npc/re/quests/eden/eden_tutorial.txt b/npc/re/quests/eden/eden_tutorial.txt
index 188bc514a..d544aeb0b 100644
--- a/npc/re/quests/eden/eden_tutorial.txt
+++ b/npc/re/quests/eden/eden_tutorial.txt
@@ -319,7 +319,7 @@ moc_para01,34,178,3 script Tutorial Instructor 4_M_KHMAN,{
mes "if you really checked it?";
mes "Write down what material I asked you to get.";
next;
- input .@inputstr$;
+ input(.@inputstr$);
if (.@inputstr$ == "10 Jellopy") {
mes "[Tutorial Instructor]";
mes "Good, you know.";
diff --git a/npc/re/quests/quests_brasilis.txt b/npc/re/quests/quests_brasilis.txt
index 4a60fd2bb..91233dbb2 100644
--- a/npc/re/quests/quests_brasilis.txt
+++ b/npc/re/quests/quests_brasilis.txt
@@ -2231,449 +2231,400 @@ brasilis,180,249,5 script Daniel#bra 4_M_KID1,{
}
bra_in01,149,184,3 script Door#bra CLEAR_NPC,{
- if (brazil_ghost > 0) {
- mes "- A key is inserted in the locked door.-";
+ mes "- A key is inserted in the locked door.-";
+ if (brazil_ghost == 0) {
+ close;
+ }
+ next;
+ switch(select("Turn the key.", "Ignore it.")) {
+ case 1:
+ mes "You start saying the first line of the magic words.";
+ input(.@input$);
next;
- switch(select("Turn the key.", "Ignore it.")) {
+ mes "["+strcharinfo(PC_NAME)+"]";
+ mes .@input$;
+ next;
+ .@braspell$ = "Mother the door won't open!";
+ .@chkspell = compare(.@braspell$,.@input$);
+ if (!.@chkspell) {
+ mes "Seems like you said something wrong.";
+ close;
+ }
+ if (brazil_ghost != 2) {
+ mes "Mother the door won't open!";
+ close;
+ }
+ mes "[Sobbing Voice]";
+ mes "'^FF0000Turn the key as many times as there are colors in the rainbow.^000000'";
+ next;
+ switch(select("Open the door", "Knock on the door.", "Turn the key.", "Take the key out.")) {
case 1:
- mes "You start saying the first line of the magic words.";
- input .@input$;
+ mes "The door is locked.";
+ mes "So nothing happens.";
+ close;
+ case 2:
+ mes "How many times should I try to knock?";
+ input(.@input, 0, 999);
next;
- mes "["+strcharinfo(PC_NAME)+"]";
- mes .@input$;
+ mes "You knocked on the door "+.@input+" times.";
next;
- .@braspell$ = "Mother the door won't open!";
- .@chkspell = compare(.@braspell$,.@input$);
- if (!.@chkspell) {
- mes "Seems like you said something wrong.";
+ mes "But, nothing happens.";
+ close;
+ case 3:
+ mes "How many times should I turn the key?";
+ input(.@input, 0, 999);
+ next;
+ mes "You turned over the key "+.@input+" times.";
+ next;
+ if (.@input != 7) {
+ mes "But nothing doesn't happened.";
close;
}
- else {
- if (brazil_ghost == 2) {
- mes "[Sobbing Voice]";
- mes "'^FF0000Turn the key as many times as there are colors in the rainbow.^000000'";
- next;
- switch(select("Open the door", "Knock on the door.", "Turn the key.", "Take the key out.")) {
- case 1:
- mes "The door is locked.";
- mes "So nothing happens.";
- close;
- case 2:
- mes "How many times should I try to knock?";
- input .@input,0,999;
- next;
- mes "You knocked on the door "+.@input+" times.";
- next;
- mes "But, nothing happens.";
- close;
- case 3:
- mes "How many times should I turn the key?";
- input .@input,0,999;
- next;
- if (.@input == 7) {
- mes "You turn the key 7 times.";
- next;
- mes "Click! Click! Click!";
- mes "Click! Click! Click!";
- mes "Click...!";
- next;
- mes "[Distant Sound]";
- mes "^FF0000kkkkhee- hihihihi!!!^000000";
- mes "You hear water flushing.";
- next;
- specialeffect(EF_VENOMDUST, AREA, playerattached());
- mes "Faint laughing can be heard off in the direction of the toilet.";
- brazil_ghost = 3;
- changequest 2208,60351;
- close;
- }
- else {
- mes "You turned over the key "+.@input+" times.";
- next;
- mes "But nothing doesn't happened.";
- close;
- }
- case 4:
- mes "How many times should I insert the key into the door?";
- input .@input,0,999;
- next;
- mes "You inserted the key "+.@input+" times.";
- next;
- mes "But nothing happened.";
- close;
- }
- }
- else {
- mes "Mother the door won't open!";
- close;
- }
- }
- case 2:
- mes "You do nothing.";
+ mes "Click! Click! Click!";
+ mes "Click! Click! Click!";
+ mes "Click...!";
+ next;
+ mes "[Distant Sound]";
+ mes "^FF0000kkkkhee- hihihihi!!!^000000";
+ mes "You hear water flushing.";
+ next;
+ specialeffect(EF_VENOMDUST, AREA, playerattached());
+ mes "Faint laughing can be heard off in the direction of the toilet.";
+ brazil_ghost = 3;
+ changequest 2208,60351;
+ close;
+ case 4:
+ mes "How many times should I insert the key into the door?";
+ input(.@input, 0, 999);
+ next;
+ mes "You inserted the key "+.@input+" times.";
+ next;
+ mes "But nothing happened.";
close;
}
- }
- else {
- mes "- A key is inserted in the locked door.-";
+ case 2:
+ mes "You do nothing.";
close;
}
}
bra_in01,144,187,3 script Toilet#bra CLEAR_NPC,{
- if (brazil_ghost > 0) {
- mes "- Looks like an ordinary toilet -";
+ mes "- Looks like an ordinary toilet -";
+ if (brazil_ghost == 0) {
+ close;
+ }
+ next;
+ if (brazil_ghost > 6) {
+ switch(select("Flush the toilet.", "Doing nothing.")) {
+ case 1:
+ mes "After flushing the toilet, you suddenly feel dizzy and are suddenly swept away somewhere.";
+ specialeffect(EF_WATERFALL_SMALL_T2_90, AREA, playerattached());
+ close2;
+ warp "bra_in01",206,102;
+ end;
+ case 2:
+ mes "The water in the toilet looks gross.";
+ close;
+ }
+ }
+ switch(select("Use the toilet", "Ignore.")) {
+ case 1:
+ mes "- What was the second line to that spell now? -";
+ input(.@input$);
next;
- if (brazil_ghost > 6) {
- switch(select("Flush the toilet.", "Doing nothing.")) {
- case 1:
- mes "After flushing the toilet, you suddenly feel dizzy and are suddenly swept away somewhere.";
- specialeffect(EF_WATERFALL_SMALL_T2_90, AREA, playerattached());
- close2;
- warp "bra_in01",206,102;
- end;
- case 2:
- mes "The water in the toilet looks gross.";
- close;
- }
+ mes "["+strcharinfo(PC_NAME)+"]";
+ mes .@input$;
+ next;
+ .@braspell$ = "Mother the water is flooding!";
+ .@chkspell = compare(.@braspell$,.@input$);
+ if (!.@chkspell) {
+ mes "Seems like you said something wrong.";
+ close;
}
- switch(select("Use the toilet", "Ignore.")) {
+ if (brazil_ghost != 3) {
+ mes "Nothing happens.";
+ close;
+ }
+ mes "[Sobbing Voice]";
+ mes "^FF0000If the moon disappears 3 times... don't worry.....^000000";
+ next;
+ switch(select("Flush the toilet.", "Close the lid.")) {
case 1:
- mes "- What was the second line to that spell now? -";
- input .@input$;
+ mes "How many times should I flush?";
+ input(.@input, 0, 999);
next;
- mes "["+strcharinfo(PC_NAME)+"]";
- mes .@input$;
+ mes "You flush the toilet "+.@input+" times.";
next;
- .@braspell$ = "Mother the water is flooding!";
- .@chkspell = compare(.@braspell$,.@input$);
- if (!.@chkspell) {
- mes "Seems like you said something wrong.";
+ if (.@input != 3) {
+ mes "But nothing happens.";
close;
}
- else {
- if (brazil_ghost == 3) {
- mes "[Sobbing Voice]";
- mes "^FF0000If the moon disappears 3 times... don't worry.....^000000";
- next;
- switch(select("Flush the toilet.", "Close the lid.")) {
- case 1:
- mes "How many times should I flush?";
- input .@input,0,999;
- next;
- if (.@input == 3) {
- mes "You flush the toilet 3 times.";
- next;
- mes "qwaaaaaaaaa!";
- mes "kwaaaaaaaaaa!";
- mes "kwaaaaaaaaaaaaaaaaaaa!";
- next;
- mes "[Distant Sound]";
- mes "^FF0000kkkkhee- hihihihi!!!^000000";
- mes "Suddenly the sink sounds like water is flowing freely from it.";
- next;
- specialeffect(EF_VENOMDUST, AREA, playerattached());
- mes "Faint laughing can be heard off in the direction of the faucet.";
- brazil_ghost = 4;
- changequest 60351,60352;
- close;
- }
- else {
- mes "You flush the toilet "+.@input+" times.";
- next;
- mes "But nothing happens.";
- close;
- }
- case 2:
- mes "You close the lid of the toilet.";
- mes "Nothing seems to be happening.";
- close;
- }
- }
- else {
- mes "Nothing happens.";
- close;
- }
- }
+ mes "qwaaaaaaaaa!";
+ mes "kwaaaaaaaaaa!";
+ mes "kwaaaaaaaaaaaaaaaaaaa!";
+ next;
+ mes "[Distant Sound]";
+ mes "^FF0000kkkkhee- hihihihi!!!^000000";
+ mes "Suddenly the sink sounds like water is flowing freely from it.";
+ next;
+ specialeffect(EF_VENOMDUST, AREA, playerattached());
+ mes "Faint laughing can be heard off in the direction of the faucet.";
+ brazil_ghost = 4;
+ changequest 60351,60352;
+ close;
case 2:
- mes "You do nothing.";
+ mes "You close the lid of the toilet.";
+ mes "Nothing seems to be happening.";
close;
}
- }
- else {
- mes "- Looks like an ordinary toilet -";
+ case 2:
+ mes "You do nothing.";
close;
}
}
bra_in01,134,189,3 script Faucet#bra CLEAR_NPC,{
- if (brazil_ghost > 0) {
- mes "- It seems like an ordinary faucet -";
+ mes "- It seems like an ordinary faucet -";
+ if (brazil_ghost == 0) {
+ close;
+ }
+ next;
+ switch(select("Examine it.", "Ignore.")) {
+ case 1:
+ mes "- What was the next line to that spell now? -";
+ input(.@input$);
+ next;
+ mes "["+strcharinfo(PC_NAME)+"]";
+ mes .@input$;
+ next;
+ .@braspell$ = "Mother the drought has started!";
+ .@chkspell = compare(.@braspell$,.@input$);
+ if (!.@chkspell) {
+ mes "Seems like you said something wrong.";
+ close;
+ }
+ if (brazil_ghost != 4) {
+ mes "Nothing happens.";
+ close;
+ }
+ mes "[Sobbing Voice]";
+ mes "^FF0000Don't worry... the waterfall will help it....^000000";
next;
- switch(select("Examine it.", "Ignore.")) {
+ switch(select("Tap on the faucet.", "Turn on the water.")) {
case 1:
- mes "- What was the next line to that spell now? -";
- input .@input$;
+ mes "How many times will you tap the faucet?";
+ input(.@input, 0, 999);
next;
- mes "["+strcharinfo(PC_NAME)+"]";
- mes .@input$;
+ mes "You tap the faucet "+.@input+" times.";
+ next;
+ mes "But nothing happens.";
+ close;
+ case 2:
+ mes "How many times should I turn the water on?";
+ input(.@input, 0, 999);
next;
- .@braspell$ = "Mother the drought has started!";
- .@chkspell = compare(.@braspell$,.@input$);
- if (!.@chkspell) {
- mes "Seems like you said something wrong.";
+ if (.@input != 1) {
+ mes "You turn the faucet on "+.@input+" times.";
+ next;
+ mes "But nothing happens.";
close;
}
- else {
- if (brazil_ghost == 4) {
- mes "[Sobbing Voice]";
- mes "^FF0000Don't worry... the waterfall will help it....^000000";
- next;
- switch(select("Tap on the faucet.", "Turn on the water.")) {
- case 1:
- mes "How many times will you tap the faucet?";
- input .@input,0,999;
- next;
- mes "You tap the faucet "+.@input+" times.";
- next;
- mes "But nothing happens.";
- close;
- case 2:
- mes "How many times should I turn the water on?";
- input .@input,0,999;
- next;
- if (.@input == 1) {
- mes "You turn the faucet on once.";
- next;
- mes "swwwaaaaaaa-";
- next;
- mes "[Distant Sound]";
- mes "^FF0000kkkkhee- hihihihi!!!^000000";
- mes "You see the carpet move.";
- next;
- specialeffect(EF_VENOMDUST, AREA, playerattached());
- mes "Faint laughing can be heard off in the direction of the carpet.";
- brazil_ghost = 5;
- changequest 60352,60353;
- close;
- }
- else {
- mes "You turn the faucet on "+.@input+" times.";
- next;
- mes "But nothing happens.";
- close;
- }
- }
- }
- else {
- mes "Nothing happens.";
- close;
- }
- }
- case 2:
- mes "You do nothing.";
+ mes "You turn the faucet on once.";
+ next;
+ mes "swwwaaaaaaa-";
+ next;
+ mes "[Distant Sound]";
+ mes "^FF0000kkkkhee- hihihihi!!!^000000";
+ mes "You see the carpet move.";
+ next;
+ specialeffect(EF_VENOMDUST, AREA, playerattached());
+ mes "Faint laughing can be heard off in the direction of the carpet.";
+ brazil_ghost = 5;
+ changequest 60352,60353;
close;
}
- }
- else {
- mes "- It seems like an ordinary faucet -";
+ case 2:
+ mes "You do nothing.";
close;
}
}
bra_in01,138,184,3 script Carpet#bra CLEAR_NPC,{
- if (brazil_ghost > 0) {
- mes "- A carpet with an intricate pattern on it -";
+ mes "- A carpet with an intricate pattern on it -";
+ if (brazil_ghost == 0) {
+ close;
+ }
+ next;
+ switch(select("Examine it.", "Ignore.")) {
+ case 1:
+ mes "- What was the next line to that spell now? -";
+ input(.@input$);
next;
- switch(select("Examine it.", "Ignore.")) {
+ mes "["+strcharinfo(PC_NAME)+"]";
+ mes .@input$;
+ next;
+ .@braspell$ = "Mother where are my friends?";
+ .@chkspell = compare(.@braspell$,.@input$);
+ if (!.@chkspell) {
+ mes "Seems like you said something wrong.";
+ close;
+ }
+ if (brazil_ghost != 5) {
+ mes "Nothing happens.";
+ close;
+ }
+ mes "[Sobbing Voice]";
+ mes "^FF0000your 7 friends....are...sleeping... now it...'s time ....to wake them........^000000";
+ next;
+ switch(select("Jump on the carpet.", "Lie on the carpet.", "Shake the carpet.")) {
case 1:
- mes "- What was the next line to that spell now? -";
- input .@input$;
+ mes "How many times should I jump?";
+ input(.@input, 0, 999);
next;
- mes "["+strcharinfo(PC_NAME)+"]";
- mes .@input$;
+ mes "You jump on the carpet "+.@input+" times.";
+ next;
+ mes "But nothing happens.";
+ close;
+ case 2:
+ mes "How many times should I lie on the carpet?";
+ input(.@input, 0, 999);
+ next;
+ mes "You lie on the carpet "+.@input+" times.";
+ next;
+ mes "But nothing happens.";
+ close;
+ case 3:
+ mes "How many times should I shake the carpet?";
+ input(.@input, 0, 999);
next;
- .@braspell$ = "Mother where are my friends?";
- .@chkspell = compare(.@braspell$,.@input$);
- if (!.@chkspell) {
- mes "Seems like you said something wrong.";
+ mes "You shake the carpet "+.@input+" times.";
+ next;
+ if (.@input != 7) {
+ mes "But nothing happens.";
close;
}
- else {
- if (brazil_ghost == 5) {
- mes "[Sobbing Voice]";
- mes "^FF0000your 7 friends....are...sleeping... now it...'s time ....to wake them........^000000";
- next;
- switch(select("Jump on the carpet.", "Lie on the carpet.", "Shake the carpet.")) {
- case 1:
- mes "How many times should I jump?";
- input .@input,0,999;
- next;
- mes "You jump on the carpet "+.@input+" times.";
- next;
- mes "But nothing happens.";
- close;
- case 2:
- mes "How many times should I lie on the carpet?";
- input .@input,0,999;
- next;
- mes "You lie on the carpet "+.@input+" times.";
- next;
- mes "But nothing happens.";
- close;
- case 3:
- mes "How many times should I shake the carpet?";
- input .@input,0,999;
- next;
- if (.@input == 7) {
- mes "You shake the carpet 7 times.";
- next;
- mes "- fly~ fly~ fly~ fly~ fly~ fly~ fly~ -";
- next;
- mes "[Distant Sound]";
- mes "^FF0000kkkkhee- hihihihi!!!^000000";
- next;
- specialeffect(EF_VENOMDUST, AREA, playerattached());
- mes "Faint laughing can be heard off in the direction of the mirror.";
- brazil_ghost = 6;
- changequest 60353,60354;
- close;
- }
- else {
- mes "You shake the carpet "+.@input+" times.";
- next;
- mes "But nothing happens.";
- close;
- }
- }
- }
- else {
- mes "Nothing happens.";
- close;
- }
- }
- case 2:
- mes "You do nothing.";
+ mes "- fly~ fly~ fly~ fly~ fly~ fly~ fly~ -";
+ next;
+ mes "[Distant Sound]";
+ mes "^FF0000kkkkhee- hihihihi!!!^000000";
+ next;
+ specialeffect(EF_VENOMDUST, AREA, playerattached());
+ mes "Faint laughing can be heard off in the direction of the mirror.";
+ brazil_ghost = 6;
+ changequest 60353,60354;
close;
}
- }
- else {
- mes "- A carpet with an intricate pattern on it -";
+ case 2:
+ mes "You do nothing.";
close;
}
}
bra_in01,151,180,3 script Mirror#bra CLEAR_NPC,{
- if (brazil_ghost > 0) {
- mes "- You can see a clean mirror without any marks or dust -";
+ mes "- You can see a clean mirror without any marks or dust -";
+ if (brazil_ghost == 0) {
+ close;
+ }
+ next;
+ switch(select("Examine it.", "Ignore.")) {
+ case 1:
+ mes "- What was the next line to that spell now? -";
+ input(.@input$);
+ next;
+ mes "["+strcharinfo(PC_NAME)+"]";
+ mes .@input$;
+ next;
+ .@braspell$ = "Where are you mom?";
+ .@chkspell = compare(.@braspell$,.@input$);
+ if (!.@chkspell) {
+ mes "Seems like you said something wrong.";
+ close;
+ }
+ if (brazil_ghost != 6) {
+ mes "Nothing happens.";
+ close;
+ }
+ mes "[Distant Sound]";
+ mes "^FF0000kihe! hit! hit! hit! hit!^000000";
+ next;
+ mes "[Distant Sound]";
+ mes "^FF0000kihe! hit! hit! hit! hit!^000000";
+ mes "^FF0000kihe! hit! hit! hit! hit!^000000";
+ next;
+ mes "[Distant Sound]";
+ mes "Behind you...";
+ enablenpc "Ghost#bra";
+ next;
+ emotion e_omg,1;
+ mes "["+strcharinfo(PC_NAME)+"]";
+ mes "The stories about the ghost are true~!";
+ next;
+ mes "[Ghost]";
+ mes "^FF0000my baby....^000000";
+ next;
+ mes "[Ghost]";
+ mes "^FF0000I can't see.... my eye....^000000";
+ mes "^FF0000What's going on....?^000000";
next;
- switch(select("Examine it.", "Ignore.")) {
+ mes "- You take a deep breath and then look at the Ghost and notice it has an eye patch -";
+ next;
+ mes "[Ghost]";
+ mes "^FF0000My eyes are so tight... can you take this off?^000000";
+ next;
+ mes "You step carefully towards the ghost.";
+ next;
+ mes "His face was covered with dust making strange contortions with it's face.";
+ next;
+ mes "[Ghost]";
+ mes "^FF0000Come on help mom.....^000000";
+ next;
+ switch(select("Take the eye bandage off.", "Run away~.")) {
case 1:
- mes "- What was the next line to that spell now? -";
- input .@input$;
- next;
- mes "["+strcharinfo(PC_NAME)+"]";
- mes .@input$;
- next;
- .@braspell$ = "Where are you mom?";
- .@chkspell = compare(.@braspell$,.@input$);
- if (!.@chkspell) {
- mes "Seems like you said something wrong.";
- close;
+ while(1) {
+ .@cpudice = rand(1,6);
+ .@pcdice = rand(1,6);
+ if (.@cpudice != .@pcdice) {
+ emotion (57+.@cpudice),0,"Ghost#bra";
+ emotion (57+.@cpudice),1;
+ break;
+ }
+ }
+ if (.@cpudice > .@pcdice) {
+ specialeffect(EF_DEVIL, AREA, playerattached());
+ mes "[Ghost]";
+ mes "^FF0000Go away!^000000";
+ brazil_ghost = 1;
+ changequest 60354,2208;
+ percentheal -50,-50;
+ close2;
+ disablenpc "Ghost#bra";
+ warp "bra_in01",12,183;
+ end;
}
else {
- if (brazil_ghost == 6) {
- mes "[Distant Sound]";
- mes "^FF0000kihe! hit! hit! hit! hit!^000000";
- next;
- mes "[Distant Sound]";
- mes "^FF0000kihe! hit! hit! hit! hit!^000000";
- mes "^FF0000kihe! hit! hit! hit! hit!^000000";
- next;
- mes "[Distant Sound]";
- mes "Behind you...";
- enablenpc "Ghost#bra";
- next;
- emotion e_omg,1;
- mes "["+strcharinfo(PC_NAME)+"]";
- mes "The stories about the ghost are true~!";
- next;
- mes "[Ghost]";
- mes "^FF0000my baby....^000000";
- next;
- mes "[Ghost]";
- mes "^FF0000I can't see.... my eye....^000000";
- mes "^FF0000What's going on....?^000000";
- next;
- mes "- You take a deep breath and then look at the Ghost and notice it has an eye patch -";
- next;
- mes "[Ghost]";
- mes "^FF0000My eyes are so tight... can you take this off?^000000";
- next;
- mes "You step carefully towards the ghost.";
- next;
- mes "His face was covered with dust making strange contortions with it's face.";
- next;
- mes "[Ghost]";
- mes "^FF0000Come on help mom.....^000000";
- next;
- switch(select("Take the eye bandage off.", "Run away~.")) {
- case 1:
- while(1) {
- .@cpudice = rand(1,6);
- .@pcdice = rand(1,6);
- if (.@cpudice != .@pcdice) {
- emotion (57+.@cpudice),0,"Ghost#bra";
- emotion (57+.@cpudice),1;
- break;
- }
- }
- if (.@cpudice > .@pcdice) {
- specialeffect(EF_DEVIL, AREA, playerattached());
- mes "[Ghost]";
- mes "^FF0000Go away!^000000";
- brazil_ghost = 1;
- changequest 60354,2208;
- percentheal -50,-50;
- close2;
- disablenpc "Ghost#bra";
- warp "bra_in01",12,183;
- end;
- }
- else {
- emotion e_bzz,1;
- mes "[Ghost]";
- mes "^FF0000Ahh!^000000";
- mes "The Ghost disappeared into the toilet.";
- brazil_ghost = 7;
- changequest 60354,60355;
- close2;
- disablenpc "Ghost#bra";
- warp "bra_in01",206,100;
- end;
- }
- case 2:
- mes "You run away from the ghost.";
- close2;
- brazil_ghost = 1;
- changequest 60354,2208;
- warp "bra_in01",12,183;
- disablenpc "Ghost#bra";
- end;
- }
- close;
- }
- else {
- mes "Nothing happens.";
- close;
- }
+ emotion e_bzz,1;
+ mes "[Ghost]";
+ mes "^FF0000Ahh!^000000";
+ mes "The Ghost disappeared into the toilet.";
+ brazil_ghost = 7;
+ changequest 60354,60355;
+ close2;
+ disablenpc "Ghost#bra";
+ warp "bra_in01",206,100;
+ end;
}
case 2:
- mes "You do nothing.";
- close;
+ mes "You run away from the ghost.";
+ close2;
+ brazil_ghost = 1;
+ changequest 60354,2208;
+ warp "bra_in01",12,183;
+ disablenpc "Ghost#bra";
+ end;
}
- }
- else {
- mes "- You can see a clean mirror without any marks or dust -";
+ close;
+ case 2:
+ mes "You do nothing.";
close;
}
}
diff --git a/npc/re/quests/quests_dewata.txt b/npc/re/quests/quests_dewata.txt
index 1b57e4397..638938d53 100644
--- a/npc/re/quests/quests_dewata.txt
+++ b/npc/re/quests/quests_dewata.txt
@@ -1706,7 +1706,7 @@ dew_fild01,127,240,4 script Gatti#weapon 2_M_OLDBLSMITH,{
next;
mes "- He seems to be asking for the Island name. -";
next;
- input .@island_name$;
+ input(.@island_name$);
next;
mes "["+strcharinfo(PC_NAME)+"]";
mes "It's called "+ .@island_name$ +". What's wrong?";
diff --git a/npc/re/quests/quests_dicastes.txt b/npc/re/quests/quests_dicastes.txt
index 817b4780d..2b10bc735 100644
--- a/npc/re/quests/quests_dicastes.txt
+++ b/npc/re/quests/quests_dicastes.txt
@@ -131,7 +131,7 @@ dic_dun01,266,113,5 script Curious Sapha#ep13_3_ 4_MAN_BENKUNI,{
mes "I'll give you a deal and sell it by 500 Zeny each. But, try not to carry it with you into Scaraba Hall.";
mes "How many do you want? You can buy up to 100.";
next;
- input .@input;
+ input(.@input);
.@deal = 500 * .@input;
if (.@deal == 0) {
mes "[Curious Sapha]";
@@ -164,7 +164,7 @@ dic_dun01,266,113,5 script Curious Sapha#ep13_3_ 4_MAN_BENKUNI,{
mes "[Curious Sapha]";
mes "Do you have any useful information?";
mes "Please let me know!";
- input .@str$;
+ input(.@str$);
next;
mes "[Curious Sapha]";
mes "It says ^0000FF"+.@str$+"^000000.";
@@ -4588,7 +4588,7 @@ dic_fild01,231,174,5 script BK#ep133_18 4_M_MERCAT2,{
mes "- BK of the Cat Merchant group is being difficult.";
mes "What did Shay tell you to do?-";
next;
- input .@inputstr$;
+ input(.@inputstr$);
if (.@inputstr$ == "Shay's special drink will be delivered" || .@inputstr$ == "Shay's special drink will be delivered.") {
mes "[" + strcharinfo(PC_NAME) + "]";
mes "Hmm. If you don't cooperate,";
@@ -7517,7 +7517,7 @@ moc_para01,44,19,3 script Cat Hand Agent#gekk 4_M_MERCAT2,{
mes "If you really mean it, then sign here.";
mes "I'm collecting signs to get on Gyareuk's good side... never mind. I will let them know you are my sponsor!";
next;
- input .@inputstr$;
+ input(.@inputstr$);
mes "[Agent Geck]";
mes "" + strcharinfo(PC_NAME) + "? Human names are strange to me.";
next;
diff --git a/npc/re/quests/quests_eclage.txt b/npc/re/quests/quests_eclage.txt
index ac6717529..10515dee3 100644
--- a/npc/re/quests/quests_eclage.txt
+++ b/npc/re/quests/quests_eclage.txt
@@ -140,13 +140,13 @@ ecl_fild01,94,322,5 script Security Guard#ep14_2 4_M_FAIRYSOLDIER,{
mes "Please fill out your name, occupation, and level here.";
next;
mes "Write your name.";
- input .@inputstr$;
+ input(.@inputstr$);
next;
mes "Write your occupation.";
- input .@inputstr$;
+ input(.@inputstr$);
next;
mes "Write your level.";
- input .@inputstr$;
+ input(.@inputstr$);
next;
mes "[Security Guard]";
mes "If you completed your forms, please submit them to the administrator over there.";
@@ -624,7 +624,7 @@ eclage,102,32,4 script Fairy Carpenter#ep14_2 4_M_FAIRYKID2,{
next;
mes "[Fairy Carpenter]";
mes "Please write the number of pieces necessary for each length. If no pieces for that length are necessary, please write 0.";
- input .@inputstr$;
+ input(.@inputstr$);
next;
if (.@inputstr$ != "002") {
mes "[Fairy Carpenter]";
@@ -1467,7 +1467,7 @@ eclage,191,200,4 script Yube#ep14_2 4_M_FAIRYKID5,{
emotion e_what;
cutin "war_y3",2;
next;
- input .@inputnum;
+ input(.@inputnum);
if (.@inputnum != 128) {
mes "[Yube]";
mes "Hmm~ I don't think so.";
@@ -1591,7 +1591,7 @@ eclage,191,200,4 script Yube#ep14_2 4_M_FAIRYKID5,{
mes "I can make as many as 128. How many do you need?";
cutin "war_y4",2;
next;
- input .@input;
+ input(.@input);
if (.@input < 1 || .@input > 128) {
mes "[Yube]";
mes "You aren't going to make them?";
@@ -10100,19 +10100,17 @@ ecl_in04,109,215,3 script Hiel#pa0829 4_M_FAIRYSCHOLAR,{
mes "[Hiel]";
mes "Oh~ Someone referred you to me? Who was it? You better make sense, or I'll be sure to kick you out.";
next;
- input .@inputstr$;
- if (.@inputstr$ == "Clever"){
- mes "[" + strcharinfo(PC_NAME) + "]";
- mes .@inputstr$ + " referred me(" + strcharinfo(PC_NAME) + ") to you.";
- next;
- }
- else {
+ input(.@inputstr$);
+ if (.@inputstr$ != "Clever") {
mes "[Hiel]";
mes "I don't know that person! Aren't you suspicious!";
close2;
warp "eclage",152,91;
end;
}
+ mes "[" + strcharinfo(PC_NAME) + "]";
+ mes .@inputstr$ + " referred me(" + strcharinfo(PC_NAME) + ") to you.";
+ next;
mes "[Hiel]";
mes "Oh really? Give me a minute. I'm going to wrap up what I am doing and come back.";
ep14_2_etran = 11;
@@ -10923,13 +10921,8 @@ ecl_in02,133,115,7 script Prison Guard#pa0829 4_M_FAIRYSOLDIER2,{
mes "[Prison Guard]";
mes "I see, I don't think I ever saw you on our visitor's list. Who are you visiting?";
next;
- input .@inputstr$;
- if (.@inputstr$ == "Clever") {
- mes "[Prison Guard]";
- mes "^000099" + .@inputstr$ + "^000000? ... That means...";
- next;
- }
- else {
+ input(.@inputstr$);
+ if (.@inputstr$ != "Clever") {
mes "[Prison Guard]";
mes "Hmm? You want to visit ^000099" + .@inputstr$ + "^000000? I don't see that visitation on the list. Are you sure you made a formal request?";
next;
@@ -10939,6 +10932,9 @@ ecl_in02,133,115,7 script Prison Guard#pa0829 4_M_FAIRYSOLDIER2,{
}
close;
}
+ mes "[Prison Guard]";
+ mes "^000099" + .@inputstr$ + "^000000? ... That means...";
+ next;
mes "[Clever]";
mes "Huh? I've got a visitor? Yahoo! It's a visit! Yay~";
next;
@@ -11753,12 +11749,12 @@ ecl_in04,108,215,4 script Supreme Elec rope#pa0829 HIDDEN_NPC,{
}
sec_in02,85,187,4 script #pa0829Reactor11 4_M_FAIRYKID,3,3,{
- input .@input;
+ input(.@input);
if (.@input == 1854) {
mes "[????]";
mes "Baby, you don't know why I'm upset, do you?";
mes "Present" + ep14_2_etran + "Dog";
- input .@input;
+ input(.@input, 0);
ep14_2_etran = .@input;
if (ep14_2_mylord < 7) {
ep14_2_mylord = 7;
@@ -13748,7 +13744,7 @@ sec_in02,16,11,5 script New Oz Image#1 4_M_MINSTREL1,1,1,{
//== Memory of Professor Worm ==============================
sec_in02,10,17,4 script Professor Aide#worm 4_BULL,{
- input .@input;
+ input(.@input);
if (.@input != 1917) {
mes "EEK!";
close;
@@ -19129,7 +19125,7 @@ que_avan01,18,38,0 script Desk#tl01 CLEAR_NPC,{
mes "In the middle, there is a small numerical panel. A 5-digit number can be inputted.";
next;
if (select("Input a number.", "Look at other parts of the desk.")==1) {
- input .@input;
+ input(.@input);
if (.@input == 31425) {
mes "As soon as the number is inputted, a click is heard.";
mes "The hinged device can be opened.";
diff --git a/npc/re/quests/quests_malangdo.txt b/npc/re/quests/quests_malangdo.txt
index 786aeccb1..f66d6ab76 100644
--- a/npc/re/quests/quests_malangdo.txt
+++ b/npc/re/quests/quests_malangdo.txt
@@ -185,12 +185,13 @@ mal_in02,134,31,5 script Investment Cat Helper 4_WHITETIGER,{
mes "Isn't it lovely?";
mes "How many will you invest in? Enter 0 to cancel.";
next;
- input .@input;
- if (.@input == 0) {
+ input(.@input);
+ if (.@input <= 0) {
mes "[Investment Cat Helper]";
mes "Please invest next time~";
close;
- } else if (.@input > 10) {
+ }
+ if (.@input > 10) {
mes "[Investment Cat Helper]";
mes "You can get a maximum of 10 accounts~";
close;
@@ -299,29 +300,29 @@ mal_in02,134,31,5 script Investment Cat Helper 4_WHITETIGER,{
mes "[Investment Cat Helper]";
mes "The can donation can range from a minimum of 20 to a maximum of 10,000.";
next;
- input .@input;
+ input(.@input);
if (.@input < 20 || .@input > 10000) {
mes "[Investment Cat Helper]";
mes "The can donation can range from a minimum of 20 to a maximum of 10,000.";
close;
- } else if (countitem(Malang_Sp_Can) < .@input) { // Malang_Sp_Can
+ }
+ if (countitem(Malang_Sp_Can) < .@input) { // Malang_Sp_Can
mes "[Investment Cat Helper]";
mes "Hmm? You don't have enough cans.";
close;
- } else {
- delitem Malang_Sp_Can,.@input;
- mes "[Investment Cat Helper]";
- mes "Ohh! Thank you~";
- next;
- mes "[Investment Cat Helper]";
- mes "Dear "+strcharinfo(PC_NAME)+" ~";
- mes "I have only Increase AGI";
- mes "and Blessing to give you.";
- mes "Thank you.";
- npcskill "AL_INCAGI",10,0,0;
- npcskill "AL_BLESSING",10,0,0;
- close;
}
+ delitem Malang_Sp_Can,.@input;
+ mes "[Investment Cat Helper]";
+ mes "Ohh! Thank you~";
+ next;
+ mes "[Investment Cat Helper]";
+ mes "Dear "+strcharinfo(PC_NAME)+" ~";
+ mes "I have only Increase AGI";
+ mes "and Blessing to give you.";
+ mes "Thank you.";
+ npcskill "AL_INCAGI",10,0,0;
+ npcskill "AL_BLESSING",10,0,0;
+ close;
}
}
@@ -5556,7 +5557,7 @@ L_Viewpoint:
break;
}
next;
- input .@input;
+ input(.@input);
if (.@input == .@nori_c) {
mes "The card slides out with a sound after entering the number.";
mes "^4d4dffYou have passed the "+strnpcinfo(NPC_NAME_VISIBLE)+"! Run to the next destination!^000000";
@@ -7755,7 +7756,7 @@ malangdo,161,197,4 script Eryu#gamer 4_CAT,{
next;
mes "What do you want to say?";
next;
- input .@inputstr$;
+ input(.@inputstr$);
if (.@inputstr$ == "Come back") {
erasequest 5083;
setquest 5084;
@@ -7984,7 +7985,7 @@ malangdo,230,197,4 script Stew#gamer 4_CAT_3COLOR,{
next;
mes "What do you want to say?";
next;
- input .@inputstr$;
+ input(.@inputstr$);
if (.@inputstr$ == "Come back") {
erasequest 5085;
setquest 5086;
@@ -8166,7 +8167,7 @@ malangdo,244,144,4 script Ketchup#gamer 4_CAT_SAILOR3,{
next;
mes "What do you want to say?";
next;
- input .@inputstr$;
+ input(.@inputstr$);
if (.@inputstr$ == "Come back") {
erasequest 5087;
setquest 5088;
@@ -8433,7 +8434,7 @@ malangdo,181,119,7 script Eff#gamer 4_CAT_ADV2,{
next;
mes "What do you want to say?";
next;
- input .@inputstr$;
+ input(.@inputstr$);
if (.@inputstr$ == "Come back") {
erasequest 5089;
setquest 5090;
diff --git a/npc/re/quests/quests_malaya.txt b/npc/re/quests/quests_malaya.txt
index 091d8527a..403818823 100644
--- a/npc/re/quests/quests_malaya.txt
+++ b/npc/re/quests/quests_malaya.txt
@@ -2088,13 +2088,14 @@ malaya,119,217,3 script Blacksmith Pandoi 4_M_DEWBOY,{
mes "How many Silver Crosses do you need?";
mes "I can make up to 50 at a time.";
next;
- input .@amount;
- if (.@amount == 0) {
+ input(.@amount);
+ if (.@amount <= 0) {
mes "[Pandoi]";
mes "Don't need Silver Crosses?";
mes "Well, I can take a rest then. Ha ha ha ha~";
close;
- } else if (.@amount > 50) {
+ }
+ if (.@amount > 50) {
mes "[Pandoi]";
mes "A maximum of 50 at a time!";
close;
@@ -8317,7 +8318,7 @@ ma_fild01,1,1,4 script Pintados Manager#pin 4_F_KHELLISIA,{
mes "295 - 343 -> Day 7";
mes "Global 1 = 1 hr.";
next;
- input .@input;
+ input(.@input);
if (.@input < 0 || .@input > 344)
close;
$malaya_pintados_00 = .@input;
@@ -8326,7 +8327,7 @@ ma_fild01,1,1,4 script Pintados Manager#pin 4_F_KHELLISIA,{
mes "Adjust the accumulated value for the Lesser Agimat.";
mes "Values can be adjusted between 0 to 1000.";
next;
- input .@input;
+ input(.@input);
if (.@input < 0 || .@input > 1000)
close;
$malaya_pintados_01 = .@input;
@@ -8335,7 +8336,7 @@ ma_fild01,1,1,4 script Pintados Manager#pin 4_F_KHELLISIA,{
mes "Adjust the accumulated value of the Silver Cross.";
mes "Values can be adjusted between 0 to 1000.";
next;
- input .@input;
+ input(.@input);
if (.@input < 0 || .@input > 1000)
close;
$malaya_pintados_02 = .@input;
@@ -8344,7 +8345,7 @@ ma_fild01,1,1,4 script Pintados Manager#pin 4_F_KHELLISIA,{
mes "Adjust the accumulated value for the Dyestuff.";
mes "Values can be adjusted between 0 to 300.";
next;
- input .@input;
+ input(.@input);
if (.@input < 0 || .@input > 300)
close;
$malaya_pintados_03 = .@input;
@@ -8577,7 +8578,7 @@ ma_fild01,179,260,2 script Festival Helper Boy#pin 4_M_BARYO_BOY,{
mes "[Isco]";
mes "He he... I'm slow with numbers. I get lost when it's over 50. How many will you give me?";
next;
- input .@amount;
+ input(.@amount);
if (.@amount < 1 || .@amount > 50) {
mes "[Isco]";
mes "Sigh~ I'm lost! I can't count if the numbers are weird.";
@@ -8609,7 +8610,7 @@ ma_fild01,179,260,2 script Festival Helper Boy#pin 4_M_BARYO_BOY,{
mes "[Isco]";
mes "He he... I'm slow with numbers. I get lost when it's over 50. How many will you give me?";
next;
- input .@amount;
+ input(.@amount);
if (.@amount < 1 || .@amount > 50) {
mes "[Isco]";
mes "Sigh~ I told you I'm not good with numbers.";
diff --git a/npc/re/quests/quests_mora.txt b/npc/re/quests/quests_mora.txt
index 34293d200..46fdcbddd 100644
--- a/npc/re/quests/quests_mora.txt
+++ b/npc/re/quests/quests_mora.txt
@@ -3618,7 +3618,7 @@ mora,114,79,0 script Black Shadow#ep14_muk CLEAR_NPC,{
mes "You... I saw. Feeling. I saw. Feeling.";
mes "You... Name?";
next;
- input .@inputstr$;
+ input(.@inputstr$);
mes "[Fishee]";
mes .@inputstr$+" do.";
mes "No know. No remember..";
@@ -3756,7 +3756,7 @@ mora,114,79,0 script Black Shadow#ep14_muk CLEAR_NPC,{
} else if (questprogress(5017)) {
mes "How will you bully the creature?";
next;
- input .@inputstr$;
+ input(.@inputstr$);
mes "You do ^0000FF"+.@inputstr$+"^000000 to bully the unidentified creature.";
next;
setquest 5029;
@@ -4311,7 +4311,7 @@ mora,118,86,0 duplicate(???#mora) ???#ep14_muk05 CLEAR_NPC,2,2
next;
mes "What was the name of the unidentified creature?";
next;
- input .@inputstr$;
+ input(.@inputstr$);
if (.@inputstr$ != "Fishee") {
mes "[???]";
mes "No Family. "+.@inputstr$+" No.";
diff --git a/npc/re/woe-fe/invest_main.txt b/npc/re/woe-fe/invest_main.txt
index 6a65a9c78..e42959aa7 100644
--- a/npc/re/woe-fe/invest_main.txt
+++ b/npc/re/woe-fe/invest_main.txt
@@ -151,18 +151,19 @@ function script F_Invest_Abyss {
mes "Please choose between 1 to 200.";
mes "Please enter 0 to cancel.";
next;
- input .@units;
+ input(.@units);
if (.@units < 0 || .@units > 200) {
mes getarg(1);
mes "You've exceeded the amount per investment.";
mes "Please try again.";
close;
- } else if (.@units == 0) {
+ }
+ if (.@units == 0) {
mes getarg(1);
mes "Canceled.";
close;
- } else
- break;
+ }
+ break;
case 5:
mes getarg(1);
mes "Canceled.";
@@ -199,18 +200,19 @@ function script F_Invest_Abyss {
mes "Please choose between 1 to 20.";
mes "Please enter 0 to cancel.";
next;
- input .@tickets;
+ input(.@tickets);
if (.@tickets < 0 || .@tickets > 20) {
mes getarg(1);
mes "You've exceeded the amount per investment.";
mes "Please try again.";
close;
- } else if (.@tickets == 0) {
+ }
+ if (.@tickets == 0) {
mes getarg(1);
mes "Canceled.";
close;
- } else
- break;
+ }
+ break;
case 4:
mes getarg(1);
mes "Canceled.";
diff --git a/sql-files/item_db.sql b/sql-files/item_db.sql
index 3ebd77ed3..cf30566dc 100644
--- a/sql-files/item_db.sql
+++ b/sql-files/item_db.sql
@@ -1035,9 +1035,11 @@ REPLACE INTO `item_db` VALUES ('1827','Krieger_Knuckle2','Glorious Fist','4','12
REPLACE INTO `item_db` VALUES ('1828','Monk_Knuckle','Monk Knuckle','4','12','20','10','0','150','0','0','1','0','33024','63','2','2','4','0',NULL,'0','0','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus bInt,2; bonus2 bSkillAtk,MO_FINGEROFFENSIVE,25;','','');
REPLACE INTO `item_db` VALUES ('1829','Fist_C','Fist','4','12','0','0','0','150','0','0','1','0','33024','63','2','2','3','1',NULL,'0','0','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddSize,Size_Small,40; bonus2 bAddSize,Size_Medium,40; bonus2 bAddSize,Size_Large,40;','','');
REPLACE INTO `item_db` VALUES ('1846','Combo_Battle_Glove_IL','Combo_Battle_Glove_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1847','Iron_Nail_K','Iron_Nail_K','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('1848','Rebeginer_SR_Nuckle','Rebeginer_SR_Nuckle','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('1862','Burning_Knuckle_OS','Burning_Knuckle_OS','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('1864','Evt_Iron_Nail_K','Evt_Iron_Nail_K','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1867','Ein_1HKNUCK','Ein_1HKNUCK','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('1901','Violin','Violin','4','13','4000','2000','700','50','0','0','1','3','524288','63','1','2','1','2',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('1902','Violin_','Violin','4','13','4000','2000','700','50','0','0','1','4','524288','63','1','2','1','2',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('1903','Mandolin','Mandolin','4','13','18000','9000','400','90','0','0','1','2','524288','63','1','2','2','14',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -1110,8 +1112,10 @@ REPLACE INTO `item_db` VALUES ('2005','Dea_Staff','Dea Staff','4','23','20','10'
REPLACE INTO `item_db` VALUES ('2006','G_Staff_Of_Light','Staff Of Light','4','23','20','10','1900','80','0','0','1','0','8454660','63','2','34','4','60',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','//bonus bMatk,150; bonus bAtkEle,Ele_Holy; bonus bInt,6;','','');
REPLACE INTO `item_db` VALUES ('2039','Wizardy_Staff_IL','Wizardy_Staff_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('2046','Rebeginer_WL_Staff','Rebeginer_WL_Staff','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('2048','Iron_Staff','Iron_Staff','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('2051','Survival_Staff_IL','Survival_Staff_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('2054','Evt_Iron_Staff','Evt_Iron_Staff','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('2058','Ein_BHSTAFF','Ein_BHSTAFF','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('2101','Guard','Guard','5','0','500','250','300','0','0','3','0','0','18446744073709551615','63','2','32','0','0',NULL,'1','0','1','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('2102','Guard_','Guard','5','0','500','250','300','0','0','3','0','1','18446744073709551615','63','2','32','0','0',NULL,'1','0','1','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('2103','Buckler','Buckler','5','0','14000','7000','600','0','0','4','0','0','972274','63','2','32','0','0',NULL,'1','0','2','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -4213,6 +4217,11 @@ REPLACE INTO `item_db` VALUES ('9054','Nightmare_Terror_Egg','Nightmare Terror E
REPLACE INTO `item_db` VALUES ('9055','Succubus_Egg','Succubus Egg','7','0','20','10','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('9056','Imp_Egg','Imp Egg','7','0','20','10','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('9058','Snow_Rabbit_Egg','Christmas Snow Rabbit Egg','7','0','20','10','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','467',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('9514','Ein_Ddbox','Ein_Ddbox','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('9523','Metal_Rifine_Ticket','Metal_Rifine_Ticket','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('9529','Ein_Ddbox2','Ein_Ddbox2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('9550','Gemstone_Of_Time','Gemstone_Of_Time','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('9551','Time_Unseal_Key','Time_Unseal_Key','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('10001','Skull_Helm','Skull Helm','8','0','20','10','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('10002','Monster_Oxygen_Mask','Monster Oxygen Mask','8','0','20','10','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('10003','Transparent_Headgear','Transparent Head Protector','8','0','20','10','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -4647,9 +4656,9 @@ REPLACE INTO `item_db` VALUES ('12283','Internet_Cafe2','Internet Cafe2','2','0'
REPLACE INTO `item_db` VALUES ('12284','Internet_Cafe3','Internet Cafe3','2','0','0','0','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','sc_start SC_FOOD_INT, 5400000, 8; sc_start SC_FOOD_VIT, 5400000, 4; sc_start SC_FOOD_DEX, 5400000, 6; sc_start SC_PLUSMAGICPOWER, 5400000, 40;','','');
REPLACE INTO `item_db` VALUES ('12285','Internet_Cafe4','Internet Cafe4','2','0','0','0','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','sc_start SC_FOOD_DEX, 5400000, 8; sc_start SC_FOOD_LUK, 5400000, 4; sc_start SC_FOOD_AGI, 5400000, 6; sc_start SC_PLUSATTACKPOWER, 5400000, 24; sc_start SC_PLUSMAGICPOWER, 5400000, 24;','','');
REPLACE INTO `item_db` VALUES ('12286','Masquerade_Ball_Box2','Masquerade Ball Box2','2','0','0','0','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','getrandgroupitem 12286,1;','','');
-REPLACE INTO `item_db` VALUES ('12287','Love_Angel','Love Angel Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont 1;','','');
-REPLACE INTO `item_db` VALUES ('12288','Squirrel','Squirrel Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont 2;','','');
-REPLACE INTO `item_db` VALUES ('12289','Gogo','Gogo Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont 3;','','');
+REPLACE INTO `item_db` VALUES ('12287','Love_Angel','Love Angel Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont(1);','','');
+REPLACE INTO `item_db` VALUES ('12288','Squirrel','Squirrel Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont(2);','','');
+REPLACE INTO `item_db` VALUES ('12289','Gogo','Gogo Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont(3);','','');
REPLACE INTO `item_db` VALUES ('12290','Mysterious_Can','Mysterious Can Magic Powder','2','0','10','5','100','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','1','0','0',NULL,'1',NULL,'0',NULL,'0','percentheal 5,0; skilleffect AL_BLESSING,0; sc_start SC_BLESSING,120000,5;','','');
REPLACE INTO `item_db` VALUES ('12291','Mysterious_PET_Bottle','Mysterious PET Bottle','2','0','10','5','100','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','1','0','0',NULL,'1',NULL,'0',NULL,'0','percentheal 5,0; skilleffect AL_INCAGI,0; sc_start SC_INC_AGI,120000,5;','','');
REPLACE INTO `item_db` VALUES ('12292','Unripe_Fruit','Unripe Fruit','0','0','500','250','200','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','1','0','0',NULL,'0',NULL,'0',NULL,'0','percentheal 20,0;','','');
@@ -4664,12 +4673,12 @@ REPLACE INTO `item_db` VALUES ('12300','Wild_Rose_Scroll','Wild Rose Contract','
REPLACE INTO `item_db` VALUES ('12301','Doppelganger_Scroll','Doppelganger Contract','2','0','0','0','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','mercenary_create M_DOPPELGANGER, 1800000;','','');
REPLACE INTO `item_db` VALUES ('12302','Ygnizem_Scroll','Egnigem Cenia Contract','2','0','0','0','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','mercenary_create M_YGNIZEM, 1800000;','','');
REPLACE INTO `item_db` VALUES ('12303','Water_Of_Blessing','Blessing Of Water','2','0','0','0','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('12304','Picture_Diary','Diary Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont 4;','','');
-REPLACE INTO `item_db` VALUES ('12305','Mini_Heart','Mini Heart Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont 5;','','');
-REPLACE INTO `item_db` VALUES ('12306','Newcomer','Freshman Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont 6;','','');
-REPLACE INTO `item_db` VALUES ('12307','Kid','Kid Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont 7;','','');
-REPLACE INTO `item_db` VALUES ('12308','Magic_Castle','Magic Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont 8;','','');
-REPLACE INTO `item_db` VALUES ('12309','Bulging_Head','JJangu Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont 9;','','');
+REPLACE INTO `item_db` VALUES ('12304','Picture_Diary','Diary Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont(4);','','');
+REPLACE INTO `item_db` VALUES ('12305','Mini_Heart','Mini Heart Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont(5);','','');
+REPLACE INTO `item_db` VALUES ('12306','Newcomer','Freshman Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont(6);','','');
+REPLACE INTO `item_db` VALUES ('12307','Kid','Kid Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont(7);','','');
+REPLACE INTO `item_db` VALUES ('12308','Magic_Castle','Magic Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont(8);','','');
+REPLACE INTO `item_db` VALUES ('12309','Bulging_Head','JJangu Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont(9);','','');
REPLACE INTO `item_db` VALUES ('12310','Spray_Of_Flowers','Spray Of Flowers','2','0','0','0','50','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','467',NULL,'1',NULL,'0',NULL,'0','sc_start SC_FOOD_BASICAVOIDANCE,600000,10;','','');
REPLACE INTO `item_db` VALUES ('12311','Large_Spray_Of_Flowers','Huge Spray Of Flowers','11','0','0','0','100','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','467',NULL,'1',NULL,'0',NULL,'0','itemskill ALL_PARTYFLEE,1;','','');
REPLACE INTO `item_db` VALUES ('12312','Thick_Manual50','Thick Battle Manual','2','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','sc_start SC_CASH_PLUSEXP,3600000,50;','','');
@@ -5277,6 +5286,8 @@ REPLACE INTO `item_db` VALUES ('13309','Huuma_Giant_Wheel_C','Huuma Giant Wheel
REPLACE INTO `item_db` VALUES ('13337','Huuma_Fluttering_Snow_IL','Huuma_Fluttering_Snow_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('13338','Huuma_Bird_Wing_IL','Huuma_Bird_Wing_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('13341','Rebeginer_KO_Humma','Rebeginer_KO_Humma','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('13345','Humma_Clear','Humma_Clear','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('13346','Ein_BHHuuma','Ein_BHHuuma','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('13400','Cutlas_','Cutlus','4','2','20','10','900','150','0','0','1','1','414946','63','2','2','4','40',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','skill SM_BASH,5; bonus bStr,2; bonus bDef,1;','','');
REPLACE INTO `item_db` VALUES ('13401','Excalibur_C','Excalibur','4','2','1','0','0','199','0','0','1','0','414946','63','2','2','4','1',NULL,'0','0','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus bInt,10; bonus bLuk,10; bonus bAtkEle,Ele_Holy;','','');
REPLACE INTO `item_db` VALUES ('13402','Cutlas_C','Cutlus','4','2','2','1','0','185','0','0','1','0','414946','63','2','2','4','0',NULL,'0','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','skill SM_BASH,5; bonus bStr,2; bonus bDef,1;','','');
@@ -5302,6 +5313,7 @@ REPLACE INTO `item_db` VALUES ('13421','Ruber','Ruber','4','2','20','10','1500',
REPLACE INTO `item_db` VALUES ('13422','Flamberge_C','Flamberge','4','2','0','0','0','185','0','0','1','0','16512','63','2','2','3','1',NULL,'0','0','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableWeapon,0;','','');
REPLACE INTO `item_db` VALUES ('13469','Immaterial_Sword_IL','Immaterial_Sword_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('13483','Rebeginer_GN_Sword','Rebeginer_GN_Sword','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('13485','Sword_Of_Bluefire','Sword_Of_Bluefire','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('13493','Cannon_Rapier_OS','Cannon_Rapier_OS','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('13495','Evt_Bluefire_Sword','Evt_Bluefire_Sword','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('13500','Insurance60_Package','Life Insurrance Box','18','0','20','10','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','getitem 14500,10;','','');
@@ -6216,13 +6228,28 @@ REPLACE INTO `item_db` VALUES ('15212','YSF01_Plate','YSF01_Plate','3','0','0','
REPLACE INTO `item_db` VALUES ('15246','True_Hunting_Mail','True_Hunting_Mail','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('15247','R_Hunting_Mail','R_Hunting_Mail','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('15250','Rebeginer_Suits','Rebeginer_Suits','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('15278','Overwhelm_Str_Armor','Overwhelm_Str_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('15279','Overwhelm_Int_Armor','Overwhelm_Int_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('15280','S_CriticalHit_Armor','S_CriticalHit_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('15346','Overwhelm_Luk_Armor','Overwhelm_Luk_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('15347','Overwhelm_Vit_Armor','Overwhelm_Vit_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('15348','Goibne_Armor_IL','Goibne_Armor_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('15353','Overwhelm_Agi_Armor','Overwhelm_Agi_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('15354','Overwhelm_Dex_Armor','Overwhelm_Dex_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('15376','Illusion_Armor_A','Illusion_Armor_A','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('15377','Illusion_Armor_B','Illusion_Armor_B','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('15378','Lava_Leather_Armor','Lava_Leather_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('15379','Lava_Leather_Suits','Lava_Leather_Suits','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('15380','Lava_Leather_Robe','Lava_Leather_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('15383','Time_Overload_Robe','Time_Overload_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('15388','Schmidt_Suits','Schmidt_Suits','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('15389','Schmidt_Manteau','Schmidt_Manteau','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('15391','DragonA_Red','DragonA_Red','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('15392','DragonA_Green','DragonA_Green','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('15393','DragonA_Gold','DragonA_Gold','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('15394','DragonA_Purple','DragonA_Purple','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('15395','DragonA_Blue','DragonA_Blue','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('15396','DragonA_Silver','DragonA_Silver','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('16000','Erde','Erde','4','8','20','10','500','130','0','0','1','2','312754','2','2','2','4','50',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSkillAtk,AM_ACIDTERROR,20; bonus2 bSkillAtk,AM_DEMONSTRATION,20; bonus bMaxSP,50; bonus bHealPower,10;','','');
REPLACE INTO `item_db` VALUES ('16001','Red_Square_Bag','Red Square Bag','4','8','20','10','500','130','0','0','1','2','312754','2','2','2','3','50',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxHP,200; bonus2 bSkillAtk,AM_ACIDTERROR,20; bonus2 bSkillAtk,AM_DEMONSTRATION,20; bonus2 bAddMonsterDropItem,501,50; bonus2 bAddMonsterDropItem,502,20; bonus2 bAddMonsterDropItem,503,20; bonus2 bAddMonsterDropItem,504,20; bonus2 bAddMonsterDropItem,505,10; if(readparam(bStr)>=95) bonus2 bAddEff,Eff_Stun,500;','','');
REPLACE INTO `item_db` VALUES ('16002','Stunner_C','Stunner','4','8','0','0','0','175','0','0','1','0','33040','63','2','2','3','1',NULL,'0','0','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddEff,Eff_Stun,1000; bonus2 bAddSize,Size_Small,40; bonus2 bAddSize,Size_Medium,40; bonus2 bAddSize,Size_Large,40;','','');
@@ -6235,6 +6262,7 @@ REPLACE INTO `item_db` VALUES ('16075','Rebeginer_NC_Mace','Rebeginer_NC_Mace','
REPLACE INTO `item_db` VALUES ('16076','Rebeginer_N2_Mace','Rebeginer_N2_Mace','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('16088','Saphir_Hall_OS','Saphir_Hall_OS','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('16089','Ultio_Spes_OS','Ultio_Spes_OS','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('16099','Ein_1HHAMMER','Ein_1HHAMMER','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('16134','King_Frog_Hat_Box','Frog King Hat Box','18','0','20','10','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','getitem 5528,1;','','');
REPLACE INTO `item_db` VALUES ('16135','Evils_Bone_Hat_Box','Satanic Bone Helm Box','18','0','20','10','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','457',NULL,'0',NULL,'0',NULL,'0','getitem 5529,1;','','');
REPLACE INTO `item_db` VALUES ('16247','Dragon_Arhat_Mask_Box','Dragon Arhat Mask Box','18','0','20','10','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','getitem 5565,1;','','');
@@ -6282,6 +6310,7 @@ REPLACE INTO `item_db` VALUES ('18100','Shooting_Star_C','Shooting Star','4','11
REPLACE INTO `item_db` VALUES ('18101','F_Bow_Of_Rudra_C','Rudra Bow','4','11','2','1','0','185','0','0','5','0','657480','63','2','34','4','0',NULL,'0','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','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;','','');
REPLACE INTO `item_db` VALUES ('18102','E_Bow_Of_Rudra_C','Rudra Bow','4','11','2','1','0','185','0','0','5','0','657480','63','2','34','4','0',NULL,'0','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','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;','','');
REPLACE INTO `item_db` VALUES ('18149','Balistar_IL','Balistar_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('18164','Royal_Bow_K','Royal_Bow_K','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('18165','Rebeginer_RN_Bow','Rebeginer_RN_Bow','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('18166','Rebeginer_WM_Bow','Rebeginer_WM_Bow','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('18170','Neev_Bow_Of_Rogue','Neev_Bow_Of_Rogue','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -6291,6 +6320,7 @@ REPLACE INTO `item_db` VALUES ('18179','MH_P89_OS','MH_P89_OS','3','0','0','0','
REPLACE INTO `item_db` VALUES ('18180','AC_B44_OS','AC_B44_OS','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('18182','Evt_Royal_Bow_K','Evt_Royal_Bow_K','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('18183','Evt_Narcis_Bow','Evt_Narcis_Bow','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('18190','Ein_BHBOW','Ein_BHBOW','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('18500','Cheer_Scarf6','Cheer Scarf6','5','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','1','0','1',NULL,'0','0','369','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('18501','Cheer_Scarf8','Cheer Scarf8','5','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','1','0','1',NULL,'0','0','369','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('18502','Cheer_Scarf10','Cheer Scarf10','5','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','1','0','1',NULL,'0','0','369','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -6336,10 +6366,17 @@ REPLACE INTO `item_db` VALUES ('20514','C_Thanatos_Sword','C_Thanatos_Sword','3'
REPLACE INTO `item_db` VALUES ('20515','C_Magic_Circle','C_Magic_Circle','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('20516','C_Wings_of_Michael','C_Wings_of_Michael','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('20517','C_GiantCatBag_TW','C_GiantCatBag_TW','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('20519','C_Full_BloomCherry_Tree','C_Full_BloomCherry_Tree','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('20528','C_GoldButterfly_Wing','C_GoldButterfly_Wing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('20530','C_Wings_of_Gabriel','C_Wings_of_Gabriel','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('20533','C_PinkButterfly_Wing_T','C_PinkButterfly_Wing_T','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('20535','C_Digital_Space','C_Digital_Space','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('20543','C_Halloween_Poring_Bag','C_Halloween_Poring_Bag','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('20546','C_Backside_Ribbon_Bell','C_Backside_Ribbon_Bell','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('20570','C_HeartChocoBag','C_HeartChocoBag','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('20572','C_WingOfHeart','C_WingOfHeart','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('20576','C_Cat_Fork','C_Cat_Fork','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('20584','C_Big_Foxtail','C_Big_Foxtail','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('20838','Muffler_IL','Muffler_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('20840','Cape_Of_Ancient_Lord_IL','Cape_Of_Ancient_Lord_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('20847','Clack_Of_Servival_IL','Clack_Of_Servival_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -6353,9 +6390,19 @@ REPLACE INTO `item_db` VALUES ('20934','Illusion_Engine_B','Illusion_Engine_B','
REPLACE INTO `item_db` VALUES ('20939','Time_Overload_Hood','Time_Overload_Hood','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('20940','Violet_Halo','Violet_Halo','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('20944','Fairy_Cloth','Fairy_Cloth','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('20946','Drag_Manteau','Drag_Manteau','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('20963','Temporal_M_Str','Temporal_M_Str','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('20964','Temporal_M_Agi','Temporal_M_Agi','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('20965','Temporal_M_Vit','Temporal_M_Vit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('20966','Temporal_M_Int','Temporal_M_Int','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('20967','Temporal_M_Dex','Temporal_M_Dex','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('20968','Temporal_M_Luk','Temporal_M_Luk','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('21037','Rebeginer_RK_T_Sword','Rebeginer_RK_T_Sword','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('21038','Oriental_Sword','Oriental_Sword','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('21047','Beam_Claymore_OS','Beam_Claymore_OS','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('21049','Evt_Oriental_Sword','Evt_Oriental_Sword','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('21050','Taegoolyeon_IL','Taegoolyeon_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('21054','Ein_BHSWORD','Ein_BHSWORD','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('22133','Shoes_IL','Shoes_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('22141','YSF01_Greave','YSF01_Greave','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('22168','True_Hunting_Boots','True_Hunting_Boots','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -6367,6 +6414,7 @@ REPLACE INTO `item_db` VALUES ('22192','Goibne_Boots_IL','Goibne_Boots_IL','3','
REPLACE INTO `item_db` VALUES ('22196','Illusion_Leg_A','Illusion_Leg_A','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('22197','Illusion_Leg_B','Illusion_Leg_B','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('22204','Time_Overload_Boots','Time_Overload_Boots','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('22208','Dragon_Boots','Dragon_Boots','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('22540','Runstone_Lux','Lux Anima Rune','11','0','2','1','100','0','0','0','0','0','128','8','2','0','0','0',NULL,'0','1','0','0','0','0','60000','475',NULL,'0',NULL,'20','1','0','itemskill RK_LUXANIMA,1;','','');
REPLACE INTO `item_db` VALUES ('22777','Buff_Gift_Set','Buff Gift Set','2','0','20','10','100','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','getitem 14534,5; getitem 12215,5; getitem 12216,5;','','');
REPLACE INTO `item_db` VALUES ('22808','Special_Gift_Box','Special Gift Box','2','0','10','5','100','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -6401,10 +6449,12 @@ REPLACE INTO `item_db` VALUES ('23357','Buy_Arbeit1_1Lv_','Buy_Arbeit1_1Lv_','3'
REPLACE INTO `item_db` VALUES ('23358','Buy_Arbeit1_2Lv_','Buy_Arbeit1_2Lv_','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23359','Buy_Arbeit1_3Lv_','Buy_Arbeit1_3Lv_','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23405','Green_Scroll_K2','Green_Scroll_K2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23436','Shadow_Refine_Hammer','Shadow_Refine_Hammer','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23440','Sentimental_Scroll','Sentimental_Scroll','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23444','July_Hair_Box','July_Hair_Box','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23446','Savage_Trap','Savage_Trap','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23473','Infinity_Scroll','Infinity_Scroll','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23474','InfinityShadow_Mix','InfinityShadow_Mix','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23475','Infinity_Drink','Infinity_Drink','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23484','Firstaid_Box_5','Firstaid_Box_5','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23485','Firstaid_Box_10','Firstaid_Box_10','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -6431,6 +6481,9 @@ REPLACE INTO `item_db` VALUES ('23505','Yellow_Potion_B_20','Yellow_Potion_B_20'
REPLACE INTO `item_db` VALUES ('23506','White_Potion_B_20','White_Potion_B_20','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23533','Vote_Rose','Vote_Rose','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23537','Bloody_Scroll','Bloody_Scroll','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23545','Silver_Statue','Silver_Statue','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23546','Cursed_Blood','Cursed_Blood','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23547','Gold_Statue','Gold_Statue','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23549','Snow_Cookie','Snow_Cookie','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23550','Winter_Cookie','Winter_Cookie','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23551','Festi_Cookie','Festi_Cookie','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -6452,11 +6505,22 @@ REPLACE INTO `item_db` VALUES ('23587','Rebeginer_Box_120','Rebeginer_Box_120','
REPLACE INTO `item_db` VALUES ('23618','2017_Special_Scroll','2017_Special_Scroll','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23650','Ice_Scroll','Ice_Scroll','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23661','2018_New_Year_Scroll','2018_New_Year_Scroll','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23665','PhysicalMagical_Mix','PhysicalMagical_Mix','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23666','ImmunedAthena_Mix','ImmunedAthena_Mix','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23667','HardChamption_Mix','HardChamption_Mix','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23668','KingbirdAncient_Mix','KingbirdAncient_Mix','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23669','CriticalHit_Mix','CriticalHit_Mix','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23675','Geffen_Magic_Scroll','Geffen_Magic_Scroll','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23676','Gray_Charcoal_Melee','Gray_Charcoal_Melee','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23677','Gray_Charcoal_Magic','Gray_Charcoal_Magic','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23678','Gray_Charcoal_Range','Gray_Charcoal_Range','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23679','Geffen_Magic_Scroll2','Geffen_Magic_Scroll2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23683','EVT_JAN02KR','EVT_JAN02KR','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23700','Lunar_New_Year_Scroll','Lunar_New_Year_Scroll','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23706','Reactor_Z','Reactor_Z','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23707','Reactor_Z_','Reactor_Z_','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23710','2018_Spring_Scroll','2018_Spring_Scroll','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23720','Shadow_Random_Mix','Shadow_Random_Mix','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23723','Melon_Bread','Melon_Bread','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23765','Costama_EggV02','Costama_EggV02','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23771','Mysterious_Plastic','Mysterious_Plastic','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -6464,15 +6528,101 @@ REPLACE INTO `item_db` VALUES ('23772','EP17_1_SPC01','EP17_1_SPC01','3','0','0'
REPLACE INTO `item_db` VALUES ('23773','EP17_1_SPC02','EP17_1_SPC02','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23774','EP17_1_SPC03','EP17_1_SPC03','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23775','EP17_1_SPC04','EP17_1_SPC04','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23776','EP17_1_SPC05','EP17_1_SPC05','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23777','EP17_1_SPC06','EP17_1_SPC06','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23778','EP17_1_SPC07','EP17_1_SPC07','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23779','EP17_1_SPC08','EP17_1_SPC08','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23780','EP17_1_SPC09','EP17_1_SPC09','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23781','EP17_1_SPC10','EP17_1_SPC10','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23815','Magma_Essence','Magma_Essence','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23817','Bs_Making_Scrolls','Bs_Making_Scrolls','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23818','Bs_Item_M_S_2','Bs_Item_M_S_2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23819','Bs_Item_M_S_8','Bs_Item_M_S_8','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23820','Bs_Item_M_S_10','Bs_Item_M_S_10','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23821','Bs_Item_M_S_11','Bs_Item_M_S_11','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23822','Bs_Item_M_S_34','Bs_Item_M_S_34','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23823','Bs_Item_M_S_41','Bs_Item_M_S_41','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23824','Bs_Item_M_S_42','Bs_Item_M_S_42','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23825','Bs_Item_M_S_43','Bs_Item_M_S_43','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23826','Bs_Item_M_S_44','Bs_Item_M_S_44','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23827','Bs_Sha_M_S_1','Bs_Sha_M_S_1','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23828','Bs_Sha_M_S_17','Bs_Sha_M_S_17','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23829','Bs_Sha_M_S_18','Bs_Sha_M_S_18','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23830','Bs_Sha_M_S_19','Bs_Sha_M_S_19','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23831','Bs_Sha_M_S_20','Bs_Sha_M_S_20','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23832','Bs_Item_M_S_4','Bs_Item_M_S_4','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23833','Bs_Item_M_S_6','Bs_Item_M_S_6','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23834','Bs_Item_M_S_7','Bs_Item_M_S_7','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23835','Bs_Item_M_S_12','Bs_Item_M_S_12','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23836','Bs_Item_M_S_13','Bs_Item_M_S_13','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23837','Bs_Item_M_S_15','Bs_Item_M_S_15','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23838','Bs_Item_M_S_28','Bs_Item_M_S_28','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23839','Bs_Item_M_S_29','Bs_Item_M_S_29','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23840','Bs_Item_M_S_31','Bs_Item_M_S_31','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23841','Bs_Item_M_S_32','Bs_Item_M_S_32','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23842','Bs_Item_M_S_33','Bs_Item_M_S_33','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23843','Bs_Item_M_S_36','Bs_Item_M_S_36','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23844','Bs_Item_M_S_37','Bs_Item_M_S_37','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23845','Bs_Item_M_S_38','Bs_Item_M_S_38','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23846','Bs_Item_M_S_39','Bs_Item_M_S_39','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23847','Bs_Item_M_S_40','Bs_Item_M_S_40','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23848','Bs_Item_M_S_45','Bs_Item_M_S_45','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23849','Bs_Item_M_S_46','Bs_Item_M_S_46','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23850','Bs_Item_M_S_47','Bs_Item_M_S_47','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23851','Bs_Item_M_S_48','Bs_Item_M_S_48','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23852','Bs_Item_M_S_49','Bs_Item_M_S_49','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23853','Bs_Item_M_S_50','Bs_Item_M_S_50','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23854','Bs_Sha_M_S_2','Bs_Sha_M_S_2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23855','Bs_Sha_M_S_5','Bs_Sha_M_S_5','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23856','Bs_Sha_M_S_6','Bs_Sha_M_S_6','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23857','Bs_Sha_M_S_7','Bs_Sha_M_S_7','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23858','Bs_Sha_M_S_8','Bs_Sha_M_S_8','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23859','Bs_Sha_M_S_13','Bs_Sha_M_S_13','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23860','Bs_Sha_M_S_15','Bs_Sha_M_S_15','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23861','Bs_Sha_M_S_16','Bs_Sha_M_S_16','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23862','Bs_Sha_M_S_23','Bs_Sha_M_S_23','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23863','Bs_Item_M_S_5','Bs_Item_M_S_5','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23864','Bs_Item_M_S_9','Bs_Item_M_S_9','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23865','Bs_Item_M_S_14','Bs_Item_M_S_14','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23866','Bs_Item_M_S_16','Bs_Item_M_S_16','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23867','Bs_Item_M_S_17','Bs_Item_M_S_17','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23868','Bs_Item_M_S_19','Bs_Item_M_S_19','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23869','Bs_Item_M_S_27','Bs_Item_M_S_27','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23870','Bs_Item_M_S_35','Bs_Item_M_S_35','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23871','Bs_Sha_M_S_9','Bs_Sha_M_S_9','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23872','Bs_Sha_M_S_10','Bs_Sha_M_S_10','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23873','Bs_Sha_M_S_11','Bs_Sha_M_S_11','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23874','Bs_Sha_M_S_21','Bs_Sha_M_S_21','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23875','Bs_Sha_M_S_22','Bs_Sha_M_S_22','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23876','Bs_Item_M_S_1','Bs_Item_M_S_1','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23877','Bs_Item_M_S_3','Bs_Item_M_S_3','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23878','StarSoul_Scroll','StarSoul_Scroll','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23879','Bs_Item_M_S_18','Bs_Item_M_S_18','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23880','Bs_Item_M_S_20','Bs_Item_M_S_20','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23881','Bs_Item_M_S_21','Bs_Item_M_S_21','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23882','Bs_Item_M_S_22','Bs_Item_M_S_22','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23883','Bs_Item_M_S_23','Bs_Item_M_S_23','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23884','Bs_Item_M_S_24','Bs_Item_M_S_24','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23885','Bs_Item_M_S_25','Bs_Item_M_S_25','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23886','Bs_Item_M_S_26','Bs_Item_M_S_26','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23887','Bs_Item_M_S_30','Bs_Item_M_S_30','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23888','Bs_Sha_M_S_3','Bs_Sha_M_S_3','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23889','Bs_Sha_M_S_4','Bs_Sha_M_S_4','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23890','Bs_Sha_M_S_12','Bs_Sha_M_S_12','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23891','Bs_Sha_M_S_14','Bs_Sha_M_S_14','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23892','Bs_Sha_M_S_24','Bs_Sha_M_S_24','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23893','Bs_Sha_M_S_25','Bs_Sha_M_S_25','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23894','Bs_Item_M_S_51','Bs_Item_M_S_51','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23897','2018_Jump_Thx_Box','2018_Jump_Thx_Box','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23898','Comp_Power_Booster','Comp_Power_Booster','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23899','Comp_Almighty','Comp_Almighty','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23900','Time_Overload_Box','Time_Overload_Box','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23901','110LVUP','110LVUP','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23921','Season_Evt_Reward','Season_Evt_Reward','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23926','Shadow_9_Refine_Hammer','Shadow_9_Refine_Hammer','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23962','Malang_Cat_Can2','Malang_Cat_Can2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23967','EnchantStone_Recipe_9m','EnchantStone_Recipe_9m','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23981','Abyss_Ddbox','Abyss_Ddbox','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('24380','Sentimental_Weapone_S','Sentimental_Weapone_S','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('24381','Sentimental_Earring_S','Sentimental_Earring_S','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('24382','Sentimental_Pendant_S','Sentimental_Pendant_S','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -6515,6 +6665,167 @@ REPLACE INTO `item_db` VALUES ('24418','S_Timeoverload_Shield','S_Timeoverload_S
REPLACE INTO `item_db` VALUES ('24419','S_Timeoverload_Shoes','S_Timeoverload_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('24420','S_Timeoverload_Earing','S_Timeoverload_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('24421','S_Timeoverload_Pandent','S_Timeoverload_Pandent','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24423','S_Tempest_Weapon','S_Tempest_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24424','S_Tempest_Armor','S_Tempest_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24425','S_PerfectSize_Weapon','S_PerfectSize_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24426','S_PerfectSize_Armor','S_PerfectSize_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24427','S_M_Exo_Co_Weapon','S_M_Exo_Co_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24428','S_M_Viv_Dr_Weapon','S_M_Viv_Dr_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24429','S_M_Sci_Hu_Weapon','S_M_Sci_Hu_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24430','S_M_Fis_In_Weapon','S_M_Fis_In_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24431','S_M_Exe_Ho_Weapon','S_M_Exe_Ho_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24432','S_Penetration_Weapon','S_Penetration_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24433','S_Penetration_Armor','S_Penetration_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24434','S_Exe_Ho_Weapon','S_Exe_Ho_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24435','S_Fis_In_Weapon','S_Fis_In_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24436','S_Sci_Hu_Weapon','S_Sci_Hu_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24437','S_Viv_Dr_Weapon','S_Viv_Dr_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24438','S_Exo_Co_Weapon','S_Exo_Co_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24439','S_Hasty_Weapon','S_Hasty_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24440','S_Sonic_Armor','S_Sonic_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24441','S_Sonic_Shield','S_Sonic_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24442','S_Sonic_Shoes','S_Sonic_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24443','S_Ignition_Weapon','S_Ignition_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24444','S_Ignition_Pendant','S_Ignition_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24445','S_Ignition_Earing','S_Ignition_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24446','S_W_Breath_Armor','S_W_Breath_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24447','S_W_Breath_Shield','S_W_Breath_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24448','S_W_Breath_Shoes','S_W_Breath_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24449','S_F_Breath_Weapon','S_F_Breath_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24450','S_F_Breath_Pendant','S_F_Breath_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24451','S_F_Breath_Earing','S_F_Breath_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24452','S_Cluster_Armor','S_Cluster_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24453','S_Cluster_Shield','S_Cluster_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24454','S_Cluster_Shoes','S_Cluster_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24455','S_Aimed_Weapon','S_Aimed_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24456','S_Aimed_Pendant','S_Aimed_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24457','S_Aimed_Earing','S_Aimed_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24458','S_Arrow_Armor','S_Arrow_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24459','S_Arrow_Shield','S_Arrow_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24460','S_Arrow_Shoes','S_Arrow_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24461','S_Shooting_Weapon','S_Shooting_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24462','S_Shooting_Pendant','S_Shooting_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24463','S_Shooting_Earing','S_Shooting_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24464','S_Tornado_Armor','S_Tornado_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24465','S_Tornado_Shield','S_Tornado_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24466','S_Tornado_Shoes','S_Tornado_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24467','S_Boomerang_Weapon','S_Boomerang_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24468','S_Boomerang_Pendant','S_Boomerang_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24469','S_Boomerang_Earing','S_Boomerang_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24470','S_Vulcan_Armor','S_Vulcan_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24471','S_Vulcan_Shield','S_Vulcan_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24472','S_Vulcan_Shoes','S_Vulcan_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24473','S_Arms_Weapon','S_Arms_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24474','S_Arms_Pendant','S_Arms_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24475','S_Arms_Earing','S_Arms_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24476','S_Rampage_Armor','S_Rampage_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24477','S_Rampage_Shield','S_Rampage_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24478','S_Rampage_Shoes','S_Rampage_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24479','S_Skynetblow_Weapon','S_Skynetblow_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24480','S_Skynetblow_Pendant','S_Skynetblow_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24481','S_Skynetblow_Earing','S_Skynetblow_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24482','S_Knucklearrow_Armor','S_Knucklearrow_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24483','S_Knucklearrow_Shield','S_Knucklearrow_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24484','S_Knucklearrow_Shoes','S_Knucklearrow_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24485','S_TigerCannon_Weapon','S_TigerCannon_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24486','S_Tigercannon_Pendant','S_Tigercannon_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24487','S_Tigercannon_Earing','S_Tigercannon_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24488','S_Duplelight_Armor','S_Duplelight_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24489','S_Duplelight_Shield','S_Duplelight_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24490','S_Duplelight_Shoes','S_Duplelight_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24491','S_Adoramus_Weapon','S_Adoramus_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24492','S_Adoramus_Pendant','S_Adoramus_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24493','S_Adoramus_Earing','S_Adoramus_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24494','S_Judex_Armor','S_Judex_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24495','S_Judex_Shield','S_Judex_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24496','S_Judex_Shoes','S_Judex_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24497','S_Magnus_Weapon','S_Magnus_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24498','S_Magnus_Pendant','S_Magnus_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24499','S_Magnus_Earing','S_Magnus_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24500','S_Rainstorm_Armor','S_Rainstorm_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24501','S_Rainstorm_Shield','S_Rainstorm_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24502','S_Rainstorm_Shoes','S_Rainstorm_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24503','S_Arrowvulcan_Weapon','S_Arrowvulcan_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24504','S_Arrowvulcan_Pendant','S_Arrowvulcan_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24505','S_Arrowvulcan_Earing','S_Arrowvulcan_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24506','S_Metalic_Armor','S_Metalic_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24507','S_Metalic_Shield','S_Metalic_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24508','S_Metalic_Shoes','S_Metalic_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24509','S_Reverberation_Weapon','S_Reverberation_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24510','S_Reverberation_Pendant','S_Reverberation_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24511','S_Reverberation_Earing','S_Reverberation_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24512','S_Jack_Armor','S_Jack_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24513','S_Jack_Shield','S_Jack_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24514','S_Jack_Shoes','S_Jack_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24515','S_Strain_Weapon','S_Strain_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24516','S_Strain_Pendant','S_Strain_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24517','S_Strain_Earing','S_Strain_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24518','S_Crimson_Armor','S_Crimson_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24519','S_Crimson_Shield','S_Crimson_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24520','S_Crimson_Shoes','S_Crimson_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24521','S_Chain_Weapon','S_Chain_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24522','S_Chain_Pendant','S_Chain_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24523','S_Chain_Earing','S_Chain_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24524','S_Triangle_Armor','S_Triangle_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24525','S_Triangle_Shield','S_Triangle_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24526','S_Triangle_Shoes','S_Triangle_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24527','S_Shadowspell_Weapon','S_Shadowspell_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24528','S_Shadowspell_Pendant','S_Shadowspell_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24529','S_Shadowspell_Earing','S_Shadowspell_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24530','S_Menace_Armor','S_Menace_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24531','S_Menace_Shield','S_Menace_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24532','S_Menace_Shoes','S_Menace_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24533','S_Paint_Weapon','S_Paint_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24534','S_Paint_Pendant','S_Paint_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24535','S_Paint_Earing','S_Paint_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24536','S_Rolling_Armor','S_Rolling_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24537','S_Rolling_Shield','S_Rolling_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24538','S_Rolling_Shoes','S_Rolling_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24539','S_Katar_Weapon','S_Katar_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24540','S_Katar_Pendant','S_Katar_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24541','S_Katar_Earing','S_Katar_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24542','S_Slash_Armor','S_Slash_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24543','S_Slash_Shield','S_Slash_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24544','S_Slash_Shoes','S_Slash_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24545','S_Ripper_Weapon','S_Ripper_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24546','S_Ripper_Pendant','S_Ripper_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24547','S_Ripper_Earing','S_Ripper_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24548','S_Dust_Armor','S_Dust_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24549','S_Dust_Shield','S_Dust_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24550','S_Dust_Shoes','S_Dust_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24551','S_Grave_Weapon','S_Grave_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24552','S_Grave_Pendant','S_Grave_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24553','S_Grave_Earing','S_Grave_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24554','S_Psychic_Armor','S_Psychic_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24555','S_Psychic_Shield','S_Psychic_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24556','S_Psychic_Shoes','S_Psychic_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24557','S_Varetyr_Weapon','S_Varetyr_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24558','S_Varetyr_Pendant','S_Varetyr_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24559','S_Varetyr_Earing','S_Varetyr_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24560','S_Cart_Tornado_Armor','S_Cart_Tornado_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24561','S_Cart_Tornado_Shield','S_Cart_Tornado_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24562','S_Cart_Tornado_Shoes','S_Cart_Tornado_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24563','S_Cannon_Cart_Weapon','S_Cannon_Cart_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24564','S_Cannon_Cart_Pendant','S_Cannon_Cart_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24565','S_Cannon_Cart_Earing','S_Cannon_Cart_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24566','S_Spore_Bomb_Armor','S_Spore_Bomb_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24567','S_Spore_Bomb_Shield','S_Spore_Bomb_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24568','S_Spore_Bomb_Shoes','S_Spore_Bomb_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24569','S_Crazy_Weapon','S_Crazy_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24570','S_Crazy_Pendant','S_Crazy_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24571','S_Crazy_Earing','S_Crazy_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24572','S_Brand_Armor','S_Brand_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24573','S_Brand_Shield','S_Brand_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24574','S_Brand_Shoes','S_Brand_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24575','S_Chain_Press_Weapon','S_Chain_Press_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24576','S_Chain_Press_Pendant','S_Chain_Press_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24577','S_Chain_Press_Earing','S_Chain_Press_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24578','S_Banish_Cannon_Armor','S_Banish_Cannon_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24579','S_Banish_Cannon_Shield','S_Banish_Cannon_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24580','S_Banish_Cannon_Shoes','S_Banish_Cannon_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24581','S_Genesis_Weapon','S_Genesis_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24582','S_Genesis_Pendant','S_Genesis_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24583','S_Genesis_Earing','S_Genesis_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('25258','BrokenArrow','BrokenArrow','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('25265','Shining_Spore','Shining_Spore','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('25266','Dried_Leaf_Of_Ygg','Dried_Leaf_Of_Ygg','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -6621,29 +6932,79 @@ REPLACE INTO `item_db` VALUES ('25735','Unsealing_Token','Unsealing_Token','3','
REPLACE INTO `item_db` VALUES ('25739','GH_Cursed_Crystal','GH_Cursed_Crystal','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('25740','GH_Cursed_Gemstone','GH_Cursed_Gemstone','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('25793','Inventory_Extension_Coupon','Inventory_Extension_Coupon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25797','SuraStone_Robe2','SuraStone_Robe2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25798','SuraStone_Bottom2','SuraStone_Bottom2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25799','SuraStone_Middle2','SuraStone_Middle2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25800','SuraStone_Top2','SuraStone_Top2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25801','SorcererStone_Robe2','SorcererStone_Robe2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25802','SorcererStone_Bottom2','SorcererStone_Bottom2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25803','SorcererStone_Middle2','SorcererStone_Middle2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25804','SorcererStone_Top2','SorcererStone_Top2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25805','ShadowchaserStone_Robe2','ShadowchaserStone_Robe2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25806','ShadowchasStone_Bottom2','ShadowchasStone_Bottom2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25807','ShadowchasStone_Middle2','ShadowchasStone_Middle2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25808','ShadowchaserStone_Top2','ShadowchaserStone_Top2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25815','Ein_SOLIDDUST','Ein_SOLIDDUST','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25816','Ein_RUSTHELM','Ein_RUSTHELM','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25817','Ein_EYEROCK','Ein_EYEROCK','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25842','SoulreaperStone_Robe','SoulreaperStone_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25843','SoullinkerStone_Top','SoullinkerStone_Top','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25844','SoullinkerStone_Middle','SoullinkerStone_Middle','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25845','SoullinkerStone_Bottom','SoullinkerStone_Bottom','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25846','GladiatorStone_Top','GladiatorStone_Top','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25847','GladiatorStone_Middle','GladiatorStone_Middle','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25848','GladiatorStone_Bottom','GladiatorStone_Bottom','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25849','StaremperorStone_Robe','StaremperorStone_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25850','NinjaStone_Top','NinjaStone_Top','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25851','NinjaStone_Middle','NinjaStone_Middle','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25852','NinjaStone_Bottom','NinjaStone_Bottom','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25853','KagerouStone_Robe','KagerouStone_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25854','OboroStone_Robe','OboroStone_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25855','GunslingerStone_Top','GunslingerStone_Top','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25856','GunslingerStone_Middle','GunslingerStone_Middle','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25857','GunslingerStone_Bottom','GunslingerStone_Bottom','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25858','RebellionStone_Robe','RebellionStone_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25859','DoramStone_Top','DoramStone_Top','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25860','DoramStone_Middle','DoramStone_Middle','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25861','DoramStone_Bottom','DoramStone_Bottom','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25862','DoramStone_Robe','DoramStone_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('26007','Spectral_Spear_IL','Spectral_Spear_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('26015','Rebeginer_LG_Lance','Rebeginer_LG_Lance','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('26109','Staff_Of_Bordeaux_IL','Staff_Of_Bordeaux_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('26110','CandyCaneRod','CandyCaneRod','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('26111','Metal_Foxtail','Metal_Foxtail','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('26118','Shadow_Staff_K','Shadow_Staff_K','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('26119','Rebeginer_SO_Rod','Rebeginer_SO_Rod','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('26120','Rebeginer_DO_Rod','Rebeginer_DO_Rod','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('26151','Rutilus_Stick_OS','Rutilus_Stick_OS','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('26154','SoulWeight','SoulWeight','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('26155','MeawFoxtail','MeawFoxtail','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('26156','Evt_Shadow_Staff_K','Evt_Shadow_Staff_K','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('26162','Ein_1HWAND','Ein_1HWAND','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('26164','ElectricFox_OS','ElectricFox_OS','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('26215','Ein_1HWHIP','Ein_1HWHIP','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28022','Infiltrator_IL','Infiltrator_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28023','Ghoul_Leg_IL','Ghoul_Leg_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28027','Rebeginer_GC_Katar','Rebeginer_GC_Katar','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28038','Meuchler_OS','Meuchler_OS','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('28039','Shiver_Katar_K','Shiver_Katar_K','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28040','Evt_Shiver_Katar_K','Evt_Shiver_Katar_K','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('28045','Ein_BHKATAR','Ein_BHKATAR','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('28130','Avenger','Avenger','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28136','Blasti_OS','Blasti_OS','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28137','Evt_Avenger','Evt_Avenger','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('28140','Ein_BHAXE','Ein_BHAXE','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28240','Calf_Kingcobra','Calf_Kingcobra','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28241','Calf_Diamondback','Calf_Diamondback','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28242','Calf_Anaconda','Calf_Anaconda','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28243','Calf_Python','Calf_Python','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28244','Gate_KeeperDD_IL','Gate_KeeperDD_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28253','HR_S55_OS','HR_S55_OS','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('28254','Butcher_IL','Butcher_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('28255','Master_Soul_Rifle','Master_Soul_Rifle','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('28256','Demon_S_Shot','Demon_S_Shot','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('28257','Golden_L_Launcher','Golden_L_Launcher','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('28258','The_Black_Gatling','The_Black_Gatling','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28508','Skul_Ring_IL','Skul_Ring_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28509','Ring_IL','Ring_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28510','Vampire_s_Servant','Vampire_s_Servant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -6654,12 +7015,20 @@ REPLACE INTO `item_db` VALUES ('28612','Book_Of_The_Apo_IL','Book_Of_The_Apo_IL'
REPLACE INTO `item_db` VALUES ('28616','Rebeginer_AB_Bible','Rebeginer_AB_Bible','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28626','Tablet_IL','Tablet_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28629','Circuit_Board_OS','Circuit_Board_OS','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('28630','Demon_Hunting_Bible_K','Demon_Hunting_Bible_K','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28631','Time_Kamiji','Time_Kamiji','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('28635','Ein_1HBOOK','Ein_1HBOOK','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28725','Moonlight_Sword_IL','Moonlight_Sword_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28740','Rebeginer_SC_Dagger','Rebeginer_SC_Dagger','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('28744','Magic_Sword','Magic_Sword','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28745','Counter_Dagger_IL','Counter_Dagger_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28755','Kuroiro_OS','Kuroiro_OS','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28759','Evt_Magic_Sword','Evt_Magic_Sword','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('28762','Bazerald_IL','Bazerald_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('28763','Sharp_Wind_Sword','Sharp_Wind_Sword','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('28764','Fog_Dew_Sword','Fog_Dew_Sword','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('28771','Ein_1HDAGGER','Ein_1HDAGGER','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('28772','Ein_1HMAGGER','Ein_1HMAGGER','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28922','Herald_Of_GOD_IL','Herald_Of_GOD_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28942','Bloody_Knight_Shield','Bloody_Knight_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28945','Bloody_Knight_Shield_','Bloody_Knight_Shield_','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -6695,6 +7064,7 @@ REPLACE INTO `item_db` VALUES ('31332','C_Khalitzburg_Helm_BL','C_Khalitzburg_He
REPLACE INTO `item_db` VALUES ('31368','Harvest_Festa_Hat','Harvest_Festa_Hat','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31369','Straight_Long_WH_','Straight_Long_WH_','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31370','Straight_Long_YL_','Straight_Long_YL_','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31382','C_Cat_Ears_Punkish','C_Cat_Ears_Punkish','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31387','Jjakk','Jjakk','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31389','White_Bird_Rose','White_Bird_Rose','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31390','Let_It_Snow','Let_It_Snow','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -6707,31 +7077,278 @@ REPLACE INTO `item_db` VALUES ('31432','C_Luwmin_Ice','C_Luwmin_Ice','3','0','0'
REPLACE INTO `item_db` VALUES ('31433','C_Astro_Circle','C_Astro_Circle','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31437','C_Baby_Penguin','C_Baby_Penguin','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31439','C_Fluffy_Heart_Earmuffs','C_Fluffy_Heart_Earmuffs','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31440','C_Snow_Bear_Food','C_Snow_Bear_Food','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31452','White_Cat','White_Cat','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31454','Love_Feeling','Love_Feeling','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31455','Enchanted_Dog','Enchanted_Dog','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31460','C_Blessing_Sky_Lantern','C_Blessing_Sky_Lantern','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31463','C_Flying_Drone','C_Flying_Drone','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31465','Egg_Minihat','Egg_Minihat','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31481','C_CatCoffeeCup_TW','C_CatCoffeeCup_TW','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31483','C_CatEarRibbon_TW','C_CatEarRibbon_TW','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31489','C_Bouquet_Hat','C_Bouquet_Hat','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31490','C_Poring_Muffler','C_Poring_Muffler','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31494','Volume_Low_Twin','Volume_Low_Twin','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31495','Lolita_Two_Side_Up','Lolita_Two_Side_Up','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31498','C_Elephangel_TH','C_Elephangel_TH','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31512','C_Panda_Rabbit','C_Panda_Rabbit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31516','Mini_Melon','Mini_Melon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31518','Pop_Popcorn_Hat_','Pop_Popcorn_Hat_','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31519','Slurp_Slurp_Hat','Slurp_Slurp_Hat','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31529','C_Happy_Rabbit_Ribbon','C_Happy_Rabbit_Ribbon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31565','C_Princess_Ribbon_Crown','C_Princess_Ribbon_Crown','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31569','C_OpenAir_Headset','C_OpenAir_Headset','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31572','C_Mobile_Pursuit_System','C_Mobile_Pursuit_System','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31573','C_Mecha_Cat_Ears','C_Mecha_Cat_Ears','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31574','C_Cyber_Income','C_Cyber_Income','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31580','Autumnal_Flavor','Autumnal_Flavor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31586','C_Poporing_Muffler','C_Poporing_Muffler','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31589','GOLD_MAJESTIC_GOUT','GOLD_MAJESTIC_GOUT','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31600','C_Kishu_Inu','C_Kishu_Inu','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31606','C_Autumn_Headband','C_Autumn_Headband','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31614','C_Fox','C_Fox','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31616','C_Sleep_Sheep_TW','C_Sleep_Sheep_TW','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31624','C_HeartOfCat_TW','C_HeartOfCat_TW','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31625','C_Protect_Cloth','C_Protect_Cloth','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31693','C_LunaticMuffler','C_LunaticMuffler','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31698','C_Pigtail_Red_Hood','C_Pigtail_Red_Hood','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31699','C_Smiling_Eyes','C_Smiling_Eyes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31765','C_Garnet_Tiara','C_Garnet_Tiara','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31766','C_Peony_Hair_Ornament','C_Peony_Hair_Ornament','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31787','C_SavageB_On_Shoulder','C_SavageB_On_Shoulder','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31798','C_Baby_Panda','C_Baby_Panda','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('32005','Pole_Axe_IL','Pole_Axe_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('32013','Metal_Stick','Metal_Stick','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('32018','Undine_Spear_K','Undine_Spear_K','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('32019','Boost_Lance_OS','Boost_Lance_OS','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('32021','Evt_Undine_Spear_K','Evt_Undine_Spear_K','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('32026','Ein_1HSPEAR','Ein_1HSPEAR','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('32110','Ein_1HLUTE','Ein_1HLUTE','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('32207','Illusion_B_R','Illusion_B_R','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('32208','Illusion_B_L','Illusion_B_L','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('32209','Illusion_BC_R','Illusion_BC_R','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('32210','Illusion_BC_L','Illusion_BC_L','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('32221','Time_Overload_Ring','Time_Overload_Ring','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('32237','Celine_Brooch','Celine_Brooch','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('32301','Gold_Lux_IL','Gold_Lux_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('32302','Crimson_Rose','Crimson_Rose','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('32303','Ein_1HGUN','Ein_1HGUN','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('32352','Ein_1HSWORD','Ein_1HSWORD','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100000','IDTest_Special','IDTest_Special','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100003','ILL_Piece_A','ILL_Piece_A','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100004','ILL_Piece_B','ILL_Piece_B','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100009','Joy_Of_Victory','Joy_Of_Victory','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100010','PerfectSize_Mix','PerfectSize_Mix','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100011','MagicPiercing_Mix','MagicPiercing_Mix','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100023','Ancient_Hero_Bravery','Ancient_Hero_Bravery','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100025','Ancient_Hero_Wisdom','Ancient_Hero_Wisdom','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100043','Boost_Up_1','Boost_Up_1','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100044','Boost_Up_2','Boost_Up_2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100053','Piercing_Mix','Piercing_Mix','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100058','Hasty_Mix','Hasty_Mix','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100060','EnchantStone_Recipe_4m','EnchantStone_Recipe_4m','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100128','Noblesse_Rifine_Ticket','Noblesse_Rifine_Ticket','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100129','Imperial_Rifine_Ticket','Imperial_Rifine_Ticket','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100130','Grace_Rifine_Ticket','Grace_Rifine_Ticket','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100131','Imperial_Convert1','Imperial_Convert1','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100132','Imperial_Convert2','Imperial_Convert2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100133','Grace_Convert1','Grace_Convert1','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100134','Grace_Convert2','Grace_Convert2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100135','Imperial_Convert3','Imperial_Convert3','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100136','Imperial_Convert4','Imperial_Convert4','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100137','Grace_Convert3','Grace_Convert3','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100138','Grace_Convert4','Grace_Convert4','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100142','Abyss_Ddbox2','Abyss_Ddbox2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100144','Abyss_Ddbox3','Abyss_Ddbox3','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100145','Abyss_Ddbox4','Abyss_Ddbox4','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('400002','Victory_Wing_Ear_','Victory_Wing_Ear_','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('400020','C_BeachBall','C_BeachBall','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('440000','C_SharkHead','C_SharkHead','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450001','Atker_Plate','Atker_Plate','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450002','Ele_Robe','Ele_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450003','Defn_Robe','Defn_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450004','Ran_Suits','Ran_Suits','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450018','Noblesse_Breath_Armor','Noblesse_Breath_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450019','Noblesse_Knight_Armor','Noblesse_Knight_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450020','Noblesse_Spear_Armor','Noblesse_Spear_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450021','Noblesse_Genesis_Armor','Noblesse_Genesis_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450022','Noblesse_Sharp_Suit','Noblesse_Sharp_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450023','Noblesse_Aim_Suit','Noblesse_Aim_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450024','Noblesse_Severe_Suit','Noblesse_Severe_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450025','Noblesse_Reverb_Suit','Noblesse_Reverb_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450026','Noblesse_Adora_Robe','Noblesse_Adora_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450027','Noblesse_Duple_Robe','Noblesse_Duple_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450028','Noblesse_Tonado_Armor','Noblesse_Tonado_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450029','Noblesse_Vulcan_Armor','Noblesse_Vulcan_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450030','Noblesse_Kart_Suit','Noblesse_Kart_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450031','Noblesse_Kart_Suit2','Noblesse_Kart_Suit2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450032','Noblesse_Rolling_Suit','Noblesse_Rolling_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450033','Noblesse_Assasin_Suit','Noblesse_Assasin_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450034','Noblesse_Fatal_Suit','Noblesse_Fatal_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450035','Noblesse_Stalker_Suit','Noblesse_Stalker_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450036','Noblesse_Picky_Robe','Noblesse_Picky_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450037','Noblesse_Carrot_Robe','Noblesse_Carrot_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450038','Noblesse_Trip_Suit','Noblesse_Trip_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450039','Noblesse_Firerain_Suit','Noblesse_Firerain_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450040','Noblesse_Crimson_Robe','Noblesse_Crimson_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450041','Noblesse_Frost_Robe','Noblesse_Frost_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450042','Noblesse_Psychic_Robe','Noblesse_Psychic_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450043','Noblesse_Dust_Robe','Noblesse_Dust_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450044','Noblesse_Sun_Suit','Noblesse_Sun_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450045','Noblesse_Moon_Suit','Noblesse_Moon_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450046','Noblesse_Ninja_Suit','Noblesse_Ninja_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450047','Noblesse_Kunai_Suit','Noblesse_Kunai_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450048','Noblesse_Swhoo_Robe','Noblesse_Swhoo_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450049','Noblesse_Explosion_Robe','Noblesse_Explosion_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450050','Noblesse_Knuckle_Suit','Noblesse_Knuckle_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450051','Noblesse_Tiger_Suit','Noblesse_Tiger_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450052','Imperial_Breath_Armor','Imperial_Breath_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450053','Imperial_Knight_Armor','Imperial_Knight_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450054','Imperial_Spear_Armor','Imperial_Spear_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450055','Imperial_Genesis_Armor','Imperial_Genesis_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450056','Imperial_Sharp_Suit','Imperial_Sharp_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450057','Imperial_Aim_Suit','Imperial_Aim_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450058','Imperial_Severe_Suit','Imperial_Severe_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450059','Imperial_Reverb_Suit','Imperial_Reverb_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450060','Imperial_Adora_Robe','Imperial_Adora_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450061','Imperial_Duple_Robe','Imperial_Duple_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450062','Imperial_Knuckle_Suit','Imperial_Knuckle_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450063','Imperial_Tiger_Suit','Imperial_Tiger_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450064','Imperial_Tonado_Armor','Imperial_Tonado_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450065','Imperial_Vulcan_Armor','Imperial_Vulcan_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450066','Imperial_Kart_Suit','Imperial_Kart_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450067','Imperial_Kart_Suit2','Imperial_Kart_Suit2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450068','Imperial_Rolling_Suit','Imperial_Rolling_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450069','Imperial_Assasin_Suit','Imperial_Assasin_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450070','Imperial_Fatal_Suit','Imperial_Fatal_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450071','Imperial_Stalker_Suit','Imperial_Stalker_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450072','Imperial_Picky_Robe','Imperial_Picky_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450073','Imperial_Carrot_Robe','Imperial_Carrot_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450074','Imperial_Trip_Suit','Imperial_Trip_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450075','Imperial_Firerain_Suit','Imperial_Firerain_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450076','Imperial_Crimson_Robe','Imperial_Crimson_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450077','Imperial_Frost_Robe','Imperial_Frost_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450078','Imperial_Psychic_Robe','Imperial_Psychic_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450079','Imperial_Dust_Robe','Imperial_Dust_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450080','Imperial_Sun_Suit','Imperial_Sun_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450081','Imperial_Moon_Suit','Imperial_Moon_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450082','Imperial_Ninja_Suit','Imperial_Ninja_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450083','Imperial_Kunai_Suit','Imperial_Kunai_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450084','Imperial_Swhoo_Robe','Imperial_Swhoo_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450085','Imperial_Explosion_Robe','Imperial_Explosion_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450086','Grace_Breath_Armor','Grace_Breath_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450087','Grace_Knight_Armor','Grace_Knight_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450088','Grace_Spear_Armor','Grace_Spear_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450089','Grace_Genesis_Armor','Grace_Genesis_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450090','Grace_Sharp_Suit','Grace_Sharp_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450091','Grace_Aim_Suit','Grace_Aim_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450092','Grace_Severe_Suit','Grace_Severe_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450093','Grace_Reverb_Suit','Grace_Reverb_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450094','Grace_Adora_Robe','Grace_Adora_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450095','Grace_Duple_Robe','Grace_Duple_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450096','Grace_Knuckle_Suit','Grace_Knuckle_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450097','Grace_Tiger_Suit','Grace_Tiger_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450098','Grace_Tonado_Armor','Grace_Tonado_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450099','Grace_Vulcan_Armor','Grace_Vulcan_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450100','Grace_Kart_Suit','Grace_Kart_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450101','Grace_Kart_Suit2','Grace_Kart_Suit2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450102','Grace_Rolling_Suit','Grace_Rolling_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450103','Grace_Assasin_Suit','Grace_Assasin_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450104','Grace_Fatal_Suit','Grace_Fatal_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450105','Grace_Stalker_Suit','Grace_Stalker_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450106','Grace_Picky_Robe','Grace_Picky_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450107','Grace_Carrot_Robe','Grace_Carrot_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450108','Grace_Trip_Suit','Grace_Trip_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450109','Grace_Firerain_Suit','Grace_Firerain_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450110','Grace_Crimson_Robe','Grace_Crimson_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450111','Grace_Frost_Robe','Grace_Frost_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450112','Grace_Psychic_Robe','Grace_Psychic_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450113','Grace_Dust_Robe','Grace_Dust_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450114','Grace_Sun_Suit','Grace_Sun_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450115','Grace_Moon_Suit','Grace_Moon_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450116','Grace_Ninja_Suit','Grace_Ninja_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450117','Grace_Kunai_Suit','Grace_Kunai_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450118','Grace_Swhoo_Robe','Grace_Swhoo_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450119','Grace_Explosion_Robe','Grace_Explosion_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450121','Noblesse_Snovice_Suit','Noblesse_Snovice_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450122','Noblesse_Snovice_Robe','Noblesse_Snovice_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450123','Imperial_Snovice_Suit','Imperial_Snovice_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450124','Imperial_Snovice_Robe','Imperial_Snovice_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450125','Grace_Snovice_Suit','Grace_Snovice_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450126','Grace_Snovice_Robe','Grace_Snovice_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('470000','Atker_Greave','Atker_Greave','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('470001','Ele_Shoes','Ele_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('470002','Defn_Shoes','Defn_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('470003','Ran_Boots','Ran_Boots','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('470016','Noblesse_Attack_Boots','Noblesse_Attack_Boots','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('470017','Noblesse_Magic_Boots','Noblesse_Magic_Boots','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('470018','Imperial_Attack_Boots','Imperial_Attack_Boots','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('470019','Imperial_Magic_Boots','Imperial_Magic_Boots','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('470020','Grace_Attack_Boots','Grace_Attack_Boots','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('470021','Grace_Magic_Boots','Grace_Magic_Boots','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('480000','Atker_Manteau','Atker_Manteau','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('480001','Ele_Muffler','Ele_Muffler','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('480002','Defn_Muffler','Defn_Muffler','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('480003','Ran_Manteau','Ran_Manteau','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('480012','Noblesse_Attack_Manteau','Noblesse_Attack_Manteau','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('480014','Noblesse_Magic_Manteau','Noblesse_Magic_Manteau','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('480016','Imperial_Attack_Manteau','Imperial_Attack_Manteau','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('480017','Imperial_Magic_Manteau','Imperial_Magic_Manteau','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('480018','Grace_Attack_Manteau','Grace_Attack_Manteau','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('480019','Grace_Magic_Manteau','Grace_Magic_Manteau','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('500001','Boost_Sword','Boost_Sword','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('500003','Light_Blade','Light_Blade','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('500004','Slate_Sword','Slate_Sword','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('510001','Boost_Dagger','Boost_Dagger','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('510002','Boost_Nindo','Boost_Nindo','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('510006','Fatalist','Fatalist','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('520000','Boost_Axe','Boost_Axe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('530000','Boost_Spear','Boost_Spear','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('540000','Boost_Spl_Book','Boost_Spl_Book','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('540001','Boost_Text','Boost_Text','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('550001','Boost_Soul_Rod','Boost_Soul_Rod','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('550002','Boost_Foxtail','Boost_Foxtail','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('550006','Ein_1H_Foxtail','Ein_1H_Foxtail','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('550007','Freezing_Rod','Freezing_Rod','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('560000','Boost_Knuckle','Boost_Knuckle','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('560005','Ray_Knuckle','Ray_Knuckle','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('570000','Boost_Guitar','Boost_Guitar','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('570002','Trumpet_Shell_K','Trumpet_Shell_K','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('580000','Boost_Whip','Boost_Whip','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('580002','Barb_Wire_K','Barb_Wire_K','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('590000','Boost_Hall','Boost_Hall','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('590002','Meteor_Striker','Meteor_Striker','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('590003','Saint_Hall','Saint_Hall','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('600001','Boost_TH_Sword','Boost_TH_Sword','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('600004','Dragonic_Slayer','Dragonic_Slayer','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('610000','Boost_Katar','Boost_Katar','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('610003','Blade_Katar','Blade_Katar','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('640000','Boost_Staff','Boost_Staff','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('640004','Blue_Crystal_Staff','Blue_Crystal_Staff','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('700001','Boost_Bow','Boost_Bow','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('700003','Scalet_Dragon_L_Bow','Scalet_Dragon_L_Bow','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('830000','Boost_Gatling','Boost_Gatling','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000008','RangerStone_Top2','RangerStone_Top2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000009','RangerStone_Middle2','RangerStone_Middle2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000010','RangerStone_Bottom2','RangerStone_Bottom2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000011','RangerStone_Robe2','RangerStone_Robe2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000012','MechanicStone_Top2','MechanicStone_Top2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000013','MechanicStone_Middle2','MechanicStone_Middle2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000014','MechanicStone_Bottom2','MechanicStone_Bottom2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000015','MechanicStone_Robe2','MechanicStone_Robe2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000016','HighpriestStone_Top2','HighpriestStone_Top2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000017','HighpriestStone_Middle2','HighpriestStone_Middle2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000018','HighpriestStone_Bottom2','HighpriestStone_Bottom2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000019','ArchbishopStone_Robe2','ArchbishopStone_Robe2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000213','WarlockStone_Robe2','WarlockStone_Robe2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000214','WarlockStone_Top2','WarlockStone_Top2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000215','WarlockStone_Middle2','WarlockStone_Middle2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000216','WarlockStone_Bottom2','WarlockStone_Bottom2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000217','RoyalguardStone_Robe2','RoyalguardStone_Robe2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000218','PaladinStone_Top2','PaladinStone_Top2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000219','PaladinStone_Middle2','PaladinStone_Middle2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000220','PaladinStone_Bottom2','PaladinStone_Bottom2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000221','GuillcrossStone_Robe2','GuillcrossStone_Robe2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000222','AssacrossStone_Top2','AssacrossStone_Top2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000223','AssacrossStone_Middle2','AssacrossStone_Middle2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000224','AssacrossStone_Bottom2','AssacrossStone_Bottom2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
diff --git a/sql-files/item_db_re.sql b/sql-files/item_db_re.sql
index 933ef3815..a6605c6fc 100644
--- a/sql-files/item_db_re.sql
+++ b/sql-files/item_db_re.sql
@@ -1159,9 +1159,11 @@ REPLACE INTO `item_db` VALUES ('1835','Spartacus','Spartacus','4','12','20','10'
REPLACE INTO `item_db` VALUES ('1836','Thanos_Knuckle','Thanatos Knuckles','4','12','20','10','1600','60','100','0','1','1','32768','56','2','2','4','120',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,6; bonus bVit,6; bonus bLuk,-6; bonus2 bSPDrainRate,10,5; bonus2 bHPDrainRate,10,5; bonus2 bHPLossRate,100,10000;','','heal -1000,0;');
REPLACE INTO `item_db` VALUES ('1839','Scarlet_Knuckle','Crimson Knuckle','4','12','20','10','1000','100','0','0','1','2','33024','63','2','2','3','70',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,((min(getrefine(),15)) ** (2)); if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }','','');
REPLACE INTO `item_db` VALUES ('1846','Combo_Battle_Glove_IL','Combo_Battle_Glove_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1847','Iron_Nail_K','Iron_Nail_K','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('1848','Rebeginer_SR_Nuckle','Rebeginer_SR_Nuckle','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('1862','Burning_Knuckle_OS','Burning_Knuckle_OS','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('1864','Evt_Iron_Nail_K','Evt_Iron_Nail_K','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1867','Ein_1HKNUCK','Ein_1HKNUCK','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('1900','Violin_of_Vicious_Mind','Violin of Vicious Mind','4','13','20','10','1300','130','50','0','1','1','524288','63','1','2','4','160',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,((min(getrefine(),15)) ** (2)); bonus bMatk,((min(getrefine(),15)) ** (2))/2;','','');
REPLACE INTO `item_db` VALUES ('1901','Violin','Violin','4','13','4000','2000','700','50','0','0','1','3','524288','63','1','2','1','2',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('1902','Violin_','Violin','4','13','4000','2000','700','50','0','0','1','4','524288','63','1','2','1','2',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -1278,8 +1280,10 @@ REPLACE INTO `item_db` VALUES ('2025','Scarlet_Staff','Staff of Crimson','4','23
REPLACE INTO `item_db` VALUES ('2026','Staff_of_Vicious_Mind','Staff of Vicious Mind','4','23','20','10','1000','100','200','0','1','1','8454660','63','2','34','4','160',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,6; bonus bMatk,((min(getrefine(),15)) ** (2)); bonus bUnbreakableWeapon,0;','','');
REPLACE INTO `item_db` VALUES ('2039','Wizardy_Staff_IL','Wizardy_Staff_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('2046','Rebeginer_WL_Staff','Rebeginer_WL_Staff','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('2048','Iron_Staff','Iron_Staff','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('2051','Survival_Staff_IL','Survival_Staff_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('2054','Evt_Iron_Staff','Evt_Iron_Staff','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('2058','Ein_BHSTAFF','Ein_BHSTAFF','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('2101','Guard','Guard','5','0','500','250','300','0','0','20','0','0','18446744073709551615','63','2','32','0','0',NULL,'1','0','1','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('2102','Guard_','Guard','5','0','500','250','300','0','0','20','0','1','18446744073709551615','63','2','32','0','0',NULL,'1','0','1','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('2103','Buckler','Buckler','5','0','14000','7000','600','0','0','40','0','0','972274','63','2','32','0','0',NULL,'1','0','2','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -5642,6 +5646,11 @@ REPLACE INTO `item_db` VALUES ('9109','Sweet_Drops_Egg','Sweet Drops Egg','7','0
REPLACE INTO `item_db` VALUES ('9111','Phreeoni_Egg','Phreeoni Egg','7','0','20','10','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('9112','Moonlight_Flower_Egg','Moonlight Flower Egg','7','0','20','10','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('9113','Skelion_Egg','Skelion Egg','7','0','20','10','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('9514','Ein_Ddbox','Ein_Ddbox','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('9523','Metal_Rifine_Ticket','Metal_Rifine_Ticket','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('9529','Ein_Ddbox2','Ein_Ddbox2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('9550','Gemstone_Of_Time','Gemstone_Of_Time','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('9551','Time_Unseal_Key','Time_Unseal_Key','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('10001','Skull_Helm','Skull Helm','8','0','20','10','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('10002','Monster_Oxygen_Mask','Monster Oxygen Mask','8','0','20','10','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('10003','Transparent_Headgear','Transparent Head Protector','8','0','20','10','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -6116,9 +6125,9 @@ REPLACE INTO `item_db` VALUES ('12283','Internet_Cafe2','Internet Cafe2','2','0'
REPLACE INTO `item_db` VALUES ('12284','Internet_Cafe3','Internet Cafe3','2','0','0','0','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','sc_start SC_FOOD_INT, 5400000, 8; sc_start SC_FOOD_VIT, 5400000, 4; sc_start SC_FOOD_DEX, 5400000, 6; sc_start SC_PLUSMAGICPOWER, 5400000, 40;','','');
REPLACE INTO `item_db` VALUES ('12285','Internet_Cafe4','Internet Cafe4','2','0','0','0','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','sc_start SC_FOOD_DEX, 5400000, 8; sc_start SC_FOOD_LUK, 5400000, 4; sc_start SC_FOOD_AGI, 5400000, 6; sc_start SC_PLUSATTACKPOWER, 5400000, 24; sc_start SC_PLUSMAGICPOWER, 5400000, 24;','','');
REPLACE INTO `item_db` VALUES ('12286','Masquerade_Ball_Box2','Masquerade Ball Box2','2','0','0','0','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','getrandgroupitem 12286,1;','','');
-REPLACE INTO `item_db` VALUES ('12287','Love_Angel','Love Angel Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont 1;','','');
-REPLACE INTO `item_db` VALUES ('12288','Squirrel','Squirrel Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont 2;','','');
-REPLACE INTO `item_db` VALUES ('12289','Gogo','Gogo Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont 3;','','');
+REPLACE INTO `item_db` VALUES ('12287','Love_Angel','Love Angel Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont(1);','','');
+REPLACE INTO `item_db` VALUES ('12288','Squirrel','Squirrel Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont(2);','','');
+REPLACE INTO `item_db` VALUES ('12289','Gogo','Gogo Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont(3);','','');
REPLACE INTO `item_db` VALUES ('12290','Mysterious_Can','Mysterious Can Magic Powder','2','0','10','5','100','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','1','0','0',NULL,'1',NULL,'0',NULL,'0','percentheal 5,0; skilleffect AL_BLESSING,0; sc_start SC_BLESSING,120000,5;','','');
REPLACE INTO `item_db` VALUES ('12291','Mysterious_PET_Bottle','Mysterious PET Bottle','2','0','10','5','100','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','1','0','0',NULL,'1',NULL,'0',NULL,'0','percentheal 5,0; skilleffect AL_INCAGI,0; sc_start SC_INC_AGI,120000,5;','','');
REPLACE INTO `item_db` VALUES ('12292','Unripe_Fruit','Unripe Yggdrasilberry','0','0','500','250','200','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','1','0','0',NULL,'0',NULL,'0',NULL,'0','percentheal 20,0;','','');
@@ -6133,12 +6142,12 @@ REPLACE INTO `item_db` VALUES ('12300','Wild_Rose_Scroll','Wild Rose Contract','
REPLACE INTO `item_db` VALUES ('12301','Doppelganger_Scroll','Doppelganger Contract','2','0','0','0','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','mercenary_create M_DOPPELGANGER, 1800000;','','');
REPLACE INTO `item_db` VALUES ('12302','Ygnizem_Scroll','Egnigem Cenia Contract','2','0','0','0','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','mercenary_create M_YGNIZEM, 1800000;','','');
REPLACE INTO `item_db` VALUES ('12303','Water_Of_Blessing','Blessing Of Water','2','0','0','0','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('12304','Picture_Diary','Diary Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont 4;','','');
-REPLACE INTO `item_db` VALUES ('12305','Mini_Heart','Mini Heart Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont 5;','','');
-REPLACE INTO `item_db` VALUES ('12306','Newcomer','Freshman Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont 6;','','');
-REPLACE INTO `item_db` VALUES ('12307','Kid','Kid Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont 7;','','');
-REPLACE INTO `item_db` VALUES ('12308','Magic_Castle','Magic Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont 8;','','');
-REPLACE INTO `item_db` VALUES ('12309','Bulging_Head','JJangu Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont 9;','','');
+REPLACE INTO `item_db` VALUES ('12304','Picture_Diary','Diary Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont(4);','','');
+REPLACE INTO `item_db` VALUES ('12305','Mini_Heart','Mini Heart Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont(5);','','');
+REPLACE INTO `item_db` VALUES ('12306','Newcomer','Freshman Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont(6);','','');
+REPLACE INTO `item_db` VALUES ('12307','Kid','Kid Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont(7);','','');
+REPLACE INTO `item_db` VALUES ('12308','Magic_Castle','Magic Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont(8);','','');
+REPLACE INTO `item_db` VALUES ('12309','Bulging_Head','JJangu Magic Powder','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','setfont(9);','','');
REPLACE INTO `item_db` VALUES ('12310','Spray_Of_Flowers','Spray Of Flowers','2','0','0','0','50','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','467',NULL,'1',NULL,'0',NULL,'0','sc_start SC_FOOD_BASICAVOIDANCE,600000,10;','','');
REPLACE INTO `item_db` VALUES ('12311','Large_Spray_Of_Flowers','Huge Spray Of Flowers','11','0','0','0','100','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','467',NULL,'1',NULL,'0',NULL,'0','itemskill ALL_PARTYFLEE,1;','','');
REPLACE INTO `item_db` VALUES ('12312','Thick_Manual50','Thick Battle Manual','2','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','sc_start SC_CASH_PLUSEXP,3600000,50;','','');
@@ -6545,15 +6554,15 @@ REPLACE INTO `item_db` VALUES ('12721','Poison_Numb','Toxin','0','0','2','1','20
REPLACE INTO `item_db` VALUES ('12722','Poison_Fever','Pyrexia','0','0','2','1','20','0','0','0','0','0','4096','56','2','0','0','0',NULL,'0','1','0','0','0','1','0','0',NULL,'0',NULL,'0',NULL,'0','specialeffect(EF_ENCHANTPOISON, AREA, playerattached()); sc_start SC_PYREXIA, 300000, 0, 10, SCFLAG_FIXEDTICK;','','');
REPLACE INTO `item_db` VALUES ('12723','Poison_Laughing','Magic Mushroom','0','0','2','1','20','0','0','0','0','0','4096','56','2','0','0','0',NULL,'0','1','0','0','0','1','0','0',NULL,'0',NULL,'0',NULL,'0','specialeffect(EF_ENCHANTPOISON, AREA, playerattached()); sc_start SC_MAGICMUSHROOM, 300000, 0, 10, SCFLAG_FIXEDTICK;','','');
REPLACE INTO `item_db` VALUES ('12724','Poison_Fatigue','Venom Bleed','0','0','2','1','20','0','0','0','0','0','4096','56','2','0','0','0',NULL,'0','1','0','0','0','1','0','0',NULL,'0',NULL,'0',NULL,'0','specialeffect(EF_ENCHANTPOISON, AREA, playerattached()); sc_start SC_VENOMBLEED, 15000, 0, 10, SCFLAG_FIXEDTICK;','','');
-REPLACE INTO `item_db` VALUES ('12725','Runstone_Nosiege','Nosiege Runestone','11','0','2','1','100','0','0','0','0','0','128','56','2','0','0','0',NULL,'0','1','0','0','0','0','120000','475',NULL,'1',NULL,'20','1','0','itemskill RK_REFRESH, 1;','','');
-REPLACE INTO `item_db` VALUES ('12726','Runstone_Rhydo','Rhydo Runestone','11','0','2','1','100','0','0','0','0','0','128','56','2','0','0','0',NULL,'0','1','0','0','0','0','30000','475',NULL,'1',NULL,'20','1','0','itemskill RK_CRUSHSTRIKE, 1;','','');
-REPLACE INTO `item_db` VALUES ('12727','Runstone_Verkana','Verkana Runestone','11','0','2','1','100','0','0','0','0','0','128','56','2','0','0','0',NULL,'0','1','0','0','0','0','60000','475',NULL,'1',NULL,'20','1','0','itemskill RK_MILLENNIUMSHIELD, 1;','','');
-REPLACE INTO `item_db` VALUES ('12728','Runstone_Isia','Isia Runestone','11','0','2','1','100','0','0','0','0','0','128','56','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'1',NULL,'20','1','0','itemskill RK_VITALITYACTIVATION, 1;','','');
-REPLACE INTO `item_db` VALUES ('12729','Runstone_Asir','Asir Runestone','11','0','2','1','100','0','0','0','0','0','128','56','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'1',NULL,'20','1','0','itemskill RK_FIGHTINGSPIRIT, 1;','','');
-REPLACE INTO `item_db` VALUES ('12730','Runstone_Urj','Urj Runestone','11','0','2','1','100','0','0','0','0','0','128','56','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'1',NULL,'20','1','0','itemskill RK_ABUNDANCE, 1;','','');
-REPLACE INTO `item_db` VALUES ('12731','Runstone_Turisus','Turisus Runestone','11','0','2','1','100','0','0','0','0','0','128','56','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'1',NULL,'20','1','0','itemskill RK_GIANTGROWTH, 1;','','');
-REPLACE INTO `item_db` VALUES ('12732','Runstone_Pertz','Pertz Runestone','11','0','2','1','100','0','0','0','0','0','128','56','2','0','0','0',NULL,'0','1','0','0','0','0','1000','475',NULL,'1',NULL,'20','1','0','itemskill RK_STORMBLAST, 1;','','');
-REPLACE INTO `item_db` VALUES ('12733','Runstone_Hagalas','Hagalas Runestone','11','0','2','1','100','0','0','0','0','0','128','56','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'1',NULL,'20','1','0','itemskill RK_STONEHARDSKIN, 1;','','');
+REPLACE INTO `item_db` VALUES ('12725','Runstone_Nosiege','Nosiege Runestone','11','0','2','1','100','0','0','0','0','0','128','56','2','0','0','0',NULL,'0','1','0','0','0','0','120000','475',NULL,'1',NULL,'60','1','0','itemskill RK_REFRESH, 1;','','');
+REPLACE INTO `item_db` VALUES ('12726','Runstone_Rhydo','Rhydo Runestone','11','0','2','1','100','0','0','0','0','0','128','56','2','0','0','0',NULL,'0','1','0','0','0','0','30000','475',NULL,'1',NULL,'60','1','0','itemskill RK_CRUSHSTRIKE, 1;','','');
+REPLACE INTO `item_db` VALUES ('12727','Runstone_Verkana','Verkana Runestone','11','0','2','1','100','0','0','0','0','0','128','56','2','0','0','0',NULL,'0','1','0','0','0','0','60000','475',NULL,'1',NULL,'60','1','0','itemskill RK_MILLENNIUMSHIELD, 1;','','');
+REPLACE INTO `item_db` VALUES ('12728','Runstone_Isia','Isia Runestone','11','0','2','1','100','0','0','0','0','0','128','56','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'1',NULL,'60','1','0','itemskill RK_VITALITYACTIVATION, 1;','','');
+REPLACE INTO `item_db` VALUES ('12729','Runstone_Asir','Asir Runestone','11','0','2','1','100','0','0','0','0','0','128','56','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'1',NULL,'0',NULL,'0','itemskill RK_FIGHTINGSPIRIT, 1;','','');
+REPLACE INTO `item_db` VALUES ('12730','Runstone_Urj','Urj Runestone','11','0','2','1','100','0','0','0','0','0','128','56','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'1',NULL,'60','1','0','itemskill RK_ABUNDANCE, 1;','','');
+REPLACE INTO `item_db` VALUES ('12731','Runstone_Turisus','Turisus Runestone','11','0','2','1','100','0','0','0','0','0','128','56','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'1',NULL,'0',NULL,'0','itemskill RK_GIANTGROWTH, 1;','','');
+REPLACE INTO `item_db` VALUES ('12732','Runstone_Pertz','Pertz Runestone','11','0','2','1','100','0','0','0','0','0','128','56','2','0','0','0',NULL,'0','1','0','0','0','0','1000','475',NULL,'1',NULL,'0',NULL,'0','itemskill RK_STORMBLAST, 1;','','');
+REPLACE INTO `item_db` VALUES ('12733','Runstone_Hagalas','Hagalas Runestone','11','0','2','1','100','0','0','0','0','0','128','56','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'1',NULL,'60','1','0','itemskill RK_STONEHARDSKIN, 1;','','');
REPLACE INTO `item_db` VALUES ('12734','Runstone_Quality','Quality Rough Runestone','0','0','2','1','100','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','1','0','0',NULL,'0',NULL,'0',NULL,'0','makerune 5;','','');
REPLACE INTO `item_db` VALUES ('12735','Runstone_Ancient','Ancient Rough Runestone','0','0','2','1','100','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','1','0','0',NULL,'0',NULL,'0',NULL,'0','makerune 11;','','');
REPLACE INTO `item_db` VALUES ('12736','Runstone_Mystic','Mystic Rough Runestone','0','0','2','1','100','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','1','0','0',NULL,'0',NULL,'0',NULL,'0','makerune 14;','','');
@@ -7019,6 +7028,8 @@ REPLACE INTO `item_db` VALUES ('13328','Huuma_Shuriken_of_Vicious_Mind','Huuma S
REPLACE INTO `item_db` VALUES ('13337','Huuma_Fluttering_Snow_IL','Huuma_Fluttering_Snow_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('13338','Huuma_Bird_Wing_IL','Huuma_Bird_Wing_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('13341','Rebeginer_KO_Humma','Rebeginer_KO_Humma','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('13345','Humma_Clear','Humma_Clear','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('13346','Ein_BHHuuma','Ein_BHHuuma','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('13400','Cutlas_','Cutlus','4','2','20','10','900','150','0','0','1','1','414946','63','2','2','4','40',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','skill SM_BASH,5; bonus bStr,2; bonus bDef,1;','','');
REPLACE INTO `item_db` VALUES ('13401','Excalibur_C','Excalibur','4','2','1','0','0','199','0','0','1','0','414946','63','2','2','4','0',NULL,'0','0','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus bInt,10; bonus bLuk,10; bonus bAtkEle,Ele_Holy;','','');
REPLACE INTO `item_db` VALUES ('13402','Cutlas_C','Cutlas','4','2','2','1','0','185','0','0','1','0','414946','63','2','2','4','0',NULL,'0','0','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','skill SM_BASH,5; bonus bStr,2; bonus bDef,1;','','');
@@ -7064,6 +7075,7 @@ REPLACE INTO `item_db` VALUES ('13454','Scarlet_Saber','Crimson Saber','4','2','
REPLACE INTO `item_db` VALUES ('13455','Saber_of_Vicious_Mind','Saber of Vicious Mind','4','2','20','10','1350','135','0','0','1','1','414947','63','2','2','4','160',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,((min(getrefine(),15)) ** (2));','','');
REPLACE INTO `item_db` VALUES ('13469','Immaterial_Sword_IL','Immaterial_Sword_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('13483','Rebeginer_GN_Sword','Rebeginer_GN_Sword','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('13485','Sword_Of_Bluefire','Sword_Of_Bluefire','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('13493','Cannon_Rapier_OS','Cannon_Rapier_OS','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('13495','Evt_Bluefire_Sword','Evt_Bluefire_Sword','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('13500','Insurance60_Package','Life Insurrance Box','18','0','20','10','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','getitem 14500,10;','','');
@@ -8121,13 +8133,28 @@ REPLACE INTO `item_db` VALUES ('15212','YSF01_Plate','YSF01_Plate','3','0','0','
REPLACE INTO `item_db` VALUES ('15246','True_Hunting_Mail','True_Hunting_Mail','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('15247','R_Hunting_Mail','R_Hunting_Mail','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('15250','Rebeginer_Suits','Rebeginer_Suits','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('15278','Overwhelm_Str_Armor','Overwhelm_Str_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('15279','Overwhelm_Int_Armor','Overwhelm_Int_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('15280','S_CriticalHit_Armor','S_CriticalHit_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('15346','Overwhelm_Luk_Armor','Overwhelm_Luk_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('15347','Overwhelm_Vit_Armor','Overwhelm_Vit_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('15348','Goibne_Armor_IL','Goibne_Armor_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('15353','Overwhelm_Agi_Armor','Overwhelm_Agi_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('15354','Overwhelm_Dex_Armor','Overwhelm_Dex_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('15376','Illusion_Armor_A','Illusion_Armor_A','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('15377','Illusion_Armor_B','Illusion_Armor_B','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('15378','Lava_Leather_Armor','Lava_Leather_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('15379','Lava_Leather_Suits','Lava_Leather_Suits','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('15380','Lava_Leather_Robe','Lava_Leather_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('15383','Time_Overload_Robe','Time_Overload_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('15388','Schmidt_Suits','Schmidt_Suits','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('15389','Schmidt_Manteau','Schmidt_Manteau','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('15391','DragonA_Red','DragonA_Red','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('15392','DragonA_Green','DragonA_Green','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('15393','DragonA_Gold','DragonA_Gold','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('15394','DragonA_Purple','DragonA_Purple','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('15395','DragonA_Blue','DragonA_Blue','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('15396','DragonA_Silver','DragonA_Silver','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('16000','Erde','Erde','4','8','20','10','500','130','0','0','1','2','312754','58','2','2','3','50',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSkillAtk,AM_ACIDTERROR,20; bonus2 bSkillAtk,AM_DEMONSTRATION,20; bonus bMaxSP,50; bonus bHealPower,10;','','');
REPLACE INTO `item_db` VALUES ('16001','Red_Square_Bag','Red Square Bag','4','8','20','10','500','130','0','0','1','2','312754','58','2','2','3','50',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxHP,200; bonus2 bSkillAtk,AM_ACIDTERROR,20; bonus2 bSkillAtk,AM_DEMONSTRATION,20; bonus2 bAddMonsterDropItem,501,50; bonus2 bAddMonsterDropItem,502,20; bonus2 bAddMonsterDropItem,503,20; bonus2 bAddMonsterDropItem,504,20; bonus2 bAddMonsterDropItem,505,10; if(readparam(bStr)>=95) { bonus2 bAddEff,Eff_Stun,500; }','','');
REPLACE INTO `item_db` VALUES ('16002','Stunner_C','Stunner','4','8','0','0','0','175','0','0','1','0','33040','63','2','2','3','0',NULL,'0','0','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddEff,Eff_Stun,1000; bonus2 bAddSize,Size_Small,40; bonus2 bAddSize,Size_Medium,40; bonus2 bAddSize,Size_Large,40;','','');
@@ -8169,6 +8196,7 @@ REPLACE INTO `item_db` VALUES ('16075','Rebeginer_NC_Mace','Rebeginer_NC_Mace','
REPLACE INTO `item_db` VALUES ('16076','Rebeginer_N2_Mace','Rebeginer_N2_Mace','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('16088','Saphir_Hall_OS','Saphir_Hall_OS','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('16089','Ultio_Spes_OS','Ultio_Spes_OS','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('16099','Ein_1HHAMMER','Ein_1HHAMMER','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('16131','Lady_Tanee_Doll_Box','Tanigumi Girl Doll Box','18','0','20','10','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','getitem 5526,1;','','');
REPLACE INTO `item_db` VALUES ('16132','Lunatic_Hat_Box','Lunatic Hat Box','18','0','20','10','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','getitem 5527,1;','','');
REPLACE INTO `item_db` VALUES ('16134','King_Frog_Hat_Box','Frog King Hat Box','18','0','20','10','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','getitem 5528,1;','','');
@@ -8584,6 +8612,7 @@ REPLACE INTO `item_db` VALUES ('18126','Ru_Blue_Bow','Blue Bow','4','11','20','1
REPLACE INTO `item_db` VALUES ('18128','Infinity_Bow','Infinity Bow','4','11','0','0','500','160','0','0','5','1','657480','56','2','34','4','100',NULL,'1','0','0','0','0','0','0','467',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('18130','Scarlet_Bow','Crimson Bow','4','11','20','10','1200','120','0','0','5','2','657416','63','2','34','3','7',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,((min(getrefine(),15)) ** (2)); if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }','','');
REPLACE INTO `item_db` VALUES ('18149','Balistar_IL','Balistar_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('18164','Royal_Bow_K','Royal_Bow_K','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('18165','Rebeginer_RN_Bow','Rebeginer_RN_Bow','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('18166','Rebeginer_WM_Bow','Rebeginer_WM_Bow','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('18170','Neev_Bow_Of_Rogue','Neev_Bow_Of_Rogue','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -8593,6 +8622,7 @@ REPLACE INTO `item_db` VALUES ('18179','MH_P89_OS','MH_P89_OS','3','0','0','0','
REPLACE INTO `item_db` VALUES ('18180','AC_B44_OS','AC_B44_OS','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('18182','Evt_Royal_Bow_K','Evt_Royal_Bow_K','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('18183','Evt_Narcis_Bow','Evt_Narcis_Bow','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('18190','Ein_BHBOW','Ein_BHBOW','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('18500','Cheer_Scarf6','Cheering scarf VI','5','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','1','0','0',NULL,'0','0','369','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableHelm,0; bonus2 bExpAddRace, RC_All, 60;','','');
REPLACE INTO `item_db` VALUES ('18501','Cheer_Scarf8','Cheering scarf VIII','5','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','1','0','0',NULL,'0','0','369','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableHelm,0; bonus2 bExpAddRace, RC_All, 80;','','');
REPLACE INTO `item_db` VALUES ('18502','Cheer_Scarf10','Cheering scarf X','5','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','1','0','0',NULL,'0','0','369','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableHelm,0; bonus2 bExpAddRace, RC_All, 100;','','');
@@ -9814,10 +9844,17 @@ REPLACE INTO `item_db` VALUES ('20514','C_Thanatos_Sword','C_Thanatos_Sword','3'
REPLACE INTO `item_db` VALUES ('20515','C_Magic_Circle','C_Magic_Circle','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('20516','C_Wings_of_Michael','C_Wings_of_Michael','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('20517','C_GiantCatBag_TW','C_GiantCatBag_TW','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('20519','C_Full_BloomCherry_Tree','C_Full_BloomCherry_Tree','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('20528','C_GoldButterfly_Wing','C_GoldButterfly_Wing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('20530','C_Wings_of_Gabriel','C_Wings_of_Gabriel','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('20533','C_PinkButterfly_Wing_T','C_PinkButterfly_Wing_T','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('20535','C_Digital_Space','C_Digital_Space','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('20543','C_Halloween_Poring_Bag','C_Halloween_Poring_Bag','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('20546','C_Backside_Ribbon_Bell','C_Backside_Ribbon_Bell','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('20570','C_HeartChocoBag','C_HeartChocoBag','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('20572','C_WingOfHeart','C_WingOfHeart','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('20576','C_Cat_Fork','C_Cat_Fork','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('20584','C_Big_Foxtail','C_Big_Foxtail','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('20600','Fantastic_Aura','Fantastic Aura','5','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','16384','0','0',NULL,'0','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableHelm,0;','','');
REPLACE INTO `item_db` VALUES ('20700','Egir_Manteau','Aegir Mantle','5','0','200000','100000','300','0','0','10','0','1','18446744073709551615','63','2','4','0','110',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'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);','','');
REPLACE INTO `item_db` VALUES ('20702','TE_Woe_Muffler','TE Woe Muffler','5','0','0','0','0','0','0','5','0','0','18446744073709551615','63','2','4','0','40',NULL,'0','0','0','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,5; bonus bUnbreakableGarment,1; bonus2 bAddRace,RC_Player,5; bonus2 bMagicAddRace,RC_Player,5; bonus2 bResEff,Eff_Freeze,25;','','');
@@ -9870,6 +9907,13 @@ REPLACE INTO `item_db` VALUES ('20934','Illusion_Engine_B','Illusion_Engine_B','
REPLACE INTO `item_db` VALUES ('20939','Time_Overload_Hood','Time_Overload_Hood','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('20940','Violet_Halo','Violet_Halo','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('20944','Fairy_Cloth','Fairy_Cloth','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('20946','Drag_Manteau','Drag_Manteau','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('20963','Temporal_M_Str','Temporal_M_Str','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('20964','Temporal_M_Agi','Temporal_M_Agi','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('20965','Temporal_M_Vit','Temporal_M_Vit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('20966','Temporal_M_Int','Temporal_M_Int','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('20967','Temporal_M_Dex','Temporal_M_Dex','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('20968','Temporal_M_Luk','Temporal_M_Luk','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('21000','Upg_Twohand_Sword','Upgrade Two-Hand Sword','4','3','20','10','1500','100','0','0','1','1','16514','63','2','34','3','0',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bBaseAtk,(getrefine()*12); bonus bMatk,(getrefine()*5); if(BaseLevel>70) { bonus bBaseAtk,(((BaseLevel-70)/10)*10); }','','');
REPLACE INTO `item_db` VALUES ('21001','Velum_Claymore','Vellum Claymore','4','3','20','10','3500','260','0','0','2','0','16514','63','2','34','4','95',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,80; bonus2 bIgnoreDefRate,RC_DemiPlayer,30; if(getrefine()>=6) { bonus2 bAddRace,RC_DemiPlayer,40; } if(getrefine()>=9) { autobonus2 \"{ bonus bShortWeaponDamageReturn,20; bonus bMagicDamageReturn,20; }\",200,1000,BF_WEAPON,\"{ specialeffect(EF_REFLECTSHIELD, AREA, playerattached()); }\"; }','','');
REPLACE INTO `item_db` VALUES ('21002','Velum_Katzbalger','Vellum Katzbalger','4','3','20','10','2500','100','0','0','1','0','16514','63','2','34','4','95',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus3 bHPVanishRate, 1000, 8, BF_NORMAL;','','');
@@ -9890,8 +9934,11 @@ REPLACE INTO `item_db` VALUES ('21016','Two_Handed_Sword_of_Vicious_Mind','Two-H
REPLACE INTO `item_db` VALUES ('21018','Lindy_Hop','Lindy Hop','4','3','20','10','3400','340','0','0','1','2','16514','56','2','34','4','170',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableWeapon,0; bonus bAtkRate,getrefine()/2; bonus bAspdRate,getrefine();','','');
REPLACE INTO `item_db` VALUES ('21019','Onimaru','Onimaru','4','3','0','0','4200','75','0','0','1','2','128','56','2','34','4','130',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,min(readparam(bStr),120); if(readparam(bStr)>=95) { bonus bAtk,40; } if(readparam(bStr)>=108) { bonus bAtk,40; } if(readparam(bStr)>=120) { bonus bAtk,40; } if(getrefine()>=7) { bonus3 bAutoSpell,NPC_WIDECURSE,5,10; } /* Custom - JRO */ if(getrefine()>=9) { skill LK_BERSERK,1; }','','');
REPLACE INTO `item_db` VALUES ('21037','Rebeginer_RK_T_Sword','Rebeginer_RK_T_Sword','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('21038','Oriental_Sword','Oriental_Sword','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('21047','Beam_Claymore_OS','Beam_Claymore_OS','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('21049','Evt_Oriental_Sword','Evt_Oriental_Sword','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('21050','Taegoolyeon_IL','Taegoolyeon_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('21054','Ein_BHSWORD','Ein_BHSWORD','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('22000','Temporal_Str_Boots','Temporal STR Boots','5','0','20','10','600','0','0','25','0','0','18446744073709551615','56','2','64','0','99',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxHP,300+((getrefine()/3)*100); bonus bMaxSP,30+((getrefine()/3)*10); bonus bAtk,(getrefine()/3)*7; if(readparam(bStr)>=120) { bonus bAtk,50; }','','');
REPLACE INTO `item_db` VALUES ('22001','Temporal_Int_Boots','Temporal INT Boots','5','0','20','10','600','0','0','20','0','0','18446744073709551615','56','2','64','0','99',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxHP,300+((getrefine()/3)*100); bonus bMaxSP,30+((getrefine()/3)*10); bonus bMatk,(getrefine()/3)*10; if(readparam(bInt)>=120) { bonus bMatk,60; bonus bMdef,5; }','','');
REPLACE INTO `item_db` VALUES ('22002','Temporal_Agi_Boots','Temporal AGI Boots','5','0','20','10','600','0','0','25','0','0','18446744073709551615','56','2','64','0','99',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxHP,300+((getrefine()/3)*100); bonus bMaxSP,30+((getrefine()/3)*10); bonus bAspdRate,(getrefine()/3)*3; if(readparam(bAgi)>=120) { bonus bAspd,1; }','','');
@@ -9943,12 +9990,13 @@ REPLACE INTO `item_db` VALUES ('22192','Goibne_Boots_IL','Goibne_Boots_IL','3','
REPLACE INTO `item_db` VALUES ('22196','Illusion_Leg_A','Illusion_Leg_A','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('22197','Illusion_Leg_B','Illusion_Leg_B','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('22204','Time_Overload_Boots','Time_Overload_Boots','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('22208','Dragon_Boots','Dragon_Boots','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('22508','Para_Team_Mark_','Eden Group Mark','11','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','1200000','507',NULL,'0',NULL,'0',NULL,'0','warp \"moc_para01\", 171, 115;','','');
REPLACE INTO `item_db` VALUES ('22514','Candy_Holder','Candy Holder','11','0','20','10','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('22515','Key_Of_Twisted_Time','Twisted Key of Time','3','0','10','5','300','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('22534','Closedmind_Box','Closed Mind Box','18','0','10','5','1000','0','0','0','0','0','18446744073709551615','63','2','0','0','1',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('22537','PrizeOfHero','Prize Of Hero','2','0','0','0','100','0','0','0','0','0','18446744073709551615','63','2','0','0','1',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('22540','Runstone_Lux','Lux Anima Rune','11','0','2','1','100','0','0','0','0','0','128','56','2','0','0','0',NULL,'0','1','0','0','0','0','60000','475',NULL,'0',NULL,'20','1','0','itemskill RK_LUXANIMA, 1;','','');
+REPLACE INTO `item_db` VALUES ('22540','Runstone_Lux','Lux Anima Rune','11','0','2','1','100','0','0','0','0','0','128','56','2','0','0','0',NULL,'0','1','0','0','0','0','60000','475',NULL,'0',NULL,'60','1','0','itemskill RK_LUXANIMA, 1;','','');
REPLACE INTO `item_db` VALUES ('22669','HALLOWEEN_G_BOX','Halloween Box','2','0','0','0','20','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','getrandgroupitem 22669,1;','','');
REPLACE INTO `item_db` VALUES ('22670','DARK_INVITATION','Invitation of Darkness','2','0','10','5','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','.@temp = rand(1,3); if (.@temp == 1) { specialeffect(EF_DEVIL, AREA, playerattached()); warp \"niflheim\",193,186; } else if (.@temp == 2) { specialeffect(EF_DEVIL, AREA, playerattached()); warp \"niflheim\",106,254; } else { specialeffect(EF_DEVIL, AREA, playerattached()); warp \"niflheim\",347,255; }','','');
REPLACE INTO `item_db` VALUES ('22675','Mysterious_Scroll','Mysterious Scroll','2','0','20','10','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','sc_start SC_FOOD_INT,3600000,30;','','');
@@ -10009,10 +10057,12 @@ REPLACE INTO `item_db` VALUES ('23357','Buy_Arbeit1_1Lv_','Buy_Arbeit1_1Lv_','3'
REPLACE INTO `item_db` VALUES ('23358','Buy_Arbeit1_2Lv_','Buy_Arbeit1_2Lv_','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23359','Buy_Arbeit1_3Lv_','Buy_Arbeit1_3Lv_','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23405','Green_Scroll_K2','Green_Scroll_K2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23436','Shadow_Refine_Hammer','Shadow_Refine_Hammer','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23440','Sentimental_Scroll','Sentimental_Scroll','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23444','July_Hair_Box','July_Hair_Box','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23446','Savage_Trap','Savage_Trap','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23473','Infinity_Scroll','Infinity_Scroll','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23474','InfinityShadow_Mix','InfinityShadow_Mix','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23475','Infinity_Drink','Infinity_Drink','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23484','Firstaid_Box_5','Firstaid_Box_5','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23485','Firstaid_Box_10','Firstaid_Box_10','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -10039,6 +10089,9 @@ REPLACE INTO `item_db` VALUES ('23505','Yellow_Potion_B_20','Yellow_Potion_B_20'
REPLACE INTO `item_db` VALUES ('23506','White_Potion_B_20','White_Potion_B_20','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23533','Vote_Rose','Vote_Rose','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23537','Bloody_Scroll','Bloody_Scroll','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23545','Silver_Statue','Silver_Statue','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23546','Cursed_Blood','Cursed_Blood','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23547','Gold_Statue','Gold_Statue','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23549','Snow_Cookie','Snow_Cookie','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23550','Winter_Cookie','Winter_Cookie','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23551','Festi_Cookie','Festi_Cookie','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -10060,11 +10113,22 @@ REPLACE INTO `item_db` VALUES ('23587','Rebeginer_Box_120','Rebeginer_Box_120','
REPLACE INTO `item_db` VALUES ('23618','2017_Special_Scroll','2017_Special_Scroll','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23650','Ice_Scroll','Ice_Scroll','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23661','2018_New_Year_Scroll','2018_New_Year_Scroll','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23665','PhysicalMagical_Mix','PhysicalMagical_Mix','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23666','ImmunedAthena_Mix','ImmunedAthena_Mix','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23667','HardChamption_Mix','HardChamption_Mix','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23668','KingbirdAncient_Mix','KingbirdAncient_Mix','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23669','CriticalHit_Mix','CriticalHit_Mix','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23675','Geffen_Magic_Scroll','Geffen_Magic_Scroll','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23676','Gray_Charcoal_Melee','Gray_Charcoal_Melee','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23677','Gray_Charcoal_Magic','Gray_Charcoal_Magic','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23678','Gray_Charcoal_Range','Gray_Charcoal_Range','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23679','Geffen_Magic_Scroll2','Geffen_Magic_Scroll2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23683','EVT_JAN02KR','EVT_JAN02KR','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23700','Lunar_New_Year_Scroll','Lunar_New_Year_Scroll','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23706','Reactor_Z','Reactor_Z','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23707','Reactor_Z_','Reactor_Z_','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23710','2018_Spring_Scroll','2018_Spring_Scroll','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23720','Shadow_Random_Mix','Shadow_Random_Mix','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23723','Melon_Bread','Melon_Bread','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23765','Costama_EggV02','Costama_EggV02','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23771','Mysterious_Plastic','Mysterious_Plastic','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -10072,15 +10136,101 @@ REPLACE INTO `item_db` VALUES ('23772','EP17_1_SPC01','EP17_1_SPC01','3','0','0'
REPLACE INTO `item_db` VALUES ('23773','EP17_1_SPC02','EP17_1_SPC02','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23774','EP17_1_SPC03','EP17_1_SPC03','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23775','EP17_1_SPC04','EP17_1_SPC04','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23776','EP17_1_SPC05','EP17_1_SPC05','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23777','EP17_1_SPC06','EP17_1_SPC06','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23778','EP17_1_SPC07','EP17_1_SPC07','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23779','EP17_1_SPC08','EP17_1_SPC08','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23780','EP17_1_SPC09','EP17_1_SPC09','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23781','EP17_1_SPC10','EP17_1_SPC10','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23815','Magma_Essence','Magma_Essence','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23817','Bs_Making_Scrolls','Bs_Making_Scrolls','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23818','Bs_Item_M_S_2','Bs_Item_M_S_2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23819','Bs_Item_M_S_8','Bs_Item_M_S_8','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23820','Bs_Item_M_S_10','Bs_Item_M_S_10','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23821','Bs_Item_M_S_11','Bs_Item_M_S_11','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23822','Bs_Item_M_S_34','Bs_Item_M_S_34','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23823','Bs_Item_M_S_41','Bs_Item_M_S_41','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23824','Bs_Item_M_S_42','Bs_Item_M_S_42','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23825','Bs_Item_M_S_43','Bs_Item_M_S_43','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23826','Bs_Item_M_S_44','Bs_Item_M_S_44','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23827','Bs_Sha_M_S_1','Bs_Sha_M_S_1','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23828','Bs_Sha_M_S_17','Bs_Sha_M_S_17','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23829','Bs_Sha_M_S_18','Bs_Sha_M_S_18','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23830','Bs_Sha_M_S_19','Bs_Sha_M_S_19','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23831','Bs_Sha_M_S_20','Bs_Sha_M_S_20','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23832','Bs_Item_M_S_4','Bs_Item_M_S_4','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23833','Bs_Item_M_S_6','Bs_Item_M_S_6','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23834','Bs_Item_M_S_7','Bs_Item_M_S_7','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23835','Bs_Item_M_S_12','Bs_Item_M_S_12','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23836','Bs_Item_M_S_13','Bs_Item_M_S_13','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23837','Bs_Item_M_S_15','Bs_Item_M_S_15','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23838','Bs_Item_M_S_28','Bs_Item_M_S_28','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23839','Bs_Item_M_S_29','Bs_Item_M_S_29','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23840','Bs_Item_M_S_31','Bs_Item_M_S_31','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23841','Bs_Item_M_S_32','Bs_Item_M_S_32','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23842','Bs_Item_M_S_33','Bs_Item_M_S_33','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23843','Bs_Item_M_S_36','Bs_Item_M_S_36','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23844','Bs_Item_M_S_37','Bs_Item_M_S_37','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23845','Bs_Item_M_S_38','Bs_Item_M_S_38','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23846','Bs_Item_M_S_39','Bs_Item_M_S_39','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23847','Bs_Item_M_S_40','Bs_Item_M_S_40','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23848','Bs_Item_M_S_45','Bs_Item_M_S_45','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23849','Bs_Item_M_S_46','Bs_Item_M_S_46','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23850','Bs_Item_M_S_47','Bs_Item_M_S_47','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23851','Bs_Item_M_S_48','Bs_Item_M_S_48','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23852','Bs_Item_M_S_49','Bs_Item_M_S_49','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23853','Bs_Item_M_S_50','Bs_Item_M_S_50','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23854','Bs_Sha_M_S_2','Bs_Sha_M_S_2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23855','Bs_Sha_M_S_5','Bs_Sha_M_S_5','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23856','Bs_Sha_M_S_6','Bs_Sha_M_S_6','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23857','Bs_Sha_M_S_7','Bs_Sha_M_S_7','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23858','Bs_Sha_M_S_8','Bs_Sha_M_S_8','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23859','Bs_Sha_M_S_13','Bs_Sha_M_S_13','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23860','Bs_Sha_M_S_15','Bs_Sha_M_S_15','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23861','Bs_Sha_M_S_16','Bs_Sha_M_S_16','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23862','Bs_Sha_M_S_23','Bs_Sha_M_S_23','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23863','Bs_Item_M_S_5','Bs_Item_M_S_5','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23864','Bs_Item_M_S_9','Bs_Item_M_S_9','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23865','Bs_Item_M_S_14','Bs_Item_M_S_14','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23866','Bs_Item_M_S_16','Bs_Item_M_S_16','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23867','Bs_Item_M_S_17','Bs_Item_M_S_17','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23868','Bs_Item_M_S_19','Bs_Item_M_S_19','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23869','Bs_Item_M_S_27','Bs_Item_M_S_27','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23870','Bs_Item_M_S_35','Bs_Item_M_S_35','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23871','Bs_Sha_M_S_9','Bs_Sha_M_S_9','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23872','Bs_Sha_M_S_10','Bs_Sha_M_S_10','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23873','Bs_Sha_M_S_11','Bs_Sha_M_S_11','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23874','Bs_Sha_M_S_21','Bs_Sha_M_S_21','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23875','Bs_Sha_M_S_22','Bs_Sha_M_S_22','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23876','Bs_Item_M_S_1','Bs_Item_M_S_1','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23877','Bs_Item_M_S_3','Bs_Item_M_S_3','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23878','StarSoul_Scroll','StarSoul_Scroll','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23879','Bs_Item_M_S_18','Bs_Item_M_S_18','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23880','Bs_Item_M_S_20','Bs_Item_M_S_20','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23881','Bs_Item_M_S_21','Bs_Item_M_S_21','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23882','Bs_Item_M_S_22','Bs_Item_M_S_22','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23883','Bs_Item_M_S_23','Bs_Item_M_S_23','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23884','Bs_Item_M_S_24','Bs_Item_M_S_24','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23885','Bs_Item_M_S_25','Bs_Item_M_S_25','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23886','Bs_Item_M_S_26','Bs_Item_M_S_26','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23887','Bs_Item_M_S_30','Bs_Item_M_S_30','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23888','Bs_Sha_M_S_3','Bs_Sha_M_S_3','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23889','Bs_Sha_M_S_4','Bs_Sha_M_S_4','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23890','Bs_Sha_M_S_12','Bs_Sha_M_S_12','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23891','Bs_Sha_M_S_14','Bs_Sha_M_S_14','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23892','Bs_Sha_M_S_24','Bs_Sha_M_S_24','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23893','Bs_Sha_M_S_25','Bs_Sha_M_S_25','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23894','Bs_Item_M_S_51','Bs_Item_M_S_51','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23897','2018_Jump_Thx_Box','2018_Jump_Thx_Box','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23898','Comp_Power_Booster','Comp_Power_Booster','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23899','Comp_Almighty','Comp_Almighty','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23900','Time_Overload_Box','Time_Overload_Box','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23901','110LVUP','110LVUP','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23921','Season_Evt_Reward','Season_Evt_Reward','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23926','Shadow_9_Refine_Hammer','Shadow_9_Refine_Hammer','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('23962','Malang_Cat_Can2','Malang_Cat_Can2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23967','EnchantStone_Recipe_9m','EnchantStone_Recipe_9m','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('23981','Abyss_Ddbox','Abyss_Ddbox','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('24000','T1_Shadow_Armor','T STR1 Armor Shadow','5','0','10','5','0','0','0','0','0','0','18446744073709551615','63','2','65536','0','0',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,1;','','');
REPLACE INTO `item_db` VALUES ('24001','T1_Shadow_Weapon','T DEX1 Weapon Shadow','5','0','10','5','0','0','0','0','0','0','18446744073709551615','63','2','131072','0','0',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,1;','','');
REPLACE INTO `item_db` VALUES ('24002','T1_Shadow_Shield','T LUK1 Shield Shadow','5','0','10','5','0','0','0','0','0','0','18446744073709551615','63','2','262144','0','0',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,1;','','');
@@ -10369,6 +10519,167 @@ REPLACE INTO `item_db` VALUES ('24418','S_Timeoverload_Shield','S_Timeoverload_S
REPLACE INTO `item_db` VALUES ('24419','S_Timeoverload_Shoes','S_Timeoverload_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('24420','S_Timeoverload_Earing','S_Timeoverload_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('24421','S_Timeoverload_Pandent','S_Timeoverload_Pandent','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24423','S_Tempest_Weapon','S_Tempest_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24424','S_Tempest_Armor','S_Tempest_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24425','S_PerfectSize_Weapon','S_PerfectSize_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24426','S_PerfectSize_Armor','S_PerfectSize_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24427','S_M_Exo_Co_Weapon','S_M_Exo_Co_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24428','S_M_Viv_Dr_Weapon','S_M_Viv_Dr_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24429','S_M_Sci_Hu_Weapon','S_M_Sci_Hu_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24430','S_M_Fis_In_Weapon','S_M_Fis_In_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24431','S_M_Exe_Ho_Weapon','S_M_Exe_Ho_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24432','S_Penetration_Weapon','S_Penetration_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24433','S_Penetration_Armor','S_Penetration_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24434','S_Exe_Ho_Weapon','S_Exe_Ho_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24435','S_Fis_In_Weapon','S_Fis_In_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24436','S_Sci_Hu_Weapon','S_Sci_Hu_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24437','S_Viv_Dr_Weapon','S_Viv_Dr_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24438','S_Exo_Co_Weapon','S_Exo_Co_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24439','S_Hasty_Weapon','S_Hasty_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24440','S_Sonic_Armor','S_Sonic_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24441','S_Sonic_Shield','S_Sonic_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24442','S_Sonic_Shoes','S_Sonic_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24443','S_Ignition_Weapon','S_Ignition_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24444','S_Ignition_Pendant','S_Ignition_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24445','S_Ignition_Earing','S_Ignition_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24446','S_W_Breath_Armor','S_W_Breath_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24447','S_W_Breath_Shield','S_W_Breath_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24448','S_W_Breath_Shoes','S_W_Breath_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24449','S_F_Breath_Weapon','S_F_Breath_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24450','S_F_Breath_Pendant','S_F_Breath_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24451','S_F_Breath_Earing','S_F_Breath_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24452','S_Cluster_Armor','S_Cluster_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24453','S_Cluster_Shield','S_Cluster_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24454','S_Cluster_Shoes','S_Cluster_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24455','S_Aimed_Weapon','S_Aimed_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24456','S_Aimed_Pendant','S_Aimed_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24457','S_Aimed_Earing','S_Aimed_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24458','S_Arrow_Armor','S_Arrow_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24459','S_Arrow_Shield','S_Arrow_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24460','S_Arrow_Shoes','S_Arrow_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24461','S_Shooting_Weapon','S_Shooting_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24462','S_Shooting_Pendant','S_Shooting_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24463','S_Shooting_Earing','S_Shooting_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24464','S_Tornado_Armor','S_Tornado_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24465','S_Tornado_Shield','S_Tornado_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24466','S_Tornado_Shoes','S_Tornado_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24467','S_Boomerang_Weapon','S_Boomerang_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24468','S_Boomerang_Pendant','S_Boomerang_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24469','S_Boomerang_Earing','S_Boomerang_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24470','S_Vulcan_Armor','S_Vulcan_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24471','S_Vulcan_Shield','S_Vulcan_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24472','S_Vulcan_Shoes','S_Vulcan_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24473','S_Arms_Weapon','S_Arms_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24474','S_Arms_Pendant','S_Arms_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24475','S_Arms_Earing','S_Arms_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24476','S_Rampage_Armor','S_Rampage_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24477','S_Rampage_Shield','S_Rampage_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24478','S_Rampage_Shoes','S_Rampage_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24479','S_Skynetblow_Weapon','S_Skynetblow_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24480','S_Skynetblow_Pendant','S_Skynetblow_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24481','S_Skynetblow_Earing','S_Skynetblow_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24482','S_Knucklearrow_Armor','S_Knucklearrow_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24483','S_Knucklearrow_Shield','S_Knucklearrow_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24484','S_Knucklearrow_Shoes','S_Knucklearrow_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24485','S_TigerCannon_Weapon','S_TigerCannon_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24486','S_Tigercannon_Pendant','S_Tigercannon_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24487','S_Tigercannon_Earing','S_Tigercannon_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24488','S_Duplelight_Armor','S_Duplelight_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24489','S_Duplelight_Shield','S_Duplelight_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24490','S_Duplelight_Shoes','S_Duplelight_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24491','S_Adoramus_Weapon','S_Adoramus_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24492','S_Adoramus_Pendant','S_Adoramus_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24493','S_Adoramus_Earing','S_Adoramus_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24494','S_Judex_Armor','S_Judex_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24495','S_Judex_Shield','S_Judex_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24496','S_Judex_Shoes','S_Judex_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24497','S_Magnus_Weapon','S_Magnus_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24498','S_Magnus_Pendant','S_Magnus_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24499','S_Magnus_Earing','S_Magnus_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24500','S_Rainstorm_Armor','S_Rainstorm_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24501','S_Rainstorm_Shield','S_Rainstorm_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24502','S_Rainstorm_Shoes','S_Rainstorm_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24503','S_Arrowvulcan_Weapon','S_Arrowvulcan_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24504','S_Arrowvulcan_Pendant','S_Arrowvulcan_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24505','S_Arrowvulcan_Earing','S_Arrowvulcan_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24506','S_Metalic_Armor','S_Metalic_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24507','S_Metalic_Shield','S_Metalic_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24508','S_Metalic_Shoes','S_Metalic_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24509','S_Reverberation_Weapon','S_Reverberation_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24510','S_Reverberation_Pendant','S_Reverberation_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24511','S_Reverberation_Earing','S_Reverberation_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24512','S_Jack_Armor','S_Jack_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24513','S_Jack_Shield','S_Jack_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24514','S_Jack_Shoes','S_Jack_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24515','S_Strain_Weapon','S_Strain_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24516','S_Strain_Pendant','S_Strain_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24517','S_Strain_Earing','S_Strain_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24518','S_Crimson_Armor','S_Crimson_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24519','S_Crimson_Shield','S_Crimson_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24520','S_Crimson_Shoes','S_Crimson_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24521','S_Chain_Weapon','S_Chain_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24522','S_Chain_Pendant','S_Chain_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24523','S_Chain_Earing','S_Chain_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24524','S_Triangle_Armor','S_Triangle_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24525','S_Triangle_Shield','S_Triangle_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24526','S_Triangle_Shoes','S_Triangle_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24527','S_Shadowspell_Weapon','S_Shadowspell_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24528','S_Shadowspell_Pendant','S_Shadowspell_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24529','S_Shadowspell_Earing','S_Shadowspell_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24530','S_Menace_Armor','S_Menace_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24531','S_Menace_Shield','S_Menace_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24532','S_Menace_Shoes','S_Menace_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24533','S_Paint_Weapon','S_Paint_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24534','S_Paint_Pendant','S_Paint_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24535','S_Paint_Earing','S_Paint_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24536','S_Rolling_Armor','S_Rolling_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24537','S_Rolling_Shield','S_Rolling_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24538','S_Rolling_Shoes','S_Rolling_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24539','S_Katar_Weapon','S_Katar_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24540','S_Katar_Pendant','S_Katar_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24541','S_Katar_Earing','S_Katar_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24542','S_Slash_Armor','S_Slash_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24543','S_Slash_Shield','S_Slash_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24544','S_Slash_Shoes','S_Slash_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24545','S_Ripper_Weapon','S_Ripper_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24546','S_Ripper_Pendant','S_Ripper_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24547','S_Ripper_Earing','S_Ripper_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24548','S_Dust_Armor','S_Dust_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24549','S_Dust_Shield','S_Dust_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24550','S_Dust_Shoes','S_Dust_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24551','S_Grave_Weapon','S_Grave_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24552','S_Grave_Pendant','S_Grave_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24553','S_Grave_Earing','S_Grave_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24554','S_Psychic_Armor','S_Psychic_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24555','S_Psychic_Shield','S_Psychic_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24556','S_Psychic_Shoes','S_Psychic_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24557','S_Varetyr_Weapon','S_Varetyr_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24558','S_Varetyr_Pendant','S_Varetyr_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24559','S_Varetyr_Earing','S_Varetyr_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24560','S_Cart_Tornado_Armor','S_Cart_Tornado_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24561','S_Cart_Tornado_Shield','S_Cart_Tornado_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24562','S_Cart_Tornado_Shoes','S_Cart_Tornado_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24563','S_Cannon_Cart_Weapon','S_Cannon_Cart_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24564','S_Cannon_Cart_Pendant','S_Cannon_Cart_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24565','S_Cannon_Cart_Earing','S_Cannon_Cart_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24566','S_Spore_Bomb_Armor','S_Spore_Bomb_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24567','S_Spore_Bomb_Shield','S_Spore_Bomb_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24568','S_Spore_Bomb_Shoes','S_Spore_Bomb_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24569','S_Crazy_Weapon','S_Crazy_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24570','S_Crazy_Pendant','S_Crazy_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24571','S_Crazy_Earing','S_Crazy_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24572','S_Brand_Armor','S_Brand_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24573','S_Brand_Shield','S_Brand_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24574','S_Brand_Shoes','S_Brand_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24575','S_Chain_Press_Weapon','S_Chain_Press_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24576','S_Chain_Press_Pendant','S_Chain_Press_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24577','S_Chain_Press_Earing','S_Chain_Press_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24578','S_Banish_Cannon_Armor','S_Banish_Cannon_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24579','S_Banish_Cannon_Shield','S_Banish_Cannon_Shield','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24580','S_Banish_Cannon_Shoes','S_Banish_Cannon_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24581','S_Genesis_Weapon','S_Genesis_Weapon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24582','S_Genesis_Pendant','S_Genesis_Pendant','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('24583','S_Genesis_Earing','S_Genesis_Earing','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('25258','BrokenArrow','BrokenArrow','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('25265','Shining_Spore','Shining_Spore','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('25266','Dried_Leaf_Of_Ygg','Dried_Leaf_Of_Ygg','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -10475,17 +10786,58 @@ REPLACE INTO `item_db` VALUES ('25735','Unsealing_Token','Unsealing_Token','3','
REPLACE INTO `item_db` VALUES ('25739','GH_Cursed_Crystal','GH_Cursed_Crystal','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('25740','GH_Cursed_Gemstone','GH_Cursed_Gemstone','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('25793','Inventory_Extension_Coupon','Inventory_Extension_Coupon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25797','SuraStone_Robe2','SuraStone_Robe2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25798','SuraStone_Bottom2','SuraStone_Bottom2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25799','SuraStone_Middle2','SuraStone_Middle2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25800','SuraStone_Top2','SuraStone_Top2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25801','SorcererStone_Robe2','SorcererStone_Robe2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25802','SorcererStone_Bottom2','SorcererStone_Bottom2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25803','SorcererStone_Middle2','SorcererStone_Middle2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25804','SorcererStone_Top2','SorcererStone_Top2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25805','ShadowchaserStone_Robe2','ShadowchaserStone_Robe2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25806','ShadowchasStone_Bottom2','ShadowchasStone_Bottom2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25807','ShadowchasStone_Middle2','ShadowchasStone_Middle2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25808','ShadowchaserStone_Top2','ShadowchaserStone_Top2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25815','Ein_SOLIDDUST','Ein_SOLIDDUST','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25816','Ein_RUSTHELM','Ein_RUSTHELM','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25817','Ein_EYEROCK','Ein_EYEROCK','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25842','SoulreaperStone_Robe','SoulreaperStone_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25843','SoullinkerStone_Top','SoullinkerStone_Top','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25844','SoullinkerStone_Middle','SoullinkerStone_Middle','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25845','SoullinkerStone_Bottom','SoullinkerStone_Bottom','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25846','GladiatorStone_Top','GladiatorStone_Top','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25847','GladiatorStone_Middle','GladiatorStone_Middle','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25848','GladiatorStone_Bottom','GladiatorStone_Bottom','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25849','StaremperorStone_Robe','StaremperorStone_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25850','NinjaStone_Top','NinjaStone_Top','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25851','NinjaStone_Middle','NinjaStone_Middle','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25852','NinjaStone_Bottom','NinjaStone_Bottom','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25853','KagerouStone_Robe','KagerouStone_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25854','OboroStone_Robe','OboroStone_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25855','GunslingerStone_Top','GunslingerStone_Top','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25856','GunslingerStone_Middle','GunslingerStone_Middle','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25857','GunslingerStone_Bottom','GunslingerStone_Bottom','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25858','RebellionStone_Robe','RebellionStone_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25859','DoramStone_Top','DoramStone_Top','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25860','DoramStone_Middle','DoramStone_Middle','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25861','DoramStone_Bottom','DoramStone_Bottom','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('25862','DoramStone_Robe','DoramStone_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('26007','Spectral_Spear_IL','Spectral_Spear_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('26015','Rebeginer_LG_Lance','Rebeginer_LG_Lance','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('26101','Paradise_Foxtail_Staff_III','Eden Group Foxtail Staff III','4','10','20','10','0','150','195','0','1','0','0','7','2','2','3','60',NULL,'0','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,5; bonus bInt,5; bonus bLongAtkRate,7;','','');
REPLACE INTO `item_db` VALUES ('26109','Staff_Of_Bordeaux_IL','Staff_Of_Bordeaux_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('26110','CandyCaneRod','CandyCaneRod','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('26111','Metal_Foxtail','Metal_Foxtail','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('26118','Shadow_Staff_K','Shadow_Staff_K','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('26119','Rebeginer_SO_Rod','Rebeginer_SO_Rod','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('26120','Rebeginer_DO_Rod','Rebeginer_DO_Rod','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('26151','Rutilus_Stick_OS','Rutilus_Stick_OS','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('26154','SoulWeight','SoulWeight','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('26155','MeawFoxtail','MeawFoxtail','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('26156','Evt_Shadow_Staff_K','Evt_Shadow_Staff_K','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('26162','Ein_1HWAND','Ein_1HWAND','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('26164','ElectricFox_OS','ElectricFox_OS','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('26215','Ein_1HWHIP','Ein_1HWHIP','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('27164','Faceworm_Queen_Card','Faceworm Queen Card','6','0','20','10','10','0','0','0','0','0','18446744073709551615','63','2','64','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus(bMaxHPrate, -10); bonus(bCritical, 15 + getrefine()); bonus(bCritAtkRate, getrefine());','','');
REPLACE INTO `item_db` VALUES ('27182','Captain_Felock_Card','Captain Felock Card','6','0','20','10','10','0','0','0','0','0','18446744073709551615','63','2','2','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus(bAtk, 30); bonus2(bSkillAtk, RL_AM_BLAST, getrefine() >= 10 ? 60 : 30); bonus2(bSkillAtk, RL_HAMMER_OF_GOD, getrefine() >= 10 ? 60 : 30);','','');
REPLACE INTO `item_db` VALUES ('28000','Thanos_Katar','Thanatos Katar','4','16','20','10','1800','220','80','0','1','1','4096','56','2','34','4','120',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,6; bonus bVit,6; bonus bLuk,-6; bonus2 bSPDrainRate,10,5; bonus2 bHPDrainRate,10,5; bonus2 bHPLossRate,100,10000;','','heal -1000,0;');
@@ -10498,14 +10850,18 @@ REPLACE INTO `item_db` VALUES ('28022','Infiltrator_IL','Infiltrator_IL','3','0'
REPLACE INTO `item_db` VALUES ('28023','Ghoul_Leg_IL','Ghoul_Leg_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28027','Rebeginer_GC_Katar','Rebeginer_GC_Katar','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28038','Meuchler_OS','Meuchler_OS','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('28039','Shiver_Katar_K','Shiver_Katar_K','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28040','Evt_Shiver_Katar_K','Evt_Shiver_Katar_K','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('28045','Ein_BHKATAR','Ein_BHKATAR','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28100','Thanos_Axe','Thanatos Axe','4','7','20','10','4000','300','80','0','1','1','279714','56','2','34','4','120',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,6; bonus bVit,6; bonus bLuk,-6; bonus2 bSPDrainRate,10,5; bonus2 bHPDrainRate,10,5; bonus2 bHPLossRate,100,10000;','','heal -1000,0;');
REPLACE INTO `item_db` VALUES ('28101','Tornado_Axe','Axe Tornado','4','7','500','250','4000','320','0','0','1','1','279714','56','2','34','4','100',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle,Ele_Wind; bonus2 bSkillCooldown,NC_AXETORNADO,-1000;','','');
REPLACE INTO `item_db` VALUES ('28105','Infinity_Two_handed_Axe','Infinity Two-handed Axe','4','7','20','10','500','265','0','0','1','1','279714','56','2','34','4','100',NULL,'1','0','0','0','0','0','0','467',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28106','Scarlet_Twohand_Axe','Crimson Two-handed Axe','4','7','20','10','2000','200','0','0','1','2','279714','63','2','34','3','70',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableWeapon,0; bonus bAtk,((min(getrefine(),15)) ** (2)); if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }','','');
REPLACE INTO `item_db` VALUES ('28107','Two_Handed_Axe_of_Vicious_Mind','Two-Handed Axe of Vicious Mind','4','7','20','10','2500','250','0','0','1','1','279714','63','2','34','4','160',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,((min(getrefine(),15)) ** (2)); bonus bUnbreakableWeapon,0;','','');
+REPLACE INTO `item_db` VALUES ('28130','Avenger','Avenger','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28136','Blasti_OS','Blasti_OS','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28137','Evt_Avenger','Evt_Avenger','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('28140','Ein_BHAXE','Ein_BHAXE','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28200','END_OF_HORIZON','End Of The Horizon','4','21','2700000','1350000','2400','410','0','0','9','1','1073741824','63','2','34','4','110',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28201','Southern_Cross_R','Southern Cross','4','21','2800000','1400000','2000','480','0','0','9','0','1073741824','63','2','34','4','141',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus3 bAutoSpell,GC_CROSSIMPACT,1,50;','','');
REPLACE INTO `item_db` VALUES ('28202','Southern_Cross_R_','Southern Cross','4','21','2800000','1400000','2000','480','0','0','9','1','1073741824','63','2','34','4','141',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus3 bAutoSpell,GC_CROSSIMPACT,1,50;','','');
@@ -10517,6 +10873,11 @@ REPLACE INTO `item_db` VALUES ('28242','Calf_Anaconda','Calf_Anaconda','3','0','
REPLACE INTO `item_db` VALUES ('28243','Calf_Python','Calf_Python','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28244','Gate_KeeperDD_IL','Gate_KeeperDD_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28253','HR_S55_OS','HR_S55_OS','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('28254','Butcher_IL','Butcher_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('28255','Master_Soul_Rifle','Master_Soul_Rifle','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('28256','Demon_S_Shot','Demon_S_Shot','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('28257','Golden_L_Launcher','Golden_L_Launcher','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('28258','The_Black_Gatling','The_Black_Gatling','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28306','Bless_Of_Moon','Luna\'s Blessing','5','0','0','0','100','0','0','5','0','0','18446744073709551615','63','2','136','0','0',NULL,'0','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,3; bonus bAllStats,1; bonus5 bAutoSpell,CG_TAROTCARD,5,100,BF_WEAPON|BF_MAGIC,1;','','');
REPLACE INTO `item_db` VALUES ('28310','Earring_Of_Sarah_L','Sarah\'s Left Earring','5','0','0','0','100','0','0','0','0','0','18446744073709551615','63','2','136','0','145',NULL,'0','0','0','0','0','0','0','467',NULL,'0',NULL,'0',NULL,'0','skill AL_HEAL,1;','','');
REPLACE INTO `item_db` VALUES ('28311','Earring_Of_Sarah_R','Sarah\'s Right Earring','5','0','0','0','100','0','0','0','0','0','18446744073709551615','63','2','136','0','145',NULL,'0','0','0','0','0','0','0','467',NULL,'0',NULL,'0',NULL,'0','skill AL_TELEPORT,1;','','');
@@ -10560,16 +10921,24 @@ REPLACE INTO `item_db` VALUES ('28612','Book_Of_The_Apo_IL','Book_Of_The_Apo_IL'
REPLACE INTO `item_db` VALUES ('28616','Rebeginer_AB_Bible','Rebeginer_AB_Bible','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28626','Tablet_IL','Tablet_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28629','Circuit_Board_OS','Circuit_Board_OS','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('28630','Demon_Hunting_Bible_K','Demon_Hunting_Bible_K','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28631','Time_Kamiji','Time_Kamiji','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('28635','Ein_1HBOOK','Ein_1HBOOK','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28703','Infinity_Dagger','Infinity Dagger','4','1','20','10','500','125','100','0','1','1','579821295','63','2','2','4','100',NULL,'1','0','0','0','0','0','0','467',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28704','Twilight_Desert_','Desert Twilight','4','1','20','10','600','130','0','0','1','4','4096','58','2','2','2','70',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28705','Scarlet_Dagger','Crimson Dagger','4','1','20','10','550','55','0','0','1','2','579821295','63','2','2','3','70',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,((min(getrefine(),15)) ** (2)); bonus bMatk,((min(getrefine(),15)) ** (2))/2; if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }','','');
REPLACE INTO `item_db` VALUES ('28706','Dagger_of_Vicious_Mind','Dagger of Vicious Mind','4','1','20','10','1050','105','50','0','1','1','579821295','63','2','2','4','160',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,((min(getrefine(),15)) ** (2)); bonus bMatk,((min(getrefine(),15)) ** (2))/2;','','');
REPLACE INTO `item_db` VALUES ('28725','Moonlight_Sword_IL','Moonlight_Sword_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28740','Rebeginer_SC_Dagger','Rebeginer_SC_Dagger','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('28744','Magic_Sword','Magic_Sword','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28745','Counter_Dagger_IL','Counter_Dagger_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28755','Kuroiro_OS','Kuroiro_OS','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28759','Evt_Magic_Sword','Evt_Magic_Sword','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('28762','Bazerald_IL','Bazerald_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('28763','Sharp_Wind_Sword','Sharp_Wind_Sword','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('28764','Fog_Dew_Sword','Fog_Dew_Sword','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('28771','Ein_1HDAGGER','Ein_1HDAGGER','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('28772','Ein_1HMAGGER','Ein_1HMAGGER','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28900','Praetorian_Shield','Praetorian Shield','5','0','20','10','3000','0','0','30','0','1','18446744073709551615','63','2','32','0','100',NULL,'1','0','1','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','skill LG_SHIELDSPELL,1; bonus3 bAutoSpellWhenHit,HP_ASSUMPTIO,3,20+(getrefine()); bonus bDef,getrefine()*10; bonus bMdef,getrefine();','','');
REPLACE INTO `item_db` VALUES ('28901','Cursed_Mad_Bunny','Cursed Mad Bunny','5','0','0','0','100','0','0','0','0','0','18446744073709551615','63','2','32','0','0',NULL,'1','0','1','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAspd,3; bonus bAtkRate,5; bonus bMatkRate,5; bonus bShortWeaponDamageReturn,10; autobonus \"{ bonus bMagicDamageReturn,60; }\",100,2000,BF_MAGIC,\"{ specialeffect(EF_NONE, AREA, playerattached()); }\"; if(getrefine()>6) { bonus bAtk,5; bonus bMatk,5; } if(getrefine()>8) { bonus bAtk,10; bonus bMatk,10; } if(getrefine()>11) { bonus bNoCastCancel,0; bonus bCritical,10; }','','');
REPLACE INTO `item_db` VALUES ('28902','Mad_Bunny_','Mad Bunny','5','0','0','0','100','0','0','0','0','1','18446744073709551615','63','2','32','0','0',NULL,'1','0','1','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkRate,5; bonus bMatkRate,5; bonus bShortWeaponDamageReturn,10; autobonus \"{ bonus bMagicDamageReturn,60; }\",100,2000,BF_MAGIC,\"{ specialeffect(EF_NONE, AREA, playerattached()); }\"; if(getrefine()>6) { bonus bAtk,5; bonus bMatk,5; } if(getrefine()>8) { bonus bAtk,10; bonus bMatk,10; } if(getrefine()>11) { bonus bNoCastCancel,0; bonus bCritical,10; }','','');
@@ -10635,6 +11004,7 @@ REPLACE INTO `item_db` VALUES ('31332','C_Khalitzburg_Helm_BL','C_Khalitzburg_He
REPLACE INTO `item_db` VALUES ('31368','Harvest_Festa_Hat','Harvest_Festa_Hat','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31369','Straight_Long_WH_','Straight_Long_WH_','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31370','Straight_Long_YL_','Straight_Long_YL_','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31382','C_Cat_Ears_Punkish','C_Cat_Ears_Punkish','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31387','Jjakk','Jjakk','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31389','White_Bird_Rose','White_Bird_Rose','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31390','Let_It_Snow','Let_It_Snow','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -10647,31 +11017,278 @@ REPLACE INTO `item_db` VALUES ('31432','C_Luwmin_Ice','C_Luwmin_Ice','3','0','0'
REPLACE INTO `item_db` VALUES ('31433','C_Astro_Circle','C_Astro_Circle','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31437','C_Baby_Penguin','C_Baby_Penguin','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31439','C_Fluffy_Heart_Earmuffs','C_Fluffy_Heart_Earmuffs','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31440','C_Snow_Bear_Food','C_Snow_Bear_Food','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31452','White_Cat','White_Cat','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31454','Love_Feeling','Love_Feeling','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31455','Enchanted_Dog','Enchanted_Dog','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31460','C_Blessing_Sky_Lantern','C_Blessing_Sky_Lantern','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31463','C_Flying_Drone','C_Flying_Drone','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31465','Egg_Minihat','Egg_Minihat','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31481','C_CatCoffeeCup_TW','C_CatCoffeeCup_TW','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31483','C_CatEarRibbon_TW','C_CatEarRibbon_TW','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31489','C_Bouquet_Hat','C_Bouquet_Hat','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31490','C_Poring_Muffler','C_Poring_Muffler','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31494','Volume_Low_Twin','Volume_Low_Twin','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31495','Lolita_Two_Side_Up','Lolita_Two_Side_Up','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31498','C_Elephangel_TH','C_Elephangel_TH','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31512','C_Panda_Rabbit','C_Panda_Rabbit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31516','Mini_Melon','Mini_Melon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31518','Pop_Popcorn_Hat_','Pop_Popcorn_Hat_','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31519','Slurp_Slurp_Hat','Slurp_Slurp_Hat','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31529','C_Happy_Rabbit_Ribbon','C_Happy_Rabbit_Ribbon','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31565','C_Princess_Ribbon_Crown','C_Princess_Ribbon_Crown','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31569','C_OpenAir_Headset','C_OpenAir_Headset','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31572','C_Mobile_Pursuit_System','C_Mobile_Pursuit_System','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31573','C_Mecha_Cat_Ears','C_Mecha_Cat_Ears','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31574','C_Cyber_Income','C_Cyber_Income','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31580','Autumnal_Flavor','Autumnal_Flavor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31586','C_Poporing_Muffler','C_Poporing_Muffler','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31589','GOLD_MAJESTIC_GOUT','GOLD_MAJESTIC_GOUT','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31600','C_Kishu_Inu','C_Kishu_Inu','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('31606','C_Autumn_Headband','C_Autumn_Headband','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31614','C_Fox','C_Fox','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31616','C_Sleep_Sheep_TW','C_Sleep_Sheep_TW','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31624','C_HeartOfCat_TW','C_HeartOfCat_TW','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31625','C_Protect_Cloth','C_Protect_Cloth','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31693','C_LunaticMuffler','C_LunaticMuffler','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31698','C_Pigtail_Red_Hood','C_Pigtail_Red_Hood','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31699','C_Smiling_Eyes','C_Smiling_Eyes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31765','C_Garnet_Tiara','C_Garnet_Tiara','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31766','C_Peony_Hair_Ornament','C_Peony_Hair_Ornament','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31787','C_SavageB_On_Shoulder','C_SavageB_On_Shoulder','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('31798','C_Baby_Panda','C_Baby_Panda','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('32005','Pole_Axe_IL','Pole_Axe_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('32013','Metal_Stick','Metal_Stick','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('32018','Undine_Spear_K','Undine_Spear_K','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('32019','Boost_Lance_OS','Boost_Lance_OS','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('32021','Evt_Undine_Spear_K','Evt_Undine_Spear_K','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('32026','Ein_1HSPEAR','Ein_1HSPEAR','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('32110','Ein_1HLUTE','Ein_1HLUTE','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('32207','Illusion_B_R','Illusion_B_R','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('32208','Illusion_B_L','Illusion_B_L','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('32209','Illusion_BC_R','Illusion_BC_R','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('32210','Illusion_BC_L','Illusion_BC_L','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('32221','Time_Overload_Ring','Time_Overload_Ring','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('32237','Celine_Brooch','Celine_Brooch','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('32301','Gold_Lux_IL','Gold_Lux_IL','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('32302','Crimson_Rose','Crimson_Rose','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('32303','Ein_1HGUN','Ein_1HGUN','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('32352','Ein_1HSWORD','Ein_1HSWORD','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100000','IDTest_Special','IDTest_Special','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100003','ILL_Piece_A','ILL_Piece_A','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100004','ILL_Piece_B','ILL_Piece_B','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100009','Joy_Of_Victory','Joy_Of_Victory','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100010','PerfectSize_Mix','PerfectSize_Mix','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100011','MagicPiercing_Mix','MagicPiercing_Mix','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100023','Ancient_Hero_Bravery','Ancient_Hero_Bravery','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100025','Ancient_Hero_Wisdom','Ancient_Hero_Wisdom','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100043','Boost_Up_1','Boost_Up_1','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100044','Boost_Up_2','Boost_Up_2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100053','Piercing_Mix','Piercing_Mix','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100058','Hasty_Mix','Hasty_Mix','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100060','EnchantStone_Recipe_4m','EnchantStone_Recipe_4m','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100128','Noblesse_Rifine_Ticket','Noblesse_Rifine_Ticket','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100129','Imperial_Rifine_Ticket','Imperial_Rifine_Ticket','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100130','Grace_Rifine_Ticket','Grace_Rifine_Ticket','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100131','Imperial_Convert1','Imperial_Convert1','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100132','Imperial_Convert2','Imperial_Convert2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100133','Grace_Convert1','Grace_Convert1','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100134','Grace_Convert2','Grace_Convert2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100135','Imperial_Convert3','Imperial_Convert3','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100136','Imperial_Convert4','Imperial_Convert4','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100137','Grace_Convert3','Grace_Convert3','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100138','Grace_Convert4','Grace_Convert4','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100142','Abyss_Ddbox2','Abyss_Ddbox2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100144','Abyss_Ddbox3','Abyss_Ddbox3','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('100145','Abyss_Ddbox4','Abyss_Ddbox4','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('400002','Victory_Wing_Ear_','Victory_Wing_Ear_','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('400020','C_BeachBall','C_BeachBall','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('440000','C_SharkHead','C_SharkHead','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450001','Atker_Plate','Atker_Plate','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450002','Ele_Robe','Ele_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450003','Defn_Robe','Defn_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450004','Ran_Suits','Ran_Suits','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450018','Noblesse_Breath_Armor','Noblesse_Breath_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450019','Noblesse_Knight_Armor','Noblesse_Knight_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450020','Noblesse_Spear_Armor','Noblesse_Spear_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450021','Noblesse_Genesis_Armor','Noblesse_Genesis_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450022','Noblesse_Sharp_Suit','Noblesse_Sharp_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450023','Noblesse_Aim_Suit','Noblesse_Aim_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450024','Noblesse_Severe_Suit','Noblesse_Severe_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450025','Noblesse_Reverb_Suit','Noblesse_Reverb_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450026','Noblesse_Adora_Robe','Noblesse_Adora_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450027','Noblesse_Duple_Robe','Noblesse_Duple_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450028','Noblesse_Tonado_Armor','Noblesse_Tonado_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450029','Noblesse_Vulcan_Armor','Noblesse_Vulcan_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450030','Noblesse_Kart_Suit','Noblesse_Kart_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450031','Noblesse_Kart_Suit2','Noblesse_Kart_Suit2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450032','Noblesse_Rolling_Suit','Noblesse_Rolling_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450033','Noblesse_Assasin_Suit','Noblesse_Assasin_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450034','Noblesse_Fatal_Suit','Noblesse_Fatal_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450035','Noblesse_Stalker_Suit','Noblesse_Stalker_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450036','Noblesse_Picky_Robe','Noblesse_Picky_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450037','Noblesse_Carrot_Robe','Noblesse_Carrot_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450038','Noblesse_Trip_Suit','Noblesse_Trip_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450039','Noblesse_Firerain_Suit','Noblesse_Firerain_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450040','Noblesse_Crimson_Robe','Noblesse_Crimson_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450041','Noblesse_Frost_Robe','Noblesse_Frost_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450042','Noblesse_Psychic_Robe','Noblesse_Psychic_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450043','Noblesse_Dust_Robe','Noblesse_Dust_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450044','Noblesse_Sun_Suit','Noblesse_Sun_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450045','Noblesse_Moon_Suit','Noblesse_Moon_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450046','Noblesse_Ninja_Suit','Noblesse_Ninja_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450047','Noblesse_Kunai_Suit','Noblesse_Kunai_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450048','Noblesse_Swhoo_Robe','Noblesse_Swhoo_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450049','Noblesse_Explosion_Robe','Noblesse_Explosion_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450050','Noblesse_Knuckle_Suit','Noblesse_Knuckle_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450051','Noblesse_Tiger_Suit','Noblesse_Tiger_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450052','Imperial_Breath_Armor','Imperial_Breath_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450053','Imperial_Knight_Armor','Imperial_Knight_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450054','Imperial_Spear_Armor','Imperial_Spear_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450055','Imperial_Genesis_Armor','Imperial_Genesis_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450056','Imperial_Sharp_Suit','Imperial_Sharp_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450057','Imperial_Aim_Suit','Imperial_Aim_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450058','Imperial_Severe_Suit','Imperial_Severe_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450059','Imperial_Reverb_Suit','Imperial_Reverb_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450060','Imperial_Adora_Robe','Imperial_Adora_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450061','Imperial_Duple_Robe','Imperial_Duple_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450062','Imperial_Knuckle_Suit','Imperial_Knuckle_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450063','Imperial_Tiger_Suit','Imperial_Tiger_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450064','Imperial_Tonado_Armor','Imperial_Tonado_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450065','Imperial_Vulcan_Armor','Imperial_Vulcan_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450066','Imperial_Kart_Suit','Imperial_Kart_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450067','Imperial_Kart_Suit2','Imperial_Kart_Suit2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450068','Imperial_Rolling_Suit','Imperial_Rolling_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450069','Imperial_Assasin_Suit','Imperial_Assasin_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450070','Imperial_Fatal_Suit','Imperial_Fatal_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450071','Imperial_Stalker_Suit','Imperial_Stalker_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450072','Imperial_Picky_Robe','Imperial_Picky_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450073','Imperial_Carrot_Robe','Imperial_Carrot_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450074','Imperial_Trip_Suit','Imperial_Trip_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450075','Imperial_Firerain_Suit','Imperial_Firerain_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450076','Imperial_Crimson_Robe','Imperial_Crimson_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450077','Imperial_Frost_Robe','Imperial_Frost_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450078','Imperial_Psychic_Robe','Imperial_Psychic_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450079','Imperial_Dust_Robe','Imperial_Dust_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450080','Imperial_Sun_Suit','Imperial_Sun_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450081','Imperial_Moon_Suit','Imperial_Moon_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450082','Imperial_Ninja_Suit','Imperial_Ninja_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450083','Imperial_Kunai_Suit','Imperial_Kunai_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450084','Imperial_Swhoo_Robe','Imperial_Swhoo_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450085','Imperial_Explosion_Robe','Imperial_Explosion_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450086','Grace_Breath_Armor','Grace_Breath_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450087','Grace_Knight_Armor','Grace_Knight_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450088','Grace_Spear_Armor','Grace_Spear_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450089','Grace_Genesis_Armor','Grace_Genesis_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450090','Grace_Sharp_Suit','Grace_Sharp_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450091','Grace_Aim_Suit','Grace_Aim_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450092','Grace_Severe_Suit','Grace_Severe_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450093','Grace_Reverb_Suit','Grace_Reverb_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450094','Grace_Adora_Robe','Grace_Adora_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450095','Grace_Duple_Robe','Grace_Duple_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450096','Grace_Knuckle_Suit','Grace_Knuckle_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450097','Grace_Tiger_Suit','Grace_Tiger_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450098','Grace_Tonado_Armor','Grace_Tonado_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450099','Grace_Vulcan_Armor','Grace_Vulcan_Armor','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450100','Grace_Kart_Suit','Grace_Kart_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450101','Grace_Kart_Suit2','Grace_Kart_Suit2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450102','Grace_Rolling_Suit','Grace_Rolling_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450103','Grace_Assasin_Suit','Grace_Assasin_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450104','Grace_Fatal_Suit','Grace_Fatal_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450105','Grace_Stalker_Suit','Grace_Stalker_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450106','Grace_Picky_Robe','Grace_Picky_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450107','Grace_Carrot_Robe','Grace_Carrot_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450108','Grace_Trip_Suit','Grace_Trip_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450109','Grace_Firerain_Suit','Grace_Firerain_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450110','Grace_Crimson_Robe','Grace_Crimson_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450111','Grace_Frost_Robe','Grace_Frost_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450112','Grace_Psychic_Robe','Grace_Psychic_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450113','Grace_Dust_Robe','Grace_Dust_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450114','Grace_Sun_Suit','Grace_Sun_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450115','Grace_Moon_Suit','Grace_Moon_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450116','Grace_Ninja_Suit','Grace_Ninja_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450117','Grace_Kunai_Suit','Grace_Kunai_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450118','Grace_Swhoo_Robe','Grace_Swhoo_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450119','Grace_Explosion_Robe','Grace_Explosion_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450121','Noblesse_Snovice_Suit','Noblesse_Snovice_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450122','Noblesse_Snovice_Robe','Noblesse_Snovice_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450123','Imperial_Snovice_Suit','Imperial_Snovice_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450124','Imperial_Snovice_Robe','Imperial_Snovice_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450125','Grace_Snovice_Suit','Grace_Snovice_Suit','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('450126','Grace_Snovice_Robe','Grace_Snovice_Robe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('470000','Atker_Greave','Atker_Greave','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('470001','Ele_Shoes','Ele_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('470002','Defn_Shoes','Defn_Shoes','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('470003','Ran_Boots','Ran_Boots','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('470016','Noblesse_Attack_Boots','Noblesse_Attack_Boots','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('470017','Noblesse_Magic_Boots','Noblesse_Magic_Boots','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('470018','Imperial_Attack_Boots','Imperial_Attack_Boots','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('470019','Imperial_Magic_Boots','Imperial_Magic_Boots','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('470020','Grace_Attack_Boots','Grace_Attack_Boots','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('470021','Grace_Magic_Boots','Grace_Magic_Boots','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('480000','Atker_Manteau','Atker_Manteau','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('480001','Ele_Muffler','Ele_Muffler','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('480002','Defn_Muffler','Defn_Muffler','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('480003','Ran_Manteau','Ran_Manteau','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('480012','Noblesse_Attack_Manteau','Noblesse_Attack_Manteau','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('480014','Noblesse_Magic_Manteau','Noblesse_Magic_Manteau','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('480016','Imperial_Attack_Manteau','Imperial_Attack_Manteau','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('480017','Imperial_Magic_Manteau','Imperial_Magic_Manteau','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('480018','Grace_Attack_Manteau','Grace_Attack_Manteau','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('480019','Grace_Magic_Manteau','Grace_Magic_Manteau','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('500001','Boost_Sword','Boost_Sword','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('500003','Light_Blade','Light_Blade','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('500004','Slate_Sword','Slate_Sword','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('510001','Boost_Dagger','Boost_Dagger','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('510002','Boost_Nindo','Boost_Nindo','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('510006','Fatalist','Fatalist','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('520000','Boost_Axe','Boost_Axe','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('530000','Boost_Spear','Boost_Spear','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('540000','Boost_Spl_Book','Boost_Spl_Book','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('540001','Boost_Text','Boost_Text','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('550001','Boost_Soul_Rod','Boost_Soul_Rod','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('550002','Boost_Foxtail','Boost_Foxtail','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('550006','Ein_1H_Foxtail','Ein_1H_Foxtail','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('550007','Freezing_Rod','Freezing_Rod','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('560000','Boost_Knuckle','Boost_Knuckle','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('560005','Ray_Knuckle','Ray_Knuckle','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('570000','Boost_Guitar','Boost_Guitar','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('570002','Trumpet_Shell_K','Trumpet_Shell_K','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('580000','Boost_Whip','Boost_Whip','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('580002','Barb_Wire_K','Barb_Wire_K','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('590000','Boost_Hall','Boost_Hall','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('590002','Meteor_Striker','Meteor_Striker','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('590003','Saint_Hall','Saint_Hall','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('600001','Boost_TH_Sword','Boost_TH_Sword','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('600004','Dragonic_Slayer','Dragonic_Slayer','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('610000','Boost_Katar','Boost_Katar','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('610003','Blade_Katar','Blade_Katar','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('640000','Boost_Staff','Boost_Staff','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('640004','Blue_Crystal_Staff','Blue_Crystal_Staff','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('700001','Boost_Bow','Boost_Bow','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('700003','Scalet_Dragon_L_Bow','Scalet_Dragon_L_Bow','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('830000','Boost_Gatling','Boost_Gatling','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000008','RangerStone_Top2','RangerStone_Top2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000009','RangerStone_Middle2','RangerStone_Middle2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000010','RangerStone_Bottom2','RangerStone_Bottom2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000011','RangerStone_Robe2','RangerStone_Robe2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000012','MechanicStone_Top2','MechanicStone_Top2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000013','MechanicStone_Middle2','MechanicStone_Middle2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000014','MechanicStone_Bottom2','MechanicStone_Bottom2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000015','MechanicStone_Robe2','MechanicStone_Robe2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000016','HighpriestStone_Top2','HighpriestStone_Top2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000017','HighpriestStone_Middle2','HighpriestStone_Middle2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000018','HighpriestStone_Bottom2','HighpriestStone_Bottom2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000019','ArchbishopStone_Robe2','ArchbishopStone_Robe2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000213','WarlockStone_Robe2','WarlockStone_Robe2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000214','WarlockStone_Top2','WarlockStone_Top2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000215','WarlockStone_Middle2','WarlockStone_Middle2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000216','WarlockStone_Bottom2','WarlockStone_Bottom2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000217','RoyalguardStone_Robe2','RoyalguardStone_Robe2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000218','PaladinStone_Top2','PaladinStone_Top2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000219','PaladinStone_Middle2','PaladinStone_Middle2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000220','PaladinStone_Bottom2','PaladinStone_Bottom2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000221','GuillcrossStone_Robe2','GuillcrossStone_Robe2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000222','AssacrossStone_Top2','AssacrossStone_Top2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000223','AssacrossStone_Middle2','AssacrossStone_Middle2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('1000224','AssacrossStone_Bottom2','AssacrossStone_Bottom2','3','0','0','0','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
diff --git a/sql-files/main.sql b/sql-files/main.sql
index e364ec778..27839afa3 100644
--- a/sql-files/main.sql
+++ b/sql-files/main.sql
@@ -930,6 +930,7 @@ INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1546059075); -- 2018-12-2
INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1554760320); -- 2019-04-08--21-52.sql
INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1556147483); -- 2019-04-25--02-12.sql
INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1557414445); -- 2019-05-09--18-07.sql
+INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1565293394); -- 2019-08-08--19-43.sql
--
-- Table structure for table `storage`
diff --git a/sql-files/mob_db_re.sql b/sql-files/mob_db_re.sql
index 66b161f4c..dc1e3e18c 100644
--- a/sql-files/mob_db_re.sql
+++ b/sql-files/mob_db_re.sql
@@ -1411,6 +1411,7 @@ REPLACE INTO `mob_db` VALUES (2409,'DUMMY_50','Lv 50','Lv 50',50,99999999,1,0,0,
REPLACE INTO `mob_db` VALUES (2410,'DUMMY_100','Lv 100','Lv 100',100,99999999,1,0,0,0,0,0,90,90,0,0,0,0,0,0,1,1,1,0,20,32768,200,398,199,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);
REPLACE INTO `mob_db` VALUES (2411,'DUMMY_150','Lv 150','Lv 150',150,99999999,1,0,0,0,0,0,120,120,0,0,0,0,0,0,1,1,1,0,20,32768,200,398,199,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);
REPLACE INTO `mob_db` VALUES (2413,'DUMMY_10_FIRE','Lv 10 (Fire)','Lv 10 (Fire)',10,99999999,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,23,32768,200,398,199,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);
+REPLACE INTO `mob_db` VALUES (2414,'RUNAWAY_BOOK','Runaway Book','Runaway Book',1,10,1,1,1,1,6,9,1,1,1,1,1,0,1,1,10,12,0,0,20,12417,150,864,500,192,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);
REPLACE INTO `mob_db` VALUES (2464,'MG_ZOMBIE','Corrupted Steward','Corrupted Steward',130,135600,1,13332,15998,1,2364,444,15,15,44,22,77,25,88,22,10,12,1,1,29,14741,400,2612,912,288,0,0,0,0,0,0,0,6609,1000,6610,1000,6608,10,938,1000,727,500,6755,500,0,0,0,0,0,0,0,0);
REPLACE INTO `mob_db` VALUES (2465,'MG_WRAITH','Corrupted Monk','Corrupted Monk',133,100168,1,13998,16796,1,999,2787,80,200,16,26,30,115,79,5,10,12,2,1,89,14229,300,1816,576,240,0,0,0,0,0,0,0,731,100,747,500,2206,100,6608,10,6609,1000,6610,1000,6755,500,0,0,0,0,0,0);
REPLACE INTO `mob_db` VALUES (2466,'MG_GHOUL','Grand Chamberlain in Pa','Grand Chamberlain in Pa',132,208100,1,14222,17066,1,2965,666,30,30,88,44,88,21,95,44,10,12,1,1,49,14741,250,2456,912,504,0,0,0,0,0,0,0,756,100,2609,100,6608,10,6609,1000,6610,1000,7751,1000,6755,500,0,0,0,0,0,0);
diff --git a/sql-files/upgrades/2019-08-08--19-43.sql b/sql-files/upgrades/2019-08-08--19-43.sql
new file mode 100644
index 000000000..35faf4ace
--- /dev/null
+++ b/sql-files/upgrades/2019-08-08--19-43.sql
@@ -0,0 +1,95 @@
+#1565293394
+
+-- This file is part of Hercules.
+-- http://herc.ws - http://github.com/HerculesWS/Hercules
+--
+-- Copyright (C) 2019 Hercules Dev Team
+--
+-- Hercules is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ALTER TABLE `guild_castle` DROP PRIMARY KEY;
+ALTER TABLE `guild_castle` ADD COLUMN `castle_name` VARCHAR(24) AFTER `castle_id`;
+UPDATE `guild_castle` SET `castle_name` = 'aldeg_cas01' WHERE castle_id = 0;
+UPDATE `guild_castle` SET `castle_name` = 'aldeg_cas02' WHERE castle_id = 1;
+UPDATE `guild_castle` SET `castle_name` = 'aldeg_cas03' WHERE castle_id = 2;
+UPDATE `guild_castle` SET `castle_name` = 'aldeg_cas04' WHERE castle_id = 3;
+UPDATE `guild_castle` SET `castle_name` = 'aldeg_cas05' WHERE castle_id = 4;
+UPDATE `guild_castle` SET `castle_name` = 'gefg_cas01' WHERE castle_id = 5;
+UPDATE `guild_castle` SET `castle_name` = 'gefg_cas02' WHERE castle_id = 6;
+UPDATE `guild_castle` SET `castle_name` = 'gefg_cas03' WHERE castle_id = 7;
+UPDATE `guild_castle` SET `castle_name` = 'gefg_cas04' WHERE castle_id = 8;
+UPDATE `guild_castle` SET `castle_name` = 'gefg_cas05' WHERE castle_id = 9;
+UPDATE `guild_castle` SET `castle_name` = 'payg_cas01' WHERE castle_id = 10;
+UPDATE `guild_castle` SET `castle_name` = 'payg_cas02' WHERE castle_id = 11;
+UPDATE `guild_castle` SET `castle_name` = 'payg_cas03' WHERE castle_id = 12;
+UPDATE `guild_castle` SET `castle_name` = 'payg_cas04' WHERE castle_id = 13;
+UPDATE `guild_castle` SET `castle_name` = 'payg_cas05' WHERE castle_id = 14;
+UPDATE `guild_castle` SET `castle_name` = 'prtg_cas01' WHERE castle_id = 15;
+UPDATE `guild_castle` SET `castle_name` = 'prtg_cas02' WHERE castle_id = 16;
+UPDATE `guild_castle` SET `castle_name` = 'prtg_cas03' WHERE castle_id = 17;
+UPDATE `guild_castle` SET `castle_name` = 'prtg_cas04' WHERE castle_id = 18;
+UPDATE `guild_castle` SET `castle_name` = 'prtg_cas05' WHERE castle_id = 19;
+UPDATE `guild_castle` SET `castle_name` = 'nguild_alde' WHERE castle_id = 20;
+UPDATE `guild_castle` SET `castle_name` = 'nguild_gef' WHERE castle_id = 21;
+UPDATE `guild_castle` SET `castle_name` = 'nguild_pay' WHERE castle_id = 22;
+UPDATE `guild_castle` SET `castle_name` = 'nguild_prt' WHERE castle_id = 23;
+UPDATE `guild_castle` SET `castle_name` = 'schg_cas01' WHERE castle_id = 24;
+UPDATE `guild_castle` SET `castle_name` = 'schg_cas02' WHERE castle_id = 25;
+UPDATE `guild_castle` SET `castle_name` = 'schg_cas03' WHERE castle_id = 26;
+UPDATE `guild_castle` SET `castle_name` = 'schg_cas04' WHERE castle_id = 27;
+UPDATE `guild_castle` SET `castle_name` = 'schg_cas05' WHERE castle_id = 28;
+UPDATE `guild_castle` SET `castle_name` = 'arug_cas01' WHERE castle_id = 29;
+UPDATE `guild_castle` SET `castle_name` = 'arug_cas02' WHERE castle_id = 30;
+UPDATE `guild_castle` SET `castle_name` = 'arug_cas03' WHERE castle_id = 31;
+UPDATE `guild_castle` SET `castle_name` = 'arug_cas04' WHERE castle_id = 32;
+UPDATE `guild_castle` SET `castle_name` = 'arug_cas05' WHERE castle_id = 33;
+
+-- Change the castle ids
+UPDATE `guild_castle` SET `castle_id` = 1 WHERE castle_name = 'prtg_cas01';
+UPDATE `guild_castle` SET `castle_id` = 2 WHERE castle_name = 'prtg_cas02';
+UPDATE `guild_castle` SET `castle_id` = 3 WHERE castle_name = 'prtg_cas03';
+UPDATE `guild_castle` SET `castle_id` = 4 WHERE castle_name = 'prtg_cas04';
+UPDATE `guild_castle` SET `castle_id` = 5 WHERE castle_name = 'prtg_cas05';
+UPDATE `guild_castle` SET `castle_id` = 6 WHERE castle_name = 'aldeg_cas01';
+UPDATE `guild_castle` SET `castle_id` = 7 WHERE castle_name = 'aldeg_cas02';
+UPDATE `guild_castle` SET `castle_id` = 8 WHERE castle_name = 'aldeg_cas03';
+UPDATE `guild_castle` SET `castle_id` = 9 WHERE castle_name = 'aldeg_cas04';
+UPDATE `guild_castle` SET `castle_id` = 10 WHERE castle_name = 'aldeg_cas05';
+UPDATE `guild_castle` SET `castle_id` = 11 WHERE castle_name = 'gefg_cas01';
+UPDATE `guild_castle` SET `castle_id` = 12 WHERE castle_name = 'gefg_cas02';
+UPDATE `guild_castle` SET `castle_id` = 13 WHERE castle_name = 'gefg_cas03';
+UPDATE `guild_castle` SET `castle_id` = 14 WHERE castle_name = 'gefg_cas04';
+UPDATE `guild_castle` SET `castle_id` = 15 WHERE castle_name = 'gefg_cas05';
+UPDATE `guild_castle` SET `castle_id` = 16 WHERE castle_name = 'payg_cas01';
+UPDATE `guild_castle` SET `castle_id` = 17 WHERE castle_name = 'payg_cas02';
+UPDATE `guild_castle` SET `castle_id` = 18 WHERE castle_name = 'payg_cas03';
+UPDATE `guild_castle` SET `castle_id` = 19 WHERE castle_name = 'payg_cas04';
+UPDATE `guild_castle` SET `castle_id` = 20 WHERE castle_name = 'payg_cas05';
+UPDATE `guild_castle` SET `castle_id` = 21 WHERE castle_name = 'arug_cas01';
+UPDATE `guild_castle` SET `castle_id` = 22 WHERE castle_name = 'arug_cas02';
+UPDATE `guild_castle` SET `castle_id` = 23 WHERE castle_name = 'arug_cas03';
+UPDATE `guild_castle` SET `castle_id` = 24 WHERE castle_name = 'arug_cas04';
+UPDATE `guild_castle` SET `castle_id` = 25 WHERE castle_name = 'arug_cas05';
+UPDATE `guild_castle` SET `castle_id` = 26 WHERE castle_name = 'schg_cas01';
+UPDATE `guild_castle` SET `castle_id` = 27 WHERE castle_name = 'schg_cas02';
+UPDATE `guild_castle` SET `castle_id` = 29 WHERE castle_name = 'schg_cas04';
+UPDATE `guild_castle` SET `castle_id` = 28 WHERE castle_name = 'schg_cas03';
+UPDATE `guild_castle` SET `castle_id` = 30 WHERE castle_name = 'schg_cas05';
+UPDATE `guild_castle` SET `castle_id` = 31 WHERE castle_name = 'nguild_prt';
+UPDATE `guild_castle` SET `castle_id` = 32 WHERE castle_name = 'nguild_alde';
+UPDATE `guild_castle` SET `castle_id` = 33 WHERE castle_name = 'nguild_gef';
+UPDATE `guild_castle` SET `castle_id` = 34 WHERE castle_name = 'nguild_pay';
+ALTER TABLE `guild_castle` ADD PRIMARY KEY (`castle_id`);
+ALTER TABLE `guild_castle` DROP COLUMN `castle_name`;
+INSERT INTO `sql_updates` (`timestamp`) VALUES (1565293394);
diff --git a/sql-files/upgrades/index.txt b/sql-files/upgrades/index.txt
index 3025a728c..85bd2a245 100644
--- a/sql-files/upgrades/index.txt
+++ b/sql-files/upgrades/index.txt
@@ -55,3 +55,4 @@
2019-04-08--21-52.sql
2019-04-25--02-12.sql
2019-05-09--18-07.sql
+2019-08-08--19-43.sql
diff --git a/src/char/char.c b/src/char/char.c
index cad28b373..c5afc0f63 100644
--- a/src/char/char.c
+++ b/src/char/char.c
@@ -2273,6 +2273,8 @@ static int char_char_married(int pl1, int pl2)
static int char_char_child(int parent_id, int child_id)
{
+ if (parent_id == 0 || child_id == 0) // Failsafe, avoild querys and fix EXP bug dividing with lower level chars
+ return 0;
if( SQL_ERROR == SQL->Query(inter->sql_handle, "SELECT `child` FROM `%s` WHERE `char_id` = '%d'", char_db, parent_id) )
Sql_ShowDebug(inter->sql_handle);
else if( SQL_SUCCESS == SQL->NextRow(inter->sql_handle) )
@@ -2292,6 +2294,8 @@ static int char_char_child(int parent_id, int child_id)
static int char_char_family(int cid1, int cid2, int cid3)
{
+ if (cid1 == 0 || cid2 == 0 || cid3 == 0) //Failsafe, and avoid querys where there is no sense to keep executing if any of the inputs are 0
+ return 0;
if( SQL_ERROR == SQL->Query(inter->sql_handle, "SELECT `char_id`,`partner_id`,`child` FROM `%s` WHERE `char_id` IN ('%d','%d','%d')", char_db, cid1, cid2, cid3) )
Sql_ShowDebug(inter->sql_handle);
else while( SQL_SUCCESS == SQL->NextRow(inter->sql_handle) )
diff --git a/src/char/int_guild.c b/src/char/int_guild.c
index 8e05c76e2..87cb3bee0 100644
--- a/src/char/int_guild.c
+++ b/src/char/int_guild.c
@@ -1612,7 +1612,6 @@ static int inter_guild_parse_frommap(int fd)
case 0x3034: mapif->parse_GuildLeave(fd, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10), RFIFOB(fd,14), RFIFOP(fd,15)); break;
case 0x3035: mapif->parse_GuildChangeMemberInfoShort(fd,RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOB(fd,14),RFIFOL(fd,15),RFIFOL(fd,19)); break;
case 0x3036: mapif->parse_BreakGuild(fd,RFIFOL(fd,2)); break;
- case 0x3037: mapif->parse_GuildMessage(fd, RFIFOL(fd,4), RFIFOL(fd,8), RFIFOP(fd,12), RFIFOW(fd,2)-12); break;
case 0x3039: mapif->parse_GuildBasicInfoChange(fd, RFIFOL(fd,4), RFIFOW(fd,8), RFIFOP(fd,10), RFIFOW(fd,2)-10); break;
case 0x303A: mapif->parse_GuildMemberInfoChange(fd, RFIFOL(fd,4), RFIFOL(fd,8), RFIFOL(fd,12), RFIFOW(fd,16), RFIFOP(fd,18), RFIFOW(fd,2)-18); break;
case 0x303B: mapif->parse_GuildPosition(fd, RFIFOL(fd,4), RFIFOL(fd,8), RFIFOP(fd,12)); break;
diff --git a/src/char/int_party.c b/src/char/int_party.c
index 8ee03ecc5..c27d708f2 100644
--- a/src/char/int_party.c
+++ b/src/char/int_party.c
@@ -599,7 +599,6 @@ static int inter_party_parse_frommap(int fd)
case 0x3024: mapif->parse_PartyLeave(fd, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10)); break;
case 0x3025: mapif->parse_PartyChangeMap(fd, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10), RFIFOW(fd,14), RFIFOB(fd,16), RFIFOW(fd,17)); break;
case 0x3026: mapif->parse_BreakParty(fd, RFIFOL(fd,2)); break;
- case 0x3027: mapif->parse_PartyMessage(fd, RFIFOL(fd,4), RFIFOL(fd,8), RFIFOP(fd,12), RFIFOW(fd,2)-12); break;
case 0x3029: mapif->parse_PartyLeaderChange(fd, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10)); break;
default:
return 0;
diff --git a/src/char/inter.c b/src/char/inter.c
index 64c840c16..264327289 100644
--- a/src/char/inter.c
+++ b/src/char/inter.c
@@ -53,9 +53,6 @@
#include <stdio.h>
#include <stdlib.h>
-#define WISDATA_TTL (60*1000) // Wis data Time To Live (60 seconds)
-#define WISDELLIST_MAX 256 // Number of elements in the list Delete data Wis
-
static struct inter_interface inter_s;
struct inter_interface *inter;
@@ -70,10 +67,10 @@ int party_share_level = 10;
// recv. packet list
static int inter_recv_packet_length[] = {
- -1,-1, 7,-1, -1,13,36, (2 + 4 + 4 + 4 + NAME_LENGTH), 0, 0, 0, 0, 0, 0, 0, 0, // 3000-
+ 0, 0, 0, 0, -1,13,36, (2 + 4 + 4 + 4 + NAME_LENGTH), 0, 0, 0, 0, 0, 0, 0, 0, // 3000-
6,-1, 6,-1, 0, 0, 0, 0, 10,-1, 0, 0, 0, 0, 0, 0, // 3010- Account Storage, Achievements [Smokexyz]
- -1,10,-1,14, 14,19, 6,-1, 14,14, 0, 0, 0, 0, 0, 0, // 3020- Party
- -1, 6,-1,-1, 55,23, 6,-1, 14,-1,-1,-1, 18,19,186,-1, // 3030-
+ -1,10,-1,14, 14,19, 6, 0, 14,14, 0, 0, 0, 0, 0, 0, // 3020- Party
+ -1, 6,-1,-1, 55,23, 6, 0, 14,-1,-1,-1, 18,19,186,-1, // 3030-
-1, 9, 0, 0, 10,10, 0, 0, 7, 6,10,10, 10,-1, 0, 0, // 3040- Clan System(3044-3045)
-1,-1,10,10, 0,-1,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 3050- Auction System [Zephyrus], Item Bound [Mhalicot]
6,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 3060- Quest system [Kevin] [Inkfish]
@@ -82,9 +79,6 @@ static int inter_recv_packet_length[] = {
-1,10,-1, 6, 0, 20,10,20, -1,6 + NAME_LENGTH, 0, 0, 0, 0, 0, 0, // 3090- Homunculus packets [albator], RoDEX packets
};
-static struct DBMap *wis_db = NULL; // int wis_id -> struct WisData*
-static int wis_dellist[WISDELLIST_MAX], wis_delnum;
-
#define MAX_JOB_NAMES 150
static char *msg_table[MAX_JOB_NAMES]; // messages 550 ~ 699 are job names
@@ -964,7 +958,6 @@ static int inter_init_sql(const char *file)
Sql_ShowDebug(inter->sql_handle);
}
- wis_db = idb_alloc(DB_OPT_RELEASE_DATA);
inter_guild->sql_init();
inter_storage->sql_init();
inter_party->sql_init();
@@ -985,8 +978,6 @@ static int inter_init_sql(const char *file)
// finalize
static void inter_final(void)
{
- wis_db->destroy(wis_db, NULL);
-
inter_guild->sql_final();
inter_storage->sql_final();
inter_party->sql_final();
@@ -1011,77 +1002,6 @@ static int inter_mapif_init(int fd)
//--------------------------------------------------------
-/**
- * Existence check of WISP data
- * @see DBApply
- */
-static int inter_check_ttl_wisdata_sub(union DBKey key, struct DBData *data, va_list ap)
-{
- int64 tick;
- struct WisData *wd = DB->data2ptr(data);
- nullpo_ret(wd);
- tick = va_arg(ap, int64);
-
- if (DIFF_TICK(tick, wd->tick) > WISDATA_TTL && wis_delnum < WISDELLIST_MAX)
- wis_dellist[wis_delnum++] = wd->id;
-
- return 0;
-}
-
-static int inter_check_ttl_wisdata(void)
-{
- int64 tick = timer->gettick();
- int i;
-
- do {
- wis_delnum = 0;
- wis_db->foreach(wis_db, inter->check_ttl_wisdata_sub, tick);
- for(i = 0; i < wis_delnum; i++) {
- struct WisData *wd = (struct WisData*)idb_get(wis_db, wis_dellist[i]);
- ShowWarning("inter: wis data id=%d time out : from %s to %s\n", wd->id, wd->src, wd->dst);
- // removed. not send information after a timeout. Just no answer for the player
- //mapif->wis_end(wd, 1); // flag: 0: success to send whisper, 1: target character is not logged in?, 2: ignored by target
- idb_remove(wis_db, wd->id);
- }
- } while(wis_delnum >= WISDELLIST_MAX);
-
- return 0;
-}
-
-static struct WisData *inter_add_wisdata(int fd, const unsigned char *src, const unsigned char *dst, const unsigned char *msg, int msg_len)
-{
- static int wisid = 0;
- struct WisData *wd;
-
- CREATE(wd, struct WisData, 1);
-
- // Whether the failure of previous wisp/page transmission (timeout)
- inter->check_ttl_wisdata();
-
- wd->id = ++wisid;
- wd->fd = fd;
- wd->len = msg_len;
- memcpy(wd->src, src, NAME_LENGTH);
- memcpy(wd->dst, dst, NAME_LENGTH);
- memcpy(wd->msg, msg, wd->len);
- wd->tick = timer->gettick();
- idb_put(wis_db, wd->id, wd);
-
- return wd;
-}
-
-static struct WisData *inter_get_wisdata(int id)
-{
- return idb_get(wis_db, id);
-}
-
-static void inter_remove_wisdata(int id)
-{
- idb_remove(wis_db, id);
-}
-
-//--------------------------------------------------------
-
/// Returns the length of the next complete packet to process,
/// or 0 if no complete packet exists in the queue.
///
@@ -1115,10 +1035,6 @@ static int inter_parse_frommap(int fd)
return 2;
switch(cmd) {
- case 0x3000: mapif->parse_broadcast(fd); break;
- case 0x3001: mapif->parse_WisRequest(fd); break;
- case 0x3002: mapif->parse_WisReply(fd); break;
- case 0x3003: mapif->parse_WisToGM(fd); break;
case 0x3004: mapif->parse_Registry(fd); break;
case 0x3005: mapif->parse_RegistryRequest(fd); break;
case 0x3006: mapif->parse_NameChangeRequest(fd); break;
@@ -1167,8 +1083,6 @@ void inter_defaults(void)
inter->log = inter_log;
inter->init_sql = inter_init_sql;
inter->mapif_init = inter_mapif_init;
- inter->check_ttl_wisdata_sub = inter_check_ttl_wisdata_sub;
- inter->check_ttl_wisdata = inter_check_ttl_wisdata;
inter->check_length = inter_check_length;
inter->parse_frommap = inter_parse_frommap;
inter->final = inter_final;
@@ -1176,7 +1090,4 @@ void inter_defaults(void)
inter->config_read_connection = inter_config_read_connection;
inter->accinfo = inter_accinfo;
inter->accinfo2 = inter_accinfo2;
- inter->add_wisdata = inter_add_wisdata;
- inter->get_wisdata = inter_get_wisdata;
- inter->remove_wisdata = inter_remove_wisdata;
}
diff --git a/src/char/inter.h b/src/char/inter.h
index 94ee3ab60..f97c619c0 100644
--- a/src/char/inter.h
+++ b/src/char/inter.h
@@ -30,12 +30,6 @@
struct Sql; // common/sql.h
struct config_t; // common/conf.h
-struct WisData {
- int id, fd, count, len;
- int64 tick;
- unsigned char src[24], dst[24], msg[512];
-};
-
/**
* inter interface
**/
@@ -54,8 +48,6 @@ struct inter_interface {
int (*log) (char* fmt, ...);
int (*init_sql) (const char *file);
int (*mapif_init) (int fd);
- int (*check_ttl_wisdata_sub) (union DBKey key, struct DBData *data, va_list ap);
- int (*check_ttl_wisdata) (void);
int (*check_length) (int fd, int length);
int (*parse_frommap) (int fd);
void (*final) (void);
@@ -66,9 +58,6 @@ struct inter_interface {
void (*accinfo2) (bool success, int map_fd, int u_fd, int u_aid, int account_id, const char *userid, const char *user_pass,
const char *email, const char *last_ip, const char *lastlogin, const char *pin_code, const char *birthdate,
int group_id, int logincount, int state);
- struct WisData *(*add_wisdata) (int fd, const unsigned char *src, const unsigned char *dst, const unsigned char *msg, int msg_len);
- struct WisData *(*get_wisdata) (int id);
- void (*remove_wisdata) (int id);
};
#ifdef HERCULES_CORE
diff --git a/src/char/mapif.c b/src/char/mapif.c
index 8f213ecb5..29be4eaa2 100644
--- a/src/char/mapif.c
+++ b/src/char/mapif.c
@@ -596,22 +596,6 @@ static int mapif_guild_broken(int guild_id, int flag)
return 0;
}
-// Send guild message
-static int mapif_guild_message(int guild_id, int account_id, const char *mes, int len, int sfd)
-{
- unsigned char buf[512];
- nullpo_ret(mes);
- if (len > 500)
- len = 500;
- WBUFW(buf, 0) = 0x3837;
- WBUFW(buf, 2) = len + 12;
- WBUFL(buf, 4) = guild_id;
- WBUFL(buf, 8) = account_id;
- memcpy(WBUFP(buf, 12), mes, len);
- mapif->sendallwos(sfd, buf, len + 12);
- return 0;
-}
-
// Send basic info
static int mapif_guild_basicinfochanged(int guild_id, int type, const void *data, int len)
{
@@ -810,12 +794,6 @@ static int mapif_parse_BreakGuild(int fd, int guild_id)
return 0;
}
-// Forward Guild message to others map servers
-static int mapif_parse_GuildMessage(int fd, int guild_id, int account_id, const char *mes, int len)
-{
- return mapif->guild_message(guild_id,account_id,mes,len, fd);
-}
-
/**
* Changes basic guild information
* The types are available in mmo.h::guild_basic_info
@@ -1319,20 +1297,6 @@ static int mapif_party_broken(int party_id, int flag)
return 0;
}
-//Remarks in the party
-static int mapif_party_message(int party_id, int account_id, const char *mes, int len, int sfd)
-{
- unsigned char buf[512];
- nullpo_ret(mes);
- WBUFW(buf, 0) = 0x3827;
- WBUFW(buf, 2) = len + 12;
- WBUFL(buf, 4) = party_id;
- WBUFL(buf, 8) = account_id;
- memcpy(WBUFP(buf, 12), mes, len);
- mapif->sendallwos(sfd, buf, len + 12);
- return 0;
-}
-
// Create Party
static int mapif_parse_CreateParty(int fd, const char *name, int item, int item2, const struct party_member *leader)
{
@@ -1408,12 +1372,6 @@ static int mapif_parse_BreakParty(int fd, int party_id)
return 0;
}
-//Party sending the message
-static int mapif_parse_PartyMessage(int fd, int party_id, int account_id, const char *mes, int len)
-{
- return mapif->party_message(party_id, account_id, mes, len, fd);
-}
-
static int mapif_parse_PartyLeaderChange(int fd, int party_id, int account_id, int char_id)
{
if (!inter_party->change_leader(party_id, account_id, char_id))
@@ -2034,67 +1992,6 @@ static void mapif_parse_accinfo(int fd)
inter->accinfo(u_fd, aid, castergroup, query, fd);
}
-// broadcast sending
-static int mapif_broadcast(const unsigned char *mes, int len, unsigned int fontColor, short fontType, short fontSize, short fontAlign, short fontY, int sfd)
-{
- unsigned char *buf = (unsigned char*)aMalloc((len)*sizeof(unsigned char));
-
- nullpo_ret(mes);
- Assert_ret(len >= 16);
- WBUFW(buf, 0) = 0x3800;
- WBUFW(buf, 2) = len;
- WBUFL(buf, 4) = fontColor;
- WBUFW(buf, 8) = fontType;
- WBUFW(buf, 10) = fontSize;
- WBUFW(buf, 12) = fontAlign;
- WBUFW(buf, 14) = fontY;
- memcpy(WBUFP(buf, 16), mes, len - 16);
- mapif->sendallwos(sfd, buf, len);
-
- aFree(buf);
- return 0;
-}
-
-// Wis sending
-static int mapif_wis_message(struct WisData *wd)
-{
- unsigned char buf[2048];
- nullpo_ret(wd);
- //if (wd->len > 2047-56) wd->len = 2047-56; //Force it to fit to avoid crashes. [Skotlex]
- if (wd->len < 0)
- wd->len = 0;
- if (wd->len >= (int)sizeof(wd->msg) - 1)
- wd->len = (int)sizeof(wd->msg) - 1;
-
- WBUFW(buf, 0) = 0x3801;
- WBUFW(buf, 2) = 56 + wd->len;
- WBUFL(buf, 4) = wd->id;
- memcpy(WBUFP(buf, 8), wd->src, NAME_LENGTH);
- memcpy(WBUFP(buf, 32), wd->dst, NAME_LENGTH);
- memcpy(WBUFP(buf, 56), wd->msg, wd->len);
- wd->count = mapif->sendall(buf, WBUFW(buf, 2));
-
- return 0;
-}
-
-static void mapif_wis_response(int fd, const unsigned char *src, int flag)
-{
- unsigned char buf[27];
- nullpo_retv(src);
- WBUFW(buf, 0) = 0x3802;
- memcpy(WBUFP(buf, 2), src, 24);
- WBUFB(buf, 26) = flag;
- mapif->send(fd, buf, 27);
-}
-
-// Wis sending result
-static int mapif_wis_end(struct WisData *wd, int flag)
-{
- nullpo_ret(wd);
- mapif->wis_response(wd->fd, wd->src, flag);
- return 0;
-}
-
#if 0
// Account registry transfer to map-server
static void mapif_account_reg(int fd, unsigned char *src)
@@ -2126,89 +2023,6 @@ static int mapif_disconnectplayer(int fd, int account_id, int char_id, int reaso
return 0;
}
-// broadcast sending
-static int mapif_parse_broadcast(int fd)
-{
- mapif->broadcast(RFIFOP(fd, 16), RFIFOW(fd, 2), RFIFOL(fd, 4), RFIFOW(fd, 8), RFIFOW(fd, 10), RFIFOW(fd, 12), RFIFOW(fd, 14), fd);
- return 0;
-}
-
-// Wisp/page request to send
-static int mapif_parse_WisRequest(int fd)
-{
- struct WisData* wd;
- char name[NAME_LENGTH];
- char *data;
- size_t len;
-
- if (fd <= 0) // check if we have a valid fd
- return 0;
-
- if (RFIFOW(fd, 2) - 52 >= sizeof(wd->msg)) {
- ShowWarning("inter: Wis message size too long.\n");
- return 0;
- } else if (RFIFOW(fd, 2) - 52 <= 0) { // normally, impossible, but who knows...
- ShowError("inter: Wis message doesn't exist.\n");
- return 0;
- }
-
- safestrncpy(name, RFIFOP(fd, 28), NAME_LENGTH); //Received name may be too large and not contain \0! [Skotlex]
-
- // search if character exists before to ask all map-servers
- if (!chr->name_exists(name, NULL)) {
- mapif->wis_response(fd, RFIFOP(fd, 4), 1);
- } else {
- // Character exists. So, ask all map-servers
-
- // to be sure of the correct name, rewrite it
- SQL->GetData(inter->sql_handle, 0, &data, &len);
- memset(name, 0, NAME_LENGTH);
- memcpy(name, data, min(len, NAME_LENGTH));
- // if source is destination, don't ask other servers.
- if (strncmp(RFIFOP(fd, 4), name, NAME_LENGTH) == 0) {
- mapif->wis_response(fd, RFIFOP(fd, 4), 1);
- } else {
- wd = inter->add_wisdata(fd, RFIFOP(fd, 4), RFIFOP(fd, 28), RFIFOP(fd, 52), RFIFOW(fd, 2) - 52);
- mapif->wis_message(wd);
- }
- }
-
- SQL->FreeResult(inter->sql_handle);
- return 0;
-}
-
-// Wisp/page transmission result
-static int mapif_parse_WisReply(int fd)
-{
- int id, flag;
- struct WisData *wd;
-
- id = RFIFOL(fd,2);
- flag = RFIFOB(fd,6);
- wd = inter->get_wisdata(id);
- if (wd == NULL)
- return 0; // This wisp was probably suppress before, because it was timeout of because of target was found on another map-server
-
- if ((--wd->count) <= 0 || flag != 1) {
- mapif->wis_end(wd, flag); // flag: 0: success to send whisper, 1: target character is not logged in?, 2: ignored by target
- inter->remove_wisdata(id);
- }
-
- return 0;
-}
-
-// Received wisp message from map-server for ALL gm (just copy the message and resends it to ALL map-servers)
-static int mapif_parse_WisToGM(int fd)
-{
- unsigned char buf[2048]; // 0x3003/0x3803 <packet_len>.w <wispname>.24B <min_gm_level>.w <message>.?B
-
- memcpy(WBUFP(buf,0), RFIFOP(fd,0), RFIFOW(fd,2)); // Message contains the NUL terminator (see intif_wis_message_to_gm())
- WBUFW(buf, 0) = 0x3803;
- mapif->sendall(buf, RFIFOW(fd,2));
-
- return 0;
-}
-
// Save account_reg into sql (type=2)
static int mapif_parse_Registry(int fd)
{
@@ -2532,7 +2346,6 @@ void mapif_defaults(void)
mapif->guild_withdraw = mapif_guild_withdraw;
mapif->guild_memberinfoshort = mapif_guild_memberinfoshort;
mapif->guild_broken = mapif_guild_broken;
- mapif->guild_message = mapif_guild_message;
mapif->guild_basicinfochanged = mapif_guild_basicinfochanged;
mapif->guild_memberinfochanged = mapif_guild_memberinfochanged;
mapif->guild_skillupack = mapif_guild_skillupack;
@@ -2548,7 +2361,6 @@ void mapif_defaults(void)
mapif->parse_GuildLeave = mapif_parse_GuildLeave;
mapif->parse_GuildChangeMemberInfoShort = mapif_parse_GuildChangeMemberInfoShort;
mapif->parse_BreakGuild = mapif_parse_BreakGuild;
- mapif->parse_GuildMessage = mapif_parse_GuildMessage;
mapif->parse_GuildBasicInfoChange = mapif_parse_GuildBasicInfoChange;
mapif->parse_GuildMemberInfoChange = mapif_parse_GuildMemberInfoChange;
mapif->parse_GuildPosition = mapif_parse_GuildPosition;
@@ -2596,7 +2408,6 @@ void mapif_defaults(void)
mapif->party_withdraw = mapif_party_withdraw;
mapif->party_membermoved = mapif_party_membermoved;
mapif->party_broken = mapif_party_broken;
- mapif->party_message = mapif_party_message;
mapif->parse_CreateParty = mapif_parse_CreateParty;
mapif->parse_PartyInfo = mapif_parse_PartyInfo;
mapif->parse_PartyAddMember = mapif_parse_PartyAddMember;
@@ -2604,7 +2415,6 @@ void mapif_defaults(void)
mapif->parse_PartyLeave = mapif_parse_PartyLeave;
mapif->parse_PartyChangeMap = mapif_parse_PartyChangeMap;
mapif->parse_BreakParty = mapif_parse_BreakParty;
- mapif->parse_PartyMessage = mapif_parse_PartyMessage;
mapif->parse_PartyLeaderChange = mapif_parse_PartyLeaderChange;
mapif->pet_created = mapif_pet_created;
mapif->pet_info = mapif_pet_info;
@@ -2644,16 +2454,8 @@ void mapif_defaults(void)
mapif->itembound_ack = mapif_itembound_ack;
mapif->parse_ItemBoundRetrieve = mapif_parse_ItemBoundRetrieve;
mapif->parse_accinfo = mapif_parse_accinfo;
- mapif->broadcast = mapif_broadcast;
- mapif->wis_message = mapif_wis_message;
- mapif->wis_response = mapif_wis_response;
- mapif->wis_end = mapif_wis_end;
mapif->account_reg_reply = mapif_account_reg_reply;
mapif->disconnectplayer = mapif_disconnectplayer;
- mapif->parse_broadcast = mapif_parse_broadcast;
- mapif->parse_WisRequest = mapif_parse_WisRequest;
- mapif->parse_WisReply = mapif_parse_WisReply;
- mapif->parse_WisToGM = mapif_parse_WisToGM;
mapif->parse_Registry = mapif_parse_Registry;
mapif->parse_RegistryRequest = mapif_parse_RegistryRequest;
mapif->namechange_ack = mapif_namechange_ack;
diff --git a/src/char/mapif.h b/src/char/mapif.h
index 71a41f94c..f5b54b6b7 100644
--- a/src/char/mapif.h
+++ b/src/char/mapif.h
@@ -23,7 +23,6 @@
#include "common/hercules.h"
#include "common/mmo.h"
-struct WisData;
struct rodex_item;
/**
@@ -71,7 +70,6 @@ struct mapif_interface {
int (*guild_withdraw) (int guild_id, int account_id, int char_id, int flag, const char *name, const char *mes);
int (*guild_memberinfoshort) (struct guild *g, int idx);
int (*guild_broken) (int guild_id, int flag);
- int (*guild_message) (int guild_id, int account_id, const char *mes, int len, int sfd);
int (*guild_basicinfochanged) (int guild_id, int type, const void *data, int len);
int (*guild_memberinfochanged) (int guild_id, int account_id, int char_id, int type, const void *data, int len);
int (*guild_skillupack) (int guild_id, uint16 skill_id, int account_id);
@@ -87,7 +85,6 @@ struct mapif_interface {
int (*parse_GuildLeave) (int fd, int guild_id, int account_id, int char_id, int flag, const char *mes);
int (*parse_GuildChangeMemberInfoShort) (int fd, int guild_id, int account_id, int char_id, int online, int lv, int class);
int (*parse_BreakGuild) (int fd, int guild_id);
- int (*parse_GuildMessage) (int fd, int guild_id, int account_id, const char *mes, int len);
int (*parse_GuildBasicInfoChange) (int fd, int guild_id, int type, const void *data, int len);
int (*parse_GuildMemberInfoChange) (int fd, int guild_id, int account_id, int char_id, int type, const char *data, int len);
int (*parse_GuildPosition) (int fd, int guild_id, int idx, const struct guild_position *p);
@@ -135,7 +132,6 @@ struct mapif_interface {
int (*party_withdraw) (int party_id,int account_id, int char_id);
int (*party_membermoved) (struct party *p, int idx);
int (*party_broken) (int party_id, int flag);
- int (*party_message) (int party_id, int account_id, const char *mes, int len, int sfd);
int (*parse_CreateParty) (int fd, const char *name, int item, int item2, const struct party_member *leader);
void (*parse_PartyInfo) (int fd, int party_id, int char_id);
int (*parse_PartyAddMember) (int fd, int party_id, const struct party_member *member);
@@ -143,7 +139,6 @@ struct mapif_interface {
int (*parse_PartyLeave) (int fd, int party_id, int account_id, int char_id);
int (*parse_PartyChangeMap) (int fd, int party_id, int account_id, int char_id, unsigned short map, int online, unsigned int lv);
int (*parse_BreakParty) (int fd, int party_id);
- int (*parse_PartyMessage) (int fd, int party_id, int account_id, const char *mes, int len);
int (*parse_PartyLeaderChange) (int fd, int party_id, int account_id, int char_id);
int (*pet_created) (int fd, int account_id, struct s_pet *p);
int (*pet_info) (int fd, int account_id, struct s_pet *p);
@@ -182,16 +177,8 @@ struct mapif_interface {
int (*itembound_ack) (int fd, int aid, int guild_id);
void (*parse_ItemBoundRetrieve) (int fd);
void (*parse_accinfo) (int fd);
- int (*broadcast) (const unsigned char *mes, int len, unsigned int fontColor, short fontType, short fontSize, short fontAlign, short fontY, int sfd);
- int (*wis_message) (struct WisData *wd);
- void (*wis_response) (int fd, const unsigned char *src, int flag);
- int (*wis_end) (struct WisData *wd, int flag);
int (*account_reg_reply) (int fd,int account_id,int char_id, int type);
int (*disconnectplayer) (int fd, int account_id, int char_id, int reason);
- int (*parse_broadcast) (int fd);
- int (*parse_WisRequest) (int fd);
- int (*parse_WisReply) (int fd);
- int (*parse_WisToGM) (int fd);
int (*parse_Registry) (int fd);
int (*parse_RegistryRequest) (int fd);
void (*namechange_ack) (int fd, int account_id, int char_id, int type, int flag, const char *name);
diff --git a/src/common/HPM.c b/src/common/HPM.c
index a579a0926..479135767 100644
--- a/src/common/HPM.c
+++ b/src/common/HPM.c
@@ -458,11 +458,12 @@ static bool hplugins_addconf(unsigned int pluginID, enum HPluginConfType type, c
static struct hplugin *hplugin_load(const char *filename)
{
+ typedef void *(ImportSymbolFunc)(char *, unsigned int);
struct hplugin *plugin;
struct hplugin_info *info;
struct HPMi_interface **HPMi;
bool anyEvent = false;
- void **import_symbol_ref;
+ ImportSymbolFunc **import_symbol_ref;
int *HPMDataCheckVer;
unsigned int *HPMDataCheckLen;
struct s_HPMDataCheck *HPMDataCheck;
@@ -499,7 +500,7 @@ static struct hplugin *hplugin_load(const char *filename)
plugin->info = info;
plugin->filename = aStrdup(filename);
- if( !( import_symbol_ref = plugin_import(plugin->dll, "import_symbol",void **) ) ) {
+ if ((import_symbol_ref = plugin_import(plugin->dll, "import_symbol", ImportSymbolFunc **)) == NULL) {
ShowFatalError("HPM:plugin_load: failed to retrieve 'import_symbol' for '"CL_WHITE"%s"CL_RESET"'!\n", filename);
exit(EXIT_FAILURE);
}
diff --git a/src/common/HPMDataCheck.h b/src/common/HPMDataCheck.h
index 1e1d8068f..9c015e1f5 100644
--- a/src/common/HPMDataCheck.h
+++ b/src/common/HPMDataCheck.h
@@ -52,7 +52,6 @@ HPExport const struct s_HPMDataCheck HPMDataCheck[] = {
#define CHAR_GEOIP_H
#endif // CHAR_GEOIP_H
#ifdef CHAR_INTER_H
- { "WisData", sizeof(struct WisData), SERVER_TYPE_CHAR },
{ "inter_interface", sizeof(struct inter_interface), SERVER_TYPE_CHAR },
#else
#define CHAR_INTER_H
@@ -526,6 +525,7 @@ HPExport const struct s_HPMDataCheck HPMDataCheck[] = {
{ "item_combo", sizeof(struct item_combo), SERVER_TYPE_MAP },
{ "item_data", sizeof(struct item_data), SERVER_TYPE_MAP },
{ "item_group", sizeof(struct item_group), SERVER_TYPE_MAP },
+ { "item_lapineddukddak", sizeof(struct item_lapineddukddak), SERVER_TYPE_MAP },
{ "item_package", sizeof(struct item_package), SERVER_TYPE_MAP },
{ "item_package_must_entry", sizeof(struct item_package_must_entry), SERVER_TYPE_MAP },
{ "item_package_rand_entry", sizeof(struct item_package_rand_entry), SERVER_TYPE_MAP },
@@ -666,6 +666,9 @@ HPExport const struct s_HPMDataCheck HPMDataCheck[] = {
{ "PACKET_ZC_ACK_LEAVE_GUILD1", sizeof(struct PACKET_ZC_ACK_LEAVE_GUILD1), SERVER_TYPE_MAP },
{ "PACKET_ZC_ACK_LEAVE_GUILD2", sizeof(struct PACKET_ZC_ACK_LEAVE_GUILD2), SERVER_TYPE_MAP },
{ "PACKET_ZC_ACK_OPEN_WRITE_MAIL", sizeof(struct PACKET_ZC_ACK_OPEN_WRITE_MAIL), SERVER_TYPE_MAP },
+ { "PACKET_ZC_ACK_RANKING_name", sizeof(struct PACKET_ZC_ACK_RANKING_name), SERVER_TYPE_MAP },
+ { "PACKET_ZC_ACK_RANKING_points", sizeof(struct PACKET_ZC_ACK_RANKING_points), SERVER_TYPE_MAP },
+ { "PACKET_ZC_ACK_RANKING_sub", sizeof(struct PACKET_ZC_ACK_RANKING_sub), SERVER_TYPE_MAP },
{ "PACKET_ZC_ACK_REMOVE_ITEM_MAIL", sizeof(struct PACKET_ZC_ACK_REMOVE_ITEM_MAIL), SERVER_TYPE_MAP },
{ "PACKET_ZC_ACK_REQMAKINGITEM", sizeof(struct PACKET_ZC_ACK_REQMAKINGITEM), SERVER_TYPE_MAP },
{ "PACKET_ZC_ACK_REQNAME_TITLE", sizeof(struct PACKET_ZC_ACK_REQNAME_TITLE), SERVER_TYPE_MAP },
@@ -680,6 +683,7 @@ HPExport const struct s_HPMDataCheck HPMDataCheck[] = {
{ "PACKET_ZC_ADD_ITEM_TO_MAIL", sizeof(struct PACKET_ZC_ADD_ITEM_TO_MAIL), SERVER_TYPE_MAP },
{ "PACKET_ZC_ADD_ITEM_TO_STORE", sizeof(struct PACKET_ZC_ADD_ITEM_TO_STORE), SERVER_TYPE_MAP },
{ "PACKET_ZC_ADD_MEMBER_TO_GROUP", sizeof(struct PACKET_ZC_ADD_MEMBER_TO_GROUP), SERVER_TYPE_MAP },
+ { "PACKET_ZC_ADD_SKILL", sizeof(struct PACKET_ZC_ADD_SKILL), SERVER_TYPE_MAP },
{ "PACKET_ZC_BAN_LIST", sizeof(struct PACKET_ZC_BAN_LIST), SERVER_TYPE_MAP },
{ "PACKET_ZC_BAN_LIST_sub", sizeof(struct PACKET_ZC_BAN_LIST_sub), SERVER_TYPE_MAP },
{ "PACKET_ZC_CASH_ITEM_DELETE", sizeof(struct PACKET_ZC_CASH_ITEM_DELETE), SERVER_TYPE_MAP },
@@ -715,6 +719,7 @@ HPExport const struct s_HPMDataCheck HPMDataCheck[] = {
{ "PACKET_ZC_NOTIFY_UNREADMAIL", sizeof(struct PACKET_ZC_NOTIFY_UNREADMAIL), SERVER_TYPE_MAP },
{ "PACKET_ZC_NOTIFY_WEAPONITEMLIST", sizeof(struct PACKET_ZC_NOTIFY_WEAPONITEMLIST), SERVER_TYPE_MAP },
{ "PACKET_ZC_NOTIFY_WEAPONITEMLIST_sub", sizeof(struct PACKET_ZC_NOTIFY_WEAPONITEMLIST_sub), SERVER_TYPE_MAP },
+ { "PACKET_ZC_NPC_MARKET_PURCHASE_RESULT_sub", sizeof(struct PACKET_ZC_NPC_MARKET_PURCHASE_RESULT_sub), SERVER_TYPE_MAP },
{ "PACKET_ZC_OPEN_UI", sizeof(struct PACKET_ZC_OPEN_UI), SERVER_TYPE_MAP },
{ "PACKET_ZC_OVERWEIGHT_PERCENT", sizeof(struct PACKET_ZC_OVERWEIGHT_PERCENT), SERVER_TYPE_MAP },
{ "PACKET_ZC_PC_CASH_POINT_ITEMLIST", sizeof(struct PACKET_ZC_PC_CASH_POINT_ITEMLIST), SERVER_TYPE_MAP },
@@ -734,14 +739,19 @@ HPExport const struct s_HPMDataCheck HPMDataCheck[] = {
{ "PACKET_ZC_SEARCH_STORE_INFO_ACK", sizeof(struct PACKET_ZC_SEARCH_STORE_INFO_ACK), SERVER_TYPE_MAP },
{ "PACKET_ZC_SEARCH_STORE_INFO_ACK_sub", sizeof(struct PACKET_ZC_SEARCH_STORE_INFO_ACK_sub), SERVER_TYPE_MAP },
{ "PACKET_ZC_SKILL_SCALE", sizeof(struct PACKET_ZC_SKILL_SCALE), SERVER_TYPE_MAP },
+ { "PACKET_ZC_SKILLINFO_LIST", sizeof(struct PACKET_ZC_SKILLINFO_LIST), SERVER_TYPE_MAP },
+ { "PACKET_ZC_SKILLINFO_UPDATE2", sizeof(struct PACKET_ZC_SKILLINFO_UPDATE2), SERVER_TYPE_MAP },
{ "PACKET_ZC_SPRITE_CHANGE", sizeof(struct PACKET_ZC_SPRITE_CHANGE), SERVER_TYPE_MAP },
+ { "PACKET_ZC_STATUS_CHANGE_ACK", sizeof(struct PACKET_ZC_STATUS_CHANGE_ACK), SERVER_TYPE_MAP },
{ "PACKET_ZC_STYLE_CHANGE_RES", sizeof(struct PACKET_ZC_STYLE_CHANGE_RES), SERVER_TYPE_MAP },
+ { "PACKET_ZC_TALKBOX_CHATCONTENTS", sizeof(struct PACKET_ZC_TALKBOX_CHATCONTENTS), SERVER_TYPE_MAP },
{ "PACKET_ZC_UI_ACTION", sizeof(struct PACKET_ZC_UI_ACTION), SERVER_TYPE_MAP },
{ "PACKET_ZC_UPDATE_ITEM_FROM_BUYING_STORE", sizeof(struct PACKET_ZC_UPDATE_ITEM_FROM_BUYING_STORE), SERVER_TYPE_MAP },
{ "PACKET_ZC_USE_ITEM_ACK", sizeof(struct PACKET_ZC_USE_ITEM_ACK), SERVER_TYPE_MAP },
{ "PACKET_ZC_WARPLIST", sizeof(struct PACKET_ZC_WARPLIST), SERVER_TYPE_MAP },
{ "PACKET_ZC_WARPLIST_sub", sizeof(struct PACKET_ZC_WARPLIST_sub), SERVER_TYPE_MAP },
{ "PACKET_ZC_WRITE_MAIL_RESULT", sizeof(struct PACKET_ZC_WRITE_MAIL_RESULT), SERVER_TYPE_MAP },
+ { "SKILLDATA", sizeof(struct SKILLDATA), SERVER_TYPE_MAP },
{ "ZC_INVENTORY_END", sizeof(struct ZC_INVENTORY_END), SERVER_TYPE_MAP },
{ "ZC_INVENTORY_START", sizeof(struct ZC_INVENTORY_START), SERVER_TYPE_MAP },
{ "ZC_PROGRESS_ACTOR", sizeof(struct ZC_PROGRESS_ACTOR), SERVER_TYPE_MAP },
@@ -788,7 +798,6 @@ HPExport const struct s_HPMDataCheck HPMDataCheck[] = {
{ "packet_monster_hp", sizeof(struct packet_monster_hp), SERVER_TYPE_MAP },
{ "packet_notify_bounditem", sizeof(struct packet_notify_bounditem), SERVER_TYPE_MAP },
{ "packet_npc_market_purchase", sizeof(struct packet_npc_market_purchase), SERVER_TYPE_MAP },
- { "packet_npc_market_result_ack", sizeof(struct packet_npc_market_result_ack), SERVER_TYPE_MAP },
{ "packet_package_item_announce", sizeof(struct packet_package_item_announce), SERVER_TYPE_MAP },
{ "packet_party_leader_changed", sizeof(struct packet_party_leader_changed), SERVER_TYPE_MAP },
{ "packet_quest_add_header", sizeof(struct packet_quest_add_header), SERVER_TYPE_MAP },
diff --git a/src/common/mmo.h b/src/common/mmo.h
index b58a70ae9..66736bff0 100644
--- a/src/common/mmo.h
+++ b/src/common/mmo.h
@@ -139,7 +139,7 @@
// Note that newer clients no longer save hotkeys in the registry!
#define HOTKEY_SAVING
-#if PACKETVER_MAIN_NUM >= 20190522 || PACKETVER_RE_NUM >= 20190508
+#if PACKETVER_MAIN_NUM >= 20190522 || PACKETVER_RE_NUM >= 20190508 || PACKETVER_ZERO_NUM >= 20190605
#define MAX_HOTKEYS 38
#elif PACKETVER_MAIN_NUM >= 20141022 || PACKETVER_RE_NUM >= 20141015 || defined(PACKETVER_ZERO)
// (38 = 9 skills x 4 bars & 2 Quickslots)(0x07d9,268)
@@ -156,7 +156,7 @@
#endif
#endif // PACKETVER_MAIN_NUM >= 20070711 || PACKETVER_RE_NUM >= 20080827 || PACKETVER_AD_NUM >= 20070711 || PACKETVER_SAK_NUM >= 20070628 || defined(PACKETVER_ZERO)
-#if PACKETVER_MAIN_NUM >= 20190522 || PACKETVER_RE_NUM >= 20190508
+#if PACKETVER_MAIN_NUM >= 20190522 || PACKETVER_RE_NUM >= 20190508 || PACKETVER_ZERO_NUM >= 20190605
#define MAX_HOTKEYS_DB ((MAX_HOTKEYS) * 2)
#else
#define MAX_HOTKEYS_DB MAX_HOTKEYS
@@ -907,6 +907,14 @@ struct guild_castle {
int mapindex;
char castle_name[NAME_LENGTH];
char castle_event[NAME_LENGTH];
+ int siege_type;
+ bool enable_client_warp;
+ struct {
+ int x;
+ int y;
+ int zeny;
+ int zeny_siege;
+ } client_warp;
int guild_id;
int economy;
int defense;
diff --git a/src/common/packets/packets2019_len_main.h b/src/common/packets/packets2019_len_main.h
index 0382a72d3..424abe14f 100644
--- a/src/common/packets/packets2019_len_main.h
+++ b/src/common/packets/packets2019_len_main.h
@@ -103,7 +103,11 @@ packetLen(0x007c, 44) // ZC_NOTIFY_STANDENTRY_NPC
packetLen(0x007d, 2) // CZ_NOTIFY_ACTORINIT
// Packet: 0x007e
+#if PACKETVER >= 20190904
+packetLen(0x007e, 46) // CZ_REQUEST_TIME
+#elif PACKETVER >= 20190109
packetLen(0x007e, 105) // CZ_REQUEST_TIME
+#endif
// Packet: 0x007f
packetLen(0x007f, 6) // ZC_NOTIFY_TIME
@@ -916,7 +920,11 @@ packetLen(0x018f, 8) // ZC_ACK_REQMAKINGITEM
packetLen(0x0190, 23) // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
// Packet: 0x0191
+#if PACKETVER >= 20190904
+packetLen(0x0191, 27) // ZC_TALKBOX_CHATCONTENTS
+#elif PACKETVER >= 20190109
packetLen(0x0191, 86) // ZC_TALKBOX_CHATCONTENTS
+#endif
// Packet: 0x0192
packetLen(0x0192, 24) // ZC_UPDATE_MAPINFO
@@ -1966,7 +1974,11 @@ packetLen(0x0365, 8) // CZ_MOVE_ITEM_FROM_STORE_TO_BODY2
packetLen(0x0366, 10) // CZ_USE_SKILL_TOGROUND2
// Packet: 0x0367
+#if PACKETVER >= 20190904
+packetLen(0x0367, 31) // CZ_USE_SKILL_TOGROUND_WITHTALKBOX2
+#elif PACKETVER >= 20190109
packetLen(0x0367, 90) // CZ_USE_SKILL_TOGROUND_WITHTALKBOX2
+#endif
// Packet: 0x0368
packetLen(0x0368, 6) // CZ_REQNAME2
@@ -3757,7 +3769,7 @@ packetLen(0x0a39, 36) // CH_MAKE_CHAR
packetLen(0x0a3a, 12)
// Packet: 0x0a3b
-packetLen(0x0a3b, -1) // ZC_CUSTOM_HAT_EFFECT
+packetLen(0x0a3b, -1) // ZC_HAT_EFFECT
// Packet: 0x0a3c
packetLen(0x0a3c, -1)
@@ -3901,7 +3913,7 @@ packetLen(0x0a74, 8)
packetLen(0x0a76, 80)
// Packet: 0x0a77
-packetLen(0x0a77, 15)
+packetLen(0x0a77, 15) // CZ_CAMERA_INFO
// Packet: 0x0a78
packetLen(0x0a78, 15)
@@ -4270,7 +4282,7 @@ packetLen(0x0af4, 11) // CZ_USE_SKILL_TOGROUND
packetLen(0x0af5, 3)
// Packet: 0x0af6
-packetLen(0x0af6, 88)
+packetLen(0x0af6, 88) // ZC_ACK_RANKING
// Packet: 0x0af7
packetLen(0x0af7, 32) // ZC_ACK_REQNAME_BYGID
@@ -4312,7 +4324,13 @@ packetLen(0x0b02, 26) // AC_REFUSE_LOGIN4
packetLen(0x0b03, -1) // ZC_EQUIPWIN_MICROSCOPE_V7
// Packet: 0x0b04
+#if PACKETVER >= 20190807
+packetLen(0x0b04, 90)
+#elif PACKETVER >= 20190605
+packetLen(0x0b04, 72)
+#elif PACKETVER >= 20190109
packetLen(0x0b04, 80)
+#endif
// Packet: 0x0b05
packetLen(0x0b05, 63) // ZC_OFFLINE_STORE_VISIBLE
@@ -4393,12 +4411,16 @@ packetLen(0x0b1d, 2) // ZC_PING
#endif
// Packet: 0x0b1e
-#if PACKETVER >= 20190227
+#if PACKETVER >= 20190619
+packetLen(0x0b1e, 14)
+#elif PACKETVER >= 20190227
packetLen(0x0b1e, 10)
#endif
// Packet: 0x0b1f
-#if PACKETVER >= 20190306
+#if PACKETVER >= 20190619
+packetLen(0x0b1f, 14)
+#elif PACKETVER >= 20190306
packetLen(0x0b1f, 10)
#endif
@@ -4466,12 +4488,16 @@ packetLen(0x0b28, 22)
#endif
// Packet: 0x0b29
-#if PACKETVER >= 20190508
+#if PACKETVER >= 20190605
+// removed
+#elif PACKETVER >= 20190508
packetLen(0x0b29, 6)
#endif
// Packet: 0x0b2a
-#if PACKETVER >= 20190522
+#if PACKETVER >= 20190605
+// removed
+#elif PACKETVER >= 20190522
packetLen(0x0b2a, 40)
#elif PACKETVER >= 20190508
packetLen(0x0b2a, 6)
@@ -4499,7 +4525,7 @@ packetLen(0x0b2e, 4)
// Packet: 0x0b2f
#if PACKETVER >= 20190529
-packetLen(0x0b2f, 73)
+packetLen(0x0b2f, 73) // ZC_PROPERTY_HOMUN_3
#endif
// Packet: 0x0b30
@@ -4507,5 +4533,234 @@ packetLen(0x0b2f, 73)
packetLen(0x0b30, -1)
#endif
+// Packet: 0x0b31
+#if PACKETVER >= 20190619
+packetLen(0x0b31, 17) // ZC_ADD_SKILL
+#endif
+
+// Packet: 0x0b32
+#if PACKETVER >= 20190619
+packetLen(0x0b32, -1) // ZC_SKILLINFO_LIST
+#endif
+
+// Packet: 0x0b33
+#if PACKETVER >= 20190619
+packetLen(0x0b33, 17) // ZC_SKILLINFO_UPDATE2
+#endif
+
+// Packet: 0x0b34
+#if PACKETVER >= 20190724
+packetLen(0x0b34, 50)
+#elif PACKETVER >= 20190703
+packetLen(0x0b34, 26)
+#endif
+
+// Packet: 0x0b35
+#if PACKETVER >= 20190703
+packetLen(0x0b35, 3)
+#endif
+
+// Packet: 0x0b36
+#if PACKETVER >= 20190717
+packetLen(0x0b36, -1)
+#endif
+
+// Packet: 0x0b37
+#if PACKETVER >= 20190724
+packetLen(0x0b37, -1)
+#endif
+
+// Packet: 0x0b38
+#if PACKETVER >= 20190724
+packetLen(0x0b38, -1)
+#endif
+
+// Packet: 0x0b39
+#if PACKETVER >= 20190724
+packetLen(0x0b39, -1)
+#endif
+
+// Packet: 0x0b3a
+#if PACKETVER >= 20190724
+packetLen(0x0b3a, 4)
+#endif
+
+// Packet: 0x0b3b
+#if PACKETVER >= 20190724
+packetLen(0x0b3b, 4)
+#endif
+
+// Packet: 0x0b3c
+#if PACKETVER >= 20190724
+packetLen(0x0b3c, 4)
+#endif
+
+// Packet: 0x0b3d
+#if PACKETVER >= 20190724
+packetLen(0x0b3d, -1)
+#endif
+
+// Packet: 0x0b3e
+#if PACKETVER >= 20190724
+packetLen(0x0b3e, -1)
+#endif
+
+// Packet: 0x0b3f
+#if PACKETVER >= 20190724
+packetLen(0x0b3f, 64)
+#endif
+
+// Packet: 0x0b40
+#if PACKETVER >= 20190724
+packetLen(0x0b40, -1)
+#endif
+
+// Packet: 0x0b41
+#if PACKETVER >= 20190724
+packetLen(0x0b41, 41)
+#endif
+
+// Packet: 0x0b42
+#if PACKETVER >= 20190724
+packetLen(0x0b42, 30)
+#endif
+
+// Packet: 0x0b43
+#if PACKETVER >= 20190724
+packetLen(0x0b43, 47)
+#endif
+
+// Packet: 0x0b44
+#if PACKETVER >= 20190724
+packetLen(0x0b44, 32)
+#endif
+
+// Packet: 0x0b45
+#if PACKETVER >= 20190724
+packetLen(0x0b45, 32)
+#endif
+
+// Packet: 0x0b46
+#if PACKETVER >= 20190724
+packetLen(0x0b46, 10)
+#endif
+
+// Packet: 0x0b47
+#if PACKETVER >= 20190724
+packetLen(0x0b47, 14)
+#endif
+
+// Packet: 0x0b48
+#if PACKETVER >= 20190724
+packetLen(0x0b48, 18)
+#endif
+
+// Packet: 0x0b49
+#if PACKETVER >= 20190724
+packetLen(0x0b49, 4)
+#endif
+
+// Packet: 0x0b4a
+#if PACKETVER >= 20190724
+packetLen(0x0b4a, 6)
+#endif
+
+// Packet: 0x0b4b
+#if PACKETVER >= 20190724
+packetLen(0x0b4b, 4)
+#endif
+
+// Packet: 0x0b4c
+#if PACKETVER >= 20190724
+packetLen(0x0b4c, 2)
+#endif
+
+// Packet: 0x0b4d
+#if PACKETVER >= 20190807
+packetLen(0x0b4d, -1)
+#elif PACKETVER >= 20190724
+packetLen(0x0b4d, 6)
+#endif
+
+// Packet: 0x0b4e
+#if PACKETVER >= 20190807
+packetLen(0x0b4e, -1)
+#endif
+
+// Packet: 0x0b4f
+#if PACKETVER >= 20190807
+packetLen(0x0b4f, 2)
+#endif
+
+// Packet: 0x0b50
+#if PACKETVER >= 20190807
+packetLen(0x0b50, 2)
+#endif
+
+// Packet: 0x0b51
+#if PACKETVER >= 20190807
+packetLen(0x0b51, 2)
+#endif
+
+// Packet: 0x0b52
+#if PACKETVER >= 20190807
+packetLen(0x0b52, 2)
+#endif
+
+// Packet: 0x0b53
+#if PACKETVER >= 20190821
+packetLen(0x0b53, 52)
+#endif
+
+// Packet: 0x0b54
+#if PACKETVER >= 20190821
+packetLen(0x0b54, 8)
+#endif
+
+// Packet: 0x0b55
+#if PACKETVER >= 20190821
+packetLen(0x0b55, -1)
+#endif
+
+// Packet: 0x0b56
+#if PACKETVER >= 20190904
+packetLen(0x0b56, -1)
+#endif
+
+// Packet: 0x0b57
+#if PACKETVER >= 20190904
+packetLen(0x0b57, -1)
+#endif
+
+// Packet: 0x0b58
+#if PACKETVER >= 20190904
+packetLen(0x0b58, 2)
+#endif
+
+// Packet: 0x0b59
+#if PACKETVER >= 20190918
+packetLen(0x0b59, 2)
+#endif
+
+// Packet: 0x0b5a
+#if PACKETVER >= 20190918
+packetLen(0x0b5a, 4)
+#endif
+
+// Packet: 0x0b5b
+#if PACKETVER >= 20190918
+packetLen(0x0b5b, -1)
+#endif
+
+// Packet: 0x0b5c
+#if PACKETVER >= 20190918
+packetLen(0x0b5c, 10)
+#endif
+
+// Packet: 0x0b5d
+#if PACKETVER >= 20190918
+packetLen(0x0b5d, 2)
+#endif
+
#endif /* COMMON_PACKETS2019_LEN_MAIN_H */
diff --git a/src/common/packets/packets2019_len_re.h b/src/common/packets/packets2019_len_re.h
index c553d9324..32c14775d 100644
--- a/src/common/packets/packets2019_len_re.h
+++ b/src/common/packets/packets2019_len_re.h
@@ -103,7 +103,11 @@ packetLen(0x007c, 44) // ZC_NOTIFY_STANDENTRY_NPC
packetLen(0x007d, 2) // CZ_NOTIFY_ACTORINIT
// Packet: 0x007e
+#if PACKETVER >= 20190904
+packetLen(0x007e, 46) // CZ_REQUEST_TIME
+#elif PACKETVER >= 20190109
packetLen(0x007e, 105) // CZ_REQUEST_TIME
+#endif
// Packet: 0x007f
packetLen(0x007f, 6) // ZC_NOTIFY_TIME
@@ -916,7 +920,11 @@ packetLen(0x018f, 8) // ZC_ACK_REQMAKINGITEM
packetLen(0x0190, 23) // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
// Packet: 0x0191
+#if PACKETVER >= 20190904
+packetLen(0x0191, 27) // ZC_TALKBOX_CHATCONTENTS
+#elif PACKETVER >= 20190109
packetLen(0x0191, 86) // ZC_TALKBOX_CHATCONTENTS
+#endif
// Packet: 0x0192
packetLen(0x0192, 24) // ZC_UPDATE_MAPINFO
@@ -1972,7 +1980,11 @@ packetLen(0x0365, 8) // CZ_MOVE_ITEM_FROM_STORE_TO_BODY2
packetLen(0x0366, 10) // CZ_USE_SKILL_TOGROUND2
// Packet: 0x0367
+#if PACKETVER >= 20190904
+packetLen(0x0367, 31) // CZ_USE_SKILL_TOGROUND_WITHTALKBOX2
+#elif PACKETVER >= 20190109
packetLen(0x0367, 90) // CZ_USE_SKILL_TOGROUND_WITHTALKBOX2
+#endif
// Packet: 0x0368
packetLen(0x0368, 6) // CZ_REQNAME2
@@ -3763,7 +3775,7 @@ packetLen(0x0a39, 36) // CH_MAKE_CHAR
packetLen(0x0a3a, 12)
// Packet: 0x0a3b
-packetLen(0x0a3b, -1) // ZC_CUSTOM_HAT_EFFECT
+packetLen(0x0a3b, -1) // ZC_HAT_EFFECT
// Packet: 0x0a3c
packetLen(0x0a3c, -1)
@@ -3907,7 +3919,7 @@ packetLen(0x0a74, 8)
packetLen(0x0a76, 80)
// Packet: 0x0a77
-packetLen(0x0a77, 15)
+packetLen(0x0a77, 15) // CZ_CAMERA_INFO
// Packet: 0x0a78
packetLen(0x0a78, 15)
@@ -4276,7 +4288,7 @@ packetLen(0x0af4, 11) // CZ_USE_SKILL_TOGROUND
packetLen(0x0af5, 3)
// Packet: 0x0af6
-packetLen(0x0af6, 88)
+packetLen(0x0af6, 88) // ZC_ACK_RANKING
// Packet: 0x0af7
packetLen(0x0af7, 32) // ZC_ACK_REQNAME_BYGID
@@ -4318,7 +4330,13 @@ packetLen(0x0b02, 26) // AC_REFUSE_LOGIN4
packetLen(0x0b03, -1) // ZC_EQUIPWIN_MICROSCOPE_V7
// Packet: 0x0b04
+#if PACKETVER >= 20190807
+packetLen(0x0b04, 90)
+#elif PACKETVER >= 20190605
+packetLen(0x0b04, 72)
+#elif PACKETVER >= 20190109
packetLen(0x0b04, 80)
+#endif
// Packet: 0x0b05
packetLen(0x0b05, 63) // ZC_OFFLINE_STORE_VISIBLE
@@ -4399,12 +4417,22 @@ packetLen(0x0b1d, 2) // ZC_PING
#endif
// Packet: 0x0b1e
-#if PACKETVER >= 20190227
+#if PACKETVER >= 20190619
+packetLen(0x0b1e, 14)
+#elif PACKETVER >= 20190605
+packetLen(0x0b1e, 14)
+// ignored packet from 2019-06-05hRagexeRE
+#elif PACKETVER >= 20190227
packetLen(0x0b1e, 10)
#endif
// Packet: 0x0b1f
-#if PACKETVER >= 20190306
+#if PACKETVER >= 20190619
+packetLen(0x0b1f, 14)
+#elif PACKETVER >= 20190605
+packetLen(0x0b1f, 14)
+// ignored packet from 2019-06-05hRagexeRE
+#elif PACKETVER >= 20190306
packetLen(0x0b1f, 10)
#endif
@@ -4472,12 +4500,16 @@ packetLen(0x0b28, 22)
#endif
// Packet: 0x0b29
-#if PACKETVER >= 20190508
+#if PACKETVER >= 20190605
+// removed
+#elif PACKETVER >= 20190508
packetLen(0x0b29, 6)
#endif
// Packet: 0x0b2a
-#if PACKETVER >= 20190522
+#if PACKETVER >= 20190605
+// removed
+#elif PACKETVER >= 20190522
packetLen(0x0b2a, 40)
#elif PACKETVER >= 20190508
packetLen(0x0b2a, 6)
@@ -4505,7 +4537,7 @@ packetLen(0x0b2e, 4)
// Packet: 0x0b2f
#if PACKETVER >= 20190529
-packetLen(0x0b2f, 73)
+packetLen(0x0b2f, 73) // ZC_PROPERTY_HOMUN_3
#endif
// Packet: 0x0b30
@@ -4513,5 +4545,234 @@ packetLen(0x0b2f, 73)
packetLen(0x0b30, -1)
#endif
+// Packet: 0x0b31
+#if PACKETVER >= 20190619
+packetLen(0x0b31, 17) // ZC_ADD_SKILL
+#endif
+
+// Packet: 0x0b32
+#if PACKETVER >= 20190619
+packetLen(0x0b32, -1) // ZC_SKILLINFO_LIST
+#endif
+
+// Packet: 0x0b33
+#if PACKETVER >= 20190619
+packetLen(0x0b33, 17) // ZC_SKILLINFO_UPDATE2
+#endif
+
+// Packet: 0x0b34
+#if PACKETVER >= 20190724
+packetLen(0x0b34, 50)
+#elif PACKETVER >= 20190703
+packetLen(0x0b34, 26)
+#endif
+
+// Packet: 0x0b35
+#if PACKETVER >= 20190703
+packetLen(0x0b35, 3)
+#endif
+
+// Packet: 0x0b36
+#if PACKETVER >= 20190717
+packetLen(0x0b36, -1)
+#endif
+
+// Packet: 0x0b37
+#if PACKETVER >= 20190724
+packetLen(0x0b37, -1)
+#endif
+
+// Packet: 0x0b38
+#if PACKETVER >= 20190724
+packetLen(0x0b38, -1)
+#endif
+
+// Packet: 0x0b39
+#if PACKETVER >= 20190724
+packetLen(0x0b39, -1)
+#endif
+
+// Packet: 0x0b3a
+#if PACKETVER >= 20190724
+packetLen(0x0b3a, 4)
+#endif
+
+// Packet: 0x0b3b
+#if PACKETVER >= 20190724
+packetLen(0x0b3b, 4)
+#endif
+
+// Packet: 0x0b3c
+#if PACKETVER >= 20190724
+packetLen(0x0b3c, 4)
+#endif
+
+// Packet: 0x0b3d
+#if PACKETVER >= 20190724
+packetLen(0x0b3d, -1)
+#endif
+
+// Packet: 0x0b3e
+#if PACKETVER >= 20190724
+packetLen(0x0b3e, -1)
+#endif
+
+// Packet: 0x0b3f
+#if PACKETVER >= 20190724
+packetLen(0x0b3f, 64)
+#endif
+
+// Packet: 0x0b40
+#if PACKETVER >= 20190724
+packetLen(0x0b40, -1)
+#endif
+
+// Packet: 0x0b41
+#if PACKETVER >= 20190724
+packetLen(0x0b41, 41)
+#endif
+
+// Packet: 0x0b42
+#if PACKETVER >= 20190724
+packetLen(0x0b42, 30)
+#endif
+
+// Packet: 0x0b43
+#if PACKETVER >= 20190724
+packetLen(0x0b43, 47)
+#endif
+
+// Packet: 0x0b44
+#if PACKETVER >= 20190724
+packetLen(0x0b44, 32)
+#endif
+
+// Packet: 0x0b45
+#if PACKETVER >= 20190724
+packetLen(0x0b45, 32)
+#endif
+
+// Packet: 0x0b46
+#if PACKETVER >= 20190724
+packetLen(0x0b46, 10)
+#endif
+
+// Packet: 0x0b47
+#if PACKETVER >= 20190724
+packetLen(0x0b47, 14)
+#endif
+
+// Packet: 0x0b48
+#if PACKETVER >= 20190724
+packetLen(0x0b48, 18)
+#endif
+
+// Packet: 0x0b49
+#if PACKETVER >= 20190724
+packetLen(0x0b49, 4)
+#endif
+
+// Packet: 0x0b4a
+#if PACKETVER >= 20190724
+packetLen(0x0b4a, 6)
+#endif
+
+// Packet: 0x0b4b
+#if PACKETVER >= 20190724
+packetLen(0x0b4b, 4)
+#endif
+
+// Packet: 0x0b4c
+#if PACKETVER >= 20190724
+packetLen(0x0b4c, 2)
+#endif
+
+// Packet: 0x0b4d
+#if PACKETVER >= 20190807
+packetLen(0x0b4d, -1)
+#elif PACKETVER >= 20190724
+packetLen(0x0b4d, 6)
+#endif
+
+// Packet: 0x0b4e
+#if PACKETVER >= 20190807
+packetLen(0x0b4e, -1)
+#endif
+
+// Packet: 0x0b4f
+#if PACKETVER >= 20190807
+packetLen(0x0b4f, 2)
+#endif
+
+// Packet: 0x0b50
+#if PACKETVER >= 20190807
+packetLen(0x0b50, 2)
+#endif
+
+// Packet: 0x0b51
+#if PACKETVER >= 20190807
+packetLen(0x0b51, 2)
+#endif
+
+// Packet: 0x0b52
+#if PACKETVER >= 20190807
+packetLen(0x0b52, 2)
+#endif
+
+// Packet: 0x0b53
+#if PACKETVER >= 20190821
+packetLen(0x0b53, 52)
+#endif
+
+// Packet: 0x0b54
+#if PACKETVER >= 20190821
+packetLen(0x0b54, 8)
+#endif
+
+// Packet: 0x0b55
+#if PACKETVER >= 20190821
+packetLen(0x0b55, -1)
+#endif
+
+// Packet: 0x0b56
+#if PACKETVER >= 20190904
+packetLen(0x0b56, -1)
+#endif
+
+// Packet: 0x0b57
+#if PACKETVER >= 20190904
+packetLen(0x0b57, -1)
+#endif
+
+// Packet: 0x0b58
+#if PACKETVER >= 20190904
+packetLen(0x0b58, 2)
+#endif
+
+// Packet: 0x0b59
+#if PACKETVER >= 20190918
+packetLen(0x0b59, 2)
+#endif
+
+// Packet: 0x0b5a
+#if PACKETVER >= 20190918
+packetLen(0x0b5a, 4)
+#endif
+
+// Packet: 0x0b5b
+#if PACKETVER >= 20190918
+packetLen(0x0b5b, -1)
+#endif
+
+// Packet: 0x0b5c
+#if PACKETVER >= 20190918
+packetLen(0x0b5c, 10)
+#endif
+
+// Packet: 0x0b5d
+#if PACKETVER >= 20190918
+packetLen(0x0b5d, 2)
+#endif
+
#endif /* COMMON_PACKETS2019_LEN_RE_H */
diff --git a/src/common/packets/packets2019_len_zero.h b/src/common/packets/packets2019_len_zero.h
index 3295b26d9..9cdc9db05 100644
--- a/src/common/packets/packets2019_len_zero.h
+++ b/src/common/packets/packets2019_len_zero.h
@@ -103,7 +103,11 @@ packetLen(0x007c, 44) // ZC_NOTIFY_STANDENTRY_NPC
packetLen(0x007d, 2) // CZ_NOTIFY_ACTORINIT
// Packet: 0x007e
+#if PACKETVER >= 20190828
+packetLen(0x007e, 46) // CZ_REQUEST_TIME
+#elif PACKETVER >= 20190116
packetLen(0x007e, 105) // CZ_REQUEST_TIME
+#endif
// Packet: 0x007f
packetLen(0x007f, 6) // ZC_NOTIFY_TIME
@@ -916,7 +920,11 @@ packetLen(0x018f, 8) // ZC_ACK_REQMAKINGITEM
packetLen(0x0190, 23) // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
// Packet: 0x0191
+#if PACKETVER >= 20190828
+packetLen(0x0191, 27) // ZC_TALKBOX_CHATCONTENTS
+#elif PACKETVER >= 20190116
packetLen(0x0191, 86) // ZC_TALKBOX_CHATCONTENTS
+#endif
// Packet: 0x0192
packetLen(0x0192, 24) // ZC_UPDATE_MAPINFO
@@ -1966,7 +1974,11 @@ packetLen(0x0365, 8) // CZ_MOVE_ITEM_FROM_STORE_TO_BODY2
packetLen(0x0366, 10) // CZ_USE_SKILL_TOGROUND2
// Packet: 0x0367
+#if PACKETVER >= 20190828
+packetLen(0x0367, 31) // CZ_USE_SKILL_TOGROUND_WITHTALKBOX2
+#elif PACKETVER >= 20190116
packetLen(0x0367, 90) // CZ_USE_SKILL_TOGROUND_WITHTALKBOX2
+#endif
// Packet: 0x0368
packetLen(0x0368, 6) // CZ_REQNAME2
@@ -3757,7 +3769,7 @@ packetLen(0x0a39, 36) // CH_MAKE_CHAR
packetLen(0x0a3a, 12)
// Packet: 0x0a3b
-packetLen(0x0a3b, -1) // ZC_CUSTOM_HAT_EFFECT
+packetLen(0x0a3b, -1) // ZC_HAT_EFFECT
// Packet: 0x0a3c
packetLen(0x0a3c, -1)
@@ -3901,7 +3913,7 @@ packetLen(0x0a74, 8)
packetLen(0x0a76, 80)
// Packet: 0x0a77
-packetLen(0x0a77, 15)
+packetLen(0x0a77, 15) // CZ_CAMERA_INFO
// Packet: 0x0a78
packetLen(0x0a78, 15)
@@ -4270,7 +4282,7 @@ packetLen(0x0af4, 11) // CZ_USE_SKILL_TOGROUND
packetLen(0x0af5, 3)
// Packet: 0x0af6
-packetLen(0x0af6, 88)
+packetLen(0x0af6, 88) // ZC_ACK_RANKING
// Packet: 0x0af7
packetLen(0x0af7, 32) // ZC_ACK_REQNAME_BYGID
@@ -4312,7 +4324,13 @@ packetLen(0x0b02, 26) // AC_REFUSE_LOGIN4
packetLen(0x0b03, -1) // ZC_EQUIPWIN_MICROSCOPE_V7
// Packet: 0x0b04
+#if PACKETVER >= 20190814
+packetLen(0x0b04, 90)
+#elif PACKETVER >= 20190605
+packetLen(0x0b04, 72)
+#elif PACKETVER >= 20190116
packetLen(0x0b04, 80)
+#endif
// Packet: 0x0b05
packetLen(0x0b05, 63) // ZC_OFFLINE_STORE_VISIBLE
@@ -4393,12 +4411,16 @@ packetLen(0x0b1d, 2) // ZC_PING
#endif
// Packet: 0x0b1e
-#if PACKETVER >= 20190313
+#if PACKETVER >= 20190626
+packetLen(0x0b1e, 14)
+#elif PACKETVER >= 20190313
packetLen(0x0b1e, 10)
#endif
// Packet: 0x0b1f
-#if PACKETVER >= 20190313
+#if PACKETVER >= 20190626
+packetLen(0x0b1f, 14)
+#elif PACKETVER >= 20190313
packetLen(0x0b1f, 10)
#endif
@@ -4456,14 +4478,18 @@ packetLen(0x0b28, -1)
#endif
// Packet: 0x0b29
-#if PACKETVER >= 20190502
+#if PACKETVER >= 20190605
+// removed
+#elif PACKETVER >= 20190502
packetLen(0x0b29, 6)
#elif PACKETVER >= 20190424
packetLen(0x0b29, 3)
#endif
// Packet: 0x0b2a
-#if PACKETVER >= 20190529
+#if PACKETVER >= 20190605
+// removed
+#elif PACKETVER >= 20190529
packetLen(0x0b2a, 40)
#elif PACKETVER >= 20190502
packetLen(0x0b2a, 6)
@@ -4491,7 +4517,7 @@ packetLen(0x0b2e, 4)
// Packet: 0x0b2f
#if PACKETVER >= 20190529
-packetLen(0x0b2f, 73)
+packetLen(0x0b2f, 73) // ZC_PROPERTY_HOMUN_3
#endif
// Packet: 0x0b30
@@ -4499,5 +4525,234 @@ packetLen(0x0b2f, 73)
packetLen(0x0b30, -1)
#endif
+// Packet: 0x0b31
+#if PACKETVER >= 20190626
+packetLen(0x0b31, 17) // ZC_ADD_SKILL
+#endif
+
+// Packet: 0x0b32
+#if PACKETVER >= 20190626
+packetLen(0x0b32, -1) // ZC_SKILLINFO_LIST
+#endif
+
+// Packet: 0x0b33
+#if PACKETVER >= 20190626
+packetLen(0x0b33, 17) // ZC_SKILLINFO_UPDATE2
+#endif
+
+// Packet: 0x0b34
+#if PACKETVER >= 20190724
+packetLen(0x0b34, 50)
+#elif PACKETVER >= 20190626
+packetLen(0x0b34, 26)
+#endif
+
+// Packet: 0x0b35
+#if PACKETVER >= 20190709
+packetLen(0x0b35, 3)
+#endif
+
+// Packet: 0x0b36
+#if PACKETVER >= 20190709
+packetLen(0x0b36, -1)
+#endif
+
+// Packet: 0x0b37
+#if PACKETVER >= 20190724
+packetLen(0x0b37, -1)
+#endif
+
+// Packet: 0x0b38
+#if PACKETVER >= 20190724
+packetLen(0x0b38, -1)
+#endif
+
+// Packet: 0x0b39
+#if PACKETVER >= 20190724
+packetLen(0x0b39, -1)
+#endif
+
+// Packet: 0x0b3a
+#if PACKETVER >= 20190724
+packetLen(0x0b3a, 4)
+#endif
+
+// Packet: 0x0b3b
+#if PACKETVER >= 20190724
+packetLen(0x0b3b, 4)
+#endif
+
+// Packet: 0x0b3c
+#if PACKETVER >= 20190724
+packetLen(0x0b3c, 4)
+#endif
+
+// Packet: 0x0b3d
+#if PACKETVER >= 20190724
+packetLen(0x0b3d, -1)
+#endif
+
+// Packet: 0x0b3e
+#if PACKETVER >= 20190724
+packetLen(0x0b3e, -1)
+#endif
+
+// Packet: 0x0b3f
+#if PACKETVER >= 20190724
+packetLen(0x0b3f, 64)
+#endif
+
+// Packet: 0x0b40
+#if PACKETVER >= 20190724
+packetLen(0x0b40, -1)
+#endif
+
+// Packet: 0x0b41
+#if PACKETVER >= 20190724
+packetLen(0x0b41, 41)
+#endif
+
+// Packet: 0x0b42
+#if PACKETVER >= 20190724
+packetLen(0x0b42, 30)
+#endif
+
+// Packet: 0x0b43
+#if PACKETVER >= 20190724
+packetLen(0x0b43, 47)
+#endif
+
+// Packet: 0x0b44
+#if PACKETVER >= 20190724
+packetLen(0x0b44, 32)
+#endif
+
+// Packet: 0x0b45
+#if PACKETVER >= 20190724
+packetLen(0x0b45, 32)
+#endif
+
+// Packet: 0x0b46
+#if PACKETVER >= 20190724
+packetLen(0x0b46, 10)
+#endif
+
+// Packet: 0x0b47
+#if PACKETVER >= 20190724
+packetLen(0x0b47, 14)
+#endif
+
+// Packet: 0x0b48
+#if PACKETVER >= 20190724
+packetLen(0x0b48, 18)
+#endif
+
+// Packet: 0x0b49
+#if PACKETVER >= 20190724
+packetLen(0x0b49, 4)
+#endif
+
+// Packet: 0x0b4a
+#if PACKETVER >= 20190724
+packetLen(0x0b4a, 6)
+#endif
+
+// Packet: 0x0b4b
+#if PACKETVER >= 20190724
+packetLen(0x0b4b, 4)
+#endif
+
+// Packet: 0x0b4c
+#if PACKETVER >= 20190724
+packetLen(0x0b4c, 2)
+#endif
+
+// Packet: 0x0b4d
+#if PACKETVER >= 20190814
+packetLen(0x0b4d, -1)
+#elif PACKETVER >= 20190724
+packetLen(0x0b4d, 6)
+#endif
+
+// Packet: 0x0b4e
+#if PACKETVER >= 20190814
+packetLen(0x0b4e, -1)
+#endif
+
+// Packet: 0x0b4f
+#if PACKETVER >= 20190814
+packetLen(0x0b4f, 2)
+#endif
+
+// Packet: 0x0b50
+#if PACKETVER >= 20190814
+packetLen(0x0b50, 2)
+#endif
+
+// Packet: 0x0b51
+#if PACKETVER >= 20190814
+packetLen(0x0b51, 2)
+#endif
+
+// Packet: 0x0b52
+#if PACKETVER >= 20190814
+packetLen(0x0b52, 2)
+#endif
+
+// Packet: 0x0b53
+#if PACKETVER >= 20190814
+packetLen(0x0b53, 52)
+#endif
+
+// Packet: 0x0b54
+#if PACKETVER >= 20190814
+packetLen(0x0b54, 8)
+#endif
+
+// Packet: 0x0b55
+#if PACKETVER >= 20190828
+packetLen(0x0b55, -1)
+#endif
+
+// Packet: 0x0b56
+#if PACKETVER >= 20190828
+packetLen(0x0b56, -1)
+#endif
+
+// Packet: 0x0b57
+#if PACKETVER >= 20190828
+packetLen(0x0b57, -1)
+#endif
+
+// Packet: 0x0b58
+#if PACKETVER >= 20190828
+packetLen(0x0b58, 2)
+#endif
+
+// Packet: 0x0b59
+#if PACKETVER >= 20190918
+packetLen(0x0b59, 2)
+#endif
+
+// Packet: 0x0b5a
+#if PACKETVER >= 20190918
+packetLen(0x0b5a, 4)
+#endif
+
+// Packet: 0x0b5b
+#if PACKETVER >= 20190918
+packetLen(0x0b5b, -1)
+#endif
+
+// Packet: 0x0b5c
+#if PACKETVER >= 20190918
+packetLen(0x0b5c, 10)
+#endif
+
+// Packet: 0x0b5d
+#if PACKETVER >= 20190918
+packetLen(0x0b5d, 2)
+#endif
+
#endif /* COMMON_PACKETS2019_LEN_ZERO_H */
diff --git a/src/map/atcommand.c b/src/map/atcommand.c
index 97af2afff..f57583cfc 100644
--- a/src/map/atcommand.c
+++ b/src/map/atcommand.c
@@ -511,7 +511,7 @@ ACMD(where)
return false;
}
- pl_sd = map->nick2sd(atcmd_player_name);
+ pl_sd = map->nick2sd(atcmd_player_name, true);
if (pl_sd == NULL ||
strncmp(pl_sd->status.name, atcmd_player_name, NAME_LENGTH) != 0 ||
(pc_has_permission(pl_sd, PC_PERM_HIDE_SESSION) && pc_get_group_level(pl_sd) > pc_get_group_level(sd) && !pc_has_permission(sd, PC_PERM_WHO_DISPLAY_AID))
@@ -548,7 +548,7 @@ ACMD(jumpto)
return false;
}
- if ((pl_sd=map->nick2sd(message)) == NULL && (pl_sd=map->charid2sd(atoi(message))) == NULL) {
+ if ((pl_sd=map->nick2sd(message, true)) == NULL && (pl_sd=map->charid2sd(atoi(message))) == NULL) {
clif->message(fd, msg_fd(fd,3)); // Character not found.
return false;
}
@@ -1107,8 +1107,10 @@ ACMD(kami)
sscanf(message, "%199[^\n]", atcmd_output);
if (stristr(info->command, "l") != NULL)
clif->broadcast(&sd->bl, atcmd_output, (int)strlen(atcmd_output) + 1, BC_DEFAULT, ALL_SAMEMAP);
+ else if (info->command[4] == 'b' || info->command[4] == 'B')
+ clif->broadcast(NULL, atcmd_output, (int)strlen(atcmd_output) + 1, BC_BLUE, ALL_CLIENT);
else
- intif->broadcast(atcmd_output, (int)strlen(atcmd_output) + 1, (*(info->command + 4) == 'b' || *(info->command + 4) == 'B') ? BC_BLUE : BC_YELLOW);
+ clif->broadcast(NULL, atcmd_output, (int)strlen(atcmd_output) + 1, BC_YELLOW, ALL_CLIENT);
} else {
if(!*message || (sscanf(message, "%10u %199[^\n]", &color, atcmd_output) < 2)) {
clif->message(fd, msg_fd(fd,981)); // Please enter color and message (usage: @kamic <color> <message>).
@@ -1119,7 +1121,7 @@ ACMD(kami)
clif->message(fd, msg_fd(fd,982)); // Invalid color.
return false;
}
- intif->broadcast2(atcmd_output, (int)strlen(atcmd_output) + 1, color, 0x190, 12, 0, 0);
+ clif->broadcast2(NULL, atcmd_output, (int)strlen(atcmd_output) + 1, color, 0x190, 12, 0, 0, ALL_CLIENT);
}
return true;
}
@@ -2232,26 +2234,56 @@ ACMD(refine)
memset(atcmd_output, '\0', sizeof(atcmd_output));
if (!*message || sscanf(message, "%12d %12d", &position, &refine_level) < 2) {
- clif->message(fd, msg_fd(fd,996)); // Please enter a position and an amount (usage: @refine <equip position> <+/- amount>).
- safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd,997), EQP_HEAD_LOW); // %d: Lower Headgear
+ clif->message(fd, msg_fd(fd, 996)); // Please enter a position and an amount (usage: @refine <equip position> <+/- amount>).
+#if PACKETVER > 20100707
+ safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd, 1515), -3); // %d: Refine All Equip (Shadow)
clif->message(fd, atcmd_output);
- safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd,998), EQP_HAND_R); // %d: Right Hand
+ safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd, 1514), -2); // %d: Refine All Equip (Costume)
clif->message(fd, atcmd_output);
- safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd,999), EQP_GARMENT); // %d: Garment
+#endif
+ safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd, 1513), -1); // %d: Refine All Equip (General)
+ clif->message(fd, atcmd_output);
+ safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd, 997), EQP_HEAD_LOW); // %d: Headgear (Low)
+ clif->message(fd, atcmd_output);
+ safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd, 998), EQP_HAND_R); // Hand (Right)
+ clif->message(fd, atcmd_output);
+ safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd, 999), EQP_GARMENT); // %d: Garment
+ clif->message(fd, atcmd_output);
+ safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd, 1000), EQP_ACC_L); // Accessory (Left)
+ clif->message(fd, atcmd_output);
+ safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd, 1001), EQP_ARMOR); // %d: Body Armor
+ clif->message(fd, atcmd_output);
+ safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd, 1002), EQP_HAND_L); // Hand (Left)
+ clif->message(fd, atcmd_output);
+ safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd, 1003), EQP_SHOES); // %d: Shoes
clif->message(fd, atcmd_output);
- safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd,1000), EQP_ACC_L); // %d: Left Accessory
+ safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd, 1004), EQP_ACC_R); // Accessory (Right)
clif->message(fd, atcmd_output);
- safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd,1001), EQP_ARMOR); // %d: Body Armor
+ safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd, 1005), EQP_HEAD_TOP); // %d: Headgear (Top)
clif->message(fd, atcmd_output);
- safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd,1002), EQP_HAND_L); // %d: Left Hand
+ safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd, 1006), EQP_HEAD_MID); // %d: Headgear (Mid)
+#if PACKETVER > 20100707
+ safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd, 1503), EQP_COSTUME_HEAD_TOP); // %d: Costume Headgear (Top)
clif->message(fd, atcmd_output);
- safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd,1003), EQP_SHOES); // %d: Shoes
+ safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd, 1504), EQP_COSTUME_HEAD_MID); // %d: Costume Headgear (Mid)
clif->message(fd, atcmd_output);
- safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd,1004), EQP_ACC_R); // %d: Right Accessory
+ safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd, 1505), EQP_COSTUME_HEAD_LOW); // %d: Costume Headgear (Low)
clif->message(fd, atcmd_output);
- safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd,1005), EQP_HEAD_TOP); // %d: Top Headgear
+ safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd, 1506), EQP_COSTUME_GARMENT); // %d: Costume Garment
clif->message(fd, atcmd_output);
- safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd,1006), EQP_HEAD_MID); // %d: Mid Headgear
+ safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd, 1507), EQP_SHADOW_ARMOR); // %d: Shadow Armor
+ clif->message(fd, atcmd_output);
+ safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd, 1508), EQP_SHADOW_WEAPON); // %d: Shadow Weapon
+ clif->message(fd, atcmd_output);
+ safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd, 1509), EQP_SHADOW_SHIELD); // %d: Shadow Shield
+ clif->message(fd, atcmd_output);
+ safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd, 1510), EQP_SHADOW_SHOES); // %d: Shadow Shoes
+ clif->message(fd, atcmd_output);
+ safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd, 1511), EQP_SHADOW_ACC_R); // %d: Shadow Accessory (Right)
+ clif->message(fd, atcmd_output);
+ safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd, 1512), EQP_SHADOW_ACC_L); // %d: Shadow Accessory (Left)
+ clif->message(fd, atcmd_output);
+#endif
clif->message(fd, atcmd_output);
return false;
}
@@ -2263,22 +2295,33 @@ ACMD(refine)
int idx = sd->equip_index[j];
if (idx < 0)
continue;
- if(j == EQI_AMMO) continue; /* can't equip ammo */
- if(j == EQI_HAND_R && sd->equip_index[EQI_HAND_L] == idx)
+ if (j == EQI_AMMO)
+ continue; /* can't equip ammo */
+ if (j == EQI_HAND_R && sd->equip_index[EQI_HAND_L] == idx)
continue;
- if(j == EQI_HEAD_MID && sd->equip_index[EQI_HEAD_LOW] == idx)
+ if (j == EQI_HEAD_MID && sd->equip_index[EQI_HEAD_LOW] == idx)
continue;
- if(j == EQI_HEAD_TOP && (sd->equip_index[EQI_HEAD_MID] == idx || sd->equip_index[EQI_HEAD_LOW] == idx))
+ if (j == EQI_HEAD_TOP && (sd->equip_index[EQI_HEAD_MID] == idx || sd->equip_index[EQI_HEAD_LOW] == idx))
+ continue;
+ if (j == EQI_COSTUME_MID && sd->equip_index[EQI_COSTUME_LOW] == idx)
+ continue;
+ if (j == EQI_COSTUME_TOP && (sd->equip_index[EQI_COSTUME_MID] == idx || sd->equip_index[EQI_COSTUME_LOW] == idx))
continue;
- if(position && !(sd->status.inventory[idx].equip & position))
+ if (position == -3 && !itemdb_is_shadowequip(sd->status.inventory[idx].equip))
+ continue;
+ else if (position == -2 && !itemdb_is_costumeequip(sd->status.inventory[idx].equip))
+ continue;
+ else if (position == -1 && (itemdb_is_costumeequip(sd->status.inventory[idx].equip) || itemdb_is_shadowequip(sd->status.inventory[idx].equip)))
+ continue;
+ else if (position && !(sd->status.inventory[idx].equip & position))
continue;
final_refine = cap_value(sd->status.inventory[idx].refine + refine_level, 0, MAX_REFINE);
if (sd->status.inventory[idx].refine != final_refine) {
sd->status.inventory[idx].refine = final_refine;
current_position = sd->status.inventory[idx].equip;
- pc->unequipitem(sd, idx, PCUNEQUIPITEM_RECALC|PCUNEQUIPITEM_FORCE);
+ pc->unequipitem(sd, idx, PCUNEQUIPITEM_RECALC | PCUNEQUIPITEM_FORCE);
clif->refine(fd, 0, idx, sd->status.inventory[idx].refine);
clif->delitem(sd, idx, 1, DELITEM_MATERIALCHANGE);
clif->additem(sd, idx, 1, 0);
@@ -2289,11 +2332,11 @@ ACMD(refine)
}
if (count == 0)
- clif->message(fd, msg_fd(fd,166)); // No item has been refined.
+ clif->message(fd, msg_fd(fd, 166)); // No item has been refined.
else if (count == 1)
- clif->message(fd, msg_fd(fd,167)); // 1 item has been refined.
+ clif->message(fd, msg_fd(fd, 167)); // 1 item has been refined.
else {
- safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd,168), count); // %d items have been refined.
+ safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd, 168), count); // %d items have been refined.
clif->message(fd, atcmd_output);
}
@@ -2861,7 +2904,7 @@ ACMD(recall)
return false;
}
- if ((pl_sd=map->nick2sd(message)) == NULL && (pl_sd=map->charid2sd(atoi(message))) == NULL) {
+ if ((pl_sd=map->nick2sd(message, true)) == NULL && (pl_sd=map->charid2sd(atoi(message))) == NULL) {
clif->message(fd, msg_fd(fd,3)); // Character not found.
return false;
}
@@ -3186,7 +3229,7 @@ ACMD(kick)
return false;
}
- if ((pl_sd=map->nick2sd(message)) == NULL && (pl_sd=map->charid2sd(atoi(message))) == NULL) {
+ if ((pl_sd=map->nick2sd(message, true)) == NULL && (pl_sd=map->charid2sd(atoi(message))) == NULL) {
clif->message(fd, msg_fd(fd,3)); // Character not found.
return false;
}
@@ -3516,7 +3559,7 @@ ACMD(idsearch)
safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd,77), item_name); // Search results for '%s' (name: id):
clif->message(fd, atcmd_output);
- match = itemdb->search_name_array(item_array, MAX_SEARCH, item_name, 0);
+ match = itemdb->search_name_array(item_array, MAX_SEARCH, item_name, IT_SEARCH_NAME_PARTIAL);
if (match > MAX_SEARCH) {
safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd,269), MAX_SEARCH, match);
clif->message(fd, atcmd_output);
@@ -4321,7 +4364,7 @@ ACMD(nuke)
return false;
}
- if ((pl_sd = map->nick2sd(atcmd_player_name)) != NULL) {
+ if ((pl_sd = map->nick2sd(atcmd_player_name, true)) != NULL) {
if (pc_get_group_level(sd) >= pc_get_group_level(pl_sd)) { // you can kill only lower or same GM level
skill->castend_nodamage_id(&pl_sd->bl, &pl_sd->bl, NPC_SELFDESTRUCTION, 99, timer->gettick(), 0);
clif->message(fd, msg_fd(fd,109)); // Player has been nuked!
@@ -4464,6 +4507,38 @@ ACMD(unloadnpc)
return true;
}
+/// Unload existing NPC within the NPC file and reload it.
+/// Usage: @reloadnpc npc/sample_npc.txt
+ACMD(reloadnpc)
+{
+ if (!*message) {
+ clif->message(fd, msg_fd(fd, 1385)); // Usage: @unloadnpcfile <file name>
+ return false;
+ } else if (npc->unloadfile(message) == true) {
+ clif->message(fd, msg_fd(fd, 1386)); // File unloaded. Be aware that mapflags and monsters spawned directly are not removed.
+
+ FILE *fp = fopen(message, "r");
+ // check if script file exists
+ if (fp == NULL) {
+ clif->message(fd, msg_fd(fd, 261));
+ return false;
+ }
+ fclose(fp);
+
+ // add to list of script sources and run it
+ npc->addsrcfile(message);
+ npc->parsesrcfile(message, true);
+ npc->read_event_script();
+
+ clif->message(fd, msg_fd(fd, 262));
+ } else {
+ clif->message(fd, msg_fd(fd, 1387)); // File not found.
+ return false;
+ }
+
+ return true;
+}
+
/*==========================================
* time in txt for time command (by [Yor])
*------------------------------------------*/
@@ -4609,7 +4684,7 @@ ACMD(jail)
return false;
}
- if ((pl_sd = map->nick2sd(atcmd_player_name)) == NULL) {
+ if ((pl_sd = map->nick2sd(atcmd_player_name, true)) == NULL) {
clif->message(fd, msg_fd(fd,3)); // Character not found.
return false;
}
@@ -4661,7 +4736,7 @@ ACMD(unjail)
return false;
}
- if ((pl_sd = map->nick2sd(atcmd_player_name)) == NULL) {
+ if ((pl_sd = map->nick2sd(atcmd_player_name, true)) == NULL) {
clif->message(fd, msg_fd(fd,3)); // Character not found.
return false;
}
@@ -4740,7 +4815,7 @@ ACMD(jailfor)
return false;
}
- if ((pl_sd = map->nick2sd(atcmd_player_name)) == NULL) {
+ if ((pl_sd = map->nick2sd(atcmd_player_name, true)) == NULL) {
clif->message(fd, msg_fd(fd,3)); // Character not found.
return false;
}
@@ -5052,7 +5127,7 @@ ACMD(broadcast)
}
safesnprintf(atcmd_output, sizeof(atcmd_output), "%s: %s", sd->status.name, message);
- intif->broadcast(atcmd_output, (int)strlen(atcmd_output) + 1, BC_DEFAULT);
+ clif->broadcast(NULL, atcmd_output, (int)strlen(atcmd_output) + 1, BC_DEFAULT, ALL_CLIENT);
return true;
}
@@ -5271,7 +5346,7 @@ ACMD(follow)
return true;
}
- if ((pl_sd = map->nick2sd(message)) == NULL) {
+ if ((pl_sd = map->nick2sd(message, true)) == NULL) {
clif->message(fd, msg_fd(fd,3)); // Character not found.
return false;
}
@@ -5294,7 +5369,6 @@ ACMD(follow)
ACMD(dropall)
{
int type = -1;
- int count = 0;
if (message[0] != '\0') {
type = atoi(message);
@@ -5305,25 +5379,32 @@ ACMD(dropall)
}
}
+ int count = 0, count_skipped = 0;
for (int i = 0; i < sd->status.inventorySize; i++) {
- if (sd->status.inventory[i].amount) {
+ if (sd->status.inventory[i].amount > 0) {
struct item_data *item_data = itemdb->exists(sd->status.inventory[i].nameid);
if (item_data == NULL) {
ShowWarning("Non-existant item %d on dropall list (account_id: %d, char_id: %d)\n", sd->status.inventory[i].nameid, sd->status.account_id, sd->status.char_id);
continue;
}
+
if (!pc->candrop(sd, &sd->status.inventory[i]))
continue;
+
if (type == -1 || type == item_data->type) {
if (sd->status.inventory[i].equip != 0)
pc->unequipitem(sd, i, PCUNEQUIPITEM_RECALC | PCUNEQUIPITEM_FORCE);
- count += sd->status.inventory[i].amount;
- pc->dropitem(sd, i, sd->status.inventory[i].amount);
+
+ int amount = sd->status.inventory[i].amount;
+ if (pc->dropitem(sd, i, amount) != 0)
+ count += amount;
+ else
+ count_skipped += amount;
}
}
}
- sprintf(atcmd_output, msg_fd(fd, 1502), count); // %d items are dropped!
+ sprintf(atcmd_output, msg_fd(fd, 1502), count, count_skipped); // %d items are dropped (%d skipped)!
clif->message(fd, atcmd_output);
return true;
}
@@ -5521,7 +5602,7 @@ ACMD(useskill)
if (!strcmp(target,"self"))
pl_sd = sd; //quick keyword
- else if ((pl_sd = map->nick2sd(target)) == NULL) {
+ else if ((pl_sd = map->nick2sd(target, true)) == NULL) {
clif->message(fd, msg_fd(fd,3)); // Character not found.
return false;
}
@@ -5589,7 +5670,7 @@ ACMD(skilltree)
return false;
}
- if ( (pl_sd = map->nick2sd(target)) == NULL ) {
+ if ( (pl_sd = map->nick2sd(target, true)) == NULL ) {
clif->message(fd, msg_fd(fd,3)); // Character not found.
return false;
}
@@ -5659,7 +5740,7 @@ ACMD(marry)
return false;
}
- if ((pl_sd = map->nick2sd(player_name)) == NULL) {
+ if ((pl_sd = map->nick2sd(player_name, true)) == NULL) {
clif->message(fd, msg_fd(fd,3));
return false;
}
@@ -5789,7 +5870,7 @@ ACMD(changegm)
return false;
}
- if ((pl_sd=map->nick2sd(message)) == NULL || pl_sd->status.guild_id != sd->status.guild_id) {
+ if ((pl_sd=map->nick2sd(message, true)) == NULL || pl_sd->status.guild_id != sd->status.guild_id) {
clif->message(fd, msg_fd(fd,1184)); // Target character must be online and be a guild member.
return false;
}
@@ -5810,7 +5891,7 @@ ACMD(changeleader)
return false;
}
- if (party->changeleader(sd, map->nick2sd(message)))
+ if (party->changeleader(sd, map->nick2sd(message, true)))
return true;
return false;
}
@@ -6274,7 +6355,7 @@ ACMD(mobsearch)
}
if (mob_id == atoi(mob_name)) {
strcpy(mob_name,mob->db(mob_id)->jname); // DEFAULT_MOB_JNAME
- //strcpy(mob_name,mob_db(mob_id)->name); // DEFAULT_MOB_NAME
+ //strcpy(mob_name,mob->db(mob_id)->name); // DEFAULT_MOB_NAME
}
snprintf(atcmd_output, sizeof atcmd_output, msg_fd(fd,1220), mob_name, mapindex_id2name(sd->mapindex)); // Mob Search... %s %s
@@ -6576,7 +6657,7 @@ ACMD(trade)
return false;
}
- if ((pl_sd = map->nick2sd(message)) == NULL) {
+ if ((pl_sd = map->nick2sd(message, true)) == NULL) {
clif->message(fd, msg_fd(fd,3)); // Character not found.
return false;
}
@@ -6620,7 +6701,7 @@ ACMD(unmute)
return false;
}
- if ((pl_sd = map->nick2sd(message)) == NULL) {
+ if ((pl_sd = map->nick2sd(message, true)) == NULL) {
clif->message(fd, msg_fd(fd,3)); // Character not found.
return false;
}
@@ -6675,6 +6756,18 @@ ACMD(changesex)
return true;
}
+ACMD(changecharsex)
+{
+ int i;
+
+ pc->resetskill(sd, PCRESETSKILL_CHSEX);
+ // to avoid any problem with equipment and invalid sex, equipment is unequipped.
+ for (i=0; i<EQI_MAX; i++)
+ if (sd->equip_index[i] >= 0) pc->unequipitem(sd, sd->equip_index[i], PCUNEQUIPITEM_RECALC|PCUNEQUIPITEM_FORCE);
+ chrif->changesex(sd, false);
+ return true;
+}
+
/*================================================
* @mute - Mutes a player for a set amount of time
*------------------------------------------------*/
@@ -6688,7 +6781,7 @@ ACMD(mute)
return false;
}
- if ((pl_sd = map->nick2sd(atcmd_player_name)) == NULL) {
+ if ((pl_sd = map->nick2sd(atcmd_player_name, true)) == NULL) {
clif->message(fd, msg_fd(fd,3)); // Character not found.
return false;
}
@@ -6720,6 +6813,9 @@ ACMD(mute)
*------------------------------------------*/
ACMD(refresh)
{
+ if (sd->npc_id > 0)
+ return false;
+
clif->refresh(sd);
return true;
}
@@ -6731,29 +6827,41 @@ ACMD(refreshall)
iter = mapit_getallusers();
for (iter_sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); iter_sd = BL_UCAST(BL_PC, mapit->next(iter)))
- clif->refresh(iter_sd);
+ if (iter_sd->npc_id <= 0)
+ clif->refresh(iter_sd);
mapit->free(iter);
return true;
}
/*==========================================
- * @identify
+ * @identify / @identifyall
* => GM's magnifier.
*------------------------------------------*/
ACMD(identify)
{
int num = 0;
+ bool identifyall = (strcmpi(info->command, "identifyall") == 0);
- for (int i = 0; i < sd->status.inventorySize; i++) {
- if(sd->status.inventory[i].nameid > 0 && sd->status.inventory[i].identify!=1){
- num++;
+ if (!identifyall) {
+ for (int i = 0; i < sd->status.inventorySize; i++) {
+ if (sd->status.inventory[i].nameid > 0 && sd->status.inventory[i].identify != 1) {
+ num++;
+ }
}
- }
- if (num > 0) {
- clif->item_identify_list(sd);
} else {
- clif->message(fd,msg_fd(fd,1238)); // There are no items to appraise.
+ for (int i = 0; i < sd->status.inventorySize; i++) {
+ if (sd->status.inventory[i].nameid > 0 && sd->status.inventory[i].identify != 1) {
+ skill->identify(sd, i);
+ num++;
+ }
+ }
}
+
+ if (num == 0)
+ clif->message(fd,msg_fd(fd,1238)); // There are no items to appraise.
+ else if (!identifyall)
+ clif->item_identify_list(sd);
+
return true;
}
@@ -6970,7 +7078,7 @@ ACMD(showmobs)
if (mob_id == atoi(mob_name)) {
strcpy(mob_name,mob->db(mob_id)->jname); // DEFAULT_MOB_JNAME
- //strcpy(mob_name,mob_db(mob_id)->name); // DEFAULT_MOB_NAME
+ //strcpy(mob_name,mob->db(mob_id)->name); // DEFAULT_MOB_NAME
}
snprintf(atcmd_output, sizeof atcmd_output, msg_fd(fd,1252), // Mob Search... %s %s
@@ -7351,7 +7459,7 @@ ACMD(iteminfo)
return false;
}
if ((item_array[0] = itemdb->exists(atoi(message))) == NULL)
- count = itemdb->search_name_array(item_array, MAX_SEARCH, message, 0);
+ count = itemdb->search_name_array(item_array, MAX_SEARCH, message, IT_SEARCH_NAME_PARTIAL);
if (!count) {
clif->message(fd, msg_fd(fd,19)); // Invalid item ID or name.
@@ -7402,7 +7510,7 @@ ACMD(whodrops)
return false;
}
if ((item_array[0] = itemdb->exists(atoi(message))) == NULL)
- count = itemdb->search_name_array(item_array, MAX_SEARCH, message, 0);
+ count = itemdb->search_name_array(item_array, MAX_SEARCH, message, IT_SEARCH_NAME_PARTIAL);
if (!count) {
clif->message(fd, msg_fd(fd,19)); // Invalid item ID or name.
@@ -7883,7 +7991,7 @@ ACMD(showdelay)
ACMD(invite)
{
unsigned int did = sd->duel_group;
- struct map_session_data *target_sd = map->nick2sd(message);
+ struct map_session_data *target_sd = map->nick2sd(message, true);
if (did == 0)
{
@@ -7956,7 +8064,7 @@ ACMD(duel)
}
duel->create(sd, maxpl);
} else {
- struct map_session_data *target_sd = map->nick2sd(message);
+ struct map_session_data *target_sd = map->nick2sd(message, true);
if (target_sd != NULL) {
unsigned int newduel;
if ((newduel = duel->create(sd, 2)) != -1) {
@@ -8101,7 +8209,7 @@ ACMD(clone)
return false;
}
- if ((pl_sd=map->nick2sd(message)) == NULL && (pl_sd=map->charid2sd(atoi(message))) == NULL) {
+ if ((pl_sd=map->nick2sd(message, true)) == NULL && (pl_sd=map->charid2sd(atoi(message))) == NULL) {
clif->message(fd, msg_fd(fd,3)); // Character not found.
return false;
}
@@ -8175,7 +8283,7 @@ ACMD(request)
}
safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd,278), message); // (@request): %s
- intif->wis_message_to_gm(sd->status.name, PC_PERM_RECEIVE_REQUESTS, atcmd_output);
+ pc->wis_message_to_gm(sd->status.name, PC_PERM_RECEIVE_REQUESTS, atcmd_output);
clif_disp_onlyself(sd, atcmd_output);
clif->message(sd->fd,msg_fd(fd,279)); // @request sent.
return true;
@@ -9219,7 +9327,7 @@ ACMD(channel)
return false;
}
- if (sub4[0] == '\0' || (pl_sd = map->nick2sd(sub4)) == NULL) {
+ if (sub4[0] == '\0' || (pl_sd = map->nick2sd(sub4, true)) == NULL) {
safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd,1434), sub4);// Player '%s' was not found
clif->message(fd, atcmd_output);
return false;
@@ -9266,7 +9374,7 @@ ACMD(channel)
clif->message(fd, atcmd_output);
return false;
}
- if (sub4[0] == '\0' || (pl_sd = map->nick2sd(sub4)) == NULL) {
+ if (sub4[0] == '\0' || (pl_sd = map->nick2sd(sub4, true)) == NULL) {
safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd,1434), sub4);// Player '%s' was not found
clif->message(fd, atcmd_output);
return false;
@@ -10025,10 +10133,12 @@ static void atcommand_basecommands(void)
ACMD_DEF(clearweather),
ACMD_DEF(uptime),
ACMD_DEF(changesex),
+ ACMD_DEF(changecharsex),
ACMD_DEF(mute),
ACMD_DEF(refresh),
ACMD_DEF(refreshall),
ACMD_DEF(identify),
+ ACMD_DEF2("identifyall", identify),
ACMD_DEF(misceffect),
ACMD_DEF(mobsearch),
ACMD_DEF(cleanmap),
@@ -10118,6 +10228,7 @@ static void atcommand_basecommands(void)
ACMD_DEF(addperm),
ACMD_DEF2("rmvperm", addperm),
ACMD_DEF(unloadnpcfile),
+ ACMD_DEF(reloadnpc),
ACMD_DEF(cart),
ACMD_DEF(cashmount),
ACMD_DEF(join),
@@ -10358,7 +10469,7 @@ static bool atcommand_exec(const int fd, struct map_session_data *sd, const char
return true;
}
- ssd = map->nick2sd(charname);
+ ssd = map->nick2sd(charname, true);
if (ssd == NULL) {
sprintf(output, msg_fd(fd,1389), command); // %s failed. Player not found.
clif->message(fd, output);
diff --git a/src/map/atcommand.h b/src/map/atcommand.h
index 4fbf6b93a..f1da2760a 100644
--- a/src/map/atcommand.h
+++ b/src/map/atcommand.h
@@ -41,7 +41,7 @@ struct config_setting_t;
* Defines
**/
#define ATCOMMAND_LENGTH 50
-#define MAX_MSG 1503
+#define MAX_MSG 1516
#define msg_txt(idx) atcommand->msg(idx)
#define msg_sd(sd,msg_number) atcommand->msgsd((sd),(msg_number))
#define msg_fd(fd,msg_number) atcommand->msgfd((fd),(msg_number))
diff --git a/src/map/battle.c b/src/map/battle.c
index c40c3afac..726547c66 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -3467,11 +3467,6 @@ static int64 battle_calc_gvg_damage(struct block_list *src, struct block_list *b
case NC_SELFDESTRUCTION:
break;
default:
- /* Uncomment if you want god-mode Emperiums at 100 defense. [Kisuka]
- if (md && md->guardian_data) {
- damage -= damage * (md->guardian_data->castle->defense/100) * battle_config.castle_defense_rate/100;
- }
- */
break;
}
return damage;
@@ -6321,6 +6316,18 @@ static enum damage_lv battle_weapon_attack(struct block_list *src, struct block_
if (sd && sd->state.arrow_atk) //Consume arrow.
battle->consume_ammo(sd, 0, 0);
+ if (target->type == BL_MOB) {
+ struct mob_data *md = BL_CAST(BL_MOB, target);
+ if (md != NULL) {
+ if (md->db->dmg_taken_rate != 100) {
+ if (wd.damage > 0)
+ wd.damage = apply_percentrate64(wd.damage, md->db->dmg_taken_rate, 100);
+ if (wd.damage2 > 0)
+ wd.damage2 = apply_percentrate64(wd.damage2, md->db->dmg_taken_rate, 100);
+ }
+ }
+ }
+
damage = wd.damage + wd.damage2;
if( damage > 0 && src != target ) {
if( sc && sc->data[SC_DUPLELIGHT] && (wd.flag&BF_SHORT) && rnd()%100 <= 10+2*sc->data[SC_DUPLELIGHT]->val1 ){
@@ -7176,7 +7183,6 @@ static const struct battle_data {
{ "skill_removetrap_type", &battle_config.skill_removetrap_type, 0, 0, 1, },
{ "disp_experience", &battle_config.disp_experience, 0, 0, 1, },
{ "disp_zeny", &battle_config.disp_zeny, 0, 0, 1, },
- { "castle_defense_rate", &battle_config.castle_defense_rate, 100, 0, 100, },
{ "bone_drop", &battle_config.bone_drop, 0, 0, 2, },
{ "buyer_name", &battle_config.buyer_name, 1, 0, 1, },
{ "skill_wall_check", &battle_config.skill_wall_check, 1, 0, 1, },
@@ -7436,6 +7442,8 @@ static const struct battle_data {
{ "critical_max_limit", &battle_config.critical_max, SHRT_MAX, 1, INT_MAX, },
{ "hit_min_limit", &battle_config.hit_min, 1, 1, INT_MAX, },
{ "hit_max_limit", &battle_config.hit_max, SHRT_MAX, 1, INT_MAX, },
+ { "autoloot_adjust", &battle_config.autoloot_adjust, 0, 0, 1, },
+ { "hom_bonus_exp_from_master", &battle_config.hom_bonus_exp_from_master, 10, 0, 100, },
};
static bool battle_set_value_sub(int index, int value)
diff --git a/src/map/battle.h b/src/map/battle.h
index 0ff5135d8..e9bc6b258 100644
--- a/src/map/battle.h
+++ b/src/map/battle.h
@@ -103,8 +103,8 @@ enum e_battle_check_target { //New definitions [Skotlex]
enum battle_dmg_type {
BDT_NORMAL = 0, // Normal attack
//BDT_PICKUP = 1, // Pick up item
- //BDT_SITDOWN = 2, // Sit down
- //BDT_STANDUP = 3, // Stand up
+ BDT_SITDOWN = 2, // Sit down
+ BDT_STANDUP = 3, // Stand up
BDT_ENDURE = 4, // Damage (endure)
BDT_SPLASH = 5, // Splash
BDT_SKILL = 6, // Skill
@@ -342,7 +342,6 @@ struct Battle_Config {
int skill_removetrap_type;
int disp_experience;
int disp_zeny;
- int castle_defense_rate;
int backstab_bow_penalty;
int hp_rate;
int sp_rate;
@@ -478,6 +477,7 @@ struct Battle_Config {
int client_emblem_max_blank_percent;
int hom_max_level;
int hom_S_max_level;
+ int hom_bonus_exp_from_master;
// [BattleGround Settings]
int bg_update_interval;
@@ -605,6 +605,8 @@ struct Battle_Config {
int critical_max;
int hit_min;
int hit_max;
+
+ int autoloot_adjust;
};
/* criteria for battle_config.idletime_critera */
diff --git a/src/map/battleground.c b/src/map/battleground.c
index c2772a2b9..e0d2e8003 100644
--- a/src/map/battleground.c
+++ b/src/map/battleground.c
@@ -169,13 +169,13 @@ static int bg_team_leave(struct map_session_data *sd, enum bg_team_leave_type fl
switch (flag) {
default:
case BGTL_QUIT:
- sprintf(output, "Server : %s has quit the game...", sd->status.name);
+ sprintf(output, msg_txt(464), sd->status.name); // Server : %s has quit the game...
break;
case BGTL_LEFT:
- sprintf(output, "Server : %s is leaving the battlefield...", sd->status.name);
+ sprintf(output, msg_txt(454), sd->status.name); // Server : %s is leaving the battlefield...
break;
case BGTL_AFK:
- sprintf(output, "Server : %s has been afk-kicked from the battlefield...", sd->status.name);
+ sprintf(output, msg_txt(455), sd->status.name); // Server : %s has been afk-kicked from the battlefield...
break;
}
clif->bg_message(bgd, 0, "Server", output);
@@ -860,9 +860,9 @@ static enum BATTLEGROUNDS_QUEUE_ACK bg_canqueue(struct map_session_data *sd, str
if ( ( tick = pc_readglobalreg(sd, script->add_variable(bg->gdelay_var)) ) && tsec < tick ) {
char response[100];
if( (tick-tsec) > 60 )
- sprintf(response, "You are a deserter! Wait %u minute(s) before you can apply again", (tick - tsec) / 60);
+ sprintf(response, msg_sd(sd, 456), (tick - tsec) / 60); // You are a deserter! Wait %u minute(s) before you can apply again
else
- sprintf(response, "You are a deserter! Wait %u seconds before you can apply again", (tick - tsec));
+ sprintf(response, msg_sd(sd, 457), (tick - tsec)); // You are a deserter! Wait %u seconds before you can apply again
clif->messagecolor_self(sd->fd, COLOR_RED, response);
return BGQA_FAIL_DESERTER;
}
@@ -870,9 +870,9 @@ static enum BATTLEGROUNDS_QUEUE_ACK bg_canqueue(struct map_session_data *sd, str
if ( ( tick = pc_readglobalreg(sd, script->add_variable(arena->delay_var)) ) && tsec < tick ) {
char response[100];
if( (tick-tsec) > 60 )
- sprintf(response, "You can't reapply to this arena so fast. Apply to the different arena or wait %u minute(s)", (tick - tsec) / 60);
+ sprintf(response, msg_sd(sd, 458), (tick - tsec) / 60); // You can't reapply to this arena so fast. Apply to the different arena or wait %u minute(s)
else
- sprintf(response, "You can't reapply to this arena so fast. Apply to the different arena or wait %u seconds", (tick - tsec));
+ sprintf(response, msg_sd(sd, 459), (tick - tsec)); // You can't reapply to this arena so fast. Apply to the different arena or wait %u seconds
clif->messagecolor_self(sd->fd, COLOR_RED, response);
return BGQA_FAIL_COOLDOWN;
}
@@ -894,9 +894,9 @@ static enum BATTLEGROUNDS_QUEUE_ACK bg_canqueue(struct map_session_data *sd, str
if ( count < arena->min_team_players ) {
char response[121];
if( count != sd->guild->connect_member && sd->guild->connect_member >= arena->min_team_players )
- sprintf(response, "Can't apply: not enough members in your team/guild that have not entered the queue in individual mode, minimum is %d", arena->min_team_players);
+ sprintf(response, msg_sd(sd, 460), arena->min_team_players); // Can't apply: not enough members in your team/guild that have not entered the queue in individual mode, minimum is %d
else
- sprintf(response, "Can't apply: not enough members in your team/guild, minimum is %d", arena->min_team_players);
+ sprintf(response, msg_sd(sd, 461), arena->min_team_players); // Can't apply: not enough members in your team/guild, minimum is %d
clif->messagecolor_self(sd->fd, COLOR_RED, response);
return BGQA_FAIL_TEAM_COUNT;
}
@@ -926,9 +926,9 @@ static enum BATTLEGROUNDS_QUEUE_ACK bg_canqueue(struct map_session_data *sd, str
if( count < arena->min_team_players ) {
char response[121];
if( count != p->party.count && p->party.count >= arena->min_team_players )
- sprintf(response, "Can't apply: not enough members in your team/party that have not entered the queue in individual mode, minimum is %d", arena->min_team_players);
+ sprintf(response, msg_sd(sd, 462), arena->min_team_players); // Can't apply: not enough members in your team/party that have not entered the queue in individual mode, minimum is %d
else
- sprintf(response, "Can't apply: not enough members in your team/party, minimum is %d",arena->min_team_players);
+ sprintf(response, msg_sd(sd, 463), arena->min_team_players); // Can't apply: not enough members in your team/party, minimum is %d
clif->messagecolor_self(sd->fd, COLOR_RED, response);
return BGQA_FAIL_TEAM_COUNT;
}
diff --git a/src/map/channel.c b/src/map/channel.c
index e27e9fb0b..c87e425eb 100644
--- a/src/map/channel.c
+++ b/src/map/channel.c
@@ -324,7 +324,7 @@ static void channel_join_sub(struct channel_data *chan, struct map_session_data
if (!stealth && (chan->options&HCS_OPT_ANNOUNCE_JOIN)) {
char message[60];
- sprintf(message, "#%s '%s' joined",chan->name,sd->status.name);
+ sprintf(message, msg_txt(897), chan->name, sd->status.name); // #%s '%s' joined
clif->channel_msg(chan,sd,message);
}
@@ -442,7 +442,7 @@ static void channel_leave(struct channel_data *chan, struct map_session_data *sd
channel->delete(chan);
} else if (!channel->config->closing && (chan->options & HCS_OPT_ANNOUNCE_JOIN)) {
char message[60];
- sprintf(message, "#%s '%s' left",chan->name,sd->status.name);
+ sprintf(message, msg_txt(898), chan->name, sd->status.name); // #%s '%s' left
clif->channel_msg(chan,sd,message);
}
diff --git a/src/map/clif.c b/src/map/clif.c
index 4e8653783..5c6bc39d3 100644
--- a/src/map/clif.c
+++ b/src/map/clif.c
@@ -92,9 +92,6 @@ static struct packet_itemlist_equip itemlist_equip;
static struct ZC_STORE_ITEMLIST_NORMAL storelist_normal;
static struct ZC_STORE_ITEMLIST_EQUIP storelist_equip;
static struct packet_viewequip_ack viewequip_list;
-#if PACKETVER >= 20131223
-static struct packet_npc_market_result_ack npcmarket_result;
-#endif
// temporart buffer for send big packets
char packet_buf[0xffff];
//#define DUMP_UNKNOWN_PACKET
@@ -1649,7 +1646,9 @@ static void clif_hominfo(struct map_session_data *sd, struct homun_data *hd, int
p.level = hd->homunculus.level;
p.hunger = hd->homunculus.hunger;
p.intimacy = hd->homunculus.intimacy / 100;
+#if !(PACKETVER_MAIN_NUM >= 20190619 || PACKETVER_RE_NUM >= 20190605 || PACKETVER_ZERO_NUM >= 20190626)
p.itemId = 0; // equip id
+#endif
#ifdef RENEWAL
p.atk2 = cap_value(hstatus->rhw.atk2, 0, INT16_MAX);
#else
@@ -3909,20 +3908,16 @@ static void clif_arrow_fail(struct map_session_data *sd, int type)
/// 01ad <packet len>.W { <name id>.W }*
static void clif_arrow_create_list(struct map_session_data *sd)
{
- int i, c;
- int fd;
- int len;
- struct PACKET_ZC_MAKINGARROW_LIST *p;
-
nullpo_retv(sd);
- fd = sd->fd;
- len = MAX_SKILL_ARROW_DB * sizeof(struct PACKET_ZC_MAKINGARROW_LIST_sub) + sizeof(struct PACKET_ZC_MAKINGARROW_LIST);
+ int fd = sd->fd;
+ int len = MAX_SKILL_ARROW_DB * sizeof(struct PACKET_ZC_MAKINGARROW_LIST_sub) + sizeof(struct PACKET_ZC_MAKINGARROW_LIST);
WFIFOHEAD(fd, len);
- p = WFIFOP(fd, 0);
- p->packetType = 0x1ad;
+ struct PACKET_ZC_MAKINGARROW_LIST *p = WFIFOP(fd, 0);
+ p->packetType = HEADER_ZC_MAKINGARROW_LIST;
- for (i = 0, c = 0; i < MAX_SKILL_ARROW_DB; i++) {
+ int c = 0;
+ for (int i = 0; i < MAX_SKILL_ARROW_DB; i++) {
int j;
if (skill->dbs->arrow_db[i].nameid > 0
&& (j = pc->search_inventory(sd, skill->dbs->arrow_db[i].nameid)) != INDEX_NOT_FOUND
@@ -3953,17 +3948,16 @@ static void clif_arrow_create_list(struct map_session_data *sd)
/// 1 = success
static void clif_statusupack(struct map_session_data *sd, int type, int ok, int val)
{
- int fd;
-
nullpo_retv(sd);
+ int fd = sd->fd;
- fd=sd->fd;
- WFIFOHEAD(fd,packet_len(0xbc));
- WFIFOW(fd,0)=0xbc;
- WFIFOW(fd,2)=type;
- WFIFOB(fd,4)=ok;
- WFIFOB(fd,5)=cap_value(val,0,UINT8_MAX);
- WFIFOSET(fd,packet_len(0xbc));
+ WFIFOHEAD(fd, sizeof(struct PACKET_ZC_STATUS_CHANGE_ACK));
+ struct PACKET_ZC_STATUS_CHANGE_ACK *p = WFIFOP(fd, 0);
+ p->packetType = HEADER_ZC_STATUS_CHANGE_ACK;
+ p->sp = type;
+ p->ok = ok;
+ p->value = cap_value(val, 0, UINT8_MAX);
+ WFIFOSET(fd, sizeof(struct PACKET_ZC_STATUS_CHANGE_ACK));
}
/// Notifies the client about the result of a request to equip an item (ZC_REQ_WEAR_EQUIP_ACK).
@@ -4795,9 +4789,9 @@ static void clif_getareachar_unit(struct map_session_data *sd, struct block_list
//Modifies the type of damage according to status changes [Skotlex]
//Aegis data specifies that: 4 endure against single hit sources, 9 against multi-hit.
-static inline int clif_calc_delay(int type, int div, int damage, int delay)
+static inline enum battle_dmg_type clif_calc_delay(enum battle_dmg_type type, int div, int damage, int delay)
{
- return ( delay == 0 && damage > 0 ) ? ( div > 1 ? 9 : 4 ) : type;
+ return ( delay == 0 && damage > 0 ) ? ( div > 1 ? BDT_MULTIENDURE : BDT_ENDURE ) : type;
}
/*==========================================
@@ -4828,7 +4822,7 @@ static int clif_calc_walkdelay(struct block_list *bl, int delay, int type, int d
/// 08c8 <src ID>.L <dst ID>.L <server tick>.L <src speed>.L <dst speed>.L <damage>.L <IsSPDamage>.B <div>.W <type>.B <damage2>.L (ZC_NOTIFY_ACT2)
/// type: @see enum battle_dmg_type
/// for BDT_NORMAL: [ damage: total damage, div: amount of hits, damage2: assassin dual-wield damage ]
-static int clif_damage(struct block_list *src, struct block_list *dst, int sdelay, int ddelay, int64 in_damage, short div, unsigned char type, int64 in_damage2)
+static int clif_damage(struct block_list *src, struct block_list *dst, int sdelay, int ddelay, int64 in_damage, short div, enum battle_dmg_type type, int64 in_damage2)
{
struct packet_damage p;
struct status_change *sc;
@@ -5257,58 +5251,79 @@ static int clif_insight(struct block_list *bl, va_list ap)
return 0;
}
+static void clif_playerSkillToPacket(struct map_session_data *sd, struct SKILLDATA *skillData, int skillId, int idx, bool newSkill)
+{
+ nullpo_retv(sd);
+ nullpo_retv(skillData);
+ Assert_retv(idx >= 0 && idx < MAX_SKILL_DB);
+
+ int skill_lv = sd->status.skill[idx].lv;
+ skillData->id = skillId;
+ skillData->inf = skill->get_inf(skillId);
+ skillData->level = skill_lv;
+ if (skill_lv > 0) {
+ skillData->sp = skill->get_sp(skillId, skill_lv);
+ skillData->range2 = skill->get_range2(&sd->bl, skillId, skill_lv);
+ } else {
+ skillData->sp = 0;
+ skillData->range2 = 0;
+ }
+#if PACKETVER_RE_NUM >= 20190807
+ if (newSkill)
+ skillData->level2 = 0;
+ else
+ skillData->level2 = skill_lv;
+#else
+ safestrncpy(skillData->name, skill->get_name(skillId), NAME_LENGTH);
+#endif
+ if (sd->status.skill[idx].flag == SKILL_FLAG_PERMANENT)
+ skillData->upFlag = (skill_lv < skill->tree_get_max(skillId, sd->status.class)) ? 1 : 0;
+ else
+ skillData->upFlag = 0;
+}
+
/// Updates whole skill tree (ZC_SKILLINFO_LIST).
/// 010f <packet len>.W { <skill id>.W <type>.L <level>.W <sp cost>.W <attack range>.W <skill name>.24B <upgradable>.B }*
static void clif_skillinfoblock(struct map_session_data *sd)
{
- int fd;
- int i,len,id;
-
nullpo_retv(sd);
- fd=sd->fd;
- if (!fd) return;
+ int fd = sd->fd;
+ if (!fd)
+ return;
- WFIFOHEAD(fd, MAX_SKILL_DB * 37 + 4);
- WFIFOW(fd,0) = 0x10f;
- for ( i = 0, len = 4; i < MAX_SKILL_DB; i++) {
- if( (id = sd->status.skill[i].id) != 0 ) {
- int level;
+ WFIFOHEAD(fd, sizeof(struct PACKET_ZC_SKILLINFO_LIST) + MAX_SKILL_DB * sizeof(struct SKILLDATA));
+ struct PACKET_ZC_SKILLINFO_LIST *p = WFIFOP(fd, 0);
+
+ p->packetType = HEADER_ZC_SKILLINFO_LIST;
+ int skillIndex = 0;
+ int len = sizeof(struct PACKET_ZC_SKILLINFO_LIST);
+ int i;
+ for (i = 0; i < MAX_SKILL_DB; i++) {
+ int id = sd->status.skill[i].id;
+ if (id != 0) {
// workaround for bugreport:5348
- if (len + 37 > 8192)
+ if (len + sizeof(struct SKILLDATA) > 8192)
break;
- WFIFOW(fd, len) = id;
- WFIFOL(fd, len + 2) = skill->get_inf(id);
- level = sd->status.skill[i].lv;
- WFIFOW(fd, len + 6) = level;
- if (level) {
- WFIFOW(fd, len + 8) = skill->get_sp(id, level);
- WFIFOW(fd, len + 10)= skill->get_range2(&sd->bl, id, level);
- }
- else {
- WFIFOW(fd, len + 8) = 0;
- WFIFOW(fd, len + 10)= 0;
- }
- safestrncpy(WFIFOP(fd,len+12), skill->get_name(id), NAME_LENGTH);
- if(sd->status.skill[i].flag == SKILL_FLAG_PERMANENT)
- WFIFOB(fd,len+36) = (sd->status.skill[i].lv < skill->tree_get_max(id, sd->status.class))? 1:0;
- else
- WFIFOB(fd,len+36) = 0;
- len += 37;
+ clif->playerSkillToPacket(sd, &p->skills[skillIndex], id, i, false);
+ len += sizeof(struct SKILLDATA);
+ skillIndex++;
}
}
- WFIFOW(fd,2)=len;
- WFIFOSET(fd,len);
+ p->packetLength = len;
+ WFIFOSET(fd, len);
// workaround for bugreport:5348; send the remaining skills one by one to bypass packet size limit
- for ( ; i < MAX_SKILL_DB; i++) {
- if( (id = sd->status.skill[i].id) != 0 ) {
+ for (; i < MAX_SKILL_DB; i++) {
+ int id = sd->status.skill[i].id;
+ if (id != 0) {
clif->addskill(sd, id);
clif->skillinfo(sd, id, 0);
}
}
}
+
/**
* Server tells client 'sd' to add skill of id 'id' to it's skill tree (e.g. with Ice Falcion item)
**/
@@ -5317,36 +5332,21 @@ static void clif_skillinfoblock(struct map_session_data *sd)
/// 0111 <skill id>.W <type>.L <level>.W <sp cost>.W <attack range>.W <skill name>.24B <upgradable>.B
static void clif_addskill(struct map_session_data *sd, int id)
{
- int fd, skill_lv, idx = skill->get_index(id);
-
nullpo_retv(sd);
- fd = sd->fd;
- if (!fd) return;
+ int fd = sd->fd;
+ if (!fd)
+ return;
+ int idx = skill->get_index(id);
if (sd->status.skill[idx].id <= 0)
return;
- skill_lv = sd->status.skill[idx].lv;
-
- WFIFOHEAD(fd, packet_len(0x111));
- WFIFOW(fd,0) = 0x111;
- WFIFOW(fd,2) = id;
- WFIFOL(fd,4) = skill->get_inf(id);
- WFIFOW(fd,8) = skill_lv;
- if (skill_lv > 0) {
- WFIFOW(fd,10) = skill->get_sp(id, skill_lv);
- WFIFOW(fd,12) = skill->get_range2(&sd->bl, id, skill_lv);
- } else {
- WFIFOW(fd,10) = 0;
- WFIFOW(fd,12) = 0;
- }
- safestrncpy(WFIFOP(fd,14), skill->get_name(id), NAME_LENGTH);
- if (sd->status.skill[idx].flag == SKILL_FLAG_PERMANENT)
- WFIFOB(fd,38) = (skill_lv < skill->tree_get_max(id, sd->status.class))? 1:0;
- else
- WFIFOB(fd,38) = 0;
- WFIFOSET(fd,packet_len(0x111));
+ WFIFOHEAD(fd, sizeof(struct PACKET_ZC_ADD_SKILL));
+ struct PACKET_ZC_ADD_SKILL *p = WFIFOP(fd, 0);
+ p->packetType = HEADER_ZC_ADD_SKILL;
+ clif->playerSkillToPacket(sd, &p->skill, id, idx, true);
+ WFIFOSET(fd, sizeof(struct PACKET_ZC_ADD_SKILL));
}
/// Deletes a skill from the skill tree (ZC_SKILLINFO_DELETE).
@@ -5399,32 +5399,34 @@ static void clif_skillup(struct map_session_data *sd, uint16 skill_id, int skill
/// 07e1 <skill id>.W <type>.L <level>.W <sp cost>.W <attack range>.W <upgradable>.B
static void clif_skillinfo(struct map_session_data *sd, int skill_id, int inf)
{
+ nullpo_retv(sd);
+
const int fd = sd->fd;
int idx = skill->get_index(skill_id);
- int skill_lv;
-
- nullpo_retv(sd);
Assert_retv(idx >= 0 && idx < MAX_SKILL_DB);
- skill_lv = sd->status.skill[idx].lv;
-
- WFIFOHEAD(fd,packet_len(0x7e1));
- WFIFOW(fd,0) = 0x7e1;
- WFIFOW(fd,2) = skill_id;
- WFIFOL(fd,4) = inf?inf:skill->get_inf(skill_id);
- WFIFOW(fd,8) = skill_lv;
+ WFIFOHEAD(fd, sizeof(struct PACKET_ZC_SKILLINFO_UPDATE2));
+ struct PACKET_ZC_SKILLINFO_UPDATE2 *p = WFIFOP(fd, 0);
+ p->packetType = HEADER_ZC_SKILLINFO_UPDATE2;
+ int skill_lv = sd->status.skill[idx].lv;
+ p->id = skill_id;
+ p->inf = skill->get_inf(skill_id);
+ p->level = skill_lv;
if (skill_lv > 0) {
- WFIFOW(fd,10) = skill->get_sp(skill_id, skill_lv);
- WFIFOW(fd,12) = skill->get_range2(&sd->bl, skill_id, skill_lv);
+ p->sp = skill->get_sp(skill_id, skill_lv);
+ p->range2 = skill->get_range2(&sd->bl, skill_id, skill_lv);
} else {
- WFIFOW(fd,10) = 0;
- WFIFOW(fd,12) = 0;
+ p->sp = 0;
+ p->range2 = 0;
}
+#if PACKETVER_RE_NUM >= 20190807
+ p->level2 = skill_lv;
+#endif
if (sd->status.skill[idx].flag == SKILL_FLAG_PERMANENT)
- WFIFOB(fd,14) = (skill_lv < skill->tree_get_max(skill_id, sd->status.class))? 1:0;
+ p->upFlag = (skill_lv < skill->tree_get_max(skill_id, sd->status.class)) ? 1 : 0;
else
- WFIFOB(fd,14) = 0;
- WFIFOSET(fd,packet_len(0x7e1));
+ p->upFlag = 0;
+ WFIFOSET(fd, sizeof(struct PACKET_ZC_SKILLINFO_UPDATE2));
}
/// Notifies clients in area, that an object is about to use a skill.
@@ -5571,7 +5573,7 @@ static void clif_skill_cooldown(struct map_session_data *sd, uint16 skill_id, un
/// Skill attack effect and damage.
/// 0114 <skill id>.W <src id>.L <dst id>.L <tick>.L <src delay>.L <dst delay>.L <damage>.W <level>.W <div>.W <type>.B (ZC_NOTIFY_SKILL)
/// 01de <skill id>.W <src id>.L <dst id>.L <tick>.L <src delay>.L <dst delay>.L <damage>.L <level>.W <div>.W <type>.B (ZC_NOTIFY_SKILL2)
-static int clif_skill_damage(struct block_list *src, struct block_list *dst, int64 tick, int sdelay, int ddelay, int64 in_damage, int div, uint16 skill_id, uint16 skill_lv, int type)
+static int clif_skill_damage(struct block_list *src, struct block_list *dst, int64 tick, int sdelay, int ddelay, int64 in_damage, int div, uint16 skill_id, uint16 skill_lv, enum battle_dmg_type type)
{
unsigned char buf[64];
struct status_change *sc;
@@ -5673,7 +5675,7 @@ static int clif_skill_damage(struct block_list *src, struct block_list *dst, int
/// Ground skill attack effect and damage (ZC_NOTIFY_SKILL_POSITION).
/// 0115 <skill id>.W <src id>.L <dst id>.L <tick>.L <src delay>.L <dst delay>.L <x>.W <y>.W <damage>.W <level>.W <div>.W <type>.B
#if 0
-static int clif_skill_damage2(struct block_list *src, struct block_list *dst, int64 tick, int sdelay, int ddelay, int damage, int div, uint16 skill_id, uint16 skill_lv, int type)
+static int clif_skill_damage2(struct block_list *src, struct block_list *dst, int64 tick, int sdelay, int ddelay, int damage, int div, uint16 skill_id, uint16 skill_lv, enum battle_dmg_type type)
{
unsigned char buf[64];
struct status_change *sc;
@@ -5996,7 +5998,7 @@ static void clif_cooking_list(struct map_session_data *sd, int trigger, uint16 s
len = sizeof(struct PACKET_ZC_MAKINGITEM_LIST) + MAX_SKILL_PRODUCE_DB * sizeof(struct PACKET_ZC_MAKINGITEM_LIST_sub);
WFIFOHEAD(fd, len);
p = WFIFOP(fd, 0);
- p->packetType = 0x25a;
+ p->packetType = HEADER_ZC_MAKINGITEM_LIST;
p->makeItem = list_type; // list type
c = 0;
@@ -6456,7 +6458,7 @@ static void clif_wis_message(int fd, const char *nick, const char *mes, int mes_
safestrncpy(WFIFOP(fd,28), mes, mes_len + 1);
WFIFOSET(fd,WFIFOW(fd,2));
#else
- ssd = map->nick2sd(nick);
+ ssd = map->nick2sd(nick, false);
WFIFOHEAD(fd, mes_len + NAME_LENGTH + 9);
WFIFOW(fd,0) = 0x97;
@@ -8104,6 +8106,54 @@ static void clif_guild_allianceinfo(struct map_session_data *sd)
WFIFOSET(fd,WFIFOW(fd,2));
}
+static void clif_guild_castlelist(struct map_session_data *sd)
+{
+#if PACKETVER_MAIN_NUM >= 20190731 || PACKETVER_RE_NUM >= 20190717 || PACKETVER_ZERO_NUM >= 20190814
+ nullpo_retv(sd);
+
+ struct guild *g = sd->guild;
+ if (g == NULL)
+ return;
+
+ int castle_count = guild->checkcastles(g);
+ if (castle_count > 0) {
+ int len = sizeof(struct PACKET_ZC_GUILD_CASTLE_LIST) + castle_count;
+ struct PACKET_ZC_GUILD_CASTLE_LIST *p = aMalloc(len);
+ p->packetType = HEADER_ZC_GUILD_CASTLE_LIST;
+ p->packetLength = len;
+
+ int i = 0;
+ struct DBIterator *iter = db_iterator(guild->castle_db);
+ for (struct guild_castle *gc = dbi_first(iter); dbi_exists(iter); gc = dbi_next(iter)) {
+ if (gc->guild_id == g->guild_id) {
+ p->castle_list[i] = gc->castle_id;
+ ++i;
+ }
+ }
+ dbi_destroy(iter);
+
+ clif->send(p, len, &sd->bl, SELF);
+ aFree(p);
+ }
+#endif
+}
+
+static void clif_guild_castleinfo(struct map_session_data *sd, struct guild_castle *gc)
+{
+#if PACKETVER_MAIN_NUM >= 20190731 || PACKETVER_RE_NUM >= 20190717 || PACKETVER_ZERO_NUM >= 20190814
+
+ nullpo_retv(sd);
+ nullpo_retv(gc);
+
+ struct PACKET_ZC_CASTLE_INFO p = { 0 };
+ p.packetType = HEADER_ZC_CASTLE_INFO;
+ p.castle_id = gc->castle_id;
+ p.economy = gc->economy;
+ p.defense = gc->defense;
+ clif->send(&p, sizeof(p), &sd->bl, SELF);
+#endif
+}
+
/// Guild member manager information (ZC_MEMBERMGR_INFO).
/// 0154 <packet len>.W { <account>.L <char id>.L <hair style>.W <hair color>.W <gender>.W <class>.W <level>.W <contrib exp>.L <state>.L <position>.L <memo>.50B <name>.24B }*
/// state:
@@ -8687,14 +8737,14 @@ static void clif_emotion(struct block_list *bl, int type)
/// 0191 <id>.L <contents>.80B
static void clif_talkiebox(struct block_list *bl, const char *talkie)
{
- unsigned char buf[MESSAGE_SIZE+6];
nullpo_retv(bl);
nullpo_retv(talkie);
+ struct PACKET_ZC_TALKBOX_CHATCONTENTS p;
- WBUFW(buf,0) = 0x191;
- WBUFL(buf,2) = bl->id;
- safestrncpy(WBUFP(buf,6),talkie,MESSAGE_SIZE);
- clif->send(buf,packet_len(0x191),bl,AREA);
+ p.PacketType = HEADER_ZC_TALKBOX_CHATCONTENTS;
+ p.aid = bl->id;
+ safestrncpy(&p.message[0], talkie, TALKBOX_MESSAGE_SIZE);
+ clif->send(&p, sizeof(struct PACKET_ZC_TALKBOX_CHATCONTENTS), bl, AREA);
}
/// Displays wedding effect centered on an object (ZC_CONGRATULATION).
@@ -9296,9 +9346,6 @@ static void clif_pcname_ack(int fd, struct block_list *bl)
packet.gid = bl->id;
const struct map_session_data *ssd = BL_UCCAST(BL_PC, bl);
- const struct party_data *p = NULL;
- const struct guild *g = NULL;
- int ps = -1;
if (ssd->fakename[0] != '\0' && ssd->disguise != -1) {
packet.packet_id = reqName;
@@ -9324,9 +9371,12 @@ static void clif_pcname_ack(int fd, struct block_list *bl)
#endif
memcpy(packet.name, ssd->status.name, NAME_LENGTH);
+ const struct party_data *p = NULL;
+ int ps = -1;
if (ssd->status.party_id != 0) {
p = party->search(ssd->status.party_id);
}
+ const struct guild *g = NULL;
if (ssd->status.guild_id != 0) {
if ((g = ssd->guild) != NULL) {
int i;
@@ -9349,6 +9399,12 @@ static void clif_pcname_ack(int fd, struct block_list *bl)
memcpy(packet.guild_name, g->name,NAME_LENGTH);
memcpy(packet.position_name, g->position[ps].name, NAME_LENGTH);
}
+ else if (ssd->status.clan_id != 0) {
+ struct clan *c = clan->search(ssd->status.clan_id);
+ if (c != 0) {
+ memcpy(packet.position_name, c->name, NAME_LENGTH);
+ }
+ }
}
clif->send_selforarea(fd, bl, &packet, len);
@@ -9482,7 +9538,8 @@ static void clif_mobname_normal_ack(int fd, struct block_list *bl)
struct PACKET_ZC_ACK_REQNAME_TITLE packet = { 0 };
packet.packet_id = HEADER_ZC_ACK_REQNAME_TITLE;
packet.gid = bl->id;
- memcpy(packet.name, BL_UCCAST(BL_MOB, bl)->db->name, NAME_LENGTH);
+ const struct mob_data *md = BL_UCCAST(BL_MOB, bl);
+ memcpy(packet.name, md->name, NAME_LENGTH);
#if PACKETVER_MAIN_NUM >= 20180207 || PACKETVER_RE_NUM >= 20171129 || PACKETVER_ZERO_NUM >= 20171130
struct unit_data *ud = unit->bl2ud(bl);
if (ud != NULL) {
@@ -10712,7 +10769,7 @@ static void clif_parse_LoadEndAck(int fd, struct map_session_data *sd)
if( map->list[sd->bl.m].flag.allowks && !map_flag_ks(sd->bl.m) ) {
char output[128];
- sprintf(output, "[ Kill Steal Protection Disabled. KS is allowed in this map ]");
+ sprintf(output, "%s", msg_sd(sd, 893)); // [ Kill Steal Protection Disabled. KS is allowed in this map ]
clif->broadcast(&sd->bl, output, (int)strlen(output) + 1, BC_BLUE, SELF);
}
@@ -10825,7 +10882,7 @@ static void clif_hotkeysAll_send(struct map_session_data *sd)
{
#ifdef HOTKEY_SAVING
clif->hotkeys(sd, 0);
-#if PACKETVER_MAIN_NUM >= 20190522 || PACKETVER_RE_NUM >= 20190508
+#if PACKETVER_MAIN_NUM >= 20190522 || PACKETVER_RE_NUM >= 20190508 || PACKETVER_ZERO_NUM >= 20190605
// send second tab only if data exists
for (int i = MAX_HOTKEYS; i < MAX_HOTKEYS * 2; i++) {
if (sd->status.hotkeys[i].type != 0 || sd->status.hotkeys[i].id != 0 || sd->status.hotkeys[i].lv != 0) {
@@ -10854,7 +10911,7 @@ static void clif_hotkeys_send(struct map_session_data *sd, int tab)
else
p.rotate = sd->status.hotkey_rowshift2;
#endif
-#if PACKETVER_MAIN_NUM >= 20190522 || PACKETVER_RE_NUM >= 20190508
+#if PACKETVER_MAIN_NUM >= 20190522 || PACKETVER_RE_NUM >= 20190508 || PACKETVER_ZERO_NUM >= 20190605
p.tab = tab;
#endif
const int offset = tab * MAX_HOTKEYS;
@@ -10879,7 +10936,7 @@ static void clif_parse_HotkeyRowShift1(int fd, struct map_session_data *sd)
static void clif_parse_HotkeyRowShift2(int fd, struct map_session_data *sd) __attribute__((nonnull (2)));
static void clif_parse_HotkeyRowShift2(int fd, struct map_session_data *sd)
{
-#if PACKETVER_MAIN_NUM >= 20190522 || PACKETVER_RE_NUM >= 20190508
+#if PACKETVER_MAIN_NUM >= 20190522 || PACKETVER_RE_NUM >= 20190508 || PACKETVER_ZERO_NUM >= 20190605
const struct PACKET_CZ_SHORTCUTKEYBAR_ROTATE2 *p = RFIFOP(fd, 0);
if (p->tab == 0)
sd->status.hotkey_rowshift = p->rowshift;
@@ -10911,7 +10968,7 @@ static void clif_parse_Hotkey2(int fd, struct map_session_data *sd) __attribute_
static void clif_parse_Hotkey2(int fd, struct map_session_data *sd)
{
#ifdef HOTKEY_SAVING
-#if PACKETVER_MAIN_NUM >= 20190522 || PACKETVER_RE_NUM >= 20190508
+#if PACKETVER_MAIN_NUM >= 20190522 || PACKETVER_RE_NUM >= 20190508 || PACKETVER_ZERO_NUM >= 20190605
const struct PACKET_CZ_SHORTCUT_KEY_CHANGE2 *p = RFIFOP(fd, 0);
const unsigned short idx = p->index + p->tab * MAX_HOTKEYS;
Assert_retv(idx < MAX_HOTKEYS_DB);
@@ -10982,9 +11039,13 @@ static void clif_parse_progressbar(int fd, struct map_session_data *sd) __attrib
/// 02f1
static void clif_parse_progressbar(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
int npc_id = sd->progressbar.npc_id;
+ Assert_retv(npc_id != 0);
- if( timer->gettick() < sd->progressbar.timeout && sd->st )
+ if (timer->gettick() < sd->progressbar.timeout && sd->st)
sd->st->state = END;
sd->progressbar.timeout = sd->state.workinprogress = sd->progressbar.npc_id = 0;
@@ -11009,7 +11070,7 @@ static void clif_parse_WalkToXY(int fd, struct map_session_data *sd)
; //You CAN walk on this OPT1 value.
/*else if( sd->progressbar.npc_id )
clif->progressbar_abort(sd);*/
- else if (pc_cant_act(sd))
+ else if (pc_cant_act(sd) || pc_isvending(sd))
return;
if(sd->sc.data[SC_RUN] || sd->sc.data[SC_WUGDASH])
@@ -11089,13 +11150,13 @@ static void clif_parse_GetCharNameRequest(int fd, struct map_session_data *sd)
sc = status->get_sc(bl);
if (sc && sc->option&OPTION_INVISIBLE && !clif->isdisguised(bl) &&
bl->type != BL_NPC && //Skip hidden NPCs which can be seen using Maya Purple
- pc_get_group_level(sd) < battle_config.hack_info_GM_level
+ !pc_has_permission(sd, PC_PERM_RECEIVE_HACK_INFO)
) {
char gm_msg[256];
sprintf(gm_msg, "Hack on NameRequest: character '%s' (account: %d) requested the name of an invisible target (id: %d).\n", sd->status.name, sd->status.account_id, id);
ShowWarning(gm_msg);
// information is sent to all online GMs
- intif->wis_message_to_gm(map->wisp_server_name, battle_config.hack_info_GM_level, gm_msg);
+ pc->wis_message_to_gm(map->wisp_server_name, PC_PERM_RECEIVE_HACK_INFO, gm_msg);
return;
}
#endif // 0
@@ -11169,7 +11230,10 @@ static void clif_parse_GlobalMessage(int fd, struct map_session_data *sd)
timer->settick(sd->fontcolor_tid, td->tick+5000);
}
- color = channel->config->colors[sd->fontcolor - 1];
+ int fontColor = sd->fontcolor - 1;
+ if (fontColor < 0 || fontColor >= channel->config->colors_count)
+ fontColor = 0;
+ color = channel->config->colors[fontColor];
WFIFOHEAD(fd, outlen + 12);
WFIFOW(fd,0) = 0x2C1;
WFIFOW(fd,2) = outlen + 12;
@@ -11374,10 +11438,10 @@ static void clif_parse_ActionRequest_sub(struct map_session_data *sd, int action
return;
}
- if( pc_cant_act(sd) || pc_issit(sd) || sd->sc.option&OPTION_HIDE )
+ if (pc_cant_act(sd) || pc_issit(sd) || sd->sc.option&OPTION_HIDE || pc_isvending(sd))
return;
- if( sd->sc.option&OPTION_COSTUME )
+ if (sd->sc.option & OPTION_COSTUME)
return;
if (!battle_config.sdelay_attack_enable && pc->checkskill(sd, SA_FREECAST) <= 0 && (skill->get_inf2(sd->ud.skill_id) & (INF2_FREE_CAST_REDUCED | INF2_FREE_CAST_NORMAL)) == 0) {
@@ -11555,8 +11619,8 @@ static void clif_parse_WisMessage(int fd, struct map_session_data *sd)
script->set_var(sd,output,(char *) split_data[i]);
}
- sprintf(output, "%s::OnWhisperGlobal", nd->exname);
- npc->event(sd,output,0); // Calls the NPC label
+ safesnprintf(output, 255, "%s::OnWhisperGlobal", nd->exname);
+ npc->event(sd,output, 0); // Calls the NPC label
return;
}
@@ -11580,15 +11644,11 @@ static void clif_parse_WisMessage(int fd, struct map_session_data *sd)
}
// searching destination character
- dstsd = map->nick2sd(target);
+ dstsd = map->nick2sd(target, false);
- if (dstsd == NULL || strcmp(dstsd->status.name, target) != 0) {
- // player is not on this map-server
- // At this point, don't send wisp/page if it's not exactly the same name, because (example)
- // if there are 'Test' player on an other map-server and 'test' player on this map-server,
- // and if we ask for 'Test', we must not contact 'test' player
- // so, we send information to inter-server, which is the only one which decide (and copy correct name).
- intif->wis_message(sd, target, message, (int)strlen(message));
+ if (dstsd == NULL) {
+ // Character not found (or found through partial match).
+ clif->wis_end(sd->fd, 1);
return;
}
@@ -11604,7 +11664,7 @@ static void clif_parse_WisMessage(int fd, struct map_session_data *sd)
// if player is autotrading
if (dstsd->state.autotrade) {
char output[256];
- sprintf(output, "%s is in autotrade mode and cannot receive whispered messages.", dstsd->status.name);
+ sprintf(output, msg_fd(fd, 894), dstsd->status.name); // %s is in autotrade mode and cannot receive whispered messages.
clif->wis_message(fd, map->wisp_server_name, output, (int)strlen(output));
return;
}
@@ -11635,7 +11695,7 @@ static void clif_parse_Broadcast(int fd, struct map_session_data *sd)
char command[sizeof commandname + 2 + CHAT_SIZE_MAX] = ""; // '@' command + ' ' + message + NUL
int len = (int)RFIFOW(fd,2) - 4;
- if (len < 0)
+ if (len <= 0)
return;
sprintf(command, "%c%s ", atcommand->at_symbol, commandname);
@@ -11735,6 +11795,9 @@ static void clif_parse_UseItem(int fd, struct map_session_data *sd)
{
int n;
+ if (pc_isvending(sd))
+ return;
+
if (pc_isdead(sd)) {
clif->clearunit_area(&sd->bl, CLR_DEAD);
return;
@@ -11760,15 +11823,17 @@ static void clif_parse_EquipItem(int fd, struct map_session_data *sd) __attribut
static void clif_parse_EquipItem(int fd, struct map_session_data *sd)
{
const struct packet_equip_item *p = RP2PTR(fd);
- int index = 0;
- if(pc_isdead(sd)) {
+ if (pc_isvending(sd))
+ return;
+
+ if (pc_isdead(sd)) {
clif->clearunit_area(&sd->bl,CLR_DEAD);
return;
}
- index = p->index - 2;
- if (index >= sd->status.inventorySize)
+ int index = p->index - 2;
+ if (index < 0 || index >= sd->status.inventorySize)
return; //Out of bounds check.
if( sd->npc_id ) {
@@ -11779,15 +11844,15 @@ static void clif_parse_EquipItem(int fd, struct map_session_data *sd)
else if ( pc_cant_act2(sd) || sd->state.prerefining )
return;
- if(!sd->status.inventory[index].identify) {
- clif->equipitemack(sd, index, 0, EIA_FAIL);// fail
+ if (!sd->status.inventory[index].identify) {
+ clif->equipitemack(sd, index, 0, EIA_FAIL); // fail
return;
}
- if(!sd->inventory_data[index])
+ if (!sd->inventory_data[index])
return;
- if(sd->inventory_data[index]->type == IT_PETARMOR){
+ if (sd->inventory_data[index]->type == IT_PETARMOR) {
pet->equipitem(sd, index);
return;
}
@@ -11795,7 +11860,7 @@ static void clif_parse_EquipItem(int fd, struct map_session_data *sd)
pc->update_idle_time(sd, BCIDLE_USEITEM);
//Client doesn't send the position for ammo.
- if(sd->inventory_data[index]->type == IT_AMMO)
+ if (sd->inventory_data[index]->type == IT_AMMO)
pc->equipitem(sd, index, EQP_AMMO);
else
pc->equipitem(sd, index, p->wearLocation);
@@ -11808,6 +11873,9 @@ static void clif_parse_UnequipItem(int fd, struct map_session_data *sd)
{
int index;
+ if (pc_isvending(sd))
+ return;
+
if(pc_isdead(sd)) {
clif->clearunit_area(&sd->bl,CLR_DEAD);
return;
@@ -11880,7 +11948,7 @@ static void clif_parse_NpcBuySellSelected(int fd, struct map_session_data *sd) _
/// 1 = sell
static void clif_parse_NpcBuySellSelected(int fd, struct map_session_data *sd)
{
- if (sd->state.trading)
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
return;
npc->buysellsel(sd, RFIFOL(fd,2), RFIFOB(fd,6));
}
@@ -11916,9 +11984,12 @@ static void clif_parse_NpcBuyListSend(int fd, struct map_session_data *sd) __att
/// 00c8 <packet len>.W { <amount>.W <name id>.W }*
static void clif_parse_NpcBuyListSend(int fd, struct map_session_data *sd)
{
- int n = ((int)RFIFOW(fd, 2) - sizeof(struct PACKET_CZ_PC_PURCHASE_ITEMLIST)) / sizeof(struct PACKET_CZ_PC_PURCHASE_ITEMLIST_sub);
- int result;
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
const struct PACKET_CZ_PC_PURCHASE_ITEMLIST *p = RFIFOP(fd, 0);
+ int n = ((int)p->packetLength - sizeof(struct PACKET_CZ_PC_PURCHASE_ITEMLIST)) / sizeof(struct PACKET_CZ_PC_PURCHASE_ITEMLIST_sub);
+ int result;
Assert_retv(n >= 0);
@@ -11976,7 +12047,7 @@ static void clif_parse_NpcSellListSend(int fd, struct map_session_data *sd)
Assert_retv(n >= 0);
- if (sd->state.trading || !sd->npc_shopid) {
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd) || !sd->npc_shopid) {
fail = 1;
} else {
struct itemlist item_list = { 0 };
@@ -12011,6 +12082,9 @@ static void clif_parse_CreateChatRoom(int fd, struct map_session_data *sd) __att
/// 1 = public
static void clif_parse_CreateChatRoom(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
int len = (int)RFIFOW(fd, 2) - 15;
int limit;
bool pub;
@@ -12027,6 +12101,9 @@ static void clif_parse_CreateChatRoom(int fd, struct map_session_data *sd)
password = RFIFOP(fd, 7); //not zero-terminated
title = RFIFOP(fd, 15); // not zero-terminated
+ if (limit < 0)
+ return;
+
if (pc_ismuted(&sd->sc, MANNER_NOROOM))
return;
if(battle_config.basic_skill_check && !pc->check_basicskill(sd, 4)) {
@@ -12053,6 +12130,9 @@ static void clif_parse_ChatAddMember(int fd, struct map_session_data *sd) __attr
/// 00d9 <chat ID>.L <passwd>.8B
static void clif_parse_ChatAddMember(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
int chatid = RFIFOL(fd,2);
const char *password = RFIFOP(fd,6); // not zero-terminated
@@ -12067,6 +12147,9 @@ static void clif_parse_ChatRoomStatusChange(int fd, struct map_session_data *sd)
/// 1 = public
static void clif_parse_ChatRoomStatusChange(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
int len = (int)RFIFOW(fd, 2) - 15;
int limit;
bool pub;
@@ -12079,6 +12162,8 @@ static void clif_parse_ChatRoomStatusChange(int fd, struct map_session_data *sd)
return;
limit = RFIFOW(fd, 4);
+ if (limit < 0)
+ return;
pub = (RFIFOB(fd, 6) != 0);
password = RFIFOP(fd, 7); // not zero-terminated
title = RFIFOP(fd, 15); // not zero-terminated
@@ -12097,6 +12182,9 @@ static void clif_parse_ChangeChatOwner(int fd, struct map_session_data *sd) __at
/// 1 = normal
static void clif_parse_ChangeChatOwner(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
chat->change_owner(sd, RFIFOP(fd,6)); // non null terminated
}
@@ -12105,6 +12193,9 @@ static void clif_parse_KickFromChat(int fd, struct map_session_data *sd) __attri
/// 00e2 <name>.24B
static void clif_parse_KickFromChat(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
chat->kick(sd, RFIFOP(fd,2)); // non null terminated
}
@@ -12113,6 +12204,9 @@ static void clif_parse_ChatLeave(int fd, struct map_session_data *sd) __attribut
/// 00e3
static void clif_parse_ChatLeave(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
chat->leave(sd, false);
}
@@ -12137,9 +12231,10 @@ static void clif_parse_TradeRequest(int fd, struct map_session_data *sd) __attri
/// 00e4 <account id>.L
static void clif_parse_TradeRequest(int fd, struct map_session_data *sd)
{
- struct map_session_data *t_sd;
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
- t_sd = map->id2sd(RFIFOL(fd,2));
+ struct map_session_data *t_sd = map->id2sd(RFIFOL(fd, 2));
if (sd->chat_id == 0 && pc_cant_act(sd))
return; //You can trade while in a chatroom.
@@ -12166,6 +12261,9 @@ static void clif_parse_TradeAck(int fd, struct map_session_data *sd) __attribute
/// 4 = rejected
static void clif_parse_TradeAck(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
trade->ack(sd,RFIFOB(fd,2));
}
@@ -12174,6 +12272,9 @@ static void clif_parse_TradeAddItem(int fd, struct map_session_data *sd) __attri
/// 00e8 <index>.W <amount>.L
static void clif_parse_TradeAddItem(int fd, struct map_session_data *sd)
{
+ if (!sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
short index = RFIFOW(fd,2);
int amount = RFIFOL(fd,4);
@@ -12188,6 +12289,8 @@ static void clif_parse_TradeOk(int fd, struct map_session_data *sd) __attribute_
/// 00eb
static void clif_parse_TradeOk(int fd, struct map_session_data *sd)
{
+ if (pc_isdead(sd) || pc_isvending(sd))
+ return;
trade->ok(sd);
}
@@ -12196,6 +12299,9 @@ static void clif_parse_TradeCancel(int fd, struct map_session_data *sd) __attrib
/// 00ed
static void clif_parse_TradeCancel(int fd, struct map_session_data *sd)
{
+ if (pc_isdead(sd) || pc_isvending(sd))
+ return;
+
trade->cancel(sd);
}
@@ -12204,6 +12310,9 @@ static void clif_parse_TradeCommit(int fd, struct map_session_data *sd) __attrib
/// 00ef
static void clif_parse_TradeCommit(int fd, struct map_session_data *sd)
{
+ if (pc_isdead(sd) || pc_isvending(sd))
+ return;
+
trade->commit(sd);
}
@@ -12632,7 +12741,7 @@ static void clif_parse_UseSkillToPosSub(int fd, struct map_session_data *sd, uin
return;
}
//You can't use Graffiti/TalkieBox AND have a vending open, so this is safe.
- safestrncpy(sd->message, RFIFOP(fd,skillmoreinfo), MESSAGE_SIZE);
+ safestrncpy(sd->message, RFIFOP(fd, skillmoreinfo), TALKBOX_MESSAGE_SIZE);
}
if( sd->ud.skilltimer != INVALID_TIMER )
@@ -12766,7 +12875,7 @@ static void clif_parse_ProduceMix(int fd, struct map_session_data *sd)
default:
return;
}
- if (pc_istrading(sd)) {
+ if (pc_istrading(sd) || pc_isdead(sd) || pc_isvending(sd)) {
//Make it fail to avoid shop exploits where you sell something different than you see.
clif->skill_fail(sd, sd->ud.skill_id, USESKILL_FAIL_LEVEL, 0, 0);
clif_menuskill_clear(sd);
@@ -12797,7 +12906,7 @@ static void clif_parse_Cooking(int fd, struct map_session_data *sd)
if (type == 6 && sd->menuskill_id != GN_MIX_COOKING && sd->menuskill_id != GN_S_PHARMACY)
return;
- if (pc_istrading(sd)) {
+ if (pc_istrading(sd) || pc_isdead(sd) || pc_isvending(sd)) {
//Make it fail to avoid shop exploits where you sell something different than you see.
clif->skill_fail(sd, sd->ud.skill_id, USESKILL_FAIL_LEVEL, 0, 0);
clif_menuskill_clear(sd);
@@ -12817,7 +12926,7 @@ static void clif_parse_RepairItem(int fd, struct map_session_data *sd)
if (sd->menuskill_id != BS_REPAIRWEAPON)
return;
- if (pc_istrading(sd)) {
+ if (pc_istrading(sd) || pc_isdead(sd) || pc_isvending(sd)) {
//Make it fail to avoid shop exploits where you sell something different than you see.
clif->skill_fail(sd, sd->ud.skill_id, USESKILL_FAIL_LEVEL, 0, 0);
clif_menuskill_clear(sd);
@@ -12832,19 +12941,17 @@ static void clif_parse_WeaponRefine(int fd, struct map_session_data *sd) __attri
/// 0222 <index>.L
static void clif_parse_WeaponRefine(int fd, struct map_session_data *sd)
{
- int idx;
-
sd->state.prerefining = 0;
if (sd->menuskill_id != WS_WEAPONREFINE) //Packet exploit?
return;
- if (pc_istrading(sd)) {
+ if (pc_istrading(sd) || pc_isdead(sd) || pc_isvending(sd)) {
//Make it fail to avoid shop exploits where you sell something different than you see.
clif->skill_fail(sd, sd->ud.skill_id, USESKILL_FAIL_LEVEL, 0, 0);
clif_menuskill_clear(sd);
return;
}
- idx = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]);
+ int idx = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]);
skill->weaponrefine(sd, idx-2);
clif_menuskill_clear(sd);
}
@@ -12859,6 +12966,9 @@ static void clif_parse_NpcSelectMenu(int fd, struct map_session_data *sd) __attr
/// overflows to choice%256.
static void clif_parse_NpcSelectMenu(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
int npc_id = RFIFOL(fd,2);
uint8 select = RFIFOB(fd,6);
@@ -12884,6 +12994,9 @@ static void clif_parse_NpcNextClicked(int fd, struct map_session_data *sd) __att
/// 00b9 <npc id>.L
static void clif_parse_NpcNextClicked(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
npc->scriptcont(sd,RFIFOL(fd,2), false);
}
@@ -12892,6 +13005,9 @@ static void clif_parse_NpcAmountInput(int fd, struct map_session_data *sd) __att
/// 0143 <npc id>.L <value>.L
static void clif_parse_NpcAmountInput(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
int npcid = RFIFOL(fd,2);
int amount = RFIFOL(fd,6);
@@ -12916,6 +13032,9 @@ static void clif_parse_NpcStringInput(int fd, struct map_session_data *sd) __att
/// 01d5 <packet len>.W <npc id>.L <string>.?B
static void clif_parse_NpcStringInput(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
int len = RFIFOW(fd, 2);
// [4144] can't confirm exact client version. At least >= correct for 20150513
#if PACKETVER >= 20151029
@@ -12943,6 +13062,8 @@ static void clif_parse_NpcCloseClicked(int fd, struct map_session_data *sd)
{
if (!sd->npc_id) //Avoid parsing anything when the script was done with. [Skotlex]
return;
+ if (sd->state.trading || pc_isvending(sd))
+ return;
sd->state.dialog = 0;
npc->scriptcont(sd, RFIFOL(fd,2), true);
}
@@ -12954,6 +13075,9 @@ static void clif_parse_ItemIdentify(int fd, struct map_session_data *sd) __attri
/// -1 = cancel
static void clif_parse_ItemIdentify(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
short idx = RFIFOW(fd,2);
if (sd->menuskill_id != MC_IDENTIFY)
@@ -12972,6 +13096,9 @@ static void clif_parse_ItemIdentify(int fd, struct map_session_data *sd)
/// 0A35 <index>.W
static void clif_parse_OneClick_ItemIdentify(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
int cmd = RFIFOW(fd,0);
short idx = RFIFOW(fd, packet_db[cmd].pos[0]) - 2;
int n;
@@ -12979,7 +13106,7 @@ static void clif_parse_OneClick_ItemIdentify(int fd, struct map_session_data *sd
if (idx < 0 || idx >= sd->status.inventorySize || sd->inventory_data[idx] == NULL || sd->status.inventory[idx].nameid <= 0)
return;
- if ((n = pc->have_magnifier(sd) ) != INDEX_NOT_FOUND &&
+ if ((n = pc->have_magnifier(sd)) != INDEX_NOT_FOUND &&
pc->delitem(sd, n, 1, 0, DELITEM_NORMAL, LOG_TYPE_CONSUME) == 0)
skill->identify(sd, idx);
}
@@ -12990,7 +13117,7 @@ static void clif_parse_SelectArrow(int fd, struct map_session_data *sd) __attrib
static void clif_parse_SelectArrow(int fd, struct map_session_data *sd)
{
int itemId;
- if (pc_istrading(sd)) {
+ if (pc_istrading(sd) || pc_isdead(sd) || pc_isvending(sd)) {
//Make it fail to avoid shop exploits where you sell something different than you see.
clif->skill_fail(sd, sd->ud.skill_id, USESKILL_FAIL_LEVEL, 0, 0);
clif_menuskill_clear(sd);
@@ -13027,6 +13154,9 @@ static void clif_parse_AutoSpell(int fd, struct map_session_data *sd) __attribut
/// 01ce <skill id>.L
static void clif_parse_AutoSpell(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
uint16 skill_id = RFIFOL(fd,2);
sd->state.workinprogress = 0;
@@ -13046,6 +13176,9 @@ static void clif_parse_UseCard(int fd, struct map_session_data *sd) __attribute_
/// 017a <card index>.W
static void clif_parse_UseCard(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
clif->use_card(sd,RFIFOW(fd,2)-2);
}
@@ -13054,6 +13187,9 @@ static void clif_parse_InsertCard(int fd, struct map_session_data *sd) __attribu
/// 017c <card index>.W <equip index>.W
static void clif_parse_InsertCard(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
pc->insert_card(sd,RFIFOW(fd,2)-2,RFIFOW(fd,4)-2);
}
@@ -13079,6 +13215,9 @@ static void clif_parse_ResetChar(int fd, struct map_session_data *sd) __attribut
/// 1 = skill
static void clif_parse_ResetChar(int fd, struct map_session_data *sd)
{
+ if (pc_istrading(sd) || pc_isvending(sd))
+ return;
+
char cmd[15];
if( RFIFOW(fd,2) )
@@ -13264,6 +13403,9 @@ static void clif_parse_CreateParty(int fd, struct map_session_data *sd) __attrib
/// 01e8 <party name>.24B <item pickup rule>.B <item share rule>.B (CZ_MAKE_GROUP2)
static void clif_parse_CreateParty(int fd, struct map_session_data *sd)
{
+ if (pc_istrading(sd) || pc_isvending(sd))
+ return;
+
char name[NAME_LENGTH];
safestrncpy(name, RFIFOP(fd,2), NAME_LENGTH);
@@ -13284,6 +13426,9 @@ static void clif_parse_CreateParty(int fd, struct map_session_data *sd)
static void clif_parse_CreateParty2(int fd, struct map_session_data *sd) __attribute__((nonnull (2)));
static void clif_parse_CreateParty2(int fd, struct map_session_data *sd)
{
+ if (pc_istrading(sd) || pc_isvending(sd))
+ return;
+
char name[NAME_LENGTH];
int item1 = RFIFOB(fd,26);
int item2 = RFIFOB(fd,27);
@@ -13309,6 +13454,9 @@ static void clif_parse_PartyInvite(int fd, struct map_session_data *sd) __attrib
/// 02c4 <char name>.24B (CZ_PARTY_JOIN_REQ)
static void clif_parse_PartyInvite(int fd, struct map_session_data *sd)
{
+ if (pc_istrading(sd) || pc_isvending(sd))
+ return;
+
struct map_session_data *t_sd;
if(map->list[sd->bl.m].flag.partylock) {
@@ -13330,6 +13478,9 @@ static void clif_parse_PartyInvite(int fd, struct map_session_data *sd)
static void clif_parse_PartyInvite2(int fd, struct map_session_data *sd) __attribute__((nonnull (2)));
static void clif_parse_PartyInvite2(int fd, struct map_session_data *sd)
{
+ if (pc_istrading(sd) || pc_isvending(sd))
+ return;
+
struct map_session_data *t_sd;
char name[NAME_LENGTH];
@@ -13341,7 +13492,7 @@ static void clif_parse_PartyInvite2(int fd, struct map_session_data *sd)
return;
}
- t_sd = map->nick2sd(name);
+ t_sd = map->nick2sd(name, true);
if(t_sd && t_sd->state.noask) { // @noask [LuzZza]
clif->noask_sub(sd, t_sd, 1);
@@ -13360,13 +13511,23 @@ static void clif_parse_ReplyPartyInvite(int fd, struct map_session_data *sd) __a
/// 1 = accept
static void clif_parse_ReplyPartyInvite(int fd, struct map_session_data *sd)
{
- party->reply_invite(sd,RFIFOL(fd,2),RFIFOL(fd,6));
+ if (pc_istrading(sd) || pc_isvending(sd)) {
+ party->reply_invite(sd, RFIFOL(fd, 2), 0);
+ return;
+ }
+
+ party->reply_invite(sd, RFIFOL(fd, 2), RFIFOL(fd, 6));
}
static void clif_parse_ReplyPartyInvite2(int fd, struct map_session_data *sd) __attribute__((nonnull (2)));
static void clif_parse_ReplyPartyInvite2(int fd, struct map_session_data *sd)
{
- party->reply_invite(sd,RFIFOL(fd,2),RFIFOB(fd,6));
+ if (pc_istrading(sd) || pc_isvending(sd)) {
+ party->reply_invite(sd, RFIFOL(fd, 2), 0);
+ return;
+ }
+
+ party->reply_invite(sd, RFIFOL(fd, 2), RFIFOB(fd, 6));
}
static void clif_parse_LeaveParty(int fd, struct map_session_data *sd) __attribute__((nonnull (2)));
@@ -13374,7 +13535,10 @@ static void clif_parse_LeaveParty(int fd, struct map_session_data *sd) __attribu
/// 0100
static void clif_parse_LeaveParty(int fd, struct map_session_data *sd)
{
- if(map->list[sd->bl.m].flag.partylock) {
+ if (pc_istrading(sd) || pc_isvending(sd))
+ return;
+
+ if (map->list[sd->bl.m].flag.partylock) {
// Party locked.
clif->message(fd, msg_fd(fd,227)); // Party modification is disabled in this map.
return;
@@ -13387,12 +13551,15 @@ static void clif_parse_RemovePartyMember(int fd, struct map_session_data *sd) __
/// 0103 <account id>.L <char name>.24B
static void clif_parse_RemovePartyMember(int fd, struct map_session_data *sd)
{
- if(map->list[sd->bl.m].flag.partylock) {
+ if (pc_istrading(sd) || pc_isvending(sd))
+ return;
+
+ if (map->list[sd->bl.m].flag.partylock) {
// Party locked.
clif->message(fd, msg_fd(fd,227)); // Party modification is disabled in this map.
return;
}
- party->removemember(sd, RFIFOL(fd,2), RFIFOP(fd,6));
+ party->removemember(sd, RFIFOL(fd, 2), RFIFOP(fd, 6));
}
static void clif_parse_PartyChangeOption(int fd, struct map_session_data *sd) __attribute__((nonnull (2)));
@@ -13401,6 +13568,9 @@ static void clif_parse_PartyChangeOption(int fd, struct map_session_data *sd) __
/// 07d7 <exp share rule>.L <item pickup rule>.B <item share rule>.B (CZ_GROUPINFO_CHANGE_V2)
static void clif_parse_PartyChangeOption(int fd, struct map_session_data *sd)
{
+ if (pc_istrading(sd) || pc_isvending(sd))
+ return;
+
struct party_data *p;
int i;
@@ -13453,6 +13623,9 @@ static void clif_parse_PartyChangeLeader(int fd, struct map_session_data *sd) __
/// 07da <account id>.L
static void clif_parse_PartyChangeLeader(int fd, struct map_session_data *sd)
{
+ if (pc_istrading(sd) || pc_isvending(sd))
+ return;
+
party->changeleader(sd, map->id2sd(RFIFOL(fd,2)));
}
@@ -13465,6 +13638,9 @@ static void clif_parse_PartyBookingRegisterReq(int fd, struct map_session_data *
static void clif_parse_PartyBookingRegisterReq(int fd, struct map_session_data *sd)
{
#ifndef PARTY_RECRUIT
+ if (pc_istrading(sd) || pc_isvending(sd))
+ return;
+
short level = RFIFOW(fd,2);
short mapid = RFIFOW(fd,4);
short job[PARTY_BOOKING_JOBS];
@@ -13507,6 +13683,9 @@ static void clif_parse_PartyBookingSearchReq(int fd, struct map_session_data *sd
static void clif_parse_PartyBookingSearchReq(int fd, struct map_session_data *sd)
{
#ifndef PARTY_RECRUIT
+ if (pc_istrading(sd) || pc_isvending(sd))
+ return;
+
short level = RFIFOW(fd,2);
short mapid = RFIFOW(fd,4);
short job = RFIFOW(fd,6);
@@ -13558,7 +13737,10 @@ static void clif_parse_PartyBookingDeleteReq(int fd, struct map_session_data *sd
static void clif_parse_PartyBookingDeleteReq(int fd, struct map_session_data *sd)
{
#ifndef PARTY_RECRUIT
- if(party->booking_delete(sd))
+ if (pc_istrading(sd) || pc_isvending(sd))
+ return;
+
+ if (party->booking_delete(sd))
clif->PartyBookingDeleteAck(sd, 0);
#else
return;
@@ -13594,11 +13776,13 @@ static void clif_parse_PartyBookingUpdateReq(int fd, struct map_session_data *sd
static void clif_parse_PartyBookingUpdateReq(int fd, struct map_session_data *sd)
{
#ifndef PARTY_RECRUIT
+ if (pc_istrading(sd) || pc_isvending(sd))
+ return;
+
short job[PARTY_BOOKING_JOBS];
- int i;
- for(i=0; i<PARTY_BOOKING_JOBS; i++)
- job[i] = RFIFOW(fd,2+i*2);
+ for (int i = 0; i < PARTY_BOOKING_JOBS; i++)
+ job[i] = RFIFOW(fd, 2 + i * 2);
party->booking_update(sd, job);
#else
@@ -13611,8 +13795,11 @@ static void clif_parse_PartyBookingUpdateReq(int fd, struct map_session_data *sd
static void clif_PartyBookingInsertNotify(struct map_session_data *sd, struct party_booking_ad_info *pb_ad)
{
#ifndef PARTY_RECRUIT
+ if (pc_istrading(sd) || pc_isvending(sd))
+ return;
+
int i;
- uint8 buf[38+PARTY_BOOKING_JOBS*2];
+ uint8 buf[38 + PARTY_BOOKING_JOBS * 2];
nullpo_retv(sd);
if(pb_ad == NULL) return;
@@ -13679,7 +13866,10 @@ static void clif_parse_PartyRecruitRegisterReq(int fd, struct map_session_data *
static void clif_parse_PartyRecruitRegisterReq(int fd, struct map_session_data *sd)
{
#ifdef PARTY_RECRUIT
- short level = RFIFOW(fd,2);
+ if (pc_istrading(sd) || pc_isvending(sd))
+ return;
+
+ short level = RFIFOW(fd, 2);
const char *notice = RFIFOP(fd, 4);
party->recruit_register(sd, level, notice);
@@ -13750,6 +13940,9 @@ static void clif_parse_PartyRecruitSearchReq(int fd, struct map_session_data *sd
static void clif_parse_PartyRecruitSearchReq(int fd, struct map_session_data *sd)
{
#ifdef PARTY_RECRUIT
+ if (pc_istrading(sd) || pc_isvending(sd))
+ return;
+
short level = RFIFOW(fd, 2);
short mapid = RFIFOW(fd, 4);
unsigned long lastindex = RFIFOL(fd, 6);
@@ -13767,7 +13960,10 @@ static void clif_parse_PartyRecruitDeleteReq(int fd, struct map_session_data *sd
static void clif_parse_PartyRecruitDeleteReq(int fd, struct map_session_data *sd)
{
#ifdef PARTY_RECRUIT
- if(party->booking_delete(sd))
+ if (pc_istrading(sd) || pc_isvending(sd))
+ return;
+
+ if (party->booking_delete(sd))
clif->PartyRecruitDeleteAck(sd, 0);
#else
return;
@@ -13803,6 +13999,9 @@ static void clif_parse_PartyRecruitUpdateReq(int fd, struct map_session_data *sd
static void clif_parse_PartyRecruitUpdateReq(int fd, struct map_session_data *sd)
{
#ifdef PARTY_RECRUIT
+ if (pc_istrading(sd) || pc_isvending(sd))
+ return;
+
const char *notice = RFIFOP(fd, 2);
party->recruit_update(sd, notice);
@@ -13876,6 +14075,9 @@ static void clif_parse_PartyBookingAddFilteringList(int fd, struct map_session_d
static void clif_parse_PartyBookingAddFilteringList(int fd, struct map_session_data *sd)
{
#ifdef PARTY_RECRUIT
+ if (pc_istrading(sd) || pc_isvending(sd))
+ return;
+
int index = RFIFOL(fd, 2);
clif->PartyBookingAddFilteringList(index, sd);
@@ -13890,6 +14092,9 @@ static void clif_parse_PartyBookingSubFilteringList(int fd, struct map_session_d
static void clif_parse_PartyBookingSubFilteringList(int fd, struct map_session_data *sd)
{
#ifdef PARTY_RECRUIT
+ if (pc_istrading(sd) || pc_isvending(sd))
+ return;
+
int gid = RFIFOL(fd, 2);
clif->PartyBookingSubFilteringList(gid, sd);
@@ -13904,6 +14109,9 @@ static void clif_parse_PartyBookingReqVolunteer(int fd, struct map_session_data
static void clif_parse_PartyBookingReqVolunteer(int fd, struct map_session_data *sd)
{
#ifdef PARTY_RECRUIT
+ if (pc_istrading(sd) || pc_isvending(sd))
+ return;
+
int index = RFIFOL(fd, 2);
clif->PartyBookingVolunteerInfo(index, sd);
@@ -13980,6 +14188,9 @@ static void clif_parse_PartyBookingRefuseVolunteer(int fd, struct map_session_da
static void clif_parse_PartyBookingRefuseVolunteer(int fd, struct map_session_data *sd)
{
#ifdef PARTY_RECRUIT
+ if (pc_istrading(sd) || pc_isvending(sd))
+ return;
+
unsigned int aid = RFIFOL(fd, 2);
clif->PartyBookingRefuseVolunteer(aid, sd);
@@ -14009,6 +14220,9 @@ static void clif_parse_PartyBookingCancelVolunteer(int fd, struct map_session_da
static void clif_parse_PartyBookingCancelVolunteer(int fd, struct map_session_data *sd)
{
#ifdef PARTY_RECRUIT
+ if (pc_istrading(sd) || pc_isvending(sd))
+ return;
+
int index = RFIFOL(fd, 2);
clif->PartyBookingCancelVolunteer(index, sd);
@@ -14084,6 +14298,9 @@ static void clif_parse_CloseVending(int fd, struct map_session_data *sd) __attri
/// 012e
static void clif_parse_CloseVending(int fd, struct map_session_data *sd)
{
+ if (pc_istrading(sd) || pc_isdead(sd))
+ return;
+
vending->close(sd);
}
@@ -14092,6 +14309,9 @@ static void clif_parse_VendingListReq(int fd, struct map_session_data *sd) __att
/// 0130 <account id>.L
static void clif_parse_VendingListReq(int fd, struct map_session_data *sd)
{
+ if (pc_istrading(sd) || pc_isdead(sd))
+ return;
+
if( sd->npc_id ) {// using an NPC
return;
}
@@ -14103,6 +14323,9 @@ static void clif_parse_PurchaseReq(int fd, struct map_session_data *sd) __attrib
/// 0134 <packet len>.W <account id>.L { <amount>.W <index>.W }*
static void clif_parse_PurchaseReq(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
int len = (int)RFIFOW(fd, 2) - 8;
int id;
const uint8 *data;
@@ -14124,6 +14347,9 @@ static void clif_parse_PurchaseReq2(int fd, struct map_session_data *sd) __attri
/// 0801 <packet len>.W <account id>.L <unique id>.L { <amount>.W <index>.W }*
static void clif_parse_PurchaseReq2(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
int len = (int)RFIFOW(fd, 2) - 12;
int aid;
int uid;
@@ -14150,25 +14376,25 @@ static void clif_parse_OpenVending(int fd, struct map_session_data *sd) __attrib
/// 1 = open
static void clif_parse_OpenVending(int fd, struct map_session_data *sd)
{
+ if (pc_istrading(sd) || pc_isdead(sd) || sd->state.vending || sd->state.buyingstore)
+ return;
+
int len = (int)RFIFOW(fd, 2) - 85;
- const char *message;
- bool flag;
- const uint8 *data;
if (len < 0)
return;
- message = RFIFOP(fd,4);
- flag = (RFIFOB(fd,84) != 0) ? true : false;
- data = RFIFOP(fd,85);
+ const char *message = RFIFOP(fd, 4);
+ bool flag = (RFIFOB(fd, 84) != 0) ? true : false;
+ const uint8 *data = RFIFOP(fd, 85);
- if( !flag )
+ if (!flag)
sd->state.prevend = sd->state.workinprogress = 0;
- if(pc_ismuted(&sd->sc, MANNER_NOROOM))
+ if (pc_ismuted(&sd->sc, MANNER_NOROOM))
return;
- if( map->list[sd->bl.m].flag.novending ) {
- clif->message (sd->fd, msg_sd(sd,276)); // "You can't open a shop on this map"
+ if (map->list[sd->bl.m].flag.novending) {
+ clif->message (sd->fd, msg_sd(sd, 276)); // "You can't open a shop on this map"
return;
}
if (map->getcell(sd->bl.m, &sd->bl, sd->bl.x, sd->bl.y, CELL_CHKNOVENDING)) {
@@ -14187,11 +14413,14 @@ static void clif_parse_CreateGuild(int fd, struct map_session_data *sd) __attrib
/// 0165 <char id>.L <guild name>.24B
static void clif_parse_CreateGuild(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
char name[NAME_LENGTH];
safestrncpy(name, RFIFOP(fd,6), NAME_LENGTH);
- if(map->list[sd->bl.m].flag.guildlock) {
- clif->message(fd, msg_fd(fd,228)); // Guild modification is disabled in this map.
+ if (map->list[sd->bl.m].flag.guildlock) {
+ clif->message(fd, msg_fd(fd, 228)); // Guild modification is disabled in this map.
return;
}
@@ -14226,6 +14455,7 @@ static void clif_parse_GuildRequestInfo(int fd, struct map_session_data *sd)
case 0: // Basic Information Guild, hostile alliance information
clif->guild_basicinfo(sd);
clif->guild_allianceinfo(sd);
+ clif->guild_castlelist(sd);
break;
case 1: // Members list, list job title
clif->guild_positionnamelist(sd);
@@ -14252,6 +14482,9 @@ static void clif_parse_GuildChangePositionInfo(int fd, struct map_session_data *
/// 0161 <packet len>.W { <position id>.L <mode>.L <ranking>.L <pay rate>.L <name>.24B }*
static void clif_parse_GuildChangePositionInfo(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
int i;
int count = (RFIFOW(fd, 2) - 4) / 40;
@@ -14269,6 +14502,9 @@ static void clif_parse_GuildChangeMemberPosition(int fd, struct map_session_data
/// 0155 <packet len>.W { <account id>.L <char id>.L <position id>.L }*
static void clif_parse_GuildChangeMemberPosition(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
int i;
int len = RFIFOW(fd, 2);
int count = (len - 4) / 12;
@@ -14434,10 +14670,13 @@ static void clif_parse_GuildChangeEmblem(int fd, struct map_session_data *sd) __
/// 0153 <packet len>.W <emblem data>.?B
static void clif_parse_GuildChangeEmblem(int fd, struct map_session_data *sd)
{
- unsigned int emblem_len = RFIFOW(fd,2)-4;
- const uint8* emblem = RFIFOP(fd,4);
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
- if( !emblem_len || !sd->state.gmaster_flag )
+ unsigned int emblem_len = RFIFOW(fd, 2) - 4;
+ const uint8* emblem = RFIFOP(fd, 4);
+
+ if (!emblem_len || !sd->state.gmaster_flag)
return;
if (!clif->validate_emblem(emblem, emblem_len)) {
@@ -14454,7 +14693,10 @@ static void clif_parse_GuildChangeNotice(int fd, struct map_session_data *sd) __
/// 016e <guild id>.L <msg1>.60B <msg2>.120B
static void clif_parse_GuildChangeNotice(int fd, struct map_session_data *sd)
{
- int guild_id = RFIFOL(fd,2);
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
+ int guild_id = RFIFOL(fd, 2);
char *msg1 = NULL, *msg2 = NULL;
if (!sd->state.gmaster_flag)
@@ -14506,6 +14748,9 @@ static void clif_parse_GuildInvite(int fd, struct map_session_data *sd) __attrib
/// 0168 <account id>.L <inviter account id>.L <inviter char id>.L
static void clif_parse_GuildInvite(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
struct map_session_data *t_sd = map->id2sd(RFIFOL(fd,2));
if (!clif_sub_guild_invite(fd, sd, t_sd))
@@ -14521,7 +14766,7 @@ static void clif_parse_GuildInvite2(int fd, struct map_session_data *sd)
struct map_session_data *t_sd = NULL;
safestrncpy(nick, RFIFOP(fd, 2), NAME_LENGTH);
- t_sd = map->nick2sd(nick);
+ t_sd = map->nick2sd(nick, true);
clif_sub_guild_invite(fd, sd, t_sd);
}
@@ -14534,7 +14779,7 @@ static void clif_parse_GuildReplyInvite(int fd, struct map_session_data *sd) __a
/// 1 = accept
static void clif_parse_GuildReplyInvite(int fd, struct map_session_data *sd)
{
- guild->reply_invite(sd,RFIFOL(fd,2),RFIFOL(fd,6));
+ guild->reply_invite(sd, RFIFOL(fd, 2), RFIFOL(fd, 6));
}
static void clif_parse_GuildLeave(int fd, struct map_session_data *sd) __attribute__((nonnull (2)));
@@ -14542,16 +14787,19 @@ static void clif_parse_GuildLeave(int fd, struct map_session_data *sd) __attribu
/// 0159 <guild id>.L <account id>.L <char id>.L <reason>.40B
static void clif_parse_GuildLeave(int fd, struct map_session_data *sd)
{
- if(map->list[sd->bl.m].flag.guildlock) {
- clif->message(fd, msg_fd(fd,228)); // Guild modification is disabled in this map.
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
+ if (map->list[sd->bl.m].flag.guildlock) {
+ clif->message(fd, msg_fd(fd, 228)); // Guild modification is disabled in this map.
return;
}
- if( sd->bg_id ) {
- clif->message(fd, msg_fd(fd,870)); //"You can't leave battleground guilds."
+ if (sd->bg_id) {
+ clif->message(fd, msg_fd(fd, 870)); //"You can't leave battleground guilds."
return;
}
- guild->leave(sd,RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10), RFIFOP(fd,14));
+ guild->leave(sd, RFIFOL(fd, 2), RFIFOL(fd, 6), RFIFOL(fd, 10), RFIFOP(fd, 14));
}
static void clif_parse_GuildExpulsion(int fd, struct map_session_data *sd) __attribute__((nonnull (2)));
@@ -14559,11 +14807,14 @@ static void clif_parse_GuildExpulsion(int fd, struct map_session_data *sd) __att
/// 015b <guild id>.L <account id>.L <char id>.L <reason>.40B
static void clif_parse_GuildExpulsion(int fd, struct map_session_data *sd)
{
- if( map->list[sd->bl.m].flag.guildlock || sd->bg_id ) {
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
+ if (map->list[sd->bl.m].flag.guildlock || sd->bg_id) {
clif->message(fd, msg_fd(fd,228)); // Guild modification is disabled in this map.
return;
}
- guild->expulsion(sd, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10), RFIFOP(fd,14));
+ guild->expulsion(sd, RFIFOL(fd, 2), RFIFOL(fd, 6), RFIFOL(fd, 10), RFIFOP(fd, 14));
}
/**
@@ -14596,6 +14847,9 @@ static void clif_parse_GuildRequestAlliance(int fd, struct map_session_data *sd)
/// 0170 <account id>.L <inviter account id>.L <inviter char id>.L
static void clif_parse_GuildRequestAlliance(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
struct map_session_data *t_sd;
if(!sd->state.gmaster_flag)
@@ -14636,6 +14890,9 @@ static void clif_parse_GuildDelAlliance(int fd, struct map_session_data *sd) __a
/// 1 = Enemy
static void clif_parse_GuildDelAlliance(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
if(!sd->state.gmaster_flag)
return;
@@ -14651,6 +14908,9 @@ static void clif_parse_GuildOpposition(int fd, struct map_session_data *sd) __at
/// 0180 <account id>.L
static void clif_parse_GuildOpposition(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
struct map_session_data *t_sd;
if(!sd->state.gmaster_flag)
@@ -14680,6 +14940,9 @@ static void clif_parse_GuildBreak(int fd, struct map_session_data *sd) __attribu
/// field name and size is same as the one in CH_DELETE_CHAR.
static void clif_parse_GuildBreak(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
char key[40];
if( map->list[sd->bl.m].flag.guildlock ) {
clif->message(fd, msg_fd(fd,228)); // Guild modification is disabled in this map.
@@ -14703,7 +14966,10 @@ static void clif_parse_PetMenu(int fd, struct map_session_data *sd) __attribute_
/// 4 = unequip accessory
static void clif_parse_PetMenu(int fd, struct map_session_data *sd)
{
- pet->menu(sd,RFIFOB(fd,2));
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
+ pet->menu(sd, RFIFOB(fd, 2));
}
static void clif_parse_CatchPet(int fd, struct map_session_data *sd) __attribute__((nonnull (2)));
@@ -14711,7 +14977,10 @@ static void clif_parse_CatchPet(int fd, struct map_session_data *sd) __attribute
/// 019f <id>.L
static void clif_parse_CatchPet(int fd, struct map_session_data *sd)
{
- pet->catch_process2(sd,RFIFOL(fd,2));
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
+ pet->catch_process2(sd, RFIFOL(fd, 2));
}
static void clif_parse_SelectEgg(int fd, struct map_session_data *sd) __attribute__((nonnull (2)));
@@ -14719,10 +14988,13 @@ static void clif_parse_SelectEgg(int fd, struct map_session_data *sd) __attribut
/// 01a7 <index>.W
static void clif_parse_SelectEgg(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
if (sd->menuskill_id != SA_TAMINGMONSTER || sd->menuskill_val != -1) {
return;
}
- pet->select_egg(sd,RFIFOW(fd,2)-2);
+ pet->select_egg(sd, RFIFOW(fd, 2) - 2);
clif_menuskill_clear(sd);
}
@@ -14762,6 +15034,9 @@ static void clif_parse_ChangePetName(int fd, struct map_session_data *sd) __attr
/// 01a5 <name>.24B
static void clif_parse_ChangePetName(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
pet->change_name(sd, RFIFOP(fd,2));
}
@@ -14770,6 +15045,9 @@ static void clif_parse_pet_evolution(int fd, struct map_session_data *sd) __attr
/// 09fb <Length>.W <EvolvedPetEggID>.W {<index>.W <amount>.W}*items
static void clif_parse_pet_evolution(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
const struct PACKET_CZ_PET_EVOLUTION *p = RP2PTR(fd);
int i = 0, idx, petIndex;
@@ -14958,7 +15236,7 @@ static void clif_parse_GMShift(int fd, struct map_session_data *sd)
{
// FIXME: remove is supposed to receive account name for clients prior 20100803RE
char player_name[NAME_LENGTH];
- char command[NAME_LENGTH+8];
+ char command[NAME_LENGTH + 20];
safestrncpy(player_name, RFIFOP(fd,2), NAME_LENGTH);
@@ -14977,7 +15255,7 @@ static void clif_parse_GMRemove2(int fd, struct map_session_data *sd)
account_id = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]);
if( (pl_sd = map->id2sd(account_id)) != NULL ) {
- char command[NAME_LENGTH+8];
+ char command[NAME_LENGTH + 20];
sprintf(command, "%cjumpto %s", atcommand->at_symbol, pl_sd->status.name);
atcommand->exec(fd, sd, command, true);
}
@@ -15014,7 +15292,7 @@ static void clif_parse_GMRecall2(int fd, struct map_session_data *sd)
account_id = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]);
if( (pl_sd = map->id2sd(account_id)) != NULL ) {
- char command[NAME_LENGTH+8];
+ char command[NAME_LENGTH + 20];
sprintf(command, "%crecall %s", atcommand->at_symbol, pl_sd->status.name);
atcommand->exec(fd, sd, command, true);
}
@@ -15045,7 +15323,7 @@ static void clif_parse_GM_Monster_Item(int fd, struct map_session_data *sd)
safestrncpy(item_monster_name, p->str, sizeof(item_monster_name));
- if ( (count=itemdb->search_name_array(item_array, 10, item_monster_name, 1)) > 0 ) {
+ if ( (count=itemdb->search_name_array(item_array, 10, item_monster_name, IT_SEARCH_NAME_EXACT)) > 0 ) {
for(i = 0; i < count; i++) {
if( !item_array[i] )
continue;
@@ -15345,6 +15623,9 @@ static void clif_parse_NoviceDoriDori(int fd, struct map_session_data *sd) __att
/// 01e7
static void clif_parse_NoviceDoriDori(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
if (sd->state.doridori) return;
switch (sd->job & MAPID_UPPERMASK) {
@@ -15371,6 +15652,9 @@ static void clif_parse_NoviceExplosionSpirits(int fd, struct map_session_data *s
/// "Help me out~ Please~ T_T"
static void clif_parse_NoviceExplosionSpirits(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
/* [Ind/Hercules] */
/* game client is currently broken on this (not sure the packetver range) */
/* it sends the request when the criteria doesn't match (and of course we let it fail) */
@@ -15514,13 +15798,16 @@ static void clif_parse_FriendsListAdd(int fd, struct map_session_data *sd) __att
/// 0202 <name>.24B
static void clif_parse_FriendsListAdd(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
struct map_session_data *f_sd;
int i;
char nick[NAME_LENGTH];
safestrncpy(nick, RFIFOP(fd,2), NAME_LENGTH);
- f_sd = map->nick2sd(nick);
+ f_sd = map->nick2sd(nick, true);
// ensure that the request player's friend list is not full
ARR_FIND(0, MAX_FRIENDS, i, sd->status.friends[i].char_id == 0);
@@ -15635,6 +15922,9 @@ static void clif_parse_FriendsListRemove(int fd, struct map_session_data *sd) __
/// 0203 <account id>.L <char id>.L
static void clif_parse_FriendsListRemove(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
struct map_session_data *f_sd = NULL;
int account_id, char_id;
int i, j;
@@ -15724,60 +16014,95 @@ static void clif_parse_PVPInfo(int fd, struct map_session_data *sd)
/// Ranking list
/// ranking pointlist { <name>.24B <point>.L }*10
-static void clif_ranklist_sub(unsigned char *buf, enum fame_list_type type)
+static void clif_ranklist_sub(struct PACKET_ZC_ACK_RANKING_sub *ranks, enum fame_list_type type)
{
- const char* name;
- struct fame_list* list;
- int i;
+#if !(PACKETVER_MAIN_NUM >= 20190731 || PACKETVER_RE_NUM >= 20190703 || PACKETVER_ZERO_NUM >= 20190724)
+ nullpo_retv(ranks);
- nullpo_retv(buf);
- switch( type ) {
+ struct fame_list* list;
+ switch (type) {
case RANKTYPE_BLACKSMITH: list = pc->smith_fame_list; break;
case RANKTYPE_ALCHEMIST: list = pc->chemist_fame_list; break;
case RANKTYPE_TAEKWON: list = pc->taekwon_fame_list; break;
default: return; // Unsupported
}
+ int i;
// Packet size limits this list to 10 elements. [Skotlex]
- for( i = 0; i < 10 && i < MAX_FAME_LIST; i++ ) {
- if( list[i].id > 0 ) {
- if( strcmp(list[i].name, "-") == 0 && (name = map->charid2nick(list[i].id)) != NULL ) {
- strncpy(WBUFP(buf, 24 * i), name, NAME_LENGTH);
+ for (i = 0; i < 10 && i < MAX_FAME_LIST; i++) {
+ if (list[i].id > 0) {
+ const char* name;
+ if (strcmp(list[i].name, "-") == 0 && (name = map->charid2nick(list[i].id)) != NULL) {
+ strncpy(ranks->names[i].name, name, NAME_LENGTH);
} else {
- strncpy(WBUFP(buf, 24 * i), list[i].name, NAME_LENGTH);
+ strncpy(ranks->names[i].name, list[i].name, NAME_LENGTH);
}
} else {
- strncpy(WBUFP(buf, 24 * i), "None", 5);
+ strncpy(ranks->names[i].name, "None", 5);
+ }
+ ranks->points[i].points = list[i].fame; //points
+ }
+ for (;i < 10; i++) { // In case the MAX is less than 10.
+ strncpy(ranks->names[i].name, "Unavailable", 12);
+ ranks->points[i].points = 0;
+ }
+#endif
+}
+
+static void clif_ranklist_sub2(uint32 *chars, uint32 *points, enum fame_list_type type)
+{
+#if PACKETVER_MAIN_NUM >= 20190731 || PACKETVER_RE_NUM >= 20190703 || PACKETVER_ZERO_NUM >= 20190724
+ nullpo_retv(chars);
+ nullpo_retv(points);
+
+ struct fame_list* list;
+ switch (type) {
+ case RANKTYPE_BLACKSMITH: list = pc->smith_fame_list; break;
+ case RANKTYPE_ALCHEMIST: list = pc->chemist_fame_list; break;
+ case RANKTYPE_TAEKWON: list = pc->taekwon_fame_list; break;
+ default: return; // Unsupported
+ }
+
+ int i;
+ // Packet size limits this list to 10 elements. [Skotlex]
+ for (i = 0; i < 10 && i < MAX_FAME_LIST; i++) {
+ if (list[i].id > 0) {
+ chars[i] = list[i].id;
+ } else {
+ chars[i] = 0;
}
- WBUFL(buf, 24 * 10 + i * 4) = list[i].fame; //points
+ points[i] = list[i].fame; //points
}
- for( ;i < 10; i++ ) { // In case the MAX is less than 10.
- strncpy(WBUFP(buf, 24 * i), "Unavailable", 12);
- WBUFL(buf, 24 * 10 + i * 4) = 0;
+ for (;i < 10; i++) { // In case the MAX is less than 10.
+ chars[i] = 0;
+ points[i] = 0;
}
+#endif
}
/// 097d <RankingType>.W {<CharName>.24B <point>L}*10 <mypoint>L (ZC_ACK_RANKING)
static void clif_ranklist(struct map_session_data *sd, enum fame_list_type type)
{
-#if PACKETVER >= 20120502
- int fd;
- int len = packet_len(0x97d);
-
+#if PACKETVER_MAIN_NUM >= 20130605 || PACKETVER_RE_NUM >= 20130529 || defined(PACKETVER_ZERO)
nullpo_retv(sd);
- fd = sd->fd;
- WFIFOHEAD(fd, len);
- WFIFOW(fd, 0) = 0x97d;
- WFIFOW(fd, 2) = type;
- clif_ranklist_sub(WFIFOP(fd,4), type);
+ int fd = sd->fd;
+ WFIFOHEAD(fd, sizeof(struct PACKET_ZC_ACK_RANKING));
+ struct PACKET_ZC_ACK_RANKING *p = WFIFOP(fd, 0);
+ p->packetType = HEADER_ZC_ACK_RANKING;
+ p->rankType = type;
+#if PACKETVER_MAIN_NUM >= 20190731 || PACKETVER_RE_NUM >= 20190703 || PACKETVER_ZERO_NUM >= 20190724
+ clif->ranklist_sub2(p->chars, p->points, type);
+#else
+ clif->ranklist_sub(&p->ranks, type);
+#endif
if (pc->famelist_type(sd->job) == type) {
- WFIFOL(fd, 284) = sd->status.fame; //mypoint
+ p->myPoints = sd->status.fame; //mypoint
} else {
- WFIFOL(fd, 284) = 0; //mypoint
+ p->myPoints = 0; //mypoint
}
- WFIFOSET(fd, len);
+ WFIFOSET(fd, sizeof(struct PACKET_ZC_ACK_RANKING));
#endif
}
@@ -15827,14 +16152,16 @@ static void clif_update_rankingpoint(struct map_session_data *sd, enum fame_list
/// 0219 { <name>.24B }*10 { <point>.L }*10
static void clif_blacksmith(struct map_session_data *sd)
{
+#if !(PACKETVER_MAIN_NUM >= 20130605 || PACKETVER_RE_NUM >= 20130529 || defined(PACKETVER_ZERO))
int fd;
nullpo_retv(sd);
fd = sd->fd;
WFIFOHEAD(fd,packet_len(0x219));
WFIFOW(fd,0) = 0x219;
- clif_ranklist_sub(WFIFOP(fd, 2), RANKTYPE_BLACKSMITH);
+ clif->ranklist_sub(WFIFOP(fd, 2), RANKTYPE_BLACKSMITH);
WFIFOSET(fd, packet_len(0x219));
+#endif
}
static void clif_parse_Blacksmith(int fd, struct map_session_data *sd) __attribute__((nonnull (2)));
@@ -15864,14 +16191,16 @@ static void clif_fame_blacksmith(struct map_session_data *sd, int points)
/// 021a { <name>.24B }*10 { <point>.L }*10
static void clif_alchemist(struct map_session_data *sd)
{
+#if !(PACKETVER_MAIN_NUM >= 20130605 || PACKETVER_RE_NUM >= 20130529 || defined(PACKETVER_ZERO))
int fd;
nullpo_retv(sd);
fd = sd->fd;
WFIFOHEAD(fd,packet_len(0x21a));
WFIFOW(fd,0) = 0x21a;
- clif_ranklist_sub(WFIFOP(fd,2), RANKTYPE_ALCHEMIST);
+ clif->ranklist_sub(WFIFOP(fd,2), RANKTYPE_ALCHEMIST);
WFIFOSET(fd, packet_len(0x21a));
+#endif
}
static void clif_parse_Alchemist(int fd, struct map_session_data *sd) __attribute__((nonnull (2)));
@@ -15901,14 +16230,16 @@ static void clif_fame_alchemist(struct map_session_data *sd, int points)
/// 0226 { <name>.24B }*10 { <point>.L }*10
static void clif_taekwon(struct map_session_data *sd)
{
+#if !(PACKETVER_MAIN_NUM >= 20130605 || PACKETVER_RE_NUM >= 20130529 || defined(PACKETVER_ZERO))
int fd;
nullpo_retv(sd);
fd = sd->fd;
WFIFOHEAD(fd,packet_len(0x226));
WFIFOW(fd,0) = 0x226;
- clif_ranklist_sub(WFIFOP(fd,2), RANKTYPE_TAEKWON);
+ clif->ranklist_sub(WFIFOP(fd,2), RANKTYPE_TAEKWON);
WFIFOSET(fd, packet_len(0x226));
+#endif
}
static void clif_parse_Taekwon(int fd, struct map_session_data *sd) __attribute__((nonnull (2)));
@@ -15968,6 +16299,9 @@ static void clif_parse_FeelSaveOk(int fd, struct map_session_data *sd) __attribu
/// 2 = star
static void clif_parse_FeelSaveOk(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
int i;
if (sd->menuskill_id != SG_FEEL)
return;
@@ -16009,6 +16343,9 @@ static void clif_parse_ChangeHomunculusName(int fd, struct map_session_data *sd)
/// 0231 <name>.24B
static void clif_parse_ChangeHomunculusName(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
homun->change_name(sd, RFIFOP(fd,2));
}
@@ -16017,6 +16354,9 @@ static void clif_parse_HomMoveToMaster(int fd, struct map_session_data *sd) __at
/// 0234 <id>.L
static void clif_parse_HomMoveToMaster(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
int id = RFIFOL(fd,2); // Mercenary or Homunculus
struct block_list *bl = NULL;
struct unit_data *ud = NULL;
@@ -16038,6 +16378,9 @@ static void clif_parse_HomMoveTo(int fd, struct map_session_data *sd) __attribut
/// 0232 <id>.L <position data>.3B
static void clif_parse_HomMoveTo(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
int id = RFIFOL(fd,2); // Mercenary or Homunculus
struct block_list *bl = NULL;
short x, y;
@@ -16061,6 +16404,9 @@ static void clif_parse_HomAttack(int fd, struct map_session_data *sd) __attribut
/// always 0
static void clif_parse_HomAttack(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
struct block_list *bl = NULL;
int id = RFIFOL(fd,2),
target_id = RFIFOL(fd,6),
@@ -16087,6 +16433,9 @@ static void clif_parse_HomMenu(int fd, struct map_session_data *sd) __attribute_
/// 2 = delete
static void clif_parse_HomMenu(int fd, struct map_session_data *sd)
{ //[orn]
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
int cmd;
cmd = RFIFOW(fd,0);
@@ -16102,7 +16451,16 @@ static void clif_parse_AutoRevive(int fd, struct map_session_data *sd) __attribu
/// 0292
static void clif_parse_AutoRevive(int fd, struct map_session_data *sd)
{
- int item_position = pc->search_inventory(sd, ITEMID_TOKEN_OF_SIEGFRIED);
+ if (pc_istrading(sd) || pc_isvending(sd))
+ return;
+
+ if (!pc_isdead(sd))
+ return;
+
+ if (sd->sc.data[SC_HELLPOWER]) //Cannot res while under the effect of SC_HELLPOWER.
+ return;
+
+ int item_position = pc->have_item_chain(sd, ECC_SIEGFRIED);
int hpsp = 100;
if (item_position == INDEX_NOT_FOUND) {
@@ -16112,18 +16470,15 @@ static void clif_parse_AutoRevive(int fd, struct map_session_data *sd)
return;
}
- if (sd->sc.data[SC_HELLPOWER]) //Cannot res while under the effect of SC_HELLPOWER.
- return;
-
if (!status->revive(&sd->bl, hpsp, hpsp))
return;
if (item_position == INDEX_NOT_FOUND)
- status_change_end(&sd->bl,SC_LIGHT_OF_REGENE,INVALID_TIMER);
+ status_change_end(&sd->bl, SC_LIGHT_OF_REGENE, INVALID_TIMER);
else
pc->delitem(sd, item_position, 1, 0, DELITEM_SKILLUSE, LOG_TYPE_CONSUME);
- clif->skill_nodamage(&sd->bl,&sd->bl,ALL_RESURRECTION,4,1);
+ clif->skill_nodamage(&sd->bl, &sd->bl, ALL_RESURRECTION, 4, 1);
}
/// Information about character's status values (ZC_ACK_STATUS_GM).
@@ -16173,6 +16528,9 @@ static void clif_parse_Check(int fd, struct map_session_data *sd) __attribute__(
/// 0213 <char name>.24B
static void clif_parse_Check(int fd, struct map_session_data *sd)
{
+ if (pc_istrading(sd) || pc_isvending(sd))
+ return;
+
char charname[NAME_LENGTH];
struct map_session_data* pl_sd;
@@ -16181,7 +16539,7 @@ static void clif_parse_Check(int fd, struct map_session_data *sd)
safestrncpy(charname, RFIFOP(fd,packet_db[RFIFOW(fd,0)].pos[0]), sizeof(charname));
- if( ( pl_sd = map->nick2sd(charname) ) == NULL || pc_get_group_level(sd) < pc_get_group_level(pl_sd) ) {
+ if ((pl_sd = map->nick2sd(charname, true)) == NULL || pc_get_group_level(sd) < pc_get_group_level(pl_sd)) {
return;
}
@@ -16325,7 +16683,7 @@ static void clif_Mail_refreshinbox(struct map_session_data *sd)
if( md->full ) {// TODO: is this official?
char output[100];
- sprintf(output, "Inbox is full (Max %d). Delete some mails.", MAIL_MAX_INBOX);
+ sprintf(output, msg_sd(sd, 511), MAIL_MAX_INBOX); // Inbox is full (Max %d). Delete some mails.
clif_disp_onlyself(sd, output);
}
}
@@ -16335,6 +16693,9 @@ static void clif_parse_Mail_refreshinbox(int fd, struct map_session_data *sd) __
/// 023f
static void clif_parse_Mail_refreshinbox(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
struct mail_data* md = &sd->mail.inbox;
if( md->amount < MAIL_MAX_INBOX && (md->full || sd->mail.changed) )
@@ -16418,6 +16779,9 @@ static void clif_parse_Mail_read(int fd, struct map_session_data *sd) __attribut
/// 0241 <mail id>.L
static void clif_parse_Mail_read(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
int mail_id = RFIFOL(fd,2);
if( mail_id <= 0 )
@@ -16433,6 +16797,9 @@ static void clif_parse_Mail_getattach(int fd, struct map_session_data *sd) __att
/// 0244 <mail id>.L
static void clif_parse_Mail_getattach(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
int mail_id = RFIFOL(fd,2);
int i;
@@ -16501,6 +16868,9 @@ static void clif_parse_Mail_delete(int fd, struct map_session_data *sd) __attrib
/// 0243 <mail id>.L
static void clif_parse_Mail_delete(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
int mail_id = RFIFOL(fd,2);
int i;
@@ -16532,6 +16902,9 @@ static void clif_parse_Mail_return(int fd, struct map_session_data *sd) __attrib
/// 0273 <mail id>.L <receive name>.24B
static void clif_parse_Mail_return(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
int mail_id = RFIFOL(fd,2);
int i;
@@ -16556,6 +16929,9 @@ static void clif_parse_Mail_setattach(int fd, struct map_session_data *sd) __att
/// 0247 <index>.W <amount>.L
static void clif_parse_Mail_setattach(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
int idx = RFIFOW(fd,2);
int amount = RFIFOL(fd,4);
unsigned char flag;
@@ -16578,6 +16954,9 @@ static void clif_parse_Mail_winopen(int fd, struct map_session_data *sd) __attri
/// 2 = remove zeny
static void clif_parse_Mail_winopen(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
int flag = RFIFOW(fd,2);
if (flag == 0 || flag == 1)
@@ -16592,6 +16971,9 @@ static void clif_parse_Mail_send(int fd, struct map_session_data *sd) __attribut
static void clif_parse_Mail_send(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
struct mail_message msg;
int body_len;
int len = RFIFOW(fd, 2);
@@ -16748,7 +17130,10 @@ static void clif_parse_Auction_cancelreg(int fd, struct map_session_data *sd) __
/// ? = junk, uninitialized value (ex. when switching between list filters)
static void clif_parse_Auction_cancelreg(int fd, struct map_session_data *sd)
{
- if( sd->auction.amount > 0 )
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
+ if (sd->auction.amount > 0)
clif->additem(sd, sd->auction.index, sd->auction.amount, 0);
sd->auction.amount = 0;
@@ -16759,8 +17144,11 @@ static void clif_parse_Auction_setitem(int fd, struct map_session_data *sd) __at
/// 024c <index>.W <count>.L
static void clif_parse_Auction_setitem(int fd, struct map_session_data *sd)
{
- int idx = RFIFOW(fd,2) - 2;
- int amount = RFIFOL(fd,4); // Always 1
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
+ int idx = RFIFOW(fd, 2) - 2;
+ int amount = RFIFOL(fd, 4); // Always 1
struct item_data *item;
if( !battle_config.feature_auction )
@@ -16838,6 +17226,9 @@ static void clif_parse_Auction_register(int fd, struct map_session_data *sd) __a
/// 024d <now money>.L <max money>.L <delete hour>.W
static void clif_parse_Auction_register(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
struct auction_data auction;
struct item_data *item;
@@ -16933,7 +17324,10 @@ static void clif_parse_Auction_cancel(int fd, struct map_session_data *sd) __att
/// 024e <auction id>.L
static void clif_parse_Auction_cancel(int fd, struct map_session_data *sd)
{
- unsigned int auction_id = RFIFOL(fd,2);
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
+ unsigned int auction_id = RFIFOL(fd, 2);
intif->Auction_cancel(sd->status.char_id, auction_id);
}
@@ -16943,6 +17337,9 @@ static void clif_parse_Auction_close(int fd, struct map_session_data *sd) __attr
/// 025d <auction id>.L
static void clif_parse_Auction_close(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
unsigned int auction_id = RFIFOL(fd,2);
intif->Auction_close(sd->status.char_id, auction_id);
@@ -16953,8 +17350,11 @@ static void clif_parse_Auction_bid(int fd, struct map_session_data *sd) __attrib
/// 024f <auction id>.L <money>.L
static void clif_parse_Auction_bid(int fd, struct map_session_data *sd)
{
- unsigned int auction_id = RFIFOL(fd,2);
- int bid = RFIFOL(fd,6);
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
+ unsigned int auction_id = RFIFOL(fd, 2);
+ int bid = RFIFOL(fd, 6);
if( !pc_can_give_items(sd) ) { //They aren't supposed to give zeny [Inkfish]
clif->message(sd->fd, msg_sd(sd,246)); // Your GM level doesn't authorize you to perform this action.
@@ -16985,9 +17385,12 @@ static void clif_parse_Auction_search(int fd, struct map_session_data *sd) __att
/// 5 = auction id search
static void clif_parse_Auction_search(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
char search_text[NAME_LENGTH];
- short type = RFIFOW(fd,2), page = RFIFOW(fd,32);
- int price = RFIFOL(fd,4); // FIXME: bug #5071
+ short type = RFIFOW(fd, 2), page = RFIFOW(fd, 32);
+ int price = RFIFOL(fd, 4); // FIXME: bug #5071
if( !battle_config.feature_auction )
return;
@@ -17006,7 +17409,10 @@ static void clif_parse_Auction_buysell(int fd, struct map_session_data *sd) __at
/// 1 = buy (own bids)
static void clif_parse_Auction_buysell(int fd, struct map_session_data *sd)
{
- short type = RFIFOW(fd,2) + 6;
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
+ short type = RFIFOW(fd, 2) + 6;
if( !battle_config.feature_auction )
return;
@@ -17116,6 +17522,9 @@ static void clif_parse_cashshop_buy(int fd, struct map_session_data *sd) __attri
/// 0288 <packet len>.W <kafra points>.L <count>.W { <amount>.W <name id>.W }.4B*count (PACKETVER >= 20100803)
static void clif_parse_cashshop_buy(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
int fail = 0;
const struct PACKET_CZ_PC_BUY_CASH_POINT_ITEM *p = RFIFOP(fd, 0);
@@ -17208,6 +17617,9 @@ static void clif_parse_Adopt_request(int fd, struct map_session_data *sd) __attr
/// 01f9 <account id>.L
static void clif_parse_Adopt_request(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
struct map_session_data *tsd = map->id2sd(RFIFOL(fd,2)), *p_sd = map->charid2sd(sd->status.partner_id);
if( pc->can_Adopt(sd, p_sd, tsd) ) {
@@ -17224,6 +17636,9 @@ static void clif_parse_Adopt_reply(int fd, struct map_session_data *sd) __attrib
/// 1 = accepted
static void clif_parse_Adopt_reply(int fd, struct map_session_data *sd)
{
+ if (pc_isdead(sd))
+ return;
+
int p1_id = RFIFOL(fd,2);
int p2_id = RFIFOL(fd,6);
int result = RFIFOL(fd,10);
@@ -17291,6 +17706,9 @@ static void clif_parse_ViewPlayerEquip(int fd, struct map_session_data *sd) __at
/// 02d6 <account id>.L
static void clif_parse_ViewPlayerEquip(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
int charid = RFIFOL(fd, 2);
struct map_session_data* tsd = map->id2sd(charid);
@@ -17318,6 +17736,9 @@ static void clif_parse_cz_config(int fd, struct map_session_data *sd) __attribut
/// 1 = enabled
static void clif_parse_cz_config(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
enum CZ_CONFIG type = RFIFOL(fd, 2);
int flag = RFIFOL(fd, 6);
@@ -17633,6 +18054,9 @@ static void clif_parse_questStateAck(int fd, struct map_session_data *sd) __attr
/// 02b6 <quest id>.L <active>.B
static void clif_parse_questStateAck(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
quest->update_status(sd, RFIFOL(fd,2), RFIFOB(fd,6)?Q_ACTIVE:Q_INACTIVE);
}
@@ -17852,6 +18276,9 @@ static void clif_parse_mercenary_action(int fd, struct map_session_data *sd) __a
/// 2 = delete
static void clif_parse_mercenary_action(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
int option = RFIFOB(fd,2);
if (sd->md == NULL)
return;
@@ -18320,6 +18747,9 @@ static void clif_parse_ItemListWindowSelected(int fd, struct map_session_data *s
/// S 07e4 <length>.w <option>.l <val>.l {<index>.w <amount>.w).4b*
static void clif_parse_ItemListWindowSelected(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
int n = ((int)RFIFOW(fd, 2) - 12) / 4;
int type = RFIFOL(fd,4);
int flag = RFIFOL(fd,8); // Button clicked: 0 = Cancel, 1 = OK
@@ -18449,6 +18879,9 @@ static void clif_parse_ReqOpenBuyingStore(int fd, struct map_session_data *sd) _
/// 1 = open
static void clif_parse_ReqOpenBuyingStore(int fd, struct map_session_data *sd)
{
+ if (pc_istrading(sd) || pc_isdead(sd))
+ return;
+
const unsigned int blocksize = sizeof(struct PACKET_CZ_REQ_OPEN_BUYING_STORE_sub);
const struct PACKET_CZ_REQ_OPEN_BUYING_STORE_sub *itemlist;
char storename[MESSAGE_SIZE];
@@ -18612,6 +19045,9 @@ static void clif_buyingstore_disappear_entry_single(struct map_session_data *sd,
/// 0817 <account id>.L
static void clif_parse_ReqClickBuyingStore(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
int account_id;
account_id = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]);
@@ -18656,6 +19092,9 @@ static void clif_parse_ReqTradeBuyingStore(int fd, struct map_session_data *sd)
/// 0819 <packet len>.W <account id>.L <store id>.L { <index>.W <name id>.W <amount>.W }*
static void clif_parse_ReqTradeBuyingStore(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
const unsigned int blocksize = sizeof(struct PACKET_CZ_REQ_TRADE_BUYING_STORE_sub);
const struct PACKET_CZ_REQ_TRADE_BUYING_STORE_sub *itemlist;
int account_id;
@@ -18794,6 +19233,9 @@ static void clif_parse_SearchStoreInfo(int fd, struct map_session_data *sd) __at
/// cannot be searched.
static void clif_parse_SearchStoreInfo(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
const unsigned int blocksize = sizeof(struct PACKET_CZ_SEARCH_STORE_INFO_item);
const struct PACKET_CZ_SEARCH_STORE_INFO_item* itemlist;
const struct PACKET_CZ_SEARCH_STORE_INFO_item* cardlist;
@@ -18942,6 +19384,9 @@ static void clif_parse_SearchStoreInfoNextPage(int fd, struct map_session_data *
/// 0838
static void clif_parse_SearchStoreInfoNextPage(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
searchstore->next(sd);
}
@@ -18980,6 +19425,9 @@ static void clif_parse_SearchStoreInfoListItemClick(int fd, struct map_session_d
/// 083c <account id>.L <store id>.L <nameid>.W
static void clif_parse_SearchStoreInfoListItemClick(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
const struct PACKET_CZ_SSILIST_ITEM_CLICK *p = RFIFOP(fd, 0);
searchstore->click(sd, p->AID, p->storeId, p->itemId);
}
@@ -19029,27 +19477,30 @@ static void clif_parse_debug(int fd, struct map_session_data *sd)
*------------------------------------------*/
static int clif_elementalconverter_list(struct map_session_data *sd)
{
- int i,c,view,fd;
-
nullpo_ret(sd);
/// Main client packet processing function
- fd=sd->fd;
- WFIFOHEAD(fd, MAX_SKILL_PRODUCE_DB *2+4);
- WFIFOW(fd, 0)=0x1ad;
+ int fd = sd->fd;
+ int len = MAX_SKILL_ARROW_DB * sizeof(struct PACKET_ZC_MAKINGARROW_LIST_sub) + sizeof(struct PACKET_ZC_MAKINGARROW_LIST);
+ WFIFOHEAD(fd, len);
+ struct PACKET_ZC_MAKINGARROW_LIST *p = WFIFOP(fd, 0);
+ p->packetType = HEADER_ZC_MAKINGARROW_LIST;
- for(i=0,c=0;i<MAX_SKILL_PRODUCE_DB;i++){
- if( skill->can_produce_mix(sd,skill->dbs->produce_db[i].nameid,23, 1) ){
- if((view = itemdb_viewid(skill->dbs->produce_db[i].nameid)) > 0)
- WFIFOW(fd,c*2+ 4)= view;
+ int c = 0;
+ for (int i = 0; i < MAX_SKILL_PRODUCE_DB; i++) {
+ if (skill->can_produce_mix(sd,skill->dbs->produce_db[i].nameid,23, 1) ) {
+ int view = itemdb_viewid(skill->dbs->produce_db[i].nameid);
+ if (view > 0)
+ p->items[c].itemId = view;
else
- WFIFOW(fd,c*2+ 4)= skill->dbs->produce_db[i].nameid;
+ p->items[c].itemId = skill->dbs->produce_db[i].nameid;
c++;
}
}
- WFIFOW(fd,2) = c*2+4;
- WFIFOSET(fd, WFIFOW(fd,2));
if (c > 0) {
+ len = c * sizeof(struct PACKET_ZC_MAKINGARROW_LIST_sub) + sizeof(struct PACKET_ZC_MAKINGARROW_LIST);
+ p->packetLength = len;
+ WFIFOSET(fd, len);
sd->menuskill_id = SA_CREATECON;
sd->menuskill_val = c;
}
@@ -19080,33 +19531,33 @@ static void clif_millenniumshield(struct block_list *bl, short shields)
*------------------------------------------*/
static 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;
+ int fd = sd->fd;
+ int len = MAX_SKILL_ARROW_DB * sizeof(struct PACKET_ZC_MAKINGARROW_LIST_sub) + sizeof(struct PACKET_ZC_MAKINGARROW_LIST);
+ WFIFOHEAD(fd, len);
+ struct PACKET_ZC_MAKINGARROW_LIST *p = WFIFOP(fd, 0);
+ p->packetType = HEADER_ZC_MAKINGARROW_LIST;
- for (i = 0, c = 0; i < sd->status.inventorySize; i ++ )
+ int c = 0;
+ for (int i = 0; i < sd->status.inventorySize; i ++ )
{
- if( itemdb_is_spellbook(sd->status.inventory[i].nameid) )
+ if (itemdb_is_spellbook(sd->status.inventory[i].nameid))
{
- WFIFOW(fd, c * 2 + 4) = sd->status.inventory[i].nameid;
+ p->items[c].itemId = sd->status.inventory[i].nameid;
c++;
}
}
- if( c > 0 )
+ if (c > 0)
{
- WFIFOW(fd,2) = c * 2 + 4;
- WFIFOSET(fd, WFIFOW(fd, 2));
+ len = c * sizeof(struct PACKET_ZC_MAKINGARROW_LIST_sub) + sizeof(struct PACKET_ZC_MAKINGARROW_LIST);
+ p->packetLength = len;
+ WFIFOSET(fd, len);
sd->menuskill_id = WL_READING_SB;
sd->menuskill_val = c;
- }
- else{
- status_change_end(&sd->bl,SC_STOP,INVALID_TIMER);
+ } else {
+ status_change_end(&sd->bl, SC_STOP, INVALID_TIMER);
clif->skill_fail(sd, WL_READING_SB, USESKILL_FAIL_SPELLBOOK, 0, 0);
}
@@ -19121,17 +19572,18 @@ static int clif_spellbook_list(struct map_session_data *sd)
static int clif_magicdecoy_list(struct map_session_data *sd, uint16 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]
+ int fd = sd->fd;
+ int len = MAX_SKILL_ARROW_DB * sizeof(struct PACKET_ZC_MAKINGARROW_LIST_sub) + sizeof(struct PACKET_ZC_MAKINGARROW_LIST);
+ WFIFOHEAD(fd, len);
+ struct PACKET_ZC_MAKINGARROW_LIST *p = WFIFOP(fd, 0);
+ p->packetType = HEADER_ZC_MAKINGARROW_LIST;
for (i = 0, c = 0; i < sd->status.inventorySize; i ++) {
- if( itemdb_is_element(sd->status.inventory[i].nameid) ) {
- WFIFOW(fd, c * 2 + 4) = sd->status.inventory[i].nameid;
+ if (itemdb_is_element(sd->status.inventory[i].nameid)) {
+ p->items[c].itemId = sd->status.inventory[i].nameid;
c ++;
}
}
@@ -19140,8 +19592,10 @@ static int clif_magicdecoy_list(struct map_session_data *sd, uint16 skill_lv, sh
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));
+
+ len = c * sizeof(struct PACKET_ZC_MAKINGARROW_LIST_sub) + sizeof(struct PACKET_ZC_MAKINGARROW_LIST);
+ p->packetLength = len;
+ WFIFOSET(fd, len);
} else {
clif->skill_fail(sd, NC_MAGICDECOY, USESKILL_FAIL_LEVEL, 0, 0);
return 0;
@@ -19158,25 +19612,28 @@ static int clif_magicdecoy_list(struct map_session_data *sd, uint16 skill_lv, sh
static int clif_poison_list(struct map_session_data *sd, uint16 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]
+ int fd = sd->fd;
+ int len = MAX_SKILL_ARROW_DB * sizeof(struct PACKET_ZC_MAKINGARROW_LIST_sub) + sizeof(struct PACKET_ZC_MAKINGARROW_LIST);
+ WFIFOHEAD(fd, len);
+ struct PACKET_ZC_MAKINGARROW_LIST *p = WFIFOP(fd, 0);
+ p->packetType = HEADER_ZC_MAKINGARROW_LIST;
for (i = 0, c = 0; i < sd->status.inventorySize; i ++) {
if( itemdb_is_poison(sd->status.inventory[i].nameid) ) {
- WFIFOW(fd, c * 2 + 4) = sd->status.inventory[i].nameid;
+ p->items[c].itemId = sd->status.inventory[i].nameid;
c ++;
}
}
- if( c > 0 ) {
+ if (c > 0) {
sd->menuskill_id = GC_POISONINGWEAPON;
sd->menuskill_val = skill_lv;
- WFIFOW(fd,2) = c * 2 + 4;
- WFIFOSET(fd, WFIFOW(fd, 2));
+
+ len = c * sizeof(struct PACKET_ZC_MAKINGARROW_LIST_sub) + sizeof(struct PACKET_ZC_MAKINGARROW_LIST);
+ p->packetLength = len;
+ WFIFOSET(fd, len);
} else {
clif->skill_fail(sd, GC_POISONINGWEAPON, USESKILL_FAIL_GUILLONTINE_POISON, 0, 0);
return 0;
@@ -19254,8 +19711,10 @@ static void clif_parse_SkillSelectMenu(int fd, struct map_session_data *sd) __at
*------------------------------------------*/
static void clif_parse_SkillSelectMenu(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
- if( sd->menuskill_id != SC_AUTOSHADOWSPELL )
+ if (sd->menuskill_id != SC_AUTOSHADOWSPELL)
return;
if (pc_istrading(sd) || sd->state.prevend) {
@@ -19301,9 +19760,8 @@ static void clif_parse_MoveItem(int fd, struct map_session_data *sd)
int index;
/* can't move while dead. */
- if(pc_isdead(sd)) {
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
return;
- }
index = RFIFOW(fd,2)-2;
@@ -19454,6 +19912,8 @@ static void clif_parse_dull(int fd, struct map_session_data *sd)
static void clif_parse_CashShopOpen(int fd, struct map_session_data *sd) __attribute__((nonnull (2)));
static void clif_parse_CashShopOpen(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
if (map->list[sd->bl.m].flag.nocashshop) {
clif->messagecolor_self(fd, COLOR_RED, msg_fd(fd,1489)); //Cash Shop is disabled in this map
@@ -19476,6 +19936,9 @@ static void clif_parse_CashShopClose(int fd, struct map_session_data *sd)
static void clif_parse_CashShopSchedule(int fd, struct map_session_data *sd) __attribute__((nonnull (2)));
static void clif_parse_CashShopSchedule(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
clif->cashShopSchedule(fd, sd);
}
@@ -19513,6 +19976,9 @@ void clif_cashShopSchedule(int fd, struct map_session_data *sd)
static void clif_parse_CashShopBuy(int fd, struct map_session_data *sd) __attribute__((nonnull (2)));
static void clif_parse_CashShopBuy(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
int len = RFIFOW(fd, 2);
unsigned short limit, i, j;
unsigned int kafra_pay;
@@ -19633,6 +20099,9 @@ static void clif_parse_CashShopReqTab(int fd, struct map_session_data *sd)
{
// [4144] packet exists only in 2011 and was dropped after
#if PACKETVER >= 20110222 && PACKETVER < 20120000
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
short tab = RFIFOW(fd, 2);
int j;
@@ -19787,6 +20256,9 @@ static void clif_bgqueue_notice_delete(struct map_session_data *sd, enum BATTLEG
static void clif_parse_bgqueue_register(int fd, struct map_session_data *sd) __attribute__((nonnull (2)));
static void clif_parse_bgqueue_register(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
const struct packet_bgqueue_register *p = RP2PTR(fd);
struct bg_arena *arena = NULL;
if( !bg->queue_on ) return; /* temp, until feature is complete */
@@ -19827,6 +20299,9 @@ static void clif_bgqueue_update_info(struct map_session_data *sd, unsigned char
static void clif_parse_bgqueue_checkstate(int fd, struct map_session_data *sd) __attribute__((nonnull (2)));
static void clif_parse_bgqueue_checkstate(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
const struct packet_bgqueue_checkstate *p = RP2PTR(fd);
if (sd->bg_queue.arena && sd->bg_queue.type) {
@@ -19839,6 +20314,9 @@ static void clif_parse_bgqueue_checkstate(int fd, struct map_session_data *sd)
static void clif_parse_bgqueue_revoke_req(int fd, struct map_session_data *sd) __attribute__((nonnull (2)));
static void clif_parse_bgqueue_revoke_req(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
const struct packet_bgqueue_revoke_req *p = RP2PTR(fd);
if( sd->bg_queue.arena )
@@ -19850,6 +20328,9 @@ static void clif_parse_bgqueue_revoke_req(int fd, struct map_session_data *sd)
static void clif_parse_bgqueue_battlebegin_ack(int fd, struct map_session_data *sd) __attribute__((nonnull (2)));
static void clif_parse_bgqueue_battlebegin_ack(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
const struct packet_bgqueue_battlebegin_ack *p = RP2PTR(fd);
struct bg_arena *arena;
@@ -19914,7 +20395,11 @@ static void clif_package_item_announce(struct map_session_data *sd, int nameid,
nullpo_retv(sd);
p.PacketType = package_item_announceType;
- p.PacketLength = 11 + NAME_LENGTH;
+#if PACKETVER_MAIN_NUM >= 20181121 || PACKETVER_RE_NUM >= 20180704 || PACKETVER_ZERO_NUM >= 20181114
+ p.PacketLength = 7 + 4 + 4 + NAME_LENGTH;
+#else
+ p.PacketLength = 7 + 2 + 2 + NAME_LENGTH;
+#endif
p.type = 0x0;
p.ItemID = nameid;
p.len = NAME_LENGTH;
@@ -19922,7 +20407,7 @@ static void clif_package_item_announce(struct map_session_data *sd, int nameid,
p.unknown = 0x2; // some strange byte, IDA shows.. BYTE3(BoxItemIDLength) = 2;
p.BoxItemID = containerid;
- clif->send(&p,sizeof(p), &sd->bl, ALL_CLIENT);
+ clif->send(&p, p.PacketLength, &sd->bl, ALL_CLIENT);
}
/* Made Possible Thanks to Yommy! */
@@ -19940,12 +20425,13 @@ static void clif_item_drop_announce(struct map_session_data *sd, int nameid, cha
if (monsterName == NULL) {
// message: MSG_BROADCASTING_SPECIAL_ITEM_OBTAIN2
p.type = 0x2;
+ p.PacketLength -= NAME_LENGTH;
} else {
// message: MSG_BROADCASTING_SPECIAL_ITEM_OBTAIN
p.type = 0x1;
safestrncpy(p.monsterName, monsterName, sizeof(p.monsterName));
}
- clif->send(&p, sizeof(p), &sd->bl, ALL_CLIENT);
+ clif->send(&p, p.PacketLength, &sd->bl, ALL_CLIENT);
}
/* [Ind/Hercules] special thanks to Yommy~! */
@@ -20005,6 +20491,9 @@ static void clif_cart_additem_ack(struct map_session_data *sd, int flag)
static void clif_parse_BankDeposit(int fd, struct map_session_data *sd) __attribute__((nonnull (2)));
static void clif_parse_BankDeposit(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
const struct packet_banking_deposit_req *p = RP2PTR(fd);
int money;
@@ -20021,6 +20510,9 @@ static void clif_parse_BankDeposit(int fd, struct map_session_data *sd)
static void clif_parse_BankWithdraw(int fd, struct map_session_data *sd) __attribute__((nonnull (2)));
static void clif_parse_BankWithdraw(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
const struct packet_banking_withdraw_req *p = RP2PTR(fd);
int money;
@@ -20038,6 +20530,9 @@ static void clif_parse_BankCheck(int fd, struct map_session_data *sd) __attribut
static void clif_parse_BankCheck(int fd, struct map_session_data *sd)
{
#if PACKETVER >= 20130320
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
struct packet_banking_check p;
p.PacketType = banking_checkType;
@@ -20104,7 +20599,7 @@ static void clif_show_modifiers(struct map_session_data *sd)
if( sd->status.mod_exp != 100 || sd->status.mod_drop != 100 || sd->status.mod_death != 100 ) {
char output[128];
- snprintf(output,128,"Base EXP : %d%% | Base Drop: %d%% | Base Death Penalty: %d%%",
+ snprintf(output,128, msg_sd(sd, 896), // Base EXP : %d%% | Base Drop: %d%% | Base Death Penalty: %d%%
sd->status.mod_exp,sd->status.mod_drop,sd->status.mod_death);
clif->broadcast2(&sd->bl, output, (int)strlen(output) + 1, 0xffbc90, 0x190, 12, 0, 0, SELF);
}
@@ -20169,7 +20664,7 @@ static int clif_delay_damage_sub(int tid, int64 tick, int id, intptr_t data)
*
* @return clif->calc_walkdelay used in further processing
**/
-static int clif_delay_damage(int64 tick, struct block_list *src, struct block_list *dst, int sdelay, int ddelay, int64 in_damage, short div, unsigned char type)
+static int clif_delay_damage(int64 tick, struct block_list *src, struct block_list *dst, int sdelay, int ddelay, int64 in_damage, short div, enum battle_dmg_type type)
{
struct cdelayed_damage *dd;
struct status_change *sc;
@@ -20281,40 +20776,43 @@ static void clif_parse_NPCBarterClosed(int fd, struct map_session_data *sd)
sd->npc_shopid = 0;
}
-static void clif_npc_market_purchase_ack(struct map_session_data *sd, const struct itemlist *item_list, unsigned char response)
+static void clif_npc_market_purchase_ack(struct map_session_data *sd, const struct itemlist *item_list, enum market_buy_result response)
{
-#if PACKETVER >= 20131223
- unsigned short c = 0;
-
+#if PACKETVER_MAIN_NUM >= 20131120 || PACKETVER_RE_NUM >= 20130911 || defined(PACKETVER_ZERO)
nullpo_retv(sd);
nullpo_retv(item_list);
- npcmarket_result.PacketType = npcmarketresultackType;
- npcmarket_result.result = response == 0 ? 1 : 0;/* find other values */
+ struct PACKET_ZC_NPC_MARKET_PURCHASE_RESULT *p = (struct PACKET_ZC_NPC_MARKET_PURCHASE_RESULT *)packet_buf;
+ p->PacketType = HEADER_ZC_NPC_MARKET_PURCHASE_RESULT;
+ p->result = response;
- if (npcmarket_result.result) {
+ unsigned short c = 0;
+ if (response == MARKET_BUY_RESULT_SUCCESS) {
+ int vectorLen = VECTOR_LENGTH(*item_list);
+ int maxCount = (sizeof(packet_buf) - sizeof(struct PACKET_ZC_NPC_MARKET_PURCHASE_RESULT)) / sizeof(struct PACKET_ZC_NPC_MARKET_PURCHASE_RESULT_sub);
+ if (maxCount > vectorLen)
+ maxCount = vectorLen;
struct npc_data *nd = map->id2nd(sd->npc_shopid);
struct npc_item_list *shop = nd->u.scr.shop->item;
unsigned short shop_size = nd->u.scr.shop->items;
- int i;
- for (i = 0; i < VECTOR_LENGTH(*item_list); i++) {
+ for (int i = 0; i < maxCount; i++) {
const struct itemlist_entry *entry = &VECTOR_INDEX(*item_list, i);
int j;
- npcmarket_result.list[i].ITID = entry->id;
- npcmarket_result.list[i].qty = entry->amount;
+ p->list[i].ITID = entry->id;
+ p->list[i].qty = entry->amount;
- ARR_FIND( 0, shop_size, j, entry->id == shop[j].nameid);
+ ARR_FIND(0, shop_size, j, entry->id == shop[j].nameid);
- npcmarket_result.list[i].price = (j != shop_size) ? shop[j].value : 0;
+ p->list[i].price = (j != shop_size) ? shop[j].value : 0;
c++;
}
}
- npcmarket_result.PacketLength = 5 + ( sizeof(npcmarket_result.list[0]) * c );;
+ p->PacketLength = sizeof(struct PACKET_ZC_NPC_MARKET_PURCHASE_RESULT) + (sizeof(struct PACKET_ZC_NPC_MARKET_PURCHASE_RESULT_sub) * c);
- clif->send(&npcmarket_result,npcmarket_result.PacketLength,&sd->bl,SELF);
+ clif->send(p, p->PacketLength, &sd->bl, SELF);
#endif
}
@@ -20322,8 +20820,10 @@ static void clif_parse_NPCMarketPurchase(int fd, struct map_session_data *sd) __
static void clif_parse_NPCMarketPurchase(int fd, struct map_session_data *sd)
{
#if PACKETVER >= 20131223
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
const struct packet_npc_market_purchase *p = RP2PTR(fd);
- int response = 0, i;
int count = (p->PacketLength - 4) / sizeof p->list[0];
struct itemlist item_list;
@@ -20332,7 +20832,7 @@ static void clif_parse_NPCMarketPurchase(int fd, struct map_session_data *sd)
VECTOR_INIT(item_list);
VECTOR_ENSURE(item_list, count, 1);
- for (i = 0; i < count; i++) {
+ for (int i = 0; i < count; i++) {
struct itemlist_entry entry = { 0 };
entry.id = p->list[i].ITID;
@@ -20341,7 +20841,7 @@ static void clif_parse_NPCMarketPurchase(int fd, struct map_session_data *sd)
VECTOR_PUSH(item_list, entry);
}
- response = npc->market_buylist(sd, &item_list);
+ enum market_buy_result response = npc->market_buylist(sd, &item_list);
clif->npc_market_purchase_ack(sd, &item_list, response);
VECTOR_CLEAR(item_list);
@@ -20366,6 +20866,9 @@ static void clif_parse_RouletteOpen(int fd, struct map_session_data *sd) __attri
static void clif_parse_RouletteOpen(int fd, struct map_session_data *sd)
{
#if PACKETVER >= 20140612
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
struct packet_roulette_open_ack p;
if( !battle_config.feature_roulette ) {
@@ -20391,6 +20894,9 @@ static void clif_parse_RouletteInfo(int fd, struct map_session_data *sd) __attri
static void clif_parse_RouletteInfo(int fd, struct map_session_data *sd)
{
#if PACKETVER >= 20140612
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
struct packet_roulette_info_ack p;
unsigned short i, j, count = 0;
@@ -20436,6 +20942,9 @@ static void clif_parse_RouletteClose(int fd, struct map_session_data *sd)
static void clif_parse_RouletteGenerate(int fd, struct map_session_data *sd) __attribute__((nonnull (2)));
static void clif_parse_RouletteGenerate(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
unsigned char result = GENERATE_ROULETTE_SUCCESS;
short stage = sd->roulette.stage;
@@ -20495,6 +21004,8 @@ static void clif_parse_RouletteRecvItem(int fd, struct map_session_data *sd) __a
static void clif_parse_RouletteRecvItem(int fd, struct map_session_data *sd)
{
#if PACKETVER >= 20140612
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
struct packet_roulette_itemrecv_ack p;
if( !battle_config.feature_roulette ) {
@@ -21232,6 +21743,9 @@ static void clif_achievement_send_update(int fd, struct map_session_data *sd, co
static void clif_parse_achievement_get_reward(int fd, struct map_session_data *sd) __attribute__((nonnull(2)));
static void clif_parse_achievement_get_reward(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
int ach_id = RFIFOL(fd, 2);
const struct achievement_data *ad = NULL;
struct achievement *ach = NULL;
@@ -21274,6 +21788,9 @@ static void clif_achievement_reward_ack(int fd, struct map_session_data *sd, con
static void clif_parse_change_title(int fd, struct map_session_data *sd) __attribute__((nonnull(2)));
static void clif_parse_change_title(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
int title_id = RFIFOL(fd, 2);
if (title_id == sd->status.title_id) { // Same Title
@@ -21321,6 +21838,9 @@ static void clif_change_title_ack(int fd, struct map_session_data *sd, int title
static void clif_parse_rodex_open_write_mail(int fd, struct map_session_data *sd) __attribute__((nonnull(2)));
static void clif_parse_rodex_open_write_mail(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
const struct PACKET_CZ_REQ_OPEN_WRITE_MAIL *rPacket = RFIFOP(fd, 0);
int8 result = (rodex->isenabled() == true && sd->npc_id == 0) ? 1 : 0;
@@ -21346,6 +21866,9 @@ static void clif_rodex_open_write_mail(int fd, const char *receiver_name, int8 r
static void clif_parse_rodex_add_item(int fd, struct map_session_data *sd) __attribute__((nonnull(2)));
static void clif_parse_rodex_add_item(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
const struct PACKET_CZ_ADD_ITEM_TO_MAIL *rPacket = RFIFOP(fd, 0);
int16 idx = rPacket->index - 2;
@@ -21399,6 +21922,9 @@ static void clif_rodex_add_item_result(struct map_session_data *sd, int16 idx, i
static void clif_parse_rodex_remove_item(int fd, struct map_session_data *sd) __attribute__((nonnull(2)));
static void clif_parse_rodex_remove_item(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
const struct PACKET_CZ_REQ_REMOVE_ITEM_MAIL *rPacket = RFIFOP(fd, 0);
int16 idx = rPacket->index - 2;
@@ -21471,6 +21997,9 @@ static void clif_rodex_checkname_result(struct map_session_data *sd, int char_id
static void clif_parse_rodex_send_mail(int fd, struct map_session_data *sd) __attribute__((nonnull(2)));
static void clif_parse_rodex_send_mail(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
const struct PACKET_CZ_SEND_MAIL *rPacket = RFIFOP(fd, 0);
int8 result;
@@ -21701,6 +22230,9 @@ static void clif_rodex_send_refresh(int fd, struct map_session_data *sd, int8 op
static void clif_parse_rodex_next_maillist(int fd, struct map_session_data *sd) __attribute__((nonnull(2)));
static void clif_parse_rodex_next_maillist(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
const struct PACKET_CZ_REQ_NEXT_MAIL_LIST *packet = RFIFOP(fd, 0);
rodex->next_page(sd, packet->opentype, packet->Lower_MailID);
@@ -21709,6 +22241,9 @@ static void clif_parse_rodex_next_maillist(int fd, struct map_session_data *sd)
static void clif_parse_rodex_read_mail(int fd, struct map_session_data *sd) __attribute__((nonnull(2)));
static void clif_parse_rodex_read_mail(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
const struct PACKET_CZ_REQ_READ_MAIL *rPacket = RFIFOP(fd, 0);
rodex->read_mail(sd, rPacket->MailID);
@@ -21778,6 +22313,9 @@ static void clif_rodex_read_mail(struct map_session_data *sd, int8 opentype, str
static void clif_parse_rodex_delete_mail(int fd, struct map_session_data *sd) __attribute__((nonnull(2)));
static void clif_parse_rodex_delete_mail(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
const struct PACKET_CZ_REQ_DELETE_MAIL *rPacket = RFIFOP(fd, 0);
rodex->delete_mail(sd, rPacket->MailID);
@@ -21805,6 +22343,9 @@ static void clif_rodex_delete_mail(struct map_session_data *sd, int8 opentype, i
static void clif_parse_rodex_request_zeny(int fd, struct map_session_data *sd) __attribute__((nonnull(2)));
static void clif_parse_rodex_request_zeny(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
const struct PACKET_CZ_REQ_ZENY_FROM_MAIL *rPacket = RFIFOP(fd, 0);
rodex->get_zeny(sd, rPacket->opentype, rPacket->MailID);
@@ -21833,6 +22374,9 @@ static void clif_rodex_request_zeny(struct map_session_data *sd, int8 opentype,
static void clif_parse_rodex_request_items(int fd, struct map_session_data *sd) __attribute__((nonnull(2)));
static void clif_parse_rodex_request_items(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
const struct PACKET_CZ_REQ_ITEM_FROM_MAIL *rPacket = RFIFOP(fd, 0);
rodex->get_items(sd, rPacket->opentype, rPacket->MailID);
@@ -21872,6 +22416,9 @@ static void clif_rodex_icon(int fd, bool show)
static void clif_parse_rodex_refresh_maillist(int fd, struct map_session_data *sd) __attribute__((nonnull(2)));
static void clif_parse_rodex_refresh_maillist(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
const struct PACKET_CZ_REQ_REFRESH_MAIL_LIST *packet = RFIFOP(fd, 0);
#if PACKETVER >= 20170419
rodex->refresh(sd, RODEX_OPENTYPE_UNSET, packet->Upper_MailID);
@@ -21883,6 +22430,9 @@ static void clif_parse_rodex_refresh_maillist(int fd, struct map_session_data *s
static void clif_parse_rodex_open_mailbox(int fd, struct map_session_data *sd) __attribute__((nonnull(2)));
static void clif_parse_rodex_open_mailbox(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
const struct PACKET_CZ_REQ_OPEN_MAIL *packet = RFIFOP(fd, 0);
#if PACKETVER >= 20170419
rodex->open(sd, RODEX_OPENTYPE_UNSET, packet->char_Upper_MailID);
@@ -21895,6 +22445,9 @@ static void clif_parse_rodex_open_mailbox(int fd, struct map_session_data *sd)
static void clif_parse_rodex_close_mailbox(int fd, struct map_session_data *sd) __attribute__((nonnull(2)));
static void clif_parse_rodex_close_mailbox(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
rodex->clean(sd, 0);
intif->rodex_checkhasnew(sd);
}
@@ -21902,6 +22455,9 @@ static void clif_parse_rodex_close_mailbox(int fd, struct map_session_data *sd)
static void clif_parse_rodex_cancel_write_mail(int fd, struct map_session_data *sd) __attribute__((nonnull(2)));
static void clif_parse_rodex_cancel_write_mail(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
rodex->clean(sd, 1);
}
@@ -21935,53 +22491,47 @@ static void clif_skill_scale(struct block_list *bl, int src_id, int x, int y, ui
/// 0A3B <Length>.W <AID>.L <Status>.B { <HatEffectId>.W }
static void clif_hat_effect(struct block_list *bl, struct block_list *tbl, enum send_target target)
{
-#if PACKETVER >= 20150422
- unsigned char *buf;
- int len, i;
- struct map_session_data *sd;
-
+#if PACKETVER_MAIN_NUM >= 20150507 || PACKETVER_RE_NUM >= 20150429 || defined(PACKETVER_ZERO)
nullpo_retv(bl);
-
- sd = BL_CAST(BL_PC, bl);
-
+ struct map_session_data *sd = BL_CAST(BL_PC, bl);
nullpo_retv(sd);
- len = 9 + VECTOR_LENGTH(sd->hatEffectId) * 2;
-
- buf = (unsigned char*)aMalloc(len);
+ const int len = sizeof(struct PACKET_ZC_HAT_EFFECT) + VECTOR_LENGTH(sd->hatEffectId) * 2;
+ struct PACKET_ZC_HAT_EFFECT *p = aMalloc(len);
- WBUFW(buf, 0) = 0xa3b;
- WBUFW(buf, 2) = len;
- WBUFL(buf, 4) = bl->id;
- WBUFB(buf, 8) = 1;
+ p->packetType = HEADER_ZC_HAT_EFFECT;
+ p->packetLength = len;
+ p->aid = bl->id;
+ p->status = 1;
- for( i = 0; i < VECTOR_LENGTH(sd->hatEffectId); i++ ){
- WBUFW(buf, 9 + i * 2) = VECTOR_INDEX(sd->hatEffectId, i);
+ for (int i = 0; i < VECTOR_LENGTH(sd->hatEffectId); i++) {
+ p->effects[i] = VECTOR_INDEX(sd->hatEffectId, i);
}
if (tbl != NULL) {
- clif->send(buf, len, tbl, target);
+ clif->send(p, len, tbl, target);
} else {
- clif->send(buf, len, bl, target);
+ clif->send(p, len, bl, target);
}
-
- aFree(buf);
+ aFree(p);
#endif
}
static void clif_hat_effect_single(struct block_list *bl, uint16 effectId, bool enable){
-#if PACKETVER >= 20150422
- unsigned char buf[13];
-
+#if PACKETVER_MAIN_NUM >= 20150507 || PACKETVER_RE_NUM >= 20150429 || defined(PACKETVER_ZERO)
nullpo_retv(bl);
- WBUFW(buf,0) = 0xa3b;
- WBUFW(buf,2) = 13;
- WBUFL(buf,4) = bl->id;
- WBUFB(buf,8) = enable;
- WBUFL(buf,9) = effectId;
+ const int len = sizeof(struct PACKET_ZC_HAT_EFFECT) + 2;
+ struct PACKET_ZC_HAT_EFFECT *p = aMalloc(len);
- clif->send(buf, 13, bl, AREA);
+ p->packetType = HEADER_ZC_HAT_EFFECT;
+ p->packetLength = len;
+ p->aid = bl->id;
+ p->status = enable;
+ p->effects[0] = effectId;
+
+ clif->send(p, len, bl, AREA);
+ aFree(p);
#endif
}
@@ -22066,8 +22616,10 @@ static time_t clif_attendance_getendtime(void)
static void clif_parse_open_ui_request(int fd, struct map_session_data *sd) __attribute__((nonnull(2)));
static void clif_parse_open_ui_request(int fd, struct map_session_data *sd)
{
- const struct PACKET_CZ_OPEN_UI *p = RP2PTR(fd);
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+ const struct PACKET_CZ_OPEN_UI *p = RP2PTR(fd);
clif->open_ui(sd, p->UIType);
}
@@ -22138,6 +22690,8 @@ static void clif_parse_attendance_reward_request(int fd, struct map_session_data
static void clif_parse_attendance_reward_request(int fd, struct map_session_data *sd)
{
#if PACKETVER_RE_NUM >= 20180307 || PACKETVER_MAIN_NUM >= 20180404 || PACKETVER_ZERO_NUM >= 20180411
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
struct rodex_message msg = { 0 };
struct attendance_entry *entry;
@@ -22219,6 +22773,9 @@ static void clif_parse_private_airship_request(int fd, struct map_session_data *
static void clif_parse_private_airship_request(int fd, struct map_session_data *sd)
{
#if PACKETVER_RE_NUM >= 20180321 || PACKETVER_MAIN_NUM >= 20180620 || defined(PACKETVER_ZERO)
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
char evname[EVENT_NAME_LENGTH];
struct event_data *ev = NULL;
const struct PACKET_CZ_PRIVATE_AIRSHIP_REQUEST *p = RP2PTR(fd);
@@ -22260,6 +22817,9 @@ static void clif_private_airship_response(struct map_session_data *sd, uint32 fl
static void clif_parse_cz_req_style_change(int fd, struct map_session_data *sd) __attribute__((nonnull(2)));
static void clif_parse_cz_req_style_change(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
const struct PACKET_CZ_REQ_STYLE_CHANGE *p = RP2PTR(fd);
if (p->HeadStyle > 0)
@@ -22281,6 +22841,9 @@ static void clif_parse_cz_req_style_change(int fd, struct map_session_data *sd)
static void clif_parse_cz_req_style_change2(int fd, struct map_session_data *sd) __attribute__((nonnull(2)));
static void clif_parse_cz_req_style_change2(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
const struct PACKET_CZ_REQ_STYLE_CHANGE2 *p = RP2PTR(fd);
if (p->HeadStyle > 0)
@@ -22343,6 +22906,9 @@ static void clif_parse_changeDress(int fd, struct map_session_data *sd) __attrib
/// 0ae8 <packet len>.W
static void clif_parse_changeDress(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
const char commandname[] = "changedress";
char command[sizeof commandname + 3] = ""; // '@' command + ' ' + NUL
@@ -22367,6 +22933,9 @@ static void clif_party_dead_notification(struct map_session_data *sd)
static void clif_parse_memorial_dungeon_command(int fd, struct map_session_data *sd) __attribute__((nonnull(2)));
static void clif_parse_memorial_dungeon_command(int fd, struct map_session_data *sd)
{
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
const struct PACKET_CZ_MEMORIALDUNGEON_COMMAND *p = RP2PTR(fd);
switch (p->command) {
@@ -22407,6 +22976,9 @@ static void clif_parse_cameraInfo(int fd, struct map_session_data *sd) __attribu
static void clif_parse_cameraInfo(int fd, struct map_session_data *sd)
{
#if PACKETVER >= 20160525
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
const struct PACKET_CZ_CAMERA_INFO *const p = RFIFOP(fd, 0);
char command[100];
if (p->action == 1) {
@@ -22495,6 +23067,9 @@ static void clif_parse_NPCBarterPurchase(int fd, struct map_session_data *sd) __
static void clif_parse_NPCBarterPurchase(int fd, struct map_session_data *sd)
{
#if PACKETVER_MAIN_NUM >= 20190116 || PACKETVER_RE_NUM >= 20190116 || PACKETVER_ZERO_NUM >= 20181226
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
const struct PACKET_CZ_NPC_BARTER_PURCHASE *p = RP2PTR(fd);
int count = (p->packetLength - sizeof(struct PACKET_CZ_NPC_BARTER_PURCHASE)) / sizeof p->list[0];
struct barteritemlist item_list;
@@ -22598,6 +23173,9 @@ static void clif_parse_AddItemRefineryUI(int fd, struct map_session_data *sd) __
static void clif_parse_AddItemRefineryUI(int fd, struct map_session_data *sd)
{
#if PACKETVER_MAIN_NUM >= 20161005 || PACKETVER_RE_NUM >= 20161005 || defined(PACKETVER_ZERO)
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
if (battle_config.enable_refinery_ui == 0)
return;
@@ -22639,6 +23217,9 @@ static void clif_parse_RefineryUIRefine(int fd, struct map_session_data *sd) __a
static void clif_parse_RefineryUIRefine(int fd, struct map_session_data *sd)
{
#if PACKETVER_MAIN_NUM >= 20161005 || PACKETVER_RE_NUM >= 20161005 || defined(PACKETVER_ZERO)
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
if (battle_config.enable_refinery_ui == 0)
return;
@@ -22651,6 +23232,9 @@ static void clif_parse_RefineryUIClose(int fd, struct map_session_data *sd) __at
static void clif_parse_RefineryUIClose(int fd, struct map_session_data *sd)
{
#if PACKETVER_MAIN_NUM >= 20161130 || PACKETVER_RE_NUM >= 20161109 || defined(PACKETVER_ZERO)
+ if (sd->state.trading || pc_isdead(sd) || pc_isvending(sd))
+ return;
+
if (battle_config.enable_refinery_ui == 0)
return;
@@ -22676,6 +23260,181 @@ static void clif_announce_refine_status(struct map_session_data *sd, int item_id
#endif
}
+static void clif_parse_GuildCastleTeleportRequest(int fd, struct map_session_data *sd) __attribute__((nonnull(2)));
+static void clif_parse_GuildCastleTeleportRequest(int fd, struct map_session_data *sd)
+{
+#if PACKETVER_MAIN_NUM >= 20190522 || PACKETVER_RE_NUM >= 20190522 || PACKETVER_ZERO_NUM >= 20190515
+ const struct PACKET_CZ_CASTLE_TELEPORT_REQUEST *p = RFIFO2PTR(fd);
+ struct guild *g = sd->guild;
+
+ if (g == NULL)
+ return;
+
+ struct guild_castle *gc = guild->castle_search(p->castle_id);
+ if (gc == NULL)
+ return;
+ if (gc->enable_client_warp == false)
+ return;
+ if (gc->guild_id != g->guild_id)
+ return;
+
+ if (map->list[sd->bl.m].flag.gvg_castle == 1)
+ return;
+
+ int zeny = gc->client_warp.zeny;
+ if (gc->siege_type == SIEGE_TYPE_FE && map->agit_flag == 1) {
+ zeny = gc->client_warp.zeny_siege;
+ } else if (gc->siege_type == SIEGE_TYPE_SE && map->agit2_flag == 1) {
+ zeny = gc->client_warp.zeny_siege;
+ } else if (gc->siege_type == SIEGE_TYPE_TE) {
+ clif->guild_castleteleport_res(sd, SIEGE_TP_INVALID_MODE);
+ return;
+ }
+
+ if (sd->status.zeny < zeny) {
+ clif->guild_castleteleport_res(sd, SIEGE_TP_NOT_ENOUGH_ZENY);
+ return;
+ }
+ sd->status.zeny -= zeny;
+ clif->updatestatus(sd, SP_ZENY);
+ pc->setpos(sd, gc->mapindex, gc->client_warp.x, gc->client_warp.y, CLR_OUTSIGHT);
+#endif
+}
+
+static void clif_guild_castleteleport_res(struct map_session_data *sd, enum siege_teleport_result result)
+{
+#if PACKETVER_MAIN_NUM >= 20190731 || PACKETVER_RE_NUM >= 20190717 || PACKETVER_ZERO_NUM >= 20190814
+
+ nullpo_retv(sd);
+
+ struct PACKET_ZC_CASTLE_TELEPORT_RESPONSE p = { 0 };
+ p.packetType = HEADER_ZC_CASTLE_TELEPORT_RESPONSE;
+ p.result = (int16)result;
+ clif->send(&p, sizeof(p), &sd->bl, SELF);
+#endif
+}
+static void clif_parse_GuildCastleInfoRequest(int fd, struct map_session_data *sd) __attribute__((nonnull(2)));
+static void clif_parse_GuildCastleInfoRequest(int fd, struct map_session_data *sd)
+{
+#if PACKETVER_MAIN_NUM >= 20190522 || PACKETVER_RE_NUM >= 20190522 || PACKETVER_ZERO_NUM >= 20190515
+ const struct PACKET_CZ_CASTLE_INFO_REQUEST *p = RFIFO2PTR(fd);
+ struct guild *g = sd->guild;
+
+ if (g == NULL)
+ return;
+
+ struct guild_castle *gc = guild->castle_search(p->castle_id);
+ if (gc == NULL)
+ return;
+ if (gc->guild_id != g->guild_id)
+ return;
+ clif->guild_castleinfo(sd, gc);
+#endif
+}
+
+static bool clif_lapineDdukDdak_open(struct map_session_data *sd, int item_id)
+{
+#if PACKETVER_MAIN_NUM >= 20160601 || PACKETVER_RE_NUM >= 20160525 || defined(PACKETVER_ZERO)
+ nullpo_retr(false, sd);
+ nullpo_retr(false, itemdb->exists(item_id));
+ struct PACKET_ZC_LAPINEDDUKDDAK_OPEN p;
+
+ p.packetType = HEADER_ZC_LAPINEDDUKDDAK_OPEN;
+ p.itemId = item_id;
+ clif->send(&p, sizeof(p), &sd->bl, SELF);
+
+ sd->state.lapine_ui = 1;
+ return true;
+#else
+ return false;
+#endif // PACKETVER_MAIN_NUM >= 20160601 || PACKETVER_RE_NUM >= 20160525 || defined(PACKETVER_ZERO)
+}
+
+static bool clif_lapineDdukDdak_result(struct map_session_data *sd, enum lapineddukddak_result result)
+{
+#if PACKETVER_MAIN_NUM >= 20160601 || PACKETVER_RE_NUM >= 20160525 || defined(PACKETVER_ZERO)
+ nullpo_retr(false, sd);
+ struct PACKET_ZC_LAPINEDDUKDDAK_RESULT p;
+
+ p.packetType = HEADER_ZC_LAPINEDDUKDDAK_RESULT;
+ p.result = result;
+ clif->send(&p, sizeof(p), &sd->bl, SELF);
+ return true;
+#else
+ return false;
+#endif // PACKETVER_MAIN_NUM >= 20160601 || PACKETVER_RE_NUM >= 20160525 || defined(PACKETVER_ZERO)
+}
+
+static void clif_parse_lapineDdukDdak_ack(int fd, struct map_session_data *sd) __attribute__((nonnull (2)));
+static void clif_parse_lapineDdukDdak_ack(int fd, struct map_session_data *sd)
+{
+#if PACKETVER >= 20160302
+ const struct PACKET_CZ_LAPINEDDUKDDAK_ACK *p = RP2PTR(fd);
+ struct item_data *it = itemdb->exists(p->itemId);
+
+ if (it == NULL || it->lapineddukddak == NULL)
+ return;
+ if (pc_cant_act(sd))
+ return;
+ if (pc->search_inventory(sd, it->nameid) == INDEX_NOT_FOUND)
+ return;
+
+ if (((p->packetLength - sizeof(struct PACKET_CZ_LAPINEDDUKDDAK_ACK)) / sizeof(struct PACKET_CZ_LAPINEDDUKDDAK_ACK_sub)) != it->lapineddukddak->NeedCount)
+ return;
+
+ for (int i = 0; i < it->lapineddukddak->NeedCount; ++i) {
+ int16 idx = p->items[i].index - 2;
+ Assert_retv(idx >= 0 && idx < sd->status.inventorySize);
+
+ struct item itr = sd->status.inventory[idx];
+ int j = 0;
+ for (j = 0; j < VECTOR_LENGTH(it->lapineddukddak->SourceItems); ++j) {
+ if (itr.nameid == VECTOR_INDEX(it->lapineddukddak->SourceItems, j).id) {
+ // Validate that the amount sent in the packet is matching the database
+ if (p->items[i].count != VECTOR_INDEX(it->lapineddukddak->SourceItems, j).amount) {
+ clif->lapineDdukDdak_result(sd, LAPINEDDKUKDDAK_INSUFFICIENT_AMOUNT);
+ return;
+ }
+
+ // Validate that the player have enough of the item
+ if (itr.amount < VECTOR_INDEX(it->lapineddukddak->SourceItems, j).amount) {
+ clif->lapineDdukDdak_result(sd, LAPINEDDKUKDDAK_INSUFFICIENT_AMOUNT);
+ return;
+ }
+
+ // Validate refine rate requirement
+ if ((itemdb_type(itr.nameid) == IT_ARMOR || itemdb_type(itr.nameid) == IT_WEAPON)
+ && (itr.refine < it->lapineddukddak->NeedRefineMin || itr.refine > it->lapineddukddak->NeedRefineMax))
+ return;
+
+ // All requirements are met, move to the next one
+ break;
+ }
+ }
+ // The item is not in sources list
+ if (j == VECTOR_LENGTH(it->lapineddukddak->SourceItems)) {
+ clif->lapineDdukDdak_result(sd, LAPINEDDKUKDDAK_INVALID_ITEM);
+ return;
+ }
+ }
+
+ for (int i = 0; i < it->lapineddukddak->NeedCount; ++i)
+ pc->delitem(sd, p->items[i].index - 2, p->items[i].count, 0, DELITEM_NORMAL, LOG_TYPE_SCRIPT);
+ if (it->lapineddukddak->script != NULL)
+ script->run_item_lapineddukddak_script(sd, it, npc->fake_nd->bl.id);
+ clif->lapineDdukDdak_result(sd, LAPINEDDKUKDDAK_SUCCESS);
+ return;
+#endif // PACKETVER >= 20160302
+}
+
+static void clif_parse_lapineDdukDdak_close(int fd, struct map_session_data *sd) __attribute__((nonnull (2)));
+static void clif_parse_lapineDdukDdak_close(int fd, struct map_session_data *sd)
+{
+#if PACKETVER >= 20160504
+ sd->state.lapine_ui = 0;
+#endif // PACKETVER >= 20160504
+}
+
/*==========================================
* Main client packet processing function
*------------------------------------------*/
@@ -23119,6 +23878,8 @@ void clif_defaults(void)
clif->fame_alchemist = clif_fame_alchemist;
clif->fame_taekwon = clif_fame_taekwon;
clif->ranklist = clif_ranklist;
+ clif->ranklist_sub = clif_ranklist_sub;
+ clif->ranklist_sub2 = clif_ranklist_sub2;
clif->pRanklist = clif_parse_ranklist;
clif->update_rankingpoint = clif_update_rankingpoint;
clif->hotkeys = clif_hotkeys_send;
@@ -23334,6 +24095,7 @@ void clif_defaults(void)
clif->skillinfo = clif_skillinfo;
clif->addskill = clif_addskill;
clif->deleteskill = clif_deleteskill;
+ clif->playerSkillToPacket = clif_playerSkillToPacket;
/* party-specific */
clif->party_created = clif_party_created;
clif->party_member_info = clif_party_member_info;
@@ -23357,6 +24119,8 @@ void clif_defaults(void)
clif->guild_masterormember = clif_guild_masterormember;
clif->guild_basicinfo = clif_guild_basicinfo;
clif->guild_allianceinfo = clif_guild_allianceinfo;
+ clif->guild_castlelist = clif_guild_castlelist;
+ clif->guild_castleinfo = clif_guild_castleinfo;
clif->guild_memberlist = clif_guild_memberlist;
clif->guild_skillinfo = clif_guild_skillinfo;
clif->guild_send_onlineinfo = clif_guild_send_onlineinfo;
@@ -23898,4 +24662,11 @@ void clif_defaults(void)
clif->pRefineryUIClose = clif_parse_RefineryUIClose;
clif->pRefineryUIRefine = clif_parse_RefineryUIRefine;
clif->announce_refine_status = clif_announce_refine_status;
+ clif->pGuildCastleTeleportRequest = clif_parse_GuildCastleTeleportRequest;
+ clif->pGuildCastleInfoRequest = clif_parse_GuildCastleInfoRequest;
+ clif->guild_castleteleport_res = clif_guild_castleteleport_res;
+ clif->lapineDdukDdak_open = clif_lapineDdukDdak_open;
+ clif->lapineDdukDdak_result = clif_lapineDdukDdak_result;
+ clif->plapineDdukDdak_ack = clif_parse_lapineDdukDdak_ack;
+ clif->plapineDdukDdak_close = clif_parse_lapineDdukDdak_close;
}
diff --git a/src/map/clif.h b/src/map/clif.h
index 5c28f80dd..4bc3abdeb 100644
--- a/src/map/clif.h
+++ b/src/map/clif.h
@@ -56,7 +56,10 @@ struct unit_data;
struct view_data;
struct achievement_data; // map/achievement.h
struct s_refine_requirement;
+struct PACKET_ZC_ACK_RANKING_sub;
+struct SKILLDATA;
+enum battle_dmg_type;
enum clif_messages;
enum rodex_add_item;
enum rodex_get_zeny;
@@ -630,6 +633,13 @@ enum inventory_type {
INVTYPE_GUILD_STORAGE = 3,
};
+/** Guild Teleport Results */
+enum siege_teleport_result {
+ SIEGE_TP_SUCCESS = 0x0,
+ SIEGE_TP_NOT_ENOUGH_ZENY = 0x1,
+ SIEGE_TP_INVALID_MODE = 0x2
+};
+
/**
* Structures
**/
@@ -697,6 +707,32 @@ enum expand_inventory_result {
EXPAND_INVENTORY_RESULT_MAX_SIZE = 4
};
+#if PACKETVER_RE_NUM >= 20190807 || PACKETVER_ZERO_NUM >= 20190814
+enum market_buy_result {
+ MARKET_BUY_RESULT_ERROR = 0xffff, // -1
+ MARKET_BUY_RESULT_SUCCESS = 0,
+ MARKET_BUY_RESULT_NO_ZENY = 1,
+ MARKET_BUY_RESULT_OVER_WEIGHT = 2,
+ MARKET_BUY_RESULT_OUT_OF_SPACE = 3,
+ MARKET_BUY_RESULT_AMOUNT_TOO_BIG = 9
+};
+#else
+enum market_buy_result {
+ MARKET_BUY_RESULT_ERROR = 0,
+ MARKET_BUY_RESULT_SUCCESS = 1,
+ MARKET_BUY_RESULT_NO_ZENY = 0,
+ MARKET_BUY_RESULT_OVER_WEIGHT = 0,
+ MARKET_BUY_RESULT_OUT_OF_SPACE = 0,
+ MARKET_BUY_RESULT_AMOUNT_TOO_BIG = 0
+};
+#endif
+
+enum lapineddukddak_result {
+ LAPINEDDKUKDDAK_SUCCESS = 0,
+ LAPINEDDKUKDDAK_INSUFFICIENT_AMOUNT = 5,
+ LAPINEDDKUKDDAK_INVALID_ITEM = 7,
+};
+
/**
* Clif.c Interface
**/
@@ -839,7 +875,7 @@ struct clif_interface {
void (*scriptclear) (struct map_session_data *sd, int npcid);
/* client-user-interface-related */
void (*viewpoint) (struct map_session_data *sd, int npc_id, int type, int x, int y, int id, int color);
- int (*damage) (struct block_list* src, struct block_list* dst, int sdelay, int ddelay, int64 damage, short div, unsigned char type, int64 damage2);
+ int (*damage) (struct block_list* src, struct block_list* dst, int sdelay, int ddelay, int64 damage, short div, enum battle_dmg_type type, int64 damage2);
void (*sitting) (struct block_list* bl);
void (*standing) (struct block_list* bl);
void (*arrow_create_list) (struct map_session_data *sd);
@@ -849,6 +885,8 @@ struct clif_interface {
void (*fame_alchemist) (struct map_session_data *sd, int points);
void (*fame_taekwon) (struct map_session_data *sd, int points);
void (*ranklist) (struct map_session_data *sd, enum fame_list_type type);
+ void (*ranklist_sub) (struct PACKET_ZC_ACK_RANKING_sub *ranks, enum fame_list_type type);
+ void (*ranklist_sub2) (uint32 *chars, uint32 *points, enum fame_list_type type);
void (*update_rankingpoint) (struct map_session_data *sd, enum fame_list_type type, int points);
void (*pRanklist) (int fd, struct map_session_data *sd);
void (*hotkeys) (struct map_session_data *sd, int tab);
@@ -963,7 +1001,7 @@ struct clif_interface {
void (*wedding_effect) (struct block_list *bl);
void (*divorced) (struct map_session_data* sd, const char* name);
void (*callpartner) (struct map_session_data *sd);
- int (*skill_damage) (struct block_list *src, struct block_list *dst, int64 tick, int sdelay, int ddelay, int64 damage, int div, uint16 skill_id, uint16 skill_lv, int type);
+ int (*skill_damage) (struct block_list *src, struct block_list *dst, int64 tick, int sdelay, int ddelay, int64 damage, int div, uint16 skill_id, uint16 skill_lv, enum battle_dmg_type type);
int (*skill_nodamage) (struct block_list *src,struct block_list *dst,uint16 skill_id,int heal,int fail);
void (*skill_poseffect) (struct block_list *src, uint16 skill_id, int val, int x, int y, int64 tick);
void (*skill_estimation) (struct map_session_data *sd,struct block_list *dst);
@@ -1065,6 +1103,7 @@ struct clif_interface {
void (*skillinfo) (struct map_session_data *sd,int skill_id, int inf);
void (*addskill) (struct map_session_data *sd, int id);
void (*deleteskill) (struct map_session_data *sd, int id);
+ void (*playerSkillToPacket) (struct map_session_data *sd, struct SKILLDATA *skillData, int skillId, int idx, bool newSkill);
/* party-specific */
void (*party_created) (struct map_session_data *sd,int result);
void (*party_member_info) (struct party_data *p, struct map_session_data *sd);
@@ -1088,6 +1127,8 @@ struct clif_interface {
void (*guild_masterormember) (struct map_session_data *sd);
void (*guild_basicinfo) (struct map_session_data *sd);
void (*guild_allianceinfo) (struct map_session_data *sd);
+ void (*guild_castlelist) (struct map_session_data *sd);
+ void (*guild_castleinfo) (struct map_session_data *sd, struct guild_castle *gc);
void (*guild_memberlist) (struct map_session_data *sd);
void (*guild_skillinfo) (struct map_session_data* sd);
void (*guild_send_onlineinfo) (struct map_session_data *sd); //[LuzZza]
@@ -1257,11 +1298,11 @@ struct clif_interface {
/* */
void (*notify_bounditem) (struct map_session_data *sd, unsigned short index);
/* */
- int (*delay_damage) (int64 tick, struct block_list *src, struct block_list *dst, int sdelay, int ddelay, int64 in_damage, short div, unsigned char type);
+ int (*delay_damage) (int64 tick, struct block_list *src, struct block_list *dst, int sdelay, int ddelay, int64 in_damage, short div, enum battle_dmg_type type);
int (*delay_damage_sub) (int tid, int64 tick, int id, intptr_t data);
/* NPC Market */
void (*npc_market_open) (struct map_session_data *sd, struct npc_data *nd);
- void (*npc_market_purchase_ack) (struct map_session_data *sd, const struct itemlist *item_list, unsigned char response);
+ void (*npc_market_purchase_ack) (struct map_session_data *sd, const struct itemlist *item_list, enum market_buy_result response);
/* */
bool (*parse_roulette_db) (void);
void (*roulette_generate_ack) (struct map_session_data *sd, enum GENERATE_ROULETTE_ACK result, short stage, short prizeIdx, int bonusItemID);
@@ -1621,6 +1662,13 @@ struct clif_interface {
void (*pRefineryUIClose) (int fd, struct map_session_data *sd);
void (*pRefineryUIRefine) (int fd, struct map_session_data *sd);
void (*announce_refine_status) (struct map_session_data *sd, int item_id, int refine_level, bool success, enum send_target target);
+ void (*pGuildCastleTeleportRequest) (int fd, struct map_session_data *sd);
+ void (*pGuildCastleInfoRequest) (int fd, struct map_session_data *sd);
+ void (*guild_castleteleport_res) (struct map_session_data *sd, enum siege_teleport_result result);
+ bool (*lapineDdukDdak_open) (struct map_session_data *sd, int item_id);
+ bool (*lapineDdukDdak_result) (struct map_session_data *sd, enum lapineddukddak_result result);
+ void (*plapineDdukDdak_ack) (int fd, struct map_session_data *sd);
+ void (*plapineDdukDdak_close) (int fd, struct map_session_data *sd);
};
#ifdef HERCULES_CORE
diff --git a/src/map/guild.c b/src/map/guild.c
index ae76b22a3..2faf60e2b 100644
--- a/src/map/guild.c
+++ b/src/map/guild.c
@@ -38,6 +38,7 @@
#include "map/storage.h"
#include "common/HPM.h"
#include "common/cbasetypes.h"
+#include "common/conf.h"
#include "common/ers.h"
#include "common/memmgr.h"
#include "common/mapindex.h"
@@ -147,26 +148,125 @@ static int guild_check_skill_require(struct guild *g, int id)
return 1;
}
-static bool guild_read_castledb(char *str[], int columns, int current)
-{// <castle id>,<map name>,<castle name>,<castle event>[,<reserved/unused switch flag>]
- struct guild_castle *gc;
- int index;
+static bool guild_read_castledb_libconfig(void)
+{
+ struct config_t castle_conf;
+ struct config_setting_t *castle_db = NULL, *it = NULL;
+ const char *config_filename = "db/castle_db.conf"; // FIXME hardcoded name
+ int i = 0;
+
+ if (libconfig->load_file(&castle_conf, config_filename) == 0)
+ return false;
- nullpo_retr(false, str);
- index = mapindex->name2id(str[1]);
- if (map->mapindex2mapid(index) < 0) // Map not found or on another map-server
+ if ((castle_db = libconfig->setting_get_member(castle_conf.root, "castle_db")) == NULL) {
+ libconfig->destroy(&castle_conf);
+ ShowError("guild_read_castledb_libconfig: can't read %s\n", config_filename);
return false;
+ }
+
+ while ((it = libconfig->setting_get_elem(castle_db, i++)) != NULL) {
+ guild->read_castledb_libconfig_sub(it, i - 1, config_filename);
+ }
+
+ libconfig->destroy(&castle_conf);
+ ShowStatus("Done reading '"CL_WHITE"%u"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", db_size(guild->castle_db), config_filename);
+ return true;
+}
+
+static bool guild_read_castledb_libconfig_sub(struct config_setting_t *it, int idx, const char *source)
+{
+ nullpo_ret(it);
+ nullpo_ret(source);
+ struct guild_castle *gc = NULL;
+ const char *name = NULL;
+ int i32 = 0;
CREATE(gc, struct guild_castle, 1);
- gc->castle_id = atoi(str[0]);
+
+ if (libconfig->setting_lookup_int(it, "CastleID", &i32) == CONFIG_FALSE) {
+ aFree(gc);
+ ShowWarning("guild_read_castledb_libconfig_sub: Invalid or missing CastleID (%d) in \"%s\", entry #%d, skipping.\n", i32, source, idx);
+ return false;
+ }
+ gc->castle_id = i32;
+
+ if (libconfig->setting_lookup_string(it, "MapName", &name) == CONFIG_FALSE) {
+ aFree(gc);
+ ShowWarning("guild_read_castledb_libconfig_sub: Invalid or missing MapName in \"%s\", entry #%d, skipping.\n", source, idx);
+ return false;
+ }
+ int index = mapindex->name2id(name);
+ if (map->mapindex2mapid(index) < 0) {
+ aFree(gc);
+ ShowWarning("guild_read_castledb_libconfig_sub: Invalid MapName (%s) in \"%s\", entry #%d, skipping.\n", name, source, idx);
+ return false;
+ }
gc->mapindex = index;
- safestrncpy(gc->castle_name, str[2], sizeof(gc->castle_name));
- safestrncpy(gc->castle_event, str[3], sizeof(gc->castle_event));
- idb_put(guild->castle_db,gc->castle_id,gc);
+ if (libconfig->setting_lookup_string(it, "CastleName", &name) == CONFIG_FALSE) {
+ aFree(gc);
+ ShowWarning("guild_read_castledb_libconfig_sub: Invalid CastleName in \"%s\", entry #%d, skipping.\n", source, idx);
+ return false;
+ }
+ safestrncpy(gc->castle_name, name, sizeof(gc->castle_name));
+
+ if (libconfig->setting_lookup_string(it, "OnGuildBreakEventName", &name) == CONFIG_FALSE){
+ aFree(gc);
+ ShowWarning("guild_read_castledb_libconfig_sub: Invalid OnGuildBreakEventName in \"%s\", entry #%d, skipping.\n", source, idx);
+ return false;
+ }
+ safestrncpy(gc->castle_event, name, sizeof(gc->castle_event));
+
+ if (itemdb->lookup_const(it, "SiegeType", &i32) && (i32 >= SIEGE_TYPE_MAX || i32 < 0)) {
+ ShowWarning("guild_read_castledb_libconfig_sub: Invalid SiegeType in \"%s\", entry #%d, defaulting to SIEGE_TYPE_FE.\n", source, idx);
+ gc->siege_type = SIEGE_TYPE_FE;
+ } else {
+ gc->siege_type = i32;
+ }
+
+ libconfig->setting_lookup_bool_real(it, "EnableClientWarp", &gc->enable_client_warp);
+ if (gc->enable_client_warp == true) {
+ struct config_setting_t *wd = libconfig->setting_get_member(it, "ClientWarp");
+ guild->read_castledb_libconfig_sub_warp(wd, source, gc);
+ }
+ idb_put(guild->castle_db, gc->castle_id, gc);
+ return true;
+}
- //intif->guild_castle_info(gc->castle_id);
+static bool guild_read_castledb_libconfig_sub_warp(struct config_setting_t *wd, const char *source, struct guild_castle *gc)
+{
+ nullpo_retr(false, wd);
+ nullpo_retr(false, gc);
+ nullpo_retr(false, source);
+
+ int64 i64 = 0;
+ struct config_setting_t *it = libconfig->setting_get_member(wd, "Position");
+ if (config_setting_is_list(it)) {
+ int m = map->mapindex2mapid(gc->mapindex);
+
+ gc->client_warp.x = libconfig->setting_get_int_elem(it, 0);
+ gc->client_warp.y = libconfig->setting_get_int_elem(it, 1);
+ if (gc->client_warp.x < 0 || gc->client_warp.x >= map->list[m].xs || gc->client_warp.y < 0 || gc->client_warp.y >= map->list[m].ys) {
+ ShowWarning("guild_read_castledb_libconfig_sub_warp: Invalid Position in \"%s\", for castle (%d).\n", source, gc->castle_id);
+ return false;
+ }
+ } else {
+ ShowWarning("guild_read_castledb_libconfig_sub_warp: Invalid format for Position in \"%s\", for castle (%d).\n", source, gc->castle_id);
+ return false;
+ }
+ if (libconfig->setting_lookup_int64(wd, "ZenyCost", &i64)) {
+ if (i64 > MAX_ZENY) {
+ ShowWarning("guild_read_castledb_libconfig_sub_warp: ZenyCost is too big in \"%s\", for castle (%d), capping to MAX_ZENY.\n", source, gc->castle_id);
+ }
+ gc->client_warp.zeny = cap_value((int)i64, 0, MAX_ZENY);
+ }
+ if (libconfig->setting_lookup_int64(wd, "ZenyCostSiegeTime", &i64)) {
+ if (i64 > MAX_ZENY) {
+ ShowWarning("guild_read_castledb_libconfig_sub_warp: ZenyCostSiegeTime is too big in \"%s\", for castle (%d), capping to MAX_ZENY.\n", source, gc->castle_id);
+ }
+ gc->client_warp.zeny_siege = cap_value((int)i64, 0, MAX_ZENY);
+ }
return true;
}
@@ -554,7 +654,7 @@ static int guild_recv_info(const struct guild *sg)
before=*sg;
//Perform the check on the user because the first load
guild->check_member(sg);
- if ((sd = map->nick2sd(sg->master)) != NULL) {
+ if ((sd = map->nick2sd(sg->master, false)) != NULL) {
//If the guild master is online the first time the guild_info is received,
//that means he was the first to join, so apply guild skill blocking here.
if( battle_config.guild_skill_relog_delay == 1)
@@ -1086,13 +1186,14 @@ static int guild_recv_memberinfoshort(int guild_id, int account_id, int char_id,
*---------------------------------------------------*/
static int guild_send_message(struct map_session_data *sd, const char *mes)
{
- int len = (int)strlen(mes);
nullpo_ret(sd);
- if (sd->status.guild_id == 0)
+ if (sd->status.guild_id == 0 || sd->guild == NULL)
return 0;
- intif->guild_message(sd->status.guild_id, sd->status.account_id, mes, len);
- guild->recv_message(sd->status.guild_id, sd->status.account_id, mes, len);
+
+ int len = (int)strlen(mes);
+
+ clif->guild_message(sd->guild, sd->status.account_id, mes, len);
// Chat logging type 'G' / Guild Chat
logs->chat(LOG_CHAT_GUILD, sd->status.guild_id, sd->status.char_id, sd->status.account_id, mapindex_id2name(sd->mapindex), sd->bl.x, sd->bl.y, NULL, mes);
@@ -1101,18 +1202,6 @@ static int guild_send_message(struct map_session_data *sd, const char *mes)
}
/*====================================================
- * Guild receive a message, will be displayed to whole member
- *---------------------------------------------------*/
-static int guild_recv_message(int guild_id, int account_id, const char *mes, int len)
-{
- struct guild *g;
- if( (g=guild->search(guild_id))==NULL)
- return 0;
- clif->guild_message(g,account_id,mes,len);
- return 0;
-}
-
-/*====================================================
* Member changing position in guild
*---------------------------------------------------*/
static int guild_change_memberposition(int guild_id, int account_id, int char_id, short idx)
@@ -2321,8 +2410,7 @@ static void do_init_guild(bool minimal)
guild->infoevent_db = idb_alloc(DB_OPT_BASE);
guild->expcache_ers = ers_new(sizeof(struct guild_expcache),"guild.c::expcache_ers",ERS_OPT_NONE);
- sv->readdb(map->db_path, "castle_db.txt", ',', 4, 5, -1, guild->read_castledb);
-
+ guild->read_castledb_libconfig();
sv->readdb(map->db_path, "guild_skill_tree.txt", ',', 2+MAX_GUILD_SKILL_REQUIRE*2, 2+MAX_GUILD_SKILL_REQUIRE*2, -1, guild->read_guildskill_tree_db); //guild skill tree [Komurka]
timer->add_func_list(guild->payexp_timer,"guild_payexp_timer");
@@ -2430,7 +2518,6 @@ void guild_defaults(void)
guild->change_emblem = guild_change_emblem;
guild->emblem_changed = guild_emblem_changed;
guild->send_message = guild_send_message;
- guild->recv_message = guild_recv_message;
guild->send_dot_remove = guild_send_dot_remove;
guild->skillupack = guild_skillupack;
guild->dobreak = guild_break;
@@ -2457,7 +2544,9 @@ void guild_defaults(void)
guild->payexp_timer = guild_payexp_timer;
guild->sd_check = guild_sd_check;
guild->read_guildskill_tree_db = guild_read_guildskill_tree_db;
- guild->read_castledb = guild_read_castledb;
+ guild->read_castledb_libconfig = guild_read_castledb_libconfig;
+ guild->read_castledb_libconfig_sub = guild_read_castledb_libconfig_sub;
+ guild->read_castledb_libconfig_sub_warp = guild_read_castledb_libconfig_sub_warp;
guild->payexp_timer_sub = guild_payexp_timer_sub;
guild->send_xy_timer_sub = guild_send_xy_timer_sub;
guild->send_xy_timer = guild_send_xy_timer;
diff --git a/src/map/guild.h b/src/map/guild.h
index 396cbda86..41f52711d 100644
--- a/src/map/guild.h
+++ b/src/map/guild.h
@@ -136,7 +136,6 @@ struct guild_interface {
int (*change_emblem) (struct map_session_data *sd,int len,const char *data);
int (*emblem_changed) (int len,int guild_id,int emblem_id,const char *data);
int (*send_message) (struct map_session_data *sd, const char *mes);
- int (*recv_message) (int guild_id,int account_id,const char *mes,int len);
int (*send_dot_remove) (struct map_session_data *sd);
int (*skillupack) (int guild_id,uint16 skill_id,int account_id);
int (*dobreak) (struct map_session_data *sd, const char *name);
@@ -165,7 +164,9 @@ struct guild_interface {
int (*payexp_timer) (int tid, int64 tick, int id, intptr_t data);
struct map_session_data *(*sd_check) (int guild_id, int account_id, int char_id);
bool (*read_guildskill_tree_db) (char* split[], int columns, int current);
- bool (*read_castledb) (char* str[], int columns, int current);
+ bool (*read_castledb_libconfig) (void);
+ bool (*read_castledb_libconfig_sub) (struct config_setting_t *it, int idx, const char *source);
+ bool (*read_castledb_libconfig_sub_warp) (struct config_setting_t *wd, const char *source, struct guild_castle *gc);
int (*payexp_timer_sub) (union DBKey key, struct DBData *data, va_list ap);
int (*send_xy_timer_sub) (union DBKey key, struct DBData *data, va_list ap);
int (*send_xy_timer) (int tid, int64 tick, int id, intptr_t data);
diff --git a/src/map/homunculus.c b/src/map/homunculus.c
index f3a4c559a..fbb94334c 100644
--- a/src/map/homunculus.c
+++ b/src/map/homunculus.c
@@ -172,7 +172,7 @@ static int homunculus_dead(struct homun_data *hd)
}
//Vaporize a character's homun. If flag, HP needs to be 80% or above.
-static int homunculus_vaporize(struct map_session_data *sd, enum homun_state flag)
+static int homunculus_vaporize(struct map_session_data *sd, enum homun_state state, bool force)
{
struct homun_data *hd;
@@ -185,13 +185,13 @@ static int homunculus_vaporize(struct map_session_data *sd, enum homun_state fla
if (status->isdead(&hd->bl))
return 0; //Can't vaporize a dead homun.
- if (flag == HOM_ST_REST && get_percentage(hd->battle_status.hp, hd->battle_status.max_hp) < 80)
+ if (!force && get_percentage(hd->battle_status.hp, hd->battle_status.max_hp) < 80)
return 0;
hd->regen.state.block = 3; //Block regen while vaporized.
//Delete timers when vaporized.
homun->hunger_timer_delete(hd);
- hd->homunculus.vaporize = flag;
+ hd->homunculus.vaporize = state;
if(battle_config.hom_setting&0x40)
memset(hd->blockskill, 0, sizeof(hd->blockskill));
clif->hominfo(sd, sd->hd, 0);
@@ -258,7 +258,7 @@ static int homunculus_calc_skilltree(struct homun_data *hd, int flag_evolve)
for( i = 0; i < MAX_SKILL_TREE && ( id = homun->dbs->skill_tree[c][i].id ) > 0; i++ ) {
if( hd->homunculus.hskill[ id - HM_SKILLBASE ].id )
continue; //Skill already known.
- j = ( flag_evolve ) ? 10 : hd->homunculus.intimacy;
+ j = ( flag_evolve ) ? 1000 : hd->homunculus.intimacy;
if( j < homun->dbs->skill_tree[c][i].intimacylv )
continue;
if(!battle_config.skillfree) {
@@ -401,7 +401,7 @@ static bool homunculus_levelup(struct homun_data *hd)
if ( battle_config.homunculus_show_growth ) {
char output[256] ;
sprintf(output,
- "Growth: hp:%d sp:%d str(%.2f) agi(%.2f) vit(%.2f) int(%.2f) dex(%.2f) luk(%.2f) ",
+ msg_sd(hd->master, 892), // Growth: hp:%d sp:%d str(%.2f) agi(%.2f) vit(%.2f) int(%.2f) dex(%.2f) luk(%.2f)
growth_max_hp, growth_max_sp,
growth_str/10.0, growth_agi/10.0, growth_vit/10.0,
growth_int/10.0, growth_dex/10.0, growth_luk/10.0);
@@ -525,6 +525,21 @@ static bool homunculus_mutate(struct homun_data *hd, int homun_id)
return true;
}
+static int homunculus_gainexp_real(struct homun_data *hd, unsigned int exp)
+{
+ nullpo_ret(hd);
+ nullpo_ret(hd->master);
+
+ hd->homunculus.exp += exp;
+
+ if (hd->master->state.showexp && hd->exp_next > 0) {
+ char output[256];
+ sprintf(output, msg_fd(hd->master->fd, 449), exp, ((float)exp / (float)hd->exp_next * (float)100));
+ clif_disp_onlyself(hd->master, output);
+ }
+ return 1;
+}
+
static int homunculus_gainexp(struct homun_data *hd, unsigned int exp)
{
enum homun_type htype;
@@ -550,10 +565,10 @@ static int homunculus_gainexp(struct homun_data *hd, unsigned int exp)
break;
}
- hd->homunculus.exp += exp;
+ homun->gainexp_real(hd, exp);
- if(hd->homunculus.exp < hd->exp_next) {
- clif->hominfo(hd->master,hd,0);
+ if (hd->homunculus.exp < hd->exp_next) {
+ clif->hominfo(hd->master, hd, 0);
return 0;
}
@@ -820,7 +835,7 @@ static int homunculus_db_search(int key, int type)
* @param hom The homunculus source data.
* @retval false in case of errors.
*/
-static bool homunculus_create(struct map_session_data *sd, const struct s_homunculus *hom)
+static bool homunculus_create(struct map_session_data *sd, const struct s_homunculus *hom, bool is_new)
{
struct homun_data *hd;
int i = 0;
@@ -864,7 +879,9 @@ static bool homunculus_create(struct map_session_data *sd, const struct s_homunc
map->addiddb(&hd->bl);
status_calc_homunculus(hd,SCO_FIRST);
- status_percent_heal(&hd->bl, 100, 100);
+ if (is_new) {
+ status_percent_heal(&hd->bl, 100, 100);
+ }
hd->hungry_timer = INVALID_TIMER;
return true;
@@ -921,6 +938,7 @@ static bool homunculus_recv_data(int account_id, const struct s_homunculus *sh,
{
struct map_session_data *sd;
struct homun_data *hd;
+ bool is_new = false;
nullpo_retr(false, sh);
@@ -936,15 +954,17 @@ static bool homunculus_recv_data(int account_id, const struct s_homunculus *sh,
if (sd->status.char_id != sh->char_id && sd->status.hom_id != sh->hom_id)
return false;
- if (sd->status.hom_id == 0) //Hom just created.
+ if (sd->status.hom_id == 0) { // Hom just created.
sd->status.hom_id = sh->hom_id;
+ is_new = true;
+ }
if (sd->hd != NULL) {
//uh? Overwrite the data.
memcpy(&sd->hd->homunculus, sh, sizeof sd->hd->homunculus);
sd->hd->homunculus.char_id = sd->status.char_id; // Correct char id if necessary.
} else {
- homun->create(sd, sh);
+ homun->create(sd, sh, is_new);
}
hd = sd->hd;
@@ -1306,7 +1326,7 @@ static bool homunculus_read_skill_db_sub(char *split[], int columns, int current
homun->dbs->skill_tree[classid][j].need[k].lv = atoi(split[3+k*2+minJobLevelPresent+1]);
}
- homun->dbs->skill_tree[classid][j].intimacylv = atoi(split[13+minJobLevelPresent]);
+ homun->dbs->skill_tree[classid][j].intimacylv = atoi(split[13+minJobLevelPresent]) * 100;
return true;
}
@@ -1369,7 +1389,7 @@ static void homunculus_exp_db_read(void)
homun->dbs->exptable[MAX_LEVEL - 1] = 0;
}
fclose(fp);
- ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' levels in '"CL_WHITE"%s"CL_RESET"'.\n", j, filename[i]);
+ ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' levels in '"CL_WHITE"%s/%s"CL_RESET"'.\n", j, map->db_path, filename[i]);
}
}
@@ -1433,6 +1453,7 @@ void homunculus_defaults(void)
homun->evolve = homunculus_evolve;
homun->mutate = homunculus_mutate;
homun->gainexp = homunculus_gainexp;
+ homun->gainexp_real = homunculus_gainexp_real;
homun->add_intimacy = homunculus_add_intimacy;
homun->consume_intimacy = homunculus_consume_intimacy;
homun->healed = homunculus_healed;
diff --git a/src/map/homunculus.h b/src/map/homunculus.h
index 745c7cd84..2914a26cc 100644
--- a/src/map/homunculus.h
+++ b/src/map/homunculus.h
@@ -133,7 +133,7 @@ struct homun_skill_tree_entry {
short id;
unsigned char max;
unsigned char joblv;
- short intimacylv;
+ int intimacylv;
struct {
short id;
unsigned char lv;
@@ -167,7 +167,7 @@ struct homunculus_interface {
enum homun_type (*class2type) (int class_);
void (*damaged) (struct homun_data *hd);
int (*dead) (struct homun_data *hd);
- int (*vaporize) (struct map_session_data *sd, enum homun_state flag);
+ int (*vaporize) (struct map_session_data *sd, enum homun_state state, bool force);
int (*delete) (struct homun_data *hd, int emote);
int (*checkskill) (struct homun_data *hd, uint16 skill_id);
int (*calc_skilltree) (struct homun_data *hd, int flag_evolve);
@@ -178,6 +178,7 @@ struct homunculus_interface {
bool (*evolve) (struct homun_data *hd);
bool (*mutate) (struct homun_data *hd, int homun_id);
int (*gainexp) (struct homun_data *hd, unsigned int exp);
+ int (*gainexp_real) (struct homun_data *hd, unsigned int exp);
unsigned int (*add_intimacy) (struct homun_data * hd, unsigned int value);
unsigned int (*consume_intimacy) (struct homun_data *hd, unsigned int value);
void (*healed) (struct homun_data *hd);
@@ -189,7 +190,7 @@ struct homunculus_interface {
int (*change_name) (struct map_session_data *sd, const char *name);
bool (*change_name_ack) (struct map_session_data *sd, const char *name, int flag);
int (*db_search) (int key,int type);
- bool (*create) (struct map_session_data *sd, const struct s_homunculus *hom);
+ bool (*create) (struct map_session_data *sd, const struct s_homunculus *hom, bool is_new);
void (*init_timers) (struct homun_data * hd);
bool (*call) (struct map_session_data *sd);
bool (*recv_data) (int account_id, const struct s_homunculus *sh, int flag);
diff --git a/src/map/intif.c b/src/map/intif.c
index e25f56b63..5a62f9644 100644
--- a/src/map/intif.c
+++ b/src/map/intif.c
@@ -153,158 +153,6 @@ static int intif_rename(struct map_session_data *sd, int type, const char *name)
return 0;
}
-// GM Send a message
-static int intif_broadcast(const char *mes, int len, int type)
-{
- int lp = (type&BC_COLOR_MASK) ? 4 : 0;
-
- nullpo_ret(mes);
- Assert_ret(len < 32000);
- // Send to the local players
- clif->broadcast(NULL, mes, len, type, ALL_CLIENT);
-
- if (intif->CheckForCharServer())
- return 0;
-
- if (chrif->other_mapserver_count < 1)
- return 0; //No need to send.
-
- WFIFOHEAD(inter_fd, 16 + lp + len);
- WFIFOW(inter_fd,0) = 0x3000;
- WFIFOW(inter_fd,2) = 16 + lp + len;
- WFIFOL(inter_fd,4) = 0xFF000000; // 0xFF000000 color signals standard broadcast
- WFIFOW(inter_fd,8) = 0; // fontType not used with standard broadcast
- WFIFOW(inter_fd,10) = 0; // fontSize not used with standard broadcast
- WFIFOW(inter_fd,12) = 0; // fontAlign not used with standard broadcast
- WFIFOW(inter_fd,14) = 0; // fontY not used with standard broadcast
- if (type&BC_BLUE)
- WFIFOL(inter_fd,16) = 0x65756c62; //If there's "blue" at the beginning of the message, game client will display it in blue instead of yellow.
- else if (type&BC_WOE)
- WFIFOL(inter_fd,16) = 0x73737373; //If there's "ssss", game client will recognize message as 'WoE broadcast'.
- memcpy(WFIFOP(inter_fd,16 + lp), mes, len);
- WFIFOSET(inter_fd, WFIFOW(inter_fd,2));
- return 0;
-}
-
-static int intif_broadcast2(const char *mes, int len, unsigned int fontColor, short fontType, short fontSize, short fontAlign, short fontY)
-{
- nullpo_ret(mes);
- Assert_ret(len < 32000);
- // Send to the local players
- clif->broadcast2(NULL, mes, len, fontColor, fontType, fontSize, fontAlign, fontY, ALL_CLIENT);
-
- if (intif->CheckForCharServer())
- return 0;
-
- if (chrif->other_mapserver_count < 1)
- return 0; //No need to send.
-
- WFIFOHEAD(inter_fd, 16 + len);
- WFIFOW(inter_fd,0) = 0x3000;
- WFIFOW(inter_fd,2) = 16 + len;
- WFIFOL(inter_fd,4) = fontColor;
- WFIFOW(inter_fd,8) = fontType;
- WFIFOW(inter_fd,10) = fontSize;
- WFIFOW(inter_fd,12) = fontAlign;
- WFIFOW(inter_fd,14) = fontY;
- memcpy(WFIFOP(inter_fd,16), mes, len);
- WFIFOSET(inter_fd, WFIFOW(inter_fd,2));
- return 0;
-}
-
-/// send a message using the main chat system
-/// <sd> the source of message
-/// <message> the message that was sent
-static int intif_main_message(struct map_session_data *sd, const char *message)
-{
- char output[256];
-
- nullpo_ret(sd);
- nullpo_ret(message);
-
- // format the message for main broadcasting
- snprintf( output, sizeof(output), msg_txt(386), sd->status.name, message );
-
- // send the message using the inter-server broadcast service
- intif->broadcast2(output, (int)strlen(output) + 1, 0xFE000000, 0, 0, 0, 0);
-
- // log the chat message
- logs->chat( LOG_CHAT_MAINCHAT, 0, sd->status.char_id, sd->status.account_id, mapindex_id2name(sd->mapindex), sd->bl.x, sd->bl.y, NULL, message );
-
- return 0;
-}
-
-// The transmission of Wisp/Page to inter-server (player not found on this server)
-static int intif_wis_message(struct map_session_data *sd, const char *nick, const char *mes, int mes_len)
-{
- if (intif->CheckForCharServer())
- return 0;
- nullpo_ret(sd);
- nullpo_ret(nick);
- nullpo_ret(mes);
-
- if (chrif->other_mapserver_count < 1) {
- //Character not found.
- clif->wis_end(sd->fd, 1);
- return 0;
- }
-
- WFIFOHEAD(inter_fd,mes_len + 52);
- WFIFOW(inter_fd,0) = 0x3001;
- WFIFOW(inter_fd,2) = mes_len + 52;
- memcpy(WFIFOP(inter_fd,4), sd->status.name, NAME_LENGTH);
- memcpy(WFIFOP(inter_fd,4+NAME_LENGTH), nick, NAME_LENGTH);
- memcpy(WFIFOP(inter_fd,4+2*NAME_LENGTH), mes, mes_len);
- WFIFOSET(inter_fd, WFIFOW(inter_fd,2));
-
- if (battle_config.etc_log)
- ShowInfo("intif_wis_message from %s to %s (message: '%s')\n", sd->status.name, nick, mes);
-
- return 0;
-}
-
-// The reply of Wisp/page
-static int intif_wis_replay(int id, int flag)
-{
- if (intif->CheckForCharServer())
- return 0;
- WFIFOHEAD(inter_fd,7);
- WFIFOW(inter_fd,0) = 0x3002;
- WFIFOL(inter_fd,2) = id;
- WFIFOB(inter_fd,6) = flag; // flag: 0: success to send whisper, 1: target character is not logged in?, 2: ignored by target
- WFIFOSET(inter_fd,7);
-
- if (battle_config.etc_log)
- ShowInfo("intif_wis_replay: id: %d, flag:%d\n", id, flag);
-
- return 0;
-}
-
-// The transmission of GM only Wisp/Page from server to inter-server
-static int intif_wis_message_to_gm(char *wisp_name, int permission, char *mes)
-{
- int mes_len;
- if (intif->CheckForCharServer())
- return 0;
- nullpo_ret(wisp_name);
- nullpo_ret(mes);
- mes_len = (int)strlen(mes) + 1; // + null
- Assert_ret(mes_len > 0 && mes_len <= INT16_MAX - 32);
-
- WFIFOHEAD(inter_fd, mes_len + 32);
- WFIFOW(inter_fd,0) = 0x3003;
- WFIFOW(inter_fd,2) = mes_len + 32;
- memcpy(WFIFOP(inter_fd,4), wisp_name, NAME_LENGTH);
- WFIFOL(inter_fd,4+NAME_LENGTH) = permission;
- memcpy(WFIFOP(inter_fd,8+NAME_LENGTH), mes, mes_len);
- WFIFOSET(inter_fd, WFIFOW(inter_fd,2));
-
- if (battle_config.etc_log)
- ShowNotice("intif_wis_message_to_gm: from: '%s', required permission: %d, message: '%s'.\n", wisp_name, permission, mes);
-
- return 0;
-}
-
//Request for saving registry values.
static int intif_saveregistry(struct map_session_data *sd)
{
@@ -714,27 +562,6 @@ static int intif_break_party(int party_id)
return 0;
}
-// Sending party chat
-static int intif_party_message(int party_id, int account_id, const char *mes, int len)
-{
- if (intif->CheckForCharServer())
- return 0;
-
- if (chrif->other_mapserver_count < 1)
- return 0; //No need to send.
-
- nullpo_ret(mes);
- Assert_ret(len > 0 && len < 32000);
- WFIFOHEAD(inter_fd,len + 12);
- WFIFOW(inter_fd,0)=0x3027;
- WFIFOW(inter_fd,2)=len+12;
- WFIFOL(inter_fd,4)=party_id;
- WFIFOL(inter_fd,8)=account_id;
- memcpy(WFIFOP(inter_fd,12),mes,len);
- WFIFOSET(inter_fd,len+12);
- return 0;
-}
-
// Request a new leader for party
static int intif_party_leaderchange(int party_id, int account_id, int char_id)
{
@@ -931,28 +758,6 @@ static int intif_guild_break(int guild_id)
return 0;
}
-// Send a guild message
-static int intif_guild_message(int guild_id, int account_id, const char *mes, int len)
-{
- if (intif->CheckForCharServer())
- return 0;
-
- if (chrif->other_mapserver_count < 1)
- return 0; //No need to send.
-
- nullpo_ret(mes);
- Assert_ret(len > 0 && len < 32000);
- WFIFOHEAD(inter_fd, len + 12);
- WFIFOW(inter_fd,0)=0x3037;
- WFIFOW(inter_fd,2)=len+12;
- WFIFOL(inter_fd,4)=guild_id;
- WFIFOL(inter_fd,8)=account_id;
- memcpy(WFIFOP(inter_fd,12),mes,len);
- WFIFOSET(inter_fd,len+12);
-
- return 0;
-}
-
/**
* Requests to change a basic guild information, it is parsed via mapif_parse_GuildBasicInfoChange
* To see the information types that can be changed see mmo.h::guild_basic_info
@@ -1166,98 +971,6 @@ static int intif_homunculus_requestdelete(int homun_id)
//-----------------------------------------------------------------
// Packets receive from inter server
-// Wisp/Page reception // rewritten by [Yor]
-static void intif_parse_WisMessage(int fd)
-{
- struct map_session_data* sd;
- const char *wisp_source;
- char name[NAME_LENGTH];
- int id, i;
-
- id=RFIFOL(fd,4);
-
- safestrncpy(name, RFIFOP(fd,32), NAME_LENGTH);
- sd = map->nick2sd(name);
- if(sd == NULL || strcmp(sd->status.name, name) != 0) {
- //Not found
- intif_wis_replay(id,1);
- return;
- }
- if(sd->state.ignoreAll) {
- intif_wis_replay(id, 2);
- return;
- }
- wisp_source = RFIFOP(fd,8); // speed up [Yor]
- for(i=0; i < MAX_IGNORE_LIST &&
- sd->ignore[i].name[0] != '\0' &&
- strcmp(sd->ignore[i].name, wisp_source) != 0
- ; i++);
-
- if (i < MAX_IGNORE_LIST && sd->ignore[i].name[0] != '\0') {
- //Ignored
- intif_wis_replay(id, 2);
- return;
- }
- //Success to send whisper.
- clif->wis_message(sd->fd, wisp_source, RFIFOP(fd,56),RFIFOW(fd,2)-57);
- intif_wis_replay(id,0); // success
-}
-
-// Wisp/page transmission result reception
-static void intif_parse_WisEnd(int fd)
-{
- struct map_session_data* sd;
- const char *playername = RFIFOP(fd, 2);
-
- if (battle_config.etc_log)
- ShowInfo("intif_parse_wisend: player: %s, flag: %d\n", playername, RFIFOB(fd,26)); // flag: 0: success to send whisper, 1: target character is not logged in?, 2: ignored by target
- sd = map->nick2sd(playername);
- if (sd != NULL)
- clif->wis_end(sd->fd, RFIFOB(fd,26));
-
- return;
-}
-
-static int intif_parse_WisToGM_sub(struct map_session_data *sd, va_list va)
-{
- int permission = va_arg(va, int);
- char *wisp_name;
- char *message;
- int len;
-
- nullpo_ret(sd);
- if (!pc_has_permission(sd, permission))
- return 0;
- wisp_name = va_arg(va, char*);
- message = va_arg(va, char*);
- len = va_arg(va, int);
- clif->wis_message(sd->fd, wisp_name, message, len);
- return 1;
-}
-
-// Received wisp message from map-server via char-server for ALL gm
-// 0x3003/0x3803 <packet_len>.w <wispname>.24B <permission>.l <message>.?B
-static void intif_parse_WisToGM(int fd)
-{
- int permission, mes_len;
- char Wisp_name[NAME_LENGTH];
- char mbuf[255] = { 0 };
- char *message;
-
- mes_len = RFIFOW(fd,2) - 33; // Length not including the NUL terminator
- Assert_retv(mes_len > 0 && mes_len < 32000);
- message = (mes_len >= 255 ? aMalloc(mes_len + 1) : mbuf);
-
- permission = RFIFOL(fd,28);
- safestrncpy(Wisp_name, RFIFOP(fd,4), NAME_LENGTH);
- safestrncpy(message, RFIFOP(fd,32), mes_len + 1);
- // information is sent to all online GM
- map->foreachpc(intif->pWisToGM_sub, permission, Wisp_name, message, mes_len);
-
- if (message != mbuf)
- aFree(message);
-}
-
// Request player registre
static void intif_parse_Registers(int fd)
{
@@ -1464,12 +1177,6 @@ static void intif_parse_PartyMove(int fd)
party->recv_movemap(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOW(fd,14),RFIFOB(fd,16),RFIFOW(fd,17));
}
-// ACK party messages
-static void intif_parse_PartyMessage(int fd)
-{
- party->recv_message(RFIFOL(fd,4), RFIFOL(fd,8), RFIFOP(fd,12), RFIFOW(fd,2)-12);
-}
-
// ACK guild creation
static void intif_parse_GuildCreated(int fd)
{
@@ -1619,12 +1326,6 @@ static void intif_parse_GuildEmblem(int fd)
guild->emblem_changed(RFIFOW(fd,2)-12, RFIFOL(fd,4), RFIFOL(fd,8), RFIFOP(fd,12));
}
-// ACK guild message
-static void intif_parse_GuildMessage(int fd)
-{
- guild->recv_message(RFIFOL(fd,4), RFIFOL(fd,8), RFIFOP(fd,12), RFIFOW(fd,2)-12);
-}
-
// Reply guild castle data request
static void intif_parse_GuildCastleDataLoad(int fd)
{
@@ -2915,15 +2616,6 @@ static int intif_parse(int fd)
}
// Processing branch
switch(cmd){
- case 0x3800:
- if (RFIFOL(fd,4) == 0xFF000000) //Normal announce.
- clif->broadcast(NULL, RFIFOP(fd,16), packet_len-16, BC_DEFAULT, ALL_CLIENT);
- else //Color announce.
- clif->broadcast2(NULL, RFIFOP(fd,16), packet_len-16, RFIFOL(fd,4), RFIFOW(fd,8), RFIFOW(fd,10), RFIFOW(fd,12), RFIFOW(fd,14), ALL_CLIENT);
- break;
- case 0x3801: intif->pWisMessage(fd); break;
- case 0x3802: intif->pWisEnd(fd); break;
- case 0x3803: intif->pWisToGM(fd); break;
case 0x3804: intif->pRegisters(fd); break;
case 0x3805: intif->pAccountStorage(fd); break;
case 0x3806: intif->pChangeNameOk(fd); break;
@@ -2939,14 +2631,12 @@ static int intif_parse(int fd)
case 0x3824: intif->pPartyMemberWithdraw(fd); break;
case 0x3825: intif->pPartyMove(fd); break;
case 0x3826: intif->pPartyBroken(fd); break;
- case 0x3827: intif->pPartyMessage(fd); break;
case 0x3830: intif->pGuildCreated(fd); break;
case 0x3831: intif->pGuildInfo(fd); break;
case 0x3832: intif->pGuildMemberAdded(fd); break;
case 0x3834: intif->pGuildMemberWithdraw(fd); break;
case 0x3835: intif->pGuildMemberInfoShort(fd); break;
case 0x3836: intif->pGuildBroken(fd); break;
- case 0x3837: intif->pGuildMessage(fd); break;
case 0x3839: intif->pGuildBasicInfoChanged(fd); break;
case 0x383a: intif->pGuildMemberInfoChanged(fd); break;
case 0x383b: intif->pGuildPosition(fd); break;
@@ -3028,10 +2718,10 @@ static int intif_parse(int fd)
void intif_defaults(void)
{
const int packet_len_table [INTIF_PACKET_LEN_TABLE_SIZE] = {
- -1,-1,27,-1, -1,-1,37,-1, 7, 0, 0, 0, 0, 0, 0, 0, //0x3800-0x380f
+ 0, 0, 0, 0, -1,-1,37,-1, 7, 0, 0, 0, 0, 0, 0, 0, //0x3800-0x380f
-1, 0, 0, 0, 0, 0, 0, 0, -1,11, 0, 0, 0, 0, 0, 0, //0x3810 Achievements [Smokexyz/Hercules]
- 39,-1,15,15, 14,19, 7,-1, 0, 0, 0, 0, 0, 0, 0, 0, //0x3820
- 10,-1,15, 0, 79,25, 7,-1, 0,-1,-1,-1, 14,67,186,-1, //0x3830
+ 39,-1,15,15, 14,19, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, //0x3820
+ 10,-1,15, 0, 79,25, 7, 0, 0,-1,-1,-1, 14,67,186,-1, //0x3830
-1, 0, 0,14, 0, 0, 0, 0, -1,74,-1,11, 11,-1, 0, 0, //0x3840
-1,-1, 7, 7, 7,11, 8, 0, 10, 0, 0, 0, 0, 0, 0, 0, //0x3850 Auctions [Zephyrus] itembound[Akinari] Clan System[Murilo BiO]
-1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //0x3860 Quests [Kevin] [Inkfish]
@@ -3048,11 +2738,6 @@ void intif_defaults(void)
/* funcs */
intif->parse = intif_parse;
intif->create_pet = intif_create_pet;
- intif->broadcast = intif_broadcast;
- intif->broadcast2 = intif_broadcast2;
- intif->main_message = intif_main_message;
- intif->wis_message = intif_wis_message;
- intif->wis_message_to_gm = intif_wis_message_to_gm;
intif->saveregistry = intif_saveregistry;
intif->request_registry = intif_request_registry;
intif->request_account_storage = intif_request_account_storage;
@@ -3066,7 +2751,6 @@ void intif_defaults(void)
intif->party_leave = intif_party_leave;
intif->party_changemap = intif_party_changemap;
intif->break_party = intif_break_party;
- intif->party_message = intif_party_message;
intif->party_leaderchange = intif_party_leaderchange;
intif->guild_create = intif_guild_create;
intif->guild_request_info = intif_guild_request_info;
@@ -3074,7 +2758,6 @@ void intif_defaults(void)
intif->guild_leave = intif_guild_leave;
intif->guild_memberinfoshort = intif_guild_memberinfoshort;
intif->guild_break = intif_guild_break;
- intif->guild_message = intif_guild_message;
intif->guild_change_gm = intif_guild_change_gm;
intif->guild_change_basicinfo = intif_guild_change_basicinfo;
intif->guild_change_memberinfo = intif_guild_change_memberinfo;
@@ -3138,10 +2821,6 @@ void intif_defaults(void)
intif->achievements_request = intif_achievements_request;
intif->achievements_save = intif_achievements_save;
/* parse functions */
- intif->pWisMessage = intif_parse_WisMessage;
- intif->pWisEnd = intif_parse_WisEnd;
- intif->pWisToGM_sub = intif_parse_WisToGM_sub;
- intif->pWisToGM = intif_parse_WisToGM;
intif->pRegisters = intif_parse_Registers;
intif->pChangeNameOk = intif_parse_ChangeNameOk;
intif->pMessageToFD = intif_parse_MessageToFD;
@@ -3156,14 +2835,12 @@ void intif_defaults(void)
intif->pPartyMemberWithdraw = intif_parse_PartyMemberWithdraw;
intif->pPartyMove = intif_parse_PartyMove;
intif->pPartyBroken = intif_parse_PartyBroken;
- intif->pPartyMessage = intif_parse_PartyMessage;
intif->pGuildCreated = intif_parse_GuildCreated;
intif->pGuildInfo = intif_parse_GuildInfo;
intif->pGuildMemberAdded = intif_parse_GuildMemberAdded;
intif->pGuildMemberWithdraw = intif_parse_GuildMemberWithdraw;
intif->pGuildMemberInfoShort = intif_parse_GuildMemberInfoShort;
intif->pGuildBroken = intif_parse_GuildBroken;
- intif->pGuildMessage = intif_parse_GuildMessage;
intif->pGuildBasicInfoChanged = intif_parse_GuildBasicInfoChanged;
intif->pGuildMemberInfoChanged = intif_parse_GuildMemberInfoChanged;
intif->pGuildPosition = intif_parse_GuildPosition;
diff --git a/src/map/intif.h b/src/map/intif.h
index 8df669217..ffac4a1c9 100644
--- a/src/map/intif.h
+++ b/src/map/intif.h
@@ -60,11 +60,6 @@ struct intif_interface {
int (*parse) (int fd);
int (*create_pet)(int account_id, int char_id, int pet_type, int pet_lv, int pet_egg_id,
int pet_equip, short intimate, short hungry, char rename_flag, char incubate, char *pet_name);
- int (*broadcast) (const char *mes, int len, int type);
- int (*broadcast2) (const char *mes, int len, unsigned int fontColor, short fontType, short fontSize, short fontAlign, short fontY);
- int (*main_message) (struct map_session_data* sd, const char* message);
- int (*wis_message) (struct map_session_data *sd, const char *nick, const char *mes, int mes_len);
- int (*wis_message_to_gm) (char *Wisp_name, int permission, char *mes);
int (*saveregistry) (struct map_session_data *sd);
int (*request_registry) (struct map_session_data *sd, int flag);
void (*request_account_storage) (const struct map_session_data *sd);
@@ -78,7 +73,6 @@ struct intif_interface {
int (*party_leave) (int party_id,int account_id, int char_id);
int (*party_changemap) (struct map_session_data *sd, int online);
int (*break_party) (int party_id);
- int (*party_message) (int party_id, int account_id, const char *mes,int len);
int (*party_leaderchange) (int party_id,int account_id,int char_id);
int (*guild_create) (const char *name, const struct guild_member *master);
int (*guild_request_info) (int guild_id);
@@ -86,7 +80,6 @@ struct intif_interface {
int (*guild_leave) (int guild_id, int account_id, int char_id, int flag, const char *mes);
int (*guild_memberinfoshort) (int guild_id, int account_id, int char_id, int online, int lv, int class);
int (*guild_break) (int guild_id);
- int (*guild_message) (int guild_id, int account_id, const char *mes, int len);
int (*guild_change_gm) (int guild_id, const char *name, int len);
int (*guild_change_basicinfo) (int guild_id, int type, const void *data, int len);
int (*guild_change_memberinfo) (int guild_id, int account_id, int char_id, int type, const void *data, int len);
@@ -151,10 +144,6 @@ struct intif_interface {
void(*achievements_request) (struct map_session_data *sd);
void(*achievements_save) (struct map_session_data *sd);
/* */
- void (*pWisMessage) (int fd);
- void (*pWisEnd) (int fd);
- int (*pWisToGM_sub) (struct map_session_data* sd,va_list va);
- void (*pWisToGM) (int fd);
void (*pRegisters) (int fd);
void (*pAccountStorage) (int fd);
void (*pChangeNameOk) (int fd);
@@ -169,14 +158,12 @@ struct intif_interface {
void (*pPartyMemberWithdraw) (int fd);
void (*pPartyMove) (int fd);
void (*pPartyBroken) (int fd);
- void (*pPartyMessage) (int fd);
void (*pGuildCreated) (int fd);
void (*pGuildInfo) (int fd);
void (*pGuildMemberAdded) (int fd);
void (*pGuildMemberWithdraw) (int fd);
void (*pGuildMemberInfoShort) (int fd);
void (*pGuildBroken) (int fd);
- void (*pGuildMessage) (int fd);
void (*pGuildBasicInfoChanged) (int fd);
void (*pGuildMemberInfoChanged) (int fd);
void (*pGuildPosition) (int fd);
diff --git a/src/map/irc-bot.c b/src/map/irc-bot.c
index 996107fea..a0c7276a9 100644
--- a/src/map/irc-bot.c
+++ b/src/map/irc-bot.c
@@ -396,7 +396,7 @@ static void irc_userjoin(int fd, char *cmd, char *source, char *target, char *ms
ircbot->parse_source(source,source_nick,source_ident,source_host);
if( ircbot->channel ) {
- snprintf(send_string, 150, "[ #%s ] User IRC.%s joined the channel.",ircbot->channel->name,source_nick);
+ snprintf(send_string, 150, msg_txt(468), ircbot->channel->name, source_nick); // [ #%s ] User IRC.%s joined the channel.
clif->channel_msg2(ircbot->channel,send_string);
}
}
@@ -414,9 +414,9 @@ static void irc_userleave(int fd, char *cmd, char *source, char *target, char *m
if( ircbot->channel ) {
if (!strcmpi(cmd, "QUIT"))
- snprintf(send_string, 150, "[ #%s ] User IRC.%s left the channel. [Quit: %s]",ircbot->channel->name,source_nick,msg);
+ snprintf(send_string, 150, msg_txt(465), ircbot->channel->name, source_nick, msg); // [ #%s ] User IRC.%s left the channel. [Quit: %s]
else
- snprintf(send_string, 150, "[ #%s ] User IRC.%s left the channel. [%s]",ircbot->channel->name,source_nick,msg);
+ snprintf(send_string, 150, msg_txt(466), ircbot->channel->name, source_nick, msg); // [ #%s ] User IRC.%s left the channel. [%s]
clif->channel_msg2(ircbot->channel,send_string);
}
}
@@ -433,7 +433,7 @@ static void irc_usernick(int fd, char *cmd, char *source, char *target, char *ms
ircbot->parse_source(source,source_nick,source_ident,source_host);
if( ircbot->channel ) {
- snprintf(send_string, 150, "[ #%s ] User IRC.%s is now known as IRC.%s",ircbot->channel->name,source_nick,msg);
+ snprintf(send_string, 150, msg_txt(467), ircbot->channel->name, source_nick, msg); // [ #%s ] User IRC.%s is now known as IRC.%s
clif->channel_msg2(ircbot->channel,send_string);
}
}
diff --git a/src/map/itemdb.c b/src/map/itemdb.c
index 8caf88a4e..a97325e57 100644
--- a/src/map/itemdb.c
+++ b/src/map/itemdb.c
@@ -117,73 +117,105 @@ static struct item_data *itemdb_name2id(const char *str)
*/
static int itemdb_searchname_array_sub(union DBKey key, struct DBData data, va_list ap)
{
- struct item_data *item = DB->data2ptr(&data);
- char *str;
- str=va_arg(ap,char *);
+ struct item_data *itd = DB->data2ptr(&data);
+ const char *str = va_arg(ap, const char *);
+ enum item_name_search_flag flag = va_arg(ap, enum item_name_search_flag);
+
nullpo_ret(str);
- if (item == &itemdb->dummy)
+
+ if (itd == &itemdb->dummy)
return 1; //Invalid item.
- if(stristr(item->jname,str))
- return 0;
- if(battle_config.case_sensitive_aegisnames && strstr(item->name,str))
- return 0;
- if(!battle_config.case_sensitive_aegisnames && stristr(item->name,str))
+
+ if (
+ (flag == IT_SEARCH_NAME_PARTIAL
+ && (stristr(itd->jname, str) != NULL
+ || (battle_config.case_sensitive_aegisnames && strstr(itd->name, str))
+ || (!battle_config.case_sensitive_aegisnames && stristr(itd->name, str))
+ ))
+ || (flag == IT_SEARCH_NAME_EXACT
+ && (strcmp(itd->jname, str) == 0
+ || (battle_config.case_sensitive_aegisnames && strcmp(itd->name, str) == 0)
+ || (!battle_config.case_sensitive_aegisnames && strcasecmp(itd->name, str) == 0)
+ ))
+ ) {
+
return 0;
- return strcmpi(item->jname,str);
+ } else {
+ return 1;
+ }
}
-/*==========================================
- * Founds up to N matches. Returns number of matches [Skotlex]
- * search flag :
- * 0 - approximate match
- * 1 - exact match
- *------------------------------------------*/
-static int itemdb_searchname_array(struct item_data **data, int size, const char *str, int flag)
+/**
+ * Finds up to passed size matches
+ * @param data array of struct item_data for returning the results in
+ * @param size size of the array
+ * @param str string used in this search
+ * @param flag search mode refer to enum item_name_search_flag for possible values
+ * @return returns all found matches in the database which could be bigger than size
+ **/
+static int itemdb_searchname_array(struct item_data **data, const int size, const char *str, enum item_name_search_flag flag)
{
- struct item_data* item;
- int i;
- int count=0;
-
nullpo_ret(data);
nullpo_ret(str);
- // Search in the array
- for( i = 0; i < ARRAYLENGTH(itemdb->array); ++i )
- {
- item = itemdb->array[i];
- if( item == NULL )
+ Assert_ret(flag >= IT_SEARCH_NAME_PARTIAL && flag < IT_SEARCH_NAME_MAX);
+ Assert_ret(size > 0);
+
+ int
+ results_count = 0,
+ length = 0;
+
+ // Search in array
+ for (int i = 0; i < ARRAYLENGTH(itemdb->array); ++i) {
+ struct item_data *itd = itemdb->array[i];
+
+ if (itd == NULL)
continue;
- if(
- (!flag
- && (stristr(item->jname,str)
- || (battle_config.case_sensitive_aegisnames && strstr(item->name,str))
- || (!battle_config.case_sensitive_aegisnames && stristr(item->name,str))
- ))
- || (flag
- && (strcmp(item->jname,str) == 0
- || (battle_config.case_sensitive_aegisnames && strcmp(item->name,str) == 0)
- || (!battle_config.case_sensitive_aegisnames && strcasecmp(item->name,str) == 0)
- ))
- ) {
- if( count < size )
- data[count] = item;
- ++count;
+ if (
+ (flag == IT_SEARCH_NAME_PARTIAL
+ && (stristr(itd->jname, str) != NULL
+ || (battle_config.case_sensitive_aegisnames && strstr(itd->name, str))
+ || (!battle_config.case_sensitive_aegisnames && stristr(itd->name, str))
+ ))
+ || (flag == IT_SEARCH_NAME_EXACT
+ && (strcmp(itd->jname, str) == 0
+ || (battle_config.case_sensitive_aegisnames && strcmp(itd->name, str) == 0)
+ || (!battle_config.case_sensitive_aegisnames && strcasecmp(itd->name, str) == 0)
+ ))
+ ) {
+ if (length < size) {
+ data[length] = itd;
+ ++length;
+ }
+
+ ++results_count;
}
}
- // search in the db
- if( count < size )
- {
- struct DBData *db_data[MAX_SEARCH];
- int db_count = 0;
- size -= count;
- db_count = itemdb->other->getall(itemdb->other, (struct DBData**)&db_data, size, itemdb->searchname_array_sub, str);
- for (i = 0; i < db_count; i++)
- data[count++] = DB->data2ptr(db_data[i]);
- count += db_count;
+ // Search in dbmap
+ int dbmap_size = size - length;
+ if (dbmap_size > 0) {
+ struct DBData **dbmap_data = NULL;
+ int dbmap_count = 0;
+ CREATE(dbmap_data, struct DBData *, dbmap_size);
+
+ dbmap_count = itemdb->other->getall(itemdb->other, dbmap_data, dbmap_size, itemdb->searchname_array_sub, str, flag);
+ dbmap_size = min(dbmap_count, dbmap_size);
+
+ for (int i = 0; i < dbmap_size; ++i) {
+ data[length] = DB->data2ptr(dbmap_data[i]);
+ ++length;
+ }
+
+ results_count += dbmap_count;
+ aFree(dbmap_data);
+ } else { // We got all matches we can return, so we only need to count now.
+ results_count += itemdb->other->getall(itemdb->other, NULL, 0, itemdb->searchname_array_sub, str, flag);
}
- return count;
+
+ return results_count;
}
+
/* [Ind/Hercules] */
static int itemdb_chain_item(unsigned short chain_id, int *rate)
{
@@ -1523,141 +1555,107 @@ static void itemdb_read_chains(void)
else
itemdb->chain_cache[ECC_ORE] = i;
+ if (!script->get_constant("ITMCHAIN_SIEGFRIED", &i))
+ ShowWarning("itemdb_read_chains: failed to find 'ITMCHAIN_SIEGFRIED' chain to link to cache!\n");
+ else
+ itemdb->chain_cache[ECC_SIEGFRIED] = i;
+
ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", count, config_filename);
}
-/**
- * @return: amount of retrieved entries.
- **/
-static int itemdb_combo_split_atoi(char *str, int *val)
+static bool itemdb_read_combodb_libconfig(void)
{
- int i;
-
- nullpo_ret(val);
+ struct config_t combo_conf;
+ char filepath[256];
+ safesnprintf(filepath, sizeof(filepath), "%s/%s/%s", map->db_path, DBPATH, "item_combo_db.conf");
- for (i=0; i<MAX_ITEMS_PER_COMBO; i++) {
- if (!str) break;
+ if (libconfig->load_file(&combo_conf, filepath) == CONFIG_FALSE) {
+ ShowError("itemdb_read_combodb_libconfig: can't read %s\n", filepath);
+ return false;
+ }
- val[i] = atoi(str);
- str = strchr(str,':');
- if (str)
- *str++=0;
+ struct config_setting_t *combo_db = NULL;
+ if ((combo_db = libconfig->setting_get_member(combo_conf.root, "combo_db")) == NULL) {
+ ShowError("itemdb_read_combodb_libconfig: can't read %s\n", filepath);
+ return false;
}
- if( i == 0 ) //No data found.
- return 0;
+ int i = 0;
+ int count = 0;
+ struct config_setting_t *it = NULL;
- return i;
+ while ((it = libconfig->setting_get_elem(combo_db, i++)) != NULL) {
+ if (itemdb->read_combodb_libconfig_sub(it, i - 1, filepath))
+ ++count;
+ }
+
+ libconfig->destroy(&combo_conf);
+ ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", count, filepath);
+ return true;
}
-/**
- * <combo{:combo{:combo:{..}}}>,<{ script }>
- **/
-static void itemdb_read_combos(void)
+
+static bool itemdb_read_combodb_libconfig_sub(struct config_setting_t *it, int idx, const char *source)
{
- uint32 lines = 0, count = 0;
- char line[1024];
- char filepath[256];
- FILE* fp;
+ nullpo_retr(false, it);
+ nullpo_retr(false, source);
- safesnprintf(filepath, 256, "%s/%s", map->db_path, DBPATH"item_combo_db.txt");
+ struct config_setting_t *t = NULL;
- if ((fp = fopen(filepath, "r")) == NULL) {
- ShowError("itemdb_read_combos: File not found \"%s\".\n", filepath);
- return;
+ if ((t = libconfig->setting_get_member(it, "Items")) == NULL) {
+ ShowWarning("itemdb_read_combodb_libconfig_sub: invalid item list for combo (%d), in (%s), skipping..\n", idx, source);
+ return false;
}
- // process rows one by one
- while(fgets(line, sizeof(line), fp)) {
- char *str[2], *p;
-
- lines++;
-
- if (line[0] == '/' && line[1] == '/')
- continue;
-
- memset(str, 0, sizeof(str));
+ if (!config_setting_is_array(t)) {
+ ShowWarning("itemdb_read_combodb_libconfig_sub: the combo (%d) item list must be an array, in (%s), skipping..\n", idx, source);
+ return false;
+ }
- p = line;
- p = trim(p);
- if (*p == '\0')
- continue;// empty line
+ int len = libconfig->setting_length(t);
+ if (len > MAX_ITEMS_PER_COMBO) {
+ ShowWarning("itemdb_read_combodb_libconfig_sub: the size of combo (%d) item list is too big (%d, max = %d), in (%s), skipping..\n", idx, len, MAX_ITEMS_PER_COMBO, source);
+ return false;
+ }
- if (!strchr(p,',')) {
- /* is there even a single column? */
- ShowError("itemdb_read_combos: Insufficient columns in line %u of \"%s\", skipping.\n", lines, filepath);
- continue;
- }
+ struct item_combo *combo = NULL;
+ RECREATE(itemdb->combos, struct item_combo *, ++itemdb->combo_count);
+ CREATE(combo, struct item_combo, 1);
- str[0] = p;
- p = strchr(p,',');
- *p = '\0';
- p++;
+ combo->id = itemdb->combo_count - 1;
+ combo->count = len;
- str[1] = p;
- p = strchr(p,',');
- p++;
+ for (int i = 0; i < len; i++) {
+ struct item_data *item = NULL;
+ const char *name = libconfig->setting_get_string_elem(t, i);
- if (str[1][0] != '{') {
- ShowError("itemdb_read_combos(#1): Invalid format (Script column) in line %u of \"%s\", skipping.\n", lines, filepath);
- continue;
+ if ((item = itemdb->name2id(name)) == NULL) {
+ ShowWarning("itemdb_read_combodb_libconfig_sub: unknown item '%s', in (%s), skipping..\n", name, source);
+ --itemdb->combo_count;
+ aFree(combo);
+ return false;
}
+ combo->nameid[i] = item->nameid;
+ }
- /* no ending key anywhere (missing \}\) */
- if ( str[1][strlen(str[1])-1] != '}' ) {
- ShowError("itemdb_read_combos(#2): Invalid format (Script column) in line %u of \"%s\", skipping.\n", lines, filepath);
- continue;
- } else {
- int items[MAX_ITEMS_PER_COMBO];
- int v = 0, retcount = 0;
- struct item_combo *combo = NULL;
-
- if((retcount = itemdb->combo_split_atoi(str[0], items)) < 2) {
- ShowError("itemdb_read_combos: line %u of \"%s\" doesn't have enough items to make for a combo (min:2), skipping.\n", lines, filepath);
- continue;
- }
-
- /* validate */
- for(v = 0; v < retcount; v++) {
- if( !itemdb->exists(items[v]) ) {
- ShowError("itemdb_read_combos: line %u of \"%s\" contains unknown item ID %d, skipping.\n", lines, filepath, items[v]);
- break;
- }
- }
- /* failed at some item */
- if( v < retcount )
- continue;
-
- RECREATE(itemdb->combos, struct item_combo*, ++itemdb->combo_count);
-
- CREATE(combo, struct item_combo, 1);
-
- combo->count = retcount;
- combo->script = script->parse(str[1], filepath, lines, 0, NULL);
- combo->id = itemdb->combo_count - 1;
- /* populate ->nameid field */
- for( v = 0; v < retcount; v++ ) {
- combo->nameid[v] = items[v];
- }
-
- itemdb->combos[itemdb->combo_count - 1] = combo;
+ const char *str = NULL;
+ if (libconfig->setting_lookup_string(it, "Script", &str) == CONFIG_TRUE) {
+ combo->script = *str ? script->parse(str, source, -idx, SCRIPT_IGNORE_EXTERNAL_BRACKETS, NULL) : NULL;
+ } else {
+ ShowWarning("itemdb_read_combodb_libconfig_sub: invalid script for combo (%d) in (%s), skipping..\n", idx, source);
+ --itemdb->combo_count;
+ aFree(combo);
+ return false;
+ }
- /* populate the items to refer to this combo */
- for( v = 0; v < retcount; v++ ) {
- struct item_data * it;
- int index;
+ itemdb->combos[combo->id] = combo;
- it = itemdb->exists(items[v]);
- index = it->combos_count;
- RECREATE(it->combos, struct item_combo*, ++it->combos_count);
- it->combos[index] = combo;
- }
- }
- count++;
+ /* populate the items to refer to this combo */
+ for (int i = 0; i < len; i++) {
+ struct item_data *item = itemdb->exists(combo->nameid[i]);
+ RECREATE(item->combos, struct item_combo *, ++item->combos_count);
+ item->combos[item->combos_count - 1] = combo;
}
- fclose(fp);
- ShowStatus("Done reading '"CL_WHITE"%"PRIu32""CL_RESET"' entries in '"CL_WHITE"item_combo_db"CL_RESET"'.\n", count);
-
- return;
+ return true;
}
/*======================================
@@ -1721,6 +1719,14 @@ static int itemdb_validate_entry(struct item_data *entry, int n, const char *sou
script->free_code(entry->unequip_script);
entry->unequip_script = NULL;
}
+ if (entry->rental_start_script != NULL) {
+ script->free_code(entry->rental_start_script);
+ entry->rental_start_script = NULL;
+ }
+ if (entry->rental_end_script != NULL) {
+ script->free_code(entry->rental_end_script);
+ entry->rental_end_script = NULL;
+ }
return 0;
#if PACKETVER_MAIN_NUM >= 20181121 || PACKETVER_RE_NUM >= 20180704 || PACKETVER_ZERO_NUM >= 20181114
}
@@ -1751,6 +1757,14 @@ static int itemdb_validate_entry(struct item_data *entry, int n, const char *sou
script->free_code(entry->unequip_script);
entry->unequip_script = NULL;
}
+ if (entry->rental_start_script != NULL) {
+ script->free_code(entry->rental_start_script);
+ entry->rental_start_script = NULL;
+ }
+ if (entry->rental_end_script != NULL) {
+ script->free_code(entry->rental_end_script);
+ entry->rental_end_script = NULL;
+ }
return 0;
}
}
@@ -1878,7 +1892,14 @@ static int itemdb_validate_entry(struct item_data *entry, int n, const char *sou
script->free_code(item->unequip_script);
item->unequip_script = NULL;
}
-
+ if (item->rental_start_script != NULL && item->rental_start_script != entry->rental_start_script) { // Don't free if it's inheriting the same script
+ script->free_code(item->rental_start_script);
+ item->rental_start_script = NULL;
+ }
+ if (item->rental_end_script != NULL && item->rental_end_script != entry->rental_end_script) { // Don't free if it's inheriting the same script
+ script->free_code(item->rental_end_script);
+ item->rental_end_script = NULL;
+ }
*item = *entry;
return item->nameid;
}
@@ -1994,6 +2015,8 @@ static int itemdb_readdb_libconfig_sub(struct config_setting_t *it, int n, const
* ">
* OnEquipScript: <" OnEquip Script ">
* OnUnequipScript: <" OnUnequip Script ">
+ * OnRentalStartScript: <" on renting script ">
+ * OnRentalEndScript: <" on renting end script ">
* Inherit: inherit or override
*/
if( !itemdb->lookup_const(it, "Id", &i32) ) {
@@ -2271,6 +2294,12 @@ static int itemdb_readdb_libconfig_sub(struct config_setting_t *it, int n, const
if( libconfig->setting_lookup_string(it, "OnUnequipScript", &str) )
id.unequip_script = *str ? script->parse(str, source, -id.nameid, SCRIPT_IGNORE_EXTERNAL_BRACKETS, NULL) : NULL;
+ if (libconfig->setting_lookup_string(it, "OnRentalStartScript", &str) != CONFIG_FALSE)
+ id.rental_start_script = (*str != '\0') ? script->parse(str, source, -id.nameid, SCRIPT_IGNORE_EXTERNAL_BRACKETS, NULL) : NULL;
+
+ if (libconfig->setting_lookup_string(it, "OnRentalEndScript", &str) != CONFIG_FALSE)
+ id.rental_end_script = (*str != '\0') ? script->parse(str, source, -id.nameid, SCRIPT_IGNORE_EXTERNAL_BRACKETS, NULL) : NULL;
+
return itemdb->validate_entry(&id, n, source);
}
@@ -2407,7 +2436,7 @@ static int itemdb_readdb_libconfig(const char *filename)
}
db_destroy(duplicate_db);
libconfig->destroy(&item_db_conf);
- ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", count, filename);
+ ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", count, filepath);
return count;
}
@@ -2422,6 +2451,98 @@ static uint64 itemdb_unique_id(struct map_session_data *sd)
return ((uint64)sd->status.char_id << 32) | sd->status.uniqueitem_counter++;
}
+static bool itemdb_read_libconfig_lapineddukddak(void)
+{
+ struct config_t item_lapineddukddak;
+ struct config_setting_t *it = NULL;
+ char filepath[256];
+
+ int i = 0;
+ int count = 0;
+
+ safesnprintf(filepath, sizeof(filepath), "%s/%s", map->db_path, DBPATH"item_lapineddukddak.conf");
+ if (libconfig->load_file(&item_lapineddukddak, filepath) == CONFIG_FALSE)
+ return false;
+
+ while ((it = libconfig->setting_get_elem(item_lapineddukddak.root, i++)) != NULL) {
+ if (itemdb->read_libconfig_lapineddukddak_sub(it, filepath))
+ ++count;
+ }
+
+ libconfig->destroy(&item_lapineddukddak);
+ ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", count, filepath);
+ return true;
+}
+
+static bool itemdb_read_libconfig_lapineddukddak_sub(struct config_setting_t *it, const char *source)
+{
+ nullpo_retr(false, it);
+ nullpo_retr(false, source);
+
+ struct item_data *data = NULL;
+ const char *name = config_setting_name(it);
+ const char *str = NULL;
+ int i32 = 0;
+
+ if ((data = itemdb->name2id(name)) == NULL) {
+ ShowWarning("itemdb_read_libconfig_lapineddukddak_sub: unknown item '%s', skipping..\n", name);
+ return false;
+ }
+
+ data->lapineddukddak = aCalloc(1, sizeof(struct item_lapineddukddak));
+ if (libconfig->setting_lookup_int(it, "NeedCount", &i32) == CONFIG_TRUE)
+ data->lapineddukddak->NeedCount = (int16)i32;
+
+ if (libconfig->setting_lookup_int(it, "NeedRefineMin", &i32) == CONFIG_TRUE)
+ data->lapineddukddak->NeedRefineMin = (int8)i32;
+
+ if (libconfig->setting_lookup_int(it, "NeedRefineMax", &i32) == CONFIG_TRUE)
+ data->lapineddukddak->NeedRefineMax = (int8)i32;
+
+ struct config_setting_t *sources = libconfig->setting_get_member(it, "SourceItems");
+ itemdb->read_libconfig_lapineddukddak_sub_sources(sources, data);
+
+ if (libconfig->setting_lookup_string(it, "Script", &str) == CONFIG_TRUE)
+ data->lapineddukddak->script = *str ? script->parse(str, source, -data->nameid, SCRIPT_IGNORE_EXTERNAL_BRACKETS, NULL) : NULL;
+ return true;
+}
+
+static bool itemdb_read_libconfig_lapineddukddak_sub_sources(struct config_setting_t *sources, struct item_data *data)
+{
+ nullpo_retr(false, data);
+ nullpo_retr(false, data->lapineddukddak);
+
+ int i = 0;
+ struct config_setting_t *entry = NULL;
+
+ if (sources == NULL || !config_setting_is_group(sources))
+ return false;
+
+ VECTOR_INIT(data->lapineddukddak->SourceItems);
+ while ((entry = libconfig->setting_get_elem(sources, i++)) != NULL) {
+ struct item_data *edata = NULL;
+ struct itemlist_entry item = { 0 };
+ const char *name = config_setting_name(entry);
+ int i32 = 0;
+
+ if ((edata = itemdb->name2id(name)) == NULL) {
+ ShowWarning("itemdb_read_libconfig_lapineddukddak_sub: unknown item '%s', skipping..\n", name);
+ continue;
+ }
+ item.id = edata->nameid;
+
+ if ((i32 = libconfig->setting_get_int(entry)) == CONFIG_TRUE && (i32 <= 0 || i32 > MAX_AMOUNT)) {
+ ShowWarning("itemdb_read_libconfig_lapineddukddak_sub: invalid amount (%d) for source item '%s', skipping..\n", i32, name);
+ continue;
+ }
+ item.amount = i32;
+
+ VECTOR_ENSURE(data->lapineddukddak->SourceItems, 1, 1);
+ VECTOR_PUSH(data->lapineddukddak->SourceItems, item);
+ }
+ return true;
+}
+
/**
* Reads all item-related databases.
*/
@@ -2456,10 +2577,11 @@ static void itemdb_read(bool minimal)
itemdb->name_constants();
- itemdb->read_combos();
+ itemdb->read_combodb_libconfig();
itemdb->read_groups();
itemdb->read_chains();
itemdb->read_packages();
+ itemdb->read_libconfig_lapineddukddak();
}
/**
@@ -2514,8 +2636,18 @@ static void destroy_item_data(struct item_data *self, int free_self)
script->free_code(self->equip_script);
if( self->unequip_script )
script->free_code(self->unequip_script);
+ if (self->rental_start_script != NULL)
+ script->free_code(self->rental_start_script);
+ if (self->rental_end_script != NULL)
+ script->free_code(self->rental_end_script);
if( self->combos )
aFree(self->combos);
+ if (self->lapineddukddak != NULL) {
+ if (self->lapineddukddak->script != NULL)
+ script->free_code(self->lapineddukddak->script);
+ VECTOR_CLEAR(self->lapineddukddak->SourceItems);
+ aFree(self->lapineddukddak);
+ }
HPM->data_store_destroy(&self->hdata);
#if defined(DEBUG)
// trash item
@@ -2800,8 +2932,8 @@ void itemdb_defaults(void)
itemdb->isrestricted = itemdb_isrestricted;
itemdb->isidentified = itemdb_isidentified;
itemdb->isidentified2 = itemdb_isidentified2;
- itemdb->combo_split_atoi = itemdb_combo_split_atoi;
- itemdb->read_combos = itemdb_read_combos;
+ itemdb->read_combodb_libconfig = itemdb_read_combodb_libconfig;
+ itemdb->read_combodb_libconfig_sub = itemdb_read_combodb_libconfig_sub;
itemdb->gendercheck = itemdb_gendercheck;
itemdb->validate_entry = itemdb_validate_entry;
itemdb->readdb_options_additional_fields = itemdb_readdb_options_additional_fields;
@@ -2820,4 +2952,7 @@ void itemdb_defaults(void)
itemdb->lookup_const = itemdb_lookup_const;
itemdb->lookup_const_mask = itemdb_lookup_const_mask;
itemdb->addname_sub = itemdb_addname_sub;
+ itemdb->read_libconfig_lapineddukddak = itemdb_read_libconfig_lapineddukddak;
+ itemdb->read_libconfig_lapineddukddak_sub = itemdb_read_libconfig_lapineddukddak_sub;
+ itemdb->read_libconfig_lapineddukddak_sub_sources = itemdb_read_libconfig_lapineddukddak_sub_sources;
}
diff --git a/src/map/itemdb.h b/src/map/itemdb.h
index e032def0c..14ead7707 100644
--- a/src/map/itemdb.h
+++ b/src/map/itemdb.h
@@ -39,7 +39,7 @@ struct hplugin_data_store;
#ifndef MAX_ITEM_ID
#if PACKETVER_MAIN_NUM >= 20181121 || PACKETVER_RE_NUM >= 20180704 || PACKETVER_ZERO_NUM >= 20181114
-#define MAX_ITEM_ID 0x20000
+#define MAX_ITEM_ID INT32_MAX
#else
#define MAX_ITEM_ID 0xFFFF
#endif
@@ -139,7 +139,6 @@ enum item_itemid {
ITEMID_COATING_BOTTLE = 7139,
ITEMID_FRAGMENT_OF_CRYSTAL = 7321,
ITEMID_SKULL_ = 7420,
- ITEMID_TOKEN_OF_SIEGFRIED = 7621,
ITEMID_SPECIAL_ALLOY_TRAP = 7940,
ITEMID_CATNIP_FRUIT = 11602,
ITEMID_RED_POUCH_OF_SURPRISE = 12024,
@@ -359,6 +358,7 @@ enum geneticist_item_list {
//
enum e_chain_cache {
ECC_ORE,
+ ECC_SIEGFRIED,
/* */
ECC_MAX,
};
@@ -412,6 +412,16 @@ enum ItemOptionTypes {
IT_OPT_MAX
};
+/**
+ * Item name search flags
+ **/
+
+enum item_name_search_flag {
+ IT_SEARCH_NAME_PARTIAL,
+ IT_SEARCH_NAME_EXACT,
+ IT_SEARCH_NAME_MAX,
+};
+
/** Convenience item list (entry) used in various functions */
struct itemlist_entry {
int id; ///< Item ID or (inventory) index
@@ -482,6 +492,14 @@ struct itemdb_option {
struct script_code *script;
};
+struct item_lapineddukddak {
+ int16 NeedCount;
+ int8 NeedRefineMin;
+ int8 NeedRefineMax;
+ VECTOR_DECL(struct itemlist_entry) SourceItems;
+ struct script_code *script;
+};
+
struct item_data {
int nameid;
char name[ITEM_NAME_LENGTH],jname[ITEM_NAME_LENGTH];
@@ -516,12 +534,15 @@ struct item_data {
struct script_code *script; ///< Default script for everything.
struct script_code *equip_script; ///< Script executed once when equipping.
struct script_code *unequip_script; ///< Script executed once when unequipping.
+ struct script_code *rental_start_script; ///< Script executed once this item get rented
+ struct script_code *rental_end_script; ///< Script executed once this item rent ends
struct {
unsigned available : 1;
unsigned no_refine : 1; // [celest]
unsigned delay_consume : 1; ///< Signifies items that are not consumed immediately upon double-click [Skotlex]
unsigned trade_restriction : 9; ///< Item trade restrictions mask (@see enum ItemTradeRestrictions)
- unsigned autoequip: 1;
+ unsigned autoequip : 1;
+ unsigned auto_favorite : 1;
unsigned buyingstore : 1;
unsigned bindonequip : 1;
unsigned keepafteruse : 1;
@@ -548,6 +569,7 @@ struct item_data {
/* TODO add a pointer to some sort of (struct extra) and gather all the not-common vals into it to save memory */
struct item_group *group;
struct item_package *package;
+ struct item_lapineddukddak *lapineddukddak;
struct hplugin_data_store *hdata; ///< HPM Plugin Data Store
};
@@ -632,7 +654,7 @@ struct itemdb_interface {
/* */
struct item_data* (*name2id) (const char *str);
struct item_data* (*search_name) (const char *name);
- int (*search_name_array) (struct item_data** data, int size, const char *str, int flag);
+ int (*search_name_array) (struct item_data **data, const int size, const char *str, enum item_name_search_flag flag);
struct item_data* (*load)(int nameid);
struct item_data* (*search)(int nameid);
struct item_data* (*exists) (int nameid);
@@ -665,8 +687,8 @@ struct itemdb_interface {
int (*isrestricted) (struct item *item, int gmlv, int gmlv2, int(*func)(struct item_data *, int, int));
int (*isidentified) (int nameid);
int (*isidentified2) (struct item_data *data);
- int (*combo_split_atoi) (char *str, int *val);
- void (*read_combos) (void);
+ bool (*read_combodb_libconfig) (void);
+ bool (*read_combodb_libconfig_sub) (struct config_setting_t *it, int idx, const char *source);
int (*gendercheck) (struct item_data *id);
int (*validate_entry) (struct item_data *entry, int n, const char *source);
void (*readdb_options_additional_fields) (struct itemdb_option *ito, struct config_setting_t *t, const char *source);
@@ -685,6 +707,9 @@ struct itemdb_interface {
bool (*lookup_const) (const struct config_setting_t *it, const char *name, int *value);
bool (*lookup_const_mask) (const struct config_setting_t *it, const char *name, int *value);
int (*addname_sub) (union DBKey key, struct DBData *data, va_list ap);
+ bool (*read_libconfig_lapineddukddak) (void);
+ bool (*read_libconfig_lapineddukddak_sub) (struct config_setting_t *it, const char *source);
+ bool (*read_libconfig_lapineddukddak_sub_sources) (struct config_setting_t *sources, struct item_data *data);
};
#ifdef HERCULES_CORE
diff --git a/src/map/log.c b/src/map/log.c
index 5bbca02a9..aa2f5f8f3 100644
--- a/src/map/log.c
+++ b/src/map/log.c
@@ -511,7 +511,7 @@ static void log_sql_final(void)
/**
* Initializes logs->config variables
*/
-void log_set_defaults(void)
+static void log_set_defaults(void)
{
memset(&logs->config, 0, sizeof(logs->config));
@@ -540,7 +540,7 @@ void log_set_defaults(void)
*
* @retval false in case of error.
*/
-bool log_config_read_database(const char *filename, struct config_t *config, bool imported)
+static bool log_config_read_database(const char *filename, struct config_t *config, bool imported)
{
struct config_setting_t *setting = NULL;
@@ -596,7 +596,7 @@ bool log_config_read_database(const char *filename, struct config_t *config, boo
*
* @retval false in case of error.
*/
-bool log_config_read_filter_item(const char *filename, struct config_t *config, bool imported)
+static bool log_config_read_filter_item(const char *filename, struct config_t *config, bool imported)
{
struct config_setting_t *setting = NULL;
@@ -625,7 +625,7 @@ bool log_config_read_filter_item(const char *filename, struct config_t *config,
*
* @retval false in case of error.
*/
-bool log_config_read_filter_chat(const char *filename, struct config_t *config, bool imported)
+static bool log_config_read_filter_chat(const char *filename, struct config_t *config, bool imported)
{
struct config_setting_t *setting = NULL;
@@ -651,7 +651,7 @@ bool log_config_read_filter_chat(const char *filename, struct config_t *config,
*
* @retval false in case of error.
*/
-bool log_config_read_filter(const char *filename, struct config_t *config, bool imported)
+static bool log_config_read_filter(const char *filename, struct config_t *config, bool imported)
{
bool retval = true;
@@ -674,7 +674,7 @@ bool log_config_read_filter(const char *filename, struct config_t *config, bool
*
* @retval false in case of error.
*/
-bool log_config_read(const char *filename, bool imported)
+static bool log_config_read(const char *filename, bool imported)
{
struct config_t config;
struct config_setting_t *setting = NULL;
@@ -755,7 +755,7 @@ bool log_config_read(const char *filename, bool imported)
return retval;
}
-void log_config_complete(void)
+static void log_config_complete(void)
{
if( logs->config.sql_logs ) {
logs->pick_sub = log_pick_sub_sql;
diff --git a/src/map/map.c b/src/map/map.c
index f92be52e9..332bbe75f 100644
--- a/src/map/map.c
+++ b/src/map/map.c
@@ -2268,30 +2268,25 @@ static struct map_session_data *map_charid2sd(int charid)
* (without sensitive case if necessary)
* return map_session_data pointer or NULL
*------------------------------------------*/
-static struct map_session_data *map_nick2sd(const char *nick)
+static struct map_session_data *map_nick2sd(const char *nick, bool allow_partial)
{
- struct map_session_data* sd;
- struct map_session_data* found_sd;
- struct s_mapiterator* iter;
- size_t nicklen;
- int qty = 0;
-
- if( nick == NULL )
+ if (nick == NULL)
return NULL;
- nicklen = strlen(nick);
- iter = mapit_getallusers();
+ struct s_mapiterator *iter = mapit_getallusers();
+ struct map_session_data *found_sd = NULL;
+
+ if (battle_config.partial_name_scan && allow_partial) {
+ int nicklen = (int)strlen(nick);
+ int qty = 0;
- found_sd = NULL;
- for (sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); sd = BL_UCAST(BL_PC, mapit->next(iter))) {
- if( battle_config.partial_name_scan )
- {// partial name search
- if( strnicmp(sd->status.name, nick, nicklen) == 0 )
- {
+ // partial name search
+ for (struct map_session_data *sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); sd = BL_UCAST(BL_PC, mapit->next(iter))) {
+ if (strnicmp(sd->status.name, nick, nicklen) == 0) {
found_sd = sd;
- if( strcmp(sd->status.name, nick) == 0 )
- {// Perfect Match
+ if (strcmp(sd->status.name, nick) == 0) {
+ // Perfect Match
qty = 1;
break;
}
@@ -2299,17 +2294,20 @@ static struct map_session_data *map_nick2sd(const char *nick)
qty++;
}
}
- else if( strcasecmp(sd->status.name, nick) == 0 )
- {// exact search only
- found_sd = sd;
- break;
+
+ if (qty != 1)
+ found_sd = NULL;
+ } else {
+ // exact search only
+ for (struct map_session_data *sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); sd = BL_UCAST(BL_PC, mapit->next(iter))) {
+ if (strcasecmp(sd->status.name, nick) == 0) {
+ found_sd = sd;
+ break;
+ }
}
}
mapit->free(iter);
- if( battle_config.partial_name_scan && qty != 1 )
- found_sd = NULL;
-
return found_sd;
}
diff --git a/src/map/map.h b/src/map/map.h
index 39eb07e4c..6b360e1bc 100644
--- a/src/map/map.h
+++ b/src/map/map.h
@@ -1208,7 +1208,7 @@ END_ZEROED_BLOCK;
void (*addiddb) (struct block_list *bl);
void (*deliddb) (struct block_list *bl);
/* */
- struct map_session_data * (*nick2sd) (const char *nick);
+ struct map_session_data * (*nick2sd) (const char *nick, bool allow_partial);
struct mob_data * (*getmob_boss) (int16 m);
struct mob_data * (*id2boss) (int id);
uint32 (*race_id2mask) (int race);
diff --git a/src/map/mapdefines.h b/src/map/mapdefines.h
index df9e9bccb..348ca98fd 100644
--- a/src/map/mapdefines.h
+++ b/src/map/mapdefines.h
@@ -21,6 +21,8 @@
#ifndef MAP_MAPDEFINES_H
#define MAP_MAPDEFINES_H
+#include "common/mmo.h" // packet versions
+
#define MAX_NPC_PER_MAP 512
#define AREA_SIZE (battle->bc->area_size)
#define CHAT_AREA_SIZE (battle->bc->chat_area_size)
@@ -57,8 +59,14 @@
#define MAPID_UPPERMASK 0x0fff
#define MAPID_THIRDMASK (JOBL_THIRD|MAPID_UPPERMASK)
-// Max size for inputs to Graffiti, Talkie Box and Vending text prompts
+// Max size for inputs to Vending text prompts
#define MESSAGE_SIZE (79 + 1)
+// Max size for inputs to Graffiti, Talkie Box text prompts
+#if PACKETVER_MAIN_NUM >= 20190904 || PACKETVER_RE_NUM >= 20190904 || PACKETVER_ZERO_NUM >= 20190828
+#define TALKBOX_MESSAGE_SIZE 21
+#else
+#define TALKBOX_MESSAGE_SIZE (79 + 1)
+#endif
// String length you can write in the 'talking box'
#define CHATBOX_SIZE (70 + 1)
// Chatroom-related string sizes
diff --git a/src/map/messages_main.h b/src/map/messages_main.h
index b9458e374..1ef24d6ab 100644
--- a/src/map/messages_main.h
+++ b/src/map/messages_main.h
@@ -24,7 +24,7 @@
/* This file is autogenerated, please do not commit manual changes
-Latest version: 20190522
+Latest version: 20190918
*/
enum clif_messages {
@@ -21708,10 +21708,17 @@ AP
상업도/방어도 확인
*/
MSG_ID_E2E = 0xe2e,
-/*20190522 to latest
+/*20190522 to 20190605
관리영지 "%s"(으)로 이동하시겠습니까?
(1회 이동 시 마다 1,000제니가 소모됩니다.
공성전 시간에는 제니의 소모가 100배로 증가합니다.)
+20190619 to 20190619
+관리영지 "%s"(으)로 이동하시겠습니까?
+이동 시 마다 %d제니가 소모됩니다.
+20190703 to latest
+관리영지 "%s"(으)로 이동하시겠습니까?
+이동 시 마다 %d제니가 소모됩니다.
+(공성전 시간에는 %d제니가 소모됩니다.)
*/
MSG_ID_E2F = 0xe2f,
/*20190522 to latest
@@ -21722,11 +21729,238 @@ AP
상업도: %d / %d
*/
MSG_ID_E30 = 0xe30,
-/*20190522 to latest
+/*20190522 to 20190717
공성 영지 내에서는 다른 공성 영지로 이동 할 수 없습니다.
+20190717 to latest
+공성 영지에서는 사용할 수 없는 기능입니다.
*/
MSG_ID_E31 = 0xe31,
#endif
+#if PACKETVER >= 20190619
+/*20190619 to latest
+기본 기능 스킬을 습득하지 않은 캐릭터입니다.
+*/
+ MSG_ID_E32 = 0xe32,
+#endif
+#if PACKETVER >= 20190703
+/*20190703 to latest
+접속하신 IP는 라그나로크 제로 이용이 불가능합니다.
+고객센터 또는 홈페이지로 문의해 주십시오.
+*/
+ MSG_ID_E33 = 0xe33,
+#endif
+#if PACKETVER >= 20190717
+/*20190717 to latest
+탑승/장착 해제
+*/
+ MSG_ID_E34 = 0xe34,
+/*20190717 to latest
+가져오기
+*/
+ MSG_ID_E35 = 0xe35,
+/*20190717 to latest
+직전 노점에 등록된 아이템 정보를 가져옵니다.
+*/
+ MSG_ID_E36 = 0xe36,
+/*20190717 to latest
+서버 이슈로 인해 로그인이 제한되고 있습니다.
+*/
+ MSG_ID_E37 = 0xe37,
+/*20190717 to latest
+메시지
+*/
+ MSG_ID_E38 = 0xe38,
+/*20190717 to latest
++18 이상만 플레이가 가능합니다.
+*/
+ MSG_ID_E39 = 0xe39,
+/*20190717 to latest
+3시간 이상의 게임 플레이를 권장하지 않습니다.
+*/
+ MSG_ID_E3A = 0xe3a,
+/*20190717 to latest
+AP가 부족합니다.
+*/
+ MSG_ID_E3B = 0xe3b,
+#endif
+#if PACKETVER >= 20190731
+/*20190731 to latest
+제련도가 높아서 조합할 수 없습니다.
+*/
+ MSG_ID_E3C = 0xe3c,
+/*20190731 to latest
+제련도가 조합에 필요한 요구치보다 높습니다.
+*/
+ MSG_ID_E3D = 0xe3d,
+/*20190731 to latest
+'카드가 끼워져있거나 인챈트 되어 있습니다.
+*/
+ MSG_ID_E3E = 0xe3e,
+/*20190731 to latest
+∞
+*/
+ MSG_ID_E3F = 0xe3f,
+/*20190731 to latest
+Z
+*/
+ MSG_ID_E40 = 0xe40,
+/*20190731 to latest
+Total : %s Zeny
+*/
+ MSG_ID_E41 = 0xe41,
+#endif
+#if PACKETVER >= 20190821
+/*20190821 to latest
+계정한정판매 등록창
+*/
+ MSG_ID_E42 = 0xe42,
+/*20190821 to latest
+아이템 DB명
+Item DB Name
+*/
+ MSG_ID_E43 = 0xe43,
+/*20190821 to latest
+아이템 DB번호
+Item DB Number
+*/
+ MSG_ID_E44 = 0xe44,
+/*20190821 to latest
+판매 갯수
+Number of Sale
+*/
+ MSG_ID_E45 = 0xe45,
+/*20190821 to latest
+판매 시작시간
+Sale Start Time
+*/
+ MSG_ID_E46 = 0xe46,
+/*20190821 to latest
+판매 종료시간
+*/
+ MSG_ID_E47 = 0xe47,
+/*20190821 to latest
+계정 한정
+*/
+ MSG_ID_E48 = 0xe48,
+/*20190821 to latest
+판매기간 : %d월 %d일 %d시 %d분
+*/
+ MSG_ID_E49 = 0xe49,
+/*20190821 to latest
+구입가능 %d개
+*/
+ MSG_ID_E4A = 0xe4a,
+/*20190821 to latest
+%d개 한정
+*/
+ MSG_ID_E4B = 0xe4b,
+/*20190821 to latest
+>> ItemName : %s / 수량 : %d / 판매기간 : %d월:%d일:%d시:%d분 ~ %d월:%d일:%d시:%d분
+*/
+ MSG_ID_E4C = 0xe4c,
+/*20190821 to latest
+Sold Out
+*/
+ MSG_ID_E4D = 0xe4d,
+/*20190821 to latest
+[%s]은(는) 현재 소환할 수 없는 지역에 있습니다.
+*/
+ MSG_ID_E4E = 0xe4e,
+/*20190821 to latest
+~ %d월 %d일 %d시 %d분
+*/
+ MSG_ID_E4F = 0xe4f,
+/*20190821 to latest
+상품을 더이상 추가할 수 없습니다
+*/
+ MSG_ID_E50 = 0xe50,
+#endif
+#if PACKETVER >= 20190828
+/*20190828 to latest
+장착 중인 아이템은 교환할 수 없습니다. 장착을 해제한 뒤 시도해 주시길 바랍니다.
+*/
+ MSG_ID_E51 = 0xe51,
+#endif
+#if PACKETVER >= 20190904
+/*20190904 to latest
+길드 창고 이용 중엔 캐릭터 선택창으로 이동 할 수 없습니다.
+*/
+ MSG_ID_E52 = 0xe52,
+/*20190904 to latest
+아이템 태그가 포함되어 있어 사용할 수 없습니다.
+*/
+ MSG_ID_E53 = 0xe53,
+/*20190904 to latest
+Monster
+*/
+ MSG_ID_E54 = 0xe54,
+/*20190904 to latest
+Unknown
+*/
+ MSG_ID_E55 = 0xe55,
+/*20190904 to latest
+Undead
+*/
+ MSG_ID_E56 = 0xe56,
+/*20190904 to latest
+Animal
+*/
+ MSG_ID_E57 = 0xe57,
+/*20190904 to latest
+Plant
+*/
+ MSG_ID_E58 = 0xe58,
+/*20190904 to latest
+Insect
+*/
+ MSG_ID_E59 = 0xe59,
+/*20190904 to latest
+Marine
+*/
+ MSG_ID_E5A = 0xe5a,
+/*20190904 to latest
+Devil
+*/
+ MSG_ID_E5B = 0xe5b,
+/*20190904 to latest
+Human
+*/
+ MSG_ID_E5C = 0xe5c,
+/*20190904 to latest
+Angel
+*/
+ MSG_ID_E5D = 0xe5d,
+/*20190904 to latest
+Dragon
+*/
+ MSG_ID_E5E = 0xe5e,
+#endif
+#if PACKETVER >= 20190918
+/*20190918 to latest
+Balance: %s %c
+*/
+ MSG_ID_E5F = 0xe5f,
+/*20190918 to latest
+ ^ff0000본 아이템을 구매 후 7일 이내에는 청약 철회가 가능합니다. 다만, 7일이 지났거나 아이템을 개봉하시면 청약 철회 대상에서 제외 됩니다.또한 구매시 사용된 무료캐시는 청약철회시 반환되지 않습니다.^000000 정말로 아이템을 구매하시겠습니까? 구매하실 경우 %s캐시가 차감됩니다.
+*/
+ MSG_ID_E60 = 0xe60,
+/*20190918 to latest
+ ^ff0000본 아이템을 구매 후 7일 이내에는 청약 철회가 가능합니다. 다만, 7일이 지났거나 아이템을 개봉하시면 청약 철회 대상에서 제외 됩니다.또한 구매시 사용된 무료캐시는 청약철회시 반환되지 않습니다.^000000 정말로 아이템을 구매하시겠습니까? 구매하실 경우 일반 %s캐시, 무료 %s캐시가 차감됩니다.
+*/
+ MSG_ID_E61 = 0xe61,
+/*20190918 to latest
+[%s]의 호출이 거부되었습니다.
+*/
+ MSG_ID_E62 = 0xe62,
+/*20190918 to latest
+구매 한도액은 소지액을 초과할 수 없습니다.
+*/
+ MSG_ID_E63 = 0xe63,
+/*20190918 to latest
+노점을 여는데 실패하였습니다. 구매노점 개설을 닫아주시기 바랍니다.
+*/
+ MSG_ID_E64 = 0xe64,
+#endif
};
#endif /* MAP_MESSAGES_MAIN_H */
diff --git a/src/map/messages_re.h b/src/map/messages_re.h
index 3a434ca29..4ae3dee1d 100644
--- a/src/map/messages_re.h
+++ b/src/map/messages_re.h
@@ -24,7 +24,7 @@
/* This file is autogenerated, please do not commit manual changes
-Latest version: 20190522
+Latest version: 20190918
*/
enum clif_messages {
@@ -21187,10 +21187,17 @@ AP
상업도/방어도 확인
*/
MSG_ID_E2E = 0xe2e,
-/*20190522 to latest
+/*20190522 to 20190605
관리영지 "%s"(으)로 이동하시겠습니까?
(1회 이동 시 마다 1,000제니가 소모됩니다.
공성전 시간에는 제니의 소모가 100배로 증가합니다.)
+20190619 to 20190626
+관리영지 "%s"(으)로 이동하시겠습니까?
+이동 시 마다 %d제니가 소모됩니다.
+20190703 to latest
+관리영지 "%s"(으)로 이동하시겠습니까?
+이동 시 마다 %d제니가 소모됩니다.
+(공성전 시간에는 %d제니가 소모됩니다.)
*/
MSG_ID_E2F = 0xe2f,
/*20190522 to latest
@@ -21201,11 +21208,238 @@ AP
상업도: %d / %d
*/
MSG_ID_E30 = 0xe30,
-/*20190522 to latest
+/*20190522 to 20190703
공성 영지 내에서는 다른 공성 영지로 이동 할 수 없습니다.
+20190717 to latest
+공성 영지에서는 사용할 수 없는 기능입니다.
*/
MSG_ID_E31 = 0xe31,
#endif
+#if PACKETVER >= 20190619
+/*20190619 to latest
+기본 기능 스킬을 습득하지 않은 캐릭터입니다.
+*/
+ MSG_ID_E32 = 0xe32,
+#endif
+#if PACKETVER >= 20190703
+/*20190703 to latest
+접속하신 IP는 라그나로크 제로 이용이 불가능합니다.
+고객센터 또는 홈페이지로 문의해 주십시오.
+*/
+ MSG_ID_E33 = 0xe33,
+#endif
+#if PACKETVER >= 20190717
+/*20190717 to latest
+탑승/장착 해제
+*/
+ MSG_ID_E34 = 0xe34,
+/*20190717 to latest
+가져오기
+*/
+ MSG_ID_E35 = 0xe35,
+/*20190717 to latest
+직전 노점에 등록된 아이템 정보를 가져옵니다.
+*/
+ MSG_ID_E36 = 0xe36,
+/*20190717 to latest
+서버 이슈로 인해 로그인이 제한되고 있습니다.
+*/
+ MSG_ID_E37 = 0xe37,
+/*20190717 to latest
+메시지
+*/
+ MSG_ID_E38 = 0xe38,
+/*20190717 to latest
++18 이상만 플레이가 가능합니다.
+*/
+ MSG_ID_E39 = 0xe39,
+/*20190717 to latest
+3시간 이상의 게임 플레이를 권장하지 않습니다.
+*/
+ MSG_ID_E3A = 0xe3a,
+/*20190717 to latest
+AP가 부족합니다.
+*/
+ MSG_ID_E3B = 0xe3b,
+#endif
+#if PACKETVER >= 20190731
+/*20190731 to latest
+제련도가 높아서 조합할 수 없습니다.
+*/
+ MSG_ID_E3C = 0xe3c,
+/*20190731 to latest
+제련도가 조합에 필요한 요구치보다 높습니다.
+*/
+ MSG_ID_E3D = 0xe3d,
+/*20190731 to latest
+'카드가 끼워져있거나 인챈트 되어 있습니다.
+*/
+ MSG_ID_E3E = 0xe3e,
+/*20190731 to latest
+∞
+*/
+ MSG_ID_E3F = 0xe3f,
+/*20190731 to latest
+Z
+*/
+ MSG_ID_E40 = 0xe40,
+/*20190731 to latest
+Total : %s Zeny
+*/
+ MSG_ID_E41 = 0xe41,
+#endif
+#if PACKETVER >= 20190821
+/*20190821 to latest
+계정한정판매 등록창
+*/
+ MSG_ID_E42 = 0xe42,
+/*20190821 to latest
+아이템 DB명
+Item DB Name
+*/
+ MSG_ID_E43 = 0xe43,
+/*20190821 to latest
+아이템 DB번호
+Item DB Number
+*/
+ MSG_ID_E44 = 0xe44,
+/*20190821 to latest
+판매 갯수
+Number of Sale
+*/
+ MSG_ID_E45 = 0xe45,
+/*20190821 to latest
+판매 시작시간
+Sale Start Time
+*/
+ MSG_ID_E46 = 0xe46,
+/*20190821 to latest
+판매 종료시간
+*/
+ MSG_ID_E47 = 0xe47,
+/*20190821 to latest
+계정 한정
+*/
+ MSG_ID_E48 = 0xe48,
+/*20190821 to latest
+판매기간 : %d월 %d일 %d시 %d분
+*/
+ MSG_ID_E49 = 0xe49,
+/*20190821 to latest
+구입가능 %d개
+*/
+ MSG_ID_E4A = 0xe4a,
+/*20190821 to latest
+%d개 한정
+*/
+ MSG_ID_E4B = 0xe4b,
+/*20190821 to latest
+>> ItemName : %s / 수량 : %d / 판매기간 : %d월:%d일:%d시:%d분 ~ %d월:%d일:%d시:%d분
+*/
+ MSG_ID_E4C = 0xe4c,
+/*20190821 to latest
+Sold Out
+*/
+ MSG_ID_E4D = 0xe4d,
+/*20190821 to latest
+[%s]은(는) 현재 소환할 수 없는 지역에 있습니다.
+*/
+ MSG_ID_E4E = 0xe4e,
+/*20190821 to latest
+~ %d월 %d일 %d시 %d분
+*/
+ MSG_ID_E4F = 0xe4f,
+/*20190821 to latest
+상품을 더이상 추가할 수 없습니다
+*/
+ MSG_ID_E50 = 0xe50,
+#endif
+#if PACKETVER >= 20190828
+/*20190828 to latest
+장착 중인 아이템은 교환할 수 없습니다. 장착을 해제한 뒤 시도해 주시길 바랍니다.
+*/
+ MSG_ID_E51 = 0xe51,
+#endif
+#if PACKETVER >= 20190904
+/*20190904 to latest
+길드 창고 이용 중엔 캐릭터 선택창으로 이동 할 수 없습니다.
+*/
+ MSG_ID_E52 = 0xe52,
+/*20190904 to latest
+아이템 태그가 포함되어 있어 사용할 수 없습니다.
+*/
+ MSG_ID_E53 = 0xe53,
+/*20190904 to latest
+Monster
+*/
+ MSG_ID_E54 = 0xe54,
+/*20190904 to latest
+Unknown
+*/
+ MSG_ID_E55 = 0xe55,
+/*20190904 to latest
+Undead
+*/
+ MSG_ID_E56 = 0xe56,
+/*20190904 to latest
+Animal
+*/
+ MSG_ID_E57 = 0xe57,
+/*20190904 to latest
+Plant
+*/
+ MSG_ID_E58 = 0xe58,
+/*20190904 to latest
+Insect
+*/
+ MSG_ID_E59 = 0xe59,
+/*20190904 to latest
+Marine
+*/
+ MSG_ID_E5A = 0xe5a,
+/*20190904 to latest
+Devil
+*/
+ MSG_ID_E5B = 0xe5b,
+/*20190904 to latest
+Human
+*/
+ MSG_ID_E5C = 0xe5c,
+/*20190904 to latest
+Angel
+*/
+ MSG_ID_E5D = 0xe5d,
+/*20190904 to latest
+Dragon
+*/
+ MSG_ID_E5E = 0xe5e,
+#endif
+#if PACKETVER >= 20190918
+/*20190918 to latest
+Balance: %s %c
+*/
+ MSG_ID_E5F = 0xe5f,
+/*20190918 to latest
+ ^ff0000본 아이템을 구매 후 7일 이내에는 청약 철회가 가능합니다. 다만, 7일이 지났거나 아이템을 개봉하시면 청약 철회 대상에서 제외 됩니다.또한 구매시 사용된 무료캐시는 청약철회시 반환되지 않습니다.^000000 정말로 아이템을 구매하시겠습니까? 구매하실 경우 %s캐시가 차감됩니다.
+*/
+ MSG_ID_E60 = 0xe60,
+/*20190918 to latest
+ ^ff0000본 아이템을 구매 후 7일 이내에는 청약 철회가 가능합니다. 다만, 7일이 지났거나 아이템을 개봉하시면 청약 철회 대상에서 제외 됩니다.또한 구매시 사용된 무료캐시는 청약철회시 반환되지 않습니다.^000000 정말로 아이템을 구매하시겠습니까? 구매하실 경우 일반 %s캐시, 무료 %s캐시가 차감됩니다.
+*/
+ MSG_ID_E61 = 0xe61,
+/*20190918 to latest
+호출이 거부되었습니다.
+*/
+ MSG_ID_E62 = 0xe62,
+/*20190918 to latest
+구매 한도액은 소지액을 초과할 수 없습니다.
+*/
+ MSG_ID_E63 = 0xe63,
+/*20190918 to latest
+노점을 여는데 실패하였습니다. 구매노점 개설을 닫아주시기 바랍니다.
+*/
+ MSG_ID_E64 = 0xe64,
+#endif
};
#endif /* MAP_MESSAGES_RE_H */
diff --git a/src/map/messages_zero.h b/src/map/messages_zero.h
index 43f8b4f31..039d215ac 100644
--- a/src/map/messages_zero.h
+++ b/src/map/messages_zero.h
@@ -24,7 +24,7 @@
/* This file is autogenerated, please do not commit manual changes
-Latest version: 20190515
+Latest version: 20190918
*/
enum clif_messages {
@@ -17793,10 +17793,14 @@ AP
상업도/방어도 확인
*/
MSG_ID_E2E = 0xe2e,
-/*20190515 to latest
+/*20190515 to 20190605
관리영지 "%s"(으)로 이동하시겠습니까?
(1회 이동 시 마다 1,000제니가 소모됩니다.
공성전 시간에는 제니의 소모가 100배로 증가합니다.)
+20190626 to latest
+관리영지 "%s"(으)로 이동하시겠습니까?
+이동 시 마다 %d제니가 소모됩니다.
+(공성전 시간에는 %d제니가 소모됩니다.)
*/
MSG_ID_E2F = 0xe2f,
/*20190515 to latest
@@ -17807,11 +17811,240 @@ AP
상업도: %d / %d
*/
MSG_ID_E30 = 0xe30,
-/*20190515 to latest
+/*20190515 to 20190717
공성 영지 내에서는 다른 공성 영지로 이동 할 수 없습니다.
+20190724 to latest
+공성 영지에서는 사용할 수 없는 기능입니다.
*/
MSG_ID_E31 = 0xe31,
#endif
+#if PACKETVER >= 20190626
+/*20190626 to latest
+기본 기능 스킬을 습득하지 않은 캐릭터입니다.
+*/
+ MSG_ID_E32 = 0xe32,
+/*20190626 to latest
+접속하신 IP는 라그나로크 제로 이용이 불가능합니다.
+고객센터 또는 홈페이지로 문의해 주십시오.
+*/
+ MSG_ID_E33 = 0xe33,
+#endif
+#if PACKETVER >= 20190709
+/*20190709 to latest
+탑승/장착 해제
+*/
+ MSG_ID_E34 = 0xe34,
+/*20190709 to latest
+가져오기
+*/
+ MSG_ID_E35 = 0xe35,
+/*20190709 to latest
+직전 노점에 등록된 아이템 정보를 가져옵니다.
+*/
+ MSG_ID_E36 = 0xe36,
+/*20190709 to latest
+서버 이슈로 인해 로그인이 제한되고 있습니다.
+*/
+ MSG_ID_E37 = 0xe37,
+/*20190709 to latest
+메시지
+*/
+ MSG_ID_E38 = 0xe38,
+/*20190709 to latest
++18 이상만 플레이가 가능합니다.
+*/
+ MSG_ID_E39 = 0xe39,
+/*20190709 to latest
+3시간 이상의 게임 플레이를 권장하지 않습니다.
+*/
+ MSG_ID_E3A = 0xe3a,
+/*20190709 to latest
+AP가 부족합니다.
+*/
+ MSG_ID_E3B = 0xe3b,
+#endif
+#if PACKETVER >= 20190724
+/*20190724 to latest
+제련도가 높아서 조합할 수 없습니다.
+*/
+ MSG_ID_E3C = 0xe3c,
+/*20190724 to latest
+제련도가 조합에 필요한 요구치보다 높습니다.
+*/
+ MSG_ID_E3D = 0xe3d,
+/*20190724 to latest
+'카드가 끼워져있거나 인챈트 되어 있습니다.
+*/
+ MSG_ID_E3E = 0xe3e,
+#endif
+#if PACKETVER >= 20190814
+/*20190814 to latest
+∞
+*/
+ MSG_ID_E3F = 0xe3f,
+/*20190814 to latest
+Z
+*/
+ MSG_ID_E40 = 0xe40,
+/*20190814 to latest
+Total : %s Zeny
+*/
+ MSG_ID_E41 = 0xe41,
+/*20190814 to latest
+계정한정판매 등록창
+*/
+ MSG_ID_E42 = 0xe42,
+/*20190814 to latest
+아이템 DB명
+Item DB Name
+*/
+ MSG_ID_E43 = 0xe43,
+/*20190814 to latest
+아이템 DB번호
+Item DB Number
+*/
+ MSG_ID_E44 = 0xe44,
+/*20190814 to latest
+판매 갯수
+Number of Sale
+*/
+ MSG_ID_E45 = 0xe45,
+/*20190814 to latest
+판매 시작시간
+Sale Start Time
+*/
+ MSG_ID_E46 = 0xe46,
+/*20190814 to latest
+판매 종료시간
+*/
+ MSG_ID_E47 = 0xe47,
+/*20190814 to latest
+계정 한정
+*/
+ MSG_ID_E48 = 0xe48,
+/*20190814 to 20190814
+판매기간 : %d월 %d일 ~ %d월 %d일
+20190828 to latest
+판매기간 : %d월 %d일 %d시 %d분
+*/
+ MSG_ID_E49 = 0xe49,
+/*20190814 to latest
+구입가능 %d개
+*/
+ MSG_ID_E4A = 0xe4a,
+/*20190814 to latest
+%d개 한정
+*/
+ MSG_ID_E4B = 0xe4b,
+/*20190814 to latest
+>> ItemName : %s / 수량 : %d / 판매기간 : %d월:%d일:%d시:%d분 ~ %d월:%d일:%d시:%d분
+*/
+ MSG_ID_E4C = 0xe4c,
+/*20190814 to latest
+Sold Out
+*/
+ MSG_ID_E4D = 0xe4d,
+/*20190814 to latest
+[%s]은(는) 현재 소환할 수 없는 지역에 있습니다.
+*/
+ MSG_ID_E4E = 0xe4e,
+#endif
+#if PACKETVER >= 20190828
+/*20190828 to latest
+~ %d월 %d일 %d시 %d분
+*/
+ MSG_ID_E4F = 0xe4f,
+/*20190828 to latest
+상품을 더이상 추가할 수 없습니다
+*/
+ MSG_ID_E50 = 0xe50,
+/*20190828 to latest
+장착 중인 아이템은 교환할 수 없습니다. 장착을 해제한 뒤 시도해 주시길 바랍니다.
+*/
+ MSG_ID_E51 = 0xe51,
+#endif
+#if PACKETVER >= 20190911
+/*20190911 to latest
+길드 창고 이용 중엔 캐릭터 선택창으로 이동 할 수 없습니다.
+*/
+ MSG_ID_E52 = 0xe52,
+/*20190911 to latest
+아이템 태그가 포함되어 있어 사용할 수 없습니다.
+*/
+ MSG_ID_E53 = 0xe53,
+/*20190911 to latest
+Monster
+*/
+ MSG_ID_E54 = 0xe54,
+/*20190911 to latest
+Unknown
+*/
+ MSG_ID_E55 = 0xe55,
+/*20190911 to latest
+Undead
+*/
+ MSG_ID_E56 = 0xe56,
+/*20190911 to latest
+Animal
+*/
+ MSG_ID_E57 = 0xe57,
+/*20190911 to latest
+Plant
+*/
+ MSG_ID_E58 = 0xe58,
+/*20190911 to latest
+Insect
+*/
+ MSG_ID_E59 = 0xe59,
+/*20190911 to latest
+Marine
+*/
+ MSG_ID_E5A = 0xe5a,
+/*20190911 to latest
+Devil
+*/
+ MSG_ID_E5B = 0xe5b,
+/*20190911 to latest
+Human
+*/
+ MSG_ID_E5C = 0xe5c,
+/*20190911 to latest
+Angel
+*/
+ MSG_ID_E5D = 0xe5d,
+/*20190911 to latest
+Dragon
+*/
+ MSG_ID_E5E = 0xe5e,
+/*20190911 to latest
+Balance: %s %c
+*/
+ MSG_ID_E5F = 0xe5f,
+/*20190911 to latest
+ ^ff0000본 아이템을 구매 후 7일 이내에는 청약 철회가 가능합니다. 다만, 7일이 지났거나 아이템을 개봉하시면 청약 철회 대상에서 제외 됩니다.또한 구매시 사용된 무료캐시는 청약철회시 반환되지 않습니다.^000000 정말로 아이템을 구매하시겠습니까? 구매하실 경우 %s캐시가 차감됩니다.
+*/
+ MSG_ID_E60 = 0xe60,
+/*20190911 to latest
+ ^ff0000본 아이템을 구매 후 7일 이내에는 청약 철회가 가능합니다. 다만, 7일이 지났거나 아이템을 개봉하시면 청약 철회 대상에서 제외 됩니다.또한 구매시 사용된 무료캐시는 청약철회시 반환되지 않습니다.^000000 정말로 아이템을 구매하시겠습니까? 구매하실 경우 일반 %s캐시, 무료 %s캐시가 차감됩니다.
+*/
+ MSG_ID_E61 = 0xe61,
+/*20190911 to 20190911
+호출이 거부되었습니다.
+20190918 to latest
+[%s]의 호출이 거부되었습니다.
+*/
+ MSG_ID_E62 = 0xe62,
+#endif
+#if PACKETVER >= 20190918
+/*20190918 to latest
+구매 한도액은 소지액을 초과할 수 없습니다.
+*/
+ MSG_ID_E63 = 0xe63,
+/*20190918 to latest
+노점을 여는데 실패하였습니다. 구매노점 개설을 닫아주시기 바랍니다.
+*/
+ MSG_ID_E64 = 0xe64,
+#endif
};
#endif /* MAP_MESSAGES_ZERO_H */
diff --git a/src/map/mob.c b/src/map/mob.c
index 8511f8523..215f82f5f 100644
--- a/src/map/mob.c
+++ b/src/map/mob.c
@@ -239,6 +239,14 @@ static void mvptomb_destroy(struct mob_data *md)
m = nd->bl.m;
+ struct s_mapiterator *iter = mapit_geteachpc();
+ for (struct map_session_data *sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); sd = BL_UCAST(BL_PC, mapit->next(iter))) {
+ if (sd->npc_id == nd->bl.id) {
+ sd->state.npc_unloaded = 1;
+ }
+ }
+ mapit->free(iter);
+
clif->clearunit_area(&nd->bl,CLR_OUTSIGHT);
map->delblock(&nd->bl);
@@ -471,7 +479,7 @@ static bool mob_ksprotected(struct block_list *src, struct block_list *target)
// Message to KS
if( DIFF_TICK(sd->ks_floodprotect_tick, tick) <= 0 )
{
- sprintf(output, "[KS Warning!! - Owner : %s]", pl_sd->status.name);
+ sprintf(output, msg_sd(sd, 890), pl_sd->status.name); // [KS Warning!! - Owner : %s]
clif_disp_onlyself(sd, output);
sd->ks_floodprotect_tick = tick + 2000;
@@ -480,7 +488,7 @@ static bool mob_ksprotected(struct block_list *src, struct block_list *target)
// Message to Owner
if( DIFF_TICK(pl_sd->ks_floodprotect_tick, tick) <= 0 )
{
- sprintf(output, "[Watch out! %s is trying to KS you!]", sd->status.name);
+ sprintf(output, msg_sd(pl_sd, 891), sd->status.name); // [Watch out! %s is trying to KS you!]
clif_disp_onlyself(pl_sd, output);
pl_sd->ks_floodprotect_tick = tick + 2000;
@@ -2570,7 +2578,7 @@ static int mob_dead(struct mob_data *md, struct block_list *src, int type)
// Announce first, or else ditem will be freed. [Lance]
// By popular demand, use base drop rate for autoloot code. [Skotlex]
- mob->item_drop(md, dlist, ditem, 0, md->db->dropitem[i].p, homkillonly);
+ mob->item_drop(md, dlist, ditem, 0, battle_config.autoloot_adjust ? drop_rate : md->db->dropitem[i].p, homkillonly);
}
// Ore Discovery [Celest]
@@ -4604,6 +4612,7 @@ static int mob_read_db_sub(struct config_setting_t *mobt, int n, const char *sou
* AttackMotion: attack motion
* DamageMotion: damage motion
* MvpExp: mvp experience
+ * DamageTakenRate: damage taken rate
* MvpDrops: {
* AegisName: chance
* ...
@@ -4837,6 +4846,12 @@ static int mob_read_db_sub(struct config_setting_t *mobt, int n, const char *sou
}
}
+ if (mob->lookup_const(mobt, "DamageTakenRate", &i32) && i32 >= 0) {
+ md.dmg_taken_rate = cap_value(i32, 1, INT_MAX);
+ } else if (!inherit) {
+ md.dmg_taken_rate = 100;
+ }
+
mob->read_db_additional_fields(&md, mobt, n, source);
return mob->db_validate_entry(&md, n, source);
@@ -4952,7 +4967,7 @@ static int mob_read_libconfig(const char *filename, bool ignore_missing)
}
}
libconfig->destroy(&mob_db_conf);
- ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", count, filename);
+ ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", count, filepath);
return count;
}
@@ -5075,7 +5090,7 @@ static int mob_read_randommonster(void)
summon[i].qty = 1;
}
fclose(fp);
- ShowStatus("Done reading '"CL_WHITE"%u"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n",count,mobfile[i]);
+ ShowStatus("Done reading '"CL_WHITE"%u"CL_RESET"' entries in '"CL_WHITE"%s/%s"CL_RESET"'.\n",count, map->db_path, mobfile[i]);
}
return 0;
}
@@ -5192,7 +5207,7 @@ static void mob_readchatdb(void)
count++;
}
fclose(fp);
- ShowStatus("Done reading '"CL_WHITE"%"PRIu32""CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", count, arc);
+ ShowStatus("Done reading '"CL_WHITE"%"PRIu32""CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", count, filepath);
}
/*==========================================
@@ -5547,6 +5562,29 @@ static int mob_final_ratio_sub(union DBKey key, struct DBData *data, va_list ap)
return 0;
}
+static int mob_reload_sub_mob(struct mob_data *md, va_list args)
+{
+ nullpo_ret(md);
+ md->db = mob_db(md->class_);
+
+ status_calc_mob(md, SCO_FIRST);
+
+ // If the view data was not overwritten manually
+ if (md->vd != NULL) {
+ // Get the new view data from the mob database
+ md->vd = mob_get_viewdata(md->class_);
+
+ // If they are spawned right now
+ if (md->bl.prev != NULL) {
+ // Respawn all mobs on client side so that they are displayed correctly(if their view id changed)
+ clif->clearunit_area(&md->bl, CLR_OUTSIGHT);
+ clif->spawn(&md->bl);
+ }
+ }
+
+ return 0;
+}
+
static void mob_reload(void)
{
int i;
@@ -5570,6 +5608,7 @@ static void mob_reload(void)
mob->destroy_drop_groups();
mob->load(false);
+ map->foreachmob(mob->reload_sub_mob);
}
/**
@@ -5726,6 +5765,7 @@ void mob_defaults(void)
/* */
mob->reload = mob_reload;
+ mob->reload_sub_mob = mob_reload_sub_mob;
mob->init = do_init_mob;
mob->final = do_final_mob;
/* */
diff --git a/src/map/mob.h b/src/map/mob.h
index b63efd272..a48c4cc74 100644
--- a/src/map/mob.h
+++ b/src/map/mob.h
@@ -206,6 +206,7 @@ struct mob_db {
unsigned int option;
int summonper[MAX_RANDOMMONSTER];
int maxskill;
+ int dmg_taken_rate;
struct mob_skill skill[MAX_MOBSKILL];
struct spawn_info spawn[10];
struct hplugin_data_store *hdata; ///< HPM Plugin Data Store
@@ -244,6 +245,7 @@ struct mob_data {
unsigned int dmg;
unsigned int flag : 2; //0: Normal. 1: Homunc exp. 2: Pet exp
} dmglog[DAMAGELOG_SIZE];
+ int dmg_taken_rate;
struct spawn_data *spawn; //Spawn data.
int spawn_timer; //Required for Convex Mirror
struct item *lootitem;
@@ -488,6 +490,7 @@ struct mob_interface {
int (*init) (bool mimimal);
int (*final) (void);
void (*reload) (void);
+ int (*reload_sub_mob) (struct mob_data *md, va_list args);
/* */
struct mob_db* (*db) (int index);
struct mob_chat* (*chat) (short id);
diff --git a/src/map/npc.c b/src/map/npc.c
index c7fc7e133..868b8711a 100644
--- a/src/map/npc.c
+++ b/src/map/npc.c
@@ -1258,6 +1258,9 @@ static void run_tomb(struct map_session_data *sd, struct npc_data *nd)
char time[10];
nullpo_retv(nd);
+
+ sd->npc_id = nd->bl.id;
+
strftime(time, sizeof(time), "%H:%M", localtime(&nd->u.tomb.kill_time));
// TODO: Find exact color?
@@ -1349,8 +1352,10 @@ static int npc_scriptcont(struct map_session_data *sd, int id, bool closing)
return 1;
}
- if(id != npc->fake_nd->bl.id) { // Not item script
- if ((npc->checknear(sd,target)) == NULL){
+ if (id != npc->fake_nd->bl.id) { // Not item script
+ if (sd->state.npc_unloaded != 0) {
+ sd->state.npc_unloaded = 0;
+ } else if ((npc->checknear(sd,target)) == NULL) {
ShowWarning("npc_scriptcont: failed npc->checknear test.\n");
return 1;
}
@@ -1371,8 +1376,10 @@ static int npc_scriptcont(struct map_session_data *sd, int id, bool closing)
if( sd->progressbar.npc_id && DIFF_TICK(sd->progressbar.timeout,timer->gettick()) > 0 )
return 1;
- if( !sd->st )
+ if( !sd->st ) {
+ sd->npc_id = 0;
return 1;
+ }
if( closing && sd->st->state == CLOSE )
sd->st->state = END;
@@ -2115,7 +2122,7 @@ static int npc_buylist(struct map_session_data *sd, struct itemlist *item_list)
/**
* Processes incoming npc market purchase list
**/
-static int npc_market_buylist(struct map_session_data *sd, struct itemlist *item_list)
+static enum market_buy_result npc_market_buylist(struct map_session_data *sd, struct itemlist *item_list)
{
struct npc_data* nd;
struct npc_item_list *shop = NULL;
@@ -2129,7 +2136,7 @@ static int npc_market_buylist(struct map_session_data *sd, struct itemlist *item
nd = npc->checknear(sd,map->id2bl(sd->npc_shopid));
if (nd == NULL || nd->subtype != SCRIPT || VECTOR_LENGTH(*item_list) == 0 || !nd->u.scr.shop || nd->u.scr.shop->type != NST_MARKET)
- return 1;
+ return MARKET_BUY_RESULT_ERROR;
shop = nd->u.scr.shop->item;
shop_size = nd->u.scr.shop->items;
@@ -2149,18 +2156,18 @@ static int npc_market_buylist(struct map_session_data *sd, struct itemlist *item
entry->id == itemdb_viewid(shop[j].nameid) //item_avail replacement
);
if (j == shop_size) /* TODO find official response for this */
- return 1; // no such item in shop
+ return MARKET_BUY_RESULT_ERROR; // no such item in shop
entry->id = shop[j].nameid; //item_avail replacement
if (entry->amount > (int)shop[j].qty)
- return 1;
+ return MARKET_BUY_RESULT_AMOUNT_TOO_BIG;
value = shop[j].value;
npc_market_qty[i] = j;
if (!itemdb->exists(entry->id)) /* TODO find official response for this */
- return 1; // item no longer in itemdb
+ return MARKET_BUY_RESULT_ERROR; // item no longer in itemdb
if (!itemdb->isstackable(entry->id) && entry->amount > 1) {
//Exploit? You can't buy more than 1 of equipment types o.O
@@ -2184,13 +2191,13 @@ static int npc_market_buylist(struct map_session_data *sd, struct itemlist *item
}
if (z > sd->status.zeny) /* TODO find official response for this */
- return 1; // Not enough Zeny
+ return MARKET_BUY_RESULT_NO_ZENY; // Not enough Zeny
if( w + sd->weight > sd->max_weight ) /* TODO find official response for this */
- return 1; // Too heavy
+ return MARKET_BUY_RESULT_OVER_WEIGHT; // Too heavy
if( pc->inventoryblank(sd) < new_ ) /* TODO find official response for this */
- return 1; // Not enough space to store items
+ return MARKET_BUY_RESULT_OUT_OF_SPACE; // Not enough space to store items
pc->payzeny(sd,(int)z,LOG_TYPE_NPC, NULL);
@@ -2200,7 +2207,7 @@ static int npc_market_buylist(struct map_session_data *sd, struct itemlist *item
j = npc_market_qty[i];
if (entry->amount > (int)shop[j].qty) /* wohoo someone tampered with the packet. */
- return 1;
+ return MARKET_BUY_RESULT_AMOUNT_TOO_BIG;
shop[j].qty -= entry->amount;
@@ -2218,7 +2225,7 @@ static int npc_market_buylist(struct map_session_data *sd, struct itemlist *item
}
}
- return 0;
+ return MARKET_BUY_RESULT_SUCCESS;
}
/**
@@ -4368,8 +4375,7 @@ static const char *npc_parse_mapflag(const char *w1, const char *w2, const char
if (!strcmpi(w3, "nosave")) {
char savemap[32];
int savex, savey;
- if (state == 0)
- ; //Map flag disabled.
+ if (state == 0); //Map flag disabled.
else if (w4 && !strcmpi(w4, "SavePoint")) {
map->list[m].save.map = 0;
map->list[m].save.x = -1;
@@ -4662,7 +4668,8 @@ static const char *npc_parse_mapflag(const char *w1, const char *w2, const char
}
}
- if( modifier[0] == '\0' ) {
+ if (state == 0); //Map flag disabled.
+ else if (modifier[0] == '\0') {
ShowWarning("npc_parse_mapflag: Missing 5th param for 'adjust_unit_duration' flag! removing flag from %s in file '%s', line '%d'.\n", map->list[m].name, filepath, strline(buffer,start-buffer));
if (retval) *retval = EXIT_FAILURE;
} else if( !( skill_id = skill->name2id(skill_name) ) || !skill->get_unit_id( skill->name2id(skill_name), 0) ) {
@@ -4721,7 +4728,8 @@ static const char *npc_parse_mapflag(const char *w1, const char *w2, const char
}
}
- if( modifier[0] == '\0' ) {
+ if (state == 0); //Map flag disabled.
+ else if (modifier[0] == '\0') {
ShowWarning("npc_parse_mapflag: Missing 5th param for 'adjust_skill_damage' flag! removing flag from %s in file '%s', line '%d'.\n", map->list[m].name, filepath, strline(buffer,start-buffer));
if (retval) *retval = EXIT_FAILURE;
} else if( !( skill_id = skill->name2id(skill_name) ) ) {
diff --git a/src/map/npc.h b/src/map/npc.h
index 2819cbd87..5ff63532d 100644
--- a/src/map/npc.h
+++ b/src/map/npc.h
@@ -34,6 +34,8 @@ struct hplugin_data_store;
struct itemlist; // map/itemdb.h
struct view_data;
+enum market_buy_result;
+
enum npc_parse_options {
NPO_NONE = 0x0,
NPO_ONINIT = 0x1,
@@ -149,7 +151,7 @@ enum actor_classes {
#define MAX_NPC_CLASS 1000
// New NPC range
#define MAX_NPC_CLASS2_START 10001
-#define MAX_NPC_CLASS2_END 10310
+#define MAX_NPC_CLASS2_END 10344
//Script NPC events.
enum npce_event {
@@ -310,7 +312,7 @@ struct npc_interface {
void (*trader_count_funds) (struct npc_data *nd, struct map_session_data *sd);
bool (*trader_pay) (struct npc_data *nd, struct map_session_data *sd, int price, int points);
void (*trader_update) (int master);
- int (*market_buylist) (struct map_session_data *sd, struct itemlist *item_list);
+ enum market_buy_result (*market_buylist) (struct map_session_data *sd, struct itemlist *item_list);
int (*barter_buylist) (struct map_session_data *sd, struct barteritemlist *item_list);
bool (*trader_open) (struct map_session_data *sd, struct npc_data *nd);
void (*market_fromsql) (void);
diff --git a/src/map/packets.h b/src/map/packets.h
index 45b47c921..8fb47eb7a 100644
--- a/src/map/packets.h
+++ b/src/map/packets.h
@@ -1949,9 +1949,22 @@ packet(0x96e,clif->ackmergeitems);
packet(0x0b1c,clif->pPing);
#endif
-#if PACKETVER_MAIN_NUM >= 20190522 || PACKETVER_RE_NUM >= 20190508
+#if PACKETVER_MAIN_NUM >= 20190522 || PACKETVER_RE_NUM >= 20190508 || PACKETVER_ZERO_NUM >= 20190605
packet(0x0b21,clif->pHotkey2);
packet(0x0b22,clif->pHotkeyRowShift2); // CZ_SHORTCUTKEYBAR_ROTATE
#endif
+#if PACKETVER_MAIN_NUM >= 20190522 || PACKETVER_RE_NUM >= 20190522 || PACKETVER_ZERO_NUM >= 20190515
+ packet(0x0b28,clif->pGuildCastleTeleportRequest);
+ packet(0x0b2c,clif->pGuildCastleInfoRequest);
+#endif
+
+#if PACKETVER >= 20160302
+ packet(0x0a4f,clif->plapineDdukDdak_ack);
+#endif
+
+#if PACKETVER >= 20160504
+ packet(0x0a70,clif->plapineDdukDdak_close);
+#endif
+
#endif /* MAP_PACKETS_H */
diff --git a/src/map/packets_keys_main.h b/src/map/packets_keys_main.h
index 6c1cc151a..b7f25a83d 100644
--- a/src/map/packets_keys_main.h
+++ b/src/map/packets_keys_main.h
@@ -37,7 +37,7 @@
packetKeys(0x49357d72,0x22c370a1,0x5f836591);
#endif
-// 2010-11-23aRagexeRE, 2010-11-24aRagexeRE, 2010-11-24bRagexeRE, 2010-11-25aRagexeRE, 2010-11-26aRagexeRE, 2010-11-30aRagexeRE, 2010-12-07aRagexeRE, 2010-12-14aRagexeRE, 2010-12-21aRagexeRE, 2010-12-23aRagexeRE, 2010-12-28aRagexeRE, 2011-01-04aRagexeRE, 2011-01-05aRagexeRE, 2011-01-11aRagexeRE, 2011-01-18aRagexeRE, 2011-01-25aRagexeRE, 2011-01-26aRagexeRE, 2011-01-26bRagexeRE, 2011-01-31aRagexeRE, 2011-01-31bRagexeRE, 2011-01-31cRagexeRE, 2011-02-08aRagexeRE, 2011-02-15aRagexeRE, 2011-02-22aRagexeRE, 2011-02-23aRagexeRE, 2011-02-23bRagexeRE, 2011-02-24aRagexeRE, 2011-02-25aRagexeRE, 2011-02-28aRagexeRE, 2011-03-08aRagexeRE, 2011-03-09aRagexeRE, 2011-03-09bRagexeRE, 2011-03-09cRagexeRE, 2011-03-09dRagexeRE, 2011-03-15aRagexeRE, 2011-03-22aRagexeRE, 2011-03-29aRagexeRE, 2011-03-30aRagexeRE, 2011-03-30cRagexeRE, 2011-04-05aRagexeRE, 2011-04-12aRagexeRE, 2011-04-19aRagexeRE, 2011-04-20aRagexeRE, 2011-04-26aRagexeRE, 2011-04-27aRagexeRE, 2011-05-03aRagexeRE, 2011-05-11aRagexeRE, 2011-05-17bRagexeRE, 2011-05-24aRagexeRE, 2011-05-26aRagexeRE, 2011-05-31aRagexeRE, 2011-06-07aRagexeRE, 2011-06-08aRagexeRE, 2011-06-08bRagexeRE, 2011-06-08cRagexeRE, 2011-06-09aRagexeRE, 2011-06-14bRagexeRE, 2011-06-22aRagexeRE, 2011-06-28aRagexeRE, 2011-07-06aRagexeRE, 2011-07-13aRagexeRE, 2011-07-13bRagexeRE, 2011-07-13cRagexeRE, 2011-07-19aRagexeRE, 2011-07-26aRagexeRE, 2011-08-03aRagexeRE, 2011-08-03bRagexeRE, 2011-08-10aRagexeRE, 2013-12-23aRagexeRE, 2014-05-08aRagexe, 2014-05-08aRagexeRE, 2014-06-11eRagexe, 2015-02-25hRagexe, 2018-03-15aRagexe, 2018-03-21aRagexe, 2018-03-21aRagexeRE, 2018-03-28bRagexe, 2018-03-28bRagexeRE, 2018-04-04bRagexe, 2018-04-04cRagexeRE, 2018-04-18aRagexe, 2018-04-18bRagexeRE, 2018-04-25cRagexe, 2018-04-25cRagexeRE, 2018-05-02bRagexe, 2018-05-02bRagexeRE, 2018-05-02dRagexeRE, 2018-05-09aRagexe, 2018-05-16cRagexe, 2018-05-16cRagexeRE, 2018-05-23aRagexe, 2018-05-23aRagexeRE, 2018-05-30aRagexe, 2018-05-30bRagexeRE, 2018-05-30cRagexeRE, 2018-06-05bRagexe, 2018-06-05bRagexeRE, 2018-06-12aRagexeRE, 2018-06-12bRagexeRE, 2018-06-20cRagexe, 2018-06-20dRagexeRE, 2018-06-20eRagexe, 2018-06-20eRagexeRE, 2018-06-21aRagexe, 2018-06-21aRagexeRE, 2018-07-04aRagexe, 2018-07-04aRagexeRE, 2018-07-11aRagexeRE, 2018-07-18bRagexe, 2018-07-18bRagexeRE, 2018-07-18bRagexeRE1, 2018-07-18cRagexe, 2018-07-18cRagexeRE, 2018-08-01cRagexe, 2018-08-01cRagexeRE, 2018-08-08bRagexe, 2018-08-08bRagexeRE, 2018-08-22cRagexe, 2018-08-22cRagexeRE, 2018-08-29aRagexe, 2018-08-29aRagexeRE, 2018-08-29bRagexeRE, 2018-08-31aRagexe, 2018-09-12dRagexe, 2018-09-12dRagexeRE, 2018-09-19aRagexe, 2018-09-19aRagexeRE, 2018-10-02aRagexe, 2018-10-02aRagexeRE, 2018-10-02bRagexe, 2018-10-02bRagexeRE, 2018-10-17_02aRagexe, 2018-10-17_02aRagexeRE, 2018-10-17_03aRagexe, 2018-10-17_03aRagexeRE, 2018-10-17bRagexe, 2018-10-17bRagexeRE, 2018-10-24bRagexe, 2018-10-31aRagexe, 2018-10-31bRagexe, 2018-10-31cRagexeRE, 2018-11-07aRagexe, 2018-11-07aRagexeRE, 2018-11-14cRagexe, 2018-11-14cRagexeRE, 2018-11-14dRagexe, 2018-11-14dRagexeRE, 2018-11-21bRagexe, 2018-11-21cRagexeRE, 2018-11-28aRagexe, 2018-11-28aRagexeRE, 2018-11-28bRagexe, 2018-11-28cRagexe, 2018-12-05aRagexe, 2018-12-05bRagexeRE, 2018-12-12aRagexe, 2018-12-12aRagexeRE, 2018-12-12bRagexe, 2018-12-12bRagexeRE, 2018-12-19bRagexe, 2018-12-19bRagexeRE, 2018-12-26aRagexe, 2018-12-26aRagexeRE, 2019-01-09aRagexe, 2019-01-09bRagexeRE, 2019-01-16bRagexe, 2019-01-16bRagexeRE, 2019-01-16cRagexe, 2019-01-16cRagexeRE, 2019-01-23dRagexe, 2019-01-23dRagexeRE, 2019-02-13IRagexeRE, 2019-02-13bRagexe, 2019-02-13eRagexe, 2019-02-20aRagexeRE, 2019-02-27aRagexe, 2019-02-27bRagexeRE, 2019-02-28aRagexe, 2019-02-28aRagexeRE, 2019-03-06bRagexe, 2019-03-06bRagexeRE, 2019-03-06cRagexe, 2019-03-06cRagexeRE, 2019-03-13aRagexe, 2019-03-20aRagexe, 2019-03-20aRagexeRE, 2019-03-22aRagexe, 2019-03-22aRagexeRE, 2019-03-27bRagexe, 2019-03-27bRagexeRE, 2019-04-03aRagexe, 2019-04-03bRagexeRE, 2019-04-03cRagexeRE, 2019-04-17aRagexe, 2019-04-17cRagexeRE, 2019-04-18aRagexe, 2019-04-18aRagexeRE, 2019-05-08cRagexe, 2019-05-08dRagexeRE, 2019-05-08eRagexeRE, 2019-05-22bRagexe, 2019-05-22bRagexeRE, 2019-05-22cRagexe, 2019-05-22cRagexeRE, 2019-05-23aRagexe, 2019-05-29aRagexe, 2019-05-29bRagexeRE, 2019-05-29cRagexe, 2019-05-29cRagexeRE, 2019-05-30aRagexe, 2019-05-30aRagexeRE
+// 2010-11-23aRagexeRE, 2010-11-24aRagexeRE, 2010-11-24bRagexeRE, 2010-11-25aRagexeRE, 2010-11-26aRagexeRE, 2010-11-30aRagexeRE, 2010-12-07aRagexeRE, 2010-12-14aRagexeRE, 2010-12-21aRagexeRE, 2010-12-23aRagexeRE, 2010-12-28aRagexeRE, 2011-01-04aRagexeRE, 2011-01-05aRagexeRE, 2011-01-11aRagexeRE, 2011-01-18aRagexeRE, 2011-01-25aRagexeRE, 2011-01-26aRagexeRE, 2011-01-26bRagexeRE, 2011-01-31aRagexeRE, 2011-01-31bRagexeRE, 2011-01-31cRagexeRE, 2011-02-08aRagexeRE, 2011-02-15aRagexeRE, 2011-02-22aRagexeRE, 2011-02-23aRagexeRE, 2011-02-23bRagexeRE, 2011-02-24aRagexeRE, 2011-02-25aRagexeRE, 2011-02-28aRagexeRE, 2011-03-08aRagexeRE, 2011-03-09aRagexeRE, 2011-03-09bRagexeRE, 2011-03-09cRagexeRE, 2011-03-09dRagexeRE, 2011-03-15aRagexeRE, 2011-03-22aRagexeRE, 2011-03-29aRagexeRE, 2011-03-30aRagexeRE, 2011-03-30cRagexeRE, 2011-04-05aRagexeRE, 2011-04-12aRagexeRE, 2011-04-19aRagexeRE, 2011-04-20aRagexeRE, 2011-04-26aRagexeRE, 2011-04-27aRagexeRE, 2011-05-03aRagexeRE, 2011-05-11aRagexeRE, 2011-05-17bRagexeRE, 2011-05-24aRagexeRE, 2011-05-26aRagexeRE, 2011-05-31aRagexeRE, 2011-06-07aRagexeRE, 2011-06-08aRagexeRE, 2011-06-08bRagexeRE, 2011-06-08cRagexeRE, 2011-06-09aRagexeRE, 2011-06-14bRagexeRE, 2011-06-22aRagexeRE, 2011-06-28aRagexeRE, 2011-07-06aRagexeRE, 2011-07-13aRagexeRE, 2011-07-13bRagexeRE, 2011-07-13cRagexeRE, 2011-07-19aRagexeRE, 2011-07-26aRagexeRE, 2011-08-03aRagexeRE, 2011-08-03bRagexeRE, 2011-08-10aRagexeRE, 2013-12-23aRagexeRE, 2014-05-08aRagexe, 2014-05-08aRagexeRE, 2014-06-11eRagexe, 2015-02-25hRagexe, 2018-03-15aRagexe, 2018-03-21aRagexe, 2018-03-21aRagexeRE, 2018-03-28bRagexe, 2018-03-28bRagexeRE, 2018-04-04bRagexe, 2018-04-04cRagexeRE, 2018-04-18aRagexe, 2018-04-18bRagexeRE, 2018-04-25cRagexe, 2018-04-25cRagexeRE, 2018-05-02bRagexe, 2018-05-02bRagexeRE, 2018-05-02dRagexeRE, 2018-05-09aRagexe, 2018-05-16cRagexe, 2018-05-16cRagexeRE, 2018-05-23aRagexe, 2018-05-23aRagexeRE, 2018-05-30aRagexe, 2018-05-30bRagexeRE, 2018-05-30cRagexeRE, 2018-06-05bRagexe, 2018-06-05bRagexeRE, 2018-06-12aRagexeRE, 2018-06-12bRagexeRE, 2018-06-20cRagexe, 2018-06-20dRagexeRE, 2018-06-20eRagexe, 2018-06-20eRagexeRE, 2018-06-21aRagexe, 2018-06-21aRagexeRE, 2018-07-04aRagexe, 2018-07-04aRagexeRE, 2018-07-11aRagexeRE, 2018-07-18bRagexe, 2018-07-18bRagexeRE, 2018-07-18bRagexeRE1, 2018-07-18cRagexe, 2018-07-18cRagexeRE, 2018-08-01cRagexe, 2018-08-01cRagexeRE, 2018-08-08bRagexe, 2018-08-08bRagexeRE, 2018-08-22cRagexe, 2018-08-22cRagexeRE, 2018-08-29aRagexe, 2018-08-29aRagexeRE, 2018-08-29bRagexeRE, 2018-08-31aRagexe, 2018-09-12dRagexe, 2018-09-12dRagexeRE, 2018-09-19aRagexe, 2018-09-19aRagexeRE, 2018-10-02aRagexe, 2018-10-02aRagexeRE, 2018-10-02bRagexe, 2018-10-02bRagexeRE, 2018-10-17_02aRagexe, 2018-10-17_02aRagexeRE, 2018-10-17_03aRagexe, 2018-10-17_03aRagexeRE, 2018-10-17bRagexe, 2018-10-17bRagexeRE, 2018-10-24bRagexe, 2018-10-31aRagexe, 2018-10-31bRagexe, 2018-10-31cRagexeRE, 2018-11-07aRagexe, 2018-11-07aRagexeRE, 2018-11-14cRagexe, 2018-11-14cRagexeRE, 2018-11-14dRagexe, 2018-11-14dRagexeRE, 2018-11-21bRagexe, 2018-11-21cRagexeRE, 2018-11-28aRagexe, 2018-11-28aRagexeRE, 2018-11-28bRagexe, 2018-11-28cRagexe, 2018-12-05aRagexe, 2018-12-05bRagexeRE, 2018-12-12aRagexe, 2018-12-12aRagexeRE, 2018-12-12bRagexe, 2018-12-12bRagexeRE, 2018-12-19bRagexe, 2018-12-19bRagexeRE, 2018-12-26aRagexe, 2018-12-26aRagexeRE, 2019-01-09aRagexe, 2019-01-09bRagexeRE, 2019-01-16bRagexe, 2019-01-16bRagexeRE, 2019-01-16cRagexe, 2019-01-16cRagexeRE, 2019-01-23dRagexe, 2019-01-23dRagexeRE, 2019-02-13IRagexeRE, 2019-02-13bRagexe, 2019-02-13eRagexe, 2019-02-20aRagexeRE, 2019-02-27aRagexe, 2019-02-27bRagexeRE, 2019-02-28aRagexe, 2019-02-28aRagexeRE, 2019-03-06bRagexe, 2019-03-06bRagexeRE, 2019-03-06cRagexe, 2019-03-06cRagexeRE, 2019-03-13aRagexe, 2019-03-20aRagexe, 2019-03-20aRagexeRE, 2019-03-22aRagexe, 2019-03-22aRagexeRE, 2019-03-27bRagexe, 2019-03-27bRagexeRE, 2019-04-03aRagexe, 2019-04-03bRagexeRE, 2019-04-03cRagexeRE, 2019-04-17aRagexe, 2019-04-17cRagexeRE, 2019-04-18aRagexe, 2019-04-18aRagexeRE, 2019-05-08cRagexe, 2019-05-08dRagexeRE, 2019-05-08eRagexeRE, 2019-05-22bRagexe, 2019-05-22bRagexeRE, 2019-05-22cRagexe, 2019-05-22cRagexeRE, 2019-05-23aRagexe, 2019-05-29aRagexe, 2019-05-29bRagexeRE, 2019-05-29cRagexe, 2019-05-29cRagexeRE, 2019-05-30aRagexe, 2019-05-30aRagexeRE, 2019-06-05JRagexeRE, 2019-06-05KRagexe, 2019-06-05LRagexeRE, 2019-06-05fRagexe, 2019-06-05hRagexeRE, 2019-06-19bRagexe, 2019-06-19cRagexeRE, 2019-06-19eRagexe, 2019-06-19hRagexe, 2019-06-26bRagexeRE, 2019-07-03aRagexe, 2019-07-03bRagexeRE, 2019-07-17aRagexe, 2019-07-17cRagexeRE, 2019-07-17dRagexe, 2019-07-17dRagexeRE, 2019-07-24aRagexe, 2019-07-24bRagexeRE, 2019-07-31bRagexe, 2019-07-31bRagexeRE, 2019-08-02aRagexe, 2019-08-02aRagexeRE, 2019-08-07aRagexe, 2019-08-07dRagexeRE, 2019-08-21aRagexe, 2019-08-21cRagexeRE, 2019-08-21dRagexeRE, 2019-08-28aRagexe, 2019-08-28aRagexeRE, 2019-09-04aRagexe, 2019-09-04bRagexe, 2019-09-04bRagexeRE, 2019-09-18bRagexe, 2019-09-18cRagexeRE
#if PACKETVER == 20101123 || \
PACKETVER == 20101124 || \
PACKETVER == 20101125 || \
@@ -152,7 +152,20 @@
PACKETVER == 20190522 || \
PACKETVER == 20190523 || \
PACKETVER == 20190529 || \
- PACKETVER >= 20190530
+ PACKETVER == 20190530 || \
+ PACKETVER == 20190605 || \
+ PACKETVER == 20190619 || \
+ PACKETVER == 20190626 || \
+ PACKETVER == 20190703 || \
+ PACKETVER == 20190717 || \
+ PACKETVER == 20190724 || \
+ PACKETVER == 20190731 || \
+ PACKETVER == 20190802 || \
+ PACKETVER == 20190807 || \
+ PACKETVER == 20190821 || \
+ PACKETVER == 20190828 || \
+ PACKETVER == 20190904 || \
+ PACKETVER >= 20190918
packetKeys(0x00000000,0x00000000,0x00000000);
#endif
diff --git a/src/map/packets_keys_zero.h b/src/map/packets_keys_zero.h
index c9a1a1ff0..2708d11e1 100644
--- a/src/map/packets_keys_zero.h
+++ b/src/map/packets_keys_zero.h
@@ -30,7 +30,7 @@
/* This file is autogenerated, please do not commit manual changes */
-// 2017-10-18aRagexe_zero, 2017-10-19aRagexe_zero, 2017-10-23aRagexe_zero, 2017-10-23bRagexe_zero, 2017-10-23cRagexe_zero, 2017-10-24aRagexe_2_zero, 2017-10-24aRagexe_zero, 2017-10-25bRagexe_zero, 2017-10-27aRagexe_zero, 2017-10-27bRagexe_zero, 2017-10-30aRagexe_zero, 2017-10-31aRagexe_zero, 2017-11-09aRagexe_zero, 2017-11-13aRagexe_zero, 2017-11-13bRagexe_zero, 2018-03-15aRagexe_zero, 2018-03-21aRagexe_zero, 2018-03-21bRagexe_zero, 2018-03-28_1aRagexe_zero, 2018-03-28cRagexe_zero, 2018-04-11aRagexe_zero, 2018-04-25_3aRagexe_zero, 2018-05-09_3aRagexe_zero, 2018-05-23aRagexe_zero, 2018-06-05bRagexe_zero, 2018-06-05cRagexe_zero, 2018-06-27aRagexe_zero, 2018-07-03aRagexe_zero, 2018-07-11_2aRagexe_zero, 2018-07-25_2aRagexe_zero, 2018-08-01aRagexe_zero, 2018-08-08_2aRagexe_zero, 2018-08-22aRagexe_zero, 2018-08-29aRagexe_zero, 2018-09-05aRagexe_zero, 2018-09-12aRagexe_zero, 2018-09-19aRagexe_zero, 2018-09-28aRagexe_zero, 2018-10-10_2aRagexe_zero, 2018-10-24_2aRagexe_zero, 2018-11-14aRagexe_zero, 2018-11-20aRagexe_zero, 2018-11-28aRagexe_zero, 2018-12-12aRagexe_zero, 2018-12-19aRagexe_zero, 2018-12-26_2aRagexe_zero, 2019-01-16_2aRagexe_zero, 2019-01-17_1aRagexe_zero, 2019-01-30_2aRagexe_zero, 2019-02-13aRagexe_zero, 2019-02-20aRagexe_zero, 2019-02-27aRagexe_zero, 2019-03-13aRagexe_zero, 2019-03-27_2aRagexe_zero, 2019-03-27_3aRagexe_zero, 2019-04-03aRagexe_zero, 2019-04-10bRagexe_zero, 2019-04-24aRagexe_zero, 2019-05-02aRagexe_zero, 2019-05-08_2aRagexe_zero, 2019-05-08aRagexe_zero, 2019-05-15aRagexe_zero, 2019-05-29aRagexe_zero, 2019-05-30aRagexe_zero
+// 2017-10-18aRagexe_zero, 2017-10-19aRagexe_zero, 2017-10-23aRagexe_zero, 2017-10-23bRagexe_zero, 2017-10-23cRagexe_zero, 2017-10-24aRagexe_2_zero, 2017-10-24aRagexe_zero, 2017-10-25bRagexe_zero, 2017-10-27aRagexe_zero, 2017-10-27bRagexe_zero, 2017-10-30aRagexe_zero, 2017-10-31aRagexe_zero, 2017-11-09aRagexe_zero, 2017-11-13aRagexe_zero, 2017-11-13bRagexe_zero, 2018-03-15aRagexe_zero, 2018-03-21aRagexe_zero, 2018-03-21bRagexe_zero, 2018-03-28_1aRagexe_zero, 2018-03-28cRagexe_zero, 2018-04-11aRagexe_zero, 2018-04-25_3aRagexe_zero, 2018-05-09_3aRagexe_zero, 2018-05-23aRagexe_zero, 2018-06-05bRagexe_zero, 2018-06-05cRagexe_zero, 2018-06-27aRagexe_zero, 2018-07-03aRagexe_zero, 2018-07-11_2aRagexe_zero, 2018-07-25_2aRagexe_zero, 2018-08-01aRagexe_zero, 2018-08-08_2aRagexe_zero, 2018-08-22aRagexe_zero, 2018-08-29aRagexe_zero, 2018-09-05aRagexe_zero, 2018-09-12aRagexe_zero, 2018-09-19aRagexe_zero, 2018-09-28aRagexe_zero, 2018-10-10_2aRagexe_zero, 2018-10-24_2aRagexe_zero, 2018-11-14aRagexe_zero, 2018-11-20aRagexe_zero, 2018-11-28aRagexe_zero, 2018-12-12aRagexe_zero, 2018-12-19aRagexe_zero, 2018-12-26_2aRagexe_zero, 2019-01-16_2aRagexe_zero, 2019-01-17_1aRagexe_zero, 2019-01-30_2aRagexe_zero, 2019-02-13aRagexe_zero, 2019-02-20aRagexe_zero, 2019-02-27aRagexe_zero, 2019-03-13aRagexe_zero, 2019-03-27_2aRagexe_zero, 2019-03-27_3aRagexe_zero, 2019-04-03aRagexe_zero, 2019-04-10bRagexe_zero, 2019-04-24aRagexe_zero, 2019-05-02aRagexe_zero, 2019-05-08_2aRagexe_zero, 2019-05-08aRagexe_zero, 2019-05-15aRagexe_zero, 2019-05-29aRagexe_zero, 2019-05-30aRagexe_zero, 2019-06-05_2aRagexe_zero, 2019-06-26_2aRagexe_zero, 2019-06-26_3aRagexe_zero, 2019-07-09aRagexe_zero, 2019-07-10_3aRagexe_zero, 2019-07-17aRagexe_zero, 2019-07-24aRagexe_zero, 2019-08-14_3aRagexe_zero, 2019-08-28_2aRagexe_zero, 2019-08-28_3aRagexe_zero, 2019-09-11aRagexe_zero, 2019-09-18_2aRagexe_zero, 2019-09-18aRagexe_zero
#if PACKETVER == 20171018 || \
PACKETVER == 20171019 || \
PACKETVER == 20171023 || \
@@ -84,7 +84,17 @@
PACKETVER == 20190508 || \
PACKETVER == 20190515 || \
PACKETVER == 20190529 || \
- PACKETVER >= 20190530
+ PACKETVER == 20190530 || \
+ PACKETVER == 20190605 || \
+ PACKETVER == 20190626 || \
+ PACKETVER == 20190709 || \
+ PACKETVER == 20190710 || \
+ PACKETVER == 20190717 || \
+ PACKETVER == 20190724 || \
+ PACKETVER == 20190814 || \
+ PACKETVER == 20190828 || \
+ PACKETVER == 20190911 || \
+ PACKETVER >= 20190918
packetKeys(0x00000000,0x00000000,0x00000000);
#endif
diff --git a/src/map/packets_shuffle_main.h b/src/map/packets_shuffle_main.h
index 016de4e26..e3e798dd1 100644
--- a/src/map/packets_shuffle_main.h
+++ b/src/map/packets_shuffle_main.h
@@ -9727,7 +9727,7 @@
packet(0x0967,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
#endif
-// 2018-11-21bRagexe, 2018-11-28aRagexe, 2018-11-28bRagexe, 2018-11-28cRagexe, 2018-12-05aRagexe, 2018-12-12aRagexe, 2018-12-12bRagexe, 2018-12-19bRagexe, 2018-12-26aRagexe, 2019-01-09aRagexe, 2019-01-16bRagexe, 2019-01-16cRagexe, 2019-01-23dRagexe, 2019-02-13bRagexe, 2019-02-13eRagexe, 2019-02-27aRagexe, 2019-02-28aRagexe, 2019-03-06bRagexe, 2019-03-06cRagexe, 2019-03-13aRagexe, 2019-03-20aRagexe, 2019-03-22aRagexe, 2019-03-27bRagexe, 2019-04-03aRagexe, 2019-04-17aRagexe, 2019-04-18aRagexe, 2019-05-08cRagexe, 2019-05-22bRagexe, 2019-05-22cRagexe, 2019-05-23aRagexe, 2019-05-29aRagexe, 2019-05-29cRagexe, 2019-05-30aRagexe
+// 2018-11-21bRagexe, 2018-11-28aRagexe, 2018-11-28bRagexe, 2018-11-28cRagexe, 2018-12-05aRagexe, 2018-12-12aRagexe, 2018-12-12bRagexe, 2018-12-19bRagexe, 2018-12-26aRagexe, 2019-01-09aRagexe, 2019-01-16bRagexe, 2019-01-16cRagexe, 2019-01-23dRagexe, 2019-02-13bRagexe, 2019-02-13eRagexe, 2019-02-27aRagexe, 2019-02-28aRagexe, 2019-03-06bRagexe, 2019-03-06cRagexe, 2019-03-13aRagexe, 2019-03-20aRagexe, 2019-03-22aRagexe, 2019-03-27bRagexe, 2019-04-03aRagexe, 2019-04-17aRagexe, 2019-04-18aRagexe, 2019-05-08cRagexe, 2019-05-22bRagexe, 2019-05-22cRagexe, 2019-05-23aRagexe, 2019-05-29aRagexe, 2019-05-29cRagexe, 2019-05-30aRagexe, 2019-06-05fRagexe, 2019-06-05KRagexe, 2019-06-19bRagexe, 2019-06-19eRagexe, 2019-06-19hRagexe, 2019-07-03aRagexe, 2019-07-17aRagexe, 2019-07-17dRagexe, 2019-07-24aRagexe, 2019-07-31bRagexe, 2019-08-02aRagexe, 2019-08-07aRagexe, 2019-08-21aRagexe, 2019-08-28aRagexe
#if PACKETVER == 20181121 || \
PACKETVER == 20181128 || \
PACKETVER == 20181205 || \
@@ -9752,7 +9752,17 @@
PACKETVER == 20190522 || \
PACKETVER == 20190523 || \
PACKETVER == 20190529 || \
- PACKETVER >= 20190530
+ PACKETVER == 20190530 || \
+ PACKETVER == 20190605 || \
+ PACKETVER == 20190619 || \
+ PACKETVER == 20190703 || \
+ PACKETVER == 20190717 || \
+ PACKETVER == 20190724 || \
+ PACKETVER == 20190731 || \
+ PACKETVER == 20190802 || \
+ PACKETVER == 20190807 || \
+ PACKETVER == 20190821 || \
+ PACKETVER >= 20190828
packet(0x0202,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
packet(0x022d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
packet(0x023b,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
@@ -9784,5 +9794,39 @@
packet(0x083c,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 14
#endif
+// 2019-09-04aRagexe, 2019-09-04bRagexe, 2019-09-18bRagexe
+#if PACKETVER == 20190904 || \
+ PACKETVER == 20190918
+ packet(0x0202,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
+ packet(0x022d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
+ packet(0x023b,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
+ packet(0x0281,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
+ packet(0x02c4,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
+ packet(0x035f,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
+ packet(0x0360,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
+ packet(0x0361,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
+ packet(0x0362,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
+ packet(0x0363,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
+ packet(0x0364,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
+ packet(0x0365,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
+ packet(0x0366,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
+ packet(0x0367,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 31
+ packet(0x0368,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0369,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
+ packet(0x0436,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
+ packet(0x0437,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
+ packet(0x0438,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
+ packet(0x07e4,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
+ packet(0x07ec,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
+ packet(0x0802,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
+ packet(0x0811,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
+ packet(0x0815,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
+ packet(0x0817,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
+ packet(0x0819,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
+ packet(0x0835,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
+ packet(0x0838,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
+ packet(0x083c,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 14
+#endif
+
#endif /* MAP_PACKETS_SHUFFLE_MAIN_H */
diff --git a/src/map/packets_shuffle_re.h b/src/map/packets_shuffle_re.h
index 9c02161ff..f2a1b96ad 100644
--- a/src/map/packets_shuffle_re.h
+++ b/src/map/packets_shuffle_re.h
@@ -9663,7 +9663,7 @@
packet(0x083c,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 12
#endif
-// 2018-07-04aRagexeRE, 2018-07-11aRagexeRE, 2018-07-18bRagexeRE, 2018-07-18bRagexeRE1, 2018-07-18cRagexeRE, 2018-08-01cRagexeRE, 2018-08-08bRagexeRE, 2018-08-22cRagexeRE, 2018-08-29aRagexeRE, 2018-08-29bRagexeRE, 2018-09-12dRagexeRE, 2018-09-19aRagexeRE, 2018-10-02aRagexeRE, 2018-10-02bRagexeRE, 2018-10-17_02aRagexeRE, 2018-10-17_03aRagexeRE, 2018-10-17bRagexeRE, 2018-10-31cRagexeRE, 2018-11-07aRagexeRE, 2018-11-14cRagexeRE, 2018-11-14dRagexeRE, 2018-11-21cRagexeRE, 2018-11-28aRagexeRE, 2018-12-05bRagexeRE, 2018-12-12aRagexeRE, 2018-12-12bRagexeRE, 2018-12-19bRagexeRE, 2018-12-26aRagexeRE, 2019-01-09bRagexeRE, 2019-01-16bRagexeRE, 2019-01-16cRagexeRE, 2019-01-23dRagexeRE, 2019-02-13IRagexeRE, 2019-02-20aRagexeRE, 2019-02-27bRagexeRE, 2019-02-28aRagexeRE, 2019-03-06bRagexeRE, 2019-03-06cRagexeRE, 2019-03-20aRagexeRE, 2019-03-22aRagexeRE, 2019-03-27bRagexeRE, 2019-04-03bRagexeRE, 2019-04-03cRagexeRE, 2019-04-17cRagexeRE, 2019-04-18aRagexeRE, 2019-05-08dRagexeRE, 2019-05-08eRagexeRE, 2019-05-22bRagexeRE, 2019-05-22cRagexeRE, 2019-05-29bRagexeRE, 2019-05-29cRagexeRE, 2019-05-30aRagexeRE
+// 2018-07-04aRagexeRE, 2018-07-11aRagexeRE, 2018-07-18bRagexeRE, 2018-07-18bRagexeRE1, 2018-07-18cRagexeRE, 2018-08-01cRagexeRE, 2018-08-08bRagexeRE, 2018-08-22cRagexeRE, 2018-08-29aRagexeRE, 2018-08-29bRagexeRE, 2018-09-12dRagexeRE, 2018-09-19aRagexeRE, 2018-10-02aRagexeRE, 2018-10-02bRagexeRE, 2018-10-17_02aRagexeRE, 2018-10-17_03aRagexeRE, 2018-10-17bRagexeRE, 2018-10-31cRagexeRE, 2018-11-07aRagexeRE, 2018-11-14cRagexeRE, 2018-11-14dRagexeRE, 2018-11-21cRagexeRE, 2018-11-28aRagexeRE, 2018-12-05bRagexeRE, 2018-12-12aRagexeRE, 2018-12-12bRagexeRE, 2018-12-19bRagexeRE, 2018-12-26aRagexeRE, 2019-01-09bRagexeRE, 2019-01-16bRagexeRE, 2019-01-16cRagexeRE, 2019-01-23dRagexeRE, 2019-02-13IRagexeRE, 2019-02-20aRagexeRE, 2019-02-27bRagexeRE, 2019-02-28aRagexeRE, 2019-03-06bRagexeRE, 2019-03-06cRagexeRE, 2019-03-20aRagexeRE, 2019-03-22aRagexeRE, 2019-03-27bRagexeRE, 2019-04-03bRagexeRE, 2019-04-03cRagexeRE, 2019-04-17cRagexeRE, 2019-04-18aRagexeRE, 2019-05-08dRagexeRE, 2019-05-08eRagexeRE, 2019-05-22bRagexeRE, 2019-05-22cRagexeRE, 2019-05-29bRagexeRE, 2019-05-29cRagexeRE, 2019-05-30aRagexeRE, 2019-06-05hRagexeRE, 2019-06-05JRagexeRE, 2019-06-05LRagexeRE, 2019-06-19cRagexeRE, 2019-06-26bRagexeRE, 2019-07-03bRagexeRE, 2019-07-17cRagexeRE, 2019-07-17dRagexeRE, 2019-07-24bRagexeRE, 2019-07-31bRagexeRE, 2019-08-02aRagexeRE, 2019-08-07dRagexeRE, 2019-08-21cRagexeRE, 2019-08-21dRagexeRE, 2019-08-28aRagexeRE
#if PACKETVER == 20180704 || \
PACKETVER == 20180711 || \
PACKETVER == 20180718 || \
@@ -9701,7 +9701,18 @@
PACKETVER == 20190508 || \
PACKETVER == 20190522 || \
PACKETVER == 20190529 || \
- PACKETVER >= 20190530
+ PACKETVER == 20190530 || \
+ PACKETVER == 20190605 || \
+ PACKETVER == 20190619 || \
+ PACKETVER == 20190626 || \
+ PACKETVER == 20190703 || \
+ PACKETVER == 20190717 || \
+ PACKETVER == 20190724 || \
+ PACKETVER == 20190731 || \
+ PACKETVER == 20190802 || \
+ PACKETVER == 20190807 || \
+ PACKETVER == 20190821 || \
+ PACKETVER >= 20190828
packet(0x0202,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
packet(0x022d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
packet(0x023b,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
@@ -9733,5 +9744,39 @@
packet(0x083c,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 14
#endif
+// 2019-09-04bRagexeRE, 2019-09-18cRagexeRE
+#if PACKETVER == 20190904 || \
+ PACKETVER == 20190918
+ packet(0x0202,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
+ packet(0x022d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
+ packet(0x023b,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
+ packet(0x0281,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
+ packet(0x02c4,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
+ packet(0x035f,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
+ packet(0x0360,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
+ packet(0x0361,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
+ packet(0x0362,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
+ packet(0x0363,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
+ packet(0x0364,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
+ packet(0x0365,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
+ packet(0x0366,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
+ packet(0x0367,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 31
+ packet(0x0368,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0369,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
+ packet(0x0436,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
+ packet(0x0437,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
+ packet(0x0438,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
+ packet(0x07e4,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
+ packet(0x07ec,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
+ packet(0x0802,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
+ packet(0x0811,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
+ packet(0x0815,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
+ packet(0x0817,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
+ packet(0x0819,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
+ packet(0x0835,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
+ packet(0x0838,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
+ packet(0x083c,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 14
+#endif
+
#endif /* MAP_PACKETS_SHUFFLE_RE_H */
diff --git a/src/map/packets_shuffle_zero.h b/src/map/packets_shuffle_zero.h
index bbf44cbc8..4d6da7a8a 100644
--- a/src/map/packets_shuffle_zero.h
+++ b/src/map/packets_shuffle_zero.h
@@ -742,7 +742,7 @@
packet(0x0968,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
#endif
-// 2018-11-14aRagexe_zero, 2018-11-20aRagexe_zero, 2018-11-28aRagexe_zero, 2018-12-12aRagexe_zero, 2018-12-19aRagexe_zero, 2018-12-26_2aRagexe_zero, 2019-01-16_2aRagexe_zero, 2019-01-17_1aRagexe_zero, 2019-01-30_2aRagexe_zero, 2019-02-13aRagexe_zero, 2019-02-20aRagexe_zero, 2019-02-27aRagexe_zero, 2019-03-13aRagexe_zero, 2019-03-27_2aRagexe_zero, 2019-03-27_3aRagexe_zero, 2019-04-03aRagexe_zero, 2019-04-10bRagexe_zero, 2019-04-24aRagexe_zero, 2019-05-02aRagexe_zero, 2019-05-08_2aRagexe_zero, 2019-05-08aRagexe_zero, 2019-05-15aRagexe_zero, 2019-05-29aRagexe_zero, 2019-05-30aRagexe_zero
+// 2018-11-14aRagexe_zero, 2018-11-20aRagexe_zero, 2018-11-28aRagexe_zero, 2018-12-12aRagexe_zero, 2018-12-19aRagexe_zero, 2018-12-26_2aRagexe_zero, 2019-01-16_2aRagexe_zero, 2019-01-17_1aRagexe_zero, 2019-01-30_2aRagexe_zero, 2019-02-13aRagexe_zero, 2019-02-20aRagexe_zero, 2019-02-27aRagexe_zero, 2019-03-13aRagexe_zero, 2019-03-27_2aRagexe_zero, 2019-03-27_3aRagexe_zero, 2019-04-03aRagexe_zero, 2019-04-10bRagexe_zero, 2019-04-24aRagexe_zero, 2019-05-02aRagexe_zero, 2019-05-08_2aRagexe_zero, 2019-05-08aRagexe_zero, 2019-05-15aRagexe_zero, 2019-05-29aRagexe_zero, 2019-05-30aRagexe_zero, 2019-06-05_2aRagexe_zero, 2019-06-26_2aRagexe_zero, 2019-06-26_3aRagexe_zero, 2019-07-09aRagexe_zero, 2019-07-10_3aRagexe_zero, 2019-07-17aRagexe_zero, 2019-07-24aRagexe_zero, 2019-08-14_3aRagexe_zero
#if PACKETVER == 20181114 || \
PACKETVER == 20181120 || \
PACKETVER == 20181128 || \
@@ -764,7 +764,14 @@
PACKETVER == 20190508 || \
PACKETVER == 20190515 || \
PACKETVER == 20190529 || \
- PACKETVER >= 20190530
+ PACKETVER == 20190530 || \
+ PACKETVER == 20190605 || \
+ PACKETVER == 20190626 || \
+ PACKETVER == 20190709 || \
+ PACKETVER == 20190710 || \
+ PACKETVER == 20190717 || \
+ PACKETVER == 20190724 || \
+ PACKETVER >= 20190814
packet(0x0202,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
packet(0x022d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
packet(0x023b,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
@@ -796,5 +803,40 @@
packet(0x083c,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 14
#endif
+// 2019-08-28_2aRagexe_zero, 2019-08-28_3aRagexe_zero, 2019-09-11aRagexe_zero, 2019-09-18_2aRagexe_zero, 2019-09-18aRagexe_zero
+#if PACKETVER == 20190828 || \
+ PACKETVER == 20190911 || \
+ PACKETVER == 20190918
+ packet(0x0202,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS // 26
+ packet(0x022d,clif->pHomMenu,2,4); // CZ_COMMAND_MER // 5
+ packet(0x023b,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD // 36
+ packet(0x0281,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK // 4
+ packet(0x02c4,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ // 26
+ packet(0x035f,clif->pWalkToXY,2); // CZ_REQUEST_MOVE // 5
+ packet(0x0360,clif->pTickSend,2); // CZ_REQUEST_TIME // 6
+ packet(0x0361,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION // 5
+ packet(0x0362,clif->pTakeItem,2); // CZ_ITEM_PICKUP // 6
+ packet(0x0363,clif->pDropItem,2,4); // CZ_ITEM_THROW // 6
+ packet(0x0364,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE // 8
+ packet(0x0365,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY // 8
+ packet(0x0366,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND // 10
+ packet(0x0367,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX // 31
+ packet(0x0368,clif->pGetCharNameRequest,2); // CZ_REQNAME // 6
+ packet(0x0369,clif->pSolveCharName,2); // CZ_REQNAME_BYGID // 6
+ packet(0x0436,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER // 19
+ packet(0x0437,clif->pActionRequest,2,6); // CZ_REQUEST_ACT // 7
+ packet(0x0438,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL // 10
+ packet(0x07e4,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES // -1
+ packet(0x07ec,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD // 8
+ packet(0x0802,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER // 18
+ packet(0x0811,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE // -1
+ packet(0x0815,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE // 2
+ packet(0x0817,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE // 6
+ packet(0x0819,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE // -1
+ packet(0x0835,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO // -1
+ packet(0x0838,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE // 2
+ packet(0x083c,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK // 14
+#endif
+
#endif /* MAP_PACKETS_SHUFFLE_ZERO_H */
diff --git a/src/map/packets_struct.h b/src/map/packets_struct.h
index 2da1ece9e..9c8c93865 100644
--- a/src/map/packets_struct.h
+++ b/src/map/packets_struct.h
@@ -300,7 +300,6 @@ enum packet_headers {
notifybindonequip = 0x2d3,
monsterhpType = 0x977,
maptypeproperty2Type = 0x99b,
- npcmarketresultackType = 0x9d7,
#if PACKETVER >= 20131223 // version probably can be 20131030 [4144]
wisendType = 0x9df,
#else
@@ -1362,22 +1361,6 @@ struct packet_npc_market_purchase {
} list[]; // Note: We assume this should be <= MAX_INVENTORY (since you can't hold more than MAX_INVENTORY items thus cant buy that many at once).
} __attribute__((packed));
-struct packet_npc_market_result_ack {
- int16 PacketType;
- int16 PacketLength;
- uint8 result;
- struct {
-#if PACKETVER_MAIN_NUM >= 20181121 || PACKETVER_RE_NUM >= 20180704 || PACKETVER_ZERO_NUM >= 20181114
- uint32 ITID;
-#else
- uint16 ITID;
-#endif
- uint16 qty;
- uint32 price;
- // [4144] need remove MAX_INVENTORY from here
- } list[MAX_INVENTORY];/* assuming MAX_INVENTORY is max since you can't hold more than MAX_INVENTORY items thus cant buy that many at once. */
-} __attribute__((packed));
-
#if PACKETVER_MAIN_NUM >= 20131120 || PACKETVER_RE_NUM >= 20131106 || defined(PACKETVER_ZERO)
/* inner struct figured by Ind after some annoying hour of debugging (data Thanks to Yommy) */
struct PACKET_ZC_NPC_MARKET_OPEN_sub {
@@ -1423,7 +1406,7 @@ struct hotkey_data {
int16 count; // Item Quantity/Skill Level
} __attribute__((packed));
-#if PACKETVER_MAIN_NUM >= 20190522 || PACKETVER_RE_NUM >= 20190508
+#if PACKETVER_MAIN_NUM >= 20190522 || PACKETVER_RE_NUM >= 20190508 || PACKETVER_ZERO_NUM >= 20190605
#define MAX_HOTKEYS_PACKET 38
struct PACKET_ZC_SHORTCUT_KEY_LIST {
int16 packetType;
@@ -1472,7 +1455,7 @@ struct PACKET_CZ_SHORTCUT_KEY_CHANGE1 {
DEFINE_PACKET_HEADER(CZ_SHORTCUT_KEY_CHANGE1, 0x02ba);
#endif
-#if PACKETVER_MAIN_NUM >= 20190522 || PACKETVER_RE_NUM >= 20190508
+#if PACKETVER_MAIN_NUM >= 20190522 || PACKETVER_RE_NUM >= 20190508 || PACKETVER_ZERO_NUM >= 20190605
struct PACKET_CZ_SHORTCUT_KEY_CHANGE2 {
int16 packetType;
uint16 tab;
@@ -1490,7 +1473,7 @@ struct PACKET_CZ_SHORTCUTKEYBAR_ROTATE1 {
DEFINE_PACKET_HEADER(CZ_SHORTCUTKEYBAR_ROTATE1, 0x0a01);
#endif
-#if PACKETVER_MAIN_NUM >= 20190522 || PACKETVER_RE_NUM >= 20190508
+#if PACKETVER_MAIN_NUM >= 20190522 || PACKETVER_RE_NUM >= 20190508 || PACKETVER_ZERO_NUM >= 20190605
struct PACKET_CZ_SHORTCUTKEYBAR_ROTATE2 {
int16 packetType;
uint16 tab;
@@ -2326,7 +2309,35 @@ struct PACKET_ZC_ACK_WEAPONREFINE {
#endif
} __attribute__((packed));
-#if PACKETVER_MAIN_NUM >= 20131230 || PACKETVER_RE_NUM >= 20131230 || defined(PACKETVER_ZERO)
+#if PACKETVER_MAIN_NUM >= 20190619 || PACKETVER_RE_NUM >= 20190605 || PACKETVER_ZERO_NUM >= 20190626
+// PACKET_ZC_PROPERTY_HOMUN3
+struct PACKET_ZC_PROPERTY_HOMUN {
+ int16 packetType;
+ char name[NAME_LENGTH];
+ // Bit field, bit 0 : rename_flag (1 = already renamed), bit 1 : homunc vaporized (1 = true), bit 2 : homunc dead (1 = true)
+ uint8 flags;
+ uint16 level;
+ uint16 hunger;
+ uint16 intimacy;
+ uint16 atk2;
+ uint16 matk;
+ uint16 hit;
+ uint16 crit;
+ uint16 def;
+ uint16 mdef;
+ uint16 flee;
+ uint16 amotion;
+ uint32 hp;
+ uint32 maxHp;
+ uint16 sp;
+ uint16 maxSp;
+ uint32 exp;
+ uint32 expNext;
+ uint16 skillPoints;
+ uint16 range;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_PROPERTY_HOMUN, 0x0b2f);
+#elif PACKETVER_MAIN_NUM >= 20131230 || PACKETVER_RE_NUM >= 20131230 || defined(PACKETVER_ZERO)
// PACKET_ZC_PROPERTY_HOMUN2
struct PACKET_ZC_PROPERTY_HOMUN {
int16 packetType;
@@ -2651,6 +2662,7 @@ struct PACKET_ZC_MAKINGARROW_LIST {
int16 packetLength;
struct PACKET_ZC_MAKINGARROW_LIST_sub items[];
} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_MAKINGARROW_LIST, 0x01ad);
struct PACKET_ZC_REPAIRITEMLIST_sub {
int16 index;
@@ -2697,13 +2709,10 @@ struct PACKET_ZC_MAKINGITEM_LIST_sub {
struct PACKET_ZC_MAKINGITEM_LIST {
int16 packetType;
int16 packetLength;
-#if PACKETVER_MAIN_NUM >= 20181121 || PACKETVER_RE_NUM >= 20180704 || PACKETVER_ZERO_NUM >= 20181114
- uint32 makeItem;
-#else
uint16 makeItem;
-#endif
struct PACKET_ZC_MAKINGITEM_LIST_sub items[];
} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_MAKINGITEM_LIST, 0x025a);
struct PACKET_ZC_PC_CASH_POINT_ITEMLIST_sub {
uint32 price;
@@ -3451,6 +3460,253 @@ struct PACKET_ZC_REFINE_STATUS {
DEFINE_PACKET_HEADER(ZC_REFINE_STATUS, 0x0ada);
#endif
+struct PACKET_ZC_ACK_RANKING_name {
+ char name[NAME_LENGTH];
+} __attribute__((packed));
+
+struct PACKET_ZC_ACK_RANKING_points {
+ uint32 points;
+} __attribute__((packed));
+
+#if PACKETVER_MAIN_NUM >= 20190731 || PACKETVER_RE_NUM >= 20190703 || PACKETVER_ZERO_NUM >= 20190724
+struct PACKET_ZC_ACK_RANKING_sub {
+ char name[NAME_LENGTH];
+ uint32 points;
+} __attribute__((packed));
+
+struct PACKET_ZC_ACK_RANKING {
+ int16 packetType;
+ int16 rankType;
+ uint32 chars[10];
+ uint32 points[10];
+ uint32 myPoints;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_ACK_RANKING, 0x0af6);
+#elif PACKETVER_MAIN_NUM >= 20130605 || PACKETVER_RE_NUM >= 20130529 || defined(PACKETVER_ZERO)
+struct PACKET_ZC_ACK_RANKING_sub {
+ struct PACKET_ZC_ACK_RANKING_name names[10];
+ struct PACKET_ZC_ACK_RANKING_points points[10];
+} __attribute__((packed));
+
+struct PACKET_ZC_ACK_RANKING {
+ int16 packetType;
+ int16 rankType;
+ struct PACKET_ZC_ACK_RANKING_sub ranks;
+ uint32 myPoints;
+} __attribute__((packed));
+
+DEFINE_PACKET_HEADER(ZC_ACK_RANKING, 0x097d);
+#else
+struct PACKET_ZC_ACK_RANKING_sub {
+ struct PACKET_ZC_ACK_RANKING_name names[10];
+ struct PACKET_ZC_ACK_RANKING_points points[10];
+} __attribute__((packed));
+#endif
+
+struct PACKET_ZC_STATUS_CHANGE_ACK {
+ int16 packetType;
+ uint16 sp;
+ uint8 ok;
+ uint8 value;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_STATUS_CHANGE_ACK, 0x00bc);
+
+#if PACKETVER_MAIN_NUM >= 20150507 || PACKETVER_RE_NUM >= 20150429 || defined(PACKETVER_ZERO)
+struct PACKET_ZC_HAT_EFFECT {
+ int16 packetType;
+ int16 packetLength;
+ uint32 aid;
+ int8 status;
+ uint16 effects[];
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_HAT_EFFECT, 0x0a3b);
+#endif
+
+// [4144] this struct updated not in all packets in client
+#if PACKETVER_RE_NUM >= 20190807
+struct SKILLDATA {
+ uint16 id;
+ int inf;
+ uint16 level;
+ uint16 sp;
+ uint16 range2;
+ uint8 upFlag;
+ uint16 level2;
+} __attribute__((packed));
+#else
+struct SKILLDATA {
+ uint16 id;
+ int inf;
+ uint16 level;
+ uint16 sp;
+ uint16 range2;
+ char name[NAME_LENGTH];
+ uint8 upFlag;
+} __attribute__((packed));
+#endif
+
+struct PACKET_ZC_ADD_SKILL {
+ int16 packetType;
+ struct SKILLDATA skill;
+} __attribute__((packed));
+#if PACKETVER_RE_NUM >= 20190807
+DEFINE_PACKET_HEADER(ZC_ADD_SKILL, 0x0b31);
+#else
+DEFINE_PACKET_HEADER(ZC_ADD_SKILL, 0x0111);
+#endif
+
+struct PACKET_ZC_SKILLINFO_LIST {
+ int16 packetType;
+ int16 packetLength;
+ struct SKILLDATA skills[];
+} __attribute__((packed));
+#if PACKETVER_RE_NUM >= 20190807
+DEFINE_PACKET_HEADER(ZC_SKILLINFO_LIST, 0x0b32);
+#else
+DEFINE_PACKET_HEADER(ZC_SKILLINFO_LIST, 0x010f);
+#endif
+
+#if PACKETVER_RE_NUM >= 20190807
+struct PACKET_ZC_SKILLINFO_UPDATE2 {
+ int16 packetType;
+ uint16 id;
+ int inf;
+ uint16 level;
+ uint16 sp;
+ uint16 range2;
+ uint8 upFlag;
+ uint16 level2;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_SKILLINFO_UPDATE2, 0x0b33);
+#else
+struct PACKET_ZC_SKILLINFO_UPDATE2 {
+ int16 packetType;
+ uint16 id;
+ int inf;
+ uint16 level;
+ uint16 sp;
+ uint16 range2;
+ uint8 upFlag;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_SKILLINFO_UPDATE2, 0x07e1);
+#endif
+
+struct PACKET_ZC_NPC_MARKET_PURCHASE_RESULT_sub {
+#if PACKETVER_MAIN_NUM >= 20181121 || PACKETVER_RE_NUM >= 20180704 || PACKETVER_ZERO_NUM >= 20181114
+ uint32 ITID;
+#else
+ uint16 ITID;
+#endif
+ uint16 qty;
+ uint32 price;
+} __attribute__((packed));
+
+#if PACKETVER_MAIN_NUM >= 20190807 || PACKETVER_RE_NUM >= 20190807 || PACKETVER_ZERO_NUM >= 20190814
+struct PACKET_ZC_NPC_MARKET_PURCHASE_RESULT {
+ int16 PacketType;
+ int16 PacketLength;
+ uint16 result;
+ struct PACKET_ZC_NPC_MARKET_PURCHASE_RESULT_sub list[];
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_NPC_MARKET_PURCHASE_RESULT, 0x0b4e);
+#elif PACKETVER_MAIN_NUM >= 20131120 || PACKETVER_RE_NUM >= 20130911 || defined(PACKETVER_ZERO)
+struct PACKET_ZC_NPC_MARKET_PURCHASE_RESULT {
+ int16 PacketType;
+ int16 PacketLength;
+ uint8 result;
+ struct PACKET_ZC_NPC_MARKET_PURCHASE_RESULT_sub list[];
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_NPC_MARKET_PURCHASE_RESULT, 0x09d7);
+#endif
+
+struct PACKET_ZC_TALKBOX_CHATCONTENTS {
+ int16 PacketType;
+ uint32 aid;
+ char message[TALKBOX_MESSAGE_SIZE];
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_TALKBOX_CHATCONTENTS, 0x0191);
+
+#if PACKETVER_MAIN_NUM >= 20190731 || PACKETVER_RE_NUM >= 20190717 || PACKETVER_ZERO_NUM >= 20190814
+struct PACKET_ZC_GUILD_CASTLE_LIST {
+ int16 packetType;
+ int16 packetLength;
+ int8 castle_list[];
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_GUILD_CASTLE_LIST, 0x0b27);
+#endif
+
+#if PACKETVER_MAIN_NUM >= 20190522 || PACKETVER_RE_NUM >= 20190522 || PACKETVER_ZERO_NUM >= 20190515
+struct PACKET_CZ_CASTLE_TELEPORT_REQUEST {
+ int16 packetType;
+ int8 castle_id;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(CZ_CASTLE_TELEPORT_REQUEST, 0x0b28);
+#endif
+
+#if PACKETVER_MAIN_NUM >= 20190731 || PACKETVER_RE_NUM >= 20190717 || PACKETVER_ZERO_NUM >= 20190814
+struct PACKET_ZC_CASTLE_TELEPORT_RESPONSE {
+ int16 packetType;
+ int16 result;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_CASTLE_TELEPORT_RESPONSE, 0x0b2e);
+#endif
+
+#if PACKETVER_MAIN_NUM >= 20190731 || PACKETVER_RE_NUM >= 20190717 || PACKETVER_ZERO_NUM >= 20190814
+struct PACKET_ZC_CASTLE_INFO {
+ int16 packetType;
+ int8 castle_id;
+ int32 economy;
+ int32 defense;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_CASTLE_INFO, 0x0b2d);
+#endif
+
+#if PACKETVER_MAIN_NUM >= 20190522 || PACKETVER_RE_NUM >= 20190522 || PACKETVER_ZERO_NUM >= 20190515
+struct PACKET_CZ_CASTLE_INFO_REQUEST {
+ int16 packetType;
+ int8 castle_id;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(CZ_CASTLE_INFO_REQUEST, 0x0b2c);
+#endif
+
+#if PACKETVER_MAIN_NUM >= 20160601 || PACKETVER_RE_NUM >= 20160525 || defined(PACKETVER_ZERO)
+struct PACKET_ZC_LAPINEDDUKDDAK_OPEN {
+ int16 packetType;
+#if PACKETVER_MAIN_NUM >= 20181121 || PACKETVER_RE_NUM >= 20180704 || PACKETVER_ZERO_NUM >= 20181114
+ int32 itemId;
+#else
+ int16 itemId;
+#endif
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_LAPINEDDUKDDAK_OPEN, 0x0a4e);
+#endif // PACKETVER_MAIN_NUM >= 20160601 || PACKETVER_RE_NUM >= 20160525 || defined(PACKETVER_ZERO)
+
+#if PACKETVER >= 20160302
+struct PACKET_CZ_LAPINEDDUKDDAK_ACK_sub {
+ int16 index;
+ int16 count;
+} __attribute__((packed));
+
+struct PACKET_CZ_LAPINEDDUKDDAK_ACK {
+ int16 packetType;
+ int16 packetLength;
+#if PACKETVER_MAIN_NUM >= 20181121 || PACKETVER_RE_NUM >= 20180704 || PACKETVER_ZERO_NUM >= 20181114
+ int32 itemId;
+#else
+ int16 itemId;
+#endif
+ struct PACKET_CZ_LAPINEDDUKDDAK_ACK_sub items[];
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(CZ_LAPINEDDUKDDAK_ACK, 0x0a4f);
+#endif // PACKETVER >= 20160302
+
+#if PACKETVER_MAIN_NUM >= 20160601 || PACKETVER_RE_NUM >= 20160525 || defined(PACKETVER_ZERO)
+struct PACKET_ZC_LAPINEDDUKDDAK_RESULT {
+ int16 packetType;
+ int16 result;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_LAPINEDDUKDDAK_RESULT, 0x0a50);
+#endif // PACKETVER_MAIN_NUM >= 20160601 || PACKETVER_RE_NUM >= 20160525 || defined(PACKETVER_ZERO)
#if !defined(sun) && (!defined(__NETBSD__) || __NetBSD_Version__ >= 600000000) // NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute
#pragma pack(pop)
diff --git a/src/map/party.c b/src/map/party.c
index dc330d92d..9fbe915f3 100644
--- a/src/map/party.c
+++ b/src/map/party.c
@@ -886,17 +886,20 @@ static int party_send_logout(struct map_session_data *sd)
static int party_send_message(struct map_session_data *sd, const char *mes)
{
- int len;
-
nullpo_ret(sd);
nullpo_ret(mes);
- len = (int)strlen(mes);
-
if (sd->status.party_id == 0)
return 0;
- intif->party_message(sd->status.party_id, sd->status.account_id, mes, len);
- party->recv_message(sd->status.party_id, sd->status.account_id, mes, len);
+
+ struct party_data *p = party->search(sd->status.party_id);
+
+ if (p == NULL)
+ return 0;
+
+ int len = (int)strlen(mes);
+
+ clif->party_message(p, sd->status.account_id, mes, len);
// Chat logging type 'P' / Party Chat
logs->chat(LOG_CHAT_PARTY, sd->status.party_id, sd->status.char_id, sd->status.account_id, mapindex_id2name(sd->mapindex), sd->bl.x, sd->bl.y, NULL, mes);
@@ -904,15 +907,6 @@ static int party_send_message(struct map_session_data *sd, const char *mes)
return 0;
}
-static int party_recv_message(int party_id, int account_id, const char *mes, int len)
-{
- struct party_data *p;
- if( (p=party->search(party_id))==NULL)
- return 0;
- clif->party_message(p,account_id,mes,len);
- return 0;
-}
-
static int party_skill_check(struct map_session_data *sd, int party_id, uint16 skill_id, uint16 skill_lv)
{
struct party_data *p;
@@ -1532,7 +1526,6 @@ void party_defaults(void)
party->send_levelup = party_send_levelup;
party->send_logout = party_send_logout;
party->send_message = party_send_message;
- party->recv_message = party_recv_message;
party->skill_check = party_skill_check;
party->send_xy_clear = party_send_xy_clear;
party->exp_share = party_exp_share;
diff --git a/src/map/party.h b/src/map/party.h
index 28e16dff7..1831da414 100644
--- a/src/map/party.h
+++ b/src/map/party.h
@@ -118,7 +118,6 @@ struct party_interface {
void (*send_levelup) (struct map_session_data *sd);
int (*send_logout) (struct map_session_data *sd);
int (*send_message) (struct map_session_data *sd, const char *mes);
- int (*recv_message) (int party_id,int account_id,const char *mes,int len);
int (*skill_check) (struct map_session_data *sd, int party_id, uint16 skill_id, uint16 skill_lv);
int (*send_xy_clear) (struct party_data *p);
int (*exp_share) (struct party_data *p,struct block_list *src,unsigned int base_exp,unsigned int job_exp,int zeny);
diff --git a/src/map/pc.c b/src/map/pc.c
index 5416fbec2..5eccfbaf6 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -565,72 +565,8 @@ static int pc_inventory_rental_clear(struct map_session_data *sd)
/* assumes i is valid (from default areas where it is called, it is) */
static void pc_rental_expire(struct map_session_data *sd, int i)
{
- int nameid;
-
nullpo_retv(sd);
Assert_retv(i >= 0 && i < sd->status.inventorySize);
- nameid = sd->status.inventory[i].nameid;
-
- /* Soon to be dropped, we got plans to integrate it with item db */
- switch( nameid ) {
- case ITEMID_BOARDING_HALTER:
- status_change_end(&sd->bl,SC_ALL_RIDING,INVALID_TIMER);
- break;
- case ITEMID_LOVE_ANGEL:
- if( sd->status.font == 1 ) {
- sd->status.font = 0;
- clif->font(sd);
- }
- break;
- case ITEMID_SQUIRREL:
- if( sd->status.font == 2 ) {
- sd->status.font = 0;
- clif->font(sd);
- }
- break;
- case ITEMID_GOGO:
- if( sd->status.font == 3 ) {
- sd->status.font = 0;
- clif->font(sd);
- }
- break;
- case ITEMID_PICTURE_DIARY:
- if( sd->status.font == 4 ) {
- sd->status.font = 0;
- clif->font(sd);
- }
- break;
- case ITEMID_MINI_HEART:
- if( sd->status.font == 5 ) {
- sd->status.font = 0;
- clif->font(sd);
- }
- break;
- case ITEMID_NEWCOMER:
- if( sd->status.font == 6 ) {
- sd->status.font = 0;
- clif->font(sd);
- }
- break;
- case ITEMID_KID:
- if( sd->status.font == 7 ) {
- sd->status.font = 0;
- clif->font(sd);
- }
- break;
- case ITEMID_MAGIC_CASTLE:
- if( sd->status.font == 8 ) {
- sd->status.font = 0;
- clif->font(sd);
- }
- break;
- case ITEMID_BULGING_HEAD:
- if( sd->status.font == 9 ) {
- sd->status.font = 0;
- clif->font(sd);
- }
- break;
- }
clif->rental_expired(sd->fd, i, sd->status.inventory[i].nameid);
pc->delitem(sd, i, sd->status.inventory[i].amount, 0, DELITEM_NORMAL, LOG_TYPE_RENTAL);
@@ -1536,17 +1472,16 @@ static int pc_reg_received(struct map_session_data *sd)
if (sd->status.guild_id)
guild->member_joined(sd);
- // pet
- if (sd->status.pet_id > 0)
- intif->request_petdata(sd->status.account_id, sd->status.char_id, sd->status.pet_id);
-
- // Homunculus [albator]
- if( sd->status.hom_id > 0 )
- intif->homunculus_requestload(sd->status.account_id, sd->status.hom_id);
- if( sd->status.mer_id > 0 )
- intif->mercenary_request(sd->status.mer_id, sd->status.char_id);
- if( sd->status.ele_id > 0 )
- intif->elemental_request(sd->status.ele_id, sd->status.char_id);
+ if (sd->state.standalone == 0 && sd->state.autotrade == 0) { // prevents loading pets, homunculi, mercenaries or elementals if the character doesn't have a client attached
+ if (sd->status.pet_id != 0)
+ intif->request_petdata(sd->status.account_id, sd->status.char_id, sd->status.pet_id);
+ if (sd->status.hom_id != 0)
+ intif->homunculus_requestload(sd->status.account_id, sd->status.hom_id);
+ if (sd->status.mer_id != 0)
+ intif->mercenary_request(sd->status.mer_id, sd->status.char_id);
+ if (sd->status.ele_id != 0)
+ intif->elemental_request(sd->status.ele_id, sd->status.char_id);
+ }
map->addiddb(&sd->bl);
map->delnickdb(sd->status.char_id, sd->status.name);
@@ -2268,7 +2203,7 @@ static int pc_bonus_item_drop(struct s_add_drop *drop, const short max, int id,
return 1;
}
-static int pc_addautobonus(struct s_autobonus *bonus, char max, const char *bonus_script, short rate, unsigned int dur, short flag, const char *other_script, unsigned short pos, bool onskill)
+static int pc_addautobonus(struct s_autobonus *bonus, char max, const char *bonus_script, short rate, unsigned int dur, short flag, const char *other_script, unsigned int pos, bool onskill)
{
int i;
@@ -4506,7 +4441,7 @@ static int pc_payzeny(struct map_session_data *sd, int zeny, enum e_log_pick_typ
if (sd->state.showzeny) {
char output[255];
- sprintf(output, "Removed %dz.", zeny);
+ sprintf(output, msg_sd(sd, 885), zeny); // Removed %dz.
clif_disp_onlyself(sd, output);
}
}
@@ -4645,7 +4580,7 @@ static int pc_getzeny(struct map_session_data *sd, int zeny, enum e_log_pick_typ
if (sd->state.showzeny) {
char output[255];
- sprintf(output, "Gained %dz.", zeny);
+ sprintf(output, msg_sd(sd, 886), zeny); // Gained %dz.
clif_disp_onlyself(sd, output);
}
}
@@ -4778,18 +4713,27 @@ static int pc_additem(struct map_session_data *sd, const struct item *item_data,
sd->weight += w;
clif->updatestatus(sd,SP_WEIGHT);
+
+ // auto-favorite
+ if (data->flag.auto_favorite > 0) {
+ sd->status.inventory[i].favorite = 1;
+ clif->favorite_item(sd, i);
+ }
+
//Auto-equip
if(data->flag.autoequip)
pc->equipitem(sd, i, data->equip);
/* rental item check */
- if( item_data->expire_time ) {
- if( time(NULL) > item_data->expire_time ) {
- pc->rental_expire(sd,i);
+ if (item_data->expire_time > 0) {
+ if (time(NULL) > item_data->expire_time) {
+ pc->rental_expire(sd, i);
} else {
- int seconds = (int)( item_data->expire_time - time(NULL) );
+ int seconds = (int)(item_data->expire_time - time(NULL));
clif->rental_time(sd->fd, sd->status.inventory[i].nameid, seconds);
pc->inventory_rental_add(sd, seconds);
+ if (data->rental_start_script != NULL)
+ script->run_item_rental_start_script(sd, data, 0);
}
}
quest->questinfo_refresh(sd);
@@ -4820,12 +4764,21 @@ static int pc_delitem(struct map_session_data *sd, int n, int amount, int type,
sd->status.inventory[n].amount -= amount;
sd->weight -= sd->inventory_data[n]->weight*amount ;
+
+ // It's here because the data would most likely get zeroed in following if [Hemagx]
+ struct item_data *itd = sd->inventory_data[n];
+ bool is_rental = (sd->status.inventory[n].expire_time > 0) ? true : false;
+
if( sd->status.inventory[n].amount <= 0 ){
if(sd->status.inventory[n].equip)
pc->unequipitem(sd, n, PCUNEQUIPITEM_RECALC|PCUNEQUIPITEM_FORCE);
memset(&sd->status.inventory[n],0,sizeof(sd->status.inventory[0]));
sd->inventory_data[n] = NULL;
}
+
+ if (is_rental && itd->rental_end_script != NULL)
+ script->run_item_rental_end_script(sd, itd, 0);
+
if(!(type&1))
clif->delitem(sd,n,amount,reason);
if(!(type&2))
@@ -5582,9 +5535,9 @@ static int pc_show_steal(struct block_list *bl, va_list ap)
nullpo_ret(sd);
if((item=itemdb->exists(itemid))==NULL)
- sprintf(output,"%s stole an Unknown Item (id: %i).",sd->status.name, itemid);
+ sprintf(output, msg_sd(sd, 887), sd->status.name, itemid); // %s stole an Unknown Item (id: %i).
else
- sprintf(output,"%s stole %s.",sd->status.name,item->jname);
+ sprintf(output, msg_sd(sd, 888), sd->status.name, item->jname); // %s stole %s.
clif->message(tsd->fd, output);
return 0;
@@ -7131,11 +7084,16 @@ static bool pc_gainexp(struct map_session_data *sd, struct block_list *src, uint
if(sd->state.showexp) {
char output[256];
sprintf(output,
- "Experience Gained Base:%"PRIu64" (%.2f%%) Job:%"PRIu64" (%.2f%%)",
+ msg_sd(sd, 889), // Experience Gained Base:%"PRIu64" (%.2f%%) Job:%"PRIu64" (%.2f%%)
base_exp, nextbp * (float)100, job_exp, nextjp * (float)100);
clif_disp_onlyself(sd, output);
}
+ // Share master EXP to homunculus
+ if (sd->hd != NULL && battle_config.hom_bonus_exp_from_master > 0) {
+ homun->gainexp(sd->hd, apply_percentrate((int)base_exp, battle_config.hom_bonus_exp_from_master, 100));
+ }
+
return true;
}
@@ -7352,34 +7310,33 @@ static int pc_maxparameterincrease(struct map_session_data *sd, int type)
*/
static bool pc_statusup(struct map_session_data *sd, int type, int increase)
{
- int max_increase = 0, current = 0, needed_points = 0, final_value = 0;
-
nullpo_ret(sd);
+ int realIncrease = increase;
// check conditions
- if (type < SP_STR || type > SP_LUK || increase <= 0) {
- clif->statusupack(sd, type, 0, 0);
+ if (type < SP_STR || type > SP_LUK || realIncrease <= 0) {
+ clif->statusupack(sd, type, 0, increase);
return false;
}
// check limits
- current = pc->getstat(sd, type);
- max_increase = pc->maxparameterincrease(sd, type);
- increase = cap_value(increase, 0, max_increase); // cap to the maximum status points available
- if (increase <= 0 || current + increase > pc_maxparameter(sd)) {
- clif->statusupack(sd, type, 0, 0);
+ int current = pc->getstat(sd, type);
+ int max_increase = pc->maxparameterincrease(sd, type);
+ realIncrease = cap_value(realIncrease, 0, max_increase); // cap to the maximum status points available
+ if (realIncrease <= 0 || current + realIncrease > pc_maxparameter(sd)) {
+ clif->statusupack(sd, type, 0, increase);
return false;
}
// check status points
- needed_points = pc->need_status_point(sd, type, increase);
+ int needed_points = pc->need_status_point(sd, type, realIncrease);
if (needed_points < 0 || needed_points > sd->status.status_point) { // Sanity check
- clif->statusupack(sd, type, 0, 0);
+ clif->statusupack(sd, type, 0, increase);
return false;
}
// set new values
- final_value = pc->setstat(sd, type, current + increase);
+ int final_value = pc->setstat(sd, type, current + realIncrease);
sd->status.status_point -= needed_points;
status_calc_pc(sd, SCO_NONE);
@@ -7754,7 +7711,7 @@ static int pc_resetskill(struct map_session_data *sd, int flag)
pc->setoption(sd, i);
if( homun_alive(sd->hd) && pc->checkskill(sd, AM_CALLHOMUN) )
- homun->vaporize(sd, HOM_ST_REST);
+ homun->vaporize(sd, HOM_ST_REST, true);
if ((sd->sc.data[SC_SPRITEMABLE] && pc->checkskill(sd, SU_SPRITEMABLE)))
status_change_end(&sd->bl, SC_SPRITEMABLE, INVALID_TIMER);
@@ -7995,7 +7952,7 @@ static void pc_damage(struct map_session_data *sd, struct block_list *src, unsig
if( sd->status.pet_id > 0 && sd->pd && battle_config.pet_damage_support )
pet->target_check(sd,src,1);
- if( sd->status.ele_id > 0 )
+ if (sd->status.ele_id != 0 && sd->ed != NULL)
elemental->set_target(sd,src);
if (battle_config.prevent_logout_trigger & PLT_DAMAGE)
@@ -8043,7 +8000,7 @@ static int pc_dead(struct map_session_data *sd, struct block_list *src)
if (sd->status.hom_id > 0){
if(battle_config.homunculus_auto_vapor && sd->hd)
- homun->vaporize(sd, HOM_ST_REST);
+ homun->vaporize(sd, HOM_ST_REST, true);
}
if( sd->md )
@@ -9058,7 +9015,7 @@ static int pc_jobchange(struct map_session_data *sd, int class, int upper)
pc->setoption(sd, i);
if(homun_alive(sd->hd) && !pc->checkskill(sd, AM_CALLHOMUN))
- homun->vaporize(sd, HOM_ST_REST);
+ homun->vaporize(sd, HOM_ST_REST, true);
if ((sd->sc.data[SC_SPRITEMABLE] && pc->checkskill(sd, SU_SPRITEMABLE)))
status_change_end(&sd->bl, SC_SPRITEMABLE, INVALID_TIMER);
@@ -10979,7 +10936,7 @@ static int map_day_timer(int tid, int64 tick, int id, intptr_t data)
map->night_flag = 0; // 0=day, 1=night [Yor]
map->foreachpc(pc->daynight_timer_sub);
safestrncpy(tmp_soutput, (data == 0) ? msg_txt(502) : msg_txt(60), sizeof(tmp_soutput)); // The day has arrived!
- intif->broadcast(tmp_soutput, (int)strlen(tmp_soutput) + 1, BC_DEFAULT);
+ clif->broadcast(NULL, tmp_soutput, (int)strlen(tmp_soutput) + 1, BC_DEFAULT, ALL_CLIENT);
return 0;
}
@@ -11000,7 +10957,7 @@ static int map_night_timer(int tid, int64 tick, int id, intptr_t data)
map->night_flag = 1; // 0=day, 1=night [Yor]
map->foreachpc(pc->daynight_timer_sub);
safestrncpy(tmp_soutput, (data == 0) ? msg_txt(503) : msg_txt(59), sizeof(tmp_soutput)); // The night has fallen...
- intif->broadcast(tmp_soutput, (int)strlen(tmp_soutput) + 1, BC_DEFAULT);
+ clif->broadcast(NULL, tmp_soutput, (int)strlen(tmp_soutput) + 1, BC_DEFAULT, ALL_CLIENT);
return 0;
}
@@ -12204,6 +12161,29 @@ static int pc_have_magnifier(struct map_session_data *sd)
}
/**
+ * checks if player have any item that listed in item chain
+ * @param sd map_session_data of Player
+ * @param chain_id unsigned short of item chain id
+ * @return index of inventory, INDEX_NOT_FOUND if it is not found
+ */
+static int pc_have_item_chain(struct map_session_data *sd, unsigned short chain_id)
+{
+ if (chain_id >= itemdb->chain_count) {
+ ShowError("itemdb_chain_item: unknown chain id %d\n", chain_id);
+ return INDEX_NOT_FOUND;
+ }
+
+ for (int n = 0; n < itemdb->chains[chain_id].qty; n++) {
+ struct item_chain_entry *entry = &itemdb->chains[chain_id].items[n];
+ int index = pc->search_inventory(sd, entry->id);
+ if (index != INDEX_NOT_FOUND)
+ return index;
+ }
+
+ return INDEX_NOT_FOUND;
+}
+
+/**
* Checks if player have basic skills learned.
* @param sd Player Data
* @param level Required Level of Novice Skill
@@ -12300,6 +12280,54 @@ static void pc_check_supernovice_call(struct map_session_data *sd, const char *m
}
}
+/**
+ * Sends a message t all online GMs having the specified permission.
+ *
+ * @param sender_name Sender character name.
+ * @param permission The required permission to receive this message.
+ * @param message The message body.
+ *
+ * @return The amount of characters the message was delivered to.
+ */
+// The transmission of GM only Wisp/Page from server to inter-server
+static int pc_wis_message_to_gm(const char *sender_name, int permission, const char *message)
+{
+ nullpo_ret(sender_name);
+ nullpo_ret(message);
+ int mes_len = (int)strlen(message) + 1; // + null
+ int count = 0;
+
+ // information is sent to all online GM
+ map->foreachpc(pc->wis_message_to_gm_sub, permission, sender_name, message, mes_len, &count);
+
+ return count;
+}
+
+/**
+ * Helper function for pc_wis_message_to_gm().
+ */
+static int pc_wis_message_to_gm_sub(struct map_session_data *sd, va_list va)
+{
+ nullpo_ret(sd);
+
+ int permission = va_arg(va, int);
+ if (!pc_has_permission(sd, permission))
+ return 0;
+
+ const char *sender_name = va_arg(va, const char *);
+ const char *message = va_arg(va, const char *);
+ int len = va_arg(va, int);
+ int *count = va_arg(va, int *);
+
+ nullpo_ret(sender_name);
+ nullpo_ret(message);
+ nullpo_ret(count);
+
+ clif->wis_message(sd->fd, sender_name, message, len);
+ ++*count;
+ return 1;
+}
+
static void pc_update_job_and_level(struct map_session_data *sd)
{
nullpo_retv(sd);
@@ -12747,6 +12775,8 @@ void pc_defaults(void)
pc->check_supernovice_call = pc_check_supernovice_call;
pc->process_chat_message = pc_process_chat_message;
+ pc->wis_message_to_gm = pc_wis_message_to_gm;
+ pc->wis_message_to_gm_sub = pc_wis_message_to_gm_sub;
/**
* Autotrade persistency [Ind/Hercules <3]
@@ -12762,6 +12792,7 @@ void pc_defaults(void)
pc->update_idle_time = pc_update_idle_time;
pc->have_magnifier = pc_have_magnifier;
+ pc->have_item_chain = pc_have_item_chain;
pc->check_basicskill = pc_check_basicskill;
diff --git a/src/map/pc.h b/src/map/pc.h
index 7c89f7f32..7a42be5be 100644
--- a/src/map/pc.h
+++ b/src/map/pc.h
@@ -238,6 +238,8 @@ struct map_session_data {
unsigned int loggingout : 1;
unsigned int warp_clean : 1;
unsigned int refine_ui : 1;
+ unsigned int npc_unloaded : 1; ///< The player is talking with an unloaded NPCs (respawned tombstones)
+ unsigned int lapine_ui : 1;
} state;
struct {
unsigned char no_weapon_damage, no_magic_damage, no_misc_damage;
@@ -664,10 +666,10 @@ END_ZEROED_BLOCK;
#define pc_issit(sd) ( (sd)->vd.dead_sit == 2 )
#define pc_isidle(sd) ( (sd)->chat_id != 0 || (sd)->state.vending || (sd)->state.buyingstore || DIFF_TICK(sockt->last_tick, (sd)->idletime) >= battle->bc->idle_no_share )
#define pc_istrading(sd) ( (sd)->npc_id || (sd)->state.vending || (sd)->state.buyingstore || (sd)->state.trading )
-#define pc_cant_act(sd) ( (sd)->npc_id || (sd)->state.vending || (sd)->state.buyingstore || (sd)->chat_id != 0 || ((sd)->sc.opt1 && (sd)->sc.opt1 != OPT1_BURNING) || (sd)->state.trading || (sd)->state.storage_flag || (sd)->state.prevend || (sd)->state.refine_ui == 1)
+#define pc_cant_act(sd) ( (sd)->npc_id || (sd)->state.vending || (sd)->state.buyingstore || (sd)->chat_id != 0 || ((sd)->sc.opt1 && (sd)->sc.opt1 != OPT1_BURNING) || (sd)->state.trading || (sd)->state.storage_flag || (sd)->state.prevend || (sd)->state.refine_ui == 1 || (sd)->state.lapine_ui == 1)
/* equals pc_cant_act except it doesn't check for chat rooms */
-#define pc_cant_act2(sd) ( (sd)->npc_id || (sd)->state.buyingstore || ((sd)->sc.opt1 && (sd)->sc.opt1 != OPT1_BURNING) || (sd)->state.trading || (sd)->state.storage_flag || (sd)->state.prevend || (sd)->state.refine_ui == 1)
+#define pc_cant_act2(sd) ( (sd)->npc_id || (sd)->state.buyingstore || ((sd)->sc.opt1 && (sd)->sc.opt1 != OPT1_BURNING) || (sd)->state.trading || (sd)->state.storage_flag || (sd)->state.prevend || (sd)->state.refine_ui == 1 || (sd)->state.lapine_ui == 1)
#define pc_setdir(sd,b,h) ( (sd)->ud.dir = (b) ,(sd)->head_dir = (h) )
#define pc_setchatid(sd,n) ( (sd)->chat_id = (n) )
@@ -675,6 +677,7 @@ END_ZEROED_BLOCK;
#define pc_iscloaking(sd) ( !((sd)->sc.option&OPTION_CHASEWALK) && ((sd)->sc.option&OPTION_CLOAK) )
#define pc_ischasewalk(sd) ( (sd)->sc.option&OPTION_CHASEWALK )
#define pc_ismuted(sc,type) ( (sc)->data[SC_NOCHAT] && (sc)->data[SC_NOCHAT]->val1&(type) )
+#define pc_isvending(sd) ((sd)->state.vending || (sd)->state.prevend || (sd)->state.buyingstore)
#ifdef NEW_CARTS
#define pc_iscarton(sd) ( (sd)->sc.data[SC_PUSH_CART] )
@@ -963,7 +966,7 @@ END_ZEROED_BLOCK; /* End */
int (*updateweightstatus) (struct map_session_data *sd);
- int (*addautobonus) (struct s_autobonus *bonus,char max,const char *bonus_script,short rate,unsigned int dur,short atk_type,const char *o_script,unsigned short pos,bool onskill);
+ int (*addautobonus) (struct s_autobonus *bonus,char max,const char *bonus_script,short rate,unsigned int dur,short atk_type,const char *o_script,unsigned int pos,bool onskill);
int (*exeautobonus) (struct map_session_data* sd,struct s_autobonus *bonus);
int (*endautobonus) (int tid, int64 tick, int id, intptr_t data);
int (*delautobonus) (struct map_session_data* sd,struct s_autobonus *bonus,char max,bool restore);
@@ -1183,8 +1186,11 @@ END_ZEROED_BLOCK; /* End */
void (*update_idle_time) (struct map_session_data* sd, enum e_battle_config_idletime type);
int (*have_magnifier) (struct map_session_data *sd);
+ int (*have_item_chain) (struct map_session_data *sd, unsigned short chain_id);
bool (*process_chat_message) (struct map_session_data *sd, const char *message);
+ int (*wis_message_to_gm) (const char *sender_name, int permission, const char *message);
+ int (*wis_message_to_gm_sub) (struct map_session_data *sd, va_list va);
void (*check_supernovice_call) (struct map_session_data *sd, const char *message);
bool (*check_basicskill) (struct map_session_data *sd, int level);
bool (*isDeathPenaltyJob) (uint16 job);
diff --git a/src/map/pet.c b/src/map/pet.c
index ce26b6cb1..b2b6d96f8 100644
--- a/src/map/pet.c
+++ b/src/map/pet.c
@@ -1321,7 +1321,7 @@ static int pet_read_db_libconfig(const char *filename, bool ignore_missing)
count++;
}
libconfig->destroy(&pet_db_conf);
- ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", count, filename);
+ ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", count, filepath);
return count;
}
diff --git a/src/map/quest.c b/src/map/quest.c
index 9540b411d..38ac88eea 100644
--- a/src/map/quest.c
+++ b/src/map/quest.c
@@ -585,7 +585,7 @@ static int quest_read_db(void)
count++;
}
libconfig->destroy(&quest_db_conf);
- ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", count, filename);
+ ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", count, filepath);
return count;
}
diff --git a/src/map/refine.c b/src/map/refine.c
index 4fe6e73c4..29d81c9b8 100644
--- a/src/map/refine.c
+++ b/src/map/refine.c
@@ -624,7 +624,7 @@ static int refine_readdb_refine_libconfig(const char *filename)
}
}
libconfig->destroy(&refine_db_conf);
- ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", count, filename);
+ ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", count, filepath);
return count;
}
diff --git a/src/map/script.c b/src/map/script.c
index ec553fa76..ab7513ede 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -105,7 +105,7 @@ static inline void SETVALUE(struct script_buf *buf, int i, int n)
VECTOR_INDEX(*buf, i+2) = GetByte(n, 2);
}
-const char *script_op2name(int op)
+static const char *script_op2name(int op)
{
#define RETURN_OP_NAME(type) case type: return #type
switch( op ) {
@@ -2813,7 +2813,7 @@ static struct map_session_data *script_charid2sd(struct script_state *st, int ch
static struct map_session_data *script_nick2sd(struct script_state *st, const char *name)
{
struct map_session_data *sd;
- if ((sd = map->nick2sd(name)) == NULL) {
+ if ((sd = map->nick2sd(name, false)) == NULL) {
ShowWarning("script_nick2sd: Player name '%s' not found!\n", name);
script->reportfunc(st);
script->reportsrc(st);
@@ -8822,7 +8822,7 @@ static BUILDIN(getcharid)
struct map_session_data *sd;
if (script_hasdata(st, 3))
- sd = map->nick2sd(script_getstr(st, 3));
+ sd = map->nick2sd(script_getstr(st, 3), false);
else
sd = script->rid2sd(st);
@@ -9578,27 +9578,29 @@ static BUILDIN(getequipisidentify)
}
/*==========================================
- * Get the item refined value at pos
- * return (npc)
- * x : refine amount
- * 0 : false (not refined)
+ * Get the total refine amount of equip at given pos
+ * return total refine amount
*------------------------------------------*/
static BUILDIN(getequiprefinerycnt)
{
- int i = -1,num;
- struct map_session_data *sd;
+ int total_refine = 0;
+ struct map_session_data* sd = script->rid2sd(st);
- num = script_getnum(st,2);
- sd = script->rid2sd(st);
- if( sd == NULL )
- return true;
+ if (sd != NULL)
+ {
+ int count = script_lastdata(st);
+ int script_equip_size = ARRAYLENGTH(script->equip);
+ for (int n = 2; n <= count; n++) {
+ int i = -1;
+ int num = script_getnum(st, n);
+ if (num > 0 && num <= script_equip_size)
+ i = pc->checkequip(sd, script->equip[num - 1]);
- if (num > 0 && num <= ARRAYLENGTH(script->equip))
- i=pc->checkequip(sd,script->equip[num-1]);
- if(i >= 0)
- script_pushint(st,sd->status.inventory[i].refine);
- else
- script_pushint(st,0);
+ if (i >= 0)
+ total_refine += sd->status.inventory[i].refine;
+ }
+ }
+ script_pushint(st, total_refine);
return true;
}
@@ -11954,12 +11956,12 @@ static BUILDIN(announce)
int fontAlign = script_hasdata(st,7) ? script_getnum(st,7) : 0; // default fontAlign
int fontY = script_hasdata(st,8) ? script_getnum(st,8) : 0; // default fontY
size_t len = strlen(mes);
+ send_target target = ALL_CLIENT;
+ struct block_list *bl = NULL;
Assert_retr(false, len < INT_MAX);
if( flag&(BC_TARGET_MASK|BC_SOURCE_MASK) ) {
// Broadcast source or broadcast region defined
- send_target target;
- struct block_list *bl = NULL;
if (flag&BC_NPC) {
// If bc_npc flag is set, use NPC as broadcast source
bl = map->id2bl(st->oid);
@@ -11977,17 +11979,13 @@ static BUILDIN(announce)
case BC_SELF: target = SELF; break;
default: target = ALL_CLIENT; break; // BC_ALL
}
-
- if (fontColor)
- clif->broadcast2(bl, mes, (int)len+1, (unsigned int)strtoul(fontColor, (char **)NULL, 0), fontType, fontSize, fontAlign, fontY, target);
- else
- clif->broadcast(bl, mes, (int)len+1, flag&BC_COLOR_MASK, target);
- } else {
- if (fontColor)
- intif->broadcast2(mes, (int)len+1, (unsigned int)strtoul(fontColor, (char **)NULL, 0), fontType, fontSize, fontAlign, fontY);
- else
- intif->broadcast(mes, (int)len+1, flag&BC_COLOR_MASK);
}
+
+ if (fontColor)
+ clif->broadcast2(bl, mes, (int)len+1, (unsigned int)strtoul(fontColor, (char **)NULL, 0), fontType, fontSize, fontAlign, fontY, target);
+ else
+ clif->broadcast(bl, mes, (int)len+1, flag&BC_COLOR_MASK, target);
+
return true;
}
/*==========================================
@@ -12673,7 +12671,7 @@ static BUILDIN(homunculus_morphembryo)
clif->additem(sd, 0, 0, i);
clif->emotion(&sd->hd->bl, E_SWT);
} else {
- homun->vaporize(sd, HOM_ST_MORPH);
+ homun->vaporize(sd, HOM_ST_MORPH, true);
success = true;
}
} else {
@@ -14628,6 +14626,82 @@ static BUILDIN(getiteminfo)
case ITEMINFO_TRADE:
script_pushint(st, it->flag.trade_restriction);
break;
+ case ITEMINFO_ELV_MAX:
+ script_pushint(st, it->elvmax);
+ break;
+ case ITEMINFO_DROPEFFECT_MODE:
+ script_pushint(st, it->dropeffectmode);
+ break;
+ case ITEMINFO_DELAY:
+ script_pushint(st, it->delay);
+ break;
+ case ITEMINFO_CLASS_BASE_1:
+ script_pushint(st, it->class_base[0]);
+ break;
+ case ITEMINFO_CLASS_BASE_2:
+ script_pushint(st, it->class_base[1]);
+ break;
+ case ITEMINFO_CLASS_BASE_3:
+ script_pushint(st, it->class_base[2]);
+ break;
+ case ITEMINFO_CLASS_UPPER:
+ script_pushint(st, it->class_upper);
+ break;
+ case ITEMINFO_FLAG_NO_REFINE:
+ script_pushint(st, it->flag.no_refine);
+ break;
+ case ITEMINFO_FLAG_DELAY_CONSUME:
+ script_pushint(st, it->flag.delay_consume);
+ break;
+ case ITEMINFO_FLAG_AUTOEQUIP:
+ script_pushint(st, it->flag.autoequip);
+ break;
+ case ITEMINFO_FLAG_AUTO_FAVORITE:
+ script_pushint(st, it->flag.auto_favorite);
+ break;
+ case ITEMINFO_FLAG_BUYINGSTORE:
+ script_pushint(st, it->flag.buyingstore);
+ break;
+ case ITEMINFO_FLAG_BINDONEQUIP:
+ script_pushint(st, it->flag.bindonequip);
+ break;
+ case ITEMINFO_FLAG_KEEPAFTERUSE:
+ script_pushint(st, it->flag.keepafteruse);
+ break;
+ case ITEMINFO_FLAG_FORCE_SERIAL:
+ script_pushint(st, it->flag.force_serial);
+ break;
+ case ITEMINFO_FLAG_NO_OPTIONS:
+ script_pushint(st, it->flag.no_options);
+ break;
+ case ITEMINFO_FLAG_DROP_ANNOUNCE:
+ script_pushint(st, it->flag.drop_announce);
+ break;
+ case ITEMINFO_FLAG_SHOWDROPEFFECT:
+ script_pushint(st, it->flag.showdropeffect);
+ break;
+ case ITEMINFO_STACK_AMOUNT:
+ script_pushint(st, it->stack.amount);
+ break;
+ case ITEMINFO_STACK_FLAG:
+ {
+ int stack_flag = 0;
+ if (it->stack.inventory != 0) stack_flag |= 1;
+ if (it->stack.cart != 0) stack_flag |= 2;
+ if (it->stack.storage != 0) stack_flag |= 4;
+ if (it->stack.guildstorage != 0) stack_flag |= 8;
+ script_pushint(st, stack_flag);
+ }
+ break;
+ case ITEMINFO_ITEM_USAGE_FLAG:
+ script_pushint(st, it->item_usage.flag);
+ break;
+ case ITEMINFO_ITEM_USAGE_OVERRIDE:
+ script_pushint(st, it->item_usage.override);
+ break;
+ case ITEMINFO_GM_LV_TRADE_OVERRIDE:
+ script_pushint(st, it->gm_lv_trade_override);
+ break;
default:
ShowError("buildin_getiteminfo: Invalid item type %d.\n", n);
script_pushint(st,-1);
@@ -14897,6 +14971,78 @@ static BUILDIN(setiteminfo)
case ITEMINFO_TRADE:
it->flag.trade_restriction = value;
break;
+ case ITEMINFO_ELV_MAX:
+ it->elvmax = cap_value(value, 0, MAX_LEVEL);
+ break;
+ case ITEMINFO_DROPEFFECT_MODE:
+ it->dropeffectmode = value;
+ break;
+ case ITEMINFO_DELAY:
+ it->delay = value;
+ break;
+ case ITEMINFO_CLASS_BASE_1:
+ it->class_base[0] = value;
+ break;
+ case ITEMINFO_CLASS_BASE_2:
+ it->class_base[1] = value;
+ break;
+ case ITEMINFO_CLASS_BASE_3:
+ it->class_base[2] = value;
+ break;
+ case ITEMINFO_CLASS_UPPER:
+ it->class_upper = value;
+ break;
+ case ITEMINFO_FLAG_NO_REFINE:
+ it->flag.no_refine = cap_value(value, 0, MAX_REFINE);
+ break;
+ case ITEMINFO_FLAG_DELAY_CONSUME:
+ it->flag.delay_consume = value;
+ break;
+ case ITEMINFO_FLAG_AUTOEQUIP:
+ it->flag.autoequip = cap_value(value, 0, 1);
+ break;
+ case ITEMINFO_FLAG_AUTO_FAVORITE:
+ it->flag.auto_favorite = cap_value(value, 0, 1);
+ break;
+ case ITEMINFO_FLAG_BUYINGSTORE:
+ it->flag.buyingstore = cap_value(value, 0, 1);
+ break;
+ case ITEMINFO_FLAG_BINDONEQUIP:
+ it->flag.bindonequip = cap_value(value, 0, 1);
+ break;
+ case ITEMINFO_FLAG_KEEPAFTERUSE:
+ it->flag.keepafteruse = cap_value(value, 0, 1);
+ break;
+ case ITEMINFO_FLAG_FORCE_SERIAL:
+ it->flag.force_serial = cap_value(value, 0, 1);
+ break;
+ case ITEMINFO_FLAG_NO_OPTIONS:
+ it->flag.no_options = cap_value(value, 0, 1);
+ break;
+ case ITEMINFO_FLAG_DROP_ANNOUNCE:
+ it->flag.drop_announce = cap_value(value, 0, 1);
+ break;
+ case ITEMINFO_FLAG_SHOWDROPEFFECT:
+ it->flag.showdropeffect = cap_value(value, 0, 1);
+ break;
+ case ITEMINFO_STACK_AMOUNT:
+ it->stack.amount = cap_value(value, 0, USHRT_MAX);
+ break;
+ case ITEMINFO_STACK_FLAG:
+ it->stack.inventory = ((value & 1) != 0);
+ it->stack.cart = ((value & 2) != 0);
+ it->stack.storage = ((value & 4) != 0);
+ it->stack.guildstorage = ((value & 8) != 0);
+ break;
+ case ITEMINFO_ITEM_USAGE_FLAG:
+ it->item_usage.flag = cap_value(value, 0, 1);
+ break;
+ case ITEMINFO_ITEM_USAGE_OVERRIDE:
+ it->item_usage.override = value;
+ break;
+ case ITEMINFO_GM_LV_TRADE_OVERRIDE:
+ it->gm_lv_trade_override = value;
+ break;
default:
ShowError("buildin_setiteminfo: invalid type %d.\n", n);
script_pushint(st,-1);
@@ -16384,7 +16530,7 @@ static BUILDIN(getmapxy)
case 0: //Get Character Position
if (script_hasdata(st,6)) {
if (script_isstringtype(st,6))
- sd = map->nick2sd(script_getstr(st,6));
+ sd = map->nick2sd(script_getstr(st,6), false);
else
sd = map->id2sd(script_getnum(st,6));
} else {
@@ -16411,7 +16557,7 @@ static BUILDIN(getmapxy)
case 2: //Get Pet Position
if (script_hasdata(st,6)) {
if (script_isstringtype(st,6))
- sd = map->nick2sd(script_getstr(st,6));
+ sd = map->nick2sd(script_getstr(st,6), false);
else {
bl = map->id2bl(script_getnum(st,6));
break;
@@ -16433,7 +16579,7 @@ static BUILDIN(getmapxy)
case 4: //Get Homun Position
if (script_hasdata(st,6)) {
if (script_isstringtype(st,6)) {
- sd = map->nick2sd(script_getstr(st,6));
+ sd = map->nick2sd(script_getstr(st,6), false);
} else {
bl = map->id2bl(script_getnum(st,6));
break;
@@ -16448,7 +16594,7 @@ static BUILDIN(getmapxy)
case 5: //Get Mercenary Position
if (script_hasdata(st,6)) {
if (script_isstringtype(st,6)) {
- sd = map->nick2sd(script_getstr(st,6));
+ sd = map->nick2sd(script_getstr(st,6), false);
} else {
bl = map->id2bl(script_getnum(st,6));
break;
@@ -16463,7 +16609,7 @@ static BUILDIN(getmapxy)
case 6: //Get Elemental Position
if (script_hasdata(st,6)) {
if (script_isstringtype(st,6)) {
- sd = map->nick2sd(script_getstr(st,6));
+ sd = map->nick2sd(script_getstr(st,6), false);
} else {
bl = map->id2bl(script_getnum(st,6));
break;
@@ -16631,6 +16777,8 @@ static BUILDIN(isequippedcnt)
if(j == EQI_HAND_R && sd->equip_index[EQI_HAND_L] == index) continue;
if(j == EQI_HEAD_MID && sd->equip_index[EQI_HEAD_LOW] == index) continue;
if(j == EQI_HEAD_TOP && (sd->equip_index[EQI_HEAD_MID] == index || sd->equip_index[EQI_HEAD_LOW] == index)) continue;
+ if(j == EQI_COSTUME_MID && sd->equip_index[EQI_COSTUME_LOW] == index) continue;
+ if(j == EQI_COSTUME_TOP && (sd->equip_index[EQI_COSTUME_MID] == index || sd->equip_index[EQI_COSTUME_LOW] == index)) continue;
if(!sd->inventory_data[index])
continue;
@@ -16684,6 +16832,8 @@ static BUILDIN(isequipped)
if(j == EQI_HAND_R && sd->equip_index[EQI_HAND_L] == index) continue;
if(j == EQI_HEAD_MID && sd->equip_index[EQI_HEAD_LOW] == index) continue;
if(j == EQI_HEAD_TOP && (sd->equip_index[EQI_HEAD_MID] == index || sd->equip_index[EQI_HEAD_LOW] == index)) continue;
+ if(j == EQI_COSTUME_MID && sd->equip_index[EQI_COSTUME_LOW] == index) continue;
+ if(j == EQI_COSTUME_TOP && (sd->equip_index[EQI_COSTUME_MID] == index || sd->equip_index[EQI_COSTUME_LOW] == index)) continue;
if(!sd->inventory_data[index])
continue;
@@ -18386,10 +18536,12 @@ static BUILDIN(npcshopdelitem)
unsigned int nameid = script_getnum(st,i);
ARR_FIND(0, size, n, nd->u.shop.shop_item[n].nameid == nameid);
- if (n < size) {
- memmove(&nd->u.shop.shop_item[n], &nd->u.shop.shop_item[n+1], sizeof(nd->u.shop.shop_item[0])*(size-n));
- size--;
+ if (n == size) {
+ continue;
+ } else if (n < size - 1) {
+ memmove(&nd->u.shop.shop_item[n], &nd->u.shop.shop_item[n+1], sizeof(nd->u.shop.shop_item[0]) * (size - n - 1));
}
+ size--;
}
RECREATE(nd->u.shop.shop_item, struct npc_item_list, size);
@@ -18622,6 +18774,7 @@ static BUILDIN(getmonsterinfo)
case 20: script_pushint(st,monster->status.def_ele); break;
case 21: script_pushint(st,monster->status.mode); break;
case 22: script_pushint(st,monster->mexp); break;
+ case 23: script_pushint(st, monster->dmg_taken_rate); break;
default: script_pushint(st,-1); //wrong Index
}
return true;
@@ -18695,7 +18848,7 @@ static BUILDIN(searchitem)
if ((items[0] = itemdb->exists(atoi(itemname)))) {
count = 1;
} else {
- count = itemdb->search_name_array(items, ARRAYLENGTH(items), itemname, 0);
+ count = itemdb->search_name_array(items, ARRAYLENGTH(items), itemname, IT_SEARCH_NAME_PARTIAL);
if (count > MAX_SEARCH) count = MAX_SEARCH;
}
@@ -19179,6 +19332,9 @@ static BUILDIN(setunitdata)
script_pushint(st, 1);
return true;
}
+ case UDT_DAMAGE_TAKEN_RATE:
+ setunitdata_check_bounds(4, 1, INT_MAX);
+ break;
default:
break;
}
@@ -19353,6 +19509,9 @@ static BUILDIN(setunitdata)
case UDT_DMOTION:
md->status.dmotion = (unsigned short) val;
break;
+ case UDT_DAMAGE_TAKEN_RATE:
+ md->dmg_taken_rate = (int) val;
+ break;
default:
ShowWarning("buildin_setunitdata: Invalid data type '%s' for mob unit.\n", udtype);
script_pushint(st, 0);
@@ -20200,6 +20359,7 @@ static BUILDIN(getunitdata)
case UDT_AMOTION: script_pushint(st, md->status.amotion); break;
case UDT_ADELAY: script_pushint(st, md->status.adelay); break;
case UDT_DMOTION: script_pushint(st, md->status.dmotion); break;
+ case UDT_DAMAGE_TAKEN_RATE: script_pushint(st, md->dmg_taken_rate); break;
default:
ShowWarning("buildin_getunitdata: Invalid data type '%s' for Mob unit.\n", udtype);
script_pushint(st, -1);
@@ -22628,6 +22788,19 @@ static BUILDIN(setfont)
return true;
}
+static BUILDIN(getfont)
+{
+ struct map_session_data *sd = script->rid2sd(st);
+
+ if (sd == NULL) {
+ script_pushint(st, 0);
+ return true;
+ }
+
+ script_pushint(st, sd->status.font);
+ return true;
+}
+
static int buildin_mobuseskill_sub(struct block_list *bl, va_list ap)
{
struct mob_data *md = NULL;
@@ -22954,7 +23127,7 @@ static BUILDIN(getcharip)
/* check if a character name is specified */
if (script_hasdata(st, 2)) {
if (script_isstringtype(st, 2)) {
- sd = map->nick2sd(script_getstr(st, 2));
+ sd = map->nick2sd(script_getstr(st, 2), false);
} else {
int id = script_getnum(st, 2);
sd = (map->id2sd(id) ? map->id2sd(id) : map->charid2sd(id));
@@ -24890,6 +25063,49 @@ static BUILDIN(consolemes)
return true;
}
+static BUILDIN(setfavoriteitemidx)
+{
+ struct map_session_data *sd = script_rid2sd(st);
+ int idx = script_getnum(st, 2);
+ int value = script_getnum(st, 3);
+
+ if (sd == NULL) {
+ ShowError("buildin_setfavoriteitemidx: No player attached.\n");
+ return false;
+ }
+
+ if (idx < 0 || idx >= sd->status.inventorySize) {
+ ShowError("buildin_setfavoriteitemidx: Invalid inventory index %d (min: %d, max: %d).\n", idx, 0, (sd->status.inventorySize - 1));
+ return false;
+ } else if (sd->inventory_data[idx] == NULL || sd->inventory_data[idx]->nameid <= 0) {
+ ShowWarning("buildin_setfavoriteitemidx: Current inventory index %d has no data.\n", idx);
+ return false;
+ } else if (sd->status.inventory[idx].equip > 0) {
+ ShowWarning("buildin_setfavoriteitemidx: Cant change favorite flag of an equipped item.\n");
+ return false;
+ } else {
+ sd->status.inventory[idx].favorite = cap_value(value, 0, 1);
+ clif->favorite_item(sd, idx);
+ }
+
+ return true;
+}
+
+static BUILDIN(autofavoriteitem)
+{
+ int nameid = script_getnum(st, 2);
+ int flag = script_getnum(st, 3);
+ struct item_data *item_data;
+
+ if ((item_data = itemdb->exists(nameid)) == NULL) {
+ ShowError("buildin_autofavoriteitem: Invalid item '%d'.\n", nameid);
+ return false;
+ }
+
+ item_data->flag.auto_favorite = cap_value(flag, 0, 1);
+ return true;
+}
+
/** place holder for the translation macro **/
static BUILDIN(_)
{
@@ -25515,6 +25731,94 @@ static BUILDIN(openrefineryui)
}
/**
+ * identify(<item id>)
+ * Identifies the first unidentified <item id> item on player's inventory.
+ * Returns -2 on error, -1 if no item to identify was found, identified idx otherwise.
+ */
+static BUILDIN(identify)
+{
+ struct map_session_data *sd = script_rid2sd(st);
+
+ if (sd == NULL) {
+ script_pushint(st, -2);
+ return true;
+ }
+
+ int itemid = script_getnum(st, 2);
+ if (itemdb->exists(itemid) == NULL) {
+ ShowError("buildin_identify: Invalid item ID (%d)\n", itemid);
+ script_pushint(st, -2);
+ return true;
+ }
+
+ int idx = -1;
+ ARR_FIND(0, sd->status.inventorySize, idx, (sd->status.inventory[idx].nameid == itemid && sd->status.inventory[idx].identify == 0));
+
+ if (idx < 0 || idx >= sd->status.inventorySize) {
+ script_pushint(st, -1);
+ return true;
+ }
+
+ sd->status.inventory[idx].identify = 1;
+ clif->item_identified(sd, idx, 0);
+ script_pushint(st, idx);
+
+ return true;
+}
+
+/**
+ * identifyidx(idx)
+ * Identifies item at idx.
+ * Returns true if item is identified, false otherwise.
+ */
+static BUILDIN(identifyidx)
+{
+ struct map_session_data *sd = script_rid2sd(st);
+
+ if (sd == NULL) {
+ script_pushint(st, false);
+ return true;
+ }
+
+ int idx = script_getnum(st, 2);
+ if (idx < 0 || idx >= sd->status.inventorySize) {
+ ShowError("buildin_identifyidx: Invalid inventory index (%d), expected a value between 0 and %d\n", idx, sd->status.inventorySize);
+ script_pushint(st, false);
+ return true;
+ }
+
+ if (sd->status.inventory[idx].nameid <= 0 || sd->status.inventory[idx].identify != 0) {
+ script_pushint(st, false);
+ return true;
+ }
+
+ sd->status.inventory[idx].identify = 1;
+ clif->item_identified(sd, idx, 0);
+ script_pushint(st, true);
+
+ return true;
+}
+
+static BUILDIN(openlapineddukddakboxui)
+{
+ struct map_session_data *sd = script_rid2sd(st);
+ if (sd == NULL)
+ return false;
+ const int item_id = script_getnum(st, 2);
+ struct item_data *it = itemdb->exists(item_id);
+ if (it == NULL) {
+ ShowError("buildin_openlapineddukddakboxui: Item %d is not valid\n", item_id);
+ script->reportfunc(st);
+ script->reportsrc(st);
+ script_pushint(st, false);
+ return true;
+ }
+ clif->lapineDdukDdak_open(sd, item_id);
+ script_pushint(st, true);
+ return true;
+}
+
+/**
* Adds a built-in script function.
*
* @param buildin Script function data
@@ -25663,6 +25967,52 @@ static void script_run_item_unequip_script(struct map_session_data *sd, struct i
script->current_item_id = 0;
}
+static void script_run_item_rental_start_script(struct map_session_data *sd, struct item_data *data, int oid) __attribute__((nonnull(1, 2)));
+
+/**
+ * Run item rental start script
+ * @param sd player session data. Must be correct and checked before.
+ * @param data rental item data. Must be correct and checked before.
+ * @param oid npc id. Can be also 0 or fake npc id.
+ **/
+static void script_run_item_rental_start_script(struct map_session_data *sd, struct item_data *data, int oid)
+{
+ script->current_item_id = data->nameid;
+ script->run(data->rental_start_script, 0, sd->bl.id, oid);
+ script->current_item_id = 0;
+}
+
+static void script_run_item_rental_end_script(struct map_session_data *sd, struct item_data *data, int oid) __attribute__((nonnull(1, 2)));
+
+/**
+* Run item rental end script
+* @param sd player session data. Must be correct and checked before.
+* @param data rental item data. Must be correct and checked before.
+* @param oid npc id. Can be also 0 or fake npc id.
+**/
+static void script_run_item_rental_end_script(struct map_session_data *sd, struct item_data *data, int oid)
+{
+ script->current_item_id = data->nameid;
+ script->run(data->rental_end_script, 0, sd->bl.id, oid);
+ script->current_item_id = 0;
+}
+
+static void script_run_item_lapineddukddak_script(struct map_session_data *sd, struct item_data *data, int oid) __attribute__((nonnull (1, 2)));
+
+/**
+ * Run item lapineddukddak script for item.
+ *
+ * @param sd player session data. Must be correct and checked before.
+ * @param data unequipped item data. Must be correct and checked before.
+ * @param oid npc id. Can be also 0 or fake npc id.
+ */
+static void script_run_item_lapineddukddak_script(struct map_session_data *sd, struct item_data *data, int oid)
+{
+ script->current_item_id = data->nameid;
+ script->run(data->lapineddukddak->script, 0, sd->bl.id, oid);
+ script->current_item_id = 0;
+}
+
#define BUILDIN_DEF(x,args) { buildin_ ## x , #x , args, false }
#define BUILDIN_DEF2(x,x2,args) { buildin_ ## x , x2 , args, false }
#define BUILDIN_DEF_DEPRECATED(x,args) { buildin_ ## x , #x , args, true }
@@ -25755,7 +26105,7 @@ static void script_parse_builtin(void)
BUILDIN_DEF(getequipisequiped,"i"),
BUILDIN_DEF(getequipisenableref,"i"),
BUILDIN_DEF(getequipisidentify,"i"),
- BUILDIN_DEF(getequiprefinerycnt,"i"),
+ BUILDIN_DEF(getequiprefinerycnt,"i*"),
BUILDIN_DEF(getequipweaponlv,"i"),
BUILDIN_DEF(getequippercentrefinery,"i?"),
BUILDIN_DEF(successrefitem,"i?"),
@@ -26098,6 +26448,7 @@ static void script_parse_builtin(void)
BUILDIN_DEF(mercenary_set_faith,"ii"),
BUILDIN_DEF(readbook,"ii"),
BUILDIN_DEF(setfont,"i"),
+ BUILDIN_DEF(getfont, ""),
BUILDIN_DEF(areamobuseskill,"siiiiviiiii"),
BUILDIN_DEF(progressbar,"si"),
BUILDIN_DEF(progressbar_unit,"si?"),
@@ -26272,6 +26623,12 @@ static void script_parse_builtin(void)
BUILDIN_DEF(closeroulette, ""),
BUILDIN_DEF(openrefineryui, ""),
+ BUILDIN_DEF(setfavoriteitemidx, "ii"),
+ BUILDIN_DEF(autofavoriteitem, "ii"),
+
+ BUILDIN_DEF(identify, "i"),
+ BUILDIN_DEF(identifyidx, "i"),
+ BUILDIN_DEF(openlapineddukddakboxui, "i"),
};
int i, len = ARRAYLENGTH(BUILDIN);
RECREATE(script->buildin, char *, script->buildin_count + len); // Pre-alloc to speed up
@@ -26605,6 +26962,29 @@ static void script_hardcoded_constants(void)
script->set_constant("ITEMINFO_MATK", ITEMINFO_MATK, false, false);
script->set_constant("ITEMINFO_VIEWSPRITE", ITEMINFO_VIEWSPRITE, false, false);
script->set_constant("ITEMINFO_TRADE", ITEMINFO_TRADE, false, false);
+ script->set_constant("ITEMINFO_ELV_MAX", ITEMINFO_ELV_MAX, false, false);
+ script->set_constant("ITEMINFO_DROPEFFECT_MODE", ITEMINFO_DROPEFFECT_MODE, false, false);
+ script->set_constant("ITEMINFO_DELAY", ITEMINFO_DELAY, false, false);
+ script->set_constant("ITEMINFO_CLASS_BASE_1", ITEMINFO_CLASS_BASE_1, false, false);
+ script->set_constant("ITEMINFO_CLASS_BASE_2", ITEMINFO_CLASS_BASE_2, false, false);
+ script->set_constant("ITEMINFO_CLASS_BASE_3", ITEMINFO_CLASS_BASE_3, false, false);
+ script->set_constant("ITEMINFO_CLASS_UPPER", ITEMINFO_CLASS_UPPER, false, false);
+ script->set_constant("ITEMINFO_FLAG_NO_REFINE", ITEMINFO_FLAG_NO_REFINE, false, false);
+ script->set_constant("ITEMINFO_FLAG_DELAY_CONSUME", ITEMINFO_FLAG_DELAY_CONSUME, false, false);
+ script->set_constant("ITEMINFO_FLAG_AUTOEQUIP", ITEMINFO_FLAG_AUTOEQUIP, false, false);
+ script->set_constant("ITEMINFO_FLAG_AUTO_FAVORITE", ITEMINFO_FLAG_AUTO_FAVORITE, false, false);
+ script->set_constant("ITEMINFO_FLAG_BUYINGSTORE", ITEMINFO_FLAG_BUYINGSTORE, false, false);
+ script->set_constant("ITEMINFO_FLAG_BINDONEQUIP", ITEMINFO_FLAG_BINDONEQUIP, false, false);
+ script->set_constant("ITEMINFO_FLAG_KEEPAFTERUSE", ITEMINFO_FLAG_KEEPAFTERUSE, false, false);
+ script->set_constant("ITEMINFO_FLAG_FORCE_SERIAL", ITEMINFO_FLAG_FORCE_SERIAL, false, false);
+ script->set_constant("ITEMINFO_FLAG_NO_OPTIONS", ITEMINFO_FLAG_NO_OPTIONS, false, false);
+ script->set_constant("ITEMINFO_FLAG_DROP_ANNOUNCE", ITEMINFO_FLAG_DROP_ANNOUNCE, false, false);
+ script->set_constant("ITEMINFO_FLAG_SHOWDROPEFFECT", ITEMINFO_FLAG_SHOWDROPEFFECT, false, false);
+ script->set_constant("ITEMINFO_STACK_AMOUNT", ITEMINFO_STACK_AMOUNT, false, false);
+ script->set_constant("ITEMINFO_STACK_FLAG", ITEMINFO_STACK_FLAG, false, false);
+ script->set_constant("ITEMINFO_ITEM_USAGE_FLAG", ITEMINFO_ITEM_USAGE_FLAG, false, false);
+ script->set_constant("ITEMINFO_ITEM_USAGE_OVERRIDE", ITEMINFO_ITEM_USAGE_OVERRIDE, false, false);
+ script->set_constant("ITEMINFO_GM_LV_TRADE_OVERRIDE", ITEMINFO_GM_LV_TRADE_OVERRIDE, false, false);
script->constdb_comment("getmercinfo options");
script->set_constant("MERCINFO_ID,", MERCINFO_ID, false, false);
@@ -26815,12 +27195,18 @@ static void script_hardcoded_constants(void)
script->set_constant("UDT_ROBE", UDT_ROBE, false, false);
script->set_constant("UDT_BODY2", UDT_BODY2, false, false);
script->set_constant("UDT_GROUP", UDT_GROUP, false, false);
+ script->set_constant("UDT_DAMAGE_TAKEN_RATE", UDT_DAMAGE_TAKEN_RATE, false, false);
script->constdb_comment("getguildonline types");
script->set_constant("GUILD_ONLINE_ALL", GUILD_ONLINE_ALL, false, false);
script->set_constant("GUILD_ONLINE_VENDOR", GUILD_ONLINE_VENDOR, false, false);
script->set_constant("GUILD_ONLINE_NO_VENDOR", GUILD_ONLINE_NO_VENDOR, false, false);
+ script->constdb_comment("Siege Types");
+ script->set_constant("SIEGE_TYPE_FE", SIEGE_TYPE_FE, false, false);
+ script->set_constant("SIEGE_TYPE_SE", SIEGE_TYPE_SE, false, false);
+ script->set_constant("SIEGE_TYPE_TE", SIEGE_TYPE_TE, false, false);
+
script->constdb_comment("Renewal");
#ifdef RENEWAL
script->set_constant("RENEWAL", 1, false, false);
@@ -27182,4 +27568,7 @@ void script_defaults(void)
script->run_use_script = script_run_use_script;
script->run_item_equip_script = script_run_item_equip_script;
script->run_item_unequip_script = script_run_item_unequip_script;
+ script->run_item_rental_start_script = script_run_item_rental_start_script;
+ script->run_item_rental_end_script = script_run_item_rental_end_script;
+ script->run_item_lapineddukddak_script = script_run_item_lapineddukddak_script;
}
diff --git a/src/map/script.h b/src/map/script.h
index 2aefaba4e..1cec02b97 100644
--- a/src/map/script.h
+++ b/src/map/script.h
@@ -434,6 +434,7 @@ enum script_unit_data_types {
UDT_ROBE,
UDT_BODY2,
UDT_GROUP,
+ UDT_DAMAGE_TAKEN_RATE,
UDT_MAX
};
@@ -459,7 +460,30 @@ enum script_iteminfo_types {
ITEMINFO_MATK,
ITEMINFO_VIEWSPRITE,
ITEMINFO_TRADE,
-
+ ITEMINFO_ELV_MAX,
+ ITEMINFO_DROPEFFECT_MODE,
+ ITEMINFO_DELAY,
+ ITEMINFO_CLASS_BASE_1,
+ ITEMINFO_CLASS_BASE_2,
+ ITEMINFO_CLASS_BASE_3,
+ ITEMINFO_CLASS_UPPER,
+ // ITEMINFO_FLAG_AVAILABLE,
+ ITEMINFO_FLAG_NO_REFINE,
+ ITEMINFO_FLAG_DELAY_CONSUME,
+ ITEMINFO_FLAG_AUTOEQUIP,
+ ITEMINFO_FLAG_AUTO_FAVORITE,
+ ITEMINFO_FLAG_BUYINGSTORE,
+ ITEMINFO_FLAG_BINDONEQUIP,
+ ITEMINFO_FLAG_KEEPAFTERUSE,
+ ITEMINFO_FLAG_FORCE_SERIAL,
+ ITEMINFO_FLAG_NO_OPTIONS,
+ ITEMINFO_FLAG_DROP_ANNOUNCE,
+ ITEMINFO_FLAG_SHOWDROPEFFECT,
+ ITEMINFO_STACK_AMOUNT,
+ ITEMINFO_STACK_FLAG,
+ ITEMINFO_ITEM_USAGE_FLAG,
+ ITEMINFO_ITEM_USAGE_OVERRIDE,
+ ITEMINFO_GM_LV_TRADE_OVERRIDE,
ITEMINFO_MAX
};
@@ -518,6 +542,16 @@ enum pcblock_action_flag {
};
/**
+ * Types of Siege (WoE)
+ */
+enum siege_type {
+ SIEGE_TYPE_FE,
+ SIEGE_TYPE_SE,
+ SIEGE_TYPE_TE,
+ SIEGE_TYPE_MAX
+};
+
+/**
* Structures
**/
@@ -1016,6 +1050,9 @@ struct script_interface {
void (*run_use_script) (struct map_session_data *sd, struct item_data *data, int oid);
void (*run_item_equip_script) (struct map_session_data *sd, struct item_data *data, int oid);
void (*run_item_unequip_script) (struct map_session_data *sd, struct item_data *data, int oid);
+ void (*run_item_rental_end_script) (struct map_session_data *sd, struct item_data *data, int oid);
+ void (*run_item_rental_start_script) (struct map_session_data *sd, struct item_data *data, int oid);
+ void (*run_item_lapineddukddak_script) (struct map_session_data *sd, struct item_data *data, int oid);
};
#ifdef HERCULES_CORE
diff --git a/src/map/skill.c b/src/map/skill.c
index a259829ef..60d5a397d 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -82,7 +82,7 @@
#endif
static struct skill_interface skill_s;
-struct s_skill_dbs skilldbs;
+static struct s_skill_dbs skilldbs;
struct skill_interface *skill;
@@ -2906,6 +2906,18 @@ static int skill_attack(int attack_type, struct block_list *src, struct block_li
}
}
+ if (bl->type == BL_MOB) {
+ struct mob_data *md = BL_CAST(BL_MOB, bl);
+ if (md != NULL) {
+ if (md->db->dmg_taken_rate != 100) {
+ if (dmg.damage > 0)
+ dmg.damage = apply_percentrate64(dmg.damage, md->db->dmg_taken_rate, 100);
+ if (dmg.damage2 > 0)
+ dmg.damage2 = apply_percentrate64(dmg.damage2, md->db->dmg_taken_rate, 100);
+ }
+ }
+ }
+
damage = dmg.damage + dmg.damage2;
if( (skill_id == AL_INCAGI || skill_id == AL_BLESSING ||
@@ -7193,7 +7205,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
// custom hack to make the mob display the skill, because these skills don't show the skill use text themselves
//NOTE: mobs don't have the sprite animation that is used when performing this skill (will cause glitches)
char temp[70];
- snprintf(temp, sizeof(temp), "%s : %s !!", md->name, skill->get_desc(skill_id));
+ snprintf(temp, sizeof(temp), msg_txt(882), md->name, skill->get_desc(skill_id)); // %s : %s !!
clif->disp_overhead(&md->bl, temp, AREA_CHAT_WOC, NULL);
}
break;
@@ -8698,7 +8710,7 @@ static int skill_castend_nodamage_id(struct block_list *src, struct block_list *
case AM_REST:
if (sd) {
- if (homun->vaporize(sd,HOM_ST_REST))
+ if (homun->vaporize(sd, HOM_ST_REST, false))
clif->skill_nodamage(src, bl, skill_id, skill_lv, 1);
else
clif->skill_fail(sd, skill_id, USESKILL_FAIL_LEVEL, 0, 0);
@@ -14657,7 +14669,7 @@ static int skill_check_condition_castbegin(struct map_session_data *sd, uint16 s
if (map->foreachinrange(mob->count_sub, &sd->bl, skill->get_splash(skill_id, skill_lv), BL_MOB,
MOBID_EMPELIUM, MOBID_S_EMPEL_1, MOBID_S_EMPEL_2)) {
char output[128];
- sprintf(output, "You're too close to a stone or emperium to do this skill"); /* TODO official response? or message.conf it */
+ sprintf(output, "%s", msg_txt(883)); /* TODO official response */ // You are too close to a stone or emperium to do this skill
clif->messagecolor_self(sd->fd, COLOR_RED, output);
return 0;
}
@@ -15104,7 +15116,7 @@ static int skill_check_condition_castend(struct map_session_data *sd, uint16 ski
return 0;
} else if( sd->status.inventory[i].amount < require.ammo_qty ) {
char e_msg[100];
- sprintf(e_msg,"Skill Failed. [%s] requires %dx %s.",
+ sprintf(e_msg, msg_txt(884), // Skill Failed. [%s] requires %dx %s.
skill->get_desc(skill_id),
require.ammo_qty,
itemdb_jname(sd->status.inventory[i].nameid));
diff --git a/src/map/status.c b/src/map/status.c
index 63e71c9dc..71cce28c5 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -8847,7 +8847,9 @@ static int status_change_start(struct block_list *src, struct block_list *bl, en
case SC_KAIZEL:
val2 = 10*val1; //% of life to be revived with
break;
- // case SC_ARMORPROPERTY:
+ case SC_ARMORPROPERTY:
+ clif->status_change(bl, (val1 > 0 ? SI_RESIST_PROPERTY_WATER : (val2 > 0 ? SI_RESIST_PROPERTY_GROUND : (val3 > 0 ? SI_RESIST_PROPERTY_FIRE : (val4 > 0 ? SI_RESIST_PROPERTY_WIND : SI_BLANK)))), 1, tick, 0, 0, 0);
+ break;
// case SC_ARMOR_RESIST:
// Mod your resistance against elements:
// val1 = water | val2 = earth | val3 = fire | val4 = wind
@@ -9070,7 +9072,7 @@ static int status_change_start(struct block_list *src, struct block_list *bl, en
if (sd->status.pet_id > 0)
pet->menu(sd, 3);
if (homun_alive(sd->hd))
- homun->vaporize(sd,HOM_ST_REST);
+ homun->vaporize(sd, HOM_ST_REST, true);
if (sd->md)
mercenary->delete(sd->md,3);
}
@@ -11806,10 +11808,10 @@ static int status_change_timer(int tid, int64 tick, int id, intptr_t data)
case SC_SPLASHER:
#if 0 // custom Venom Splasher countdown timer
- if (sce->val4 % 1000 == 0) {
+ if (sce->val4 % 1000 == 0 && bl && bl->type == BL_PC) {
char counter[10];
snprintf (counter, 10, "%d", sce->val4/1000);
- clif->message(bl, counter);
+ clif->message(BL_UCCAST(BL_PC, bl)->fd, counter);
}
#endif // 0
if((sce->val4 -= 500) > 0) {
@@ -13395,25 +13397,104 @@ static bool status_readdb_sizefix(char *fields[], int columns, int current)
return true;
}
-static bool status_readdb_scconfig(char *fields[], int columns, int current)
+static bool status_read_scdb_libconfig(void)
{
- int val = 0;
- char* type = fields[0];
+ struct config_t status_conf;
+ char filepath[256];
+ safesnprintf(filepath, sizeof(filepath), "%s/%s", map->db_path, "sc_config.conf");
- nullpo_retr(false, fields);
- if( !script->get_constant(type, &val) ){
- ShowWarning("status_readdb_sc_conf: Invalid status type %s specified.\n", type);
+ if (libconfig->load_file(&status_conf, filepath) == CONFIG_FALSE) {
+ ShowError("status_read_scdb_libconfig: can't read %s\n", filepath);
return false;
}
- status->dbs->sc_conf[val] = (int)strtol(fields[1], NULL, 0);
- if (status->dbs->sc_conf[val] & SC_VISIBLE)
- {
- status->dbs->DisplayType[val] = true;
+ int i = 0;
+ int count = 0;
+ struct config_setting_t *it = NULL;
+
+ while ((it = libconfig->setting_get_elem(status_conf.root, i++)) != NULL) {
+ if (status->read_scdb_libconfig_sub(it, i - 1, filepath))
+ ++count;
}
+ libconfig->destroy(&status_conf);
+ ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", count, filepath);
+ return true;
+}
+
+static bool status_read_scdb_libconfig_sub(struct config_setting_t *it, int idx, const char *source)
+{
+ nullpo_retr(false, it);
+ nullpo_retr(false, source);
+
+ int i32;
+ const char *name = config_setting_name(it);
+
+ if (!script->get_constant(name, &i32) || i32 <= SC_NONE || i32 >= SC_MAX) {
+ ShowWarning("status_read_scdb_libconfig_sub: Invalid status type (%s) in \"%s\" entry #%d, skipping.\n", name, source, idx);
+ return false;
+ }
+
+ libconfig->setting_lookup_bool_real(it, "Visible", &status->dbs->DisplayType[i32]);
+
+ struct config_setting_t *fg = libconfig->setting_get_member(it, "Flags");
+ if (fg != NULL)
+ status->read_scdb_libconfig_sub_flag(fg, i32, source);
+
return true;
}
+
+static bool status_read_scdb_libconfig_sub_flag(struct config_setting_t *it, int type, const char *source)
+{
+ nullpo_retr(false, it);
+ nullpo_retr(false, source);
+ Assert_retr(false, type > SC_NONE && type < SC_MAX);
+
+ int i = 0;
+ struct config_setting_t *t = NULL;
+ while ((t = libconfig->setting_get_elem(it, i++)) != NULL) {
+ const char *flag = config_setting_name(t);
+ bool on = libconfig->setting_get_bool_real(t);
+ int j;
+
+ struct {
+ const char *name;
+ enum sc_conf_type value;
+ } flags[] = {
+ { "NoDeathReset", SC_NO_REM_DEATH },
+ { "NoSave", SC_NO_SAVE },
+ { "NoDispelReset", SC_NO_DISPELL },
+ { "NoClearanceReset", SC_NO_CLEARANCE },
+ { "Buff", SC_BUFF },
+ { "Debuff", SC_DEBUFF },
+ { "NoMadoReset", SC_MADO_NO_RESET },
+ { "NoAllReset", SC_NO_CLEAR }
+ };
+
+ ARR_FIND(0, ARRAYLENGTH(flags), j, strcmpi(flag, flags[j].name) == 0);
+ if (j != ARRAYLENGTH(flags)) {
+ if (strcmp(flag, flags[j].name) != 0) {
+ ShowWarning("status_read_scdb_libconfig_sub_flag: flag (%s) for status effect (%d) is casesensitive, correct it to (%s).", flag, type, flags[i].name);
+ }
+ if (on) {
+ status->dbs->sc_conf[type] |= flags[j].value;
+ } else {
+ status->dbs->sc_conf[type] &= ~flags[j].value;
+ }
+ } else {
+ if (!status->read_scdb_libconfig_sub_flag_additional(it, type, source))
+ ShowWarning("status_read_scdb_libconfig_sub_flag: invalid flag (%s) for status effect (%d).", flag, type);
+ }
+ }
+ return true;
+}
+
+static bool status_read_scdb_libconfig_sub_flag_additional(struct config_setting_t *it, int type, const char *source)
+{
+ // to be used by plugins
+ return false;
+}
+
/**
* Read status db
* job1.txt
@@ -13452,7 +13533,7 @@ static int status_readdb(void)
//
sv->readdb(map->db_path, "job_db2.txt", ',', 1, 1+MAX_LEVEL, -1, status->readdb_job2);
sv->readdb(map->db_path, DBPATH"size_fix.txt", ',', MAX_SINGLE_WEAPON_TYPE, MAX_SINGLE_WEAPON_TYPE, ARRAYLENGTH(status->dbs->atkmods), status->readdb_sizefix);
- sv->readdb(map->db_path, "sc_config.txt", ',', 2, 2, SC_MAX, status->readdb_scconfig);
+ status->read_scdb_libconfig();
status->read_job_db();
pc->validate_levels();
@@ -13642,7 +13723,10 @@ void status_defaults(void)
status->natural_heal_timer = status_natural_heal_timer;
status->readdb_job2 = status_readdb_job2;
status->readdb_sizefix = status_readdb_sizefix;
- status->readdb_scconfig = status_readdb_scconfig;
+ status->read_scdb_libconfig = status_read_scdb_libconfig;
+ status->read_scdb_libconfig_sub = status_read_scdb_libconfig_sub;
+ status->read_scdb_libconfig_sub_flag = status_read_scdb_libconfig_sub_flag;
+ status->read_scdb_libconfig_sub_flag_additional = status_read_scdb_libconfig_sub_flag_additional;
status->read_job_db = status_read_job_db;
status->read_job_db_sub = status_read_job_db_sub;
status->set_sc = status_set_sc;
diff --git a/src/map/status.h b/src/map/status.h
index 853a7a1a6..536003d04 100644
--- a/src/map/status.h
+++ b/src/map/status.h
@@ -50,7 +50,7 @@ struct pet_data;
/**
* SC configuration type
- * @see db/sc_config.txt for more information
+ * @see db/sc_config.conf for more information
**/
typedef enum sc_conf_type {
SC_NO_REM_DEATH = 0x001,
@@ -1772,10 +1772,10 @@ enum si_type {
//SI_ATTACK_PROPERTY_TELEKINESIS = 905,
//SI_ATTACK_PROPERTY_UNDEAD = 906,
//SI_RESIST_PROPERTY_NOTHING = 907,
- //SI_RESIST_PROPERTY_WATER = 908,
- //SI_RESIST_PROPERTY_GROUND = 909,
- //SI_RESIST_PROPERTY_FIRE = 910,
- //SI_RESIST_PROPERTY_WIND = 911,
+ SI_RESIST_PROPERTY_WATER = 908,
+ SI_RESIST_PROPERTY_GROUND = 909,
+ SI_RESIST_PROPERTY_FIRE = 910,
+ SI_RESIST_PROPERTY_WIND = 911,
//SI_RESIST_PROPERTY_POISON = 912,
//SI_RESIST_PROPERTY_SAINT = 913,
//SI_RESIST_PROPERTY_DARKNESS = 914,
@@ -2387,7 +2387,10 @@ struct status_interface {
int (*natural_heal_timer) (int tid, int64 tick, int id, intptr_t data);
bool (*readdb_job2) (char *fields[], int columns, int current);
bool (*readdb_sizefix) (char *fields[], int columns, int current);
- bool (*readdb_scconfig) (char *fields[], int columns, int current);
+ bool (*read_scdb_libconfig) (void);
+ bool (*read_scdb_libconfig_sub) (struct config_setting_t *it, int idx, const char *source);
+ bool (*read_scdb_libconfig_sub_flag) (struct config_setting_t *it, int type, const char *source);
+ bool (*read_scdb_libconfig_sub_flag_additional) (struct config_setting_t *it, int type, const char *source);
void (*read_job_db) (void);
void (*read_job_db_sub) (int idx, const char *name, struct config_setting_t *jdb);
void (*set_sc) (uint16 skill_id, sc_type sc, int icon, unsigned int flag);
diff --git a/src/map/trade.c b/src/map/trade.c
index cef14ffe6..ff5c04fc3 100644
--- a/src/map/trade.c
+++ b/src/map/trade.c
@@ -50,6 +50,9 @@ static void trade_traderequest(struct map_session_data *sd, struct map_session_d
{
nullpo_retv(sd);
+ if (sd == target_sd)
+ return;
+
if (map->list[sd->bl.m].flag.notrade) {
clif->message (sd->fd, msg_sd(sd,272)); // You can't trade in this map
return;
@@ -223,9 +226,9 @@ static int impossible_trade_check(struct map_session_data *sd)
if (inventory[index].amount < sd->deal.item[i].amount) {
// if more than the player have -> hack
snprintf(message_to_gm, sizeof(message_to_gm), msg_txt(538), sd->status.name, sd->status.account_id); // Hack on trade: character '%s' (account: %d) try to trade more items that he has.
- intif->wis_message_to_gm(map->wisp_server_name, PC_PERM_RECEIVE_HACK_INFO, message_to_gm);
+ pc->wis_message_to_gm(map->wisp_server_name, PC_PERM_RECEIVE_HACK_INFO, message_to_gm);
snprintf(message_to_gm, sizeof(message_to_gm), msg_txt(539), inventory[index].amount, inventory[index].nameid, sd->deal.item[i].amount); // This player has %d of a kind of item (id: %d), and try to trade %d of them.
- intif->wis_message_to_gm(map->wisp_server_name, PC_PERM_RECEIVE_HACK_INFO, message_to_gm);
+ pc->wis_message_to_gm(map->wisp_server_name, PC_PERM_RECEIVE_HACK_INFO, message_to_gm);
// if we block people
if (battle_config.ban_hack_trade < 0) {
chrif->char_ask_name(-1, sd->status.name, CHAR_ASK_NAME_BLOCK, 0, 0, 0, 0, 0, 0);
@@ -242,7 +245,7 @@ static int impossible_trade_check(struct map_session_data *sd)
// message about the ban
safestrncpy(message_to_gm, msg_txt(508), sizeof(message_to_gm)); // This player hasn't been banned (Ban option is disabled).
- intif->wis_message_to_gm(map->wisp_server_name, PC_PERM_RECEIVE_HACK_INFO, message_to_gm);
+ pc->wis_message_to_gm(map->wisp_server_name, PC_PERM_RECEIVE_HACK_INFO, message_to_gm);
return 1;
}
inventory[index].amount -= sd->deal.item[i].amount; // remove item from inventory
diff --git a/src/plugins/HPMHooking/HPMHooking.Defs.inc b/src/plugins/HPMHooking/HPMHooking.Defs.inc
index 95c7869ac..b207e52ba 100644
--- a/src/plugins/HPMHooking/HPMHooking.Defs.inc
+++ b/src/plugins/HPMHooking/HPMHooking.Defs.inc
@@ -1276,8 +1276,8 @@ typedef void (*HPMHOOK_pre_clif_scriptclear) (struct map_session_data **sd, int
typedef void (*HPMHOOK_post_clif_scriptclear) (struct map_session_data *sd, int npcid);
typedef void (*HPMHOOK_pre_clif_viewpoint) (struct map_session_data **sd, int *npc_id, int *type, int *x, int *y, int *id, int *color);
typedef void (*HPMHOOK_post_clif_viewpoint) (struct map_session_data *sd, int npc_id, int type, int x, int y, int id, int color);
-typedef int (*HPMHOOK_pre_clif_damage) (struct block_list **src, struct block_list **dst, int *sdelay, int *ddelay, int64 *damage, short *div, unsigned char *type, int64 *damage2);
-typedef int (*HPMHOOK_post_clif_damage) (int retVal___, struct block_list *src, struct block_list *dst, int sdelay, int ddelay, int64 damage, short div, unsigned char type, int64 damage2);
+typedef int (*HPMHOOK_pre_clif_damage) (struct block_list **src, struct block_list **dst, int *sdelay, int *ddelay, int64 *damage, short *div, enum battle_dmg_type *type, int64 *damage2);
+typedef int (*HPMHOOK_post_clif_damage) (int retVal___, struct block_list *src, struct block_list *dst, int sdelay, int ddelay, int64 damage, short div, enum battle_dmg_type type, int64 damage2);
typedef void (*HPMHOOK_pre_clif_sitting) (struct block_list **bl);
typedef void (*HPMHOOK_post_clif_sitting) (struct block_list *bl);
typedef void (*HPMHOOK_pre_clif_standing) (struct block_list **bl);
@@ -1296,6 +1296,10 @@ typedef void (*HPMHOOK_pre_clif_fame_taekwon) (struct map_session_data **sd, int
typedef void (*HPMHOOK_post_clif_fame_taekwon) (struct map_session_data *sd, int points);
typedef void (*HPMHOOK_pre_clif_ranklist) (struct map_session_data **sd, enum fame_list_type *type);
typedef void (*HPMHOOK_post_clif_ranklist) (struct map_session_data *sd, enum fame_list_type type);
+typedef void (*HPMHOOK_pre_clif_ranklist_sub) (struct PACKET_ZC_ACK_RANKING_sub **ranks, enum fame_list_type *type);
+typedef void (*HPMHOOK_post_clif_ranklist_sub) (struct PACKET_ZC_ACK_RANKING_sub *ranks, enum fame_list_type type);
+typedef void (*HPMHOOK_pre_clif_ranklist_sub2) (uint32 **chars, uint32 **points, enum fame_list_type *type);
+typedef void (*HPMHOOK_post_clif_ranklist_sub2) (uint32 *chars, uint32 *points, enum fame_list_type type);
typedef void (*HPMHOOK_pre_clif_update_rankingpoint) (struct map_session_data **sd, enum fame_list_type *type, int *points);
typedef void (*HPMHOOK_post_clif_update_rankingpoint) (struct map_session_data *sd, enum fame_list_type type, int points);
typedef void (*HPMHOOK_pre_clif_pRanklist) (int *fd, struct map_session_data **sd);
@@ -1520,8 +1524,8 @@ typedef void (*HPMHOOK_pre_clif_divorced) (struct map_session_data **sd, const c
typedef void (*HPMHOOK_post_clif_divorced) (struct map_session_data *sd, const char *name);
typedef void (*HPMHOOK_pre_clif_callpartner) (struct map_session_data **sd);
typedef void (*HPMHOOK_post_clif_callpartner) (struct map_session_data *sd);
-typedef int (*HPMHOOK_pre_clif_skill_damage) (struct block_list **src, struct block_list **dst, int64 *tick, int *sdelay, int *ddelay, int64 *damage, int *div, uint16 *skill_id, uint16 *skill_lv, int *type);
-typedef int (*HPMHOOK_post_clif_skill_damage) (int retVal___, struct block_list *src, struct block_list *dst, int64 tick, int sdelay, int ddelay, int64 damage, int div, uint16 skill_id, uint16 skill_lv, int type);
+typedef int (*HPMHOOK_pre_clif_skill_damage) (struct block_list **src, struct block_list **dst, int64 *tick, int *sdelay, int *ddelay, int64 *damage, int *div, uint16 *skill_id, uint16 *skill_lv, enum battle_dmg_type *type);
+typedef int (*HPMHOOK_post_clif_skill_damage) (int retVal___, struct block_list *src, struct block_list *dst, int64 tick, int sdelay, int ddelay, int64 damage, int div, uint16 skill_id, uint16 skill_lv, enum battle_dmg_type type);
typedef int (*HPMHOOK_pre_clif_skill_nodamage) (struct block_list **src, struct block_list **dst, uint16 *skill_id, int *heal, int *fail);
typedef int (*HPMHOOK_post_clif_skill_nodamage) (int retVal___, struct block_list *src, struct block_list *dst, uint16 skill_id, int heal, int fail);
typedef void (*HPMHOOK_pre_clif_skill_poseffect) (struct block_list **src, uint16 *skill_id, int *val, int *x, int *y, int64 *tick);
@@ -1708,6 +1712,8 @@ typedef void (*HPMHOOK_pre_clif_addskill) (struct map_session_data **sd, int *id
typedef void (*HPMHOOK_post_clif_addskill) (struct map_session_data *sd, int id);
typedef void (*HPMHOOK_pre_clif_deleteskill) (struct map_session_data **sd, int *id);
typedef void (*HPMHOOK_post_clif_deleteskill) (struct map_session_data *sd, int id);
+typedef void (*HPMHOOK_pre_clif_playerSkillToPacket) (struct map_session_data **sd, struct SKILLDATA **skillData, int *skillId, int *idx, bool *newSkill);
+typedef void (*HPMHOOK_post_clif_playerSkillToPacket) (struct map_session_data *sd, struct SKILLDATA *skillData, int skillId, int idx, bool newSkill);
typedef void (*HPMHOOK_pre_clif_party_created) (struct map_session_data **sd, int *result);
typedef void (*HPMHOOK_post_clif_party_created) (struct map_session_data *sd, int result);
typedef void (*HPMHOOK_pre_clif_party_member_info) (struct party_data **p, struct map_session_data **sd);
@@ -1750,6 +1756,10 @@ typedef void (*HPMHOOK_pre_clif_guild_basicinfo) (struct map_session_data **sd);
typedef void (*HPMHOOK_post_clif_guild_basicinfo) (struct map_session_data *sd);
typedef void (*HPMHOOK_pre_clif_guild_allianceinfo) (struct map_session_data **sd);
typedef void (*HPMHOOK_post_clif_guild_allianceinfo) (struct map_session_data *sd);
+typedef void (*HPMHOOK_pre_clif_guild_castlelist) (struct map_session_data **sd);
+typedef void (*HPMHOOK_post_clif_guild_castlelist) (struct map_session_data *sd);
+typedef void (*HPMHOOK_pre_clif_guild_castleinfo) (struct map_session_data **sd, struct guild_castle **gc);
+typedef void (*HPMHOOK_post_clif_guild_castleinfo) (struct map_session_data *sd, struct guild_castle *gc);
typedef void (*HPMHOOK_pre_clif_guild_memberlist) (struct map_session_data **sd);
typedef void (*HPMHOOK_post_clif_guild_memberlist) (struct map_session_data *sd);
typedef void (*HPMHOOK_pre_clif_guild_skillinfo) (struct map_session_data **sd);
@@ -2040,14 +2050,14 @@ typedef void (*HPMHOOK_pre_clif_show_modifiers) (struct map_session_data **sd);
typedef void (*HPMHOOK_post_clif_show_modifiers) (struct map_session_data *sd);
typedef void (*HPMHOOK_pre_clif_notify_bounditem) (struct map_session_data **sd, unsigned short *index);
typedef void (*HPMHOOK_post_clif_notify_bounditem) (struct map_session_data *sd, unsigned short index);
-typedef int (*HPMHOOK_pre_clif_delay_damage) (int64 *tick, struct block_list **src, struct block_list **dst, int *sdelay, int *ddelay, int64 *in_damage, short *div, unsigned char *type);
-typedef int (*HPMHOOK_post_clif_delay_damage) (int retVal___, int64 tick, struct block_list *src, struct block_list *dst, int sdelay, int ddelay, int64 in_damage, short div, unsigned char type);
+typedef int (*HPMHOOK_pre_clif_delay_damage) (int64 *tick, struct block_list **src, struct block_list **dst, int *sdelay, int *ddelay, int64 *in_damage, short *div, enum battle_dmg_type *type);
+typedef int (*HPMHOOK_post_clif_delay_damage) (int retVal___, int64 tick, struct block_list *src, struct block_list *dst, int sdelay, int ddelay, int64 in_damage, short div, enum battle_dmg_type type);
typedef int (*HPMHOOK_pre_clif_delay_damage_sub) (int *tid, int64 *tick, int *id, intptr_t *data);
typedef int (*HPMHOOK_post_clif_delay_damage_sub) (int retVal___, int tid, int64 tick, int id, intptr_t data);
typedef void (*HPMHOOK_pre_clif_npc_market_open) (struct map_session_data **sd, struct npc_data **nd);
typedef void (*HPMHOOK_post_clif_npc_market_open) (struct map_session_data *sd, struct npc_data *nd);
-typedef void (*HPMHOOK_pre_clif_npc_market_purchase_ack) (struct map_session_data **sd, const struct itemlist **item_list, unsigned char *response);
-typedef void (*HPMHOOK_post_clif_npc_market_purchase_ack) (struct map_session_data *sd, const struct itemlist *item_list, unsigned char response);
+typedef void (*HPMHOOK_pre_clif_npc_market_purchase_ack) (struct map_session_data **sd, const struct itemlist **item_list, enum market_buy_result *response);
+typedef void (*HPMHOOK_post_clif_npc_market_purchase_ack) (struct map_session_data *sd, const struct itemlist *item_list, enum market_buy_result response);
typedef bool (*HPMHOOK_pre_clif_parse_roulette_db) (void);
typedef bool (*HPMHOOK_post_clif_parse_roulette_db) (bool retVal___);
typedef void (*HPMHOOK_pre_clif_roulette_generate_ack) (struct map_session_data **sd, enum GENERATE_ROULETTE_ACK *result, short *stage, short *prizeIdx, int *bonusItemID);
@@ -2720,6 +2730,20 @@ typedef void (*HPMHOOK_pre_clif_pRefineryUIRefine) (int *fd, struct map_session_
typedef void (*HPMHOOK_post_clif_pRefineryUIRefine) (int fd, struct map_session_data *sd);
typedef void (*HPMHOOK_pre_clif_announce_refine_status) (struct map_session_data **sd, int *item_id, int *refine_level, bool *success, enum send_target *target);
typedef void (*HPMHOOK_post_clif_announce_refine_status) (struct map_session_data *sd, int item_id, int refine_level, bool success, enum send_target target);
+typedef void (*HPMHOOK_pre_clif_pGuildCastleTeleportRequest) (int *fd, struct map_session_data **sd);
+typedef void (*HPMHOOK_post_clif_pGuildCastleTeleportRequest) (int fd, struct map_session_data *sd);
+typedef void (*HPMHOOK_pre_clif_pGuildCastleInfoRequest) (int *fd, struct map_session_data **sd);
+typedef void (*HPMHOOK_post_clif_pGuildCastleInfoRequest) (int fd, struct map_session_data *sd);
+typedef void (*HPMHOOK_pre_clif_guild_castleteleport_res) (struct map_session_data **sd, enum siege_teleport_result *result);
+typedef void (*HPMHOOK_post_clif_guild_castleteleport_res) (struct map_session_data *sd, enum siege_teleport_result result);
+typedef bool (*HPMHOOK_pre_clif_lapineDdukDdak_open) (struct map_session_data **sd, int *item_id);
+typedef bool (*HPMHOOK_post_clif_lapineDdukDdak_open) (bool retVal___, struct map_session_data *sd, int item_id);
+typedef bool (*HPMHOOK_pre_clif_lapineDdukDdak_result) (struct map_session_data **sd, enum lapineddukddak_result *result);
+typedef bool (*HPMHOOK_post_clif_lapineDdukDdak_result) (bool retVal___, struct map_session_data *sd, enum lapineddukddak_result result);
+typedef void (*HPMHOOK_pre_clif_plapineDdukDdak_ack) (int *fd, struct map_session_data **sd);
+typedef void (*HPMHOOK_post_clif_plapineDdukDdak_ack) (int fd, struct map_session_data *sd);
+typedef void (*HPMHOOK_pre_clif_plapineDdukDdak_close) (int *fd, struct map_session_data **sd);
+typedef void (*HPMHOOK_post_clif_plapineDdukDdak_close) (int fd, struct map_session_data *sd);
#endif // MAP_CLIF_H
#ifdef COMMON_CORE_H /* cmdline */
typedef void (*HPMHOOK_pre_cmdline_init) (void);
@@ -3004,8 +3028,6 @@ typedef int (*HPMHOOK_pre_guild_emblem_changed) (int *len, int *guild_id, int *e
typedef int (*HPMHOOK_post_guild_emblem_changed) (int retVal___, int len, int guild_id, int emblem_id, const char *data);
typedef int (*HPMHOOK_pre_guild_send_message) (struct map_session_data **sd, const char **mes);
typedef int (*HPMHOOK_post_guild_send_message) (int retVal___, struct map_session_data *sd, const char *mes);
-typedef int (*HPMHOOK_pre_guild_recv_message) (int *guild_id, int *account_id, const char **mes, int *len);
-typedef int (*HPMHOOK_post_guild_recv_message) (int retVal___, int guild_id, int account_id, const char *mes, int len);
typedef int (*HPMHOOK_pre_guild_send_dot_remove) (struct map_session_data **sd);
typedef int (*HPMHOOK_post_guild_send_dot_remove) (int retVal___, struct map_session_data *sd);
typedef int (*HPMHOOK_pre_guild_skillupack) (int *guild_id, uint16 *skill_id, int *account_id);
@@ -3050,8 +3072,12 @@ typedef struct map_session_data* (*HPMHOOK_pre_guild_sd_check) (int *guild_id, i
typedef struct map_session_data* (*HPMHOOK_post_guild_sd_check) (struct map_session_data* retVal___, int guild_id, int account_id, int char_id);
typedef bool (*HPMHOOK_pre_guild_read_guildskill_tree_db) (char **split[], int *columns, int *current);
typedef bool (*HPMHOOK_post_guild_read_guildskill_tree_db) (bool retVal___, char *split[], int columns, int current);
-typedef bool (*HPMHOOK_pre_guild_read_castledb) (char **str[], int *columns, int *current);
-typedef bool (*HPMHOOK_post_guild_read_castledb) (bool retVal___, char *str[], int columns, int current);
+typedef bool (*HPMHOOK_pre_guild_read_castledb_libconfig) (void);
+typedef bool (*HPMHOOK_post_guild_read_castledb_libconfig) (bool retVal___);
+typedef bool (*HPMHOOK_pre_guild_read_castledb_libconfig_sub) (struct config_setting_t **it, int *idx, const char **source);
+typedef bool (*HPMHOOK_post_guild_read_castledb_libconfig_sub) (bool retVal___, struct config_setting_t *it, int idx, const char *source);
+typedef bool (*HPMHOOK_pre_guild_read_castledb_libconfig_sub_warp) (struct config_setting_t **wd, const char **source, struct guild_castle **gc);
+typedef bool (*HPMHOOK_post_guild_read_castledb_libconfig_sub_warp) (bool retVal___, struct config_setting_t *wd, const char *source, struct guild_castle *gc);
typedef int (*HPMHOOK_pre_guild_payexp_timer_sub) (union DBKey *key, struct DBData **data, va_list ap);
typedef int (*HPMHOOK_post_guild_payexp_timer_sub) (int retVal___, union DBKey key, struct DBData *data, va_list ap);
typedef int (*HPMHOOK_pre_guild_send_xy_timer_sub) (union DBKey *key, struct DBData **data, va_list ap);
@@ -3130,8 +3156,8 @@ typedef void (*HPMHOOK_pre_homun_damaged) (struct homun_data **hd);
typedef void (*HPMHOOK_post_homun_damaged) (struct homun_data *hd);
typedef int (*HPMHOOK_pre_homun_dead) (struct homun_data **hd);
typedef int (*HPMHOOK_post_homun_dead) (int retVal___, struct homun_data *hd);
-typedef int (*HPMHOOK_pre_homun_vaporize) (struct map_session_data **sd, enum homun_state *flag);
-typedef int (*HPMHOOK_post_homun_vaporize) (int retVal___, struct map_session_data *sd, enum homun_state flag);
+typedef int (*HPMHOOK_pre_homun_vaporize) (struct map_session_data **sd, enum homun_state *state, bool *force);
+typedef int (*HPMHOOK_post_homun_vaporize) (int retVal___, struct map_session_data *sd, enum homun_state state, bool force);
typedef int (*HPMHOOK_pre_homun_delete) (struct homun_data **hd, int *emote);
typedef int (*HPMHOOK_post_homun_delete) (int retVal___, struct homun_data *hd, int emote);
typedef int (*HPMHOOK_pre_homun_checkskill) (struct homun_data **hd, uint16 *skill_id);
@@ -3152,6 +3178,8 @@ typedef bool (*HPMHOOK_pre_homun_mutate) (struct homun_data **hd, int *homun_id)
typedef bool (*HPMHOOK_post_homun_mutate) (bool retVal___, struct homun_data *hd, int homun_id);
typedef int (*HPMHOOK_pre_homun_gainexp) (struct homun_data **hd, unsigned int *exp);
typedef int (*HPMHOOK_post_homun_gainexp) (int retVal___, struct homun_data *hd, unsigned int exp);
+typedef int (*HPMHOOK_pre_homun_gainexp_real) (struct homun_data **hd, unsigned int *exp);
+typedef int (*HPMHOOK_post_homun_gainexp_real) (int retVal___, struct homun_data *hd, unsigned int exp);
typedef unsigned int (*HPMHOOK_pre_homun_add_intimacy) (struct homun_data **hd, unsigned int *value);
typedef unsigned int (*HPMHOOK_post_homun_add_intimacy) (unsigned int retVal___, struct homun_data *hd, unsigned int value);
typedef unsigned int (*HPMHOOK_pre_homun_consume_intimacy) (struct homun_data **hd, unsigned int *value);
@@ -3174,8 +3202,8 @@ typedef bool (*HPMHOOK_pre_homun_change_name_ack) (struct map_session_data **sd,
typedef bool (*HPMHOOK_post_homun_change_name_ack) (bool retVal___, struct map_session_data *sd, const char *name, int flag);
typedef int (*HPMHOOK_pre_homun_db_search) (int *key, int *type);
typedef int (*HPMHOOK_post_homun_db_search) (int retVal___, int key, int type);
-typedef bool (*HPMHOOK_pre_homun_create) (struct map_session_data **sd, const struct s_homunculus **hom);
-typedef bool (*HPMHOOK_post_homun_create) (bool retVal___, struct map_session_data *sd, const struct s_homunculus *hom);
+typedef bool (*HPMHOOK_pre_homun_create) (struct map_session_data **sd, const struct s_homunculus **hom, bool *is_new);
+typedef bool (*HPMHOOK_post_homun_create) (bool retVal___, struct map_session_data *sd, const struct s_homunculus *hom, bool is_new);
typedef void (*HPMHOOK_pre_homun_init_timers) (struct homun_data **hd);
typedef void (*HPMHOOK_post_homun_init_timers) (struct homun_data *hd);
typedef bool (*HPMHOOK_pre_homun_call) (struct map_session_data **sd);
@@ -3422,10 +3450,6 @@ typedef int (*HPMHOOK_pre_inter_init_sql) (const char **file);
typedef int (*HPMHOOK_post_inter_init_sql) (int retVal___, const char *file);
typedef int (*HPMHOOK_pre_inter_mapif_init) (int *fd);
typedef int (*HPMHOOK_post_inter_mapif_init) (int retVal___, int fd);
-typedef int (*HPMHOOK_pre_inter_check_ttl_wisdata_sub) (union DBKey *key, struct DBData **data, va_list ap);
-typedef int (*HPMHOOK_post_inter_check_ttl_wisdata_sub) (int retVal___, union DBKey key, struct DBData *data, va_list ap);
-typedef int (*HPMHOOK_pre_inter_check_ttl_wisdata) (void);
-typedef int (*HPMHOOK_post_inter_check_ttl_wisdata) (int retVal___);
typedef int (*HPMHOOK_pre_inter_check_length) (int *fd, int *length);
typedef int (*HPMHOOK_post_inter_check_length) (int retVal___, int fd, int length);
typedef int (*HPMHOOK_pre_inter_parse_frommap) (int *fd);
@@ -3442,12 +3466,6 @@ typedef void (*HPMHOOK_pre_inter_accinfo) (int *u_fd, int *aid, int *castergroup
typedef void (*HPMHOOK_post_inter_accinfo) (int u_fd, int aid, int castergroup, const char *query, int map_fd);
typedef void (*HPMHOOK_pre_inter_accinfo2) (bool *success, int *map_fd, int *u_fd, int *u_aid, int *account_id, const char **userid, const char **user_pass, const char **email, const char **last_ip, const char **lastlogin, const char **pin_code, const char **birthdate, int *group_id, int *logincount, int *state);
typedef void (*HPMHOOK_post_inter_accinfo2) (bool success, int map_fd, int u_fd, int u_aid, int account_id, const char *userid, const char *user_pass, const char *email, const char *last_ip, const char *lastlogin, const char *pin_code, const char *birthdate, int group_id, int logincount, int state);
-typedef struct WisData* (*HPMHOOK_pre_inter_add_wisdata) (int *fd, const unsigned char **src, const unsigned char **dst, const unsigned char **msg, int *msg_len);
-typedef struct WisData* (*HPMHOOK_post_inter_add_wisdata) (struct WisData* retVal___, int fd, const unsigned char *src, const unsigned char *dst, const unsigned char *msg, int msg_len);
-typedef struct WisData* (*HPMHOOK_pre_inter_get_wisdata) (int *id);
-typedef struct WisData* (*HPMHOOK_post_inter_get_wisdata) (struct WisData* retVal___, int id);
-typedef void (*HPMHOOK_pre_inter_remove_wisdata) (int *id);
-typedef void (*HPMHOOK_post_inter_remove_wisdata) (int id);
#endif // CHAR_INTER_H
#ifdef CHAR_INT_MAIL_H /* inter_mail */
typedef int (*HPMHOOK_pre_inter_mail_sql_init) (void);
@@ -3620,16 +3638,6 @@ typedef int (*HPMHOOK_pre_intif_parse) (int *fd);
typedef int (*HPMHOOK_post_intif_parse) (int retVal___, int fd);
typedef int (*HPMHOOK_pre_intif_create_pet) (int *account_id, int *char_id, int *pet_type, int *pet_lv, int *pet_egg_id, int *pet_equip, short *intimate, short *hungry, char *rename_flag, char *incubate, char **pet_name);
typedef int (*HPMHOOK_post_intif_create_pet) (int retVal___, int account_id, int char_id, int pet_type, int pet_lv, int pet_egg_id, int pet_equip, short intimate, short hungry, char rename_flag, char incubate, char *pet_name);
-typedef int (*HPMHOOK_pre_intif_broadcast) (const char **mes, int *len, int *type);
-typedef int (*HPMHOOK_post_intif_broadcast) (int retVal___, const char *mes, int len, int type);
-typedef int (*HPMHOOK_pre_intif_broadcast2) (const char **mes, int *len, unsigned int *fontColor, short *fontType, short *fontSize, short *fontAlign, short *fontY);
-typedef int (*HPMHOOK_post_intif_broadcast2) (int retVal___, const char *mes, int len, unsigned int fontColor, short fontType, short fontSize, short fontAlign, short fontY);
-typedef int (*HPMHOOK_pre_intif_main_message) (struct map_session_data **sd, const char **message);
-typedef int (*HPMHOOK_post_intif_main_message) (int retVal___, struct map_session_data *sd, const char *message);
-typedef int (*HPMHOOK_pre_intif_wis_message) (struct map_session_data **sd, const char **nick, const char **mes, int *mes_len);
-typedef int (*HPMHOOK_post_intif_wis_message) (int retVal___, struct map_session_data *sd, const char *nick, const char *mes, int mes_len);
-typedef int (*HPMHOOK_pre_intif_wis_message_to_gm) (char **Wisp_name, int *permission, char **mes);
-typedef int (*HPMHOOK_post_intif_wis_message_to_gm) (int retVal___, char *Wisp_name, int permission, char *mes);
typedef int (*HPMHOOK_pre_intif_saveregistry) (struct map_session_data **sd);
typedef int (*HPMHOOK_post_intif_saveregistry) (int retVal___, struct map_session_data *sd);
typedef int (*HPMHOOK_pre_intif_request_registry) (struct map_session_data **sd, int *flag);
@@ -3656,8 +3664,6 @@ typedef int (*HPMHOOK_pre_intif_party_changemap) (struct map_session_data **sd,
typedef int (*HPMHOOK_post_intif_party_changemap) (int retVal___, struct map_session_data *sd, int online);
typedef int (*HPMHOOK_pre_intif_break_party) (int *party_id);
typedef int (*HPMHOOK_post_intif_break_party) (int retVal___, int party_id);
-typedef int (*HPMHOOK_pre_intif_party_message) (int *party_id, int *account_id, const char **mes, int *len);
-typedef int (*HPMHOOK_post_intif_party_message) (int retVal___, int party_id, int account_id, const char *mes, int len);
typedef int (*HPMHOOK_pre_intif_party_leaderchange) (int *party_id, int *account_id, int *char_id);
typedef int (*HPMHOOK_post_intif_party_leaderchange) (int retVal___, int party_id, int account_id, int char_id);
typedef int (*HPMHOOK_pre_intif_guild_create) (const char **name, const struct guild_member **master);
@@ -3672,8 +3678,6 @@ typedef int (*HPMHOOK_pre_intif_guild_memberinfoshort) (int *guild_id, int *acco
typedef int (*HPMHOOK_post_intif_guild_memberinfoshort) (int retVal___, int guild_id, int account_id, int char_id, int online, int lv, int class);
typedef int (*HPMHOOK_pre_intif_guild_break) (int *guild_id);
typedef int (*HPMHOOK_post_intif_guild_break) (int retVal___, int guild_id);
-typedef int (*HPMHOOK_pre_intif_guild_message) (int *guild_id, int *account_id, const char **mes, int *len);
-typedef int (*HPMHOOK_post_intif_guild_message) (int retVal___, int guild_id, int account_id, const char *mes, int len);
typedef int (*HPMHOOK_pre_intif_guild_change_gm) (int *guild_id, const char **name, int *len);
typedef int (*HPMHOOK_post_intif_guild_change_gm) (int retVal___, int guild_id, const char *name, int len);
typedef int (*HPMHOOK_pre_intif_guild_change_basicinfo) (int *guild_id, int *type, const void **data, int *len);
@@ -3780,14 +3784,6 @@ typedef void (*HPMHOOK_pre_intif_achievements_request) (struct map_session_data
typedef void (*HPMHOOK_post_intif_achievements_request) (struct map_session_data *sd);
typedef void (*HPMHOOK_pre_intif_achievements_save) (struct map_session_data **sd);
typedef void (*HPMHOOK_post_intif_achievements_save) (struct map_session_data *sd);
-typedef void (*HPMHOOK_pre_intif_pWisMessage) (int *fd);
-typedef void (*HPMHOOK_post_intif_pWisMessage) (int fd);
-typedef void (*HPMHOOK_pre_intif_pWisEnd) (int *fd);
-typedef void (*HPMHOOK_post_intif_pWisEnd) (int fd);
-typedef int (*HPMHOOK_pre_intif_pWisToGM_sub) (struct map_session_data **sd, va_list va);
-typedef int (*HPMHOOK_post_intif_pWisToGM_sub) (int retVal___, struct map_session_data *sd, va_list va);
-typedef void (*HPMHOOK_pre_intif_pWisToGM) (int *fd);
-typedef void (*HPMHOOK_post_intif_pWisToGM) (int fd);
typedef void (*HPMHOOK_pre_intif_pRegisters) (int *fd);
typedef void (*HPMHOOK_post_intif_pRegisters) (int fd);
typedef void (*HPMHOOK_pre_intif_pAccountStorage) (int *fd);
@@ -3816,8 +3812,6 @@ typedef void (*HPMHOOK_pre_intif_pPartyMove) (int *fd);
typedef void (*HPMHOOK_post_intif_pPartyMove) (int fd);
typedef void (*HPMHOOK_pre_intif_pPartyBroken) (int *fd);
typedef void (*HPMHOOK_post_intif_pPartyBroken) (int fd);
-typedef void (*HPMHOOK_pre_intif_pPartyMessage) (int *fd);
-typedef void (*HPMHOOK_post_intif_pPartyMessage) (int fd);
typedef void (*HPMHOOK_pre_intif_pGuildCreated) (int *fd);
typedef void (*HPMHOOK_post_intif_pGuildCreated) (int fd);
typedef void (*HPMHOOK_pre_intif_pGuildInfo) (int *fd);
@@ -3830,8 +3824,6 @@ typedef void (*HPMHOOK_pre_intif_pGuildMemberInfoShort) (int *fd);
typedef void (*HPMHOOK_post_intif_pGuildMemberInfoShort) (int fd);
typedef void (*HPMHOOK_pre_intif_pGuildBroken) (int *fd);
typedef void (*HPMHOOK_post_intif_pGuildBroken) (int fd);
-typedef void (*HPMHOOK_pre_intif_pGuildMessage) (int *fd);
-typedef void (*HPMHOOK_post_intif_pGuildMessage) (int fd);
typedef void (*HPMHOOK_pre_intif_pGuildBasicInfoChanged) (int *fd);
typedef void (*HPMHOOK_post_intif_pGuildBasicInfoChanged) (int fd);
typedef void (*HPMHOOK_pre_intif_pGuildMemberInfoChanged) (int *fd);
@@ -4006,8 +3998,8 @@ typedef struct item_data* (*HPMHOOK_pre_itemdb_name2id) (const char **str);
typedef struct item_data* (*HPMHOOK_post_itemdb_name2id) (struct item_data* retVal___, const char *str);
typedef struct item_data* (*HPMHOOK_pre_itemdb_search_name) (const char **name);
typedef struct item_data* (*HPMHOOK_post_itemdb_search_name) (struct item_data* retVal___, const char *name);
-typedef int (*HPMHOOK_pre_itemdb_search_name_array) (struct item_data ***data, int *size, const char **str, int *flag);
-typedef int (*HPMHOOK_post_itemdb_search_name_array) (int retVal___, struct item_data **data, int size, const char *str, int flag);
+typedef int (*HPMHOOK_pre_itemdb_search_name_array) (struct item_data ***data, const int *size, const char **str, enum item_name_search_flag *flag);
+typedef int (*HPMHOOK_post_itemdb_search_name_array) (int retVal___, struct item_data **data, const int size, const char *str, enum item_name_search_flag flag);
typedef struct item_data* (*HPMHOOK_pre_itemdb_load) (int *nameid);
typedef struct item_data* (*HPMHOOK_post_itemdb_load) (struct item_data* retVal___, int nameid);
typedef struct item_data* (*HPMHOOK_pre_itemdb_search) (int *nameid);
@@ -4072,10 +4064,10 @@ typedef int (*HPMHOOK_pre_itemdb_isidentified) (int *nameid);
typedef int (*HPMHOOK_post_itemdb_isidentified) (int retVal___, int nameid);
typedef int (*HPMHOOK_pre_itemdb_isidentified2) (struct item_data **data);
typedef int (*HPMHOOK_post_itemdb_isidentified2) (int retVal___, struct item_data *data);
-typedef int (*HPMHOOK_pre_itemdb_combo_split_atoi) (char **str, int **val);
-typedef int (*HPMHOOK_post_itemdb_combo_split_atoi) (int retVal___, char *str, int *val);
-typedef void (*HPMHOOK_pre_itemdb_read_combos) (void);
-typedef void (*HPMHOOK_post_itemdb_read_combos) (void);
+typedef bool (*HPMHOOK_pre_itemdb_read_combodb_libconfig) (void);
+typedef bool (*HPMHOOK_post_itemdb_read_combodb_libconfig) (bool retVal___);
+typedef bool (*HPMHOOK_pre_itemdb_read_combodb_libconfig_sub) (struct config_setting_t **it, int *idx, const char **source);
+typedef bool (*HPMHOOK_post_itemdb_read_combodb_libconfig_sub) (bool retVal___, struct config_setting_t *it, int idx, const char *source);
typedef int (*HPMHOOK_pre_itemdb_gendercheck) (struct item_data **id);
typedef int (*HPMHOOK_post_itemdb_gendercheck) (int retVal___, struct item_data *id);
typedef int (*HPMHOOK_pre_itemdb_validate_entry) (struct item_data **entry, int *n, const char **source);
@@ -4112,6 +4104,12 @@ typedef bool (*HPMHOOK_pre_itemdb_lookup_const_mask) (const struct config_settin
typedef bool (*HPMHOOK_post_itemdb_lookup_const_mask) (bool retVal___, const struct config_setting_t *it, const char *name, int *value);
typedef int (*HPMHOOK_pre_itemdb_addname_sub) (union DBKey *key, struct DBData **data, va_list ap);
typedef int (*HPMHOOK_post_itemdb_addname_sub) (int retVal___, union DBKey key, struct DBData *data, va_list ap);
+typedef bool (*HPMHOOK_pre_itemdb_read_libconfig_lapineddukddak) (void);
+typedef bool (*HPMHOOK_post_itemdb_read_libconfig_lapineddukddak) (bool retVal___);
+typedef bool (*HPMHOOK_pre_itemdb_read_libconfig_lapineddukddak_sub) (struct config_setting_t **it, const char **source);
+typedef bool (*HPMHOOK_post_itemdb_read_libconfig_lapineddukddak_sub) (bool retVal___, struct config_setting_t *it, const char *source);
+typedef bool (*HPMHOOK_pre_itemdb_read_libconfig_lapineddukddak_sub_sources) (struct config_setting_t **sources, struct item_data **data);
+typedef bool (*HPMHOOK_post_itemdb_read_libconfig_lapineddukddak_sub_sources) (bool retVal___, struct config_setting_t *sources, struct item_data *data);
#endif // MAP_ITEMDB_H
#ifdef LOGIN_LOGIN_H /* lchrif */
typedef void (*HPMHOOK_pre_lchrif_server_init) (int *id);
@@ -4698,8 +4696,8 @@ typedef void (*HPMHOOK_pre_map_addiddb) (struct block_list **bl);
typedef void (*HPMHOOK_post_map_addiddb) (struct block_list *bl);
typedef void (*HPMHOOK_pre_map_deliddb) (struct block_list **bl);
typedef void (*HPMHOOK_post_map_deliddb) (struct block_list *bl);
-typedef struct map_session_data* (*HPMHOOK_pre_map_nick2sd) (const char **nick);
-typedef struct map_session_data* (*HPMHOOK_post_map_nick2sd) (struct map_session_data* retVal___, const char *nick);
+typedef struct map_session_data* (*HPMHOOK_pre_map_nick2sd) (const char **nick, bool *allow_partial);
+typedef struct map_session_data* (*HPMHOOK_post_map_nick2sd) (struct map_session_data* retVal___, const char *nick, bool allow_partial);
typedef struct mob_data* (*HPMHOOK_pre_map_getmob_boss) (int16 *m);
typedef struct mob_data* (*HPMHOOK_post_map_getmob_boss) (struct mob_data* retVal___, int16 m);
typedef struct mob_data* (*HPMHOOK_pre_map_id2boss) (int *id);
@@ -4914,8 +4912,6 @@ typedef int (*HPMHOOK_pre_mapif_guild_memberinfoshort) (struct guild **g, int *i
typedef int (*HPMHOOK_post_mapif_guild_memberinfoshort) (int retVal___, struct guild *g, int idx);
typedef int (*HPMHOOK_pre_mapif_guild_broken) (int *guild_id, int *flag);
typedef int (*HPMHOOK_post_mapif_guild_broken) (int retVal___, int guild_id, int flag);
-typedef int (*HPMHOOK_pre_mapif_guild_message) (int *guild_id, int *account_id, const char **mes, int *len, int *sfd);
-typedef int (*HPMHOOK_post_mapif_guild_message) (int retVal___, int guild_id, int account_id, const char *mes, int len, int sfd);
typedef int (*HPMHOOK_pre_mapif_guild_basicinfochanged) (int *guild_id, int *type, const void **data, int *len);
typedef int (*HPMHOOK_post_mapif_guild_basicinfochanged) (int retVal___, int guild_id, int type, const void *data, int len);
typedef int (*HPMHOOK_pre_mapif_guild_memberinfochanged) (int *guild_id, int *account_id, int *char_id, int *type, const void **data, int *len);
@@ -4946,8 +4942,6 @@ typedef int (*HPMHOOK_pre_mapif_parse_GuildChangeMemberInfoShort) (int *fd, int
typedef int (*HPMHOOK_post_mapif_parse_GuildChangeMemberInfoShort) (int retVal___, int fd, int guild_id, int account_id, int char_id, int online, int lv, int class);
typedef int (*HPMHOOK_pre_mapif_parse_BreakGuild) (int *fd, int *guild_id);
typedef int (*HPMHOOK_post_mapif_parse_BreakGuild) (int retVal___, int fd, int guild_id);
-typedef int (*HPMHOOK_pre_mapif_parse_GuildMessage) (int *fd, int *guild_id, int *account_id, const char **mes, int *len);
-typedef int (*HPMHOOK_post_mapif_parse_GuildMessage) (int retVal___, int fd, int guild_id, int account_id, const char *mes, int len);
typedef int (*HPMHOOK_pre_mapif_parse_GuildBasicInfoChange) (int *fd, int *guild_id, int *type, const void **data, int *len);
typedef int (*HPMHOOK_post_mapif_parse_GuildBasicInfoChange) (int retVal___, int fd, int guild_id, int type, const void *data, int len);
typedef int (*HPMHOOK_pre_mapif_parse_GuildMemberInfoChange) (int *fd, int *guild_id, int *account_id, int *char_id, int *type, const char **data, int *len);
@@ -5042,8 +5036,6 @@ typedef int (*HPMHOOK_pre_mapif_party_membermoved) (struct party **p, int *idx);
typedef int (*HPMHOOK_post_mapif_party_membermoved) (int retVal___, struct party *p, int idx);
typedef int (*HPMHOOK_pre_mapif_party_broken) (int *party_id, int *flag);
typedef int (*HPMHOOK_post_mapif_party_broken) (int retVal___, int party_id, int flag);
-typedef int (*HPMHOOK_pre_mapif_party_message) (int *party_id, int *account_id, const char **mes, int *len, int *sfd);
-typedef int (*HPMHOOK_post_mapif_party_message) (int retVal___, int party_id, int account_id, const char *mes, int len, int sfd);
typedef int (*HPMHOOK_pre_mapif_parse_CreateParty) (int *fd, const char **name, int *item, int *item2, const struct party_member **leader);
typedef int (*HPMHOOK_post_mapif_parse_CreateParty) (int retVal___, int fd, const char *name, int item, int item2, const struct party_member *leader);
typedef void (*HPMHOOK_pre_mapif_parse_PartyInfo) (int *fd, int *party_id, int *char_id);
@@ -5058,8 +5050,6 @@ typedef int (*HPMHOOK_pre_mapif_parse_PartyChangeMap) (int *fd, int *party_id, i
typedef int (*HPMHOOK_post_mapif_parse_PartyChangeMap) (int retVal___, int fd, int party_id, int account_id, int char_id, unsigned short map, int online, unsigned int lv);
typedef int (*HPMHOOK_pre_mapif_parse_BreakParty) (int *fd, int *party_id);
typedef int (*HPMHOOK_post_mapif_parse_BreakParty) (int retVal___, int fd, int party_id);
-typedef int (*HPMHOOK_pre_mapif_parse_PartyMessage) (int *fd, int *party_id, int *account_id, const char **mes, int *len);
-typedef int (*HPMHOOK_post_mapif_parse_PartyMessage) (int retVal___, int fd, int party_id, int account_id, const char *mes, int len);
typedef int (*HPMHOOK_pre_mapif_parse_PartyLeaderChange) (int *fd, int *party_id, int *account_id, int *char_id);
typedef int (*HPMHOOK_post_mapif_parse_PartyLeaderChange) (int retVal___, int fd, int party_id, int account_id, int char_id);
typedef int (*HPMHOOK_pre_mapif_pet_created) (int *fd, int *account_id, struct s_pet **p);
@@ -5136,26 +5126,10 @@ typedef void (*HPMHOOK_pre_mapif_parse_ItemBoundRetrieve) (int *fd);
typedef void (*HPMHOOK_post_mapif_parse_ItemBoundRetrieve) (int fd);
typedef void (*HPMHOOK_pre_mapif_parse_accinfo) (int *fd);
typedef void (*HPMHOOK_post_mapif_parse_accinfo) (int fd);
-typedef int (*HPMHOOK_pre_mapif_broadcast) (const unsigned char **mes, int *len, unsigned int *fontColor, short *fontType, short *fontSize, short *fontAlign, short *fontY, int *sfd);
-typedef int (*HPMHOOK_post_mapif_broadcast) (int retVal___, const unsigned char *mes, int len, unsigned int fontColor, short fontType, short fontSize, short fontAlign, short fontY, int sfd);
-typedef int (*HPMHOOK_pre_mapif_wis_message) (struct WisData **wd);
-typedef int (*HPMHOOK_post_mapif_wis_message) (int retVal___, struct WisData *wd);
-typedef void (*HPMHOOK_pre_mapif_wis_response) (int *fd, const unsigned char **src, int *flag);
-typedef void (*HPMHOOK_post_mapif_wis_response) (int fd, const unsigned char *src, int flag);
-typedef int (*HPMHOOK_pre_mapif_wis_end) (struct WisData **wd, int *flag);
-typedef int (*HPMHOOK_post_mapif_wis_end) (int retVal___, struct WisData *wd, int flag);
typedef int (*HPMHOOK_pre_mapif_account_reg_reply) (int *fd, int *account_id, int *char_id, int *type);
typedef int (*HPMHOOK_post_mapif_account_reg_reply) (int retVal___, int fd, int account_id, int char_id, int type);
typedef int (*HPMHOOK_pre_mapif_disconnectplayer) (int *fd, int *account_id, int *char_id, int *reason);
typedef int (*HPMHOOK_post_mapif_disconnectplayer) (int retVal___, int fd, int account_id, int char_id, int reason);
-typedef int (*HPMHOOK_pre_mapif_parse_broadcast) (int *fd);
-typedef int (*HPMHOOK_post_mapif_parse_broadcast) (int retVal___, int fd);
-typedef int (*HPMHOOK_pre_mapif_parse_WisRequest) (int *fd);
-typedef int (*HPMHOOK_post_mapif_parse_WisRequest) (int retVal___, int fd);
-typedef int (*HPMHOOK_pre_mapif_parse_WisReply) (int *fd);
-typedef int (*HPMHOOK_post_mapif_parse_WisReply) (int retVal___, int fd);
-typedef int (*HPMHOOK_pre_mapif_parse_WisToGM) (int *fd);
-typedef int (*HPMHOOK_post_mapif_parse_WisToGM) (int retVal___, int fd);
typedef int (*HPMHOOK_pre_mapif_parse_Registry) (int *fd);
typedef int (*HPMHOOK_post_mapif_parse_Registry) (int retVal___, int fd);
typedef int (*HPMHOOK_pre_mapif_parse_RegistryRequest) (int *fd);
@@ -5298,6 +5272,8 @@ typedef int (*HPMHOOK_pre_mob_final) (void);
typedef int (*HPMHOOK_post_mob_final) (int retVal___);
typedef void (*HPMHOOK_pre_mob_reload) (void);
typedef void (*HPMHOOK_post_mob_reload) (void);
+typedef int (*HPMHOOK_pre_mob_reload_sub_mob) (struct mob_data **md, va_list args);
+typedef int (*HPMHOOK_post_mob_reload_sub_mob) (int retVal___, struct mob_data *md, va_list args);
typedef struct mob_db* (*HPMHOOK_pre_mob_db) (int *index);
typedef struct mob_db* (*HPMHOOK_post_mob_db) (struct mob_db* retVal___, int index);
typedef struct mob_chat* (*HPMHOOK_pre_mob_chat) (short *id);
@@ -5774,8 +5750,8 @@ typedef bool (*HPMHOOK_pre_npc_trader_pay) (struct npc_data **nd, struct map_ses
typedef bool (*HPMHOOK_post_npc_trader_pay) (bool retVal___, struct npc_data *nd, struct map_session_data *sd, int price, int points);
typedef void (*HPMHOOK_pre_npc_trader_update) (int *master);
typedef void (*HPMHOOK_post_npc_trader_update) (int master);
-typedef int (*HPMHOOK_pre_npc_market_buylist) (struct map_session_data **sd, struct itemlist **item_list);
-typedef int (*HPMHOOK_post_npc_market_buylist) (int retVal___, struct map_session_data *sd, struct itemlist *item_list);
+typedef enum market_buy_result (*HPMHOOK_pre_npc_market_buylist) (struct map_session_data **sd, struct itemlist **item_list);
+typedef enum market_buy_result (*HPMHOOK_post_npc_market_buylist) (enum market_buy_result retVal___, struct map_session_data *sd, struct itemlist *item_list);
typedef int (*HPMHOOK_pre_npc_barter_buylist) (struct map_session_data **sd, struct barteritemlist **item_list);
typedef int (*HPMHOOK_post_npc_barter_buylist) (int retVal___, struct map_session_data *sd, struct barteritemlist *item_list);
typedef bool (*HPMHOOK_pre_npc_trader_open) (struct map_session_data **sd, struct npc_data **nd);
@@ -5874,8 +5850,6 @@ typedef int (*HPMHOOK_pre_party_send_logout) (struct map_session_data **sd);
typedef int (*HPMHOOK_post_party_send_logout) (int retVal___, struct map_session_data *sd);
typedef int (*HPMHOOK_pre_party_send_message) (struct map_session_data **sd, const char **mes);
typedef int (*HPMHOOK_post_party_send_message) (int retVal___, struct map_session_data *sd, const char *mes);
-typedef int (*HPMHOOK_pre_party_recv_message) (int *party_id, int *account_id, const char **mes, int *len);
-typedef int (*HPMHOOK_post_party_recv_message) (int retVal___, int party_id, int account_id, const char *mes, int len);
typedef int (*HPMHOOK_pre_party_skill_check) (struct map_session_data **sd, int *party_id, uint16 *skill_id, uint16 *skill_lv);
typedef int (*HPMHOOK_post_party_skill_check) (int retVal___, struct map_session_data *sd, int party_id, uint16 skill_id, uint16 skill_lv);
typedef int (*HPMHOOK_pre_party_send_xy_clear) (struct party_data **p);
@@ -6066,8 +6040,8 @@ typedef bool (*HPMHOOK_pre_pc_adoption) (struct map_session_data **p1_sd, struct
typedef bool (*HPMHOOK_post_pc_adoption) (bool retVal___, struct map_session_data *p1_sd, struct map_session_data *p2_sd, struct map_session_data *b_sd);
typedef int (*HPMHOOK_pre_pc_updateweightstatus) (struct map_session_data **sd);
typedef int (*HPMHOOK_post_pc_updateweightstatus) (int retVal___, struct map_session_data *sd);
-typedef int (*HPMHOOK_pre_pc_addautobonus) (struct s_autobonus **bonus, char *max, const char **bonus_script, short *rate, unsigned int *dur, short *atk_type, const char **o_script, unsigned short *pos, bool *onskill);
-typedef int (*HPMHOOK_post_pc_addautobonus) (int retVal___, struct s_autobonus *bonus, char max, const char *bonus_script, short rate, unsigned int dur, short atk_type, const char *o_script, unsigned short pos, bool onskill);
+typedef int (*HPMHOOK_pre_pc_addautobonus) (struct s_autobonus **bonus, char *max, const char **bonus_script, short *rate, unsigned int *dur, short *atk_type, const char **o_script, unsigned int *pos, bool *onskill);
+typedef int (*HPMHOOK_post_pc_addautobonus) (int retVal___, struct s_autobonus *bonus, char max, const char *bonus_script, short rate, unsigned int dur, short atk_type, const char *o_script, unsigned int pos, bool onskill);
typedef int (*HPMHOOK_pre_pc_exeautobonus) (struct map_session_data **sd, struct s_autobonus **bonus);
typedef int (*HPMHOOK_post_pc_exeautobonus) (int retVal___, struct map_session_data *sd, struct s_autobonus *bonus);
typedef int (*HPMHOOK_pre_pc_endautobonus) (int *tid, int64 *tick, int *id, intptr_t *data);
@@ -6426,8 +6400,14 @@ typedef void (*HPMHOOK_pre_pc_update_idle_time) (struct map_session_data **sd, e
typedef void (*HPMHOOK_post_pc_update_idle_time) (struct map_session_data *sd, enum e_battle_config_idletime type);
typedef int (*HPMHOOK_pre_pc_have_magnifier) (struct map_session_data **sd);
typedef int (*HPMHOOK_post_pc_have_magnifier) (int retVal___, struct map_session_data *sd);
+typedef int (*HPMHOOK_pre_pc_have_item_chain) (struct map_session_data **sd, unsigned short *chain_id);
+typedef int (*HPMHOOK_post_pc_have_item_chain) (int retVal___, struct map_session_data *sd, unsigned short chain_id);
typedef bool (*HPMHOOK_pre_pc_process_chat_message) (struct map_session_data **sd, const char **message);
typedef bool (*HPMHOOK_post_pc_process_chat_message) (bool retVal___, struct map_session_data *sd, const char *message);
+typedef int (*HPMHOOK_pre_pc_wis_message_to_gm) (const char **sender_name, int *permission, const char **message);
+typedef int (*HPMHOOK_post_pc_wis_message_to_gm) (int retVal___, const char *sender_name, int permission, const char *message);
+typedef int (*HPMHOOK_pre_pc_wis_message_to_gm_sub) (struct map_session_data **sd, va_list va);
+typedef int (*HPMHOOK_post_pc_wis_message_to_gm_sub) (int retVal___, struct map_session_data *sd, va_list va);
typedef void (*HPMHOOK_pre_pc_check_supernovice_call) (struct map_session_data **sd, const char **message);
typedef void (*HPMHOOK_post_pc_check_supernovice_call) (struct map_session_data *sd, const char *message);
typedef bool (*HPMHOOK_pre_pc_check_basicskill) (struct map_session_data **sd, int *level);
@@ -7098,6 +7078,12 @@ typedef void (*HPMHOOK_pre_script_run_item_equip_script) (struct map_session_dat
typedef void (*HPMHOOK_post_script_run_item_equip_script) (struct map_session_data *sd, struct item_data *data, int oid);
typedef void (*HPMHOOK_pre_script_run_item_unequip_script) (struct map_session_data **sd, struct item_data **data, int *oid);
typedef void (*HPMHOOK_post_script_run_item_unequip_script) (struct map_session_data *sd, struct item_data *data, int oid);
+typedef void (*HPMHOOK_pre_script_run_item_rental_end_script) (struct map_session_data **sd, struct item_data **data, int *oid);
+typedef void (*HPMHOOK_post_script_run_item_rental_end_script) (struct map_session_data *sd, struct item_data *data, int oid);
+typedef void (*HPMHOOK_pre_script_run_item_rental_start_script) (struct map_session_data **sd, struct item_data **data, int *oid);
+typedef void (*HPMHOOK_post_script_run_item_rental_start_script) (struct map_session_data *sd, struct item_data *data, int oid);
+typedef void (*HPMHOOK_pre_script_run_item_lapineddukddak_script) (struct map_session_data **sd, struct item_data **data, int *oid);
+typedef void (*HPMHOOK_post_script_run_item_lapineddukddak_script) (struct map_session_data *sd, struct item_data *data, int oid);
#endif // MAP_SCRIPT_H
#ifdef MAP_SEARCHSTORE_H /* searchstore */
typedef bool (*HPMHOOK_pre_searchstore_open) (struct map_session_data **sd, unsigned int *uses, unsigned short *effect);
@@ -7986,8 +7972,14 @@ typedef bool (*HPMHOOK_pre_status_readdb_job2) (char **fields[], int *columns, i
typedef bool (*HPMHOOK_post_status_readdb_job2) (bool retVal___, char *fields[], int columns, int current);
typedef bool (*HPMHOOK_pre_status_readdb_sizefix) (char **fields[], int *columns, int *current);
typedef bool (*HPMHOOK_post_status_readdb_sizefix) (bool retVal___, char *fields[], int columns, int current);
-typedef bool (*HPMHOOK_pre_status_readdb_scconfig) (char **fields[], int *columns, int *current);
-typedef bool (*HPMHOOK_post_status_readdb_scconfig) (bool retVal___, char *fields[], int columns, int current);
+typedef bool (*HPMHOOK_pre_status_read_scdb_libconfig) (void);
+typedef bool (*HPMHOOK_post_status_read_scdb_libconfig) (bool retVal___);
+typedef bool (*HPMHOOK_pre_status_read_scdb_libconfig_sub) (struct config_setting_t **it, int *idx, const char **source);
+typedef bool (*HPMHOOK_post_status_read_scdb_libconfig_sub) (bool retVal___, struct config_setting_t *it, int idx, const char *source);
+typedef bool (*HPMHOOK_pre_status_read_scdb_libconfig_sub_flag) (struct config_setting_t **it, int *type, const char **source);
+typedef bool (*HPMHOOK_post_status_read_scdb_libconfig_sub_flag) (bool retVal___, struct config_setting_t *it, int type, const char *source);
+typedef bool (*HPMHOOK_pre_status_read_scdb_libconfig_sub_flag_additional) (struct config_setting_t **it, int *type, const char **source);
+typedef bool (*HPMHOOK_post_status_read_scdb_libconfig_sub_flag_additional) (bool retVal___, struct config_setting_t *it, int type, const char *source);
typedef void (*HPMHOOK_pre_status_read_job_db) (void);
typedef void (*HPMHOOK_post_status_read_job_db) (void);
typedef void (*HPMHOOK_pre_status_read_job_db_sub) (int *idx, const char **name, struct config_setting_t **jdb);
diff --git a/src/plugins/HPMHooking/HPMHooking_char.HPMHooksCore.inc b/src/plugins/HPMHooking/HPMHooking_char.HPMHooksCore.inc
index 9302a8d19..a5f65654e 100644
--- a/src/plugins/HPMHooking/HPMHooking_char.HPMHooksCore.inc
+++ b/src/plugins/HPMHooking/HPMHooking_char.HPMHooksCore.inc
@@ -610,10 +610,6 @@ struct {
struct HPMHookPoint *HP_inter_init_sql_post;
struct HPMHookPoint *HP_inter_mapif_init_pre;
struct HPMHookPoint *HP_inter_mapif_init_post;
- struct HPMHookPoint *HP_inter_check_ttl_wisdata_sub_pre;
- struct HPMHookPoint *HP_inter_check_ttl_wisdata_sub_post;
- struct HPMHookPoint *HP_inter_check_ttl_wisdata_pre;
- struct HPMHookPoint *HP_inter_check_ttl_wisdata_post;
struct HPMHookPoint *HP_inter_check_length_pre;
struct HPMHookPoint *HP_inter_check_length_post;
struct HPMHookPoint *HP_inter_parse_frommap_pre;
@@ -630,12 +626,6 @@ struct {
struct HPMHookPoint *HP_inter_accinfo_post;
struct HPMHookPoint *HP_inter_accinfo2_pre;
struct HPMHookPoint *HP_inter_accinfo2_post;
- struct HPMHookPoint *HP_inter_add_wisdata_pre;
- struct HPMHookPoint *HP_inter_add_wisdata_post;
- struct HPMHookPoint *HP_inter_get_wisdata_pre;
- struct HPMHookPoint *HP_inter_get_wisdata_post;
- struct HPMHookPoint *HP_inter_remove_wisdata_pre;
- struct HPMHookPoint *HP_inter_remove_wisdata_post;
struct HPMHookPoint *HP_inter_mail_sql_init_pre;
struct HPMHookPoint *HP_inter_mail_sql_init_post;
struct HPMHookPoint *HP_inter_mail_sql_final_pre;
@@ -1032,8 +1022,6 @@ struct {
struct HPMHookPoint *HP_mapif_guild_memberinfoshort_post;
struct HPMHookPoint *HP_mapif_guild_broken_pre;
struct HPMHookPoint *HP_mapif_guild_broken_post;
- struct HPMHookPoint *HP_mapif_guild_message_pre;
- struct HPMHookPoint *HP_mapif_guild_message_post;
struct HPMHookPoint *HP_mapif_guild_basicinfochanged_pre;
struct HPMHookPoint *HP_mapif_guild_basicinfochanged_post;
struct HPMHookPoint *HP_mapif_guild_memberinfochanged_pre;
@@ -1064,8 +1052,6 @@ struct {
struct HPMHookPoint *HP_mapif_parse_GuildChangeMemberInfoShort_post;
struct HPMHookPoint *HP_mapif_parse_BreakGuild_pre;
struct HPMHookPoint *HP_mapif_parse_BreakGuild_post;
- struct HPMHookPoint *HP_mapif_parse_GuildMessage_pre;
- struct HPMHookPoint *HP_mapif_parse_GuildMessage_post;
struct HPMHookPoint *HP_mapif_parse_GuildBasicInfoChange_pre;
struct HPMHookPoint *HP_mapif_parse_GuildBasicInfoChange_post;
struct HPMHookPoint *HP_mapif_parse_GuildMemberInfoChange_pre;
@@ -1160,8 +1146,6 @@ struct {
struct HPMHookPoint *HP_mapif_party_membermoved_post;
struct HPMHookPoint *HP_mapif_party_broken_pre;
struct HPMHookPoint *HP_mapif_party_broken_post;
- struct HPMHookPoint *HP_mapif_party_message_pre;
- struct HPMHookPoint *HP_mapif_party_message_post;
struct HPMHookPoint *HP_mapif_parse_CreateParty_pre;
struct HPMHookPoint *HP_mapif_parse_CreateParty_post;
struct HPMHookPoint *HP_mapif_parse_PartyInfo_pre;
@@ -1176,8 +1160,6 @@ struct {
struct HPMHookPoint *HP_mapif_parse_PartyChangeMap_post;
struct HPMHookPoint *HP_mapif_parse_BreakParty_pre;
struct HPMHookPoint *HP_mapif_parse_BreakParty_post;
- struct HPMHookPoint *HP_mapif_parse_PartyMessage_pre;
- struct HPMHookPoint *HP_mapif_parse_PartyMessage_post;
struct HPMHookPoint *HP_mapif_parse_PartyLeaderChange_pre;
struct HPMHookPoint *HP_mapif_parse_PartyLeaderChange_post;
struct HPMHookPoint *HP_mapif_pet_created_pre;
@@ -1254,26 +1236,10 @@ struct {
struct HPMHookPoint *HP_mapif_parse_ItemBoundRetrieve_post;
struct HPMHookPoint *HP_mapif_parse_accinfo_pre;
struct HPMHookPoint *HP_mapif_parse_accinfo_post;
- struct HPMHookPoint *HP_mapif_broadcast_pre;
- struct HPMHookPoint *HP_mapif_broadcast_post;
- struct HPMHookPoint *HP_mapif_wis_message_pre;
- struct HPMHookPoint *HP_mapif_wis_message_post;
- struct HPMHookPoint *HP_mapif_wis_response_pre;
- struct HPMHookPoint *HP_mapif_wis_response_post;
- struct HPMHookPoint *HP_mapif_wis_end_pre;
- struct HPMHookPoint *HP_mapif_wis_end_post;
struct HPMHookPoint *HP_mapif_account_reg_reply_pre;
struct HPMHookPoint *HP_mapif_account_reg_reply_post;
struct HPMHookPoint *HP_mapif_disconnectplayer_pre;
struct HPMHookPoint *HP_mapif_disconnectplayer_post;
- struct HPMHookPoint *HP_mapif_parse_broadcast_pre;
- struct HPMHookPoint *HP_mapif_parse_broadcast_post;
- struct HPMHookPoint *HP_mapif_parse_WisRequest_pre;
- struct HPMHookPoint *HP_mapif_parse_WisRequest_post;
- struct HPMHookPoint *HP_mapif_parse_WisReply_pre;
- struct HPMHookPoint *HP_mapif_parse_WisReply_post;
- struct HPMHookPoint *HP_mapif_parse_WisToGM_pre;
- struct HPMHookPoint *HP_mapif_parse_WisToGM_post;
struct HPMHookPoint *HP_mapif_parse_Registry_pre;
struct HPMHookPoint *HP_mapif_parse_Registry_post;
struct HPMHookPoint *HP_mapif_parse_RegistryRequest_pre;
@@ -2257,10 +2223,6 @@ struct {
int HP_inter_init_sql_post;
int HP_inter_mapif_init_pre;
int HP_inter_mapif_init_post;
- int HP_inter_check_ttl_wisdata_sub_pre;
- int HP_inter_check_ttl_wisdata_sub_post;
- int HP_inter_check_ttl_wisdata_pre;
- int HP_inter_check_ttl_wisdata_post;
int HP_inter_check_length_pre;
int HP_inter_check_length_post;
int HP_inter_parse_frommap_pre;
@@ -2277,12 +2239,6 @@ struct {
int HP_inter_accinfo_post;
int HP_inter_accinfo2_pre;
int HP_inter_accinfo2_post;
- int HP_inter_add_wisdata_pre;
- int HP_inter_add_wisdata_post;
- int HP_inter_get_wisdata_pre;
- int HP_inter_get_wisdata_post;
- int HP_inter_remove_wisdata_pre;
- int HP_inter_remove_wisdata_post;
int HP_inter_mail_sql_init_pre;
int HP_inter_mail_sql_init_post;
int HP_inter_mail_sql_final_pre;
@@ -2679,8 +2635,6 @@ struct {
int HP_mapif_guild_memberinfoshort_post;
int HP_mapif_guild_broken_pre;
int HP_mapif_guild_broken_post;
- int HP_mapif_guild_message_pre;
- int HP_mapif_guild_message_post;
int HP_mapif_guild_basicinfochanged_pre;
int HP_mapif_guild_basicinfochanged_post;
int HP_mapif_guild_memberinfochanged_pre;
@@ -2711,8 +2665,6 @@ struct {
int HP_mapif_parse_GuildChangeMemberInfoShort_post;
int HP_mapif_parse_BreakGuild_pre;
int HP_mapif_parse_BreakGuild_post;
- int HP_mapif_parse_GuildMessage_pre;
- int HP_mapif_parse_GuildMessage_post;
int HP_mapif_parse_GuildBasicInfoChange_pre;
int HP_mapif_parse_GuildBasicInfoChange_post;
int HP_mapif_parse_GuildMemberInfoChange_pre;
@@ -2807,8 +2759,6 @@ struct {
int HP_mapif_party_membermoved_post;
int HP_mapif_party_broken_pre;
int HP_mapif_party_broken_post;
- int HP_mapif_party_message_pre;
- int HP_mapif_party_message_post;
int HP_mapif_parse_CreateParty_pre;
int HP_mapif_parse_CreateParty_post;
int HP_mapif_parse_PartyInfo_pre;
@@ -2823,8 +2773,6 @@ struct {
int HP_mapif_parse_PartyChangeMap_post;
int HP_mapif_parse_BreakParty_pre;
int HP_mapif_parse_BreakParty_post;
- int HP_mapif_parse_PartyMessage_pre;
- int HP_mapif_parse_PartyMessage_post;
int HP_mapif_parse_PartyLeaderChange_pre;
int HP_mapif_parse_PartyLeaderChange_post;
int HP_mapif_pet_created_pre;
@@ -2901,26 +2849,10 @@ struct {
int HP_mapif_parse_ItemBoundRetrieve_post;
int HP_mapif_parse_accinfo_pre;
int HP_mapif_parse_accinfo_post;
- int HP_mapif_broadcast_pre;
- int HP_mapif_broadcast_post;
- int HP_mapif_wis_message_pre;
- int HP_mapif_wis_message_post;
- int HP_mapif_wis_response_pre;
- int HP_mapif_wis_response_post;
- int HP_mapif_wis_end_pre;
- int HP_mapif_wis_end_post;
int HP_mapif_account_reg_reply_pre;
int HP_mapif_account_reg_reply_post;
int HP_mapif_disconnectplayer_pre;
int HP_mapif_disconnectplayer_post;
- int HP_mapif_parse_broadcast_pre;
- int HP_mapif_parse_broadcast_post;
- int HP_mapif_parse_WisRequest_pre;
- int HP_mapif_parse_WisRequest_post;
- int HP_mapif_parse_WisReply_pre;
- int HP_mapif_parse_WisReply_post;
- int HP_mapif_parse_WisToGM_pre;
- int HP_mapif_parse_WisToGM_post;
int HP_mapif_parse_Registry_pre;
int HP_mapif_parse_Registry_post;
int HP_mapif_parse_RegistryRequest_pre;
diff --git a/src/plugins/HPMHooking/HPMHooking_char.HookingPoints.inc b/src/plugins/HPMHooking/HPMHooking_char.HookingPoints.inc
index 60162c1a8..efd72b670 100644
--- a/src/plugins/HPMHooking/HPMHooking_char.HookingPoints.inc
+++ b/src/plugins/HPMHooking/HPMHooking_char.HookingPoints.inc
@@ -333,8 +333,6 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(inter->vlog, HP_inter_vlog) },
{ HP_POP(inter->init_sql, HP_inter_init_sql) },
{ HP_POP(inter->mapif_init, HP_inter_mapif_init) },
- { HP_POP(inter->check_ttl_wisdata_sub, HP_inter_check_ttl_wisdata_sub) },
- { HP_POP(inter->check_ttl_wisdata, HP_inter_check_ttl_wisdata) },
{ HP_POP(inter->check_length, HP_inter_check_length) },
{ HP_POP(inter->parse_frommap, HP_inter_parse_frommap) },
{ HP_POP(inter->final, HP_inter_final) },
@@ -343,9 +341,6 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(inter->config_read_connection, HP_inter_config_read_connection) },
{ HP_POP(inter->accinfo, HP_inter_accinfo) },
{ HP_POP(inter->accinfo2, HP_inter_accinfo2) },
- { HP_POP(inter->add_wisdata, HP_inter_add_wisdata) },
- { HP_POP(inter->get_wisdata, HP_inter_get_wisdata) },
- { HP_POP(inter->remove_wisdata, HP_inter_remove_wisdata) },
/* inter_mail_interface */
{ HP_POP(inter_mail->sql_init, HP_inter_mail_sql_init) },
{ HP_POP(inter_mail->sql_final, HP_inter_mail_sql_final) },
@@ -554,7 +549,6 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(mapif->guild_withdraw, HP_mapif_guild_withdraw) },
{ HP_POP(mapif->guild_memberinfoshort, HP_mapif_guild_memberinfoshort) },
{ HP_POP(mapif->guild_broken, HP_mapif_guild_broken) },
- { HP_POP(mapif->guild_message, HP_mapif_guild_message) },
{ HP_POP(mapif->guild_basicinfochanged, HP_mapif_guild_basicinfochanged) },
{ HP_POP(mapif->guild_memberinfochanged, HP_mapif_guild_memberinfochanged) },
{ HP_POP(mapif->guild_skillupack, HP_mapif_guild_skillupack) },
@@ -570,7 +564,6 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(mapif->parse_GuildLeave, HP_mapif_parse_GuildLeave) },
{ HP_POP(mapif->parse_GuildChangeMemberInfoShort, HP_mapif_parse_GuildChangeMemberInfoShort) },
{ HP_POP(mapif->parse_BreakGuild, HP_mapif_parse_BreakGuild) },
- { HP_POP(mapif->parse_GuildMessage, HP_mapif_parse_GuildMessage) },
{ HP_POP(mapif->parse_GuildBasicInfoChange, HP_mapif_parse_GuildBasicInfoChange) },
{ HP_POP(mapif->parse_GuildMemberInfoChange, HP_mapif_parse_GuildMemberInfoChange) },
{ HP_POP(mapif->parse_GuildPosition, HP_mapif_parse_GuildPosition) },
@@ -618,7 +611,6 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(mapif->party_withdraw, HP_mapif_party_withdraw) },
{ HP_POP(mapif->party_membermoved, HP_mapif_party_membermoved) },
{ HP_POP(mapif->party_broken, HP_mapif_party_broken) },
- { HP_POP(mapif->party_message, HP_mapif_party_message) },
{ HP_POP(mapif->parse_CreateParty, HP_mapif_parse_CreateParty) },
{ HP_POP(mapif->parse_PartyInfo, HP_mapif_parse_PartyInfo) },
{ HP_POP(mapif->parse_PartyAddMember, HP_mapif_parse_PartyAddMember) },
@@ -626,7 +618,6 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(mapif->parse_PartyLeave, HP_mapif_parse_PartyLeave) },
{ HP_POP(mapif->parse_PartyChangeMap, HP_mapif_parse_PartyChangeMap) },
{ HP_POP(mapif->parse_BreakParty, HP_mapif_parse_BreakParty) },
- { HP_POP(mapif->parse_PartyMessage, HP_mapif_parse_PartyMessage) },
{ HP_POP(mapif->parse_PartyLeaderChange, HP_mapif_parse_PartyLeaderChange) },
{ HP_POP(mapif->pet_created, HP_mapif_pet_created) },
{ HP_POP(mapif->pet_info, HP_mapif_pet_info) },
@@ -665,16 +656,8 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(mapif->itembound_ack, HP_mapif_itembound_ack) },
{ HP_POP(mapif->parse_ItemBoundRetrieve, HP_mapif_parse_ItemBoundRetrieve) },
{ HP_POP(mapif->parse_accinfo, HP_mapif_parse_accinfo) },
- { HP_POP(mapif->broadcast, HP_mapif_broadcast) },
- { HP_POP(mapif->wis_message, HP_mapif_wis_message) },
- { HP_POP(mapif->wis_response, HP_mapif_wis_response) },
- { HP_POP(mapif->wis_end, HP_mapif_wis_end) },
{ HP_POP(mapif->account_reg_reply, HP_mapif_account_reg_reply) },
{ HP_POP(mapif->disconnectplayer, HP_mapif_disconnectplayer) },
- { HP_POP(mapif->parse_broadcast, HP_mapif_parse_broadcast) },
- { HP_POP(mapif->parse_WisRequest, HP_mapif_parse_WisRequest) },
- { HP_POP(mapif->parse_WisReply, HP_mapif_parse_WisReply) },
- { HP_POP(mapif->parse_WisToGM, HP_mapif_parse_WisToGM) },
{ HP_POP(mapif->parse_Registry, HP_mapif_parse_Registry) },
{ HP_POP(mapif->parse_RegistryRequest, HP_mapif_parse_RegistryRequest) },
{ HP_POP(mapif->namechange_ack, HP_mapif_namechange_ack) },
diff --git a/src/plugins/HPMHooking/HPMHooking_char.Hooks.inc b/src/plugins/HPMHooking/HPMHooking_char.Hooks.inc
index 2b7e25e5d..7ce54d288 100644
--- a/src/plugins/HPMHooking/HPMHooking_char.Hooks.inc
+++ b/src/plugins/HPMHooking/HPMHooking_char.Hooks.inc
@@ -7851,66 +7851,6 @@ int HP_inter_mapif_init(int fd) {
}
return retVal___;
}
-int HP_inter_check_ttl_wisdata_sub(union DBKey key, struct DBData *data, va_list ap) {
- int hIndex = 0;
- int retVal___ = 0;
- if (HPMHooks.count.HP_inter_check_ttl_wisdata_sub_pre > 0) {
- int (*preHookFunc) (union DBKey *key, struct DBData **data, va_list ap);
- *HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_inter_check_ttl_wisdata_sub_pre; hIndex++) {
- va_list ap___copy; va_copy(ap___copy, ap);
- preHookFunc = HPMHooks.list.HP_inter_check_ttl_wisdata_sub_pre[hIndex].func;
- retVal___ = preHookFunc(&key, &data, ap___copy);
- va_end(ap___copy);
- }
- if (*HPMforce_return) {
- *HPMforce_return = false;
- return retVal___;
- }
- }
- {
- va_list ap___copy; va_copy(ap___copy, ap);
- retVal___ = HPMHooks.source.inter.check_ttl_wisdata_sub(key, data, ap___copy);
- va_end(ap___copy);
- }
- if (HPMHooks.count.HP_inter_check_ttl_wisdata_sub_post > 0) {
- int (*postHookFunc) (int retVal___, union DBKey key, struct DBData *data, va_list ap);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_inter_check_ttl_wisdata_sub_post; hIndex++) {
- va_list ap___copy; va_copy(ap___copy, ap);
- postHookFunc = HPMHooks.list.HP_inter_check_ttl_wisdata_sub_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, key, data, ap___copy);
- va_end(ap___copy);
- }
- }
- return retVal___;
-}
-int HP_inter_check_ttl_wisdata(void) {
- int hIndex = 0;
- int retVal___ = 0;
- if (HPMHooks.count.HP_inter_check_ttl_wisdata_pre > 0) {
- int (*preHookFunc) (void);
- *HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_inter_check_ttl_wisdata_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_inter_check_ttl_wisdata_pre[hIndex].func;
- retVal___ = preHookFunc();
- }
- if (*HPMforce_return) {
- *HPMforce_return = false;
- return retVal___;
- }
- }
- {
- retVal___ = HPMHooks.source.inter.check_ttl_wisdata();
- }
- if (HPMHooks.count.HP_inter_check_ttl_wisdata_post > 0) {
- int (*postHookFunc) (int retVal___);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_inter_check_ttl_wisdata_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_inter_check_ttl_wisdata_post[hIndex].func;
- retVal___ = postHookFunc(retVal___);
- }
- }
- return retVal___;
-}
int HP_inter_check_length(int fd, int length) {
int hIndex = 0;
int retVal___ = 0;
@@ -8124,86 +8064,6 @@ void HP_inter_accinfo2(bool success, int map_fd, int u_fd, int u_aid, int accoun
}
return;
}
-struct WisData* HP_inter_add_wisdata(int fd, const unsigned char *src, const unsigned char *dst, const unsigned char *msg, int msg_len) {
- int hIndex = 0;
- struct WisData* retVal___ = NULL;
- if (HPMHooks.count.HP_inter_add_wisdata_pre > 0) {
- struct WisData* (*preHookFunc) (int *fd, const unsigned char **src, const unsigned char **dst, const unsigned char **msg, int *msg_len);
- *HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_inter_add_wisdata_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_inter_add_wisdata_pre[hIndex].func;
- retVal___ = preHookFunc(&fd, &src, &dst, &msg, &msg_len);
- }
- if (*HPMforce_return) {
- *HPMforce_return = false;
- return retVal___;
- }
- }
- {
- retVal___ = HPMHooks.source.inter.add_wisdata(fd, src, dst, msg, msg_len);
- }
- if (HPMHooks.count.HP_inter_add_wisdata_post > 0) {
- struct WisData* (*postHookFunc) (struct WisData* retVal___, int fd, const unsigned char *src, const unsigned char *dst, const unsigned char *msg, int msg_len);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_inter_add_wisdata_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_inter_add_wisdata_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, fd, src, dst, msg, msg_len);
- }
- }
- return retVal___;
-}
-struct WisData* HP_inter_get_wisdata(int id) {
- int hIndex = 0;
- struct WisData* retVal___ = NULL;
- if (HPMHooks.count.HP_inter_get_wisdata_pre > 0) {
- struct WisData* (*preHookFunc) (int *id);
- *HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_inter_get_wisdata_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_inter_get_wisdata_pre[hIndex].func;
- retVal___ = preHookFunc(&id);
- }
- if (*HPMforce_return) {
- *HPMforce_return = false;
- return retVal___;
- }
- }
- {
- retVal___ = HPMHooks.source.inter.get_wisdata(id);
- }
- if (HPMHooks.count.HP_inter_get_wisdata_post > 0) {
- struct WisData* (*postHookFunc) (struct WisData* retVal___, int id);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_inter_get_wisdata_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_inter_get_wisdata_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, id);
- }
- }
- return retVal___;
-}
-void HP_inter_remove_wisdata(int id) {
- int hIndex = 0;
- if (HPMHooks.count.HP_inter_remove_wisdata_pre > 0) {
- void (*preHookFunc) (int *id);
- *HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_inter_remove_wisdata_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_inter_remove_wisdata_pre[hIndex].func;
- preHookFunc(&id);
- }
- if (*HPMforce_return) {
- *HPMforce_return = false;
- return;
- }
- }
- {
- HPMHooks.source.inter.remove_wisdata(id);
- }
- if (HPMHooks.count.HP_inter_remove_wisdata_post > 0) {
- void (*postHookFunc) (int id);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_inter_remove_wisdata_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_inter_remove_wisdata_post[hIndex].func;
- postHookFunc(id);
- }
- }
- return;
-}
/* inter_mail_interface */
int HP_inter_mail_sql_init(void) {
int hIndex = 0;
@@ -13498,33 +13358,6 @@ int HP_mapif_guild_broken(int guild_id, int flag) {
}
return retVal___;
}
-int HP_mapif_guild_message(int guild_id, int account_id, const char *mes, int len, int sfd) {
- int hIndex = 0;
- int retVal___ = 0;
- if (HPMHooks.count.HP_mapif_guild_message_pre > 0) {
- int (*preHookFunc) (int *guild_id, int *account_id, const char **mes, int *len, int *sfd);
- *HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_mapif_guild_message_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_mapif_guild_message_pre[hIndex].func;
- retVal___ = preHookFunc(&guild_id, &account_id, &mes, &len, &sfd);
- }
- if (*HPMforce_return) {
- *HPMforce_return = false;
- return retVal___;
- }
- }
- {
- retVal___ = HPMHooks.source.mapif.guild_message(guild_id, account_id, mes, len, sfd);
- }
- if (HPMHooks.count.HP_mapif_guild_message_post > 0) {
- int (*postHookFunc) (int retVal___, int guild_id, int account_id, const char *mes, int len, int sfd);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_mapif_guild_message_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_mapif_guild_message_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, guild_id, account_id, mes, len, sfd);
- }
- }
- return retVal___;
-}
int HP_mapif_guild_basicinfochanged(int guild_id, int type, const void *data, int len) {
int hIndex = 0;
int retVal___ = 0;
@@ -13930,33 +13763,6 @@ int HP_mapif_parse_BreakGuild(int fd, int guild_id) {
}
return retVal___;
}
-int HP_mapif_parse_GuildMessage(int fd, int guild_id, int account_id, const char *mes, int len) {
- int hIndex = 0;
- int retVal___ = 0;
- if (HPMHooks.count.HP_mapif_parse_GuildMessage_pre > 0) {
- int (*preHookFunc) (int *fd, int *guild_id, int *account_id, const char **mes, int *len);
- *HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_mapif_parse_GuildMessage_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_mapif_parse_GuildMessage_pre[hIndex].func;
- retVal___ = preHookFunc(&fd, &guild_id, &account_id, &mes, &len);
- }
- if (*HPMforce_return) {
- *HPMforce_return = false;
- return retVal___;
- }
- }
- {
- retVal___ = HPMHooks.source.mapif.parse_GuildMessage(fd, guild_id, account_id, mes, len);
- }
- if (HPMHooks.count.HP_mapif_parse_GuildMessage_post > 0) {
- int (*postHookFunc) (int retVal___, int fd, int guild_id, int account_id, const char *mes, int len);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_mapif_parse_GuildMessage_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_mapif_parse_GuildMessage_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, fd, guild_id, account_id, mes, len);
- }
- }
- return retVal___;
-}
int HP_mapif_parse_GuildBasicInfoChange(int fd, int guild_id, int type, const void *data, int len) {
int hIndex = 0;
int retVal___ = 0;
@@ -15195,33 +15001,6 @@ int HP_mapif_party_broken(int party_id, int flag) {
}
return retVal___;
}
-int HP_mapif_party_message(int party_id, int account_id, const char *mes, int len, int sfd) {
- int hIndex = 0;
- int retVal___ = 0;
- if (HPMHooks.count.HP_mapif_party_message_pre > 0) {
- int (*preHookFunc) (int *party_id, int *account_id, const char **mes, int *len, int *sfd);
- *HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_mapif_party_message_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_mapif_party_message_pre[hIndex].func;
- retVal___ = preHookFunc(&party_id, &account_id, &mes, &len, &sfd);
- }
- if (*HPMforce_return) {
- *HPMforce_return = false;
- return retVal___;
- }
- }
- {
- retVal___ = HPMHooks.source.mapif.party_message(party_id, account_id, mes, len, sfd);
- }
- if (HPMHooks.count.HP_mapif_party_message_post > 0) {
- int (*postHookFunc) (int retVal___, int party_id, int account_id, const char *mes, int len, int sfd);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_mapif_party_message_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_mapif_party_message_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, party_id, account_id, mes, len, sfd);
- }
- }
- return retVal___;
-}
int HP_mapif_parse_CreateParty(int fd, const char *name, int item, int item2, const struct party_member *leader) {
int hIndex = 0;
int retVal___ = 0;
@@ -15410,33 +15189,6 @@ int HP_mapif_parse_BreakParty(int fd, int party_id) {
}
return retVal___;
}
-int HP_mapif_parse_PartyMessage(int fd, int party_id, int account_id, const char *mes, int len) {
- int hIndex = 0;
- int retVal___ = 0;
- if (HPMHooks.count.HP_mapif_parse_PartyMessage_pre > 0) {
- int (*preHookFunc) (int *fd, int *party_id, int *account_id, const char **mes, int *len);
- *HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_mapif_parse_PartyMessage_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_mapif_parse_PartyMessage_pre[hIndex].func;
- retVal___ = preHookFunc(&fd, &party_id, &account_id, &mes, &len);
- }
- if (*HPMforce_return) {
- *HPMforce_return = false;
- return retVal___;
- }
- }
- {
- retVal___ = HPMHooks.source.mapif.parse_PartyMessage(fd, party_id, account_id, mes, len);
- }
- if (HPMHooks.count.HP_mapif_parse_PartyMessage_post > 0) {
- int (*postHookFunc) (int retVal___, int fd, int party_id, int account_id, const char *mes, int len);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_mapif_parse_PartyMessage_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_mapif_parse_PartyMessage_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, fd, party_id, account_id, mes, len);
- }
- }
- return retVal___;
-}
int HP_mapif_parse_PartyLeaderChange(int fd, int party_id, int account_id, int char_id) {
int hIndex = 0;
int retVal___ = 0;
@@ -16447,113 +16199,6 @@ void HP_mapif_parse_accinfo(int fd) {
}
return;
}
-int HP_mapif_broadcast(const unsigned char *mes, int len, unsigned int fontColor, short fontType, short fontSize, short fontAlign, short fontY, int sfd) {
- int hIndex = 0;
- int retVal___ = 0;
- if (HPMHooks.count.HP_mapif_broadcast_pre > 0) {
- int (*preHookFunc) (const unsigned char **mes, int *len, unsigned int *fontColor, short *fontType, short *fontSize, short *fontAlign, short *fontY, int *sfd);
- *HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_mapif_broadcast_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_mapif_broadcast_pre[hIndex].func;
- retVal___ = preHookFunc(&mes, &len, &fontColor, &fontType, &fontSize, &fontAlign, &fontY, &sfd);
- }
- if (*HPMforce_return) {
- *HPMforce_return = false;
- return retVal___;
- }
- }
- {
- retVal___ = HPMHooks.source.mapif.broadcast(mes, len, fontColor, fontType, fontSize, fontAlign, fontY, sfd);
- }
- if (HPMHooks.count.HP_mapif_broadcast_post > 0) {
- int (*postHookFunc) (int retVal___, const unsigned char *mes, int len, unsigned int fontColor, short fontType, short fontSize, short fontAlign, short fontY, int sfd);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_mapif_broadcast_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_mapif_broadcast_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, mes, len, fontColor, fontType, fontSize, fontAlign, fontY, sfd);
- }
- }
- return retVal___;
-}
-int HP_mapif_wis_message(struct WisData *wd) {
- int hIndex = 0;
- int retVal___ = 0;
- if (HPMHooks.count.HP_mapif_wis_message_pre > 0) {
- int (*preHookFunc) (struct WisData **wd);
- *HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_mapif_wis_message_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_mapif_wis_message_pre[hIndex].func;
- retVal___ = preHookFunc(&wd);
- }
- if (*HPMforce_return) {
- *HPMforce_return = false;
- return retVal___;
- }
- }
- {
- retVal___ = HPMHooks.source.mapif.wis_message(wd);
- }
- if (HPMHooks.count.HP_mapif_wis_message_post > 0) {
- int (*postHookFunc) (int retVal___, struct WisData *wd);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_mapif_wis_message_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_mapif_wis_message_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, wd);
- }
- }
- return retVal___;
-}
-void HP_mapif_wis_response(int fd, const unsigned char *src, int flag) {
- int hIndex = 0;
- if (HPMHooks.count.HP_mapif_wis_response_pre > 0) {
- void (*preHookFunc) (int *fd, const unsigned char **src, int *flag);
- *HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_mapif_wis_response_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_mapif_wis_response_pre[hIndex].func;
- preHookFunc(&fd, &src, &flag);
- }
- if (*HPMforce_return) {
- *HPMforce_return = false;
- return;
- }
- }
- {
- HPMHooks.source.mapif.wis_response(fd, src, flag);
- }
- if (HPMHooks.count.HP_mapif_wis_response_post > 0) {
- void (*postHookFunc) (int fd, const unsigned char *src, int flag);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_mapif_wis_response_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_mapif_wis_response_post[hIndex].func;
- postHookFunc(fd, src, flag);
- }
- }
- return;
-}
-int HP_mapif_wis_end(struct WisData *wd, int flag) {
- int hIndex = 0;
- int retVal___ = 0;
- if (HPMHooks.count.HP_mapif_wis_end_pre > 0) {
- int (*preHookFunc) (struct WisData **wd, int *flag);
- *HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_mapif_wis_end_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_mapif_wis_end_pre[hIndex].func;
- retVal___ = preHookFunc(&wd, &flag);
- }
- if (*HPMforce_return) {
- *HPMforce_return = false;
- return retVal___;
- }
- }
- {
- retVal___ = HPMHooks.source.mapif.wis_end(wd, flag);
- }
- if (HPMHooks.count.HP_mapif_wis_end_post > 0) {
- int (*postHookFunc) (int retVal___, struct WisData *wd, int flag);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_mapif_wis_end_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_mapif_wis_end_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, wd, flag);
- }
- }
- return retVal___;
-}
int HP_mapif_account_reg_reply(int fd, int account_id, int char_id, int type) {
int hIndex = 0;
int retVal___ = 0;
@@ -16608,114 +16253,6 @@ int HP_mapif_disconnectplayer(int fd, int account_id, int char_id, int reason) {
}
return retVal___;
}
-int HP_mapif_parse_broadcast(int fd) {
- int hIndex = 0;
- int retVal___ = 0;
- if (HPMHooks.count.HP_mapif_parse_broadcast_pre > 0) {
- int (*preHookFunc) (int *fd);
- *HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_mapif_parse_broadcast_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_mapif_parse_broadcast_pre[hIndex].func;
- retVal___ = preHookFunc(&fd);
- }
- if (*HPMforce_return) {
- *HPMforce_return = false;
- return retVal___;
- }
- }
- {
- retVal___ = HPMHooks.source.mapif.parse_broadcast(fd);
- }
- if (HPMHooks.count.HP_mapif_parse_broadcast_post > 0) {
- int (*postHookFunc) (int retVal___, int fd);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_mapif_parse_broadcast_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_mapif_parse_broadcast_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, fd);
- }
- }
- return retVal___;
-}
-int HP_mapif_parse_WisRequest(int fd) {
- int hIndex = 0;
- int retVal___ = 0;
- if (HPMHooks.count.HP_mapif_parse_WisRequest_pre > 0) {
- int (*preHookFunc) (int *fd);
- *HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_mapif_parse_WisRequest_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_mapif_parse_WisRequest_pre[hIndex].func;
- retVal___ = preHookFunc(&fd);
- }
- if (*HPMforce_return) {
- *HPMforce_return = false;
- return retVal___;
- }
- }
- {
- retVal___ = HPMHooks.source.mapif.parse_WisRequest(fd);
- }
- if (HPMHooks.count.HP_mapif_parse_WisRequest_post > 0) {
- int (*postHookFunc) (int retVal___, int fd);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_mapif_parse_WisRequest_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_mapif_parse_WisRequest_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, fd);
- }
- }
- return retVal___;
-}
-int HP_mapif_parse_WisReply(int fd) {
- int hIndex = 0;
- int retVal___ = 0;
- if (HPMHooks.count.HP_mapif_parse_WisReply_pre > 0) {
- int (*preHookFunc) (int *fd);
- *HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_mapif_parse_WisReply_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_mapif_parse_WisReply_pre[hIndex].func;
- retVal___ = preHookFunc(&fd);
- }
- if (*HPMforce_return) {
- *HPMforce_return = false;
- return retVal___;
- }
- }
- {
- retVal___ = HPMHooks.source.mapif.parse_WisReply(fd);
- }
- if (HPMHooks.count.HP_mapif_parse_WisReply_post > 0) {
- int (*postHookFunc) (int retVal___, int fd);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_mapif_parse_WisReply_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_mapif_parse_WisReply_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, fd);
- }
- }
- return retVal___;
-}
-int HP_mapif_parse_WisToGM(int fd) {
- int hIndex = 0;
- int retVal___ = 0;
- if (HPMHooks.count.HP_mapif_parse_WisToGM_pre > 0) {
- int (*preHookFunc) (int *fd);
- *HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_mapif_parse_WisToGM_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_mapif_parse_WisToGM_pre[hIndex].func;
- retVal___ = preHookFunc(&fd);
- }
- if (*HPMforce_return) {
- *HPMforce_return = false;
- return retVal___;
- }
- }
- {
- retVal___ = HPMHooks.source.mapif.parse_WisToGM(fd);
- }
- if (HPMHooks.count.HP_mapif_parse_WisToGM_post > 0) {
- int (*postHookFunc) (int retVal___, int fd);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_mapif_parse_WisToGM_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_mapif_parse_WisToGM_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, fd);
- }
- }
- return retVal___;
-}
int HP_mapif_parse_Registry(int fd) {
int hIndex = 0;
int retVal___ = 0;
diff --git a/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc b/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc
index 224ed3ef1..6b3cee6b5 100644
--- a/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc
+++ b/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc
@@ -886,6 +886,10 @@ struct {
struct HPMHookPoint *HP_clif_fame_taekwon_post;
struct HPMHookPoint *HP_clif_ranklist_pre;
struct HPMHookPoint *HP_clif_ranklist_post;
+ struct HPMHookPoint *HP_clif_ranklist_sub_pre;
+ struct HPMHookPoint *HP_clif_ranklist_sub_post;
+ struct HPMHookPoint *HP_clif_ranklist_sub2_pre;
+ struct HPMHookPoint *HP_clif_ranklist_sub2_post;
struct HPMHookPoint *HP_clif_update_rankingpoint_pre;
struct HPMHookPoint *HP_clif_update_rankingpoint_post;
struct HPMHookPoint *HP_clif_pRanklist_pre;
@@ -1298,6 +1302,8 @@ struct {
struct HPMHookPoint *HP_clif_addskill_post;
struct HPMHookPoint *HP_clif_deleteskill_pre;
struct HPMHookPoint *HP_clif_deleteskill_post;
+ struct HPMHookPoint *HP_clif_playerSkillToPacket_pre;
+ struct HPMHookPoint *HP_clif_playerSkillToPacket_post;
struct HPMHookPoint *HP_clif_party_created_pre;
struct HPMHookPoint *HP_clif_party_created_post;
struct HPMHookPoint *HP_clif_party_member_info_pre;
@@ -1340,6 +1346,10 @@ struct {
struct HPMHookPoint *HP_clif_guild_basicinfo_post;
struct HPMHookPoint *HP_clif_guild_allianceinfo_pre;
struct HPMHookPoint *HP_clif_guild_allianceinfo_post;
+ struct HPMHookPoint *HP_clif_guild_castlelist_pre;
+ struct HPMHookPoint *HP_clif_guild_castlelist_post;
+ struct HPMHookPoint *HP_clif_guild_castleinfo_pre;
+ struct HPMHookPoint *HP_clif_guild_castleinfo_post;
struct HPMHookPoint *HP_clif_guild_memberlist_pre;
struct HPMHookPoint *HP_clif_guild_memberlist_post;
struct HPMHookPoint *HP_clif_guild_skillinfo_pre;
@@ -2310,6 +2320,20 @@ struct {
struct HPMHookPoint *HP_clif_pRefineryUIRefine_post;
struct HPMHookPoint *HP_clif_announce_refine_status_pre;
struct HPMHookPoint *HP_clif_announce_refine_status_post;
+ struct HPMHookPoint *HP_clif_pGuildCastleTeleportRequest_pre;
+ struct HPMHookPoint *HP_clif_pGuildCastleTeleportRequest_post;
+ struct HPMHookPoint *HP_clif_pGuildCastleInfoRequest_pre;
+ struct HPMHookPoint *HP_clif_pGuildCastleInfoRequest_post;
+ struct HPMHookPoint *HP_clif_guild_castleteleport_res_pre;
+ struct HPMHookPoint *HP_clif_guild_castleteleport_res_post;
+ struct HPMHookPoint *HP_clif_lapineDdukDdak_open_pre;
+ struct HPMHookPoint *HP_clif_lapineDdukDdak_open_post;
+ struct HPMHookPoint *HP_clif_lapineDdukDdak_result_pre;
+ struct HPMHookPoint *HP_clif_lapineDdukDdak_result_post;
+ struct HPMHookPoint *HP_clif_plapineDdukDdak_ack_pre;
+ struct HPMHookPoint *HP_clif_plapineDdukDdak_ack_post;
+ struct HPMHookPoint *HP_clif_plapineDdukDdak_close_pre;
+ struct HPMHookPoint *HP_clif_plapineDdukDdak_close_post;
struct HPMHookPoint *HP_cmdline_init_pre;
struct HPMHookPoint *HP_cmdline_init_post;
struct HPMHookPoint *HP_cmdline_final_pre;
@@ -2568,8 +2592,6 @@ struct {
struct HPMHookPoint *HP_guild_emblem_changed_post;
struct HPMHookPoint *HP_guild_send_message_pre;
struct HPMHookPoint *HP_guild_send_message_post;
- struct HPMHookPoint *HP_guild_recv_message_pre;
- struct HPMHookPoint *HP_guild_recv_message_post;
struct HPMHookPoint *HP_guild_send_dot_remove_pre;
struct HPMHookPoint *HP_guild_send_dot_remove_post;
struct HPMHookPoint *HP_guild_skillupack_pre;
@@ -2614,8 +2636,12 @@ struct {
struct HPMHookPoint *HP_guild_sd_check_post;
struct HPMHookPoint *HP_guild_read_guildskill_tree_db_pre;
struct HPMHookPoint *HP_guild_read_guildskill_tree_db_post;
- struct HPMHookPoint *HP_guild_read_castledb_pre;
- struct HPMHookPoint *HP_guild_read_castledb_post;
+ struct HPMHookPoint *HP_guild_read_castledb_libconfig_pre;
+ struct HPMHookPoint *HP_guild_read_castledb_libconfig_post;
+ struct HPMHookPoint *HP_guild_read_castledb_libconfig_sub_pre;
+ struct HPMHookPoint *HP_guild_read_castledb_libconfig_sub_post;
+ struct HPMHookPoint *HP_guild_read_castledb_libconfig_sub_warp_pre;
+ struct HPMHookPoint *HP_guild_read_castledb_libconfig_sub_warp_post;
struct HPMHookPoint *HP_guild_payexp_timer_sub_pre;
struct HPMHookPoint *HP_guild_payexp_timer_sub_post;
struct HPMHookPoint *HP_guild_send_xy_timer_sub_pre;
@@ -2712,6 +2738,8 @@ struct {
struct HPMHookPoint *HP_homun_mutate_post;
struct HPMHookPoint *HP_homun_gainexp_pre;
struct HPMHookPoint *HP_homun_gainexp_post;
+ struct HPMHookPoint *HP_homun_gainexp_real_pre;
+ struct HPMHookPoint *HP_homun_gainexp_real_post;
struct HPMHookPoint *HP_homun_add_intimacy_pre;
struct HPMHookPoint *HP_homun_add_intimacy_post;
struct HPMHookPoint *HP_homun_consume_intimacy_pre;
@@ -2810,16 +2838,6 @@ struct {
struct HPMHookPoint *HP_intif_parse_post;
struct HPMHookPoint *HP_intif_create_pet_pre;
struct HPMHookPoint *HP_intif_create_pet_post;
- struct HPMHookPoint *HP_intif_broadcast_pre;
- struct HPMHookPoint *HP_intif_broadcast_post;
- struct HPMHookPoint *HP_intif_broadcast2_pre;
- struct HPMHookPoint *HP_intif_broadcast2_post;
- struct HPMHookPoint *HP_intif_main_message_pre;
- struct HPMHookPoint *HP_intif_main_message_post;
- struct HPMHookPoint *HP_intif_wis_message_pre;
- struct HPMHookPoint *HP_intif_wis_message_post;
- struct HPMHookPoint *HP_intif_wis_message_to_gm_pre;
- struct HPMHookPoint *HP_intif_wis_message_to_gm_post;
struct HPMHookPoint *HP_intif_saveregistry_pre;
struct HPMHookPoint *HP_intif_saveregistry_post;
struct HPMHookPoint *HP_intif_request_registry_pre;
@@ -2846,8 +2864,6 @@ struct {
struct HPMHookPoint *HP_intif_party_changemap_post;
struct HPMHookPoint *HP_intif_break_party_pre;
struct HPMHookPoint *HP_intif_break_party_post;
- struct HPMHookPoint *HP_intif_party_message_pre;
- struct HPMHookPoint *HP_intif_party_message_post;
struct HPMHookPoint *HP_intif_party_leaderchange_pre;
struct HPMHookPoint *HP_intif_party_leaderchange_post;
struct HPMHookPoint *HP_intif_guild_create_pre;
@@ -2862,8 +2878,6 @@ struct {
struct HPMHookPoint *HP_intif_guild_memberinfoshort_post;
struct HPMHookPoint *HP_intif_guild_break_pre;
struct HPMHookPoint *HP_intif_guild_break_post;
- struct HPMHookPoint *HP_intif_guild_message_pre;
- struct HPMHookPoint *HP_intif_guild_message_post;
struct HPMHookPoint *HP_intif_guild_change_gm_pre;
struct HPMHookPoint *HP_intif_guild_change_gm_post;
struct HPMHookPoint *HP_intif_guild_change_basicinfo_pre;
@@ -2970,14 +2984,6 @@ struct {
struct HPMHookPoint *HP_intif_achievements_request_post;
struct HPMHookPoint *HP_intif_achievements_save_pre;
struct HPMHookPoint *HP_intif_achievements_save_post;
- struct HPMHookPoint *HP_intif_pWisMessage_pre;
- struct HPMHookPoint *HP_intif_pWisMessage_post;
- struct HPMHookPoint *HP_intif_pWisEnd_pre;
- struct HPMHookPoint *HP_intif_pWisEnd_post;
- struct HPMHookPoint *HP_intif_pWisToGM_sub_pre;
- struct HPMHookPoint *HP_intif_pWisToGM_sub_post;
- struct HPMHookPoint *HP_intif_pWisToGM_pre;
- struct HPMHookPoint *HP_intif_pWisToGM_post;
struct HPMHookPoint *HP_intif_pRegisters_pre;
struct HPMHookPoint *HP_intif_pRegisters_post;
struct HPMHookPoint *HP_intif_pAccountStorage_pre;
@@ -3006,8 +3012,6 @@ struct {
struct HPMHookPoint *HP_intif_pPartyMove_post;
struct HPMHookPoint *HP_intif_pPartyBroken_pre;
struct HPMHookPoint *HP_intif_pPartyBroken_post;
- struct HPMHookPoint *HP_intif_pPartyMessage_pre;
- struct HPMHookPoint *HP_intif_pPartyMessage_post;
struct HPMHookPoint *HP_intif_pGuildCreated_pre;
struct HPMHookPoint *HP_intif_pGuildCreated_post;
struct HPMHookPoint *HP_intif_pGuildInfo_pre;
@@ -3020,8 +3024,6 @@ struct {
struct HPMHookPoint *HP_intif_pGuildMemberInfoShort_post;
struct HPMHookPoint *HP_intif_pGuildBroken_pre;
struct HPMHookPoint *HP_intif_pGuildBroken_post;
- struct HPMHookPoint *HP_intif_pGuildMessage_pre;
- struct HPMHookPoint *HP_intif_pGuildMessage_post;
struct HPMHookPoint *HP_intif_pGuildBasicInfoChanged_pre;
struct HPMHookPoint *HP_intif_pGuildBasicInfoChanged_post;
struct HPMHookPoint *HP_intif_pGuildMemberInfoChanged_pre;
@@ -3238,10 +3240,10 @@ struct {
struct HPMHookPoint *HP_itemdb_isidentified_post;
struct HPMHookPoint *HP_itemdb_isidentified2_pre;
struct HPMHookPoint *HP_itemdb_isidentified2_post;
- struct HPMHookPoint *HP_itemdb_combo_split_atoi_pre;
- struct HPMHookPoint *HP_itemdb_combo_split_atoi_post;
- struct HPMHookPoint *HP_itemdb_read_combos_pre;
- struct HPMHookPoint *HP_itemdb_read_combos_post;
+ struct HPMHookPoint *HP_itemdb_read_combodb_libconfig_pre;
+ struct HPMHookPoint *HP_itemdb_read_combodb_libconfig_post;
+ struct HPMHookPoint *HP_itemdb_read_combodb_libconfig_sub_pre;
+ struct HPMHookPoint *HP_itemdb_read_combodb_libconfig_sub_post;
struct HPMHookPoint *HP_itemdb_gendercheck_pre;
struct HPMHookPoint *HP_itemdb_gendercheck_post;
struct HPMHookPoint *HP_itemdb_validate_entry_pre;
@@ -3278,6 +3280,12 @@ struct {
struct HPMHookPoint *HP_itemdb_lookup_const_mask_post;
struct HPMHookPoint *HP_itemdb_addname_sub_pre;
struct HPMHookPoint *HP_itemdb_addname_sub_post;
+ struct HPMHookPoint *HP_itemdb_read_libconfig_lapineddukddak_pre;
+ struct HPMHookPoint *HP_itemdb_read_libconfig_lapineddukddak_post;
+ struct HPMHookPoint *HP_itemdb_read_libconfig_lapineddukddak_sub_pre;
+ struct HPMHookPoint *HP_itemdb_read_libconfig_lapineddukddak_sub_post;
+ struct HPMHookPoint *HP_itemdb_read_libconfig_lapineddukddak_sub_sources_pre;
+ struct HPMHookPoint *HP_itemdb_read_libconfig_lapineddukddak_sub_sources_post;
struct HPMHookPoint *HP_libconfig_read_pre;
struct HPMHookPoint *HP_libconfig_read_post;
struct HPMHookPoint *HP_libconfig_write_pre;
@@ -3866,6 +3874,8 @@ struct {
struct HPMHookPoint *HP_mob_final_post;
struct HPMHookPoint *HP_mob_reload_pre;
struct HPMHookPoint *HP_mob_reload_post;
+ struct HPMHookPoint *HP_mob_reload_sub_mob_pre;
+ struct HPMHookPoint *HP_mob_reload_sub_mob_post;
struct HPMHookPoint *HP_mob_db_pre;
struct HPMHookPoint *HP_mob_db_post;
struct HPMHookPoint *HP_mob_chat_pre;
@@ -4430,8 +4440,6 @@ struct {
struct HPMHookPoint *HP_party_send_logout_post;
struct HPMHookPoint *HP_party_send_message_pre;
struct HPMHookPoint *HP_party_send_message_post;
- struct HPMHookPoint *HP_party_recv_message_pre;
- struct HPMHookPoint *HP_party_recv_message_post;
struct HPMHookPoint *HP_party_skill_check_pre;
struct HPMHookPoint *HP_party_skill_check_post;
struct HPMHookPoint *HP_party_send_xy_clear_pre;
@@ -4976,8 +4984,14 @@ struct {
struct HPMHookPoint *HP_pc_update_idle_time_post;
struct HPMHookPoint *HP_pc_have_magnifier_pre;
struct HPMHookPoint *HP_pc_have_magnifier_post;
+ struct HPMHookPoint *HP_pc_have_item_chain_pre;
+ struct HPMHookPoint *HP_pc_have_item_chain_post;
struct HPMHookPoint *HP_pc_process_chat_message_pre;
struct HPMHookPoint *HP_pc_process_chat_message_post;
+ struct HPMHookPoint *HP_pc_wis_message_to_gm_pre;
+ struct HPMHookPoint *HP_pc_wis_message_to_gm_post;
+ struct HPMHookPoint *HP_pc_wis_message_to_gm_sub_pre;
+ struct HPMHookPoint *HP_pc_wis_message_to_gm_sub_post;
struct HPMHookPoint *HP_pc_check_supernovice_call_pre;
struct HPMHookPoint *HP_pc_check_supernovice_call_post;
struct HPMHookPoint *HP_pc_check_basicskill_pre;
@@ -5598,6 +5612,12 @@ struct {
struct HPMHookPoint *HP_script_run_item_equip_script_post;
struct HPMHookPoint *HP_script_run_item_unequip_script_pre;
struct HPMHookPoint *HP_script_run_item_unequip_script_post;
+ struct HPMHookPoint *HP_script_run_item_rental_end_script_pre;
+ struct HPMHookPoint *HP_script_run_item_rental_end_script_post;
+ struct HPMHookPoint *HP_script_run_item_rental_start_script_pre;
+ struct HPMHookPoint *HP_script_run_item_rental_start_script_post;
+ struct HPMHookPoint *HP_script_run_item_lapineddukddak_script_pre;
+ struct HPMHookPoint *HP_script_run_item_lapineddukddak_script_post;
struct HPMHookPoint *HP_searchstore_open_pre;
struct HPMHookPoint *HP_searchstore_open_post;
struct HPMHookPoint *HP_searchstore_query_pre;
@@ -6474,8 +6494,14 @@ struct {
struct HPMHookPoint *HP_status_readdb_job2_post;
struct HPMHookPoint *HP_status_readdb_sizefix_pre;
struct HPMHookPoint *HP_status_readdb_sizefix_post;
- struct HPMHookPoint *HP_status_readdb_scconfig_pre;
- struct HPMHookPoint *HP_status_readdb_scconfig_post;
+ struct HPMHookPoint *HP_status_read_scdb_libconfig_pre;
+ struct HPMHookPoint *HP_status_read_scdb_libconfig_post;
+ struct HPMHookPoint *HP_status_read_scdb_libconfig_sub_pre;
+ struct HPMHookPoint *HP_status_read_scdb_libconfig_sub_post;
+ struct HPMHookPoint *HP_status_read_scdb_libconfig_sub_flag_pre;
+ struct HPMHookPoint *HP_status_read_scdb_libconfig_sub_flag_post;
+ struct HPMHookPoint *HP_status_read_scdb_libconfig_sub_flag_additional_pre;
+ struct HPMHookPoint *HP_status_read_scdb_libconfig_sub_flag_additional_post;
struct HPMHookPoint *HP_status_read_job_db_pre;
struct HPMHookPoint *HP_status_read_job_db_post;
struct HPMHookPoint *HP_status_read_job_db_sub_pre;
@@ -7675,6 +7701,10 @@ struct {
int HP_clif_fame_taekwon_post;
int HP_clif_ranklist_pre;
int HP_clif_ranklist_post;
+ int HP_clif_ranklist_sub_pre;
+ int HP_clif_ranklist_sub_post;
+ int HP_clif_ranklist_sub2_pre;
+ int HP_clif_ranklist_sub2_post;
int HP_clif_update_rankingpoint_pre;
int HP_clif_update_rankingpoint_post;
int HP_clif_pRanklist_pre;
@@ -8087,6 +8117,8 @@ struct {
int HP_clif_addskill_post;
int HP_clif_deleteskill_pre;
int HP_clif_deleteskill_post;
+ int HP_clif_playerSkillToPacket_pre;
+ int HP_clif_playerSkillToPacket_post;
int HP_clif_party_created_pre;
int HP_clif_party_created_post;
int HP_clif_party_member_info_pre;
@@ -8129,6 +8161,10 @@ struct {
int HP_clif_guild_basicinfo_post;
int HP_clif_guild_allianceinfo_pre;
int HP_clif_guild_allianceinfo_post;
+ int HP_clif_guild_castlelist_pre;
+ int HP_clif_guild_castlelist_post;
+ int HP_clif_guild_castleinfo_pre;
+ int HP_clif_guild_castleinfo_post;
int HP_clif_guild_memberlist_pre;
int HP_clif_guild_memberlist_post;
int HP_clif_guild_skillinfo_pre;
@@ -9099,6 +9135,20 @@ struct {
int HP_clif_pRefineryUIRefine_post;
int HP_clif_announce_refine_status_pre;
int HP_clif_announce_refine_status_post;
+ int HP_clif_pGuildCastleTeleportRequest_pre;
+ int HP_clif_pGuildCastleTeleportRequest_post;
+ int HP_clif_pGuildCastleInfoRequest_pre;
+ int HP_clif_pGuildCastleInfoRequest_post;
+ int HP_clif_guild_castleteleport_res_pre;
+ int HP_clif_guild_castleteleport_res_post;
+ int HP_clif_lapineDdukDdak_open_pre;
+ int HP_clif_lapineDdukDdak_open_post;
+ int HP_clif_lapineDdukDdak_result_pre;
+ int HP_clif_lapineDdukDdak_result_post;
+ int HP_clif_plapineDdukDdak_ack_pre;
+ int HP_clif_plapineDdukDdak_ack_post;
+ int HP_clif_plapineDdukDdak_close_pre;
+ int HP_clif_plapineDdukDdak_close_post;
int HP_cmdline_init_pre;
int HP_cmdline_init_post;
int HP_cmdline_final_pre;
@@ -9357,8 +9407,6 @@ struct {
int HP_guild_emblem_changed_post;
int HP_guild_send_message_pre;
int HP_guild_send_message_post;
- int HP_guild_recv_message_pre;
- int HP_guild_recv_message_post;
int HP_guild_send_dot_remove_pre;
int HP_guild_send_dot_remove_post;
int HP_guild_skillupack_pre;
@@ -9403,8 +9451,12 @@ struct {
int HP_guild_sd_check_post;
int HP_guild_read_guildskill_tree_db_pre;
int HP_guild_read_guildskill_tree_db_post;
- int HP_guild_read_castledb_pre;
- int HP_guild_read_castledb_post;
+ int HP_guild_read_castledb_libconfig_pre;
+ int HP_guild_read_castledb_libconfig_post;
+ int HP_guild_read_castledb_libconfig_sub_pre;
+ int HP_guild_read_castledb_libconfig_sub_post;
+ int HP_guild_read_castledb_libconfig_sub_warp_pre;
+ int HP_guild_read_castledb_libconfig_sub_warp_post;
int HP_guild_payexp_timer_sub_pre;
int HP_guild_payexp_timer_sub_post;
int HP_guild_send_xy_timer_sub_pre;
@@ -9501,6 +9553,8 @@ struct {
int HP_homun_mutate_post;
int HP_homun_gainexp_pre;
int HP_homun_gainexp_post;
+ int HP_homun_gainexp_real_pre;
+ int HP_homun_gainexp_real_post;
int HP_homun_add_intimacy_pre;
int HP_homun_add_intimacy_post;
int HP_homun_consume_intimacy_pre;
@@ -9599,16 +9653,6 @@ struct {
int HP_intif_parse_post;
int HP_intif_create_pet_pre;
int HP_intif_create_pet_post;
- int HP_intif_broadcast_pre;
- int HP_intif_broadcast_post;
- int HP_intif_broadcast2_pre;
- int HP_intif_broadcast2_post;
- int HP_intif_main_message_pre;
- int HP_intif_main_message_post;
- int HP_intif_wis_message_pre;
- int HP_intif_wis_message_post;
- int HP_intif_wis_message_to_gm_pre;
- int HP_intif_wis_message_to_gm_post;
int HP_intif_saveregistry_pre;
int HP_intif_saveregistry_post;
int HP_intif_request_registry_pre;
@@ -9635,8 +9679,6 @@ struct {
int HP_intif_party_changemap_post;
int HP_intif_break_party_pre;
int HP_intif_break_party_post;
- int HP_intif_party_message_pre;
- int HP_intif_party_message_post;
int HP_intif_party_leaderchange_pre;
int HP_intif_party_leaderchange_post;
int HP_intif_guild_create_pre;
@@ -9651,8 +9693,6 @@ struct {
int HP_intif_guild_memberinfoshort_post;
int HP_intif_guild_break_pre;
int HP_intif_guild_break_post;
- int HP_intif_guild_message_pre;
- int HP_intif_guild_message_post;
int HP_intif_guild_change_gm_pre;
int HP_intif_guild_change_gm_post;
int HP_intif_guild_change_basicinfo_pre;
@@ -9759,14 +9799,6 @@ struct {
int HP_intif_achievements_request_post;
int HP_intif_achievements_save_pre;
int HP_intif_achievements_save_post;
- int HP_intif_pWisMessage_pre;
- int HP_intif_pWisMessage_post;
- int HP_intif_pWisEnd_pre;
- int HP_intif_pWisEnd_post;
- int HP_intif_pWisToGM_sub_pre;
- int HP_intif_pWisToGM_sub_post;
- int HP_intif_pWisToGM_pre;
- int HP_intif_pWisToGM_post;
int HP_intif_pRegisters_pre;
int HP_intif_pRegisters_post;
int HP_intif_pAccountStorage_pre;
@@ -9795,8 +9827,6 @@ struct {
int HP_intif_pPartyMove_post;
int HP_intif_pPartyBroken_pre;
int HP_intif_pPartyBroken_post;
- int HP_intif_pPartyMessage_pre;
- int HP_intif_pPartyMessage_post;
int HP_intif_pGuildCreated_pre;
int HP_intif_pGuildCreated_post;
int HP_intif_pGuildInfo_pre;
@@ -9809,8 +9839,6 @@ struct {
int HP_intif_pGuildMemberInfoShort_post;
int HP_intif_pGuildBroken_pre;
int HP_intif_pGuildBroken_post;
- int HP_intif_pGuildMessage_pre;
- int HP_intif_pGuildMessage_post;
int HP_intif_pGuildBasicInfoChanged_pre;
int HP_intif_pGuildBasicInfoChanged_post;
int HP_intif_pGuildMemberInfoChanged_pre;
@@ -10027,10 +10055,10 @@ struct {
int HP_itemdb_isidentified_post;
int HP_itemdb_isidentified2_pre;
int HP_itemdb_isidentified2_post;
- int HP_itemdb_combo_split_atoi_pre;
- int HP_itemdb_combo_split_atoi_post;
- int HP_itemdb_read_combos_pre;
- int HP_itemdb_read_combos_post;
+ int HP_itemdb_read_combodb_libconfig_pre;
+ int HP_itemdb_read_combodb_libconfig_post;
+ int HP_itemdb_read_combodb_libconfig_sub_pre;
+ int HP_itemdb_read_combodb_libconfig_sub_post;
int HP_itemdb_gendercheck_pre;
int HP_itemdb_gendercheck_post;
int HP_itemdb_validate_entry_pre;
@@ -10067,6 +10095,12 @@ struct {
int HP_itemdb_lookup_const_mask_post;
int HP_itemdb_addname_sub_pre;
int HP_itemdb_addname_sub_post;
+ int HP_itemdb_read_libconfig_lapineddukddak_pre;
+ int HP_itemdb_read_libconfig_lapineddukddak_post;
+ int HP_itemdb_read_libconfig_lapineddukddak_sub_pre;
+ int HP_itemdb_read_libconfig_lapineddukddak_sub_post;
+ int HP_itemdb_read_libconfig_lapineddukddak_sub_sources_pre;
+ int HP_itemdb_read_libconfig_lapineddukddak_sub_sources_post;
int HP_libconfig_read_pre;
int HP_libconfig_read_post;
int HP_libconfig_write_pre;
@@ -10655,6 +10689,8 @@ struct {
int HP_mob_final_post;
int HP_mob_reload_pre;
int HP_mob_reload_post;
+ int HP_mob_reload_sub_mob_pre;
+ int HP_mob_reload_sub_mob_post;
int HP_mob_db_pre;
int HP_mob_db_post;
int HP_mob_chat_pre;
@@ -11219,8 +11255,6 @@ struct {
int HP_party_send_logout_post;
int HP_party_send_message_pre;
int HP_party_send_message_post;
- int HP_party_recv_message_pre;
- int HP_party_recv_message_post;
int HP_party_skill_check_pre;
int HP_party_skill_check_post;
int HP_party_send_xy_clear_pre;
@@ -11765,8 +11799,14 @@ struct {
int HP_pc_update_idle_time_post;
int HP_pc_have_magnifier_pre;
int HP_pc_have_magnifier_post;
+ int HP_pc_have_item_chain_pre;
+ int HP_pc_have_item_chain_post;
int HP_pc_process_chat_message_pre;
int HP_pc_process_chat_message_post;
+ int HP_pc_wis_message_to_gm_pre;
+ int HP_pc_wis_message_to_gm_post;
+ int HP_pc_wis_message_to_gm_sub_pre;
+ int HP_pc_wis_message_to_gm_sub_post;
int HP_pc_check_supernovice_call_pre;
int HP_pc_check_supernovice_call_post;
int HP_pc_check_basicskill_pre;
@@ -12387,6 +12427,12 @@ struct {
int HP_script_run_item_equip_script_post;
int HP_script_run_item_unequip_script_pre;
int HP_script_run_item_unequip_script_post;
+ int HP_script_run_item_rental_end_script_pre;
+ int HP_script_run_item_rental_end_script_post;
+ int HP_script_run_item_rental_start_script_pre;
+ int HP_script_run_item_rental_start_script_post;
+ int HP_script_run_item_lapineddukddak_script_pre;
+ int HP_script_run_item_lapineddukddak_script_post;
int HP_searchstore_open_pre;
int HP_searchstore_open_post;
int HP_searchstore_query_pre;
@@ -13263,8 +13309,14 @@ struct {
int HP_status_readdb_job2_post;
int HP_status_readdb_sizefix_pre;
int HP_status_readdb_sizefix_post;
- int HP_status_readdb_scconfig_pre;
- int HP_status_readdb_scconfig_post;
+ int HP_status_read_scdb_libconfig_pre;
+ int HP_status_read_scdb_libconfig_post;
+ int HP_status_read_scdb_libconfig_sub_pre;
+ int HP_status_read_scdb_libconfig_sub_post;
+ int HP_status_read_scdb_libconfig_sub_flag_pre;
+ int HP_status_read_scdb_libconfig_sub_flag_post;
+ int HP_status_read_scdb_libconfig_sub_flag_additional_pre;
+ int HP_status_read_scdb_libconfig_sub_flag_additional_post;
int HP_status_read_job_db_pre;
int HP_status_read_job_db_post;
int HP_status_read_job_db_sub_pre;
diff --git a/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc b/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc
index 7f53ee493..ad9e7e123 100644
--- a/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc
+++ b/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc
@@ -467,6 +467,8 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(clif->fame_alchemist, HP_clif_fame_alchemist) },
{ HP_POP(clif->fame_taekwon, HP_clif_fame_taekwon) },
{ HP_POP(clif->ranklist, HP_clif_ranklist) },
+ { HP_POP(clif->ranklist_sub, HP_clif_ranklist_sub) },
+ { HP_POP(clif->ranklist_sub2, HP_clif_ranklist_sub2) },
{ HP_POP(clif->update_rankingpoint, HP_clif_update_rankingpoint) },
{ HP_POP(clif->pRanklist, HP_clif_pRanklist) },
{ HP_POP(clif->hotkeys, HP_clif_hotkeys) },
@@ -673,6 +675,7 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(clif->skillinfo, HP_clif_skillinfo) },
{ HP_POP(clif->addskill, HP_clif_addskill) },
{ HP_POP(clif->deleteskill, HP_clif_deleteskill) },
+ { HP_POP(clif->playerSkillToPacket, HP_clif_playerSkillToPacket) },
{ HP_POP(clif->party_created, HP_clif_party_created) },
{ HP_POP(clif->party_member_info, HP_clif_party_member_info) },
{ HP_POP(clif->party_info, HP_clif_party_info) },
@@ -694,6 +697,8 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(clif->guild_masterormember, HP_clif_guild_masterormember) },
{ HP_POP(clif->guild_basicinfo, HP_clif_guild_basicinfo) },
{ HP_POP(clif->guild_allianceinfo, HP_clif_guild_allianceinfo) },
+ { HP_POP(clif->guild_castlelist, HP_clif_guild_castlelist) },
+ { HP_POP(clif->guild_castleinfo, HP_clif_guild_castleinfo) },
{ HP_POP(clif->guild_memberlist, HP_clif_guild_memberlist) },
{ HP_POP(clif->guild_skillinfo, HP_clif_guild_skillinfo) },
{ HP_POP(clif->guild_send_onlineinfo, HP_clif_guild_send_onlineinfo) },
@@ -1179,6 +1184,13 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(clif->pRefineryUIClose, HP_clif_pRefineryUIClose) },
{ HP_POP(clif->pRefineryUIRefine, HP_clif_pRefineryUIRefine) },
{ HP_POP(clif->announce_refine_status, HP_clif_announce_refine_status) },
+ { HP_POP(clif->pGuildCastleTeleportRequest, HP_clif_pGuildCastleTeleportRequest) },
+ { HP_POP(clif->pGuildCastleInfoRequest, HP_clif_pGuildCastleInfoRequest) },
+ { HP_POP(clif->guild_castleteleport_res, HP_clif_guild_castleteleport_res) },
+ { HP_POP(clif->lapineDdukDdak_open, HP_clif_lapineDdukDdak_open) },
+ { HP_POP(clif->lapineDdukDdak_result, HP_clif_lapineDdukDdak_result) },
+ { HP_POP(clif->plapineDdukDdak_ack, HP_clif_plapineDdukDdak_ack) },
+ { HP_POP(clif->plapineDdukDdak_close, HP_clif_plapineDdukDdak_close) },
/* cmdline_interface */
{ HP_POP(cmdline->init, HP_cmdline_init) },
{ HP_POP(cmdline->final, HP_cmdline_final) },
@@ -1317,7 +1329,6 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(guild->change_emblem, HP_guild_change_emblem) },
{ HP_POP(guild->emblem_changed, HP_guild_emblem_changed) },
{ HP_POP(guild->send_message, HP_guild_send_message) },
- { HP_POP(guild->recv_message, HP_guild_recv_message) },
{ HP_POP(guild->send_dot_remove, HP_guild_send_dot_remove) },
{ HP_POP(guild->skillupack, HP_guild_skillupack) },
{ HP_POP(guild->dobreak, HP_guild_dobreak) },
@@ -1340,7 +1351,9 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(guild->payexp_timer, HP_guild_payexp_timer) },
{ HP_POP(guild->sd_check, HP_guild_sd_check) },
{ HP_POP(guild->read_guildskill_tree_db, HP_guild_read_guildskill_tree_db) },
- { HP_POP(guild->read_castledb, HP_guild_read_castledb) },
+ { HP_POP(guild->read_castledb_libconfig, HP_guild_read_castledb_libconfig) },
+ { HP_POP(guild->read_castledb_libconfig_sub, HP_guild_read_castledb_libconfig_sub) },
+ { HP_POP(guild->read_castledb_libconfig_sub_warp, HP_guild_read_castledb_libconfig_sub_warp) },
{ HP_POP(guild->payexp_timer_sub, HP_guild_payexp_timer_sub) },
{ HP_POP(guild->send_xy_timer_sub, HP_guild_send_xy_timer_sub) },
{ HP_POP(guild->send_xy_timer, HP_guild_send_xy_timer) },
@@ -1391,6 +1404,7 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(homun->evolve, HP_homun_evolve) },
{ HP_POP(homun->mutate, HP_homun_mutate) },
{ HP_POP(homun->gainexp, HP_homun_gainexp) },
+ { HP_POP(homun->gainexp_real, HP_homun_gainexp_real) },
{ HP_POP(homun->add_intimacy, HP_homun_add_intimacy) },
{ HP_POP(homun->consume_intimacy, HP_homun_consume_intimacy) },
{ HP_POP(homun->healed, HP_homun_healed) },
@@ -1442,11 +1456,6 @@ struct HookingPointData HookingPoints[] = {
/* intif_interface */
{ HP_POP(intif->parse, HP_intif_parse) },
{ HP_POP(intif->create_pet, HP_intif_create_pet) },
- { HP_POP(intif->broadcast, HP_intif_broadcast) },
- { HP_POP(intif->broadcast2, HP_intif_broadcast2) },
- { HP_POP(intif->main_message, HP_intif_main_message) },
- { HP_POP(intif->wis_message, HP_intif_wis_message) },
- { HP_POP(intif->wis_message_to_gm, HP_intif_wis_message_to_gm) },
{ HP_POP(intif->saveregistry, HP_intif_saveregistry) },
{ HP_POP(intif->request_registry, HP_intif_request_registry) },
{ HP_POP(intif->request_account_storage, HP_intif_request_account_storage) },
@@ -1460,7 +1469,6 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(intif->party_leave, HP_intif_party_leave) },
{ HP_POP(intif->party_changemap, HP_intif_party_changemap) },
{ HP_POP(intif->break_party, HP_intif_break_party) },
- { HP_POP(intif->party_message, HP_intif_party_message) },
{ HP_POP(intif->party_leaderchange, HP_intif_party_leaderchange) },
{ HP_POP(intif->guild_create, HP_intif_guild_create) },
{ HP_POP(intif->guild_request_info, HP_intif_guild_request_info) },
@@ -1468,7 +1476,6 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(intif->guild_leave, HP_intif_guild_leave) },
{ HP_POP(intif->guild_memberinfoshort, HP_intif_guild_memberinfoshort) },
{ HP_POP(intif->guild_break, HP_intif_guild_break) },
- { HP_POP(intif->guild_message, HP_intif_guild_message) },
{ HP_POP(intif->guild_change_gm, HP_intif_guild_change_gm) },
{ HP_POP(intif->guild_change_basicinfo, HP_intif_guild_change_basicinfo) },
{ HP_POP(intif->guild_change_memberinfo, HP_intif_guild_change_memberinfo) },
@@ -1522,10 +1529,6 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(intif->CheckForCharServer, HP_intif_CheckForCharServer) },
{ HP_POP(intif->achievements_request, HP_intif_achievements_request) },
{ HP_POP(intif->achievements_save, HP_intif_achievements_save) },
- { HP_POP(intif->pWisMessage, HP_intif_pWisMessage) },
- { HP_POP(intif->pWisEnd, HP_intif_pWisEnd) },
- { HP_POP(intif->pWisToGM_sub, HP_intif_pWisToGM_sub) },
- { HP_POP(intif->pWisToGM, HP_intif_pWisToGM) },
{ HP_POP(intif->pRegisters, HP_intif_pRegisters) },
{ HP_POP(intif->pAccountStorage, HP_intif_pAccountStorage) },
{ HP_POP(intif->pChangeNameOk, HP_intif_pChangeNameOk) },
@@ -1540,14 +1543,12 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(intif->pPartyMemberWithdraw, HP_intif_pPartyMemberWithdraw) },
{ HP_POP(intif->pPartyMove, HP_intif_pPartyMove) },
{ HP_POP(intif->pPartyBroken, HP_intif_pPartyBroken) },
- { HP_POP(intif->pPartyMessage, HP_intif_pPartyMessage) },
{ HP_POP(intif->pGuildCreated, HP_intif_pGuildCreated) },
{ HP_POP(intif->pGuildInfo, HP_intif_pGuildInfo) },
{ HP_POP(intif->pGuildMemberAdded, HP_intif_pGuildMemberAdded) },
{ HP_POP(intif->pGuildMemberWithdraw, HP_intif_pGuildMemberWithdraw) },
{ HP_POP(intif->pGuildMemberInfoShort, HP_intif_pGuildMemberInfoShort) },
{ HP_POP(intif->pGuildBroken, HP_intif_pGuildBroken) },
- { HP_POP(intif->pGuildMessage, HP_intif_pGuildMessage) },
{ HP_POP(intif->pGuildBasicInfoChanged, HP_intif_pGuildBasicInfoChanged) },
{ HP_POP(intif->pGuildMemberInfoChanged, HP_intif_pGuildMemberInfoChanged) },
{ HP_POP(intif->pGuildPosition, HP_intif_pGuildPosition) },
@@ -1658,8 +1659,8 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(itemdb->isrestricted, HP_itemdb_isrestricted) },
{ HP_POP(itemdb->isidentified, HP_itemdb_isidentified) },
{ HP_POP(itemdb->isidentified2, HP_itemdb_isidentified2) },
- { HP_POP(itemdb->combo_split_atoi, HP_itemdb_combo_split_atoi) },
- { HP_POP(itemdb->read_combos, HP_itemdb_read_combos) },
+ { HP_POP(itemdb->read_combodb_libconfig, HP_itemdb_read_combodb_libconfig) },
+ { HP_POP(itemdb->read_combodb_libconfig_sub, HP_itemdb_read_combodb_libconfig_sub) },
{ HP_POP(itemdb->gendercheck, HP_itemdb_gendercheck) },
{ HP_POP(itemdb->validate_entry, HP_itemdb_validate_entry) },
{ HP_POP(itemdb->readdb_options_additional_fields, HP_itemdb_readdb_options_additional_fields) },
@@ -1678,6 +1679,9 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(itemdb->lookup_const, HP_itemdb_lookup_const) },
{ HP_POP(itemdb->lookup_const_mask, HP_itemdb_lookup_const_mask) },
{ HP_POP(itemdb->addname_sub, HP_itemdb_addname_sub) },
+ { HP_POP(itemdb->read_libconfig_lapineddukddak, HP_itemdb_read_libconfig_lapineddukddak) },
+ { HP_POP(itemdb->read_libconfig_lapineddukddak_sub, HP_itemdb_read_libconfig_lapineddukddak_sub) },
+ { HP_POP(itemdb->read_libconfig_lapineddukddak_sub_sources, HP_itemdb_read_libconfig_lapineddukddak_sub_sources) },
/* libconfig_interface */
{ HP_POP(libconfig->read, HP_libconfig_read) },
{ HP_POP(libconfig->write, HP_libconfig_write) },
@@ -1982,6 +1986,7 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(mob->init, HP_mob_init) },
{ HP_POP(mob->final, HP_mob_final) },
{ HP_POP(mob->reload, HP_mob_reload) },
+ { HP_POP(mob->reload_sub_mob, HP_mob_reload_sub_mob) },
{ HP_POP(mob->db, HP_mob_db) },
{ HP_POP(mob->chat, HP_mob_chat) },
{ HP_POP(mob->makedummymobdb, HP_mob_makedummymobdb) },
@@ -2270,7 +2275,6 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(party->send_levelup, HP_party_send_levelup) },
{ HP_POP(party->send_logout, HP_party_send_logout) },
{ HP_POP(party->send_message, HP_party_send_message) },
- { HP_POP(party->recv_message, HP_party_recv_message) },
{ HP_POP(party->skill_check, HP_party_skill_check) },
{ HP_POP(party->send_xy_clear, HP_party_send_xy_clear) },
{ HP_POP(party->exp_share, HP_party_exp_share) },
@@ -2546,7 +2550,10 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(pc->check_job_name, HP_pc_check_job_name) },
{ HP_POP(pc->update_idle_time, HP_pc_update_idle_time) },
{ HP_POP(pc->have_magnifier, HP_pc_have_magnifier) },
+ { HP_POP(pc->have_item_chain, HP_pc_have_item_chain) },
{ HP_POP(pc->process_chat_message, HP_pc_process_chat_message) },
+ { HP_POP(pc->wis_message_to_gm, HP_pc_wis_message_to_gm) },
+ { HP_POP(pc->wis_message_to_gm_sub, HP_pc_wis_message_to_gm_sub) },
{ HP_POP(pc->check_supernovice_call, HP_pc_check_supernovice_call) },
{ HP_POP(pc->check_basicskill, HP_pc_check_basicskill) },
{ HP_POP(pc->isDeathPenaltyJob, HP_pc_isDeathPenaltyJob) },
@@ -2865,6 +2872,9 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(script->run_use_script, HP_script_run_use_script) },
{ HP_POP(script->run_item_equip_script, HP_script_run_item_equip_script) },
{ HP_POP(script->run_item_unequip_script, HP_script_run_item_unequip_script) },
+ { HP_POP(script->run_item_rental_end_script, HP_script_run_item_rental_end_script) },
+ { HP_POP(script->run_item_rental_start_script, HP_script_run_item_rental_start_script) },
+ { HP_POP(script->run_item_lapineddukddak_script, HP_script_run_item_lapineddukddak_script) },
/* searchstore_interface */
{ HP_POP(searchstore->open, HP_searchstore_open) },
{ HP_POP(searchstore->query, HP_searchstore_query) },
@@ -3309,7 +3319,10 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(status->natural_heal_timer, HP_status_natural_heal_timer) },
{ HP_POP(status->readdb_job2, HP_status_readdb_job2) },
{ HP_POP(status->readdb_sizefix, HP_status_readdb_sizefix) },
- { HP_POP(status->readdb_scconfig, HP_status_readdb_scconfig) },
+ { HP_POP(status->read_scdb_libconfig, HP_status_read_scdb_libconfig) },
+ { HP_POP(status->read_scdb_libconfig_sub, HP_status_read_scdb_libconfig_sub) },
+ { HP_POP(status->read_scdb_libconfig_sub_flag, HP_status_read_scdb_libconfig_sub_flag) },
+ { HP_POP(status->read_scdb_libconfig_sub_flag_additional, HP_status_read_scdb_libconfig_sub_flag_additional) },
{ HP_POP(status->read_job_db, HP_status_read_job_db) },
{ HP_POP(status->read_job_db_sub, HP_status_read_job_db_sub) },
{ HP_POP(status->set_sc, HP_status_set_sc) },
diff --git a/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc b/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc
index a3816a0b9..6dd6cb34f 100644
--- a/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc
+++ b/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc
@@ -11278,11 +11278,11 @@ void HP_clif_viewpoint(struct map_session_data *sd, int npc_id, int type, int x,
}
return;
}
-int HP_clif_damage(struct block_list *src, struct block_list *dst, int sdelay, int ddelay, int64 damage, short div, unsigned char type, int64 damage2) {
+int HP_clif_damage(struct block_list *src, struct block_list *dst, int sdelay, int ddelay, int64 damage, short div, enum battle_dmg_type type, int64 damage2) {
int hIndex = 0;
int retVal___ = 0;
if (HPMHooks.count.HP_clif_damage_pre > 0) {
- int (*preHookFunc) (struct block_list **src, struct block_list **dst, int *sdelay, int *ddelay, int64 *damage, short *div, unsigned char *type, int64 *damage2);
+ int (*preHookFunc) (struct block_list **src, struct block_list **dst, int *sdelay, int *ddelay, int64 *damage, short *div, enum battle_dmg_type *type, int64 *damage2);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_damage_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_clif_damage_pre[hIndex].func;
@@ -11297,7 +11297,7 @@ int HP_clif_damage(struct block_list *src, struct block_list *dst, int sdelay, i
retVal___ = HPMHooks.source.clif.damage(src, dst, sdelay, ddelay, damage, div, type, damage2);
}
if (HPMHooks.count.HP_clif_damage_post > 0) {
- int (*postHookFunc) (int retVal___, struct block_list *src, struct block_list *dst, int sdelay, int ddelay, int64 damage, short div, unsigned char type, int64 damage2);
+ int (*postHookFunc) (int retVal___, struct block_list *src, struct block_list *dst, int sdelay, int ddelay, int64 damage, short div, enum battle_dmg_type type, int64 damage2);
for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_damage_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_clif_damage_post[hIndex].func;
retVal___ = postHookFunc(retVal___, src, dst, sdelay, ddelay, damage, div, type, damage2);
@@ -11539,6 +11539,58 @@ void HP_clif_ranklist(struct map_session_data *sd, enum fame_list_type type) {
}
return;
}
+void HP_clif_ranklist_sub(struct PACKET_ZC_ACK_RANKING_sub *ranks, enum fame_list_type type) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_ranklist_sub_pre > 0) {
+ void (*preHookFunc) (struct PACKET_ZC_ACK_RANKING_sub **ranks, enum fame_list_type *type);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_ranklist_sub_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_ranklist_sub_pre[hIndex].func;
+ preHookFunc(&ranks, &type);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.ranklist_sub(ranks, type);
+ }
+ if (HPMHooks.count.HP_clif_ranklist_sub_post > 0) {
+ void (*postHookFunc) (struct PACKET_ZC_ACK_RANKING_sub *ranks, enum fame_list_type type);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_ranklist_sub_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_ranklist_sub_post[hIndex].func;
+ postHookFunc(ranks, type);
+ }
+ }
+ return;
+}
+void HP_clif_ranklist_sub2(uint32 *chars, uint32 *points, enum fame_list_type type) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_ranklist_sub2_pre > 0) {
+ void (*preHookFunc) (uint32 **chars, uint32 **points, enum fame_list_type *type);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_ranklist_sub2_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_ranklist_sub2_pre[hIndex].func;
+ preHookFunc(&chars, &points, &type);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.ranklist_sub2(chars, points, type);
+ }
+ if (HPMHooks.count.HP_clif_ranklist_sub2_post > 0) {
+ void (*postHookFunc) (uint32 *chars, uint32 *points, enum fame_list_type type);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_ranklist_sub2_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_ranklist_sub2_post[hIndex].func;
+ postHookFunc(chars, points, type);
+ }
+ }
+ return;
+}
void HP_clif_update_rankingpoint(struct map_session_data *sd, enum fame_list_type type, int points) {
int hIndex = 0;
if (HPMHooks.count.HP_clif_update_rankingpoint_pre > 0) {
@@ -14480,11 +14532,11 @@ void HP_clif_callpartner(struct map_session_data *sd) {
}
return;
}
-int HP_clif_skill_damage(struct block_list *src, struct block_list *dst, int64 tick, int sdelay, int ddelay, int64 damage, int div, uint16 skill_id, uint16 skill_lv, int type) {
+int HP_clif_skill_damage(struct block_list *src, struct block_list *dst, int64 tick, int sdelay, int ddelay, int64 damage, int div, uint16 skill_id, uint16 skill_lv, enum battle_dmg_type type) {
int hIndex = 0;
int retVal___ = 0;
if (HPMHooks.count.HP_clif_skill_damage_pre > 0) {
- int (*preHookFunc) (struct block_list **src, struct block_list **dst, int64 *tick, int *sdelay, int *ddelay, int64 *damage, int *div, uint16 *skill_id, uint16 *skill_lv, int *type);
+ int (*preHookFunc) (struct block_list **src, struct block_list **dst, int64 *tick, int *sdelay, int *ddelay, int64 *damage, int *div, uint16 *skill_id, uint16 *skill_lv, enum battle_dmg_type *type);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_skill_damage_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_clif_skill_damage_pre[hIndex].func;
@@ -14499,7 +14551,7 @@ int HP_clif_skill_damage(struct block_list *src, struct block_list *dst, int64 t
retVal___ = HPMHooks.source.clif.skill_damage(src, dst, tick, sdelay, ddelay, damage, div, skill_id, skill_lv, type);
}
if (HPMHooks.count.HP_clif_skill_damage_post > 0) {
- int (*postHookFunc) (int retVal___, struct block_list *src, struct block_list *dst, int64 tick, int sdelay, int ddelay, int64 damage, int div, uint16 skill_id, uint16 skill_lv, int type);
+ int (*postHookFunc) (int retVal___, struct block_list *src, struct block_list *dst, int64 tick, int sdelay, int ddelay, int64 damage, int div, uint16 skill_id, uint16 skill_lv, enum battle_dmg_type type);
for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_skill_damage_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_clif_skill_damage_post[hIndex].func;
retVal___ = postHookFunc(retVal___, src, dst, tick, sdelay, ddelay, damage, div, skill_id, skill_lv, type);
@@ -16928,6 +16980,32 @@ void HP_clif_deleteskill(struct map_session_data *sd, int id) {
}
return;
}
+void HP_clif_playerSkillToPacket(struct map_session_data *sd, struct SKILLDATA *skillData, int skillId, int idx, bool newSkill) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_playerSkillToPacket_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd, struct SKILLDATA **skillData, int *skillId, int *idx, bool *newSkill);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_playerSkillToPacket_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_playerSkillToPacket_pre[hIndex].func;
+ preHookFunc(&sd, &skillData, &skillId, &idx, &newSkill);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.playerSkillToPacket(sd, skillData, skillId, idx, newSkill);
+ }
+ if (HPMHooks.count.HP_clif_playerSkillToPacket_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd, struct SKILLDATA *skillData, int skillId, int idx, bool newSkill);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_playerSkillToPacket_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_playerSkillToPacket_post[hIndex].func;
+ postHookFunc(sd, skillData, skillId, idx, newSkill);
+ }
+ }
+ return;
+}
void HP_clif_party_created(struct map_session_data *sd, int result) {
int hIndex = 0;
if (HPMHooks.count.HP_clif_party_created_pre > 0) {
@@ -17474,6 +17552,58 @@ void HP_clif_guild_allianceinfo(struct map_session_data *sd) {
}
return;
}
+void HP_clif_guild_castlelist(struct map_session_data *sd) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_guild_castlelist_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_guild_castlelist_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_guild_castlelist_pre[hIndex].func;
+ preHookFunc(&sd);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.guild_castlelist(sd);
+ }
+ if (HPMHooks.count.HP_clif_guild_castlelist_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_guild_castlelist_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_guild_castlelist_post[hIndex].func;
+ postHookFunc(sd);
+ }
+ }
+ return;
+}
+void HP_clif_guild_castleinfo(struct map_session_data *sd, struct guild_castle *gc) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_guild_castleinfo_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd, struct guild_castle **gc);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_guild_castleinfo_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_guild_castleinfo_pre[hIndex].func;
+ preHookFunc(&sd, &gc);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.guild_castleinfo(sd, gc);
+ }
+ if (HPMHooks.count.HP_clif_guild_castleinfo_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd, struct guild_castle *gc);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_guild_castleinfo_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_guild_castleinfo_post[hIndex].func;
+ postHookFunc(sd, gc);
+ }
+ }
+ return;
+}
void HP_clif_guild_memberlist(struct map_session_data *sd) {
int hIndex = 0;
if (HPMHooks.count.HP_clif_guild_memberlist_pre > 0) {
@@ -21254,11 +21384,11 @@ void HP_clif_notify_bounditem(struct map_session_data *sd, unsigned short index)
}
return;
}
-int HP_clif_delay_damage(int64 tick, struct block_list *src, struct block_list *dst, int sdelay, int ddelay, int64 in_damage, short div, unsigned char type) {
+int HP_clif_delay_damage(int64 tick, struct block_list *src, struct block_list *dst, int sdelay, int ddelay, int64 in_damage, short div, enum battle_dmg_type type) {
int hIndex = 0;
int retVal___ = 0;
if (HPMHooks.count.HP_clif_delay_damage_pre > 0) {
- int (*preHookFunc) (int64 *tick, struct block_list **src, struct block_list **dst, int *sdelay, int *ddelay, int64 *in_damage, short *div, unsigned char *type);
+ int (*preHookFunc) (int64 *tick, struct block_list **src, struct block_list **dst, int *sdelay, int *ddelay, int64 *in_damage, short *div, enum battle_dmg_type *type);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_delay_damage_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_clif_delay_damage_pre[hIndex].func;
@@ -21273,7 +21403,7 @@ int HP_clif_delay_damage(int64 tick, struct block_list *src, struct block_list *
retVal___ = HPMHooks.source.clif.delay_damage(tick, src, dst, sdelay, ddelay, in_damage, div, type);
}
if (HPMHooks.count.HP_clif_delay_damage_post > 0) {
- int (*postHookFunc) (int retVal___, int64 tick, struct block_list *src, struct block_list *dst, int sdelay, int ddelay, int64 in_damage, short div, unsigned char type);
+ int (*postHookFunc) (int retVal___, int64 tick, struct block_list *src, struct block_list *dst, int sdelay, int ddelay, int64 in_damage, short div, enum battle_dmg_type type);
for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_delay_damage_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_clif_delay_damage_post[hIndex].func;
retVal___ = postHookFunc(retVal___, tick, src, dst, sdelay, ddelay, in_damage, div, type);
@@ -21334,10 +21464,10 @@ void HP_clif_npc_market_open(struct map_session_data *sd, struct npc_data *nd) {
}
return;
}
-void HP_clif_npc_market_purchase_ack(struct map_session_data *sd, const struct itemlist *item_list, unsigned char response) {
+void HP_clif_npc_market_purchase_ack(struct map_session_data *sd, const struct itemlist *item_list, enum market_buy_result response) {
int hIndex = 0;
if (HPMHooks.count.HP_clif_npc_market_purchase_ack_pre > 0) {
- void (*preHookFunc) (struct map_session_data **sd, const struct itemlist **item_list, unsigned char *response);
+ void (*preHookFunc) (struct map_session_data **sd, const struct itemlist **item_list, enum market_buy_result *response);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_npc_market_purchase_ack_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_clif_npc_market_purchase_ack_pre[hIndex].func;
@@ -21352,7 +21482,7 @@ void HP_clif_npc_market_purchase_ack(struct map_session_data *sd, const struct i
HPMHooks.source.clif.npc_market_purchase_ack(sd, item_list, response);
}
if (HPMHooks.count.HP_clif_npc_market_purchase_ack_post > 0) {
- void (*postHookFunc) (struct map_session_data *sd, const struct itemlist *item_list, unsigned char response);
+ void (*postHookFunc) (struct map_session_data *sd, const struct itemlist *item_list, enum market_buy_result response);
for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_npc_market_purchase_ack_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_clif_npc_market_purchase_ack_post[hIndex].func;
postHookFunc(sd, item_list, response);
@@ -30115,6 +30245,190 @@ void HP_clif_announce_refine_status(struct map_session_data *sd, int item_id, in
}
return;
}
+void HP_clif_pGuildCastleTeleportRequest(int fd, struct map_session_data *sd) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_pGuildCastleTeleportRequest_pre > 0) {
+ void (*preHookFunc) (int *fd, struct map_session_data **sd);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_pGuildCastleTeleportRequest_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_pGuildCastleTeleportRequest_pre[hIndex].func;
+ preHookFunc(&fd, &sd);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.pGuildCastleTeleportRequest(fd, sd);
+ }
+ if (HPMHooks.count.HP_clif_pGuildCastleTeleportRequest_post > 0) {
+ void (*postHookFunc) (int fd, struct map_session_data *sd);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_pGuildCastleTeleportRequest_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_pGuildCastleTeleportRequest_post[hIndex].func;
+ postHookFunc(fd, sd);
+ }
+ }
+ return;
+}
+void HP_clif_pGuildCastleInfoRequest(int fd, struct map_session_data *sd) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_pGuildCastleInfoRequest_pre > 0) {
+ void (*preHookFunc) (int *fd, struct map_session_data **sd);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_pGuildCastleInfoRequest_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_pGuildCastleInfoRequest_pre[hIndex].func;
+ preHookFunc(&fd, &sd);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.pGuildCastleInfoRequest(fd, sd);
+ }
+ if (HPMHooks.count.HP_clif_pGuildCastleInfoRequest_post > 0) {
+ void (*postHookFunc) (int fd, struct map_session_data *sd);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_pGuildCastleInfoRequest_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_pGuildCastleInfoRequest_post[hIndex].func;
+ postHookFunc(fd, sd);
+ }
+ }
+ return;
+}
+void HP_clif_guild_castleteleport_res(struct map_session_data *sd, enum siege_teleport_result result) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_guild_castleteleport_res_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd, enum siege_teleport_result *result);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_guild_castleteleport_res_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_guild_castleteleport_res_pre[hIndex].func;
+ preHookFunc(&sd, &result);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.guild_castleteleport_res(sd, result);
+ }
+ if (HPMHooks.count.HP_clif_guild_castleteleport_res_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd, enum siege_teleport_result result);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_guild_castleteleport_res_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_guild_castleteleport_res_post[hIndex].func;
+ postHookFunc(sd, result);
+ }
+ }
+ return;
+}
+bool HP_clif_lapineDdukDdak_open(struct map_session_data *sd, int item_id) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_clif_lapineDdukDdak_open_pre > 0) {
+ bool (*preHookFunc) (struct map_session_data **sd, int *item_id);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_lapineDdukDdak_open_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_lapineDdukDdak_open_pre[hIndex].func;
+ retVal___ = preHookFunc(&sd, &item_id);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.clif.lapineDdukDdak_open(sd, item_id);
+ }
+ if (HPMHooks.count.HP_clif_lapineDdukDdak_open_post > 0) {
+ bool (*postHookFunc) (bool retVal___, struct map_session_data *sd, int item_id);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_lapineDdukDdak_open_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_lapineDdukDdak_open_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, sd, item_id);
+ }
+ }
+ return retVal___;
+}
+bool HP_clif_lapineDdukDdak_result(struct map_session_data *sd, enum lapineddukddak_result result) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_clif_lapineDdukDdak_result_pre > 0) {
+ bool (*preHookFunc) (struct map_session_data **sd, enum lapineddukddak_result *result);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_lapineDdukDdak_result_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_lapineDdukDdak_result_pre[hIndex].func;
+ retVal___ = preHookFunc(&sd, &result);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.clif.lapineDdukDdak_result(sd, result);
+ }
+ if (HPMHooks.count.HP_clif_lapineDdukDdak_result_post > 0) {
+ bool (*postHookFunc) (bool retVal___, struct map_session_data *sd, enum lapineddukddak_result result);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_lapineDdukDdak_result_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_lapineDdukDdak_result_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, sd, result);
+ }
+ }
+ return retVal___;
+}
+void HP_clif_plapineDdukDdak_ack(int fd, struct map_session_data *sd) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_plapineDdukDdak_ack_pre > 0) {
+ void (*preHookFunc) (int *fd, struct map_session_data **sd);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_plapineDdukDdak_ack_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_plapineDdukDdak_ack_pre[hIndex].func;
+ preHookFunc(&fd, &sd);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.plapineDdukDdak_ack(fd, sd);
+ }
+ if (HPMHooks.count.HP_clif_plapineDdukDdak_ack_post > 0) {
+ void (*postHookFunc) (int fd, struct map_session_data *sd);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_plapineDdukDdak_ack_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_plapineDdukDdak_ack_post[hIndex].func;
+ postHookFunc(fd, sd);
+ }
+ }
+ return;
+}
+void HP_clif_plapineDdukDdak_close(int fd, struct map_session_data *sd) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_clif_plapineDdukDdak_close_pre > 0) {
+ void (*preHookFunc) (int *fd, struct map_session_data **sd);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_plapineDdukDdak_close_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_clif_plapineDdukDdak_close_pre[hIndex].func;
+ preHookFunc(&fd, &sd);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.clif.plapineDdukDdak_close(fd, sd);
+ }
+ if (HPMHooks.count.HP_clif_plapineDdukDdak_close_post > 0) {
+ void (*postHookFunc) (int fd, struct map_session_data *sd);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_clif_plapineDdukDdak_close_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_clif_plapineDdukDdak_close_post[hIndex].func;
+ postHookFunc(fd, sd);
+ }
+ }
+ return;
+}
/* cmdline_interface */
void HP_cmdline_init(void) {
int hIndex = 0;
@@ -33589,33 +33903,6 @@ int HP_guild_send_message(struct map_session_data *sd, const char *mes) {
}
return retVal___;
}
-int HP_guild_recv_message(int guild_id, int account_id, const char *mes, int len) {
- int hIndex = 0;
- int retVal___ = 0;
- if (HPMHooks.count.HP_guild_recv_message_pre > 0) {
- int (*preHookFunc) (int *guild_id, int *account_id, const char **mes, int *len);
- *HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_guild_recv_message_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_guild_recv_message_pre[hIndex].func;
- retVal___ = preHookFunc(&guild_id, &account_id, &mes, &len);
- }
- if (*HPMforce_return) {
- *HPMforce_return = false;
- return retVal___;
- }
- }
- {
- retVal___ = HPMHooks.source.guild.recv_message(guild_id, account_id, mes, len);
- }
- if (HPMHooks.count.HP_guild_recv_message_post > 0) {
- int (*postHookFunc) (int retVal___, int guild_id, int account_id, const char *mes, int len);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_guild_recv_message_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_guild_recv_message_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, guild_id, account_id, mes, len);
- }
- }
- return retVal___;
-}
int HP_guild_send_dot_remove(struct map_session_data *sd) {
int hIndex = 0;
int retVal___ = 0;
@@ -34199,15 +34486,15 @@ bool HP_guild_read_guildskill_tree_db(char *split[], int columns, int current) {
}
return retVal___;
}
-bool HP_guild_read_castledb(char *str[], int columns, int current) {
+bool HP_guild_read_castledb_libconfig(void) {
int hIndex = 0;
bool retVal___ = false;
- if (HPMHooks.count.HP_guild_read_castledb_pre > 0) {
- bool (*preHookFunc) (char **str[], int *columns, int *current);
+ if (HPMHooks.count.HP_guild_read_castledb_libconfig_pre > 0) {
+ bool (*preHookFunc) (void);
*HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_guild_read_castledb_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_guild_read_castledb_pre[hIndex].func;
- retVal___ = preHookFunc(&str, &columns, &current);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_guild_read_castledb_libconfig_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_guild_read_castledb_libconfig_pre[hIndex].func;
+ retVal___ = preHookFunc();
}
if (*HPMforce_return) {
*HPMforce_return = false;
@@ -34215,13 +34502,67 @@ bool HP_guild_read_castledb(char *str[], int columns, int current) {
}
}
{
- retVal___ = HPMHooks.source.guild.read_castledb(str, columns, current);
+ retVal___ = HPMHooks.source.guild.read_castledb_libconfig();
}
- if (HPMHooks.count.HP_guild_read_castledb_post > 0) {
- bool (*postHookFunc) (bool retVal___, char *str[], int columns, int current);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_guild_read_castledb_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_guild_read_castledb_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, str, columns, current);
+ if (HPMHooks.count.HP_guild_read_castledb_libconfig_post > 0) {
+ bool (*postHookFunc) (bool retVal___);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_guild_read_castledb_libconfig_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_guild_read_castledb_libconfig_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___);
+ }
+ }
+ return retVal___;
+}
+bool HP_guild_read_castledb_libconfig_sub(struct config_setting_t *it, int idx, const char *source) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_guild_read_castledb_libconfig_sub_pre > 0) {
+ bool (*preHookFunc) (struct config_setting_t **it, int *idx, const char **source);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_guild_read_castledb_libconfig_sub_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_guild_read_castledb_libconfig_sub_pre[hIndex].func;
+ retVal___ = preHookFunc(&it, &idx, &source);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.guild.read_castledb_libconfig_sub(it, idx, source);
+ }
+ if (HPMHooks.count.HP_guild_read_castledb_libconfig_sub_post > 0) {
+ bool (*postHookFunc) (bool retVal___, struct config_setting_t *it, int idx, const char *source);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_guild_read_castledb_libconfig_sub_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_guild_read_castledb_libconfig_sub_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, it, idx, source);
+ }
+ }
+ return retVal___;
+}
+bool HP_guild_read_castledb_libconfig_sub_warp(struct config_setting_t *wd, const char *source, struct guild_castle *gc) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_guild_read_castledb_libconfig_sub_warp_pre > 0) {
+ bool (*preHookFunc) (struct config_setting_t **wd, const char **source, struct guild_castle **gc);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_guild_read_castledb_libconfig_sub_warp_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_guild_read_castledb_libconfig_sub_warp_pre[hIndex].func;
+ retVal___ = preHookFunc(&wd, &source, &gc);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.guild.read_castledb_libconfig_sub_warp(wd, source, gc);
+ }
+ if (HPMHooks.count.HP_guild_read_castledb_libconfig_sub_warp_post > 0) {
+ bool (*postHookFunc) (bool retVal___, struct config_setting_t *wd, const char *source, struct guild_castle *gc);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_guild_read_castledb_libconfig_sub_warp_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_guild_read_castledb_libconfig_sub_warp_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, wd, source, gc);
}
}
return retVal___;
@@ -35278,15 +35619,15 @@ int HP_homun_dead(struct homun_data *hd) {
}
return retVal___;
}
-int HP_homun_vaporize(struct map_session_data *sd, enum homun_state flag) {
+int HP_homun_vaporize(struct map_session_data *sd, enum homun_state state, bool force) {
int hIndex = 0;
int retVal___ = 0;
if (HPMHooks.count.HP_homun_vaporize_pre > 0) {
- int (*preHookFunc) (struct map_session_data **sd, enum homun_state *flag);
+ int (*preHookFunc) (struct map_session_data **sd, enum homun_state *state, bool *force);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_homun_vaporize_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_homun_vaporize_pre[hIndex].func;
- retVal___ = preHookFunc(&sd, &flag);
+ retVal___ = preHookFunc(&sd, &state, &force);
}
if (*HPMforce_return) {
*HPMforce_return = false;
@@ -35294,13 +35635,13 @@ int HP_homun_vaporize(struct map_session_data *sd, enum homun_state flag) {
}
}
{
- retVal___ = HPMHooks.source.homun.vaporize(sd, flag);
+ retVal___ = HPMHooks.source.homun.vaporize(sd, state, force);
}
if (HPMHooks.count.HP_homun_vaporize_post > 0) {
- int (*postHookFunc) (int retVal___, struct map_session_data *sd, enum homun_state flag);
+ int (*postHookFunc) (int retVal___, struct map_session_data *sd, enum homun_state state, bool force);
for (hIndex = 0; hIndex < HPMHooks.count.HP_homun_vaporize_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_homun_vaporize_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, sd, flag);
+ retVal___ = postHookFunc(retVal___, sd, state, force);
}
}
return retVal___;
@@ -35574,6 +35915,33 @@ int HP_homun_gainexp(struct homun_data *hd, unsigned int exp) {
}
return retVal___;
}
+int HP_homun_gainexp_real(struct homun_data *hd, unsigned int exp) {
+ int hIndex = 0;
+ int retVal___ = 0;
+ if (HPMHooks.count.HP_homun_gainexp_real_pre > 0) {
+ int (*preHookFunc) (struct homun_data **hd, unsigned int *exp);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_homun_gainexp_real_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_homun_gainexp_real_pre[hIndex].func;
+ retVal___ = preHookFunc(&hd, &exp);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.homun.gainexp_real(hd, exp);
+ }
+ if (HPMHooks.count.HP_homun_gainexp_real_post > 0) {
+ int (*postHookFunc) (int retVal___, struct homun_data *hd, unsigned int exp);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_homun_gainexp_real_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_homun_gainexp_real_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, hd, exp);
+ }
+ }
+ return retVal___;
+}
unsigned int HP_homun_add_intimacy(struct homun_data *hd, unsigned int value) {
int hIndex = 0;
unsigned int retVal___ = 0;
@@ -35868,15 +36236,15 @@ int HP_homun_db_search(int key, int type) {
}
return retVal___;
}
-bool HP_homun_create(struct map_session_data *sd, const struct s_homunculus *hom) {
+bool HP_homun_create(struct map_session_data *sd, const struct s_homunculus *hom, bool is_new) {
int hIndex = 0;
bool retVal___ = false;
if (HPMHooks.count.HP_homun_create_pre > 0) {
- bool (*preHookFunc) (struct map_session_data **sd, const struct s_homunculus **hom);
+ bool (*preHookFunc) (struct map_session_data **sd, const struct s_homunculus **hom, bool *is_new);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_homun_create_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_homun_create_pre[hIndex].func;
- retVal___ = preHookFunc(&sd, &hom);
+ retVal___ = preHookFunc(&sd, &hom, &is_new);
}
if (*HPMforce_return) {
*HPMforce_return = false;
@@ -35884,13 +36252,13 @@ bool HP_homun_create(struct map_session_data *sd, const struct s_homunculus *hom
}
}
{
- retVal___ = HPMHooks.source.homun.create(sd, hom);
+ retVal___ = HPMHooks.source.homun.create(sd, hom, is_new);
}
if (HPMHooks.count.HP_homun_create_post > 0) {
- bool (*postHookFunc) (bool retVal___, struct map_session_data *sd, const struct s_homunculus *hom);
+ bool (*postHookFunc) (bool retVal___, struct map_session_data *sd, const struct s_homunculus *hom, bool is_new);
for (hIndex = 0; hIndex < HPMHooks.count.HP_homun_create_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_homun_create_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, sd, hom);
+ retVal___ = postHookFunc(retVal___, sd, hom, is_new);
}
}
return retVal___;
@@ -36890,141 +37258,6 @@ int HP_intif_create_pet(int account_id, int char_id, int pet_type, int pet_lv, i
}
return retVal___;
}
-int HP_intif_broadcast(const char *mes, int len, int type) {
- int hIndex = 0;
- int retVal___ = 0;
- if (HPMHooks.count.HP_intif_broadcast_pre > 0) {
- int (*preHookFunc) (const char **mes, int *len, int *type);
- *HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_intif_broadcast_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_intif_broadcast_pre[hIndex].func;
- retVal___ = preHookFunc(&mes, &len, &type);
- }
- if (*HPMforce_return) {
- *HPMforce_return = false;
- return retVal___;
- }
- }
- {
- retVal___ = HPMHooks.source.intif.broadcast(mes, len, type);
- }
- if (HPMHooks.count.HP_intif_broadcast_post > 0) {
- int (*postHookFunc) (int retVal___, const char *mes, int len, int type);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_intif_broadcast_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_intif_broadcast_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, mes, len, type);
- }
- }
- return retVal___;
-}
-int HP_intif_broadcast2(const char *mes, int len, unsigned int fontColor, short fontType, short fontSize, short fontAlign, short fontY) {
- int hIndex = 0;
- int retVal___ = 0;
- if (HPMHooks.count.HP_intif_broadcast2_pre > 0) {
- int (*preHookFunc) (const char **mes, int *len, unsigned int *fontColor, short *fontType, short *fontSize, short *fontAlign, short *fontY);
- *HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_intif_broadcast2_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_intif_broadcast2_pre[hIndex].func;
- retVal___ = preHookFunc(&mes, &len, &fontColor, &fontType, &fontSize, &fontAlign, &fontY);
- }
- if (*HPMforce_return) {
- *HPMforce_return = false;
- return retVal___;
- }
- }
- {
- retVal___ = HPMHooks.source.intif.broadcast2(mes, len, fontColor, fontType, fontSize, fontAlign, fontY);
- }
- if (HPMHooks.count.HP_intif_broadcast2_post > 0) {
- int (*postHookFunc) (int retVal___, const char *mes, int len, unsigned int fontColor, short fontType, short fontSize, short fontAlign, short fontY);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_intif_broadcast2_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_intif_broadcast2_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, mes, len, fontColor, fontType, fontSize, fontAlign, fontY);
- }
- }
- return retVal___;
-}
-int HP_intif_main_message(struct map_session_data *sd, const char *message) {
- int hIndex = 0;
- int retVal___ = 0;
- if (HPMHooks.count.HP_intif_main_message_pre > 0) {
- int (*preHookFunc) (struct map_session_data **sd, const char **message);
- *HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_intif_main_message_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_intif_main_message_pre[hIndex].func;
- retVal___ = preHookFunc(&sd, &message);
- }
- if (*HPMforce_return) {
- *HPMforce_return = false;
- return retVal___;
- }
- }
- {
- retVal___ = HPMHooks.source.intif.main_message(sd, message);
- }
- if (HPMHooks.count.HP_intif_main_message_post > 0) {
- int (*postHookFunc) (int retVal___, struct map_session_data *sd, const char *message);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_intif_main_message_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_intif_main_message_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, sd, message);
- }
- }
- return retVal___;
-}
-int HP_intif_wis_message(struct map_session_data *sd, const char *nick, const char *mes, int mes_len) {
- int hIndex = 0;
- int retVal___ = 0;
- if (HPMHooks.count.HP_intif_wis_message_pre > 0) {
- int (*preHookFunc) (struct map_session_data **sd, const char **nick, const char **mes, int *mes_len);
- *HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_intif_wis_message_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_intif_wis_message_pre[hIndex].func;
- retVal___ = preHookFunc(&sd, &nick, &mes, &mes_len);
- }
- if (*HPMforce_return) {
- *HPMforce_return = false;
- return retVal___;
- }
- }
- {
- retVal___ = HPMHooks.source.intif.wis_message(sd, nick, mes, mes_len);
- }
- if (HPMHooks.count.HP_intif_wis_message_post > 0) {
- int (*postHookFunc) (int retVal___, struct map_session_data *sd, const char *nick, const char *mes, int mes_len);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_intif_wis_message_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_intif_wis_message_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, sd, nick, mes, mes_len);
- }
- }
- return retVal___;
-}
-int HP_intif_wis_message_to_gm(char *Wisp_name, int permission, char *mes) {
- int hIndex = 0;
- int retVal___ = 0;
- if (HPMHooks.count.HP_intif_wis_message_to_gm_pre > 0) {
- int (*preHookFunc) (char **Wisp_name, int *permission, char **mes);
- *HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_intif_wis_message_to_gm_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_intif_wis_message_to_gm_pre[hIndex].func;
- retVal___ = preHookFunc(&Wisp_name, &permission, &mes);
- }
- if (*HPMforce_return) {
- *HPMforce_return = false;
- return retVal___;
- }
- }
- {
- retVal___ = HPMHooks.source.intif.wis_message_to_gm(Wisp_name, permission, mes);
- }
- if (HPMHooks.count.HP_intif_wis_message_to_gm_post > 0) {
- int (*postHookFunc) (int retVal___, char *Wisp_name, int permission, char *mes);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_intif_wis_message_to_gm_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_intif_wis_message_to_gm_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, Wisp_name, permission, mes);
- }
- }
- return retVal___;
-}
int HP_intif_saveregistry(struct map_session_data *sd) {
int hIndex = 0;
int retVal___ = 0;
@@ -37374,33 +37607,6 @@ int HP_intif_break_party(int party_id) {
}
return retVal___;
}
-int HP_intif_party_message(int party_id, int account_id, const char *mes, int len) {
- int hIndex = 0;
- int retVal___ = 0;
- if (HPMHooks.count.HP_intif_party_message_pre > 0) {
- int (*preHookFunc) (int *party_id, int *account_id, const char **mes, int *len);
- *HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_intif_party_message_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_intif_party_message_pre[hIndex].func;
- retVal___ = preHookFunc(&party_id, &account_id, &mes, &len);
- }
- if (*HPMforce_return) {
- *HPMforce_return = false;
- return retVal___;
- }
- }
- {
- retVal___ = HPMHooks.source.intif.party_message(party_id, account_id, mes, len);
- }
- if (HPMHooks.count.HP_intif_party_message_post > 0) {
- int (*postHookFunc) (int retVal___, int party_id, int account_id, const char *mes, int len);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_intif_party_message_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_intif_party_message_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, party_id, account_id, mes, len);
- }
- }
- return retVal___;
-}
int HP_intif_party_leaderchange(int party_id, int account_id, int char_id) {
int hIndex = 0;
int retVal___ = 0;
@@ -37590,33 +37796,6 @@ int HP_intif_guild_break(int guild_id) {
}
return retVal___;
}
-int HP_intif_guild_message(int guild_id, int account_id, const char *mes, int len) {
- int hIndex = 0;
- int retVal___ = 0;
- if (HPMHooks.count.HP_intif_guild_message_pre > 0) {
- int (*preHookFunc) (int *guild_id, int *account_id, const char **mes, int *len);
- *HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_intif_guild_message_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_intif_guild_message_pre[hIndex].func;
- retVal___ = preHookFunc(&guild_id, &account_id, &mes, &len);
- }
- if (*HPMforce_return) {
- *HPMforce_return = false;
- return retVal___;
- }
- }
- {
- retVal___ = HPMHooks.source.intif.guild_message(guild_id, account_id, mes, len);
- }
- if (HPMHooks.count.HP_intif_guild_message_post > 0) {
- int (*postHookFunc) (int retVal___, int guild_id, int account_id, const char *mes, int len);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_intif_guild_message_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_intif_guild_message_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, guild_id, account_id, mes, len);
- }
- }
- return retVal___;
-}
int HP_intif_guild_change_gm(int guild_id, const char *name, int len) {
int hIndex = 0;
int retVal___ = 0;
@@ -39041,117 +39220,6 @@ void HP_intif_achievements_save(struct map_session_data *sd) {
}
return;
}
-void HP_intif_pWisMessage(int fd) {
- int hIndex = 0;
- if (HPMHooks.count.HP_intif_pWisMessage_pre > 0) {
- void (*preHookFunc) (int *fd);
- *HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_intif_pWisMessage_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_intif_pWisMessage_pre[hIndex].func;
- preHookFunc(&fd);
- }
- if (*HPMforce_return) {
- *HPMforce_return = false;
- return;
- }
- }
- {
- HPMHooks.source.intif.pWisMessage(fd);
- }
- if (HPMHooks.count.HP_intif_pWisMessage_post > 0) {
- void (*postHookFunc) (int fd);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_intif_pWisMessage_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_intif_pWisMessage_post[hIndex].func;
- postHookFunc(fd);
- }
- }
- return;
-}
-void HP_intif_pWisEnd(int fd) {
- int hIndex = 0;
- if (HPMHooks.count.HP_intif_pWisEnd_pre > 0) {
- void (*preHookFunc) (int *fd);
- *HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_intif_pWisEnd_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_intif_pWisEnd_pre[hIndex].func;
- preHookFunc(&fd);
- }
- if (*HPMforce_return) {
- *HPMforce_return = false;
- return;
- }
- }
- {
- HPMHooks.source.intif.pWisEnd(fd);
- }
- if (HPMHooks.count.HP_intif_pWisEnd_post > 0) {
- void (*postHookFunc) (int fd);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_intif_pWisEnd_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_intif_pWisEnd_post[hIndex].func;
- postHookFunc(fd);
- }
- }
- return;
-}
-int HP_intif_pWisToGM_sub(struct map_session_data *sd, va_list va) {
- int hIndex = 0;
- int retVal___ = 0;
- if (HPMHooks.count.HP_intif_pWisToGM_sub_pre > 0) {
- int (*preHookFunc) (struct map_session_data **sd, va_list va);
- *HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_intif_pWisToGM_sub_pre; hIndex++) {
- va_list va___copy; va_copy(va___copy, va);
- preHookFunc = HPMHooks.list.HP_intif_pWisToGM_sub_pre[hIndex].func;
- retVal___ = preHookFunc(&sd, va___copy);
- va_end(va___copy);
- }
- if (*HPMforce_return) {
- *HPMforce_return = false;
- return retVal___;
- }
- }
- {
- va_list va___copy; va_copy(va___copy, va);
- retVal___ = HPMHooks.source.intif.pWisToGM_sub(sd, va___copy);
- va_end(va___copy);
- }
- if (HPMHooks.count.HP_intif_pWisToGM_sub_post > 0) {
- int (*postHookFunc) (int retVal___, struct map_session_data *sd, va_list va);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_intif_pWisToGM_sub_post; hIndex++) {
- va_list va___copy; va_copy(va___copy, va);
- postHookFunc = HPMHooks.list.HP_intif_pWisToGM_sub_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, sd, va___copy);
- va_end(va___copy);
- }
- }
- return retVal___;
-}
-void HP_intif_pWisToGM(int fd) {
- int hIndex = 0;
- if (HPMHooks.count.HP_intif_pWisToGM_pre > 0) {
- void (*preHookFunc) (int *fd);
- *HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_intif_pWisToGM_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_intif_pWisToGM_pre[hIndex].func;
- preHookFunc(&fd);
- }
- if (*HPMforce_return) {
- *HPMforce_return = false;
- return;
- }
- }
- {
- HPMHooks.source.intif.pWisToGM(fd);
- }
- if (HPMHooks.count.HP_intif_pWisToGM_post > 0) {
- void (*postHookFunc) (int fd);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_intif_pWisToGM_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_intif_pWisToGM_post[hIndex].func;
- postHookFunc(fd);
- }
- }
- return;
-}
void HP_intif_pRegisters(int fd) {
int hIndex = 0;
if (HPMHooks.count.HP_intif_pRegisters_pre > 0) {
@@ -39516,32 +39584,6 @@ void HP_intif_pPartyBroken(int fd) {
}
return;
}
-void HP_intif_pPartyMessage(int fd) {
- int hIndex = 0;
- if (HPMHooks.count.HP_intif_pPartyMessage_pre > 0) {
- void (*preHookFunc) (int *fd);
- *HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_intif_pPartyMessage_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_intif_pPartyMessage_pre[hIndex].func;
- preHookFunc(&fd);
- }
- if (*HPMforce_return) {
- *HPMforce_return = false;
- return;
- }
- }
- {
- HPMHooks.source.intif.pPartyMessage(fd);
- }
- if (HPMHooks.count.HP_intif_pPartyMessage_post > 0) {
- void (*postHookFunc) (int fd);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_intif_pPartyMessage_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_intif_pPartyMessage_post[hIndex].func;
- postHookFunc(fd);
- }
- }
- return;
-}
void HP_intif_pGuildCreated(int fd) {
int hIndex = 0;
if (HPMHooks.count.HP_intif_pGuildCreated_pre > 0) {
@@ -39698,32 +39740,6 @@ void HP_intif_pGuildBroken(int fd) {
}
return;
}
-void HP_intif_pGuildMessage(int fd) {
- int hIndex = 0;
- if (HPMHooks.count.HP_intif_pGuildMessage_pre > 0) {
- void (*preHookFunc) (int *fd);
- *HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_intif_pGuildMessage_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_intif_pGuildMessage_pre[hIndex].func;
- preHookFunc(&fd);
- }
- if (*HPMforce_return) {
- *HPMforce_return = false;
- return;
- }
- }
- {
- HPMHooks.source.intif.pGuildMessage(fd);
- }
- if (HPMHooks.count.HP_intif_pGuildMessage_post > 0) {
- void (*postHookFunc) (int fd);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_intif_pGuildMessage_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_intif_pGuildMessage_post[hIndex].func;
- postHookFunc(fd);
- }
- }
- return;
-}
void HP_intif_pGuildBasicInfoChanged(int fd) {
int hIndex = 0;
if (HPMHooks.count.HP_intif_pGuildBasicInfoChanged_pre > 0) {
@@ -41685,11 +41701,11 @@ struct item_data* HP_itemdb_search_name(const char *name) {
}
return retVal___;
}
-int HP_itemdb_search_name_array(struct item_data **data, int size, const char *str, int flag) {
+int HP_itemdb_search_name_array(struct item_data **data, const int size, const char *str, enum item_name_search_flag flag) {
int hIndex = 0;
int retVal___ = 0;
if (HPMHooks.count.HP_itemdb_search_name_array_pre > 0) {
- int (*preHookFunc) (struct item_data ***data, int *size, const char **str, int *flag);
+ int (*preHookFunc) (struct item_data ***data, const int *size, const char **str, enum item_name_search_flag *flag);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_itemdb_search_name_array_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_itemdb_search_name_array_pre[hIndex].func;
@@ -41704,7 +41720,7 @@ int HP_itemdb_search_name_array(struct item_data **data, int size, const char *s
retVal___ = HPMHooks.source.itemdb.search_name_array(data, size, str, flag);
}
if (HPMHooks.count.HP_itemdb_search_name_array_post > 0) {
- int (*postHookFunc) (int retVal___, struct item_data **data, int size, const char *str, int flag);
+ int (*postHookFunc) (int retVal___, struct item_data **data, const int size, const char *str, enum item_name_search_flag flag);
for (hIndex = 0; hIndex < HPMHooks.count.HP_itemdb_search_name_array_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_itemdb_search_name_array_post[hIndex].func;
retVal___ = postHookFunc(retVal___, data, size, str, flag);
@@ -42584,15 +42600,15 @@ int HP_itemdb_isidentified2(struct item_data *data) {
}
return retVal___;
}
-int HP_itemdb_combo_split_atoi(char *str, int *val) {
+bool HP_itemdb_read_combodb_libconfig(void) {
int hIndex = 0;
- int retVal___ = 0;
- if (HPMHooks.count.HP_itemdb_combo_split_atoi_pre > 0) {
- int (*preHookFunc) (char **str, int **val);
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_itemdb_read_combodb_libconfig_pre > 0) {
+ bool (*preHookFunc) (void);
*HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_itemdb_combo_split_atoi_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_itemdb_combo_split_atoi_pre[hIndex].func;
- retVal___ = preHookFunc(&str, &val);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_itemdb_read_combodb_libconfig_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_itemdb_read_combodb_libconfig_pre[hIndex].func;
+ retVal___ = preHookFunc();
}
if (*HPMforce_return) {
*HPMforce_return = false;
@@ -42600,42 +42616,43 @@ int HP_itemdb_combo_split_atoi(char *str, int *val) {
}
}
{
- retVal___ = HPMHooks.source.itemdb.combo_split_atoi(str, val);
+ retVal___ = HPMHooks.source.itemdb.read_combodb_libconfig();
}
- if (HPMHooks.count.HP_itemdb_combo_split_atoi_post > 0) {
- int (*postHookFunc) (int retVal___, char *str, int *val);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_itemdb_combo_split_atoi_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_itemdb_combo_split_atoi_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, str, val);
+ if (HPMHooks.count.HP_itemdb_read_combodb_libconfig_post > 0) {
+ bool (*postHookFunc) (bool retVal___);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_itemdb_read_combodb_libconfig_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_itemdb_read_combodb_libconfig_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___);
}
}
return retVal___;
}
-void HP_itemdb_read_combos(void) {
+bool HP_itemdb_read_combodb_libconfig_sub(struct config_setting_t *it, int idx, const char *source) {
int hIndex = 0;
- if (HPMHooks.count.HP_itemdb_read_combos_pre > 0) {
- void (*preHookFunc) (void);
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_itemdb_read_combodb_libconfig_sub_pre > 0) {
+ bool (*preHookFunc) (struct config_setting_t **it, int *idx, const char **source);
*HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_itemdb_read_combos_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_itemdb_read_combos_pre[hIndex].func;
- preHookFunc();
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_itemdb_read_combodb_libconfig_sub_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_itemdb_read_combodb_libconfig_sub_pre[hIndex].func;
+ retVal___ = preHookFunc(&it, &idx, &source);
}
if (*HPMforce_return) {
*HPMforce_return = false;
- return;
+ return retVal___;
}
}
{
- HPMHooks.source.itemdb.read_combos();
+ retVal___ = HPMHooks.source.itemdb.read_combodb_libconfig_sub(it, idx, source);
}
- if (HPMHooks.count.HP_itemdb_read_combos_post > 0) {
- void (*postHookFunc) (void);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_itemdb_read_combos_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_itemdb_read_combos_post[hIndex].func;
- postHookFunc();
+ if (HPMHooks.count.HP_itemdb_read_combodb_libconfig_sub_post > 0) {
+ bool (*postHookFunc) (bool retVal___, struct config_setting_t *it, int idx, const char *source);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_itemdb_read_combodb_libconfig_sub_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_itemdb_read_combodb_libconfig_sub_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, it, idx, source);
}
}
- return;
+ return retVal___;
}
int HP_itemdb_gendercheck(struct item_data *id) {
int hIndex = 0;
@@ -43135,6 +43152,87 @@ int HP_itemdb_addname_sub(union DBKey key, struct DBData *data, va_list ap) {
}
return retVal___;
}
+bool HP_itemdb_read_libconfig_lapineddukddak(void) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_itemdb_read_libconfig_lapineddukddak_pre > 0) {
+ bool (*preHookFunc) (void);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_itemdb_read_libconfig_lapineddukddak_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_itemdb_read_libconfig_lapineddukddak_pre[hIndex].func;
+ retVal___ = preHookFunc();
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.itemdb.read_libconfig_lapineddukddak();
+ }
+ if (HPMHooks.count.HP_itemdb_read_libconfig_lapineddukddak_post > 0) {
+ bool (*postHookFunc) (bool retVal___);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_itemdb_read_libconfig_lapineddukddak_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_itemdb_read_libconfig_lapineddukddak_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___);
+ }
+ }
+ return retVal___;
+}
+bool HP_itemdb_read_libconfig_lapineddukddak_sub(struct config_setting_t *it, const char *source) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_itemdb_read_libconfig_lapineddukddak_sub_pre > 0) {
+ bool (*preHookFunc) (struct config_setting_t **it, const char **source);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_itemdb_read_libconfig_lapineddukddak_sub_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_itemdb_read_libconfig_lapineddukddak_sub_pre[hIndex].func;
+ retVal___ = preHookFunc(&it, &source);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.itemdb.read_libconfig_lapineddukddak_sub(it, source);
+ }
+ if (HPMHooks.count.HP_itemdb_read_libconfig_lapineddukddak_sub_post > 0) {
+ bool (*postHookFunc) (bool retVal___, struct config_setting_t *it, const char *source);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_itemdb_read_libconfig_lapineddukddak_sub_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_itemdb_read_libconfig_lapineddukddak_sub_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, it, source);
+ }
+ }
+ return retVal___;
+}
+bool HP_itemdb_read_libconfig_lapineddukddak_sub_sources(struct config_setting_t *sources, struct item_data *data) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_itemdb_read_libconfig_lapineddukddak_sub_sources_pre > 0) {
+ bool (*preHookFunc) (struct config_setting_t **sources, struct item_data **data);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_itemdb_read_libconfig_lapineddukddak_sub_sources_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_itemdb_read_libconfig_lapineddukddak_sub_sources_pre[hIndex].func;
+ retVal___ = preHookFunc(&sources, &data);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.itemdb.read_libconfig_lapineddukddak_sub_sources(sources, data);
+ }
+ if (HPMHooks.count.HP_itemdb_read_libconfig_lapineddukddak_sub_sources_post > 0) {
+ bool (*postHookFunc) (bool retVal___, struct config_setting_t *sources, struct item_data *data);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_itemdb_read_libconfig_lapineddukddak_sub_sources_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_itemdb_read_libconfig_lapineddukddak_sub_sources_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, sources, data);
+ }
+ }
+ return retVal___;
+}
/* libconfig_interface */
int HP_libconfig_read(struct config_t *config, FILE *stream) {
int hIndex = 0;
@@ -47740,15 +47838,15 @@ void HP_map_deliddb(struct block_list *bl) {
}
return;
}
-struct map_session_data* HP_map_nick2sd(const char *nick) {
+struct map_session_data* HP_map_nick2sd(const char *nick, bool allow_partial) {
int hIndex = 0;
struct map_session_data* retVal___ = NULL;
if (HPMHooks.count.HP_map_nick2sd_pre > 0) {
- struct map_session_data* (*preHookFunc) (const char **nick);
+ struct map_session_data* (*preHookFunc) (const char **nick, bool *allow_partial);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_map_nick2sd_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_map_nick2sd_pre[hIndex].func;
- retVal___ = preHookFunc(&nick);
+ retVal___ = preHookFunc(&nick, &allow_partial);
}
if (*HPMforce_return) {
*HPMforce_return = false;
@@ -47756,13 +47854,13 @@ struct map_session_data* HP_map_nick2sd(const char *nick) {
}
}
{
- retVal___ = HPMHooks.source.map.nick2sd(nick);
+ retVal___ = HPMHooks.source.map.nick2sd(nick, allow_partial);
}
if (HPMHooks.count.HP_map_nick2sd_post > 0) {
- struct map_session_data* (*postHookFunc) (struct map_session_data* retVal___, const char *nick);
+ struct map_session_data* (*postHookFunc) (struct map_session_data* retVal___, const char *nick, bool allow_partial);
for (hIndex = 0; hIndex < HPMHooks.count.HP_map_nick2sd_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_map_nick2sd_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, nick);
+ retVal___ = postHookFunc(retVal___, nick, allow_partial);
}
}
return retVal___;
@@ -51154,6 +51252,39 @@ void HP_mob_reload(void) {
}
return;
}
+int HP_mob_reload_sub_mob(struct mob_data *md, va_list args) {
+ int hIndex = 0;
+ int retVal___ = 0;
+ if (HPMHooks.count.HP_mob_reload_sub_mob_pre > 0) {
+ int (*preHookFunc) (struct mob_data **md, va_list args);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_mob_reload_sub_mob_pre; hIndex++) {
+ va_list args___copy; va_copy(args___copy, args);
+ preHookFunc = HPMHooks.list.HP_mob_reload_sub_mob_pre[hIndex].func;
+ retVal___ = preHookFunc(&md, args___copy);
+ va_end(args___copy);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ va_list args___copy; va_copy(args___copy, args);
+ retVal___ = HPMHooks.source.mob.reload_sub_mob(md, args___copy);
+ va_end(args___copy);
+ }
+ if (HPMHooks.count.HP_mob_reload_sub_mob_post > 0) {
+ int (*postHookFunc) (int retVal___, struct mob_data *md, va_list args);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_mob_reload_sub_mob_post; hIndex++) {
+ va_list args___copy; va_copy(args___copy, args);
+ postHookFunc = HPMHooks.list.HP_mob_reload_sub_mob_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, md, args___copy);
+ va_end(args___copy);
+ }
+ }
+ return retVal___;
+}
struct mob_db* HP_mob_db(int index) {
int hIndex = 0;
struct mob_db* retVal___ = NULL;
@@ -57609,11 +57740,12 @@ void HP_npc_trader_update(int master) {
}
return;
}
-int HP_npc_market_buylist(struct map_session_data *sd, struct itemlist *item_list) {
+enum market_buy_result HP_npc_market_buylist(struct map_session_data *sd, struct itemlist *item_list) {
+/* Unknown return type 'enum market_buy_result'. Initializing to '0'. */
int hIndex = 0;
- int retVal___ = 0;
+ enum market_buy_result retVal___ = 0;
if (HPMHooks.count.HP_npc_market_buylist_pre > 0) {
- int (*preHookFunc) (struct map_session_data **sd, struct itemlist **item_list);
+ enum market_buy_result (*preHookFunc) (struct map_session_data **sd, struct itemlist **item_list);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_npc_market_buylist_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_npc_market_buylist_pre[hIndex].func;
@@ -57628,7 +57760,7 @@ int HP_npc_market_buylist(struct map_session_data *sd, struct itemlist *item_lis
retVal___ = HPMHooks.source.npc.market_buylist(sd, item_list);
}
if (HPMHooks.count.HP_npc_market_buylist_post > 0) {
- int (*postHookFunc) (int retVal___, struct map_session_data *sd, struct itemlist *item_list);
+ enum market_buy_result (*postHookFunc) (enum market_buy_result retVal___, struct map_session_data *sd, struct itemlist *item_list);
for (hIndex = 0; hIndex < HPMHooks.count.HP_npc_market_buylist_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_npc_market_buylist_post[hIndex].func;
retVal___ = postHookFunc(retVal___, sd, item_list);
@@ -58859,33 +58991,6 @@ int HP_party_send_message(struct map_session_data *sd, const char *mes) {
}
return retVal___;
}
-int HP_party_recv_message(int party_id, int account_id, const char *mes, int len) {
- int hIndex = 0;
- int retVal___ = 0;
- if (HPMHooks.count.HP_party_recv_message_pre > 0) {
- int (*preHookFunc) (int *party_id, int *account_id, const char **mes, int *len);
- *HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_party_recv_message_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_party_recv_message_pre[hIndex].func;
- retVal___ = preHookFunc(&party_id, &account_id, &mes, &len);
- }
- if (*HPMforce_return) {
- *HPMforce_return = false;
- return retVal___;
- }
- }
- {
- retVal___ = HPMHooks.source.party.recv_message(party_id, account_id, mes, len);
- }
- if (HPMHooks.count.HP_party_recv_message_post > 0) {
- int (*postHookFunc) (int retVal___, int party_id, int account_id, const char *mes, int len);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_party_recv_message_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_party_recv_message_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, party_id, account_id, mes, len);
- }
- }
- return retVal___;
-}
int HP_party_skill_check(struct map_session_data *sd, int party_id, uint16 skill_id, uint16 skill_lv) {
int hIndex = 0;
int retVal___ = 0;
@@ -61380,11 +61485,11 @@ int HP_pc_updateweightstatus(struct map_session_data *sd) {
}
return retVal___;
}
-int HP_pc_addautobonus(struct s_autobonus *bonus, char max, const char *bonus_script, short rate, unsigned int dur, short atk_type, const char *o_script, unsigned short pos, bool onskill) {
+int HP_pc_addautobonus(struct s_autobonus *bonus, char max, const char *bonus_script, short rate, unsigned int dur, short atk_type, const char *o_script, unsigned int pos, bool onskill) {
int hIndex = 0;
int retVal___ = 0;
if (HPMHooks.count.HP_pc_addautobonus_pre > 0) {
- int (*preHookFunc) (struct s_autobonus **bonus, char *max, const char **bonus_script, short *rate, unsigned int *dur, short *atk_type, const char **o_script, unsigned short *pos, bool *onskill);
+ int (*preHookFunc) (struct s_autobonus **bonus, char *max, const char **bonus_script, short *rate, unsigned int *dur, short *atk_type, const char **o_script, unsigned int *pos, bool *onskill);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_pc_addautobonus_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_pc_addautobonus_pre[hIndex].func;
@@ -61399,7 +61504,7 @@ int HP_pc_addautobonus(struct s_autobonus *bonus, char max, const char *bonus_sc
retVal___ = HPMHooks.source.pc.addautobonus(bonus, max, bonus_script, rate, dur, atk_type, o_script, pos, onskill);
}
if (HPMHooks.count.HP_pc_addautobonus_post > 0) {
- int (*postHookFunc) (int retVal___, struct s_autobonus *bonus, char max, const char *bonus_script, short rate, unsigned int dur, short atk_type, const char *o_script, unsigned short pos, bool onskill);
+ int (*postHookFunc) (int retVal___, struct s_autobonus *bonus, char max, const char *bonus_script, short rate, unsigned int dur, short atk_type, const char *o_script, unsigned int pos, bool onskill);
for (hIndex = 0; hIndex < HPMHooks.count.HP_pc_addautobonus_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_pc_addautobonus_post[hIndex].func;
retVal___ = postHookFunc(retVal___, bonus, max, bonus_script, rate, dur, atk_type, o_script, pos, onskill);
@@ -66224,6 +66329,33 @@ int HP_pc_have_magnifier(struct map_session_data *sd) {
}
return retVal___;
}
+int HP_pc_have_item_chain(struct map_session_data *sd, unsigned short chain_id) {
+ int hIndex = 0;
+ int retVal___ = 0;
+ if (HPMHooks.count.HP_pc_have_item_chain_pre > 0) {
+ int (*preHookFunc) (struct map_session_data **sd, unsigned short *chain_id);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_pc_have_item_chain_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_pc_have_item_chain_pre[hIndex].func;
+ retVal___ = preHookFunc(&sd, &chain_id);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.pc.have_item_chain(sd, chain_id);
+ }
+ if (HPMHooks.count.HP_pc_have_item_chain_post > 0) {
+ int (*postHookFunc) (int retVal___, struct map_session_data *sd, unsigned short chain_id);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_pc_have_item_chain_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_pc_have_item_chain_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, sd, chain_id);
+ }
+ }
+ return retVal___;
+}
bool HP_pc_process_chat_message(struct map_session_data *sd, const char *message) {
int hIndex = 0;
bool retVal___ = false;
@@ -66251,6 +66383,66 @@ bool HP_pc_process_chat_message(struct map_session_data *sd, const char *message
}
return retVal___;
}
+int HP_pc_wis_message_to_gm(const char *sender_name, int permission, const char *message) {
+ int hIndex = 0;
+ int retVal___ = 0;
+ if (HPMHooks.count.HP_pc_wis_message_to_gm_pre > 0) {
+ int (*preHookFunc) (const char **sender_name, int *permission, const char **message);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_pc_wis_message_to_gm_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_pc_wis_message_to_gm_pre[hIndex].func;
+ retVal___ = preHookFunc(&sender_name, &permission, &message);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.pc.wis_message_to_gm(sender_name, permission, message);
+ }
+ if (HPMHooks.count.HP_pc_wis_message_to_gm_post > 0) {
+ int (*postHookFunc) (int retVal___, const char *sender_name, int permission, const char *message);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_pc_wis_message_to_gm_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_pc_wis_message_to_gm_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, sender_name, permission, message);
+ }
+ }
+ return retVal___;
+}
+int HP_pc_wis_message_to_gm_sub(struct map_session_data *sd, va_list va) {
+ int hIndex = 0;
+ int retVal___ = 0;
+ if (HPMHooks.count.HP_pc_wis_message_to_gm_sub_pre > 0) {
+ int (*preHookFunc) (struct map_session_data **sd, va_list va);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_pc_wis_message_to_gm_sub_pre; hIndex++) {
+ va_list va___copy; va_copy(va___copy, va);
+ preHookFunc = HPMHooks.list.HP_pc_wis_message_to_gm_sub_pre[hIndex].func;
+ retVal___ = preHookFunc(&sd, va___copy);
+ va_end(va___copy);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ va_list va___copy; va_copy(va___copy, va);
+ retVal___ = HPMHooks.source.pc.wis_message_to_gm_sub(sd, va___copy);
+ va_end(va___copy);
+ }
+ if (HPMHooks.count.HP_pc_wis_message_to_gm_sub_post > 0) {
+ int (*postHookFunc) (int retVal___, struct map_session_data *sd, va_list va);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_pc_wis_message_to_gm_sub_post; hIndex++) {
+ va_list va___copy; va_copy(va___copy, va);
+ postHookFunc = HPMHooks.list.HP_pc_wis_message_to_gm_sub_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, sd, va___copy);
+ va_end(va___copy);
+ }
+ }
+ return retVal___;
+}
void HP_pc_check_supernovice_call(struct map_session_data *sd, const char *message) {
int hIndex = 0;
if (HPMHooks.count.HP_pc_check_supernovice_call_pre > 0) {
@@ -74695,6 +74887,84 @@ void HP_script_run_item_unequip_script(struct map_session_data *sd, struct item_
}
return;
}
+void HP_script_run_item_rental_end_script(struct map_session_data *sd, struct item_data *data, int oid) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_script_run_item_rental_end_script_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd, struct item_data **data, int *oid);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_script_run_item_rental_end_script_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_script_run_item_rental_end_script_pre[hIndex].func;
+ preHookFunc(&sd, &data, &oid);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.script.run_item_rental_end_script(sd, data, oid);
+ }
+ if (HPMHooks.count.HP_script_run_item_rental_end_script_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd, struct item_data *data, int oid);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_script_run_item_rental_end_script_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_script_run_item_rental_end_script_post[hIndex].func;
+ postHookFunc(sd, data, oid);
+ }
+ }
+ return;
+}
+void HP_script_run_item_rental_start_script(struct map_session_data *sd, struct item_data *data, int oid) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_script_run_item_rental_start_script_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd, struct item_data **data, int *oid);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_script_run_item_rental_start_script_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_script_run_item_rental_start_script_pre[hIndex].func;
+ preHookFunc(&sd, &data, &oid);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.script.run_item_rental_start_script(sd, data, oid);
+ }
+ if (HPMHooks.count.HP_script_run_item_rental_start_script_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd, struct item_data *data, int oid);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_script_run_item_rental_start_script_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_script_run_item_rental_start_script_post[hIndex].func;
+ postHookFunc(sd, data, oid);
+ }
+ }
+ return;
+}
+void HP_script_run_item_lapineddukddak_script(struct map_session_data *sd, struct item_data *data, int oid) {
+ int hIndex = 0;
+ if (HPMHooks.count.HP_script_run_item_lapineddukddak_script_pre > 0) {
+ void (*preHookFunc) (struct map_session_data **sd, struct item_data **data, int *oid);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_script_run_item_lapineddukddak_script_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_script_run_item_lapineddukddak_script_pre[hIndex].func;
+ preHookFunc(&sd, &data, &oid);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.script.run_item_lapineddukddak_script(sd, data, oid);
+ }
+ if (HPMHooks.count.HP_script_run_item_lapineddukddak_script_post > 0) {
+ void (*postHookFunc) (struct map_session_data *sd, struct item_data *data, int oid);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_script_run_item_lapineddukddak_script_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_script_run_item_lapineddukddak_script_post[hIndex].func;
+ postHookFunc(sd, data, oid);
+ }
+ }
+ return;
+}
/* searchstore_interface */
bool HP_searchstore_open(struct map_session_data *sd, unsigned int uses, unsigned short effect) {
int hIndex = 0;
@@ -86620,15 +86890,15 @@ bool HP_status_readdb_sizefix(char *fields[], int columns, int current) {
}
return retVal___;
}
-bool HP_status_readdb_scconfig(char *fields[], int columns, int current) {
+bool HP_status_read_scdb_libconfig(void) {
int hIndex = 0;
bool retVal___ = false;
- if (HPMHooks.count.HP_status_readdb_scconfig_pre > 0) {
- bool (*preHookFunc) (char **fields[], int *columns, int *current);
+ if (HPMHooks.count.HP_status_read_scdb_libconfig_pre > 0) {
+ bool (*preHookFunc) (void);
*HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_status_readdb_scconfig_pre; hIndex++) {
- preHookFunc = HPMHooks.list.HP_status_readdb_scconfig_pre[hIndex].func;
- retVal___ = preHookFunc(&fields, &columns, &current);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_status_read_scdb_libconfig_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_status_read_scdb_libconfig_pre[hIndex].func;
+ retVal___ = preHookFunc();
}
if (*HPMforce_return) {
*HPMforce_return = false;
@@ -86636,13 +86906,94 @@ bool HP_status_readdb_scconfig(char *fields[], int columns, int current) {
}
}
{
- retVal___ = HPMHooks.source.status.readdb_scconfig(fields, columns, current);
+ retVal___ = HPMHooks.source.status.read_scdb_libconfig();
}
- if (HPMHooks.count.HP_status_readdb_scconfig_post > 0) {
- bool (*postHookFunc) (bool retVal___, char *fields[], int columns, int current);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_status_readdb_scconfig_post; hIndex++) {
- postHookFunc = HPMHooks.list.HP_status_readdb_scconfig_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, fields, columns, current);
+ if (HPMHooks.count.HP_status_read_scdb_libconfig_post > 0) {
+ bool (*postHookFunc) (bool retVal___);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_status_read_scdb_libconfig_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_status_read_scdb_libconfig_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___);
+ }
+ }
+ return retVal___;
+}
+bool HP_status_read_scdb_libconfig_sub(struct config_setting_t *it, int idx, const char *source) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_status_read_scdb_libconfig_sub_pre > 0) {
+ bool (*preHookFunc) (struct config_setting_t **it, int *idx, const char **source);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_status_read_scdb_libconfig_sub_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_status_read_scdb_libconfig_sub_pre[hIndex].func;
+ retVal___ = preHookFunc(&it, &idx, &source);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.status.read_scdb_libconfig_sub(it, idx, source);
+ }
+ if (HPMHooks.count.HP_status_read_scdb_libconfig_sub_post > 0) {
+ bool (*postHookFunc) (bool retVal___, struct config_setting_t *it, int idx, const char *source);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_status_read_scdb_libconfig_sub_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_status_read_scdb_libconfig_sub_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, it, idx, source);
+ }
+ }
+ return retVal___;
+}
+bool HP_status_read_scdb_libconfig_sub_flag(struct config_setting_t *it, int type, const char *source) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_status_read_scdb_libconfig_sub_flag_pre > 0) {
+ bool (*preHookFunc) (struct config_setting_t **it, int *type, const char **source);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_status_read_scdb_libconfig_sub_flag_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_status_read_scdb_libconfig_sub_flag_pre[hIndex].func;
+ retVal___ = preHookFunc(&it, &type, &source);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.status.read_scdb_libconfig_sub_flag(it, type, source);
+ }
+ if (HPMHooks.count.HP_status_read_scdb_libconfig_sub_flag_post > 0) {
+ bool (*postHookFunc) (bool retVal___, struct config_setting_t *it, int type, const char *source);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_status_read_scdb_libconfig_sub_flag_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_status_read_scdb_libconfig_sub_flag_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, it, type, source);
+ }
+ }
+ return retVal___;
+}
+bool HP_status_read_scdb_libconfig_sub_flag_additional(struct config_setting_t *it, int type, const char *source) {
+ int hIndex = 0;
+ bool retVal___ = false;
+ if (HPMHooks.count.HP_status_read_scdb_libconfig_sub_flag_additional_pre > 0) {
+ bool (*preHookFunc) (struct config_setting_t **it, int *type, const char **source);
+ *HPMforce_return = false;
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_status_read_scdb_libconfig_sub_flag_additional_pre; hIndex++) {
+ preHookFunc = HPMHooks.list.HP_status_read_scdb_libconfig_sub_flag_additional_pre[hIndex].func;
+ retVal___ = preHookFunc(&it, &type, &source);
+ }
+ if (*HPMforce_return) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.status.read_scdb_libconfig_sub_flag_additional(it, type, source);
+ }
+ if (HPMHooks.count.HP_status_read_scdb_libconfig_sub_flag_additional_post > 0) {
+ bool (*postHookFunc) (bool retVal___, struct config_setting_t *it, int type, const char *source);
+ for (hIndex = 0; hIndex < HPMHooks.count.HP_status_read_scdb_libconfig_sub_flag_additional_post; hIndex++) {
+ postHookFunc = HPMHooks.list.HP_status_read_scdb_libconfig_sub_flag_additional_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, it, type, source);
}
}
return retVal___;
diff --git a/src/plugins/constdb2doc.c b/src/plugins/constdb2doc.c
index 3f681ea1a..ebaf7a833 100644
--- a/src/plugins/constdb2doc.c
+++ b/src/plugins/constdb2doc.c
@@ -22,7 +22,8 @@
/// db/constants.conf -> doc/constants.md generator plugin
#include "common/hercules.h"
-//#include "common/memmgr.h"
+#include "common/db.h"
+#include "common/memmgr.h"
#include "common/nullpo.h"
#include "common/strlib.h"
#include "map/itemdb.h"
@@ -143,17 +144,26 @@ struct item_data *constdb2doc_itemdb_search(int nameid)
void constdb2doc_itemdb(void)
{
- int i;
-
nullpo_retv(out_fp);
fprintf(out_fp, "## Items (db/"DBPATH"item_db.conf)\n");
- for (i = 0; i < ARRAYLENGTH(itemdb->array); i++) {
+ for (int i = 0; i < ARRAYLENGTH(itemdb->array); i++) {
struct item_data *id = constdb2doc_itemdb_search(i);
if (id == NULL || id->name[0] == '\0')
continue;
fprintf(out_fp, "- `%s`: %d\n", id->name, id->nameid);
}
+
+ if (db_size(itemdb->other) > 0) {
+ struct DBIterator *iter = db_iterator(itemdb->other);
+ for (struct item_data *itd = dbi_first(iter); dbi_exists(iter); itd = dbi_next(iter)) {
+ if (itd == &itemdb->dummy)
+ continue;
+ fprintf(out_fp, "- `%s`: %d\n", itd->name, itd->nameid);
+ }
+ dbi_destroy(iter);
+ }
+
fprintf(out_fp, "\n");
}
diff --git a/tools/configconverter.pl b/tools/configconverter.pl
index dc511aaef..20f5f4cfb 100755
--- a/tools/configconverter.pl
+++ b/tools/configconverter.pl
@@ -554,7 +554,6 @@ my @defaults = (
guild_exp_limit => {parse => \&parsecfg_int, print => \&printcfg_int, path => "guild:", default => 50},
guild_max_castles => {parse => \&parsecfg_int, print => \&printcfg_int, path => "guild:", default => 0},
guild_skill_relog_delay => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "guild:", default => "false"},
- castle_defense_rate => {parse => \&parsecfg_int, print => \&printcfg_int, path => "guild:", default => 100},
gvg_flee_penalty => {parse => \&parsecfg_int, print => \&printcfg_int, path => "guild:", default => 20},
require_glory_guild => {parse => \&parsecfg_bool, print => \&printcfg_bool, path => "guild:", default => "false"},
max_guild_alliance => {parse => \&parsecfg_int, print => \&printcfg_int, path => "guild:", default => 3},
diff --git a/tools/itemcombodbconverter.py b/tools/itemcombodbconverter.py
new file mode 100644
index 000000000..ae4deeba3
--- /dev/null
+++ b/tools/itemcombodbconverter.py
@@ -0,0 +1,112 @@
+#!/usr/bin/env python3
+# -*- coding: utf8 -*-
+#
+# This file is part of Hercules.
+# http://herc.ws - http://github.com/HerculesWS/Hercules
+#
+# Copyright (C) 2019 Hercules Dev Team
+# Copyright (C) 2019 Asheraf
+#
+# Hercules is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+
+import argparse
+import json
+import re
+from utils import libconf
+import utils.common as Tools
+
+
+def ConvertFile(args):
+ print(r'''//================= Hercules Database =====================================
+//= _ _ _
+//= | | | | | |
+//= | |_| | ___ _ __ ___ _ _| | ___ ___
+//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __|
+//= | | | | __/ | | (__| |_| | | __/\__ \
+//= \_| |_/\___|_| \___|\__,_|_|\___||___/
+//================= License ===============================================
+//= This file is part of Hercules.
+//= http://herc.ws - http://github.com/HerculesWS/Hercules
+//=
+//= Copyright (C) 2019 Hercules Dev Team
+//=
+//= Hercules is free software: you can redistribute it and/or modify
+//= it under the terms of the GNU General Public License as published by
+//= the Free Software Foundation, either version 3 of the License, or
+//= (at your option) any later version.
+//=
+//= This program is distributed in the hope that it will be useful,
+//= but WITHOUT ANY WARRANTY; without even the implied warranty of
+//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+//= GNU General Public License for more details.
+//=
+//= You should have received a copy of the GNU General Public License
+//= along with this program. If not, see <http://www.gnu.org/licenses/>.
+//================= Description ===========================================
+// Configurations file for status effects
+//=========================================================================
+
+combo_db: (
+/**************************************************************************
+ ************* Entry structure ********************************************
+ **************************************************************************
+{
+ // ================ Mandatory fields ===============================
+ Items: ["item_list"] (string, array) list of items
+ Script: <"
+ Script
+ (it can be multi-line)
+ ">
+}
+**************************************************************************/''')
+ ItemDB = Tools.LoadDBConsts('item_db', f'{args.mode}', '../')
+ with open (f'../db/{args.mode}/item_combo_db.txt') as dbfile:
+ line = 0
+ for entry in dbfile:
+ line = line + 1
+ if not entry.strip() or entry.startswith('//'):
+ continue
+ m = re.search(r'(^[0-9:]+),\{(.*)\}$', entry)
+ if not m:
+ print(f'Error: Invalid pattern in entry {entry}, line {line}, aborting..')
+ exit()
+
+ items_list = m.group(1).split(':')
+ script = m.group(2)
+ for item in range(len(items_list)):
+ if int(items_list[item]) not in ItemDB:
+ print(f'Error: invalid item {item} found in line {line}, aborting..')
+ exit()
+ items_list[item] = ItemDB[int(items_list[item])]
+
+ if args.enable_jsbeautifier:
+ import jsbeautifier
+ opts = jsbeautifier.default_options()
+ opts.indent_with_tabs = True
+ opts.indent_level = 2
+ script = jsbeautifier.beautify(script, opts)
+ print(
+f'''{{
+ Items: {json.dumps(items_list)}
+ Script: <"\n{script}\n\t">
+}},''')
+ print(')')
+
+if __name__ == '__main__':
+ parser = argparse.ArgumentParser(description='Convert item combo db to new format')
+ parser.add_argument('--mode', type=str, dest='mode', help='Define usage mode re/pre-re.')
+ parser.add_argument('--enable-jsbeautifier', type=bool, dest='enable_jsbeautifier', help='Use jsbeautifier to auto format script fields.')
+ parsed_args = parser.parse_args()
+ ConvertFile(parsed_args)
diff --git a/tools/scconfigconverter.py b/tools/scconfigconverter.py
new file mode 100644
index 000000000..9216fa3b5
--- /dev/null
+++ b/tools/scconfigconverter.py
@@ -0,0 +1,105 @@
+#!/usr/bin/env python
+# -*- coding: utf8 -*-
+#
+# This file is part of Hercules.
+# http://herc.ws - http://github.com/HerculesWS/Hercules
+#
+# Copyright (C) 2019 Hercules Dev Team
+# Copyright (C) 2019 Asheraf
+#
+# Hercules is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+
+import csv
+
+with open('../db/sc_config.txt') as dbfile:
+ sc_config = csv.reader(dbfile, delimiter=',')
+
+ print(r'''//================= Hercules Database =====================================
+//= _ _ _
+//= | | | | | |
+//= | |_| | ___ _ __ ___ _ _| | ___ ___
+//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __|
+//= | | | | __/ | | (__| |_| | | __/\__ \
+//= \_| |_/\___|_| \___|\__,_|_|\___||___/
+//================= License ===============================================
+//= This file is part of Hercules.
+//= http://herc.ws - http://github.com/HerculesWS/Hercules
+//=
+//= Copyright (C) 2019 Hercules Dev Team
+//=
+//= Hercules is free software: you can redistribute it and/or modify
+//= it under the terms of the GNU General Public License as published by
+//= the Free Software Foundation, either version 3 of the License, or
+//= (at your option) any later version.
+//=
+//= This program is distributed in the hope that it will be useful,
+//= but WITHOUT ANY WARRANTY; without even the implied warranty of
+//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+//= GNU General Public License for more details.
+//=
+//= You should have received a copy of the GNU General Public License
+//= along with this program. If not, see <http://www.gnu.org/licenses/>.
+//================= Description ===========================================
+// Configurations file for status effects
+//=========================================================================
+''')
+ print('''/**************************************************************************
+ ************* Entry structure ********************************************
+ **************************************************************************
+SC_TYPE: {
+ // ================ Optional fields ===============================
+ Visible: (bool) SC can be visible for all players
+ Flags: {
+ NoDeathReset: (bool) SC cannot be removed by death.
+ NoSave: (bool) SC cannot be saved.
+ NoDispelReset: (bool) SC cannot be reset by dispell.
+ NoClearanceReset: (bool) SC cannot be reset by clearance.
+ Buff: (bool) SC considered as buff and be removed by Hermode and etc.
+ Debuff: (bool) SC considered as debuff and be removed by Gospel and etc.
+ NoMadoReset: (bool) SC cannot be reset when MADO Gear is taken off.
+ NoAllReset: (bool) SC cannot be reset by 'sc_end SC_ALL' and status change clear.
+ }
+}
+**************************************************************************/''')
+ flags = [
+ ('NoDeathReset', 1),
+ ('NoSave', 2),
+ ('NoDispelReset', 4),
+ ('NoClearanceReset', 8),
+ ('Buff', 16),
+ ('Debuff', 32),
+ ('NoMadoReset', 64),
+ ('NoAllReset', 128)
+ ]
+
+ for sc in sc_config:
+ if len(sc) != 2 or sc[0].startswith('//'):
+ continue
+ value = int(sc[1])
+ print('{}: {{'.format(sc[0]))
+ if value & 256:
+ print('\tVisible: true')
+ value &= ~256;
+
+ print('\tFlags: {')
+ for flag in flags:
+ if value & flag[1]:
+ print('\t\t{}: true'.format(flag[0]))
+ value &= ~flag[1];
+ if value != 0:
+ print('Error: invalid value ({}) for status ({}), aborting.'.format(int(sc[1]), sc[0]))
+ exit()
+ print('\t}')
+ print('}')
diff --git a/tools/utils/common.py b/tools/utils/common.py
index acceb9b30..06695751a 100644
--- a/tools/utils/common.py
+++ b/tools/utils/common.py
@@ -21,7 +21,11 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import io
-import libconf as libconf
+import sys
+if sys.version_info >= (3, 0):
+ from utils import libconf as libconf
+else:
+ import libconf as libconf
import os.path
def LoadDBConsts(DBname, mode, serverpath):
diff --git a/vcproj-12/char-server.vcxproj b/vcproj-16/char-server.vcxproj
index 284f38239..fd53a34ad 100644
--- a/vcproj-12/char-server.vcxproj
+++ b/vcproj-16/char-server.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="16.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -14,18 +14,19 @@
<ProjectGuid>{D356871D-58E1-450B-967A-E4E9646175AF}</ProjectGuid>
<RootNamespace>char-server</RootNamespace>
<Keyword>Win32Proj</Keyword>
+ <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
- <PlatformToolset>v120</PlatformToolset>
+ <PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
+ <PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
@@ -76,7 +77,6 @@
<AdditionalDependencies>libcmtd.lib;oldnames.lib;ws2_32.lib;libmysql.lib;zdll.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>$(OutDir)$(ProjectName).exe</OutputFile>
<AdditionalLibraryDirectories>..\3rdparty\mysql\lib;..\3rdparty\zlib\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>$(OutDir)$(ProjectName).pdb</ProgramDatabaseFile>
@@ -115,7 +115,6 @@
<AdditionalDependencies>libcmt.lib;oldnames.lib;ws2_32.lib;libmysql.lib;zdll.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>$(OutDir)$(ProjectName).exe</OutputFile>
<AdditionalLibraryDirectories>..\3rdparty\mysql\lib;..\3rdparty\zlib\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>$(OutDir)$(ProjectName).pdb</ProgramDatabaseFile>
diff --git a/vcproj-12/char-server.vcxproj.filters b/vcproj-16/char-server.vcxproj.filters
index ab023a77f..ab023a77f 100644
--- a/vcproj-12/char-server.vcxproj.filters
+++ b/vcproj-16/char-server.vcxproj.filters
diff --git a/vcproj-12/login-server.vcxproj b/vcproj-16/login-server.vcxproj
index 325fe53c8..b5137bf29 100644
--- a/vcproj-12/login-server.vcxproj
+++ b/vcproj-16/login-server.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="16.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -14,18 +14,19 @@
<ProjectGuid>{D356871D-58E1-450B-967A-E5E9646175AF}</ProjectGuid>
<RootNamespace>login-server</RootNamespace>
<Keyword>Win32Proj</Keyword>
+ <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
- <PlatformToolset>v120</PlatformToolset>
+ <PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
+ <PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
@@ -76,7 +77,6 @@
<AdditionalDependencies>libcmtd.lib;oldnames.lib;ws2_32.lib;libmysql.lib;zdll.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>$(OutDir)$(ProjectName).exe</OutputFile>
<AdditionalLibraryDirectories>..\3rdparty\mysql\lib;..\3rdparty\zlib\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>$(OutDir)$(ProjectName).pdb</ProgramDatabaseFile>
@@ -119,7 +119,6 @@
<AdditionalDependencies>libcmt.lib;oldnames.lib;ws2_32.lib;libmysql.lib;zdll.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>$(OutDir)$(ProjectName).exe</OutputFile>
<AdditionalLibraryDirectories>..\3rdparty\mysql\lib;..\3rdparty\zlib\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>$(OutDir)$(ProjectName).pdb</ProgramDatabaseFile>
diff --git a/vcproj-12/login-server.vcxproj.filters b/vcproj-16/login-server.vcxproj.filters
index 301950f0d..301950f0d 100644
--- a/vcproj-12/login-server.vcxproj.filters
+++ b/vcproj-16/login-server.vcxproj.filters
diff --git a/vcproj-12/map-server.vcxproj b/vcproj-16/map-server.vcxproj
index 34f55be49..8d84af347 100644
--- a/vcproj-12/map-server.vcxproj
+++ b/vcproj-16/map-server.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="16.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -14,18 +14,19 @@
<ProjectGuid>{D356871D-58E1-450B-967A-E6E9646175AF}</ProjectGuid>
<RootNamespace>map-server</RootNamespace>
<Keyword>Win32Proj</Keyword>
+ <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
- <PlatformToolset>v120</PlatformToolset>
+ <PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
+ <PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
@@ -75,7 +76,6 @@
<AdditionalDependencies>libcmtd.lib;oldnames.lib;ws2_32.lib;libmysql.lib;zdll.lib;pcre.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>$(OutDir)$(ProjectName).exe</OutputFile>
<AdditionalLibraryDirectories>..\3rdparty\mysql\lib;..\3rdparty\zlib\lib;..\3rdparty\pcre\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>$(OutDir)$(ProjectName).pdb</ProgramDatabaseFile>
@@ -114,7 +114,6 @@
<AdditionalDependencies>libcmt.lib;oldnames.lib;ws2_32.lib;libmysql.lib;zdll.lib;pcre.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>$(OutDir)$(ProjectName).exe</OutputFile>
<AdditionalLibraryDirectories>..\3rdparty\mysql\lib;..\3rdparty\zlib\lib;..\3rdparty\pcre\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>$(OutDir)$(ProjectName).pdb</ProgramDatabaseFile>
diff --git a/vcproj-12/map-server.vcxproj.filters b/vcproj-16/map-server.vcxproj.filters
index aae670525..aae670525 100644
--- a/vcproj-12/map-server.vcxproj.filters
+++ b/vcproj-16/map-server.vcxproj.filters
diff --git a/vcproj-12/plugin-HPMHooking_char.vcxproj b/vcproj-16/plugin-HPMHooking_char.vcxproj
index 016d85c6f..22cd0ea42 100644
--- a/vcproj-12/plugin-HPMHooking_char.vcxproj
+++ b/vcproj-16/plugin-HPMHooking_char.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="16.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -15,17 +15,18 @@
<RootNamespace>plugin-HPMHooking_char</RootNamespace>
<Keyword>Win32Proj</Keyword>
<ProjectName>plugin-HPMHooking_char</ProjectName>
+ <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
+ <PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
+ <PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
diff --git a/vcproj-12/plugin-HPMHooking_login.vcxproj b/vcproj-16/plugin-HPMHooking_login.vcxproj
index 2b8f56cbf..9e3c872c6 100644
--- a/vcproj-12/plugin-HPMHooking_login.vcxproj
+++ b/vcproj-16/plugin-HPMHooking_login.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="16.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -15,17 +15,18 @@
<RootNamespace>plugin-HPMHooking_login</RootNamespace>
<Keyword>Win32Proj</Keyword>
<ProjectName>plugin-HPMHooking_login</ProjectName>
+ <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
+ <PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
+ <PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
diff --git a/vcproj-12/plugin-HPMHooking_map.vcxproj b/vcproj-16/plugin-HPMHooking_map.vcxproj
index 0fca64016..a4616b15e 100644
--- a/vcproj-12/plugin-HPMHooking_map.vcxproj
+++ b/vcproj-16/plugin-HPMHooking_map.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="16.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -15,17 +15,18 @@
<RootNamespace>plugin-HPMHooking_map</RootNamespace>
<Keyword>Win32Proj</Keyword>
<ProjectName>plugin-HPMHooking_map</ProjectName>
+ <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
+ <PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
+ <PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
diff --git a/vcproj-12/plugin-sample.vcxproj b/vcproj-16/plugin-sample.vcxproj
index ea269b1e7..c78972666 100644
--- a/vcproj-12/plugin-sample.vcxproj
+++ b/vcproj-16/plugin-sample.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="16.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -15,17 +15,18 @@
<RootNamespace>plugin-sample</RootNamespace>
<Keyword>Win32Proj</Keyword>
<ProjectName>plugin-sample</ProjectName>
+ <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
+ <PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
+ <PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">